📄 e1000_hw.h
字号:
#define E1000_MNG_DHCP_COOKIE_STATUS_PARSING_SUPPORT 0x1 /* DHCP parsing enabled */#define E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT 0x2 /* DHCP parsing enabled */#define E1000_VFTA_ENTRY_SHIFT 0x5#define E1000_VFTA_ENTRY_MASK 0x7F#define E1000_VFTA_ENTRY_BIT_SHIFT_MASK 0x1Fstruct e1000_host_mng_command_header { uint8_t command_id; uint8_t checksum; uint16_t reserved1; uint16_t reserved2; uint16_t command_length;};struct e1000_host_mng_command_info { struct e1000_host_mng_command_header command_header; /* Command Head/Command Result Head has 4 bytes */ uint8_t command_data[E1000_HI_MAX_MNG_DATA_LENGTH]; /* Command data can length 0..0x658*/};#ifdef __BIG_ENDIANstruct e1000_host_mng_dhcp_cookie{ uint32_t signature; uint16_t vlan_id; uint8_t reserved0; uint8_t status; uint32_t reserved1; uint8_t checksum; uint8_t reserved3; uint16_t reserved2;};#elsestruct e1000_host_mng_dhcp_cookie{ uint32_t signature; uint8_t status; uint8_t reserved0; uint16_t vlan_id; uint32_t reserved1; uint16_t reserved2; uint8_t reserved3; uint8_t checksum;};#endifint32_t e1000_mng_write_dhcp_info(struct e1000_hw *hw, uint8_t *buffer, uint16_t length);boolean_t e1000_check_mng_mode(struct e1000_hw *hw);boolean_t e1000_enable_tx_pkt_filtering(struct e1000_hw *hw);int32_t e1000_read_eeprom(struct e1000_hw *hw, uint16_t reg, uint16_t words, uint16_t *data);int32_t e1000_validate_eeprom_checksum(struct e1000_hw *hw);int32_t e1000_update_eeprom_checksum(struct e1000_hw *hw);int32_t e1000_write_eeprom(struct e1000_hw *hw, uint16_t reg, uint16_t words, uint16_t *data);int32_t e1000_read_part_num(struct e1000_hw *hw, uint32_t * part_num);int32_t e1000_read_mac_addr(struct e1000_hw * hw);int32_t e1000_swfw_sync_acquire(struct e1000_hw *hw, uint16_t mask);void e1000_swfw_sync_release(struct e1000_hw *hw, uint16_t mask);/* Filters (multicast, vlan, receive) */uint32_t e1000_hash_mc_addr(struct e1000_hw *hw, uint8_t * mc_addr);void e1000_mta_set(struct e1000_hw *hw, uint32_t hash_value);void e1000_rar_set(struct e1000_hw *hw, uint8_t * mc_addr, uint32_t rar_index);void e1000_write_vfta(struct e1000_hw *hw, uint32_t offset, uint32_t value);/* LED functions */int32_t e1000_setup_led(struct e1000_hw *hw);int32_t e1000_cleanup_led(struct e1000_hw *hw);int32_t e1000_led_on(struct e1000_hw *hw);int32_t e1000_led_off(struct e1000_hw *hw);/* Adaptive IFS Functions *//* Everything else */void e1000_reset_adaptive(struct e1000_hw *hw);void e1000_update_adaptive(struct e1000_hw *hw);void e1000_tbi_adjust_stats(struct e1000_hw *hw, struct e1000_hw_stats *stats, uint32_t frame_len, uint8_t * mac_addr);void e1000_get_bus_info(struct e1000_hw *hw);void e1000_pci_set_mwi(struct e1000_hw *hw);void e1000_pci_clear_mwi(struct e1000_hw *hw);void e1000_read_pci_cfg(struct e1000_hw *hw, uint32_t reg, uint16_t * value);void e1000_write_pci_cfg(struct e1000_hw *hw, uint32_t reg, uint16_t * value);/* Port I/O is only supported on 82544 and newer */uint32_t e1000_io_read(struct e1000_hw *hw, unsigned long port);void e1000_io_write(struct e1000_hw *hw, unsigned long port, uint32_t value);int32_t e1000_disable_pciex_master(struct e1000_hw *hw);int32_t e1000_get_software_semaphore(struct e1000_hw *hw);void e1000_release_software_semaphore(struct e1000_hw *hw);int32_t e1000_check_phy_reset_block(struct e1000_hw *hw);/* PCI Device IDs */#define E1000_DEV_ID_82542 0x1000#define E1000_DEV_ID_82543GC_FIBER 0x1001#define E1000_DEV_ID_82543GC_COPPER 0x1004#define E1000_DEV_ID_82544EI_COPPER 0x1008#define E1000_DEV_ID_82544EI_FIBER 0x1009#define E1000_DEV_ID_82544GC_COPPER 0x100C#define E1000_DEV_ID_82544GC_LOM 0x100D#define E1000_DEV_ID_82540EM 0x100E#define E1000_DEV_ID_82540EM_LOM 0x1015#define E1000_DEV_ID_82540EP_LOM 0x1016#define E1000_DEV_ID_82540EP 0x1017#define E1000_DEV_ID_82540EP_LP 0x101E#define E1000_DEV_ID_82545EM_COPPER 0x100F#define E1000_DEV_ID_82545EM_FIBER 0x1011#define E1000_DEV_ID_82545GM_COPPER 0x1026#define E1000_DEV_ID_82545GM_FIBER 0x1027#define E1000_DEV_ID_82545GM_SERDES 0x1028#define E1000_DEV_ID_82546EB_COPPER 0x1010#define E1000_DEV_ID_82546EB_FIBER 0x1012#define E1000_DEV_ID_82546EB_QUAD_COPPER 0x101D#define E1000_DEV_ID_82541EI 0x1013#define E1000_DEV_ID_82541EI_MOBILE 0x1018#define E1000_DEV_ID_82541ER 0x1078#define E1000_DEV_ID_82547GI 0x1075#define E1000_DEV_ID_82541GI 0x1076#define E1000_DEV_ID_82541GI_MOBILE 0x1077#define E1000_DEV_ID_82541GI_LF 0x107C#define E1000_DEV_ID_82546GB_COPPER 0x1079#define E1000_DEV_ID_82546GB_FIBER 0x107A#define E1000_DEV_ID_82546GB_SERDES 0x107B#define E1000_DEV_ID_82546GB_PCIE 0x108A#define E1000_DEV_ID_82547EI 0x1019#define E1000_DEV_ID_82571EB_COPPER 0x105E#define E1000_DEV_ID_82571EB_FIBER 0x105F#define E1000_DEV_ID_82571EB_SERDES 0x1060#define E1000_DEV_ID_82572EI_COPPER 0x107D#define E1000_DEV_ID_82572EI_FIBER 0x107E#define E1000_DEV_ID_82572EI_SERDES 0x107F#define E1000_DEV_ID_82573E 0x108B#define E1000_DEV_ID_82573E_IAMT 0x108C#define E1000_DEV_ID_82573L 0x109A#define NODE_ADDRESS_SIZE 6#define ETH_LENGTH_OF_ADDRESS 6/* MAC decode size is 128K - This is the size of BAR0 */#define MAC_DECODE_SIZE (128 * 1024)#define E1000_82542_2_0_REV_ID 2#define E1000_82542_2_1_REV_ID 3#define E1000_REVISION_0 0#define E1000_REVISION_1 1#define E1000_REVISION_2 2#define E1000_REVISION_3 3#define SPEED_10 10#define SPEED_100 100#define SPEED_1000 1000#define HALF_DUPLEX 1#define FULL_DUPLEX 2/* The sizes (in bytes) of a ethernet packet */#define ENET_HEADER_SIZE 14#define MAXIMUM_ETHERNET_FRAME_SIZE 1518 /* With FCS */#define MINIMUM_ETHERNET_FRAME_SIZE 64 /* With FCS */#define ETHERNET_FCS_SIZE 4#define MAXIMUM_ETHERNET_PACKET_SIZE \ (MAXIMUM_ETHERNET_FRAME_SIZE - ETHERNET_FCS_SIZE)#define MINIMUM_ETHERNET_PACKET_SIZE \ (MINIMUM_ETHERNET_FRAME_SIZE - ETHERNET_FCS_SIZE)#define CRC_LENGTH ETHERNET_FCS_SIZE#define MAX_JUMBO_FRAME_SIZE 0x3F00/* 802.1q VLAN Packet Sizes */#define VLAN_TAG_SIZE 4 /* 802.3ac tag (not DMAed) *//* Ethertype field values */#define ETHERNET_IEEE_VLAN_TYPE 0x8100 /* 802.3ac packet */#define ETHERNET_IP_TYPE 0x0800 /* IP packets */#define ETHERNET_ARP_TYPE 0x0806 /* Address Resolution Protocol (ARP) *//* Packet Header defines */#define IP_PROTOCOL_TCP 6#define IP_PROTOCOL_UDP 0x11/* This defines the bits that are set in the Interrupt Mask * Set/Read Register. Each bit is documented below: * o RXDMT0 = Receive Descriptor Minimum Threshold hit (ring 0) * o RXSEQ = Receive Sequence Error */#define POLL_IMS_ENABLE_MASK ( \ E1000_IMS_RXDMT0 | \ E1000_IMS_RXSEQ)/* This defines the bits that are set in the Interrupt Mask * Set/Read Register. Each bit is documented below: * o RXT0 = Receiver Timer Interrupt (ring 0) * o TXDW = Transmit Descriptor Written Back * o RXDMT0 = Receive Descriptor Minimum Threshold hit (ring 0) * o RXSEQ = Receive Sequence Error * o LSC = Link Status Change */#define IMS_ENABLE_MASK ( \ E1000_IMS_RXT0 | \ E1000_IMS_TXDW | \ E1000_IMS_RXDMT0 | \ E1000_IMS_RXSEQ | \ E1000_IMS_LSC)/* Number of high/low register pairs in the RAR. The RAR (Receive Address * Registers) holds the directed and multicast addresses that we monitor. We * reserve one of these spots for our directed address, allowing us room for * E1000_RAR_ENTRIES - 1 multicast addresses. */#define E1000_RAR_ENTRIES 15#define MIN_NUMBER_OF_DESCRIPTORS 8#define MAX_NUMBER_OF_DESCRIPTORS 0xFFF8/* Receive Descriptor */struct e1000_rx_desc { uint64_t buffer_addr; /* Address of the descriptor's data buffer */ uint16_t length; /* Length of data DMAed into data buffer */ uint16_t csum; /* Packet checksum */ uint8_t status; /* Descriptor status */ uint8_t errors; /* Descriptor Errors */ uint16_t special;};/* Receive Descriptor - Extended */union e1000_rx_desc_extended { struct { uint64_t buffer_addr; uint64_t reserved; } read; struct { struct { uint32_t mrq; /* Multiple Rx Queues */ union { uint32_t rss; /* RSS Hash */ struct { uint16_t ip_id; /* IP id */ uint16_t csum; /* Packet Checksum */ } csum_ip; } hi_dword; } lower; struct { uint32_t status_error; /* ext status/error */ uint16_t length; uint16_t vlan; /* VLAN tag */ } upper; } wb; /* writeback */};#define MAX_PS_BUFFERS 4/* Receive Descriptor - Packet Split */union e1000_rx_desc_packet_split { struct { /* one buffer for protocol header(s), three data buffers */ uint64_t buffer_addr[MAX_PS_BUFFERS]; } read; struct { struct { uint32_t mrq; /* Multiple Rx Queues */ union { uint32_t rss; /* RSS Hash */ struct { uint16_t ip_id; /* IP id */ uint16_t csum; /* Packet Checksum */ } csum_ip; } hi_dword; } lower; struct { uint32_t status_error; /* ext status/error */ uint16_t length0; /* length of buffer 0 */ uint16_t vlan; /* VLAN tag */ } middle; struct { uint16_t header_status; uint16_t length[3]; /* length of buffers 1-3 */ } upper; uint64_t reserved; } wb; /* writeback */};/* Receive Decriptor bit definitions */#define E1000_RXD_STAT_DD 0x01 /* Descriptor Done */#define E1000_RXD_STAT_EOP 0x02 /* End of Packet */#define E1000_RXD_STAT_IXSM 0x04 /* Ignore checksum */#define E1000_RXD_STAT_VP 0x08 /* IEEE VLAN Packet */#define E1000_RXD_STAT_UDPCS 0x10 /* UDP xsum caculated */#define E1000_RXD_STAT_TCPCS 0x20 /* TCP xsum calculated */#define E1000_RXD_STAT_IPCS 0x40 /* IP xsum calculated */#define E1000_RXD_STAT_PIF 0x80 /* passed in-exact filter */#define E1000_RXD_STAT_IPIDV 0x200 /* IP identification valid */#define E1000_RXD_STAT_UDPV 0x400 /* Valid UDP checksum */#define E1000_RXD_STAT_ACK 0x8000 /* ACK Packet indication */#define E1000_RXD_ERR_CE 0x01 /* CRC Error */#define E1000_RXD_ERR_SE 0x02 /* Symbol Error */#define E1000_RXD_ERR_SEQ 0x04 /* Sequence Error */#define E1000_RXD_ERR_CXE 0x10 /* Carrier Extension Error */#define E1000_RXD_ERR_TCPE 0x20 /* TCP/UDP Checksum Error */#define E1000_RXD_ERR_IPE 0x40 /* IP Checksum Error */#define E1000_RXD_ERR_RXE 0x80 /* Rx Data Error */#define E1000_RXD_SPC_VLAN_MASK 0x0FFF /* VLAN ID is in lower 12 bits */#define E1000_RXD_SPC_PRI_MASK 0xE000 /* Priority is in upper 3 bits */#define E1000_RXD_SPC_PRI_SHIFT 13#define E1000_RXD_SPC_CFI_MASK 0x1000 /* CFI is bit 12 */#define E1000_RXD_SPC_CFI_SHIFT 12#define E1000_RXDEXT_STATERR_CE 0x01000000#define E1000_RXDEXT_STATERR_SE 0x02000000#define E1000_RXDEXT_STATERR_SEQ 0x04000000#define E1000_RXDEXT_STATERR_CXE 0x10000000#define E1000_RXDEXT_STATERR_TCPE 0x20000000#define E1000_RXDEXT_STATERR_IPE 0x40000000#define E1000_RXDEXT_STATERR_RXE 0x80000000#define E1000_RXDPS_HDRSTAT_HDRSP 0x00008000#define E1000_RXDPS_HDRSTAT_HDRLEN_MASK 0x000003FF/* mask to determine if packets should be dropped due to frame errors */#define E1000_RXD_ERR_FRAME_ERR_MASK ( \ E1000_RXD_ERR_CE | \ E1000_RXD_ERR_SE | \ E1000_RXD_ERR_SEQ | \ E1000_RXD_ERR_CXE | \ E1000_RXD_ERR_RXE)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -