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