Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Moved the register struct definitions from the source file to the header file.
[palacios.git] / palacios / include / geekos / ne2k.h
1 #ifndef GEEKOS_NE2K_H
2 #define GEEKOS_NE2K_H
3
4 //#include <geekos/ktypes.h>
5 #include <geekos/malloc.h>
6
7 #define NE2K_PAGE0      0x00
8 #define NE2K_PAGE1      0x40
9 #define NE2K_PAGE2      0x80
10 #define NE2K_PAGE3      0xc0
11
12 #define NE2K_BASE_ADDR  0xc100          /* Starting address of the card */
13 #define NE2K_CR         NE2K_BASE_ADDR  /* Command register */
14
15 /* Page 0 register offsets */
16 #define NE2K CLDA0      (NE2K_CR + 0x01)
17 #define NE2K_PSTART     (NE2K_CR + 0x01)
18 #define NE2K_CLDA1      (NE2K_CR + 0x02)
19 #define NE2K_PSTOP      (NE2K_CR + 0x02)
20 #define NE2K_BNRY       (NE2K_CR + 0x03)
21 #define NE2K_TSR        (NE2K_CR + 0x04)
22 #define NE2K_TPSR       (NE2K_CR + 0x04)
23 #define NE2K_NCR        (NE2K_CR + 0x05)
24 #define NE2K_TBCR0      (NE2K_CR + 0x05)
25 #define NE2K_FIFO       (NE2K_CR + 0x06)
26 #define NE2K_TBCR1      (NE2K_CR + 0x06)
27 #define NE2K_ISR        (NE2K_CR + 0x07)        /* Interrupt status register */
28 #define NE2K_CRDA0      (NE2K_CR + 0x08)
29 #define NE2K_RSAR0      (NE2K_CR + 0x08)        /* Remote start address registers */
30 #define NE2K_CRDA1      (NE2K_CR + 0x09)
31 #define NE2K_RSAR1      (NE2K_CR + 0x09)
32 #define NE2K_RBCR0      (NE2K_CR + 0x0a)        /* Remote byte count registers */
33 #define NE2K_RBCR1      (NE2K_CR + 0x0b)
34 #define NE2K_RSR        (NE2K_CR + 0x0c)
35 #define NE2K_RCR        (NE2K_CR + 0x0c)        /* Receive configuration register */
36 #define NE2K_CNTR0      (NE2K_CR + 0x0d)
37 #define NE2K_TCR        (NE2K_CR + 0x0d)        /* Transmit configuration register */
38 #define NE2K_CNTR1      (NE2K_CR + 0x0e)
39 #define NE2K_DCR        (NE2K_CR + 0x0e)        /* Data configuration register */
40 #define NE2K_CNTR2      (NE2K_CR + 0x0f)
41 #define NE2K_IMR        (NE2K_CR + 0x0f)        /* Interrupt mask register */
42
43 /* Page 1 register offsets */
44 #define NE2K_PAR0       (NE2K_CR + 0x01)
45 #define NE2K_PAR1       (NE2K_CR + 0x02)
46 #define NE2K_PAR2       (NE2K_CR + 0x03)
47 #define NE2K_PAR3       (NE2K_CR + 0x04)
48 #define NE2K_PAR4       (NE2K_CR + 0x05)
49 #define NE2K_PAR5       (NE2K_CR + 0x06)
50 #define NE2K_CURR       (NE2K_CR + 0x07)
51 #define NE2K_MAR0       (NE2K_CR + 0x08)
52 #define NE2K_MAR1       (NE2K_CR + 0x09)
53 #define NE2K_MAR2       (NE2K_CR + 0x0a)
54 #define NE2K_MAR3       (NE2K_CR + 0x0b)
55 #define NE2K_MAR4       (NE2K_CR + 0x0c)
56 #define NE2K_MAR5       (NE2K_CR + 0x0d)
57 #define NE2K_MAR6       (NE2K_CR + 0x0e)
58 #define NE2K_MAR7       (NE2K_CR + 0x0f)
59
60 #define NE2K_IRQ        11              /* Interrupt channel */
61
62 struct NE2K_REGS {
63         uchar_t cr;
64         uchar_t isr;
65         uchar_t imr;
66         uchar_t dcr;
67         uchar_t tcr;
68         uchar_t tsr;
69         uchar_t rcr;
70         uchar_t rsr;
71 };
72
73 struct _CR {  //COMMAND REG
74         uint_t stp: 1;  //STOP- software reset
75         uint_t sta: 1;  //START- activates NIC
76         uint_t txp: 1;  //TRANSMIT- set to send
77         uint_t rd:  3;  //REMOTE DMA
78         uint_t ps:  2;  //PAGE SELECT
79 }__attribute__((__packed__)) __attribute__((__aligned__(1)));
80
81 struct _ISR{  //INTERRUPT STATUS REG
82         uint_t prx: 1;  //PACKET RECIEVED
83         uint_t ptx: 1;  //PACKET TRANSMITTED
84         uint_t rxe: 1;  //TRANSMIT ERROR
85         uint_t txe: 1;  //RECEIVE ERROR
86         uint_t ovw: 1;  //OVERWRITE WARNING
87         uint_t cnt: 1;  //COUNTER OVERFLOW
88         uint_t rdc: 1;  //REMOTE DMA COMPLETE
89         uint_t rst: 1;  //RESET STATUS
90 }__attribute__((__packed__)) __attribute__((__aligned__(1)));
91
92 struct _IMR {  //INTERRUPT MASK REG
93         uint_t prxe: 1;  //PACKET RX INTRPT
94         uint_t ptxe: 1;  //PACKET TX INTRPT
95         uint_t rxee: 1;  //RX ERROR INTRPT
96         uint_t txee: 1;  //TX ERROR INTRPt
97         uint_t ovwe: 1;  //OVERWRITE WARNING INTRPT
98         uint_t cnte: 1;  //COUNTER OVERFLOW INTRPT
99         uint_t rdce: 1;  //DMA COMLETE INTRPT
100         uint_t rsvd: 1;
101 }__attribute__((__packed__)) __attribute__((__aligned__(1)));
102
103 struct _DCR {  //DATA CONFIG REGISTER
104         uint_t wts: 1;  //WORD TRANSFER SELECT
105         uint_t bos: 1;  //BYTE ORDER SELECT
106         uint_t las: 1;  //LONG ADDR SELECT
107         uint_t ls:  1;  //LOOPBACK SELECT
108         uint_t arm: 1;  //AUTO-INITIALIZE REMOTE
109         uint_t ft:  2;  //FIFO THRESH SELECT
110 }__attribute__((__packed__)) __attribute__((__aligned__(1)));
111
112 struct _TCR {  //TX CONFIG REGISTER
113         uint_t crc:  1;  //INHIBIT CRC
114         uint_t lb:   2;  //ENCODED LOOPBACK
115         uint_t atd:  1;  //AUTO TRANSMIT
116         uint_t ofst: 1;  //COLLISION OFFSET ENABLE
117         uint_t rsvd: 3;
118 }__attribute__((__packed__)) __attribute__((__aligned__(1)));
119
120 struct _TSR {
121         uint_t ptx:  1;  //PACKET TX
122         uint_t rsvd: 1;
123         uint_t col:  1;  //TX COLLIDED
124         uint_t abt:  1;  //TX ABORTED
125         uint_t crs:  1;  //CARRIER SENSE LOST
126         uint_t fu:   1;  //FIFO UNDERRUN
127         uint_t cdh:  1;  //CD HEARTBEAT
128         uint_t owc:  1;  //OUT OF WINDOW COLLISION
129 }__attribute__((__packed__)) __attribute__((__aligned__(1)));
130
131 struct _RCR {  //RECEIVE CONFIGURATION REGISTER
132         uint_t sep:  1;  //SAVE ERRORED PACKETS
133         uint_t ar:   1;  //ACCEPT RUNT PACKETS
134         uint_t ab:   1;  //ACCEPT BROADCAST
135         uint_t am:   1;  //ACCEPT MULTICAST
136         uint_t pro:  1;  //PROMISCUOUS PHYSICAL
137         uint_t mon:  1;  //MONITOR MODE
138         uint_t rsvd: 2;
139 }__attribute__((__packed__)) __attribute__((__aligned__(1)));
140   
141 struct _RSR {  //RECEIVE STATUS REG
142         uint_t prx: 1;  //PACKET RX INTACT
143         uint_t crc: 1;  //CRC ERROR
144         uint_t fae: 1;  //FRAME ALIGNMENT ERROR
145         uint_t fo:  1;  //FIFO OVERRUN
146         uint_t mpa: 1;  //MISSED PACKET
147         uint_t phy: 1;  //PHYSICAL/MULTICAST ADDR
148         uint_t dis: 1;  //RX DISABLED
149         uint_t dfr: 1;  //DEFERRING
150 }__attribute__((__packed__)) __attribute__((__aligned__(1)));
151
152 int Init_Ne2k();
153 int NE2K_Transmit(struct NE2K_REGS *);
154 int NE2K_Receive();
155
156 #endif  /* GEEKOS_NE2K_H */