Moves network drivers out of arch code
[akaros.git] / kern / drivers / net / 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 <net/nic_common.h>
8 #include <net/pbuf.h>
9 #if 1
10 #define e1000_debug(...)                printk(__VA_ARGS__)  
11 #define e1000_interrupt_debug(...)      printk(__VA_ARGS__)  
12 #define e1000_frame_debug(...)          printk(__VA_ARGS__)  
13 #else
14 #define e1000_debug(...)
15 #define e1000_interrupt_debug(...)
16 #define e1000_frame_debug(...)
17 #endif
18
19 #define E1000_IRQ_CPU           0
20
21 #define INTEL_VENDOR_ID         0x8086
22 /* e1000s.  For some info (and lists of more of these, check out
23  * http://pci-ids.ucw.cz/read/PC/8086/  
24  * Some notes:
25  *      - in 2009, paul mentioned that the 82576{,NS} are supported by the igb
26  *      driver in Linux, since they support a more advanced feature set.
27  *      - There are many more e1000s.  We could import the list from pci-ids, or
28  *      something more clever.  This list mostly just tracks devices we've seen
29  *      before. */
30
31 #define INTEL_82543GC_ID        0x1004
32 #define INTEL_82540EM_ID        0x100e          /* qemu's device */
33 #define INTEL_82545EM_ID        0x100f
34 #define INTEL_82576_ID          0x10c9
35 #define INTEL_82576NS_ID        0x150a
36
37 #include "e1000_hw.h"
38
39 // Offset used for indexing IRQs
40 #define KERNEL_IRQ_OFFSET       32
41
42 // Intel Descriptor Related Sizing
43 #define E1000_NUM_TX_DESCRIPTORS        2048
44 #define E1000_NUM_RX_DESCRIPTORS        2048
45
46 // This should be in line with the setting of BSIZE in RCTL
47 #define E1000_RX_MAX_BUFFER_SIZE 2048
48 #define E1000_TX_MAX_BUFFER_SIZE 2048
49 #if 0
50 struct e1000_tx_ring {
51         /* pointer to the descriptor ring memory */
52         void *desc;
53         /* physical address of the descriptor ring */
54         dma_addr_t dma;
55         /* length of descriptor ring in bytes */
56         unsigned int size;
57         /* number of descriptors in the ring */
58         unsigned int count;
59         /* next descriptor to associate a buffer with */
60         unsigned int next_to_use;
61         /* next descriptor to check for DD status bit */
62         unsigned int next_to_clean;
63         /* array of buffer information structs */
64         struct e1000_buffer *buffer_info;
65
66         spinlock_t tx_lock;
67         uint16_t tdh;
68         uint16_t tdt;
69         boolean_t last_tx_tso;
70 };
71
72 struct e1000_rx_ring {
73         /* pointer to the descriptor ring memory */
74         void *desc;
75         /* physical address of the descriptor ring */
76         dma_addr_t dma;
77         /* length of descriptor ring in bytes */
78         unsigned int size;
79         /* number of descriptors in the ring */
80         unsigned int count;
81         /* next descriptor to associate a buffer with */
82         unsigned int next_to_use;
83         /* next descriptor to check for DD status bit */
84         unsigned int next_to_clean;
85         /* array of buffer information structs */
86         struct e1000_buffer *buffer_info;
87         /* arrays of page information for packet split */
88         struct e1000_ps_page *ps_page;
89         struct e1000_ps_page_dma *ps_page_dma;
90
91         /* cpu for rx queue */
92         int cpu;
93
94         uint16_t rdh;
95         uint16_t rdt;
96 };
97 struct e1000_adaptor{
98         struct e1000_tx_ring tx_ring;
99         struct e1000_rx_ring rx_ring;
100
101
102 }
103 #endif
104
105 /* driver private functions */
106 static uint32_t e1000_rr32(uint32_t offset);
107 static void e1000_wr32(uint32_t offset, uint32_t val);
108 #define E1000_WRITE_FLUSH() e1000_rr32(E1000_STATUS)
109
110 void e1000_init(void);
111 void e1000_reset(void);
112 void e1000_interrupt_handler(struct hw_trapframe *hw_tf, void *data);
113 int  e1000_scan_pci(void);
114 void e1000_setup_interrupts(void);
115 void e1000_setup_descriptors(void);
116 void e1000_configure(void);
117 void e1000_handle_rx_packet(void);
118 void e1000_set_rx_descriptor(uint32_t des_num, uint8_t reset_buffer);
119 void e1000_set_tx_descriptor(uint32_t des_num);
120 int  e1000_send_frame(const char* data, size_t len);
121 int e1000_send_pbuf(struct pbuf *p);
122 static void e1000_clean_rx_irq();
123 /* returns a chain of pbuf from the driver */
124 struct pbuf* e1000_recv_pbuf();
125 void process_pbuf(uint32_t srcid, long a0, long a1, long a2);
126 static void schedule_pb(struct pbuf* pb);
127 #endif /* !ROS_INC_E1000_H */