a7c96d561c2cbe7099578846681b271710b9ead0
[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 // Intel Descriptor Related Sizing
40 #define E1000_NUM_TX_DESCRIPTORS        2048
41 #define E1000_NUM_RX_DESCRIPTORS        2048
42
43 // This should be in line with the setting of BSIZE in RCTL
44 #define E1000_RX_MAX_BUFFER_SIZE 2048
45 #define E1000_TX_MAX_BUFFER_SIZE 2048
46 #if 0
47 struct e1000_tx_ring {
48         /* pointer to the descriptor ring memory */
49         void *desc;
50         /* physical address of the descriptor ring */
51         dma_addr_t dma;
52         /* length of descriptor ring in bytes */
53         unsigned int size;
54         /* number of descriptors in the ring */
55         unsigned int count;
56         /* next descriptor to associate a buffer with */
57         unsigned int next_to_use;
58         /* next descriptor to check for DD status bit */
59         unsigned int next_to_clean;
60         /* array of buffer information structs */
61         struct e1000_buffer *buffer_info;
62
63         spinlock_t tx_lock;
64         uint16_t tdh;
65         uint16_t tdt;
66         boolean_t last_tx_tso;
67 };
68
69 struct e1000_rx_ring {
70         /* pointer to the descriptor ring memory */
71         void *desc;
72         /* physical address of the descriptor ring */
73         dma_addr_t dma;
74         /* length of descriptor ring in bytes */
75         unsigned int size;
76         /* number of descriptors in the ring */
77         unsigned int count;
78         /* next descriptor to associate a buffer with */
79         unsigned int next_to_use;
80         /* next descriptor to check for DD status bit */
81         unsigned int next_to_clean;
82         /* array of buffer information structs */
83         struct e1000_buffer *buffer_info;
84         /* arrays of page information for packet split */
85         struct e1000_ps_page *ps_page;
86         struct e1000_ps_page_dma *ps_page_dma;
87
88         /* cpu for rx queue */
89         int cpu;
90
91         uint16_t rdh;
92         uint16_t rdt;
93 };
94 struct e1000_adaptor{
95         struct e1000_tx_ring tx_ring;
96         struct e1000_rx_ring rx_ring;
97
98
99 }
100 #endif
101
102 /* driver private functions */
103 static uint32_t e1000_rr32(uint32_t offset);
104 static void e1000_wr32(uint32_t offset, uint32_t val);
105 #define E1000_WRITE_FLUSH() e1000_rr32(E1000_STATUS)
106
107 void e1000_init(void);
108 void e1000_reset(void);
109 void e1000_interrupt_handler(struct hw_trapframe *hw_tf, void *data);
110 int  e1000_scan_pci(void);
111 void e1000_setup_interrupts(void);
112 void e1000_setup_descriptors(void);
113 void e1000_configure(void);
114 void e1000_handle_rx_packet(void);
115 void e1000_set_rx_descriptor(uint32_t des_num, uint8_t reset_buffer);
116 void e1000_set_tx_descriptor(uint32_t des_num);
117 int  e1000_send_frame(const char* data, size_t len);
118 int e1000_send_pbuf(struct pbuf *p);
119 static void e1000_clean_rx_irq();
120 /* returns a chain of pbuf from the driver */
121 struct pbuf* e1000_recv_pbuf();
122 void process_pbuf(uint32_t srcid, long a0, long a1, long a2);
123 static void schedule_pb(struct pbuf* pb);
124 #endif /* !ROS_INC_E1000_H */