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