First run at an E1000 driver, with various LWIP fixes.
[akaros.git] / kern / arch / i686 / e1000.h
1 #ifndef ROS_INC_E1000_H
2 #define ROS_INC_E1000_H
3
4 #include <ros/common.h>
5 #include <trap.h>
6 #include <pmap.h>
7 #include <arch/nic_common.h>
8
9 #define e1000_debug(...)                //printk(__VA_ARGS__)  
10 #define e1000_interrupt_debug(...)      //printk(__VA_ARGS__)  
11 #define e1000_frame_debug(...)          //printk(__VA_ARGS__)  
12
13 #define E1000_IRQ_CPU           4
14
15 #define INTEL_VENDOR_ID         0x8086
16 #define INTEL_DEV_ID0           0x100E  // Real E1000
17 #define INTEL_DEV_ID1           0x10c9  // 82576
18 #define INTEL_DEV_ID2           0x150a  // 82576 NS
19
20
21 /********** THIS NEXT FILE IS GPL'D! **************/
22 #include <arch/e1000_hw.h>
23 /********** Back to our regularly scheduled BSD **/
24
25 // Offset used for indexing IRQs
26 #define KERNEL_IRQ_OFFSET       32
27
28 // Intel Descriptor Related Sizing
29 #define E1000_NUM_TX_DESCRIPTORS        2048
30 #define E1000_NUM_RX_DESCRIPTORS        2048
31
32 // This should be in line with the setting of BSIZE in RCTL
33 #define E1000_RX_MAX_BUFFER_SIZE 2048
34 #define E1000_TX_MAX_BUFFER_SIZE 2048
35
36 uint32_t e1000_rr32(uint32_t offset);
37 void e1000_wr32(uint32_t offset, uint32_t val);
38
39 void e1000_init(void);
40 void e1000_reset(void);
41 void e1000_interrupt_handler(trapframe_t* tf, void* data);
42 int  e1000_scan_pci(void);
43 void e1000_read_mac(void);
44 void e1000_setup_interrupts(void);
45 void e1000_setup_descriptors(void);
46 void e1000_configure(void);
47 void e1000_handle_rx_packet(void);
48 void e1000_set_rx_descriptor(uint32_t des_num, uint8_t reset_buffer);
49 void e1000_set_tx_descriptor(uint32_t des_num);
50 int  e1000_send_frame(const char* data, size_t len);
51
52 #endif /* !ROS_INC_E1000_H */