xref: /minix/minix/drivers/net/e1000/e1000.h (revision e4dbab1e)
1 /**
2  * @file e1000.h
3  *
4  * @brief Device driver implementation declarations for the
5  *        Intel Pro/1000 Gigabit Ethernet card(s).
6  *
7  * Parts of this code is based on the DragonflyBSD (FreeBSD)
8  * implementation, and the fxp driver for Minix 3.
9  *
10  * @see http://svn.freebsd.org/viewvc/base/head/sys/dev/e1000/
11  * @see fxp.c
12  *
13  * @author Niek Linnenbank <nieklinnenbank@gmail.com>
14  * @date September 2009
15  *
16  */
17 
18 #ifndef __E1000_H
19 #define __E1000_H
20 
21 #include "e1000_hw.h"
22 
23 /**
24  * @name Constants.
25  * @{
26  */
27 
28 /** Number of receive descriptors per card. */
29 #define E1000_RXDESC_NR 256
30 
31 /** Number of transmit descriptors per card. */
32 #define E1000_TXDESC_NR 256
33 
34 /** Size of each I/O buffer per descriptor. */
35 #define E1000_IOBUF_SIZE 2048
36 
37 /** Debug verbosity. */
38 #define E1000_VERBOSE 0
39 
40 /** MAC address override variable. */
41 #define E1000_ENVVAR "E1000ETH"
42 
43 /**
44  * @}
45  */
46 
47 /**
48  * @name Status Flags.
49  * @{
50  */
51 
52 /**
53  * @}
54  */
55 
56 /**
57  * @name Macros.
58  * @{
59  */
60 
61 /**
62  * @brief Print a debug message.
63  * @param level Debug verbosity level.
64  * @param args Arguments to printf().
65  */
66 #define E1000_DEBUG(level, args) \
67 	if ((level) <= E1000_VERBOSE) \
68 	{ \
69 	    printf args; \
70 	} \
71 
72 /**
73  * Read a byte from flash memory.
74  * @param e e1000_t pointer.
75  * @param reg Register offset.
76  */
77 #define E1000_READ_FLASH_REG(e,reg) \
78     *(u32_t *) (((e)->flash) + (reg))
79 
80 /**
81  * Read a 16-bit word from flash memory.
82  * @param e e1000_t pointer.
83  * @param reg Register offset.
84  */
85 #define E1000_READ_FLASH_REG16(e,reg) \
86     *(u16_t *) (((e)->flash) + (reg))
87 
88 /**
89  * Write a 16-bit word to flash memory.
90  * @param e e1000_t pointer.
91  * @param reg Register offset.
92  * @param value New value.
93  */
94 #define E1000_WRITE_FLASH_REG(e,reg,value) \
95     *((u32_t *) (((e)->flash) + (reg))) = (value)
96 
97 /**
98  * Write a 16-bit word to flash memory.
99  * @param e e1000_t pointer.
100  * @param reg Register offset.
101  * @param value New value.
102  */
103 #define E1000_WRITE_FLASH_REG16(e,reg,value) \
104     *((u16_t *) (((e)->flash) + (reg))) = (value)
105 
106 /**
107  * @}
108  */
109 
110 /**
111  * @brief Describes the state of an Intel Pro/1000 card.
112  */
113 typedef struct e1000
114 {
115     int irq;			  /**< Interrupt Request Vector. */
116     int irq_hook;                 /**< Interrupt Request Vector Hook. */
117     u8_t *regs;		  	  /**< Memory mapped hardware registers. */
118     u8_t *flash;		  /**< Optional flash memory. */
119     u32_t flash_base_addr;	  /**< Flash base address. */
120     u16_t (*eeprom_read)(struct e1000 *, int reg);
121 				  /**< Function to read the EEPROM. */
122     int eeprom_done_bit;	  /**< Offset of the EERD.DONE bit. */
123     int eeprom_addr_off;	  /**< Offset of the EERD.ADDR field. */
124 
125     e1000_rx_desc_t *rx_desc;	  /**< Receive Descriptor table. */
126     int rx_desc_count;		  /**< Number of Receive Descriptors. */
127     char *rx_buffer;		  /**< Receive buffer returned by malloc(). */
128     int rx_buffer_size;		  /**< Size of the receive buffer. */
129 
130     e1000_tx_desc_t *tx_desc;	  /**< Transmit Descriptor table. */
131     int tx_desc_count;		  /**< Number of Transmit Descriptors. */
132     char *tx_buffer;		  /**< Transmit buffer returned by malloc(). */
133     int tx_buffer_size;		  /**< Size of the transmit buffer. */
134 } e1000_t;
135 
136 #endif /* __E1000_H */
137