]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/staging/ft1000/ft1000.h
Merge tag 'regulator-v3.15-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git...
[karo-tx-linux.git] / drivers / staging / ft1000 / ft1000.h
1 /*
2  * Common structures and definitions for FT1000 Flarion Flash OFDM PCMCIA and USB devices
3  *
4  * Originally copyright (c) 2002 Flarion Technologies
5  *
6  */
7
8 #define DSPVERSZ        4
9 #define HWSERNUMSZ      16
10 #define SKUSZ           20
11 #define EUISZ           8
12 #define MODESZ          2
13 #define CALVERSZ        2
14 #define CALDATESZ       6
15
16 #define ELECTRABUZZ_ID  0       /* ASIC ID for Electrabuzz */
17 #define MAGNEMITE_ID    0x1a01  /* ASIC ID for Magnemite */
18
19 /* MEMORY MAP common to both ELECTRABUZZ and MAGNEMITE */
20 #define FT1000_REG_DPRAM_ADDR   0x000E  /* DPADR - Dual Port Ram Indirect Address Register */
21 #define FT1000_REG_SUP_CTRL     0x0020  /* HCTR - Host Control Register */
22 #define FT1000_REG_SUP_STAT     0x0022  /* HSTAT - Host Status Register */
23 #define FT1000_REG_RESET        0x0024  /* HCTR - Host Control Register */
24 #define FT1000_REG_SUP_ISR      0x0026  /* HISR - Host Interrupt Status
25                                          * Register
26                                          */
27 #define FT1000_REG_SUP_IMASK    0x0028  /* HIMASK - Host Interrupt Mask */
28 #define FT1000_REG_DOORBELL     0x002a  /* DBELL - Door Bell Register */
29 #define FT1000_REG_ASIC_ID      0x002e  /* ASICID - ASIC Identification
30                                          * Number
31                                          */
32
33 /* MEMORY MAP FOR ELECTRABUZZ ASIC */
34 #define FT1000_REG_UFIFO_STAT   0x0000  /* UFSR - Uplink FIFO status register */
35 #define FT1000_REG_UFIFO_BEG    0x0002  /* UFBR - Uplink FIFO beginning
36                                          * register
37                                          */
38 #define FT1000_REG_UFIFO_MID    0x0004  /* UFMR - Uplink FIFO middle register */
39 #define FT1000_REG_UFIFO_END    0x0006  /* UFER - Uplink FIFO end register */
40 #define FT1000_REG_DFIFO_STAT   0x0008  /* DFSR - Downlink FIFO status
41                                          * register
42                                          */
43 #define FT1000_REG_DFIFO        0x000A  /* DFR - Downlink FIFO Register */
44 #define FT1000_REG_DPRAM_DATA   0x000C  /* DPRAM - Dual Port Indirect
45                                          * Data Register
46                                          */
47 #define FT1000_REG_WATERMARK    0x0010  /* WMARK - Watermark Register */
48
49 /* MEMORY MAP FOR MAGNEMITE */
50 #define FT1000_REG_MAG_UFDR     0x0000  /* UFDR - Uplink FIFO Data
51                                          * Register (32-bits)
52                                          */
53 #define FT1000_REG_MAG_UFDRL    0x0000  /* UFDRL - Uplink FIFO Data
54                                          * Register low-word (16-bits)
55                                          */
56 #define FT1000_REG_MAG_UFDRH    0x0002  /* UFDRH - Uplink FIFO Data Register
57                                          * high-word (16-bits)
58                                          */
59 #define FT1000_REG_MAG_UFER     0x0004  /* UFER - Uplink FIFO End Register */
60 #define FT1000_REG_MAG_UFSR     0x0006  /* UFSR - Uplink FIFO Status Register */
61 #define FT1000_REG_MAG_DFR      0x0008  /* DFR - Downlink FIFO Register
62                                          * (32-bits)
63                                          */
64 #define FT1000_REG_MAG_DFRL     0x0008  /* DFRL - Downlink FIFO Register
65                                          * low-word (16-bits)
66                                          */
67 #define FT1000_REG_MAG_DFRH     0x000a  /* DFRH - Downlink FIFO Register
68                                          * high-word (16-bits)
69                                          */
70 #define FT1000_REG_MAG_DFSR     0x000c  /* DFSR - Downlink FIFO Status
71                                          * Register
72                                          */
73 #define FT1000_REG_MAG_DPDATA   0x0010  /* DPDATA - Dual Port RAM Indirect
74                                          * Data Register (32-bits)
75                                          */
76 #define FT1000_REG_MAG_DPDATAL  0x0010  /* DPDATAL - Dual Port RAM Indirect
77                                          * Data Register low-word (16-bits)
78                                          */
79 #define FT1000_REG_MAG_DPDATAH  0x0012  /* DPDATAH - Dual Port RAM Indirect Data
80                                          * Register high-word (16-bits)
81                                          */
82 #define FT1000_REG_MAG_WATERMARK 0x002c /* WMARK - Watermark Register */
83 #define FT1000_REG_MAG_VERSION  0x0030  /* LLC Version */
84
85 /* Reserved Dual Port RAM offsets for Electrabuzz */
86 #define FT1000_DPRAM_TX_BASE    0x0002  /* Host to PC Card Messaging Area */
87 #define FT1000_DPRAM_RX_BASE    0x0800  /* PC Card to Host Messaging Area */
88 #define FT1000_FIFO_LEN         0x07FC  /* total length for DSP FIFO tracking */
89 #define FT1000_HI_HO            0x07FE  /* heartbeat with HI/HO */
90 #define FT1000_DSP_STATUS       0x0FFE  /* dsp status - non-zero is a request
91                                          * to reset dsp
92                                          */
93 #define FT1000_DSP_LED          0x0FFA  /* dsp led status for PAD device */
94 #define FT1000_DSP_CON_STATE    0x0FF8  /* DSP Connection Status Info */
95 #define FT1000_DPRAM_FEFE       0x0002  /* location for dsp ready indicator */
96 #define FT1000_DSP_TIMER0       0x1FF0  /* Timer Field from Basestation */
97 #define FT1000_DSP_TIMER1       0x1FF2  /* Timer Field from Basestation */
98 #define FT1000_DSP_TIMER2       0x1FF4  /* Timer Field from Basestation */
99 #define FT1000_DSP_TIMER3       0x1FF6  /* Timer Field from Basestation */
100
101 /* Reserved Dual Port RAM offsets for Magnemite */
102 #define FT1000_DPRAM_MAG_TX_BASE        0x0000  /* Host to PC Card
103                                                  * Messaging Area
104                                                  */
105 #define FT1000_DPRAM_MAG_RX_BASE        0x0200  /* PC Card to Host
106                                                  * Messaging Area
107                                                  */
108
109 #define FT1000_MAG_FIFO_LEN             0x1FF   /* total length for DSP
110                                                  * FIFO tracking
111                                                  */
112 #define FT1000_MAG_FIFO_LEN_INDX        0x1     /* low-word index */
113 #define FT1000_MAG_HI_HO                0x1FF   /* heartbeat with HI/HO */
114 #define FT1000_MAG_HI_HO_INDX           0x0     /* high-word index */
115 #define FT1000_MAG_DSP_LED              0x3FE   /* dsp led status for
116                                                  * PAD device
117                                                  */
118 #define FT1000_MAG_DSP_LED_INDX         0x0     /* dsp led status for
119                                                  * PAD device
120                                                  */
121 #define FT1000_MAG_DSP_CON_STATE        0x3FE   /* DSP Connection Status Info */
122 #define FT1000_MAG_DSP_CON_STATE_INDX   0x1     /* DSP Connection Status Info */
123 #define FT1000_MAG_DPRAM_FEFE           0x000   /* location for dsp ready
124                                                  * indicator
125                                                  */
126 #define FT1000_MAG_DPRAM_FEFE_INDX      0x0     /* location for dsp ready
127                                                  * indicator
128                                                  */
129 #define FT1000_MAG_DSP_TIMER0           0x3FC   /* Timer Field from
130                                                  * Basestation
131                                                  */
132 #define FT1000_MAG_DSP_TIMER0_INDX      0x1
133 #define FT1000_MAG_DSP_TIMER1           0x3FC   /* Timer Field from
134                                                  * Basestation
135                                                  */
136 #define FT1000_MAG_DSP_TIMER1_INDX      0x0
137 #define FT1000_MAG_DSP_TIMER2           0x3FD   /* Timer Field from
138                                                  * Basestation
139                                                  */
140 #define FT1000_MAG_DSP_TIMER2_INDX      0x1
141 #define FT1000_MAG_DSP_TIMER3           0x3FD   /* Timer Field from
142                                                  * Basestation
143                                                  */
144 #define FT1000_MAG_DSP_TIMER3_INDX      0x0
145 #define FT1000_MAG_TOTAL_LEN            0x200
146 #define FT1000_MAG_TOTAL_LEN_INDX       0x1
147 #define FT1000_MAG_PH_LEN               0x200
148 #define FT1000_MAG_PH_LEN_INDX          0x0
149 #define FT1000_MAG_PORT_ID              0x201
150 #define FT1000_MAG_PORT_ID_INDX         0x0
151
152 #define HOST_INTF_LE    0x0     /* Host interface little endian mode */
153 #define HOST_INTF_BE    0x1     /* Host interface big endian mode */
154
155 /* FT1000 to Host Doorbell assignments */
156 #define FT1000_DB_DPRAM_RX      0x0001  /* this value indicates that DSP
157                                          * has data for host in DPRAM
158                                          */
159 #define FT1000_DB_DNLD_RX       0x0002  /* Downloader handshake doorbell */
160 #define FT1000_ASIC_RESET_REQ   0x0004  /* DSP requesting host to
161                                          * reset the ASIC
162                                          */
163 #define FT1000_DSP_ASIC_RESET   0x0008  /* DSP indicating host that
164                                          * it will reset the ASIC
165                                          */
166 #define FT1000_DB_COND_RESET    0x0010  /* DSP request for a card reset. */
167
168 /* Host to FT1000 Doorbell assignments */
169 #define FT1000_DB_DPRAM_TX      0x0100  /* this value indicates that host
170                                          * has data for DSP in DPRAM.
171                                          */
172 #define FT1000_DB_DNLD_TX       0x0200  /* Downloader handshake doorbell */
173 #define FT1000_ASIC_RESET_DSP   0x0400  /* Responds to FT1000_ASIC_RESET_REQ */
174 #define FT1000_DB_HB            0x1000  /* Indicates that supervisor has a
175                                          * heartbeat message for DSP.
176                                          */
177
178 #define hi                      0x6869  /* PC Card heartbeat values */
179 #define ho                      0x686f  /* PC Card heartbeat values */
180
181 /* Magnemite specific defines */
182 #define hi_mag                  0x6968  /* Byte swap hi to avoid
183                                          * additional system call
184                                          */
185 #define ho_mag                  0x6f68  /* Byte swap ho to avoid
186                                          * additional system call
187                                          */
188
189 /* Bit field definitions for Host Interrupt Status Register */
190 /* Indicate the cause of an interrupt. */
191 #define ISR_EMPTY               0x00    /* no bits set */
192 #define ISR_DOORBELL_ACK        0x01    /* Doorbell acknowledge from DSP */
193 #define ISR_DOORBELL_PEND       0x02    /* Doorbell pending from DSP */
194 #define ISR_RCV                 0x04    /* Packet available in Downlink FIFO */
195 #define ISR_WATERMARK           0x08    /* Watermark requirements satisfied */
196
197 /* Bit field definition for Host Interrupt Mask */
198 #define ISR_MASK_NONE           0x0000  /* no bits set */
199 #define ISR_MASK_DOORBELL_ACK   0x0001  /* Doorbell acknowledge mask */
200 #define ISR_MASK_DOORBELL_PEND  0x0002  /* Doorbell pending mask */
201 #define ISR_MASK_RCV            0x0004  /* Downlink Packet available mask */
202 #define ISR_MASK_WATERMARK      0x0008  /* Watermark interrupt mask */
203 #define ISR_MASK_ALL            0xffff  /* Mask all interrupts */
204 /* Default interrupt mask
205  * (Enable Doorbell pending and Packet available interrupts)
206  */
207 #define ISR_DEFAULT_MASK        0x7ff9
208
209 /* Bit field definition for Host Control Register */
210 #define DSP_RESET_BIT           0x0001  /* Bit field to control
211                                          * dsp reset state
212                                          */
213                                         /* (0 = out of reset 1 = reset) */
214 #define ASIC_RESET_BIT          0x0002  /* Bit field to control
215                                          * ASIC reset state
216                                          */
217                                         /* (0 = out of reset 1 = reset) */
218 #define DSP_UNENCRYPTED         0x0004
219 #define DSP_ENCRYPTED           0x0008
220 #define EFUSE_MEM_DISABLE       0x0040
221
222 /* Application specific IDs */
223 #define DSPID           0x20
224 #define HOSTID          0x10
225 #define DSPAIRID        0x90
226 #define DRIVERID        0x00
227 #define NETWORKID       0x20
228
229 /* Size of DPRAM Message */
230 #define MAX_CMD_SQSIZE  1780
231
232 #define ENET_MAX_SIZE           1514
233 #define ENET_HEADER_SIZE        14
234
235 #define SLOWQ_TYPE      0
236 #define FASTQ_TYPE      1
237
238 #define MAX_DSP_SESS_REC        1024
239
240 #define DSP_QID_OFFSET  4
241
242 /* Driver message types */
243 #define MEDIA_STATE             0x0010
244 #define TIME_UPDATE             0x0020
245 #define DSP_PROVISION           0x0030
246 #define DSP_INIT_MSG            0x0050
247 #define DSP_HIBERNATE           0x0060
248 #define DSP_STORE_INFO          0x0070
249 #define DSP_GET_INFO            0x0071
250 #define GET_DRV_ERR_RPT_MSG     0x0073
251 #define RSP_DRV_ERR_RPT_MSG     0x0074
252
253 /* Driver Error Messages for DSP */
254 #define DSP_HB_INFO             0x7ef0
255 #define DSP_FIFO_INFO           0x7ef1
256 #define DSP_CONDRESET_INFO      0x7ef2
257 #define DSP_CMDLEN_INFO         0x7ef3
258 #define DSP_CMDPHCKSUM_INFO     0x7ef4
259 #define DSP_PKTPHCKSUM_INFO     0x7ef5
260 #define DSP_PKTLEN_INFO         0x7ef6
261 #define DSP_USER_RESET          0x7ef7
262 #define FIFO_FLUSH_MAXLIMIT     0x7ef8
263 #define FIFO_FLUSH_BADCNT       0x7ef9
264 #define FIFO_ZERO_LEN           0x7efa
265
266 /* Pseudo Header structure */
267 struct pseudo_hdr {
268         unsigned short  length;         /* length of msg body */
269         unsigned char   source;         /* hardware source id */
270                                         /*    Host = 0x10 */
271                                         /*    Dsp  = 0x20 */
272         unsigned char   destination;    /* hardware destination id
273                                          * (refer to source)
274                                          */
275         unsigned char   portdest;       /* software destination port id */
276                                         /*    Host = 0x00 */
277                                         /*    Applicaton Broadcast = 0x10 */
278                                         /*    Network Stack = 0x20 */
279                                         /*    Dsp OAM = 0x80 */
280                                         /*    Dsp Airlink = 0x90 */
281                                         /*    Dsp Loader = 0xa0 */
282                                         /*    Dsp MIP = 0xb0 */
283         unsigned char   portsrc;        /* software source port id
284                                          * (refer to portdest)
285                                          */
286         unsigned short  sh_str_id;      /* not used */
287         unsigned char   control;        /* not used */
288         unsigned char   rsvd1;
289         unsigned char   seq_num;        /* message sequence number */
290         unsigned char   rsvd2;
291         unsigned short  qos_class;      /* not used */
292         unsigned short  checksum;       /* pseudo header checksum */
293 } __packed;
294
295 struct drv_msg {
296         struct pseudo_hdr pseudo;
297         u16 type;
298         u16 length;
299         u8  data[0];
300 } __packed;
301
302 struct media_msg {
303         struct pseudo_hdr pseudo;
304         u16 type;
305         u16 length;
306         u16 state;
307         u32 ip_addr;
308         u32 net_mask;
309         u32 gateway;
310         u32 dns_1;
311         u32 dns_2;
312 } __packed;
313
314 struct dsp_init_msg {
315         struct pseudo_hdr pseudo;
316         u16 type;
317         u16 length;
318         u8 DspVer[DSPVERSZ];            /* DSP version number */
319         u8 HwSerNum[HWSERNUMSZ];        /* Hardware Serial Number */
320         u8 Sku[SKUSZ];                  /* SKU */
321         u8 eui64[EUISZ];                /* EUI64 */
322         u8 ProductMode[MODESZ];         /* Product Mode (Market/Production) */
323         u8 RfCalVer[CALVERSZ];          /* Rf Calibration version */
324         u8 RfCalDate[CALDATESZ];        /* Rf Calibration date */
325 } __packed;
326
327 struct prov_record {
328         struct list_head list;
329         u8 *pprov_data;
330 };
331
332 struct ft1000_info {
333         void *priv;
334         struct net_device_stats stats;
335         u16 DrvErrNum;
336         u16 AsicID;
337         int CardReady;
338         int registered;
339         int mediastate;
340         u8 squeseqnum;                  /* sequence number on slow queue */
341         spinlock_t dpram_lock;
342         u16 fifo_cnt;
343         u8 DspVer[DSPVERSZ];            /* DSP version number */
344         u8 HwSerNum[HWSERNUMSZ];        /* Hardware Serial Number */
345         u8 Sku[SKUSZ];                  /* SKU */
346         u8 eui64[EUISZ];                /* EUI64 */
347         time_t ConTm;                   /* Connection Time */
348         u8 ProductMode[MODESZ];
349         u8 RfCalVer[CALVERSZ];
350         u8 RfCalDate[CALDATESZ];
351         u16 DSP_TIME[4];
352         u16 LedStat;
353         u16 ConStat;
354         u16 ProgConStat;
355         struct list_head prov_list;
356         u16 DSPInfoBlklen;
357         int (*ft1000_reset)(void *);
358         u16 DSPInfoBlk[MAX_DSP_SESS_REC];
359         union {
360                 u16 Rec[MAX_DSP_SESS_REC];
361                 u32 MagRec[MAX_DSP_SESS_REC/2];
362         } DSPSess;
363         struct proc_dir_entry *ft1000_proc_dir;
364         char netdevname[IFNAMSIZ];
365 };