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