1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Broadcom SiliconBackplane SDIO/PCMCIA hardware-specific 3*4882a593Smuzhiyun * device core support 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Portions of this code are copyright (c) 2021 Cypress Semiconductor Corporation 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Copyright (C) 1999-2017, Broadcom Corporation 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * Unless you and Broadcom execute a separate written software license 10*4882a593Smuzhiyun * agreement governing use of this software, this software is licensed to you 11*4882a593Smuzhiyun * under the terms of the GNU General Public License version 2 (the "GPL"), 12*4882a593Smuzhiyun * available at http://www.broadcom.com/licenses/GPLv2.php, with the 13*4882a593Smuzhiyun * following added to such license: 14*4882a593Smuzhiyun * 15*4882a593Smuzhiyun * As a special exception, the copyright holders of this software give you 16*4882a593Smuzhiyun * permission to link this software with independent modules, and to copy and 17*4882a593Smuzhiyun * distribute the resulting executable under terms of your choice, provided that 18*4882a593Smuzhiyun * you also meet, for each linked independent module, the terms and conditions of 19*4882a593Smuzhiyun * the license of that module. An independent module is a module which is not 20*4882a593Smuzhiyun * derived from this software. The special exception does not apply to any 21*4882a593Smuzhiyun * modifications of the software. 22*4882a593Smuzhiyun * 23*4882a593Smuzhiyun * Notwithstanding the above, under no circumstances may you combine this 24*4882a593Smuzhiyun * software in any way with any other Broadcom software provided under a license 25*4882a593Smuzhiyun * other than the GPL, without Broadcom's express prior written consent. 26*4882a593Smuzhiyun * 27*4882a593Smuzhiyun * 28*4882a593Smuzhiyun * <<Broadcom-WL-IPTag/Open:>> 29*4882a593Smuzhiyun * 30*4882a593Smuzhiyun * $Id: sbsdpcmdev.h 616398 2016-02-01 09:37:52Z $ 31*4882a593Smuzhiyun */ 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun #ifndef _sbsdpcmdev_h_ 34*4882a593Smuzhiyun #define _sbsdpcmdev_h_ 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun /* cpp contortions to concatenate w/arg prescan */ 37*4882a593Smuzhiyun #ifndef PAD 38*4882a593Smuzhiyun #define _PADLINE(line) pad ## line 39*4882a593Smuzhiyun #define _XSTR(line) _PADLINE(line) 40*4882a593Smuzhiyun #define PAD _XSTR(__LINE__) 41*4882a593Smuzhiyun #endif /* PAD */ 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun typedef volatile struct { 44*4882a593Smuzhiyun dma64regs_t xmt; /* dma tx */ 45*4882a593Smuzhiyun uint32 PAD[2]; 46*4882a593Smuzhiyun dma64regs_t rcv; /* dma rx */ 47*4882a593Smuzhiyun uint32 PAD[2]; 48*4882a593Smuzhiyun } dma64p_t; 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun /* dma64 sdiod corerev >= 1 */ 51*4882a593Smuzhiyun typedef volatile struct { 52*4882a593Smuzhiyun dma64p_t dma64regs[2]; 53*4882a593Smuzhiyun dma64diag_t dmafifo; /* DMA Diagnostic Regs, 0x280-0x28c */ 54*4882a593Smuzhiyun uint32 PAD[28]; 55*4882a593Smuzhiyun } sdiodma64_t; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun /* dma32 sdiod corerev == 0 */ 58*4882a593Smuzhiyun typedef volatile struct { 59*4882a593Smuzhiyun dma32regp_t dma32regs[2]; /* dma tx & rx, 0x200-0x23c */ 60*4882a593Smuzhiyun dma32diag_t dmafifo; /* DMA Diagnostic Regs, 0x240-0x24c */ 61*4882a593Smuzhiyun uint32 PAD[44]; 62*4882a593Smuzhiyun } sdiodma32_t; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun /* dma32 regs for pcmcia core */ 65*4882a593Smuzhiyun typedef volatile struct { 66*4882a593Smuzhiyun dma32regp_t dmaregs; /* DMA Regs, 0x200-0x21c, rev8 */ 67*4882a593Smuzhiyun dma32diag_t dmafifo; /* DMA Diagnostic Regs, 0x220-0x22c */ 68*4882a593Smuzhiyun uint32 PAD[52]; 69*4882a593Smuzhiyun } pcmdma32_t; 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun /* core registers */ 72*4882a593Smuzhiyun typedef volatile struct { 73*4882a593Smuzhiyun uint32 corecontrol; /* CoreControl, 0x000, rev8 */ 74*4882a593Smuzhiyun uint32 corestatus; /* CoreStatus, 0x004, rev8 */ 75*4882a593Smuzhiyun uint32 PAD[1]; 76*4882a593Smuzhiyun uint32 biststatus; /* BistStatus, 0x00c, rev8 */ 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun /* PCMCIA access */ 79*4882a593Smuzhiyun uint16 pcmciamesportaladdr; /* PcmciaMesPortalAddr, 0x010, rev8 */ 80*4882a593Smuzhiyun uint16 PAD[1]; 81*4882a593Smuzhiyun uint16 pcmciamesportalmask; /* PcmciaMesPortalMask, 0x014, rev8 */ 82*4882a593Smuzhiyun uint16 PAD[1]; 83*4882a593Smuzhiyun uint16 pcmciawrframebc; /* PcmciaWrFrameBC, 0x018, rev8 */ 84*4882a593Smuzhiyun uint16 PAD[1]; 85*4882a593Smuzhiyun uint16 pcmciaunderflowtimer; /* PcmciaUnderflowTimer, 0x01c, rev8 */ 86*4882a593Smuzhiyun uint16 PAD[1]; 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun /* interrupt */ 89*4882a593Smuzhiyun uint32 intstatus; /* IntStatus, 0x020, rev8 */ 90*4882a593Smuzhiyun uint32 hostintmask; /* IntHostMask, 0x024, rev8 */ 91*4882a593Smuzhiyun uint32 intmask; /* IntSbMask, 0x028, rev8 */ 92*4882a593Smuzhiyun uint32 sbintstatus; /* SBIntStatus, 0x02c, rev8 */ 93*4882a593Smuzhiyun uint32 sbintmask; /* SBIntMask, 0x030, rev8 */ 94*4882a593Smuzhiyun uint32 funcintmask; /* SDIO Function Interrupt Mask, SDIO rev4 */ 95*4882a593Smuzhiyun uint32 PAD[2]; 96*4882a593Smuzhiyun uint32 tosbmailbox; /* ToSBMailbox, 0x040, rev8 */ 97*4882a593Smuzhiyun uint32 tohostmailbox; /* ToHostMailbox, 0x044, rev8 */ 98*4882a593Smuzhiyun uint32 tosbmailboxdata; /* ToSbMailboxData, 0x048, rev8 */ 99*4882a593Smuzhiyun uint32 tohostmailboxdata; /* ToHostMailboxData, 0x04c, rev8 */ 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun /* synchronized access to registers in SDIO clock domain */ 102*4882a593Smuzhiyun uint32 sdioaccess; /* SdioAccess, 0x050, rev8 */ 103*4882a593Smuzhiyun uint32 PAD[1]; 104*4882a593Smuzhiyun uint32 MiscHostAccessIntEn; 105*4882a593Smuzhiyun uint32 PAD[1]; 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun /* PCMCIA frame control */ 108*4882a593Smuzhiyun uint8 pcmciaframectrl; /* pcmciaFrameCtrl, 0x060, rev8 */ 109*4882a593Smuzhiyun uint8 PAD[3]; 110*4882a593Smuzhiyun uint8 pcmciawatermark; /* pcmciaWaterMark, 0x064, rev8 */ 111*4882a593Smuzhiyun uint8 PAD[155]; 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun /* interrupt batching control */ 114*4882a593Smuzhiyun uint32 intrcvlazy; /* IntRcvLazy, 0x100, rev8 */ 115*4882a593Smuzhiyun uint32 PAD[3]; 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun /* counters */ 118*4882a593Smuzhiyun uint32 cmd52rd; /* Cmd52RdCount, 0x110, rev8, SDIO: cmd52 reads */ 119*4882a593Smuzhiyun uint32 cmd52wr; /* Cmd52WrCount, 0x114, rev8, SDIO: cmd52 writes */ 120*4882a593Smuzhiyun uint32 cmd53rd; /* Cmd53RdCount, 0x118, rev8, SDIO: cmd53 reads */ 121*4882a593Smuzhiyun uint32 cmd53wr; /* Cmd53WrCount, 0x11c, rev8, SDIO: cmd53 writes */ 122*4882a593Smuzhiyun uint32 abort; /* AbortCount, 0x120, rev8, SDIO: aborts */ 123*4882a593Smuzhiyun uint32 datacrcerror; /* DataCrcErrorCount, 0x124, rev8, SDIO: frames w/bad CRC */ 124*4882a593Smuzhiyun uint32 rdoutofsync; /* RdOutOfSyncCount, 0x128, rev8, SDIO/PCMCIA: Rd Frm OOS */ 125*4882a593Smuzhiyun uint32 wroutofsync; /* RdOutOfSyncCount, 0x12c, rev8, SDIO/PCMCIA: Wr Frm OOS */ 126*4882a593Smuzhiyun uint32 writebusy; /* WriteBusyCount, 0x130, rev8, SDIO: dev asserted "busy" */ 127*4882a593Smuzhiyun uint32 readwait; /* ReadWaitCount, 0x134, rev8, SDIO: read: no data avail */ 128*4882a593Smuzhiyun uint32 readterm; /* ReadTermCount, 0x138, rev8, SDIO: rd frm terminates */ 129*4882a593Smuzhiyun uint32 writeterm; /* WriteTermCount, 0x13c, rev8, SDIO: wr frm terminates */ 130*4882a593Smuzhiyun uint32 PAD[40]; 131*4882a593Smuzhiyun uint32 clockctlstatus; /* ClockCtlStatus, 0x1e0, rev8 */ 132*4882a593Smuzhiyun uint32 PAD[1]; 133*4882a593Smuzhiyun uint32 powerctl; /* 0x1e8 */ 134*4882a593Smuzhiyun uint32 PAD[5]; 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun /* DMA engines */ 137*4882a593Smuzhiyun volatile union { 138*4882a593Smuzhiyun pcmdma32_t pcm32; 139*4882a593Smuzhiyun sdiodma32_t sdiod32; 140*4882a593Smuzhiyun sdiodma64_t sdiod64; 141*4882a593Smuzhiyun } dma; 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun uint32 PAD[12]; /* 0x300-0x32c */ 144*4882a593Smuzhiyun uint32 chipid; /* SDIO ChipID Register, 0x330, rev31 */ 145*4882a593Smuzhiyun uint32 eromptr; /* SDIO EromPtrOffset Register, 0x334, rev31 */ 146*4882a593Smuzhiyun uint32 PAD[50]; 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun /* SDIO/PCMCIA CIS region */ 149*4882a593Smuzhiyun char cis[512]; /* 512 byte CIS, 0x400-0x5ff, rev6 */ 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun /* PCMCIA function control registers */ 152*4882a593Smuzhiyun char pcmciafcr[256]; /* PCMCIA FCR, 0x600-6ff, rev6 */ 153*4882a593Smuzhiyun uint16 PAD[55]; 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun /* PCMCIA backplane access */ 156*4882a593Smuzhiyun uint16 backplanecsr; /* BackplaneCSR, 0x76E, rev6 */ 157*4882a593Smuzhiyun uint16 backplaneaddr0; /* BackplaneAddr0, 0x770, rev6 */ 158*4882a593Smuzhiyun uint16 backplaneaddr1; /* BackplaneAddr1, 0x772, rev6 */ 159*4882a593Smuzhiyun uint16 backplaneaddr2; /* BackplaneAddr2, 0x774, rev6 */ 160*4882a593Smuzhiyun uint16 backplaneaddr3; /* BackplaneAddr3, 0x776, rev6 */ 161*4882a593Smuzhiyun uint16 backplanedata0; /* BackplaneData0, 0x778, rev6 */ 162*4882a593Smuzhiyun uint16 backplanedata1; /* BackplaneData1, 0x77a, rev6 */ 163*4882a593Smuzhiyun uint16 backplanedata2; /* BackplaneData2, 0x77c, rev6 */ 164*4882a593Smuzhiyun uint16 backplanedata3; /* BackplaneData3, 0x77e, rev6 */ 165*4882a593Smuzhiyun uint16 PAD[31]; 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun /* sprom "size" & "blank" info */ 168*4882a593Smuzhiyun uint16 spromstatus; /* SPROMStatus, 0x7BE, rev2 */ 169*4882a593Smuzhiyun uint32 PAD[464]; 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun /* Sonics SiliconBackplane registers */ 172*4882a593Smuzhiyun sbconfig_t sbconfig; /* SbConfig Regs, 0xf00-0xfff, rev8 */ 173*4882a593Smuzhiyun } sdpcmd_regs_t; 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun /* corecontrol */ 176*4882a593Smuzhiyun #define CC_CISRDY (1 << 0) /* CIS Ready */ 177*4882a593Smuzhiyun #define CC_BPRESEN (1 << 1) /* CCCR RES signal causes backplane reset */ 178*4882a593Smuzhiyun #define CC_F2RDY (1 << 2) /* set CCCR IOR2 bit */ 179*4882a593Smuzhiyun #define CC_CLRPADSISO (1 << 3) /* clear SDIO pads isolation bit (rev 11) */ 180*4882a593Smuzhiyun #define CC_XMTDATAAVAIL_MODE (1 << 4) /* data avail generates an interrupt */ 181*4882a593Smuzhiyun #define CC_XMTDATAAVAIL_CTRL (1 << 5) /* data avail interrupt ctrl */ 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun /* corestatus */ 184*4882a593Smuzhiyun #define CS_PCMCIAMODE (1 << 0) /* Device Mode; 0=SDIO, 1=PCMCIA */ 185*4882a593Smuzhiyun #define CS_SMARTDEV (1 << 1) /* 1=smartDev enabled */ 186*4882a593Smuzhiyun #define CS_F2ENABLED (1 << 2) /* 1=host has enabled the device */ 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun #define PCMCIA_MES_PA_MASK 0x7fff /* PCMCIA Message Portal Address Mask */ 189*4882a593Smuzhiyun #define PCMCIA_MES_PM_MASK 0x7fff /* PCMCIA Message Portal Mask Mask */ 190*4882a593Smuzhiyun #define PCMCIA_WFBC_MASK 0xffff /* PCMCIA Write Frame Byte Count Mask */ 191*4882a593Smuzhiyun #define PCMCIA_UT_MASK 0x07ff /* PCMCIA Underflow Timer Mask */ 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun /* intstatus */ 194*4882a593Smuzhiyun #define I_SMB_SW0 (1 << 0) /* To SB Mail S/W interrupt 0 */ 195*4882a593Smuzhiyun #define I_SMB_SW1 (1 << 1) /* To SB Mail S/W interrupt 1 */ 196*4882a593Smuzhiyun #define I_SMB_SW2 (1 << 2) /* To SB Mail S/W interrupt 2 */ 197*4882a593Smuzhiyun #define I_SMB_SW3 (1 << 3) /* To SB Mail S/W interrupt 3 */ 198*4882a593Smuzhiyun #define I_SMB_SW_MASK 0x0000000f /* To SB Mail S/W interrupts mask */ 199*4882a593Smuzhiyun #define I_SMB_SW_SHIFT 0 /* To SB Mail S/W interrupts shift */ 200*4882a593Smuzhiyun #define I_HMB_SW0 (1 << 4) /* To Host Mail S/W interrupt 0 */ 201*4882a593Smuzhiyun #define I_HMB_SW1 (1 << 5) /* To Host Mail S/W interrupt 1 */ 202*4882a593Smuzhiyun #define I_HMB_SW2 (1 << 6) /* To Host Mail S/W interrupt 2 */ 203*4882a593Smuzhiyun #define I_HMB_SW3 (1 << 7) /* To Host Mail S/W interrupt 3 */ 204*4882a593Smuzhiyun #define I_HMB_SW_MASK 0x000000f0 /* To Host Mail S/W interrupts mask */ 205*4882a593Smuzhiyun #define I_HMB_SW_SHIFT 4 /* To Host Mail S/W interrupts shift */ 206*4882a593Smuzhiyun #define I_WR_OOSYNC (1 << 8) /* Write Frame Out Of Sync */ 207*4882a593Smuzhiyun #define I_RD_OOSYNC (1 << 9) /* Read Frame Out Of Sync */ 208*4882a593Smuzhiyun #define I_PC (1 << 10) /* descriptor error */ 209*4882a593Smuzhiyun #define I_PD (1 << 11) /* data error */ 210*4882a593Smuzhiyun #define I_DE (1 << 12) /* Descriptor protocol Error */ 211*4882a593Smuzhiyun #define I_RU (1 << 13) /* Receive descriptor Underflow */ 212*4882a593Smuzhiyun #define I_RO (1 << 14) /* Receive fifo Overflow */ 213*4882a593Smuzhiyun #define I_XU (1 << 15) /* Transmit fifo Underflow */ 214*4882a593Smuzhiyun #define I_RI (1 << 16) /* Receive Interrupt */ 215*4882a593Smuzhiyun #define I_BUSPWR (1 << 17) /* SDIO Bus Power Change (rev 9) */ 216*4882a593Smuzhiyun #define I_XMTDATA_AVAIL (1 << 23) /* bits in fifo */ 217*4882a593Smuzhiyun #define I_XI (1 << 24) /* Transmit Interrupt */ 218*4882a593Smuzhiyun #define I_RF_TERM (1 << 25) /* Read Frame Terminate */ 219*4882a593Smuzhiyun #define I_WF_TERM (1 << 26) /* Write Frame Terminate */ 220*4882a593Smuzhiyun #define I_PCMCIA_XU (1 << 27) /* PCMCIA Transmit FIFO Underflow */ 221*4882a593Smuzhiyun #define I_SBINT (1 << 28) /* sbintstatus Interrupt */ 222*4882a593Smuzhiyun #define I_CHIPACTIVE (1 << 29) /* chip transitioned from doze to active state */ 223*4882a593Smuzhiyun #define I_SRESET (1 << 30) /* CCCR RES interrupt */ 224*4882a593Smuzhiyun #define I_IOE2 (1U << 31) /* CCCR IOE2 Bit Changed */ 225*4882a593Smuzhiyun #define I_ERRORS (I_PC | I_PD | I_DE | I_RU | I_RO | I_XU) /* DMA Errors */ 226*4882a593Smuzhiyun #define I_DMA (I_RI | I_XI | I_ERRORS) 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun /* sbintstatus */ 229*4882a593Smuzhiyun #define I_SB_SERR (1 << 8) /* Backplane SError (write) */ 230*4882a593Smuzhiyun #define I_SB_RESPERR (1 << 9) /* Backplane Response Error (read) */ 231*4882a593Smuzhiyun #define I_SB_SPROMERR (1 << 10) /* Error accessing the sprom */ 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun /* sdioaccess */ 234*4882a593Smuzhiyun #define SDA_DATA_MASK 0x000000ff /* Read/Write Data Mask */ 235*4882a593Smuzhiyun #define SDA_ADDR_MASK 0x000fff00 /* Read/Write Address Mask */ 236*4882a593Smuzhiyun #define SDA_ADDR_SHIFT 8 /* Read/Write Address Shift */ 237*4882a593Smuzhiyun #define SDA_WRITE 0x01000000 /* Write bit */ 238*4882a593Smuzhiyun #define SDA_READ 0x00000000 /* Write bit cleared for Read */ 239*4882a593Smuzhiyun #define SDA_BUSY 0x80000000 /* Busy bit */ 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun /* sdioaccess-accessible register address spaces */ 242*4882a593Smuzhiyun #define SDA_CCCR_SPACE 0x000 /* sdioAccess CCCR register space */ 243*4882a593Smuzhiyun #define SDA_F1_FBR_SPACE 0x100 /* sdioAccess F1 FBR register space */ 244*4882a593Smuzhiyun #define SDA_F2_FBR_SPACE 0x200 /* sdioAccess F2 FBR register space */ 245*4882a593Smuzhiyun #define SDA_F1_REG_SPACE 0x300 /* sdioAccess F1 core-specific register space */ 246*4882a593Smuzhiyun #define SDA_F3_FBR_SPACE 0x400 /* sdioAccess F3 FBR register space */ 247*4882a593Smuzhiyun 248*4882a593Smuzhiyun /* SDA_F1_REG_SPACE sdioaccess-accessible F1 reg space register offsets */ 249*4882a593Smuzhiyun #define SDA_CHIPCONTROLDATA 0x006 /* ChipControlData */ 250*4882a593Smuzhiyun #define SDA_CHIPCONTROLENAB 0x007 /* ChipControlEnable */ 251*4882a593Smuzhiyun #define SDA_F2WATERMARK 0x008 /* Function 2 Watermark */ 252*4882a593Smuzhiyun #define SDA_DEVICECONTROL 0x009 /* DeviceControl */ 253*4882a593Smuzhiyun #define SDA_SBADDRLOW 0x00a /* SbAddrLow */ 254*4882a593Smuzhiyun #define SDA_SBADDRMID 0x00b /* SbAddrMid */ 255*4882a593Smuzhiyun #define SDA_SBADDRHIGH 0x00c /* SbAddrHigh */ 256*4882a593Smuzhiyun #define SDA_FRAMECTRL 0x00d /* FrameCtrl */ 257*4882a593Smuzhiyun #define SDA_CHIPCLOCKCSR 0x00e /* ChipClockCSR */ 258*4882a593Smuzhiyun #define SDA_SDIOPULLUP 0x00f /* SdioPullUp */ 259*4882a593Smuzhiyun #define SDA_SDIOWRFRAMEBCLOW 0x019 /* SdioWrFrameBCLow */ 260*4882a593Smuzhiyun #define SDA_SDIOWRFRAMEBCHIGH 0x01a /* SdioWrFrameBCHigh */ 261*4882a593Smuzhiyun #define SDA_SDIORDFRAMEBCLOW 0x01b /* SdioRdFrameBCLow */ 262*4882a593Smuzhiyun #define SDA_SDIORDFRAMEBCHIGH 0x01c /* SdioRdFrameBCHigh */ 263*4882a593Smuzhiyun #define SDA_MESBUSYCNTRL 0x01d /* mesBusyCntrl */ 264*4882a593Smuzhiyun #define SDA_WAKEUPCTRL 0x01e /* WakeupCtrl */ 265*4882a593Smuzhiyun #define SDA_SLEEPCSR 0x01f /* sleepCSR */ 266*4882a593Smuzhiyun 267*4882a593Smuzhiyun /* SDA_F1_REG_SPACE register bits */ 268*4882a593Smuzhiyun /* sleepCSR register */ 269*4882a593Smuzhiyun #define SDA_SLEEPCSR_KEEP_SDIO_ON 0x1 270*4882a593Smuzhiyun 271*4882a593Smuzhiyun /* SDA_F2WATERMARK */ 272*4882a593Smuzhiyun #define SDA_F2WATERMARK_MASK 0x7f /* F2Watermark Mask */ 273*4882a593Smuzhiyun 274*4882a593Smuzhiyun /* SDA_SBADDRLOW */ 275*4882a593Smuzhiyun #define SDA_SBADDRLOW_MASK 0x80 /* SbAddrLow Mask */ 276*4882a593Smuzhiyun 277*4882a593Smuzhiyun /* SDA_SBADDRMID */ 278*4882a593Smuzhiyun #define SDA_SBADDRMID_MASK 0xff /* SbAddrMid Mask */ 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun /* SDA_SBADDRHIGH */ 281*4882a593Smuzhiyun #define SDA_SBADDRHIGH_MASK 0xff /* SbAddrHigh Mask */ 282*4882a593Smuzhiyun 283*4882a593Smuzhiyun /* SDA_FRAMECTRL */ 284*4882a593Smuzhiyun #define SFC_RF_TERM (1 << 0) /* Read Frame Terminate */ 285*4882a593Smuzhiyun #define SFC_WF_TERM (1 << 1) /* Write Frame Terminate */ 286*4882a593Smuzhiyun #define SFC_CRC4WOOS (1 << 2) /* HW reports CRC error for write out of sync */ 287*4882a593Smuzhiyun #define SFC_ABORTALL (1 << 3) /* Abort cancels all in-progress frames */ 288*4882a593Smuzhiyun 289*4882a593Smuzhiyun /* pcmciaframectrl */ 290*4882a593Smuzhiyun #define PFC_RF_TERM (1 << 0) /* Read Frame Terminate */ 291*4882a593Smuzhiyun #define PFC_WF_TERM (1 << 1) /* Write Frame Terminate */ 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun /* intrcvlazy */ 294*4882a593Smuzhiyun #define IRL_TO_MASK 0x00ffffff /* timeout */ 295*4882a593Smuzhiyun #define IRL_FC_MASK 0xff000000 /* frame count */ 296*4882a593Smuzhiyun #define IRL_FC_SHIFT 24 /* frame count */ 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun /* rx header */ 299*4882a593Smuzhiyun typedef volatile struct { 300*4882a593Smuzhiyun uint16 len; 301*4882a593Smuzhiyun uint16 flags; 302*4882a593Smuzhiyun } sdpcmd_rxh_t; 303*4882a593Smuzhiyun 304*4882a593Smuzhiyun /* rx header flags */ 305*4882a593Smuzhiyun #define RXF_CRC 0x0001 /* CRC error detected */ 306*4882a593Smuzhiyun #define RXF_WOOS 0x0002 /* write frame out of sync */ 307*4882a593Smuzhiyun #define RXF_WF_TERM 0x0004 /* write frame terminated */ 308*4882a593Smuzhiyun #define RXF_ABORT 0x0008 /* write frame aborted */ 309*4882a593Smuzhiyun #define RXF_DISCARD (RXF_CRC | RXF_WOOS | RXF_WF_TERM | RXF_ABORT) /* bad frame */ 310*4882a593Smuzhiyun 311*4882a593Smuzhiyun /* HW frame tag */ 312*4882a593Smuzhiyun #define SDPCM_FRAMETAG_LEN 4 /* HW frametag: 2 bytes len, 2 bytes check val */ 313*4882a593Smuzhiyun 314*4882a593Smuzhiyun #define SDPCM_HWEXT_LEN 8 315*4882a593Smuzhiyun 316*4882a593Smuzhiyun #endif /* _sbsdpcmdev_h_ */ 317