⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 e1000_hw.h

📁 COPE the first practical network coding scheme which is developped on click
💻 H
📖 第 1 页 / 共 5 页
字号:
/*******************************************************************************    Copyright(c) 1999 - 2002 Intel Corporation. All rights reserved.    This program is free software; you can redistribute it and/or modify it   under the terms of the GNU General Public License as published by the Free   Software Foundation; either version 2 of the License, or (at your option)   any later version.    This program is distributed in the hope that it will be useful, but WITHOUT   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for   more details.    You should have received a copy of the GNU General Public License along with  this program; if not, write to the Free Software Foundation, Inc., 59   Temple Place - Suite 330, Boston, MA  02111-1307, USA.    The full GNU General Public License is included in this distribution in the  file called LICENSE.    Contact Information:  Linux NICS <linux.nics@intel.com>  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497*******************************************************************************//* e1000_hw.h * Structures, enums, and macros for the MAC */#ifndef _E1000_HW_H_#define _E1000_HW_H_#include "e1000_osdep.h"/* Forward declarations of structures used by the shared code */struct e1000_hw;struct e1000_hw_stats;/* Enumerated types specific to the e1000 hardware *//* Media Access Controlers */typedef enum {    e1000_undefined = 0,    e1000_82542_rev2_0,    e1000_82542_rev2_1,    e1000_82543,    e1000_82544,    e1000_82540,    e1000_82545,    e1000_82546,    e1000_num_macs} e1000_mac_type;/* Media Types */typedef enum {    e1000_media_type_copper = 0,    e1000_media_type_fiber = 1,    e1000_num_media_types} e1000_media_type;typedef enum {    e1000_10_half = 0,    e1000_10_full = 1,    e1000_100_half = 2,    e1000_100_full = 3} e1000_speed_duplex_type;/* Flow Control Settings */typedef enum {    e1000_fc_none = 0,    e1000_fc_rx_pause = 1,    e1000_fc_tx_pause = 2,    e1000_fc_full = 3,    e1000_fc_default = 0xFF} e1000_fc_type;/* PCI bus types */typedef enum {    e1000_bus_type_unknown = 0,    e1000_bus_type_pci,    e1000_bus_type_pcix} e1000_bus_type;/* PCI bus speeds */typedef enum {    e1000_bus_speed_unknown = 0,    e1000_bus_speed_33,    e1000_bus_speed_66,    e1000_bus_speed_100,    e1000_bus_speed_133,    e1000_bus_speed_reserved} e1000_bus_speed;/* PCI bus widths */typedef enum {    e1000_bus_width_unknown = 0,    e1000_bus_width_32,    e1000_bus_width_64} e1000_bus_width;/* PHY status info structure and supporting enums */typedef enum {    e1000_cable_length_50 = 0,    e1000_cable_length_50_80,    e1000_cable_length_80_110,    e1000_cable_length_110_140,    e1000_cable_length_140,    e1000_cable_length_undefined = 0xFF} e1000_cable_length;typedef enum {    e1000_10bt_ext_dist_enable_normal = 0,    e1000_10bt_ext_dist_enable_lower,    e1000_10bt_ext_dist_enable_undefined = 0xFF} e1000_10bt_ext_dist_enable;typedef enum {    e1000_rev_polarity_normal = 0,    e1000_rev_polarity_reversed,    e1000_rev_polarity_undefined = 0xFF} e1000_rev_polarity;typedef enum {    e1000_polarity_reversal_enabled = 0,    e1000_polarity_reversal_disabled,    e1000_polarity_reversal_undefined = 0xFF} e1000_polarity_reversal;typedef enum {    e1000_auto_x_mode_manual_mdi = 0,    e1000_auto_x_mode_manual_mdix,    e1000_auto_x_mode_auto1,    e1000_auto_x_mode_auto2,    e1000_auto_x_mode_undefined = 0xFF} e1000_auto_x_mode;typedef enum {    e1000_1000t_rx_status_not_ok = 0,    e1000_1000t_rx_status_ok,    e1000_1000t_rx_status_undefined = 0xFF} e1000_1000t_rx_status;struct e1000_phy_info {    e1000_cable_length cable_length;    e1000_10bt_ext_dist_enable extended_10bt_distance;    e1000_rev_polarity cable_polarity;    e1000_polarity_reversal polarity_correction;    e1000_auto_x_mode mdix_mode;    e1000_1000t_rx_status local_rx;    e1000_1000t_rx_status remote_rx;};struct e1000_phy_stats {    uint32_t idle_errors;    uint32_t receive_errors;};/* Error Codes */#define E1000_SUCCESS      0#define E1000_ERR_EEPROM   1#define E1000_ERR_PHY      2#define E1000_ERR_CONFIG   3#define E1000_ERR_PARAM    4#define E1000_ERR_MAC_TYPE 5/* Function prototypes *//* Initialization */void e1000_reset_hw(struct e1000_hw *hw);int32_t e1000_init_hw(struct e1000_hw *hw);int32_t e1000_set_mac_type(struct e1000_hw *hw);/* Link Configuration */int32_t e1000_setup_link(struct e1000_hw *hw);int32_t e1000_phy_setup_autoneg(struct e1000_hw *hw);void e1000_config_collision_dist(struct e1000_hw *hw);int32_t e1000_config_fc_after_link_up(struct e1000_hw *hw);int32_t e1000_check_for_link(struct e1000_hw *hw);void e1000_get_speed_and_duplex(struct e1000_hw *hw, uint16_t * speed, uint16_t * duplex);int32_t e1000_wait_autoneg(struct e1000_hw *hw);/* PHY */int32_t e1000_read_phy_reg(struct e1000_hw *hw, uint32_t reg_addr, uint16_t *phy_data);int32_t e1000_write_phy_reg(struct e1000_hw *hw, uint32_t reg_addr, uint16_t data);void e1000_phy_hw_reset(struct e1000_hw *hw);int32_t e1000_phy_reset(struct e1000_hw *hw);int32_t e1000_detect_gig_phy(struct e1000_hw *hw);int32_t e1000_phy_get_info(struct e1000_hw *hw, struct e1000_phy_info *phy_info);int32_t e1000_validate_mdi_setting(struct e1000_hw *hw);/* EEPROM Functions */int32_t e1000_read_eeprom(struct e1000_hw *hw, uint16_t reg, 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 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);/* Filters (multicast, vlan, receive) */void e1000_init_rx_addrs(struct e1000_hw *hw);void e1000_mc_addr_list_update(struct e1000_hw *hw, uint8_t * mc_addr_list, uint32_t mc_addr_count, uint32_t pad);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);void e1000_clear_vfta(struct e1000_hw *hw);/* 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_clear_hw_cntrs(struct e1000_hw *hw);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, uint32_t port);uint32_t e1000_read_reg_io(struct e1000_hw *hw, uint32_t offset);void e1000_io_write(struct e1000_hw *hw, uint32_t port, uint32_t value);void e1000_write_reg_io(struct e1000_hw *hw, uint32_t offset, uint32_t value);#define E1000_READ_REG_IO(a, reg) \    e1000_read_reg_io((a), E1000_##reg)#define E1000_WRITE_REG_IO(a, reg, val) \    e1000_write_reg_io((a), E1000_##reg, val)/* 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_82545EM_COPPER 0x100F#define E1000_DEV_ID_82545EM_FIBER  0x1011#define E1000_DEV_ID_82546EB_COPPER 0x1010#define E1000_DEV_ID_82546EB_FIBER  0x1012#define NUM_DEV_IDS 13#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 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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -