]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - drivers/staging/slicoss/slichw.h
Merge git://git.linux-nfs.org/projects/trondmy/nfs-2.6
[linux-2.6-omap-h63xx.git] / drivers / staging / slicoss / slichw.h
1 /**************************************************************************
2  *
3  * Copyright (c) 2000-2002 Alacritech, Inc.  All rights reserved.
4  *
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above
13  *    copyright notice, this list of conditions and the following
14  *    disclaimer in the documentation and/or other materials provided
15  *    with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY ALACRITECH, INC. ``AS IS'' AND ANY
18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL ALACRITECH, INC. OR
21  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
27  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28  * SUCH DAMAGE.
29  *
30  * The views and conclusions contained in the software and documentation
31  * are those of the authors and should not be interpreted as representing
32  * official policies, either expressed or implied, of Alacritech, Inc.
33  *
34  **************************************************************************/
35
36 /*
37  * FILENAME: slichw.h
38  *
39  * This header file contains definitions that are common to our hardware.
40  */
41 #ifndef __SLICHW_H__
42 #define __SLICHW_H__
43
44 #define PCI_VENDOR_ID_ALACRITECH    0x139A
45 #define SLIC_1GB_DEVICE_ID          0x0005
46 #define SLIC_2GB_DEVICE_ID          0x0007  /*Oasis Device ID */
47
48 #define SLIC_1GB_CICADA_SUBSYS_ID   0x0008
49
50 #define SLIC_NBR_MACS      4
51
52 #define SLIC_RCVBUF_SIZE        2048
53 #define SLIC_RCVBUF_HEADSIZE    34
54 #define SLIC_RCVBUF_TAILSIZE    0
55 #define SLIC_RCVBUF_DATASIZE    (SLIC_RCVBUF_SIZE - (SLIC_RCVBUF_HEADSIZE +\
56                                         SLIC_RCVBUF_TAILSIZE))
57
58 #define VGBSTAT_XPERR           0x40000000
59 #define VGBSTAT_XERRSHFT        25
60 #define VGBSTAT_XCSERR          0x23
61 #define VGBSTAT_XUFLOW          0x22
62 #define VGBSTAT_XHLEN           0x20
63 #define VGBSTAT_NETERR          0x01000000
64 #define VGBSTAT_NERRSHFT        16
65 #define VGBSTAT_NERRMSK         0x1ff
66 #define VGBSTAT_NCSERR          0x103
67 #define VGBSTAT_NUFLOW          0x102
68 #define VGBSTAT_NHLEN           0x100
69 #define VGBSTAT_LNKERR          0x00000080
70 #define VGBSTAT_LERRMSK         0xff
71 #define VGBSTAT_LDEARLY         0x86
72 #define VGBSTAT_LBOFLO          0x85
73 #define VGBSTAT_LCODERR         0x84
74 #define VGBSTAT_LDBLNBL         0x83
75 #define VGBSTAT_LCRCERR         0x82
76 #define VGBSTAT_LOFLO           0x81
77 #define VGBSTAT_LUFLO           0x80
78 #define IRHDDR_FLEN_MSK         0x0000ffff
79 #define IRHDDR_SVALID           0x80000000
80 #define IRHDDR_ERR              0x10000000
81 #define VRHSTAT_802OE           0x80000000
82 #define VRHSTAT_TPOFLO          0x10000000
83 #define VRHSTATB_802UE          0x80000000
84 #define VRHSTATB_RCVE           0x40000000
85 #define VRHSTATB_BUFF           0x20000000
86 #define VRHSTATB_CARRE          0x08000000
87 #define VRHSTATB_LONGE          0x02000000
88 #define VRHSTATB_PREA           0x01000000
89 #define VRHSTATB_CRC            0x00800000
90 #define VRHSTATB_DRBL           0x00400000
91 #define VRHSTATB_CODE           0x00200000
92 #define VRHSTATB_TPCSUM         0x00100000
93 #define VRHSTATB_TPHLEN         0x00080000
94 #define VRHSTATB_IPCSUM         0x00040000
95 #define VRHSTATB_IPLERR         0x00020000
96 #define VRHSTATB_IPHERR         0x00010000
97 #define SLIC_MAX64_BCNT         23
98 #define SLIC_MAX32_BCNT         26
99 #define IHCMD_XMT_REQ           0x01
100 #define IHFLG_IFSHFT            2
101 #define SLIC_RSPBUF_SIZE        32
102
103 #define SLIC_RESET_MAGIC        0xDEAD
104 #define ICR_INT_OFF             0
105 #define ICR_INT_ON              1
106 #define ICR_INT_MASK            2
107
108 #define ISR_ERR                 0x80000000
109 #define ISR_RCV                 0x40000000
110 #define ISR_CMD                 0x20000000
111 #define ISR_IO                  0x60000000
112 #define ISR_UPC                 0x10000000
113 #define ISR_LEVENT              0x08000000
114 #define ISR_RMISS               0x02000000
115 #define ISR_UPCERR              0x01000000
116 #define ISR_XDROP               0x00800000
117 #define ISR_UPCBSY              0x00020000
118 #define ISR_EVMSK               0xffff0000
119 #define ISR_PINGMASK            0x00700000
120 #define ISR_PINGDSMASK          0x00710000
121 #define ISR_UPCMASK             0x11000000
122 #define SLIC_WCS_START          0x80000000
123 #define SLIC_WCS_COMPARE        0x40000000
124 #define SLIC_RCVWCS_BEGIN       0x40000000
125 #define SLIC_RCVWCS_FINISH      0x80000000
126 #define SLIC_PM_MAXPATTERNS     6
127 #define SLIC_PM_PATTERNSIZE     128
128 #define SLIC_PMCAPS_WAKEONLAN   0x00000001
129 #define MIICR_REG_PCR           0x00000000
130 #define MIICR_REG_4             0x00040000
131 #define MIICR_REG_9             0x00090000
132 #define MIICR_REG_16            0x00100000
133 #define PCR_RESET               0x8000
134 #define PCR_POWERDOWN           0x0800
135 #define PCR_SPEED_100           0x2000
136 #define PCR_SPEED_1000          0x0040
137 #define PCR_AUTONEG             0x1000
138 #define PCR_AUTONEG_RST         0x0200
139 #define PCR_DUPLEX_FULL         0x0100
140 #define PSR_LINKUP              0x0004
141
142 #define PAR_ADV100FD            0x0100
143 #define PAR_ADV100HD            0x0080
144 #define PAR_ADV10FD             0x0040
145 #define PAR_ADV10HD             0x0020
146 #define PAR_ASYMPAUSE           0x0C00
147 #define PAR_802_3               0x0001
148
149 #define PAR_ADV1000XFD          0x0020
150 #define PAR_ADV1000XHD          0x0040
151 #define PAR_ASYMPAUSE_FIBER     0x0180
152
153 #define PGC_ADV1000FD           0x0200
154 #define PGC_ADV1000HD           0x0100
155 #define SEEQ_LINKFAIL           0x4000
156 #define SEEQ_SPEED              0x0080
157 #define SEEQ_DUPLEX             0x0040
158 #define TDK_DUPLEX              0x0800
159 #define TDK_SPEED               0x0400
160 #define MRV_REG16_XOVERON       0x0068
161 #define MRV_REG16_XOVEROFF      0x0008
162 #define MRV_SPEED_1000          0x8000
163 #define MRV_SPEED_100           0x4000
164 #define MRV_SPEED_10            0x0000
165 #define MRV_FULLDUPLEX          0x2000
166 #define MRV_LINKUP              0x0400
167
168 #define GIG_LINKUP              0x0001
169 #define GIG_FULLDUPLEX          0x0002
170 #define GIG_SPEED_MASK          0x000C
171 #define GIG_SPEED_1000          0x0008
172 #define GIG_SPEED_100           0x0004
173 #define GIG_SPEED_10            0x0000
174
175 #define MCR_RESET               0x80000000
176 #define MCR_CRCEN               0x40000000
177 #define MCR_FULLD               0x10000000
178 #define MCR_PAD                 0x02000000
179 #define MCR_RETRYLATE           0x01000000
180 #define MCR_BOL_SHIFT           21
181 #define MCR_IPG1_SHIFT          14
182 #define MCR_IPG2_SHIFT          7
183 #define MCR_IPG3_SHIFT          0
184 #define GMCR_RESET              0x80000000
185 #define GMCR_GBIT               0x20000000
186 #define GMCR_FULLD              0x10000000
187 #define GMCR_GAPBB_SHIFT        14
188 #define GMCR_GAPR1_SHIFT        7
189 #define GMCR_GAPR2_SHIFT        0
190 #define GMCR_GAPBB_1000         0x60
191 #define GMCR_GAPR1_1000         0x2C
192 #define GMCR_GAPR2_1000         0x40
193 #define GMCR_GAPBB_100          0x70
194 #define GMCR_GAPR1_100          0x2C
195 #define GMCR_GAPR2_100          0x40
196 #define XCR_RESET               0x80000000
197 #define XCR_XMTEN               0x40000000
198 #define XCR_PAUSEEN             0x20000000
199 #define XCR_LOADRNG             0x10000000
200 #define RCR_RESET               0x80000000
201 #define RCR_RCVEN               0x40000000
202 #define RCR_RCVALL              0x20000000
203 #define RCR_RCVBAD              0x10000000
204 #define RCR_CTLEN               0x08000000
205 #define RCR_ADDRAEN             0x02000000
206 #define GXCR_RESET              0x80000000
207 #define GXCR_XMTEN              0x40000000
208 #define GXCR_PAUSEEN            0x20000000
209 #define GRCR_RESET              0x80000000
210 #define GRCR_RCVEN              0x40000000
211 #define GRCR_RCVALL             0x20000000
212 #define GRCR_RCVBAD             0x10000000
213 #define GRCR_CTLEN              0x08000000
214 #define GRCR_ADDRAEN            0x02000000
215 #define GRCR_HASHSIZE_SHIFT     17
216 #define GRCR_HASHSIZE           14
217
218 #define SLIC_EEPROM_ID        0xA5A5
219 #define SLIC_SRAM_SIZE2GB     (64 * 1024)
220 #define SLIC_SRAM_SIZE1GB     (32 * 1024)
221 #define SLIC_HOSTID_DEFAULT   0xFFFF      /* uninitialized hostid */
222 #define SLIC_NBR_MACS         4
223
224 #ifndef FALSE
225 #define FALSE  0
226 #else
227 #undef  FALSE
228 #define FALSE  0
229 #endif
230
231 #ifndef TRUE
232 #define TRUE   1
233 #else
234 #undef  TRUE
235 #define TRUE   1
236 #endif
237
238 struct slic_rcvbuf {
239     unsigned char     pad1[6];
240     ushort    pad2;
241     u32   pad3;
242     u32   pad4;
243     u32   buffer;
244     u32   length;
245     u32   status;
246     u32   pad5;
247     ushort    pad6;
248     unsigned char     data[SLIC_RCVBUF_DATASIZE];
249 };
250
251  struct slic_hddr_wds {
252   union {
253     struct {
254         u32    frame_status;
255         u32    frame_status_b;
256         u32    time_stamp;
257         u32    checksum;
258     } hdrs_14port;
259     struct {
260         u32    frame_status;
261         ushort     ByteCnt;
262         ushort     TpChksum;
263         ushort     CtxHash;
264         ushort     MacHash;
265         u32    BufLnk;
266     } hdrs_gbit;
267   } u0;
268 };
269
270 #define frame_status14        u0.hdrs_14port.frame_status
271 #define frame_status_b14      u0.hdrs_14port.frame_status_b
272 #define frame_statusGB        u0.hdrs_gbit.frame_status
273
274 struct slic_host64sg {
275         u32        paddrl;
276         u32        paddrh;
277         u32        length;
278 };
279
280 struct slic_host64_cmd {
281     u32       hosthandle;
282     u32       RSVD;
283     unsigned char         command;
284     unsigned char         flags;
285     union {
286         ushort          rsv1;
287         ushort          rsv2;
288     } u0;
289     union {
290         struct {
291                 u32            totlen;
292                 struct slic_host64sg    bufs[SLIC_MAX64_BCNT];
293         } slic_buffers;
294     } u;
295 };
296
297 struct slic_rspbuf {
298     u32   hosthandle;
299     u32   pad0;
300     u32   pad1;
301     u32   status;
302     u32   pad2[4];
303
304 };
305
306 struct slic_regs {
307         u32     slic_reset;             /* Reset Register */
308         u32     pad0;
309
310         u32     slic_icr;               /* Interrupt Control Register */
311         u32     pad2;
312 #define SLIC_ICR                0x0008
313
314         u32     slic_isp;               /* Interrupt status pointer */
315         u32     pad1;
316 #define SLIC_ISP                0x0010
317
318     u32 slic_isr;               /* Interrupt status */
319         u32     pad3;
320 #define SLIC_ISR                0x0018
321
322     u32 slic_hbar;              /* Header buffer address reg */
323         u32             pad4;
324         /* 31-8 - phy addr of set of contiguous hdr buffers
325             7-0 - number of buffers passed
326            Buffers are 256 bytes long on 256-byte boundaries. */
327 #define SLIC_HBAR               0x0020
328 #define SLIC_HBAR_CNT_MSK       0x000000FF
329
330     u32 slic_dbar;      /* Data buffer handle & address reg */
331         u32             pad5;
332
333         /* 4 sets of registers; Buffers are 2K bytes long 2 per 4K page. */
334 #define SLIC_DBAR               0x0028
335 #define SLIC_DBAR_SIZE          2048
336
337     u32 slic_cbar;                      /* Xmt Cmd buf addr regs.*/
338         /* 1 per XMT interface
339            31-5 - phy addr of host command buffer
340             4-0 - length of cmd in multiples of 32 bytes
341            Buffers are 32 bytes up to 512 bytes long */
342 #define SLIC_CBAR               0x0030
343 #define SLIC_CBAR_LEN_MSK       0x0000001F
344 #define SLIC_CBAR_ALIGN         0x00000020
345
346         u32     slic_wcs;               /* write control store*/
347 #define SLIC_WCS                0x0034
348 #define SLIC_WCS_START          0x80000000      /*Start the SLIC (Jump to WCS)*/
349 #define SLIC_WCS_COMPARE        0x40000000      /* Compare with value in WCS*/
350
351     u32 slic_rbar;              /* Response buffer address reg.*/
352         u32             pad7;
353          /*31-8 - phy addr of set of contiguous response buffers
354           7-0 - number of buffers passed
355          Buffers are 32 bytes long on 32-byte boundaries.*/
356 #define SLIC_RBAR               0x0038
357 #define SLIC_RBAR_CNT_MSK       0x000000FF
358 #define SLIC_RBAR_SIZE          32
359
360         u32     slic_stats;             /* read statistics (UPR) */
361         u32             pad8;
362 #define SLIC_RSTAT              0x0040
363
364         u32     slic_rlsr;                      /* read link status */
365         u32             pad9;
366 #define SLIC_LSTAT              0x0048
367
368         u32     slic_wmcfg;                     /* Write Mac Config */
369         u32             pad10;
370 #define SLIC_WMCFG              0x0050
371
372         u32     slic_wphy;                      /* Write phy register */
373         u32             pad11;
374 #define SLIC_WPHY               0x0058
375
376         u32     slic_rcbar;                     /*Rcv Cmd buf addr reg*/
377         u32             pad12;
378 #define SLIC_RCBAR              0x0060
379
380         u32     slic_rconfig;           /* Read SLIC Config*/
381         u32             pad13;
382 #define SLIC_RCONFIG    0x0068
383
384         u32     slic_intagg;            /* Interrupt aggregation time*/
385         u32             pad14;
386 #define SLIC_INTAGG             0x0070
387
388         u32     slic_wxcfg;             /* Write XMIT config reg*/
389         u32             pad16;
390 #define SLIC_WXCFG              0x0078
391
392         u32     slic_wrcfg;             /* Write RCV config reg*/
393         u32             pad17;
394 #define SLIC_WRCFG              0x0080
395
396         u32     slic_wraddral;          /* Write rcv addr a low*/
397         u32             pad18;
398 #define SLIC_WRADDRAL   0x0088
399
400         u32     slic_wraddrah;          /* Write rcv addr a high*/
401         u32             pad19;
402 #define SLIC_WRADDRAH   0x0090
403
404         u32     slic_wraddrbl;          /* Write rcv addr b low*/
405         u32             pad20;
406 #define SLIC_WRADDRBL   0x0098
407
408         u32     slic_wraddrbh;          /* Write rcv addr b high*/
409         u32             pad21;
410 #define SLIC_WRADDRBH   0x00a0
411
412         u32     slic_mcastlow;          /* Low bits of mcast mask*/
413         u32             pad22;
414 #define SLIC_MCASTLOW   0x00a8
415
416         u32     slic_mcasthigh;         /* High bits of mcast mask*/
417         u32             pad23;
418 #define SLIC_MCASTHIGH  0x00b0
419
420         u32     slic_ping;                      /* Ping the card*/
421         u32             pad24;
422 #define SLIC_PING               0x00b8
423
424         u32     slic_dump_cmd;          /* Dump command */
425         u32             pad25;
426 #define SLIC_DUMP_CMD   0x00c0
427
428         u32     slic_dump_data;         /* Dump data pointer */
429         u32             pad26;
430 #define SLIC_DUMP_DATA  0x00c8
431
432         u32     slic_pcistatus; /* Read card's pci_status register */
433         u32             pad27;
434 #define SLIC_PCISTATUS  0x00d0
435
436         u32     slic_wrhostid;          /* Write hostid field */
437         u32             pad28;
438 #define SLIC_WRHOSTID            0x00d8
439 #define SLIC_RDHOSTID_1GB        0x1554
440 #define SLIC_RDHOSTID_2GB        0x1554
441
442         u32     slic_low_power; /* Put card in a low power state */
443         u32             pad29;
444 #define SLIC_LOW_POWER  0x00e0
445
446         u32     slic_quiesce;   /* force slic into quiescent state
447                                          before soft reset */
448         u32             pad30;
449 #define SLIC_QUIESCE    0x00e8
450
451         u32     slic_reset_iface;       /* reset interface queues */
452         u32             pad31;
453 #define SLIC_RESET_IFACE 0x00f0
454
455     u32 slic_addr_upper;        /* Bits 63-32 for host i/f addrs */
456         u32             pad32;
457 #define SLIC_ADDR_UPPER 0x00f8 /*Register is only written when it has changed*/
458
459     u32 slic_hbar64;            /* 64 bit Header buffer address reg */
460         u32             pad33;
461 #define SLIC_HBAR64             0x0100
462
463     u32 slic_dbar64;    /* 64 bit Data buffer handle & address reg */
464         u32             pad34;
465 #define SLIC_DBAR64             0x0108
466
467     u32 slic_cbar64;            /* 64 bit Xmt Cmd buf addr regs. */
468         u32             pad35;
469 #define SLIC_CBAR64             0x0110
470
471     u32 slic_rbar64;            /* 64 bit Response buffer address reg.*/
472         u32             pad36;
473 #define SLIC_RBAR64             0x0118
474
475         u32     slic_rcbar64;           /* 64 bit Rcv Cmd buf addr reg*/
476         u32             pad37;
477 #define SLIC_RCBAR64    0x0120
478
479         u32     slic_stats64;           /*read statistics (64 bit UPR)*/
480         u32             pad38;
481 #define SLIC_RSTAT64    0x0128
482
483         u32     slic_rcv_wcs;   /*Download Gigabit RCV sequencer ucode*/
484         u32             pad39;
485 #define SLIC_RCV_WCS    0x0130
486 #define SLIC_RCVWCS_BEGIN       0x40000000
487 #define SLIC_RCVWCS_FINISH      0x80000000
488
489         u32     slic_wrvlanid;          /* Write VlanId field */
490         u32             pad40;
491 #define SLIC_WRVLANID   0x0138
492
493         u32     slic_read_xf_info;  /* Read Transformer info */
494         u32             pad41;
495 #define SLIC_READ_XF_INFO       0x0140
496
497         u32     slic_write_xf_info; /* Write Transformer info */
498         u32             pad42;
499 #define SLIC_WRITE_XF_INFO      0x0148
500
501         u32     RSVD1;              /* TOE Only */
502         u32             pad43;
503
504         u32     RSVD2;              /* TOE Only */
505         u32             pad44;
506
507         u32     RSVD3;              /* TOE Only */
508         u32             pad45;
509
510         u32     RSVD4;              /* TOE Only */
511         u32             pad46;
512
513         u32     slic_ticks_per_sec; /* Write card ticks per second */
514         u32             pad47;
515 #define SLIC_TICKS_PER_SEC      0x0170
516
517 };
518
519 enum UPR_REQUEST {
520     SLIC_UPR_STATS,
521     SLIC_UPR_RLSR,
522     SLIC_UPR_WCFG,
523     SLIC_UPR_RCONFIG,
524     SLIC_UPR_RPHY,
525     SLIC_UPR_ENLB,
526     SLIC_UPR_ENCT,
527     SLIC_UPR_PDWN,
528     SLIC_UPR_PING,
529     SLIC_UPR_DUMP,
530 };
531
532 struct inicpm_wakepattern {
533     u32    patternlength;
534     unsigned char      pattern[SLIC_PM_PATTERNSIZE];
535     unsigned char      mask[SLIC_PM_PATTERNSIZE];
536 };
537
538 struct inicpm_state {
539     u32                 powercaps;
540     u32                 powerstate;
541     u32                 wake_linkstatus;
542     u32                 wake_magicpacket;
543     u32                 wake_framepattern;
544     struct inicpm_wakepattern    wakepattern[SLIC_PM_MAXPATTERNS];
545 };
546
547 struct slicpm_packet_pattern {
548     u32     priority;
549     u32     reserved;
550     u32     masksize;
551     u32     patternoffset;
552     u32     patternsize;
553     u32     patternflags;
554 };
555
556 enum slicpm_power_state {
557     slicpm_state_unspecified = 0,
558     slicpm_state_d0,
559     slicpm_state_d1,
560     slicpm_state_d2,
561     slicpm_state_d3,
562     slicpm_state_maximum
563 };
564
565 struct slicpm_wakeup_capabilities {
566     enum slicpm_power_state  min_magic_packet_wakeup;
567     enum slicpm_power_state  min_pattern_wakeup;
568     enum slicpm_power_state  min_link_change_wakeup;
569 };
570
571 struct slic_pnp_capabilities {
572         u32 flags;
573         struct slicpm_wakeup_capabilities wakeup_capabilities;
574 };
575
576 struct xmt_stats {
577         u32 xmit_tcp_bytes;
578         u32 xmit_tcp_segs;
579         u32 xmit_bytes;
580         u32 xmit_collisions;
581         u32 xmit_unicasts;
582         u32 xmit_other_error;
583         u32 xmit_excess_collisions;
584 };
585
586 struct rcv_stats {
587         u32 rcv_tcp_bytes;
588         u32 rcv_tcp_segs;
589         u32 rcv_bytes;
590         u32 rcv_unicasts;
591         u32 rcv_other_error;
592         u32 rcv_drops;
593 };
594
595 struct xmt_statsgb {
596         u64 xmit_tcp_bytes;
597         u64 xmit_tcp_segs;
598         u64 xmit_bytes;
599         u64 xmit_collisions;
600         u64 xmit_unicasts;
601         u64 xmit_other_error;
602         u64 xmit_excess_collisions;
603 };
604
605 struct rcv_statsgb {
606         u64 rcv_tcp_bytes;
607         u64 rcv_tcp_segs;
608         u64 rcv_bytes;
609         u64 rcv_unicasts;
610         u64 rcv_other_error;
611         u64 rcv_drops;
612 };
613
614 struct slic_stats {
615     union {
616         struct {
617                 struct xmt_stats  xmt100;
618                 struct rcv_stats  rcv100;
619         } stats_100;
620         struct {
621                 struct xmt_statsgb     xmtGB;
622                 struct rcv_statsgb     rcvGB;
623         } stats_GB;
624     } u;
625 };
626
627 #define xmit_tcp_segs100           u.stats_100.xmt100.xmit_tcp_segs
628 #define xmit_tcp_bytes100          u.stats_100.xmt100.xmit_tcp_bytes
629 #define xmit_bytes100              u.stats_100.xmt100.xmit_bytes
630 #define xmit_collisions100         u.stats_100.xmt100.xmit_collisions
631 #define xmit_unicasts100           u.stats_100.xmt100.xmit_unicasts
632 #define xmit_other_error100        u.stats_100.xmt100.xmit_other_error
633 #define xmit_excess_collisions100  u.stats_100.xmt100.xmit_excess_collisions
634 #define rcv_tcp_segs100            u.stats_100.rcv100.rcv_tcp_segs
635 #define rcv_tcp_bytes100           u.stats_100.rcv100.rcv_tcp_bytes
636 #define rcv_bytes100               u.stats_100.rcv100.rcv_bytes
637 #define rcv_unicasts100            u.stats_100.rcv100.rcv_unicasts
638 #define rcv_other_error100         u.stats_100.rcv100.rcv_other_error
639 #define rcv_drops100               u.stats_100.rcv100.rcv_drops
640 #define xmit_tcp_segs_gb           u.stats_GB.xmtGB.xmit_tcp_segs
641 #define xmit_tcp_bytes_gb          u.stats_GB.xmtGB.xmit_tcp_bytes
642 #define xmit_bytes_gb              u.stats_GB.xmtGB.xmit_bytes
643 #define xmit_collisions_gb         u.stats_GB.xmtGB.xmit_collisions
644 #define xmit_unicasts_gb           u.stats_GB.xmtGB.xmit_unicasts
645 #define xmit_other_error_gb        u.stats_GB.xmtGB.xmit_other_error
646 #define xmit_excess_collisions_gb  u.stats_GB.xmtGB.xmit_excess_collisions
647
648 #define rcv_tcp_segs_gb            u.stats_GB.rcvGB.rcv_tcp_segs
649 #define rcv_tcp_bytes_gb           u.stats_GB.rcvGB.rcv_tcp_bytes
650 #define rcv_bytes_gb               u.stats_GB.rcvGB.rcv_bytes
651 #define rcv_unicasts_gb            u.stats_GB.rcvGB.rcv_unicasts
652 #define rcv_other_error_gb         u.stats_GB.rcvGB.rcv_other_error
653 #define rcv_drops_gb               u.stats_GB.rcvGB.rcv_drops
654
655 struct slic_config_mac {
656     unsigned char        macaddrA[6];
657 };
658
659 #define ATK_FRU_FORMAT        0x00
660 #define VENDOR1_FRU_FORMAT    0x01
661 #define VENDOR2_FRU_FORMAT    0x02
662 #define VENDOR3_FRU_FORMAT    0x03
663 #define VENDOR4_FRU_FORMAT    0x04
664 #define NO_FRU_FORMAT         0xFF
665
666 struct atk_fru {
667     unsigned char        assembly[6];
668     unsigned char        revision[2];
669     unsigned char        serial[14];
670     unsigned char        pad[3];
671 };
672
673 struct vendor1_fru {
674     unsigned char        commodity;
675     unsigned char        assembly[4];
676     unsigned char        revision[2];
677     unsigned char        supplier[2];
678     unsigned char        date[2];
679     unsigned char        sequence[3];
680     unsigned char        pad[13];
681 };
682
683 struct vendor2_fru {
684     unsigned char        part[8];
685     unsigned char        supplier[5];
686     unsigned char        date[3];
687     unsigned char        sequence[4];
688     unsigned char        pad[7];
689 };
690
691 struct vendor3_fru {
692     unsigned char        assembly[6];
693     unsigned char        revision[2];
694     unsigned char        serial[14];
695     unsigned char        pad[3];
696 };
697
698 struct vendor4_fru {
699     unsigned char        number[8];
700     unsigned char        part[8];
701     unsigned char        version[8];
702     unsigned char        pad[3];
703 };
704
705 union oemfru {
706     struct vendor1_fru   vendor1_fru;
707     struct vendor2_fru   vendor2_fru;
708     struct vendor3_fru   vendor3_fru;
709     struct vendor4_fru   vendor4_fru;
710 };
711
712 /*
713    SLIC EEPROM structure for Mojave
714 */
715 struct slic_eeprom {
716         ushort          Id;             /* 00 EEPROM/FLASH Magic code 'A5A5'*/
717         ushort          EecodeSize;     /* 01 Size of EEPROM Codes (bytes * 4)*/
718         ushort          FlashSize;      /* 02 Flash size */
719         ushort          EepromSize;     /* 03 EEPROM Size */
720         ushort          VendorId;       /* 04 Vendor ID */
721         ushort          DeviceId;       /* 05 Device ID */
722         unsigned char           RevisionId;     /* 06 Revision ID */
723         unsigned char           ClassCode[3];   /* 07 Class Code */
724         unsigned char           DbgIntPin;      /* 08 Debug Interrupt pin */
725         unsigned char           NetIntPin0;     /*    Network Interrupt Pin */
726         unsigned char           MinGrant;       /* 09 Minimum grant */
727         unsigned char           MaxLat;         /*    Maximum Latency */
728         ushort          PciStatus;      /* 10 PCI Status */
729         ushort          SubSysVId;      /* 11 Subsystem Vendor Id */
730         ushort          SubSysId;       /* 12 Subsystem ID */
731         ushort          DbgDevId;       /* 13 Debug Device Id */
732         ushort          DramRomFn;      /* 14 Dram/Rom function */
733         ushort          DSize2Pci;      /* 15 DRAM size to PCI (bytes * 64K) */
734         ushort  RSize2Pci;      /* 16 ROM extension size to PCI (bytes * 4k) */
735         unsigned char NetIntPin1;/* 17 Network Interface Pin 1
736                                     (simba/leone only) */
737         unsigned char NetIntPin2; /*Network Interface Pin 2 (simba/leone only)*/
738         union {
739                 unsigned char NetIntPin3;/*18 Network Interface Pin 3
740                                            (simba only)*/
741                 unsigned char FreeTime;/*FreeTime setting (leone/mojave only) */
742         } u1;
743         unsigned char   TBIctl; /*    10-bit interface control (Mojave only) */
744         ushort          DramSize;       /* 19 DRAM size (bytes * 64k) */
745         union {
746                 struct {
747                         /* Mac Interface Specific portions */
748                         struct slic_config_mac  MacInfo[SLIC_NBR_MACS];
749                 } mac;                          /* MAC access for all boards */
750                 struct {
751                         /* use above struct for MAC access */
752                         struct slic_config_mac  pad[SLIC_NBR_MACS - 1];
753                         ushort          DeviceId2;      /* Device ID for 2nd
754                                                                 PCI function */
755                         unsigned char   IntPin2;        /* Interrupt pin for
756                                                            2nd PCI function */
757                         unsigned char   ClassCode2[3];  /* Class Code for 2nd
758                                                                 PCI function */
759                 } mojave;       /* 2nd function access for gigabit board */
760         } u2;
761         ushort          CfgByte6;       /* Config Byte 6 */
762         ushort          PMECapab;       /* Power Mgment capabilities */
763         ushort          NwClkCtrls;     /* NetworkClockControls */
764         unsigned char   FruFormat;      /* Alacritech FRU format type */
765         struct atk_fru   AtkFru;        /* Alacritech FRU information */
766         unsigned char   OemFruFormat;   /* optional OEM FRU format type */
767         union oemfru    OemFru;         /* optional OEM FRU information */
768         unsigned char   Pad[4]; /* Pad to 128 bytes - includes 2 cksum bytes
769                                  *(if OEM FRU info exists) and two unusable
770                                  * bytes at the end */
771 };
772
773 /* SLIC EEPROM structure for Oasis */
774 struct oslic_eeprom {
775         ushort          Id;             /* 00 EEPROM/FLASH Magic code 'A5A5' */
776         ushort          EecodeSize;     /* 01 Size of EEPROM Codes (bytes * 4)*/
777         ushort          FlashConfig0;   /* 02 Flash Config for SPI device 0 */
778         ushort          FlashConfig1;   /* 03 Flash Config for SPI device 1 */
779         ushort          VendorId;       /* 04 Vendor ID */
780         ushort          DeviceId;       /* 05 Device ID (function 0) */
781         unsigned char   RevisionId;     /* 06 Revision ID */
782         unsigned char   ClassCode[3];   /* 07 Class Code for PCI function 0 */
783         unsigned char   IntPin1;        /* 08 Interrupt pin for PCI function 1*/
784         unsigned char   ClassCode2[3];  /* 09 Class Code for PCI function 1 */
785         unsigned char   IntPin2;        /* 10 Interrupt pin for PCI function 2*/
786         unsigned char   IntPin0;        /*    Interrupt pin for PCI function 0*/
787         unsigned char           MinGrant;       /* 11 Minimum grant */
788         unsigned char           MaxLat;         /*    Maximum Latency */
789         ushort          SubSysVId;      /* 12 Subsystem Vendor Id */
790         ushort          SubSysId;       /* 13 Subsystem ID */
791         ushort          FlashSize;      /* 14 Flash size (bytes / 4K) */
792         ushort          DSize2Pci;      /* 15 DRAM size to PCI (bytes / 64K) */
793         ushort          RSize2Pci;      /* 16 Flash (ROM extension) size to
794                                                 PCI (bytes / 4K) */
795         ushort          DeviceId1;      /* 17 Device Id (function 1) */
796         ushort          DeviceId2;      /* 18 Device Id (function 2) */
797         ushort          CfgByte6;       /* 19 Device Status Config Bytes 6-7 */
798         ushort          PMECapab;       /* 20 Power Mgment capabilities */
799         unsigned char           MSICapab;       /* 21 MSI capabilities */
800         unsigned char           ClockDivider;   /*    Clock divider */
801         ushort          PciStatusLow;   /* 22 PCI Status bits 15:0 */
802         ushort          PciStatusHigh;  /* 23 PCI Status bits 31:16 */
803         ushort          DramConfigLow;  /* 24 DRAM Configuration bits 15:0 */
804         ushort          DramConfigHigh; /* 25 DRAM Configuration bits 31:16 */
805         ushort          DramSize;       /* 26 DRAM size (bytes / 64K) */
806         ushort          GpioTbiCtl;/* 27 GPIO/TBI controls for functions 1/0 */
807         ushort          EepromSize;             /* 28 EEPROM Size */
808         struct slic_config_mac MacInfo[2];      /* 29 MAC addresses (2 ports) */
809         unsigned char   FruFormat;      /* 35 Alacritech FRU format type */
810         struct atk_fru  AtkFru; /* Alacritech FRU information */
811         unsigned char   OemFruFormat;   /* optional OEM FRU format type */
812         union oemfru    OemFru;         /* optional OEM FRU information */
813         unsigned char   Pad[4]; /* Pad to 128 bytes - includes 2 checksum bytes
814                                  * (if OEM FRU info exists) and two unusable
815                                  * bytes at the end
816                                  */
817 };
818
819 #define MAX_EECODE_SIZE sizeof(struct slic_eeprom)
820 #define MIN_EECODE_SIZE 0x62    /* code size without optional OEM FRU stuff */
821
822 /* SLIC CONFIG structure
823
824  This structure lives in the CARD structure and is valid for all
825  board types.  It is filled in from the appropriate EEPROM structure
826  by SlicGetConfigData().
827 */
828 struct slic_config {
829         bool EepromValid;       /* Valid EEPROM flag (checksum good?) */
830         ushort          DramSize;       /* DRAM size (bytes / 64K) */
831         struct slic_config_mac MacInfo[SLIC_NBR_MACS]; /* MAC addresses */
832         unsigned char           FruFormat;      /* Alacritech FRU format type */
833         struct atk_fru  AtkFru; /* Alacritech FRU information */
834         unsigned char   OemFruFormat;   /* optional OEM FRU format type */
835         union {
836                 struct vendor1_fru   vendor1_fru;
837                 struct vendor2_fru   vendor2_fru;
838                 struct vendor3_fru   vendor3_fru;
839                 struct vendor4_fru   vendor4_fru;
840         } OemFru;
841 };
842
843 #pragma pack()
844
845 #endif