axle OS
x86_32 UNIX-like hobby OS
driver.h
1 #ifndef E1000_DRIVER_H
2 #define E1000_DRIVER_H
3 
4 #define INTEL_VEND 0x8086 //Intel PCI vendor ID
5 #define E1000_DEV 0x100E //e1000 PCI device ID
6 #define E1000_I217 0x153A //Intel I217 device ID
7 #define E1000_82577LM 0x10EA //Intel 82577LM device ID
8 
9 #define REG_CTRL 0x0000
10 #define REG_STATUS 0x0008
11 #define REG_EEPROM 0x0014
12 #define REG_CTRL_EXT 0x0018
13 #define REG_IMASK 0x00D0
14 #define REG_RCTRL 0x0100
15 #define REG_RXDESCLO 0x2800
16 #define REG_RXDESCHI 0x2804
17 #define REG_RXDESCLEN 0x2808
18 #define REG_RXDESCHEAD 0x2810
19 #define REG_RXDESCTAIL 0x2818
20 
21 #define REG_TCTRL 0x0400
22 #define REG_TXDESCLO 0x3800
23 #define REG_TXDESCHI 0x3804
24 #define REG_TXDESCLEN 0x3808
25 #define REG_TXDESCHEAD 0x3810
26 #define REG_TXDESCTAIL 0x3818
27 
28 
29 #define REG_RDTR 0x2820 // RX Delay Timer Register
30 #define REG_RXDCTL 0x3828 // RX Descriptor Control
31 #define REG_RADV 0x282C // RX Int. Absolute Delay Timer
32 #define REG_RSRPD 0x2C00 // RX Small Packet Detect Interrupt
33 
34 
35 
36 #define REG_TIPG 0x0410 // Transmit Inter Packet Gap
37 #define ECTRL_SLU 0x40 //set link up
38 
39 
40 #define RCTL_EN (1 << 1) // Receiver Enable
41 #define RCTL_SBP (1 << 2) // Store Bad Packets
42 #define RCTL_UPE (1 << 3) // Unicast Promiscuous Enabled
43 #define RCTL_MPE (1 << 4) // Multicast Promiscuous Enabled
44 #define RCTL_LPE (1 << 5) // Long Packet Reception Enable
45 #define RCTL_LBM_NONE (0 << 6) // No Loopback
46 #define RCTL_LBM_PHY (3 << 6) // PHY or external SerDesc loopback
47 #define RTCL_RDMTS_HALF (0 << 8) // Free Buffer Threshold is 1/2 of RDLEN
48 #define RTCL_RDMTS_QUARTER (1 << 8) // Free Buffer Threshold is 1/4 of RDLEN
49 #define RTCL_RDMTS_EIGHTH (2 << 8) // Free Buffer Threshold is 1/8 of RDLEN
50 #define RCTL_MO_36 (0 << 12) // Multicast Offset - bits 47:36
51 #define RCTL_MO_35 (1 << 12) // Multicast Offset - bits 46:35
52 #define RCTL_MO_34 (2 << 12) // Multicast Offset - bits 45:34
53 #define RCTL_MO_32 (3 << 12) // Multicast Offset - bits 43:32
54 #define RCTL_BAM (1 << 15) // Broadcast Accept Mode
55 #define RCTL_VFE (1 << 18) // VLAN Filter Enable
56 #define RCTL_CFIEN (1 << 19) // Canonical Form Indicator Enable
57 #define RCTL_CFI (1 << 20) // Canonical Form Indicator Bit Value
58 #define RCTL_DPF (1 << 22) // Discard Pause Frames
59 #define RCTL_PMCF (1 << 23) // Pass MAC Control Frames
60 #define RCTL_SECRC (1 << 26) // Strip Ethernet CRC
61 
62 // Buffer Sizes
63 #define RCTL_BSIZE_256 (3 << 16)
64 #define RCTL_BSIZE_512 (2 << 16)
65 #define RCTL_BSIZE_1024 (1 << 16)
66 #define RCTL_BSIZE_2048 (0 << 16)
67 #define RCTL_BSIZE_4096 ((3 << 16) | (1 << 25))
68 #define RCTL_BSIZE_8192 ((2 << 16) | (1 << 25))
69 #define RCTL_BSIZE_16384 ((1 << 16) | (1 << 25))
70 
71 
72 // Transmit Command
73 
74 #define CMD_EOP (1 << 0) // End of Packet
75 #define CMD_IFCS (1 << 1) // Insert FCS
76 #define CMD_IC (1 << 2) // Insert Checksum
77 #define CMD_RS (1 << 3) // Report Status
78 #define CMD_RPS (1 << 4) // Report Packet Sent
79 #define CMD_VLE (1 << 6) // VLAN Packet Enable
80 #define CMD_IDE (1 << 7) // Interrupt Delay Enable
81 
82 
83 // TCTL Register
84 
85 #define TCTL_EN (1 << 1) // Transmit Enable
86 #define TCTL_PSP (1 << 3) // Pad Short Packets
87 #define TCTL_CT_SHIFT 4 // Collision Threshold
88 #define TCTL_COLD_SHIFT 12 // Collision Distance
89 #define TCTL_SWXOFF (1 << 22) // Software XOFF Transmission
90 #define TCTL_RTLC (1 << 24) // Re-transmit on Late Collision
91 
92 #define TSTA_DD (1 << 0) // Descriptor Done
93 #define TSTA_EC (1 << 1) // Excess Collisions
94 #define TSTA_LC (1 << 2) // Late Collision
95 #define LSTA_TU (1 << 3) // Transmit Underrun
96 
97 #endif