xref: /netbsd-src/sys/dev/ic/rtsxvar.h (revision ddb8613d0ae9c5f67eb6f1226aef7fd3e013b950)
1*ddb8613dSmaya /*	$NetBSD: rtsxvar.h,v 1.3 2018/04/24 18:34:30 maya Exp $	*/
28fdb68d7Snonaka /*	$OpenBSD: rtsxvar.h,v 1.3 2014/08/19 17:55:03 phessler Exp $	*/
3c3077021Snonaka 
4c3077021Snonaka /*
5c3077021Snonaka  * Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org>
6c3077021Snonaka  * Copyright (c) 2012 Stefan Sperling <stsp@openbsd.org>
7c3077021Snonaka  *
8c3077021Snonaka  * Permission to use, copy, modify, and distribute this software for any
9c3077021Snonaka  * purpose with or without fee is hereby granted, provided that the above
10c3077021Snonaka  * copyright notice and this permission notice appear in all copies.
11c3077021Snonaka  *
12c3077021Snonaka  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13c3077021Snonaka  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14c3077021Snonaka  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15c3077021Snonaka  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16c3077021Snonaka  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17c3077021Snonaka  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18c3077021Snonaka  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19c3077021Snonaka  */
20c3077021Snonaka 
21c3077021Snonaka #ifndef _RTSXVAR_H_
22c3077021Snonaka #define _RTSXVAR_H_
23c3077021Snonaka 
24c3077021Snonaka #include <sys/bus.h>
25c3077021Snonaka #include <sys/device.h>
26c3077021Snonaka #include <sys/pmf.h>
27c3077021Snonaka #include <sys/mutex.h>
28c3077021Snonaka #include <sys/condvar.h>
29c3077021Snonaka 
30c3077021Snonaka /* Number of registers to save for suspend/resume in terms of their ranges. */
31c3077021Snonaka #define RTSX_NREG ((0XFDAE - 0XFDA0) + (0xFD69 - 0xFD32) + (0xFE34 - 0xFE20))
32c3077021Snonaka 
33c3077021Snonaka struct rtsx_softc {
34c3077021Snonaka 	device_t	sc_dev;
35c3077021Snonaka 
36c3077021Snonaka 	device_t	sc_sdmmc;	/* generic SD/MMC device */
37c3077021Snonaka 
38c3077021Snonaka 	bus_space_tag_t	sc_iot;		/* host register set tag */
39c3077021Snonaka 	bus_space_handle_t sc_ioh;	/* host register set handle */
40c3077021Snonaka 	bus_size_t      sc_iosize;
41c3077021Snonaka 	bus_dma_tag_t	sc_dmat;	/* DMA tag from attachment driver */
42c3077021Snonaka 	bus_dmamap_t	sc_dmap_cmd;	/* DMA map for command transfer */
43c3077021Snonaka 
44c3077021Snonaka 	struct kmutex	sc_host_mtx;
45c3077021Snonaka 	struct kmutex	sc_intr_mtx;
46c3077021Snonaka 	struct kcondvar sc_intr_cv;
47c3077021Snonaka 
48c3077021Snonaka 	uint32_t 	sc_intr_status;	/* soft interrupt status */
49c3077021Snonaka 
50c3077021Snonaka 	uint8_t		sc_regs[RTSX_NREG]; /* host controller state */
51c3077021Snonaka 	uint32_t	sc_regs4[6];	/* host controller state */
52c3077021Snonaka 
53c3077021Snonaka 	uint32_t	sc_flags;
54c3077021Snonaka #define	RTSX_F_CARD_PRESENT	__BIT(0)
55c3077021Snonaka #define	RTSX_F_SDIO_SUPPORT	__BIT(1)
56c3077021Snonaka #define	RTSX_F_5209		__BIT(2)
578fdb68d7Snonaka #define	RTSX_F_5227		__BIT(3)
588fdb68d7Snonaka #define	RTSX_F_5229		__BIT(4)
598fdb68d7Snonaka #define	RTSX_F_5229_TYPE_C	__BIT(5)
60*ddb8613dSmaya #define	RTSX_F_525A		__BIT(6)
61*ddb8613dSmaya #define	RTSX_F_8402		__BIT(7)
62*ddb8613dSmaya #define	RTSX_F_8411		__BIT(8)
63*ddb8613dSmaya #define	RTSX_F_8411B		__BIT(9)
64*ddb8613dSmaya #define	RTSX_F_8411B_QFN48	__BIT(10)
65c3077021Snonaka };
66c3077021Snonaka 
678fdb68d7Snonaka #define	RTSX_IS_RTS5209(sc)	(((sc)->sc_flags & RTSX_F_5209) == RTSX_F_5209)
688fdb68d7Snonaka #define	RTSX_IS_RTS5227(sc)	(((sc)->sc_flags & RTSX_F_5227) == RTSX_F_5227)
698fdb68d7Snonaka #define	RTSX_IS_RTS5229(sc)	(((sc)->sc_flags & RTSX_F_5229) == RTSX_F_5229)
708fdb68d7Snonaka #define	RTSX_IS_RTS5229_TYPE_C(sc)					\
718fdb68d7Snonaka 	(((sc)->sc_flags & (RTSX_F_5229|RTSX_F_5229_TYPE_C)) ==		\
728fdb68d7Snonaka 	                   (RTSX_F_5229|RTSX_F_5229_TYPE_C))
73*ddb8613dSmaya #define	RTSX_IS_RTS525A(sc)	(((sc)->sc_flags & RTSX_F_525A) == RTSX_F_525A)
748fdb68d7Snonaka #define	RTSX_IS_RTL8402(sc)	(((sc)->sc_flags & RTSX_F_8402) == RTSX_F_8402)
758fdb68d7Snonaka #define	RTSX_IS_RTL8411(sc)	(((sc)->sc_flags & RTSX_F_8411) == RTSX_F_8411)
768fdb68d7Snonaka #define	RTSX_IS_RTL8411B(sc)						\
778fdb68d7Snonaka 	(((sc)->sc_flags & RTSX_F_8411B) == RTSX_F_8411B)
788fdb68d7Snonaka #define	RTSX_IS_RTL8411B_QFN48(sc)					\
798fdb68d7Snonaka 	(((sc)->sc_flags & (RTSX_F_8411B|RTSX_F_8411B_QFN48)) ==	\
808fdb68d7Snonaka 	                   (RTSX_F_8411B|RTSX_F_8411B_QFN48))
818fdb68d7Snonaka 
82c3077021Snonaka /* Host controller functions called by the attachment driver. */
83c3077021Snonaka int	rtsx_attach(struct rtsx_softc *, bus_space_tag_t,
84c3077021Snonaka 	    bus_space_handle_t, bus_size_t, bus_dma_tag_t, int);
85c3077021Snonaka int	rtsx_detach(struct rtsx_softc *, int);
86c3077021Snonaka bool	rtsx_suspend(device_t, const pmf_qual_t *);
87c3077021Snonaka bool	rtsx_resume(device_t, const pmf_qual_t *);
88c3077021Snonaka bool	rtsx_shutdown(device_t, int);
89c3077021Snonaka int	rtsx_intr(void *);
90c3077021Snonaka 
91c3077021Snonaka #endif	/* _RTSXVAR_H_ */
92