Home | History | Annotate | Line # | Download | only in sdmmc
      1  1.1   mlelstv /*	$OpenBSD: if_bwfm_sdio.h,v 1.2 2018/05/19 10:43:10 patrick Exp $	*/
      2  1.1   mlelstv /*
      3  1.1   mlelstv  * Copyright (c) 2010-2016 Broadcom Corporation
      4  1.1   mlelstv  * Copyright (c) 2018 Patrick Wildt <patrick (at) blueri.se>
      5  1.1   mlelstv  *
      6  1.1   mlelstv  * Permission to use, copy, modify, and/or distribute this software for any
      7  1.1   mlelstv  * purpose with or without fee is hereby granted, provided that the above
      8  1.1   mlelstv  * copyright notice and this permission notice appear in all copies.
      9  1.1   mlelstv  *
     10  1.1   mlelstv  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     11  1.1   mlelstv  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     12  1.1   mlelstv  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     13  1.1   mlelstv  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     14  1.1   mlelstv  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     15  1.1   mlelstv  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     16  1.1   mlelstv  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     17  1.1   mlelstv  */
     18  1.1   mlelstv 
     19  1.1   mlelstv /* Registers */
     20  1.1   mlelstv #define BWFM_SDIO_CCCR_CARDCAP			0xf0
     21  1.1   mlelstv #define  BWFM_SDIO_CCCR_CARDCAP_CMD14_SUPPORT		(1 << 1)
     22  1.1   mlelstv #define  BWFM_SDIO_CCCR_CARDCAP_CMD14_EXT		(1 << 2)
     23  1.1   mlelstv #define  BWFM_SDIO_CCCR_CARDCAP_CMD_NODEC		(1 << 3)
     24  1.1   mlelstv #define BWFM_SDIO_CCCR_CARDCTRL			0xf1
     25  1.1   mlelstv #define  BWFM_SDIO_CCCR_CARDCTRL_WLANRESET		(1 << 1)
     26  1.1   mlelstv #define BWFM_SDIO_CCCR_SEPINT			0xf2
     27  1.1   mlelstv #define  BWFM_SDIO_CCCR_SEPINT_MASK			0x01
     28  1.1   mlelstv #define  BWFM_SDIO_CCCR_SEPINT_OE			(1 << 1)
     29  1.1   mlelstv #define  BWFM_SDIO_CCCR_SEPINT_ACT_HI			(1 << 2)
     30  1.1   mlelstv 
     31  1.1   mlelstv #define BWFM_SDIO_WATERMARK			0x10008
     32  1.1   mlelstv #define BWFM_SDIO_DEVICE_CTL			0x10009
     33  1.1   mlelstv #define  BWFM_SDIO_DEVICE_CTL_SETBUSY				0x01
     34  1.1   mlelstv #define  BWFM_SDIO_DEVICE_CTL_SPI_INTR_SYNC			0x02
     35  1.1   mlelstv #define  BWFM_SDIO_DEVICE_CTL_CA_INT_ONLY			0x04
     36  1.1   mlelstv #define  BWFM_SDIO_DEVICE_CTL_PADS_ISO				0x08
     37  1.1   mlelstv #define  BWFM_SDIO_DEVICE_CTL_SB_RST_CTL			0x30
     38  1.1   mlelstv #define  BWFM_SDIO_DEVICE_CTL_RST_CORECTL			0x00
     39  1.1   mlelstv #define  BWFM_SDIO_DEVICE_CTL_RST_BPRESET			0x10
     40  1.1   mlelstv #define  BWFM_SDIO_DEVICE_CTL_RST_NOBPRESET			0x20
     41  1.1   mlelstv #define BWFM_SDIO_FUNC1_SBADDRLOW		0x1000A
     42  1.1   mlelstv #define BWFM_SDIO_FUNC1_SBADDRMID		0x1000B
     43  1.1   mlelstv #define BWFM_SDIO_FUNC1_SBADDRHIGH		0x1000C
     44  1.2   mlelstv #define BWFM_SDIO_FUNC1_FRAMECTRL		0x1000D
     45  1.2   mlelstv #define  BWFM_SDIO_FUNC1_FRAMECTRL_RF_TERM		(1 << 0)
     46  1.2   mlelstv #define  BWFM_SDIO_FUNC1_FRAMECTRL_WF_TERM		(1 << 1)
     47  1.2   mlelstv #define  BWFM_SDIO_FUNC1_FRAMECTRL_CRC4WOOS		(1 << 2)
     48  1.2   mlelstv #define  BWFM_SDIO_FUNC1_FRAMECTRL_ABORTALL		(1 << 3)
     49  1.1   mlelstv #define BWFM_SDIO_FUNC1_CHIPCLKCSR		0x1000E
     50  1.1   mlelstv #define  BWFM_SDIO_FUNC1_CHIPCLKCSR_FORCE_ALP			0x01
     51  1.1   mlelstv #define  BWFM_SDIO_FUNC1_CHIPCLKCSR_FORCE_HT			0x02
     52  1.1   mlelstv #define  BWFM_SDIO_FUNC1_CHIPCLKCSR_FORCE_ILP			0x04
     53  1.1   mlelstv #define  BWFM_SDIO_FUNC1_CHIPCLKCSR_ALP_AVAIL_REQ		0x08
     54  1.1   mlelstv #define  BWFM_SDIO_FUNC1_CHIPCLKCSR_HT_AVAIL_REQ		0x10
     55  1.1   mlelstv #define  BWFM_SDIO_FUNC1_CHIPCLKCSR_FORCE_HW_CLKREQ_OFF		0x20
     56  1.1   mlelstv #define  BWFM_SDIO_FUNC1_CHIPCLKCSR_ALP_AVAIL			0x40
     57  1.1   mlelstv #define  BWFM_SDIO_FUNC1_CHIPCLKCSR_HT_AVAIL			0x80
     58  1.1   mlelstv #define  BWFM_SDIO_FUNC1_CHIPCLKCSR_CSR_MASK			0x1F
     59  1.1   mlelstv #define  BWFM_SDIO_FUNC1_CHIPCLKCSR_AVBITS				\
     60  1.1   mlelstv 		(BWFM_SDIO_FUNC1_CHIPCLKCSR_HT_AVAIL | \
     61  1.1   mlelstv 		 BWFM_SDIO_FUNC1_CHIPCLKCSR_ALP_AVAIL)
     62  1.1   mlelstv #define  BWFM_SDIO_FUNC1_CHIPCLKCSR_ALPAV(regval)			\
     63  1.1   mlelstv 		((regval) & BWFM_SDIO_FUNC1_CHIPCLKCSR_AVBITS)
     64  1.1   mlelstv #define  BWFM_SDIO_FUNC1_CHIPCLKCSR_HTAV(regval)			\
     65  1.1   mlelstv 		(((regval) & BWFM_SDIO_FUNC1_CHIPCLKCSR_AVBITS) == BWFM_SDIO_FUNC1_CHIPCLKCSR_AVBITS)
     66  1.1   mlelstv #define  BWFM_SDIO_FUNC1_CHIPCLKCSR_ALPONLY(regval)			\
     67  1.1   mlelstv 		(BWFM_SDIO_FUNC1_CHIPCLKCSR_ALPAV(regval) && \
     68  1.1   mlelstv 		 !BWFM_SDIO_FUNC1_CHIPCLKCSR_HTAV(regval))
     69  1.1   mlelstv #define  BWFM_SDIO_FUNC1_CHIPCLKCSR_CLKAV(regval, alponly) \
     70  1.1   mlelstv 		(BWFM_SDIO_FUNC1_CHIPCLKCSR_ALPAV(regval) && \
     71  1.1   mlelstv 		 (alponly ? 1 : BWFM_SDIO_FUNC1_CHIPCLKCSR_HTAV(regval)))
     72  1.1   mlelstv #define BWFM_SDIO_FUNC1_SDIOPULLUP		0x1000F
     73  1.2   mlelstv #define BWFM_SDIO_FUNC1_WFRAMEBCLO		0x10019
     74  1.2   mlelstv #define BWFM_SDIO_FUNC1_WFRAMEBCHI		0x1001A
     75  1.2   mlelstv #define BWFM_SDIO_FUNC1_RFRAMEBCLO		0x1001B
     76  1.2   mlelstv #define BWFM_SDIO_FUNC1_RFRAMEBCHI		0x1001C
     77  1.2   mlelstv #define BWFM_SDIO_FUNC1_MESBUSYCTRL		0x1001D
     78  1.1   mlelstv #define BWFM_SDIO_FUNC1_WAKEUPCTRL		0x1001E
     79  1.1   mlelstv #define  BWFM_SDIO_FUNC1_WAKEUPCTRL_HTWAIT		(1 << 1)
     80  1.1   mlelstv #define BWFM_SDIO_FUNC1_SLEEPCSR		0x1001F
     81  1.1   mlelstv #define  BWFM_SDIO_FUNC1_SLEEPCSR_KSO		(1 << 0)
     82  1.3  jmcneill #define  BWFM_SDIO_FUNC1_SLEEPCSR_DEVON		(1 << 1)
     83  1.1   mlelstv 
     84  1.1   mlelstv #define BWFM_SDIO_SB_OFT_ADDR_PAGE		0x08000
     85  1.1   mlelstv #define BWFM_SDIO_SB_OFT_ADDR_MASK		0x07FFF
     86  1.1   mlelstv #define BWFM_SDIO_SB_ACCESS_2_4B_FLAG		0x08000
     87  1.1   mlelstv 
     88  1.1   mlelstv /* Protocol defines */
     89  1.1   mlelstv #define SDPCM_PROT_VERSION			4
     90  1.1   mlelstv #define SDPCM_PROT_VERSION_SHIFT		16
     91  1.1   mlelstv #define SDPCM_PROT_VERSION_MASK			0x00ff0000
     92  1.1   mlelstv #define SDPCM_SHARED_VERSION			0x0003
     93  1.1   mlelstv #define SDPCM_SHARED_VERSION_MASK		0x00FF
     94  1.1   mlelstv #define SDPCM_SHARED_ASSERT_BUILT		0x0100
     95  1.1   mlelstv #define SDPCM_SHARED_ASSERT			0x0200
     96  1.1   mlelstv #define SDPCM_SHARED_TRAP			0x0400
     97  1.1   mlelstv 
     98  1.1   mlelstv #define SDPCMD_INTSTATUS			0x020
     99  1.1   mlelstv #define  SDPCMD_INTSTATUS_SMB_SW0			(1 << 0) /* To SB Mail S/W interrupt 0 */
    100  1.1   mlelstv #define  SDPCMD_INTSTATUS_SMB_SW1			(1 << 1) /* To SB Mail S/W interrupt 1 */
    101  1.1   mlelstv #define  SDPCMD_INTSTATUS_SMB_SW2			(1 << 2) /* To SB Mail S/W interrupt 2 */
    102  1.1   mlelstv #define  SDPCMD_INTSTATUS_SMB_SW3			(1 << 3) /* To SB Mail S/W interrupt 3 */
    103  1.1   mlelstv #define  SDPCMD_INTSTATUS_SMB_SW_MASK			0x0000000f /* To SB Mail S/W interrupts mask */
    104  1.1   mlelstv #define  SDPCMD_INTSTATUS_SMB_SW_SHIFT			0	 /* To SB Mail S/W interrupts shift */
    105  1.1   mlelstv #define  SDPCMD_INTSTATUS_HMB_SW0			(1 << 4) /* To Host Mail S/W interrupt 0 */
    106  1.1   mlelstv #define  SDPCMD_INTSTATUS_HMB_SW1			(1 << 5) /* To Host Mail S/W interrupt 1 */
    107  1.1   mlelstv #define  SDPCMD_INTSTATUS_HMB_SW2			(1 << 6) /* To Host Mail S/W interrupt 2 */
    108  1.1   mlelstv #define  SDPCMD_INTSTATUS_HMB_SW3			(1 << 7) /* To Host Mail S/W interrupt 3 */
    109  1.1   mlelstv #define  SDPCMD_INTSTATUS_HMB_FC_STATE			SDPCMD_INTSTATUS_HMB_SW0
    110  1.1   mlelstv #define  SDPCMD_INTSTATUS_HMB_FC_CHANGE			SDPCMD_INTSTATUS_HMB_SW1
    111  1.1   mlelstv #define  SDPCMD_INTSTATUS_HMB_FRAME_IND			SDPCMD_INTSTATUS_HMB_SW2
    112  1.1   mlelstv #define  SDPCMD_INTSTATUS_HMB_HOST_INT			SDPCMD_INTSTATUS_HMB_SW3
    113  1.1   mlelstv #define  SDPCMD_INTSTATUS_HMB_SW_MASK			0x000000f0 /* To Host Mail S/W interrupts mask */
    114  1.1   mlelstv #define  SDPCMD_INTSTATUS_HMB_SW_SHIFT			4	 /* To Host Mail S/W interrupts shift */
    115  1.1   mlelstv #define  SDPCMD_INTSTATUS_WR_OOSYNC			(1 << 8) /* Write Frame Out Of Sync */
    116  1.1   mlelstv #define  SDPCMD_INTSTATUS_RD_OOSYNC			(1 << 9) /* Read Frame Out Of Sync */
    117  1.1   mlelstv #define  SDPCMD_INTSTATUS_PC				(1 << 10)/* descriptor error */
    118  1.1   mlelstv #define  SDPCMD_INTSTATUS_PD				(1 << 11)/* data error */
    119  1.1   mlelstv #define  SDPCMD_INTSTATUS_DE				(1 << 12)/* Descriptor protocol Error */
    120  1.1   mlelstv #define  SDPCMD_INTSTATUS_RU				(1 << 13)/* Receive descriptor Underflow */
    121  1.1   mlelstv #define  SDPCMD_INTSTATUS_RO				(1 << 14)/* Receive fifo Overflow */
    122  1.1   mlelstv #define  SDPCMD_INTSTATUS_XU				(1 << 15)/* Transmit fifo Underflow */
    123  1.1   mlelstv #define  SDPCMD_INTSTATUS_RI				(1 << 16)/* Receive Interrupt */
    124  1.1   mlelstv #define  SDPCMD_INTSTATUS_BUSPWR			(1 << 17)/* SDIO Bus Power Change (rev 9) */
    125  1.1   mlelstv #define  SDPCMD_INTSTATUS_XMTDATA_AVAIL			(1 << 23)/* bits in fifo */
    126  1.1   mlelstv #define  SDPCMD_INTSTATUS_XI				(1 << 24)/* Transmit Interrupt */
    127  1.1   mlelstv #define  SDPCMD_INTSTATUS_RF_TERM			(1 << 25)/* Read Frame Terminate */
    128  1.1   mlelstv #define  SDPCMD_INTSTATUS_WF_TERM			(1 << 26)/* Write Frame Terminate */
    129  1.1   mlelstv #define  SDPCMD_INTSTATUS_PCMCIA_XU			(1 << 27)/* PCMCIA Transmit FIFO Underflow */
    130  1.1   mlelstv #define  SDPCMD_INTSTATUS_SBINT				(1 << 28)/* sbintstatus Interrupt */
    131  1.1   mlelstv #define  SDPCMD_INTSTATUS_CHIPACTIVE			(1 << 29)/* chip from doze to active state */
    132  1.1   mlelstv #define  SDPCMD_INTSTATUS_SRESET			(1 << 30)/* CCCR RES interrupt */
    133  1.1   mlelstv #define  SDPCMD_INTSTATUS_IOE2				(1U << 31)/* CCCR IOE2 Bit Changed */
    134  1.1   mlelstv #define  SDPCMD_INTSTATUS_ERRORS			(SDPCMD_INTSTATUS_PC | \
    135  1.1   mlelstv 							 SDPCMD_INTSTATUS_PD | \
    136  1.1   mlelstv 							 SDPCMD_INTSTATUS_DE | \
    137  1.1   mlelstv 							 SDPCMD_INTSTATUS_RU | \
    138  1.1   mlelstv 							 SDPCMD_INTSTATUS_RO | \
    139  1.1   mlelstv 							 SDPCMD_INTSTATUS_XU)
    140  1.1   mlelstv #define  SDPCMD_INTSTATUS_DMA				(SDPCMD_INTSTATUS_RI | \
    141  1.1   mlelstv 							 SDPCMD_INTSTATUS_XI | \
    142  1.1   mlelstv 							 SDPCMD_INTSTATUS_ERRORS)
    143  1.1   mlelstv #define SDPCMD_HOSTINTMASK			0x024
    144  1.1   mlelstv #define SDPCMD_INTMASK				0x028
    145  1.1   mlelstv #define SDPCMD_SBINTSTATUS			0x02c
    146  1.1   mlelstv #define SDPCMD_SBINTMASK			0x030
    147  1.1   mlelstv #define SDPCMD_FUNCTINTMASK			0x034
    148  1.1   mlelstv #define SDPCMD_TOSBMAILBOX			0x040
    149  1.1   mlelstv #define  SDPCMD_TOSBMAILBOX_NAK				(1 << 0)
    150  1.1   mlelstv #define  SDPCMD_TOSBMAILBOX_INT_ACK			(1 << 1)
    151  1.1   mlelstv #define  SDPCMD_TOSBMAILBOX_USE_OOB			(1 << 2)
    152  1.1   mlelstv #define  SDPCMD_TOSBMAILBOX_DEV_INT			(1 << 3)
    153  1.1   mlelstv #define SDPCMD_TOHOSTMAILBOX			0x044
    154  1.1   mlelstv #define SDPCMD_TOSBMAILBOXDATA			0x048
    155  1.1   mlelstv #define SDPCMD_TOHOSTMAILBOXDATA		0x04C
    156  1.1   mlelstv #define  SDPCMD_TOHOSTMAILBOXDATA_NAKHANDLED		(1 << 0)
    157  1.1   mlelstv #define  SDPCMD_TOHOSTMAILBOXDATA_DEVREADY		(1 << 1)
    158  1.1   mlelstv #define  SDPCMD_TOHOSTMAILBOXDATA_FC			(1 << 2)
    159  1.1   mlelstv #define  SDPCMD_TOHOSTMAILBOXDATA_FWREADY		(1 << 3)
    160  1.1   mlelstv #define  SDPCMD_TOHOSTMAILBOXDATA_FWHALT		(1 << 4)
    161  1.1   mlelstv 
    162  1.1   mlelstv struct bwfm_sdio_hwhdr {
    163  1.1   mlelstv 	uint16_t frmlen;
    164  1.1   mlelstv 	uint16_t cksum;
    165  1.1   mlelstv };
    166  1.1   mlelstv 
    167  1.1   mlelstv struct bwfm_sdio_hwexthdr {
    168  1.1   mlelstv 	uint16_t pktlen;
    169  1.1   mlelstv 	uint8_t res0;
    170  1.1   mlelstv 	uint8_t flags;
    171  1.1   mlelstv 	uint16_t res1;
    172  1.1   mlelstv 	uint16_t padlen;
    173  1.1   mlelstv };
    174  1.1   mlelstv 
    175  1.1   mlelstv struct bwfm_sdio_swhdr {
    176  1.1   mlelstv 	uint8_t seqnr;
    177  1.1   mlelstv 	uint8_t chanflag; /* channel + flag */
    178  1.1   mlelstv #define BWFM_SDIO_SWHDR_CHANNEL_CONTROL		0x00
    179  1.1   mlelstv #define BWFM_SDIO_SWHDR_CHANNEL_EVENT		0x01
    180  1.1   mlelstv #define BWFM_SDIO_SWHDR_CHANNEL_DATA		0x02
    181  1.1   mlelstv #define BWFM_SDIO_SWHDR_CHANNEL_GLOM		0x03
    182  1.1   mlelstv #define BWFM_SDIO_SWHDR_CHANNEL_TEST		0x0F
    183  1.1   mlelstv #define BWFM_SDIO_SWHDR_CHANNEL_MASK		0x0F
    184  1.1   mlelstv 	uint8_t nextlen;
    185  1.1   mlelstv 	uint8_t dataoff;
    186  1.1   mlelstv 	uint8_t flowctl;
    187  1.1   mlelstv 	uint8_t maxseqnr;
    188  1.1   mlelstv 	uint16_t res0;
    189  1.1   mlelstv };
    190  1.1   mlelstv 
    191  1.1   mlelstv struct bwfm_sdio_sdpcm {
    192  1.1   mlelstv 	uint32_t flags;
    193  1.1   mlelstv 	uint32_t trap_addr;
    194  1.1   mlelstv 	uint32_t assert_exp_addr;
    195  1.1   mlelstv 	uint32_t assert_file_addr;
    196  1.1   mlelstv 	uint32_t assert_line;
    197  1.1   mlelstv 	uint32_t console_addr;
    198  1.1   mlelstv 	uint32_t msgtrace_addr;
    199  1.1   mlelstv 	uint8_t tag[32];
    200  1.1   mlelstv 	uint32_t brpt_addr;
    201  1.1   mlelstv };
    202  1.1   mlelstv 
    203  1.1   mlelstv struct bwfm_sdio_console {
    204  1.1   mlelstv 	uint32_t vcons_in;
    205  1.1   mlelstv 	uint32_t vcons_out;
    206  1.1   mlelstv 	uint32_t log_buf;
    207  1.1   mlelstv 	uint32_t log_bufsz;
    208  1.1   mlelstv 	uint32_t log_idx;
    209  1.1   mlelstv };
    210