Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
/*	$NetBSD: if_sipreg.h,v 1.21 2020/03/08 02:44:12 thorpej Exp $	*/

/*-
 * Copyright (c) 2001 The NetBSD Foundation, Inc.
 * All rights reserved.
 *
 * This code is derived from software contributed to The NetBSD Foundation
 * by Jason R. Thorpe.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

/*-
 * Copyright (c) 1999 Network Computer, Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the name of Network Computer, Inc. nor the names of its
 *    contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY NETWORK COMPUTER, INC. AND CONTRIBUTORS
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef _DEV_PCI_IF_SIPREG_H_
#define	_DEV_PCI_IF_SIPREG_H_

/*
 * Register description for the Silicon Integrated Systems SiS 900,
 * SiS 7016, National Semiconductor DP83815 10/100, and National
 * Semiconduction DP83820 10/100/1000 PCI Ethernet controller.
 *
 * Written by Jason R. Thorpe for Network Computer, Inc.
 */

/*
 * Transmit FIFO size.  Used to compute the transmit drain threshold.
 *
 * On the SiS 900, the transmit FIFO is arranged as a 512 32-bit memory
 * array.
 *
 * On the DP83820, we have an 8KB transmit FIFO.
 */
#define	DP83820_SIP_TXFIFO_SIZE	8192
#define	OTHER_SIP_TXFIFO_SIZE	(512 * 4)

/*
 * The SiS900 uses a single descriptor format for both transmit
 * and receive descriptor chains.
 *
 * Note the DP83820 can use 64-bit DMA addresses for link and bufptr.
 * Note also that the buffer pointer and command/status words are in
 * the opposite order on the DP83820 to facilitate 64-bit DMA addresses.
 *
 * For transmit, buffers need not be aligned.  For receive, buffers
 * must be aligned to 4-byte (8-byte on DP83820) boundaries.
 */
#define	SIP_DESC_LINK		0	/* link to next descriptor */
#define	SIP_DESC_CMDSTS		1	/* ccommand/status */
#define	SIP_DESC_BUFPTR		2	/* pointer to DMA segment */

#define	GSIP_DESC_LINK		0
#define	GSIP_DESC_BUFPTR	1
#define	GSIP_DESC_CMDSTS	2
#define	GSIP_DESC_EXTSTS	3	/* extended status */

#define	GSIP64_DESC_LINK_LO	0
#define	GSIP64_DESC_LINK_HI	1
#define	GSIP64_DESC_BUFPTR_LO	2
#define	GSIP64_DESC_BUFPTR_HI	3
#define	GSIP64_DESC_CMDSTS	4
#define	GSIP64_DESC_EXTSTS	5

#define	SIP_NDESC_WORDS		6

struct sip_desc {
	uint32_t	sipd_words[SIP_NDESC_WORDS];
};

/*
 * CMDSTS bits common to transmit and receive.
 */
#define	CMDSTS_OWN	0x80000000	/* owned by consumer */
#define	CMDSTS_MORE	0x40000000	/* more descriptors */
#define	CMDSTS_INTR	0x20000000	/* interrupt when ownership changes */
#define	CMDSTS_SUPCRC	0x10000000	/* suppress CRC */
#define	CMDSTS_OK	0x08000000	/* packet ok */
#define	DP83820_CMDSTS_SIZE_MASK 0x0000ffff	/* packet size */
#define	OTHER_CMDSTS_SIZE_MASK 0x000007ff	/* packet size */

#define	CMDSTS_SIZE(sc, x)	((x) & sc->sc_bits.b_cmdsts_size_mask)

/*
 * CMDSTS bits for transmit.
 */
#define	CMDSTS_Tx_TXA	0x04000000	/* transmit abort */
#define	CMDSTS_Tx_TFU	0x02000000	/* transmit FIFO underrun */
#define	CMDSTS_Tx_CRS	0x01000000	/* carrier sense lost */
#define	CMDSTS_Tx_TD	0x00800000	/* transmit deferred */
#define	CMDSTS_Tx_ED	0x00400000	/* excessive deferral */
#define	CMDSTS_Tx_OWC	0x00200000	/* out of window collision */
#define	CMDSTS_Tx_EC	0x00100000	/* excessive collisions */
#define	CMDSTS_Tx_CCNT	0x000f0000	/* collision count */

#define	CMDSTS_COLLISIONS(x)	(((x) & CMDSTS_Tx_CCNT) >> 16)

/*
 * CMDSTS bits for receive.
 */
#define	CMDSTS_Rx_RXA	0x04000000	/* receive abort */
#define	CMDSTS_Rx_RXO	0x02000000	/* receive overrun */
#define	CMDSTS_Rx_DEST	0x01800000	/* destination class */
#define	CMDSTS_Rx_LONG	0x00400000	/* packet too long */
#define	CMDSTS_Rx_RUNT	0x00200000	/* runt packet */
#define	CMDSTS_Rx_ISE	0x00100000	/* invalid symbol error */
#define	CMDSTS_Rx_CRCE	0x00080000	/* CRC error */
#define	CMDSTS_Rx_FAE	0x00040000	/* frame alignment error */
#define	CMDSTS_Rx_LBP	0x00020000	/* loopback packet */
/* #ifdef DP83820 */
#define	CMDSTS_Rx_IRL	0x00010000	/* in-range length error */
/* #else */
#define	CMDSTS_Rx_COL	0x00010000	/* collision activity */
/* #endif DP83820 */

#define	CMDSTS_Rx_DEST_REJ 0x00000000	/* packet rejected */
#define	CMDSTS_Rx_DEST_STA 0x00800000	/* matched station address */
#define	CMDSTS_Rx_DEST_MUL 0x01000000	/* multicast address */
#define	CMDSTS_Rx_DEST_BRD 0x01800000	/* broadcast address */

/*
 * EXTSTS bits.
 */
#define	EXTSTS_Rx_UDPERR 0x00400000	/* UDP checksum error */
#define	EXTSTS_UDPPKT	 0x00200000	/* perform UDP checksum */
#define	EXTSTS_Rx_TCPERR 0x00100000	/* TCP checksum error */
#define	EXTSTS_TCPPKT	 0x00080000	/* perform TCP checksum */
#define	EXTSTS_Rx_IPERR	 0x00040000	/* IP header checksum error */
#define	EXTSTS_IPPKT	 0x00020000	/* perform IP header checksum */
#define	EXTSTS_VPKT	 0x00010000	/* insert VLAN tag */
#define	EXTSTS_VTCI	 0x0000ffff	/* VLAN tag control information */

/*
 * PCI Configuration space registers.
 */
#define	SIP_PCI_CFGIOA	(PCI_MAPREG_START + 0x00)

#define	SIP_PCI_CFGMA	(PCI_MAPREG_START + 0x04)

/* DP83820 only */
#define	SIP_PCI_CFGMA1	(PCI_MAPREG_START + 0x08)

#define	SIP_PCI_CFGEROMA 0x30		/* expansion ROM address */

#define	SIP_PCI_CFGPMC	 0x40		/* power management cap. */

#define	SIP_PCI_CFGPMCSR 0x44		/* power management ctl. */

/*
 * MAC Operation Registers
 */
#define	SIP_CR		0x00	/* command register */

/* DP83820 only */
#define	CR_RXPRI3	0x00010000	/* Rx priority queue select */
#define	CR_RXPRI2	0x00008000	/* Rx priority queue select */
#define	CR_RXPRI1	0x00004000	/* Rx priority queue select */
#define	CR_RXPRI0	0x00002000	/* Rx priority queue select */
#define	CR_TXPRI3	0x00001000	/* Tx priority queue select */
#define	CR_TXPRI2	0x00000800	/* Tx priority queue select */
#define	CR_TXPRI1	0x00000400	/* Tx priority queue select */
#define	CR_TXPRI0	0x00000200	/* Tx priority queue select */

#define	CR_RLD		0x00000400	/* reload from NVRAM */
#define	CR_RST		0x00000100	/* software reset */
#define	CR_SWI		0x00000080	/* software interrupt */
#define	CR_RXR		0x00000020	/* receiver reset */
#define	CR_TXR		0x00000010	/* transmit reset */
#define	CR_RXD		0x00000008	/* receiver disable */
#define	CR_RXE		0x00000004	/* receiver enable */
#define	CR_TXD		0x00000002	/* transmit disable */
#define	CR_TXE		0x00000001	/* transmit enable */

#define	SIP_CFG		0x04	/* configuration register */
#define	CFG_LNKSTS	0x80000000	/* link status (83815) */
/* #ifdef DP83820 */
#define	CFG_SPEED1000	0x40000000	/* 1000Mb/s input pin */
#define	CFG83820_SPEED100	0x20000000	/* 100Mb/s input pin */
#define	CFG_DUPSTS	0x10000000	/* full-duplex status */
#define	CFG_TBI_EN	0x01000000	/* ten-bit interface enable */
#define	CFG_MODE_1000	0x00400000	/* 1000Mb/s mode enable */
#define	CFG_PINT_DUP	0x00100000	/* interrupt on PHY DUP change */
#define	CFG_PINT_LNK	0x00080000	/* interrupt on PHY LNK change */
#define	CFG_PINT_SPD	0x00040000	/* interrupt on PHY SPD change */
#define	CFG_TMRTEST	0x00020000	/* timer test mode */
#define	CFG_MRM_DIS	0x00010000	/* MRM disable */
#define	CFG_MWI_DIS	0x00008000	/* MWI disable */
#define	CFG_T64ADDR	0x00004000	/* target 64-bit addressing enable */
#define	CFG_PCI64_DET	0x00002000	/* 64-bit PCI bus detected */
#define	CFG_DATA64_EN	0x00001000	/* 64-bit data enable */
#define	CFG_M64ADDR	0x00000800	/* master 64-bit addressing enable */
/* #else */
#define	CFG83815_SPEED100	0x40000000	/* 100Mb/s (83815) */
#define	CFG_FDUP	0x20000000	/* full duplex (83815) */
#define	CFG_POL		0x10000000	/* 10Mb/s polarity (83815) */
#define	CFG_ANEG_DN	0x08000000	/* autonegotiation done (83815) */
#define	CFG_PHY_CFG	0x00fc0000	/* PHY configuration (83815) */
#define	CFG_PINT_ACEN	0x00020000	/* PHY interrupt auto clear (83815) */
#define	CFG_PAUSE_ADV	0x00010000	/* pause advertise (83815) */
#define	CFG_ANEG_SEL	0x0000e000	/* autonegotiation select (83815) */
/* #endif DP83820 */
#define	CFG_PHY_RST	0x00000400	/* PHY reset (83815) */
#define	CFG_PHY_DIS	0x00000200	/* PHY disable (83815) */
/* #ifdef DP83820 */
#define	CFG_EXTSTS_EN	0x00000100	/* extended status enable */
/* #else */
#define	CFG_EUPHCOMP	0x00000100	/* 83810 descriptor compat (83815) */
/* #endif DP83820 */
#define	CFG_EDBMASTEN	0x00002000	/* 635,900B ?? from linux driver */
#define	CFG_RNDCNT	0x00000400	/* 635,900B ?? from linux driver */
#define	CFG_FAIRBO	0x00000200	/* 635,900B ?? from linux driver */
#define	CFG_REQALG	0x00000080	/* PCI bus request alg. */
#define	CFG_SB		0x00000040	/* single backoff */
#define	CFG_POW		0x00000020	/* program out of window timer */
#define	CFG_EXD		0x00000010	/* excessive defferal timer disable */
#define	CFG_PESEL	0x00000008	/* parity error detection action */
/* #ifdef DP83820 */
#define	CFG_BROM_DIS	0x00000004	/* boot ROM disable */
#define	CFG_EXT_125	0x00000002	/* external 125MHz reference select */
/* #endif DP83820 */
#define	CFG_BEM		0x00000001	/* big-endian mode */

#define	SIP_EROMAR	0x08	/* EEPROM access register */
#define	EROMAR_REQ	0x00000400	/* SiS 96x specific */
#define	EROMAR_DONE	0x00000200	/* SiS 96x specific */
#define	EROMAR_GNT	0x00000100	/* SiS 96x specific */
#define	EROMAR_MDC	0x00000040	/* MII clock */
#define	EROMAR_MDDIR	0x00000020	/* MII direction (1 == MAC->PHY) */
#define	EROMAR_MDIO	0x00000010	/* MII data */
#define	EROMAR_EECS	0x00000008	/* chip select */
#define	EROMAR_EESK	0x00000004	/* clock */
#define	EROMAR_EEDO	0x00000002	/* data out */
#define	EROMAR_EEDI	0x00000001	/* data in */

#define	SIP_PTSCR	0x0c	/* PCI test control register */
#define	PTSCR_RBIST_RST	    0x00002000	/* SRAM BIST reset */
#define	PTSCR_RBIST_EN	    0x00000400	/* SRAM BIST enable */
#define	PTSCR_RBIST_DONE    0x00000200	/* SRAM BIST done */
#define	PTSCR_RBIST_RX1FAIL 0x00000100	/* Rx status FIFO BIST fail */
#define	PTSCR_RBIST_RX0FAIL 0x00000080	/* Rx data FIFO BIST fail */
#define	PTSCR_RBIST_TX0FAIL 0x00000020	/* Tx data FIFO BIST fail */
#define	PTSCR_RBIST_HFFAIL  0x00000010	/* hash filter BIST fail */
#define	PTSCR_RBIST_RXFAIL  0x00000008	/* Rx filter BIST failed */
#define	PTSCR_EELOAD_EN	    0x00000004	/* EEPROM load initiate */
#define	PTSCR_EEBIST_EN	    0x00000002	/* EEPROM BIST enable */
#define	PTSCR_EEBIST_FAIL   0x00000001	/* EEPROM BIST failed */
#define	PTSCR_DIS_TEST	0x40000000	/* discard timer test mode */
#define	PTSCR_EROM_TACC	0x0f000000	/* boot rom access time */
#define	PTSCR_TRRAMADR	0x001ff000	/* TX/RX RAM address */
#define	PTSCR_BMTEN	0x00000200	/* bus master test enable */
#define	PTSCR_RRTMEN	0x00000080	/* receive RAM test mode enable */
#define	PTSCR_TRTMEN	0x00000040	/* transmit RAM test mode enable */
#define	PTSCR_SRTMEN	0x00000020	/* status RAM test mode enable */
#define	PTSCR_SRAMADR	0x0000001f	/* status RAM address */

#define	SIP_ISR		0x10	/* interrupt status register */
/* DP83820 only */
#define	ISR_TXDESC3	0x40000000	/* Tx queue 3 */
#define	ISR_TXDESC2	0x20000000	/* Tx queue 2 */
#define	ISR_TXDESC1	0x10000000	/* Tx queue 1 */
#define	ISR_TXDESC0	0x08000000	/* Tx queue 0 */
#define	ISR_RXDESC3	0x04000000	/* Rx queue 3 */
#define	ISR_RXDESC2	0x02000000	/* Rx queue 2 */
#define	ISR_RXDESC1	0x01000000	/* Rx queue 1 */
#define	ISR_RXDESC0	0x00800000	/* Rx queue 0 */

/* non-DP83820 only */
#define	ISR_WAKEEVT	0x10000000	/* wake up event */

#if 0
#ifdef DP83820
#define	ISR_TXRCMP	0x00400000	/* transmit reset complete */
#define	ISR_RXRCMP	0x00200000	/* receive reset complete */
#define	ISR_DPERR	0x00100000	/* detected parity error */
#define	ISR_SSERR	0x00080000	/* signalled system error */
#define	ISR_RMABT	0x00040000	/* received master abort */
#define	ISR_RTABT	0x00020000	/* received target abort */
#else
#define	ISR_TXRCMP	0x02000000	/* transmit reset complete */
#define	ISR_RXRCMP	0x01000000	/* receive reset complete */
#define	ISR_DPERR	0x00800000	/* detected parity error */
#define	ISR_SSERR	0x00400000	/* signalled system error */
#define	ISR_RMABT	0x00200000	/* received master abort */
#define	ISR_RTABT	0x00100000	/* received target abort */
#endif /* DP83820 */
#endif /* 0 */

/* SiS 900 only */
#define	ISR_PAUSE_END	0x08000000	/* end of transmission pause */
#define	ISR_PAUSE_ST	0x04000000	/* start of transmission pause */

#define	ISR_RXSOVR	0x00010000	/* Rx status FIFO overrun */
#define	ISR_HIBERR	0x00008000	/* high bits error set */

/* DP83820 only */
#define	ISR_PHY		0x00004000	/* PHY interrupt */
#define	ISR_PME		0x00002000	/* power management event */

#define	ISR_SWI		0x00001000	/* software interrupt */

/* DP83820 only */
#define	ISR_MIB		0x00000800	/* MIB service */

#define	ISR_TXURN	0x00000400	/* Tx underrun */
#define	ISR_TXIDLE	0x00000200	/* Tx idle */
#define	ISR_TXERR	0x00000100	/* Tx error */
#define	ISR_TXDESC	0x00000080	/* Tx descriptor interrupt */
#define	ISR_TXOK	0x00000040	/* Tx okay */
#define	ISR_RXORN	0x00000020	/* Rx overrun */
#define	ISR_RXIDLE	0x00000010	/* Rx idle */
#define	ISR_RXEARLY	0x00000008	/* Rx early */
#define	ISR_RXERR	0x00000004	/* Rx error */
#define	ISR_RXDESC	0x00000002	/* Rx descriptor interrupt */
#define	ISR_RXOK	0x00000001	/* Rx okay */

#define	SIP_IMR		0x14	/* interrupt mask register */
/* See bits in SIP_ISR */

#define	SIP_IER		0x18	/* interrupt enable register */
#define	IER_IE		0x00000001	/* master interrupt enable */

/* #ifdef DP83820 */
#define	SIP_IHR		0x1c	/* interrupt hold-off register */
#define	IHR_IHCTL	0x00000100	/* interrupt hold-off control */
#define	IHR_IH		0x000000ff	/* interrupt hold-off timer (100us) */
/* #else */
#define	SIP_ENPHY	0x1c	/* enhanced PHY access register */
#define	ENPHY_PHYDATA	0xffff0000	/* PHY data */
#define	ENPHY_DATA_SHIFT 16
#define	ENPHY_PHYADDR	0x0000f800	/* PHY number (7016 only) */
#define	ENPHY_PHYADDR_SHIFT 11
#define	ENPHY_REGADDR	0x000007c0	/* PHY register */
#define	ENPHY_REGADDR_SHIFT 6
#define	ENPHY_RWCMD	0x00000020	/* 1 == read, 0 == write */
#define	ENPHY_ACCESS	0x00000010	/* PHY access enable */
/* #endif DP83820 */

#define	SIP_TXDP	0x20	/* transmit descriptor pointer reg */

/* DP83820 only */
#define	SIP_TXDP_HI	0x24	/* transmit descriptor pointer (high) reg */

#define	DP83820_SIP_TXCFG	0x28	/* transmit configuration register */
#define	OTHER_SIP_TXCFG	0x24	/* transmit configuration register */

#define	TXCFG_CSI	0x80000000	/* carrier sense ignore */
#define	TXCFG_HBI	0x40000000	/* heartbeat ignore */
#define	TXCFG_MLB	0x20000000	/* MAC loopback */
#define	TXCFG_ATP	0x10000000	/* automatic transmit padding */
#define	TXCFG_MXDMA	0x00700000	/* max DMA burst size */

/* DP83820 only */
#define	TXCFG_ECRETRY	0x008000000	/* excessive collision retry enable */
#define	TXCFG_BRST_DIS	0x00080000	/* 1000Mb/s burst disable */

/* DP83820 only */
#define	TXCFG_MXDMA_1024 0x00000000	/*    1024 bytes */
#if 0
#ifdef DP83820
#define	TXCFG_MXDMA_8	 0x00100000	/*       8 bytes */
#define	TXCFG_MXDMA_16	 0x00200000	/*      16 bytes */
#define	TXCFG_MXDMA_32	 0x00300000	/*      32 bytes */
#define	TXCFG_MXDMA_64	 0x00400000	/*      64 bytes */
#define	TXCFG_MXDMA_128	 0x00500000	/*     128 bytes */
#define	TXCFG_MXDMA_256	 0x00600000	/*     256 bytes */
#define	TXCFG_MXDMA_512	 0x00700000	/*     512 bytes */
#define	TXCFG_FLTH_MASK	0x0000ff00	/* Fx fill threshold */
#define	TXCFG_DRTH_MASK	0x000000ff	/* Tx drain threshold */
#else
#define	TXCFG_MXDMA_512	0x00000000	/*     512 bytes */
#define	TXCFG_MXDMA_8	0x00200000	/*       8 bytes */
#define	TXCFG_MXDMA_16	0x00300000	/*      16 bytes */
#define	TXCFG_MXDMA_32	0x00400000	/*      32 bytes */
#define	TXCFG_MXDMA_64	0x00500000	/*      64 bytes */
#define	TXCFG_MXDMA_128	0x00600000	/*     128 bytes */
#define	TXCFG_MXDMA_256	0x00700000	/*     256 bytes */
#define	TXCFG_FLTH_MASK	0x00003f00	/* Tx fill threshold */
#define	TXCFG_DRTH_MASK	0x0000003f	/* Tx drain threshold */
#endif /* DP83820 */
#endif /* 0 */

/* non-DP83820 only */
#define	TXCFG_MXDMA_4	0x00100000	/*       4 bytes */

#define	SIP_GPIOR	0x2c	/* general purpose i/o register */
#define	GPIOR_GP5_IN	0x00004000	/* GP 5 in */
#define	GPIOR_GP4_IN	0x00002000	/* GP 4 in */
#define	GPIOR_GP3_IN	0x00001000	/* GP 3 in */
#define	GPIOR_GP2_IN	0x00000800	/* GP 2 in */
#define	GPIOR_GP1_IN	0x00000400	/* GP 1 in */
#define	GPIOR_GP5_OE	0x00000200	/* GP 5 out enable */
#define	GPIOR_GP4_OE	0x00000100	/* GP 4 out enable */
#define	GPIOR_GP3_OE	0x00000080	/* GP 3 out enable */
#define	GPIOR_GP2_OE	0x00000040	/* GP 2 out enable */
#define	GPIOR_GP1_OE	0x00000020	/* GP 1 out enable */
#define	GPIOR_GP5_OUT	0x00000010	/* GP 5 out */
#define	GPIOR_GP4_OUT	0x00000008	/* GP 4 out */
#define	GPIOR_GP3_OUT	0x00000004	/* GP 3 out */
#define	GPIOR_GP2_OUT	0x00000002	/* GP 2 out */
#define	GPIOR_GP1_OUT	0x00000001	/* GP 1 out */

#define	SIP_RXDP	0x30	/* receive descriptor pointer reg */

/* DP83820 only */
#define	SIP_RXDP_HI	0x34	/* receive descriptor pointer (high) reg */

#define	DP83820_SIP_RXCFG	0x38	/* receive configuration register */
#define	OTHER_SIP_RXCFG	0x34	/* receive configuration register */
#define	RXCFG_AEP	0x80000000	/* accept error packets */
#define	RXCFG_ARP	0x40000000	/* accept runt packets */
/* DP83820 only */
#define	RXCFG_STRIPCRC	0x20000000	/* strip CRC */

#define	RXCFG_ATX	0x10000000	/* accept transmit packets */
#define	RXCFG_ALP	0x08000000	/* accept long packets */

/* DP83820 only */
#define	RXCFG_AIRL	0x04000000	/* accept in-range length err packets */

#define	RXCFG_MXDMA	 0x00700000	/* max DMA burst size */

/* DP83820 only */
#define	RXCFG_MXDMA_1024 0x00000000	/*    1024 bytes */

#if 0
#ifdef DP83820
#define	RXCFG_MXDMA_8	 0x00100000	/*       8 bytes */
#define	RXCFG_MXDMA_16	 0x00200000	/*      16 bytes */
#define	RXCFG_MXDMA_32	 0x00300000	/*      32 bytes */
#define	RXCFG_MXDMA_64	 0x00400000	/*      64 bytes */
#define	RXCFG_MXDMA_128	 0x00500000	/*     128 bytes */
#define	RXCFG_MXDMA_256	 0x00600000	/*     256 bytes */
#define	RXCFG_MXDMA_512	 0x00700000	/*     512 bytes */
#else
#define	RXCFG_MXDMA_512	0x00000000	/*     512 bytes */
#define	RXCFG_MXDMA_8	0x00200000	/*       8 bytes */
#define	RXCFG_MXDMA_16	0x00300000	/*      16 bytes */
#define	RXCFG_MXDMA_32	0x00400000	/*      32 bytes */
#define	RXCFG_MXDMA_64	0x00500000	/*      64 bytes */
#define	RXCFG_MXDMA_128	0x00600000	/*     128 bytes */
#define	RXCFG_MXDMA_256	0x00700000	/*     256 bytes */
#endif /* DP83820 */
#endif /* 0 */

/* non-DP83820 only */
#define	RXCFG_MXDMA_4	0x00100000	/*       4 bytes */
#define	RXCFG_DRTH_MASK	0x0000003e

/* DP83820 only */
#define	SIP_PQCR	0x3c	/* priority queueing control register */
#define	PQCR_RXPQ_4	0x0000000c	/* 4 Rx queues */
#define	PQCR_RXPQ_3	0x00000008	/* 3 Rx queues */
#define	PQCR_RXPQ_2	0x00000004	/* 2 Rx queues */
#define	PQCR_TXFAIR	0x00000002	/* Tx fairness enable */
#define	PQCR_TXPQEN	0x00000001	/* Tx priority queueing enable */

/* DP83815 only */
#define	SIP83815_NS_CCSR	0x3c	/* CLKRUN control/status register (83815) */
#define	CCSR_PMESTS	0x00008000	/* PME status */
#define	CCSR_PMEEN	0x00000100	/* PME enable */
#define	CCSR_CLKRUN_EN	0x00000001	/* clkrun enable */

/* SiS 900 only */
#define	SIP_FLOWCTL	0x38	/* flow control register */
#define	FLOWCTL_PAUSE	0x00000002	/* PAUSE flag */
#define	FLOWCTL_FLOWEN	0x00000001	/* enable flow control */

#define	SIP_NS_WCSR	0x40	/* WoL control/status register (83815/83820) */

#define	SIP_NS_PCR	0x44	/* pause control/status reg (83815/83820) */
#define	PCR_PSEN	0x80000000 /* pause enable */
#define	PCR_PS_MCAST	0x40000000 /* pause on multicast */
#define	PCR_PS_DA	0x20000000 /* pause on DA */
#define	PCR_PS_ACT	0x10000000 /* pause active */
#define	PCR_PS_RCVD	0x08000000 /* pause packet received */
/* #ifdef DP83820 */
#define	PCR_PS_STHI_8	0x03000000 /* Status FIFO Hi Threshold (8packets) */
#define	PCR_PS_STHI_4	0x02000000 /* Status FIFO Hi Threshold (4packets) */
#define	PCR_PS_STHI_2	0x01000000 /* Status FIFO Hi Threshold (2packets) */
#define	PCR_PS_STHI_0	0x00000000 /* Status FIFO Hi Threshold (disable) */
#define	PCR_PS_STLO_8	0x00c00000 /* Status FIFO Lo Threshold (8packets) */
#define	PCR_PS_STLO_4	0x00800000 /* Status FIFO Lo Threshold (4packets) */
#define	PCR_PS_STLO_2	0x00400000 /* Status FIFO Lo Threshold (2packets) */
#define	PCR_PS_STLO_0	0x00000000 /* Status FIFO Lo Threshold (disable) */
#define	PCR_PS_FFHI_8	0x00300000 /* Data FIFO Hi Threshold (8Kbyte) */
#define	PCR_PS_FFHI_4	0x00200000 /* Data FIFO Hi Threshold (4Kbyte) */
#define	PCR_PS_FFHI_2	0x00100000 /* Data FIFO Hi Threshold (2Kbyte) */
#define	PCR_PS_FFHI_0	0x00000000 /* Data FIFO Hi Threshold (disable) */
#define	PCR_PS_FFLO_8	0x000c0000 /* Data FIFO Lo Threshold (8Kbyte) */
#define	PCR_PS_FFLO_4	0x00080000 /* Data FIFO Lo Threshold (4Kbyte) */
#define	PCR_PS_FFLO_2	0x00040000 /* Data FIFO Lo Threshold (2Kbyte) */
#define	PCR_PS_FFLO_0	0x00000000 /* Data FIFO Lo Threshold (disable) */
#define	PCR_PS_TX	0x00020000 /* Transmit PAUSE frame manually */
/* #else */
#define	PCR_PSNEG	0x00200000 /* Pause Negoticated (83815) */
#define	PCR_MLD_EN	0x00010000 /* Manual Load Enable (83815) */
/* #endif DP83820 */
#define PCR_PAUSE_CNT_MASK 0x0000ffff /* pause count mask */
#define PCR_PAUSE_CNT	   65535      /* pause count (512bit-time) */

#define	SIP_RFCR	0x48	/* receive filter control register */
#define	RFCR_RFEN	0x80000000	/* Rx filter enable */
#define	RFCR_AAB	0x40000000	/* accept all broadcast */
#define	RFCR_AAM	0x20000000	/* accept all multicast */
#define	RFCR_AAP	0x10000000	/* accept all physical */
#define	RFCR_APM	0x08000000	/* accept perfect match (83815) */
#define	RFCR_APAT	0x07800000	/* accept pattern match (83815) */
#define	RFCR_AARP	0x00400000	/* accept ARP (83815) */
#define	RFCR_MHEN	0x00200000	/* multicast hash enable (83815) */
#define	RFCR_UHEN	0x00100000	/* unicast hash enable (83815) */
#define	RFCR_ULM	0x00080000	/* U/L bit mask (83815) */
#define	RFCR_NS_RFADDR	0x000003ff	/* Rx filter ext reg address (83815) */
#define	RFCR_RFADDR	0x000f0000	/* Rx filter address */
#define	RFCR_RFADDR_NODE0 0x00000000	/* node address 1, 0 */
#define	RFCR_RFADDR_NODE2 0x00010000	/* node address 3, 2 */
#define	RFCR_RFADDR_NODE4 0x00020000	/* node address 5, 4 */
#define	RFCR_RFADDR_MC0	  0x00040000	/* multicast hash word 0 */
#define	RFCR_RFADDR_MC1	  0x00050000	/* multicast hash word 1 */
#define	RFCR_RFADDR_MC2	  0x00060000	/* multicast hash word 2 */
#define	RFCR_RFADDR_MC3	  0x00070000	/* multicast hash word 3 */
#define	RFCR_RFADDR_MC4	  0x00080000	/* multicast hash word 4 */
#define	RFCR_RFADDR_MC5	  0x00090000	/* multicast hash word 5 */
#define	RFCR_RFADDR_MC6	  0x000a0000	/* multicast hash word 6 */
#define	RFCR_RFADDR_MC7	  0x000b0000	/* multicast hash word 7 */
/* For SiS900B and 635/735 only */
#define	RFCR_RFADDR_MC8	  0x000c0000	/* multicast hash word 8 */
#define	RFCR_RFADDR_MC9	  0x000d0000	/* multicast hash word 9 */
#define	RFCR_RFADDR_MC10  0x000e0000	/* multicast hash word 10 */
#define	RFCR_RFADDR_MC11  0x000f0000	/* multicast hash word 11 */
#define	RFCR_RFADDR_MC12  0x00100000	/* multicast hash word 12 */
#define	RFCR_RFADDR_MC13  0x00110000	/* multicast hash word 13 */
#define	RFCR_RFADDR_MC14  0x00120000	/* multicast hash word 14 */
#define	RFCR_RFADDR_MC15  0x00130000	/* multicast hash word 15 */

#define	RFCR_NS_RFADDR_PMATCH0	0x0000	/* perfect match octets 1-0 */
#define	RFCR_NS_RFADDR_PMATCH2	0x0002	/* perfect match octets 3-2 */
#define	RFCR_NS_RFADDR_PMATCH4	0x0004	/* perfect match octets 5-4 */
#define	RFCR_NS_RFADDR_PCOUNT	0x0006	/* pattern count */

/* DP83820 only */
#define	RFCR_NS_RFADDR_PCOUNT2	0x0008	/* pattern count 2, 3 */
#define	RFCR_NS_RFADDR_SOPAS0	0x000a	/* SecureOn 0, 1 */
#define	RFCR_NS_RFADDR_SOPAS2	0x000c	/* SecureOn 2, 3 */
#define	RFCR_NS_RFADDR_SOPAS4	0x000e	/* SecureOn 4, 5 */
#define	RFCR_NS_RFADDR_PATMEM	0x0200	/* pattern memory */

#define	DP83820_RFCR_NS_RFADDR_FILTMEM	0x0100	/* hash memory */
#define	OTHER_RFCR_NS_RFADDR_FILTMEM	0x0200	/* filter memory (hash/pattern) */

#define	SIP_RFDR	0x4c	/* receive filter data register */
#define	RFDR_BMASK	0x00030000	/* byte mask (83815) */
#define	RFDR_DATA	0x0000ffff	/* data bits */

#define	SIP_NS_BRAR	0x50	/* boot rom address (83815) */
#define	BRAR_AUTOINC	0x80000000	/* autoincrement */
#define	BRAR_ADDR	0x0000ffff	/* address */

#define	SIP_NS_BRDR	0x54	/* boot rom data (83815) */

#define	SIP_NS_SRR	0x58	/* silicon revision register (83815) */
/* #ifdef DP83820 */
#define	SRR_REV_B	0x00000103
/* #else */
#define	SRR_REV_A	0x00000101
#define	SRR_REV_B_1	0x00000200
#define	SRR_REV_B_2	0x00000201
#define	SRR_REV_B_3	0x00000203
#define	SRR_REV_C_1	0x00000300
#define	SRR_REV_C_2	0x00000302
/* #endif DP83820 */

#define	SIP_NS_MIBC	0x5c	/* mib control register (83815) */
#define	MIBC_MIBS	0x00000008	/* mib counter strobe */
#define	MIBC_ACLR	0x00000004	/* clear all counters */
#define	MIBC_FRZ	0x00000002	/* freeze all counters */
#define	MIBC_WRN	0x00000001	/* warning test indicator */

#define	SIP_NS_MIB(mibreg)	/* mib data registers (83815) */	\
	(0x60 + (mibreg))
#define	MIB_RXErroredPkts	0x00
#define	MIB_RXFCSErrors		0x04
#define	MIB_RXMsdPktErrors	0x08
#define	MIB_RXFAErrors		0x0c
#define	MIB_RXSymbolErrors	0x10
#define	MIB_RXFrameTooLong	0x14
/* #ifdef DP83820 */
#define	MIB_RXIRLErrors		0x18
#define	MIB_RXBadOpcodes	0x1c
#define	MIB_RXPauseFrames	0x20
#define	MIB_TXPauseFrames	0x24
#define	MIB_TXSQEErrors		0x28
/* #else */
#define	MIB_RXTXSQEErrors	0x18
/* #endif DP83820 */

/* 83815 only */
#define	SIP_NS_PHY(miireg)	/* PHY registers (83815) */		\
	(0x80 + ((miireg) << 2))

/* #ifdef DP83820 */
#define	SIP_TXDP1	0xa0	/* transmit descriptor pointer (pri 1) */

#define	SIP_TXDP2	0xa4	/* transmit descriptor pointer (pri 2) */

#define	SIP_TXDP3	0xa8	/* transmit descriptor pointer (pri 3) */

#define	SIP_RXDP1	0xb0	/* receive descriptor pointer (pri 1) */

#define	SIP_RXDP2	0xb4	/* receive descriptor pointer (pri 2) */

#define	SIP_RXDP3	0xb8	/* receive descriptor pointer (pri 3) */

#define	SIP_VRCR	0xbc	/* VLAN/IP receive control register */
#define	VRCR_RUDPE	0x00000080	/* reject UDP checksum errors */
#define	VRCR_RTCPE	0x00000040	/* reject TCP checksum errors */
#define	VRCR_RIPE	0x00000020	/* reject IP checksum errors */
#define	VRCR_IPEN	0x00000010	/* IP checksum enable */
#define	VRCR_DUTF	0x00000008	/* discard untagged frames */
#define	VRCR_DVTF	0x00000004	/* discard VLAN tagged frames */
#define	VRCR_VTREN	0x00000002	/* VLAN tag removal enable */
#define	VRCR_VTDEN	0x00000001	/* VLAN tag detection enable */

#define	SIP_VTCR	0xc0	/* VLAN/IP transmit control register */
#define	VTCR_PPCHK	0x00000008	/* per-packet checksum generation */
#define	VTCR_GCHK	0x00000004	/* global checksum generation */
#define	VTCR_VPPTI	0x00000002	/* VLAN per-packet tag insertion */
#define	VTCR_VGTI	0x00000001	/* VLAN global tag insertion */

#define	SIP_VDR		0xc4	/* VLAN data register */
#define	VDR_VTCI	0xffff0000	/* VLAN tag control information */
#define	VDR_VTYPE	0x0000ffff	/* VLAN type field */

#define	SIP83820_NS_CCSR	0xcc	/* CLKRUN control/status register (83820) */
#if 0
#define	CCSR_PMESTS	0x00008000	/* PME status */
#define	CCSR_PMEEN	0x00000100	/* PME enable */
#define	CCSR_CLKRUN_EN	0x00000001	/* clkrun enable */
#endif

#define	SIP_TBICR	0xe0	/* TBI control register */
#define	TBICR_MR_LOOPBACK   0x00004000	/* TBI PCS loopback enable */
#define	TBICR_MR_AN_ENABLE  0x00001000	/* TBI autonegotiation enable */
#define	TBICR_MR_RESTART_AN 0x00000200	/* restart TBI autoneogtiation */

#define	SIP_TBISR	0xe4	/* TBI status register */
#define	TBISR_MR_LINK_STATUS 0x00000020	/* TBI link status */
#define	TBISR_MR_AN_COMPLETE 0x00000004	/* TBI autonegotiation complete */

#define	SIP_TANAR	0xe8	/* TBI autoneg adv. register */
#define	TANAR_NP	0x00008000	/* next page exchange required */
#define	TANAR_RF2	0x00002000	/* remote fault 2 */
#define	TANAR_RF1	0x00001000	/* remote fault 1 */
#define	TANAR_PS2	0x00000100	/* pause encoding 2 */
#define	TANAR_PS1	0x00000080	/* pause encoding 1 */
#define	TANAR_HALF_DUP	0x00000040	/* adv. half duplex */
#define	TANAR_FULL_DUP	0x00000020	/* adv. full duplex */

#define	SIP_TANLPAR	0xec	/* TBI autoneg link partner ability register */
	/* See TANAR bits */

#define	SIP_TANER	0xf0	/* TBI autoneg expansion register */
#define	TANER_NPA	0x00000004	/* we support next page function */
#define	TANER_PR	0x00000002	/* page received from link partner */

#define	SIP_TESR	0xf4	/* TBI extended status register */
#define	TESR_1000FDX	0x00008000	/* we support 1000base FDX */
#define	TESR_1000HDX	0x00004000	/* we support 1000base HDX */
/* #else */
#define	SIP_PMCTL	0xb0	/* power management control register */
#define	PMCTL_GATECLK	0x80000000	/* gate dual clock enable */
#define	PMCTL_WAKEALL	0x40000000	/* wake on all Rx OK */
#define	PMCTL_FRM3ACS	0x04000000	/* 3rd wake-up frame access */
#define	PMCTL_FRM2ACS	0x02000000	/* 2nd wake-up frame access */
#define	PMCTL_FRM1ACS	0x01000000	/* 1st wake-up frame access */
#define	PMCTL_FRM3EN	0x00400000	/* 3rd wake-up frame match enable */
#define	PMCTL_FRM2EN	0x00200000	/* 2nd wake-up frame match enable */
#define	PMCTL_FRM1EN	0x00100000	/* 1st wake-up frame match enable */
#define	PMCTL_ALGORITHM	0x00000800	/* Magic Packet match algorithm */
#define	PMCTL_MAGICPKT	0x00000400	/* Magic Packet match enable */
#define	PMCTL_LINKON	0x00000002	/* link on monitor enable */
#define	PMCTL_LINKLOSS	0x00000001	/* link loss monitor enable */

#define	SIP_PMEVT	0xb4	/* power management wake-up evnt reg */
#define	PMEVT_ALLFRMMAT	0x40000000	/* receive packet ok */
#define	PMEVT_FRM3MAT	0x04000000	/* match 3rd wake-up frame */
#define	PMEVT_FRM2MAT	0x02000000	/* match 2nd wake-up frame */
#define	PMEVT_FRM1MAT	0x01000000	/* match 1st wake-up frame */
#define	PMEVT_MAGICPKT	0x00000400	/* Magic Packet */
#define	PMEVT_ONEVT	0x00000002	/* link on event */
#define	PMEVT_LOSSEVT	0x00000001	/* link loss event */

#define	SIP_WAKECRC	0xbc	/* wake-up frame CRC register */

#define	SIP_WAKEMASK0	0xc0	/* wake-up frame mask registers */
#define	SIP_WAKEMASK1	0xc4
#define	SIP_WAKEMASK2	0xc8
#define	SIP_WAKEMASK3	0xcc
#define	SIP_WAKEMASK4	0xe0
#define	SIP_WAKEMASK5	0xe4
#define	SIP_WAKEMASK6	0xe8
#define	SIP_WAKEMASK7	0xec
/* #endif DP83820 */

/*
 * Revision codes for the SiS 630 chipset built-in Ethernet.
 */
#define	SIS_REV_900B	0x03
#define	SIS_REV_630E	0x81
#define	SIS_REV_630S	0x82
#define	SIS_REV_630EA1	0x83
#define	SIS_REV_630ET	0x84
#define	SIS_REV_635	0x90	/* same for 735 (745?) */
#define	SIS_REV_960	0x91

/*
 * MII operations for recent SiS chipsets
 */
#define	SIS_MII_STARTDELIM	0x01
#define	SIS_MII_READOP		0x02
#define	SIS_MII_WRITEOP		0x01
#define	SIS_MII_TURNAROUND	0x02

/*
 * Serial EEPROM opcodes, including the start bit.
 */
#define	SIP_EEPROM_OPC_ERASE	0x04
#define	SIP_EEPROM_OPC_WRITE	0x05
#define	SIP_EEPROM_OPC_READ	0x06

/*
 * Serial EEPROM address map (byte address) for the SiS900.
 */
#define	SIP_EEPROM_SIGNATURE	0x00	/* SiS 900 signature */
#define	SIP_EEPROM_MASK		0x02	/* `enable' mask */
#define	SIP_EEPROM_VENDOR_ID	0x04	/* PCI vendor ID */
#define	SIP_EEPROM_DEVICE_ID	0x06	/* PCI device ID */
#define	SIP_EEPROM_SUBVENDOR_ID	0x08	/* PCI subvendor ID */
#define	SIP_EEPROM_SUBSYSTEM_ID	0x0a	/* PCI subsystem ID */
#define	SIP_EEPROM_PMC		0x0c	/* PCI power management capabilities */
#define	SIP_EEPROM_reserved	0x0e	/* reserved */
#define	SIP_EEPROM_ETHERNET_ID0	0x10	/* Ethernet address 0, 1 */
#define	SIP_EEPROM_ETHERNET_ID1	0x12	/* Ethernet address 2, 3 */
#define	SIP_EEPROM_ETHERNET_ID2	0x14	/* Ethernet address 4, 5 */
#define	SIP_EEPROM_CHECKSUM	0x16	/* checksum */

/*
 * Serial EEPROM data (byte addresses) for the DP83815.
 */
#define	SIP_DP83815_EEPROM_CHECKSUM	0x16	/* checksum */
#define	SIP_DP83815_EEPROM_LENGTH	0x18	/* length of EEPROM data */

/*
 * Serial EEPROM data (byte addresses) for the DP83820.
 */
#define	SIP_DP83820_EEPROM_SUBSYSTEM_ID	0x00	/* PCI subsystem ID */
#define	SIP_DP83820_EEPROM_SUBVENDOR_ID	0x02	/* PCI subvendor ID */
#define	SIP_DP83820_EEPROM_CFGINT	0x04	/* PCI INT [31:16] */
#define	SIP_DP83820_EEPROM_CONFIG0	0x06	/* configuration word 0 */
#define	SIP_DP83820_EEPROM_CONFIG1	0x08	/* configuration word 1 */
#define	SIP_DP83820_EEPROM_CONFIG2	0x0a	/* configuration word 2 */
#define	SIP_DP83820_EEPROM_CONFIG3	0x0c	/* configuration word 3 */
#define	SIP_DP83820_EEPROM_SOPAS0	0x0e	/* SecureOn [47:32] */
#define	SIP_DP83820_EEPROM_SOPAS1	0x10	/* SecureOn [31:16] */
#define	SIP_DP83820_EEPROM_SOPAS2	0x12	/* SecureOn [15:0] */
#define	SIP_DP83820_EEPROM_PMATCH0	0x14	/* MAC [47:32] */
#define	SIP_DP83820_EEPROM_PMATCH1	0x16	/* MAC [31:16] */
#define	SIP_DP83820_EEPROM_PMATCH2	0x18	/* MAC [15:0] */
#define	SIP_DP83820_EEPROM_CHECKSUM	0x1a	/* checksum */
#define	SIP_DP83820_EEPROM_LENGTH	0x1c	/* length of EEPROM data */

#define	DP83820_CONFIG2_CFG_EXT_125	(1U << 0)
#define	DP83820_CONFIG2_CFG_M64ADDR	(1U << 1)
#define	DP83820_CONFIG2_CFG_DATA64_EN	(1U << 2)
#define	DP83820_CONFIG2_CFG_T64ADDR	(1U << 3)
#define	DP83820_CONFIG2_CFG_MWI_DIS	(1U << 4)
#define	DP83820_CONFIG2_CFG_MRM_DIS	(1U << 5)
#define	DP83820_CONFIG2_CFG_MODE_1000	(1U << 7)
#define	DP83820_CONFIG2_CFG_TBI_EN	(1U << 9)

#endif /* _DEV_PCI_IF_SIPREG_H_ */