2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS RTL8139 Driver
5 * PURPOSE: 8139 NIC definitions
10 #define R_MAC 0x00 //MAC address uses bytes 0-5, 6 and 7 are reserved
11 #define R_MCAST0 0x08 //Multicast registers
12 #define R_MCAST1 0x09 //Multicast registers
19 #define R_TXSTS0 0x10 //TX status, 0x10-0x13, 4 bytes
23 #define R_TXSAD0 0x20 //TX start address of descriptor 0
27 #define R_RXSA 0x30 //RX buffer start address
28 #define R_ERXBC 0x34 //Early RX byte count register
29 #define R_ERXSTS 0x36 //Early RX status register
31 #define R_CMD 0x37 //Command register
32 #define B_CMD_TXE 0x04 //Enable TX
33 #define B_CMD_RXE 0x08 //Enable RX
34 #define B_CMD_RST 0x10 //Reset bit
36 #define R_CAPR 0x38 //Current address of packet read
37 #define R_CBA 0x3A //Current buffer address
38 #define R_IM 0x3C //Interrupt mask register
39 #define R_IS 0x3E //Interrupt status register
40 #define R_TC 0x40 //Transmit configuration register
42 #define R_RC 0x44 //Receive configuration register
43 #define B_RC_AAP 0x01 //Accept all packets
44 #define B_RC_APM 0x02 //Accept packets sent to device MAC
45 #define B_RC_AM 0x04 //Accept multicast packets
46 #define B_RC_AB 0x08 //Accept broadcast packets
47 #define B_RC_AR 0x10 //Accept runt (smaller than 64bytes) packets
49 #define R_TCTR 0x48 //Timer counter register
50 #define R_MPC 0x4C //Missed packet counter
51 #define R_9346CR 0x50 //93C46 command register
52 #define R_CFG0 0x51 //Configuration register 0
54 #define R_TINTR 0x54 //Timer interrupt register
55 #define R_MS 0x58 //Media status register
56 #define R_CFG3 0x59 //Configuration register 3
57 #define R_CFG4 0x5A //Configuration register 4
58 #define R_MINTS 0x5C //Multiple interrupt select
59 #define R_PCIID 0x5E //PCI Revision ID = 0x10
60 #define R_DTSTS 0x60 //TX status of all descriptors
61 #define R_BMC 0x62 //Basic mode control register
62 #define R_BMSTS 0x64 //Basic mode status register
63 #define R_ANA 0x66 //Auto-negotiation advertisement
64 #define R_ANLP 0x68 //Auto-negotiation link partner
65 #define R_ANEX 0x6A //Auto-negotiation expansion
66 #define R_DCTR 0x6C //Disconnect counter
67 #define R_FCSCTR 0x6E //False carrier sense counter
68 #define R_NWT 0x70 //N-way test register
69 #define R_RXERRCTR 0x72 //RX error counter
70 #define R_CSCFG 0x74 //CS configuration register
71 #define R_PHYP1 0x78 //PHY parameter 1
72 #define R_TWP 0x7C //Twister parameter
73 #define R_PHYP2 0x80 //PHY parameter 2
74 #define R_PCRC0 0x84 //Power management CRC for wakeup frame 0
82 #define R_WAKE0 0x8C //Power management wakeup frame 0
90 #define R_LSBCRC0 0xCC //LSB of the mask byte of wakeup frame 0 within offset 12 to 75
91 #define R_LSBCRC0 0xCD
92 #define R_LSBCRC0 0xCE
93 #define R_LSBCRC0 0xCF
94 #define R_LSBCRC0 0xD0
95 #define R_LSBCRC0 0xD1
96 #define R_LSBCRC0 0xD2
97 #define R_LSBCRC0 0xD3
98 #define R_CFG5 0xD8 //Configuration register 5
100 //EEPROM Control Bytes
101 #define EE_DATA_READ 0x01 //Chip data out
102 #define EE_DATA_WRITE 0x02 //Chip data in
103 #define EE_SHIFT_CLK 0x04 //Chip shift clock
104 #define EE_CS 0x08 //Chip select
105 #define EE_ENB 0x88 //Chip enable
109 #define EE_READ_CMD 0x06
112 /* NIC prepended structure to a received packet */
113 typedef struct _PACKET_HEADER
{
114 UCHAR Status
; /* See RSR_* constants */
115 UCHAR NextPacket
; /* Pointer to next packet in chain */
116 USHORT PacketLength
; /* Length of packet including this header */
117 } PACKET_HEADER
, *PPACKET_HEADER
;
119 #define IEEE_802_ADDR_LENGTH 6
121 /* Ethernet frame header */
122 typedef struct _ETH_HEADER
{
123 UCHAR Destination
[IEEE_802_ADDR_LENGTH
];
124 UCHAR Source
[IEEE_802_ADDR_LENGTH
];
126 } ETH_HEADER
, *PETH_HEADER
;
128 typedef struct _DISCARD_HEADER
{
129 PACKET_HEADER HWHeader
;
130 ETH_HEADER EthernetHeader
;
131 } DISCARD_HEADER
, *PDISCARD_HEADER
;
133 #define NICDisableInterrupts(Adapter) { \
134 NDIS_DbgPrint(MAX_TRACE, ("NICDisableInterrupts()\n")); \
135 NdisRawWritePortUchar((Adapter)->IOBase + PG0_IMR, 0x00); \
138 #define NICEnableInterrupts(Adapter) { \
139 NDIS_DbgPrint(MAX_TRACE, ("NICEnableInterrupts() Mask (0x%X)\n", (Adapter)->InterruptMask)); \
140 NdisRawWritePortUchar((Adapter)->IOBase + PG0_IMR, (Adapter)->InterruptMask); \
143 VOID NTAPI
MiniportHandleInterrupt(
144 IN NDIS_HANDLE MiniportAdapterContext
);