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