📄 hw.h
字号:
};/* Receive Descriptor */struct e1000_rx_desc { u64 buffer_addr; /* Address of the descriptor's data buffer */ u16 length; /* Length of data DMAed into data buffer */ u16 csum; /* Packet checksum */ u8 status; /* Descriptor status */ u8 errors; /* Descriptor Errors */ u16 special;};/* Receive Descriptor - Extended */union e1000_rx_desc_extended { struct { u64 buffer_addr; u64 reserved; } read; struct { struct { u32 mrq; /* Multiple Rx Queues */ union { u32 rss; /* RSS Hash */ struct { u16 ip_id; /* IP id */ u16 csum; /* Packet Checksum */ } csum_ip; } hi_dword; } lower; struct { u32 status_error; /* ext status/error */ u16 length; u16 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 */ u64 buffer_addr[MAX_PS_BUFFERS]; } read; struct { struct { u32 mrq; /* Multiple Rx Queues */ union { u32 rss; /* RSS Hash */ struct { u16 ip_id; /* IP id */ u16 csum; /* Packet Checksum */ } csum_ip; } hi_dword; } lower; struct { u32 status_error; /* ext status/error */ u16 length0; /* length of buffer 0 */ u16 vlan; /* VLAN tag */ } middle; struct { u16 header_status; u16 length[3]; /* length of buffers 1-3 */ } upper; u64 reserved; } wb; /* writeback */};/* Transmit Descriptor */struct e1000_tx_desc { u64 buffer_addr; /* Address of the descriptor's data buffer */ union { u32 data; struct { u16 length; /* Data buffer length */ u8 cso; /* Checksum offset */ u8 cmd; /* Descriptor control */ } flags; } lower; union { u32 data; struct { u8 status; /* Descriptor status */ u8 css; /* Checksum start */ u16 special; } fields; } upper;};/* Offload Context Descriptor */struct e1000_context_desc { union { u32 ip_config; struct { u8 ipcss; /* IP checksum start */ u8 ipcso; /* IP checksum offset */ u16 ipcse; /* IP checksum end */ } ip_fields; } lower_setup; union { u32 tcp_config; struct { u8 tucss; /* TCP checksum start */ u8 tucso; /* TCP checksum offset */ u16 tucse; /* TCP checksum end */ } tcp_fields; } upper_setup; u32 cmd_and_length; union { u32 data; struct { u8 status; /* Descriptor status */ u8 hdr_len; /* Header length */ u16 mss; /* Maximum segment size */ } fields; } tcp_seg_setup;};/* Offload data descriptor */struct e1000_data_desc { u64 buffer_addr; /* Address of the descriptor's buffer address */ union { u32 data; struct { u16 length; /* Data buffer length */ u8 typ_len_ext; u8 cmd; } flags; } lower; union { u32 data; struct { u8 status; /* Descriptor status */ u8 popts; /* Packet Options */ u16 special; /* */ } fields; } upper;};/* Statistics counters collected by the MAC */struct e1000_hw_stats { u64 crcerrs; u64 algnerrc; u64 symerrs; u64 rxerrc; u64 mpc; u64 scc; u64 ecol; u64 mcc; u64 latecol; u64 colc; u64 dc; u64 tncrs; u64 sec; u64 cexterr; u64 rlec; u64 xonrxc; u64 xontxc; u64 xoffrxc; u64 xofftxc; u64 fcruc; u64 prc64; u64 prc127; u64 prc255; u64 prc511; u64 prc1023; u64 prc1522; u64 gprc; u64 bprc; u64 mprc; u64 gptc; u64 gorc; u64 gotc; u64 rnbc; u64 ruc; u64 rfc; u64 roc; u64 rjc; u64 mgprc; u64 mgpdc; u64 mgptc; u64 tor; u64 tot; u64 tpr; u64 tpt; u64 ptc64; u64 ptc127; u64 ptc255; u64 ptc511; u64 ptc1023; u64 ptc1522; u64 mptc; u64 bptc; u64 tsctc; u64 tsctfc; u64 iac; u64 icrxptc; u64 icrxatc; u64 ictxptc; u64 ictxatc; u64 ictxqec; u64 ictxqmtc; u64 icrxdmtc; u64 icrxoc;};struct e1000_phy_stats { u32 idle_errors; u32 receive_errors;};struct e1000_host_mng_dhcp_cookie { u32 signature; u8 status; u8 reserved0; u16 vlan_id; u32 reserved1; u16 reserved2; u8 reserved3; u8 checksum;};/* Host Interface "Rev 1" */struct e1000_host_command_header { u8 command_id; u8 command_length; u8 command_options; u8 checksum;};#define E1000_HI_MAX_DATA_LENGTH 252struct e1000_host_command_info { struct e1000_host_command_header command_header; u8 command_data[E1000_HI_MAX_DATA_LENGTH];};/* Host Interface "Rev 2" */struct e1000_host_mng_command_header { u8 command_id; u8 checksum; u16 reserved1; u16 reserved2; u16 command_length;};#define E1000_HI_MAX_MNG_DATA_LENGTH 0x6F8struct e1000_host_mng_command_info { struct e1000_host_mng_command_header command_header; u8 command_data[E1000_HI_MAX_MNG_DATA_LENGTH];};/* Function pointers and static data for the MAC. */struct e1000_mac_operations { u32 mng_mode_enab; s32 (*check_for_link)(struct e1000_hw *); s32 (*cleanup_led)(struct e1000_hw *); void (*clear_hw_cntrs)(struct e1000_hw *); s32 (*get_bus_info)(struct e1000_hw *); s32 (*get_link_up_info)(struct e1000_hw *, u16 *, u16 *); s32 (*led_on)(struct e1000_hw *); s32 (*led_off)(struct e1000_hw *); void (*update_mc_addr_list)(struct e1000_hw *, u8 *, u32, u32, u32); s32 (*reset_hw)(struct e1000_hw *); s32 (*init_hw)(struct e1000_hw *); s32 (*setup_link)(struct e1000_hw *); s32 (*setup_physical_interface)(struct e1000_hw *);};/* Function pointers for the PHY. */struct e1000_phy_operations { s32 (*acquire_phy)(struct e1000_hw *); s32 (*check_reset_block)(struct e1000_hw *); s32 (*commit_phy)(struct e1000_hw *); s32 (*force_speed_duplex)(struct e1000_hw *); s32 (*get_cfg_done)(struct e1000_hw *hw); s32 (*get_cable_length)(struct e1000_hw *); s32 (*get_phy_info)(struct e1000_hw *); s32 (*read_phy_reg)(struct e1000_hw *, u32, u16 *); void (*release_phy)(struct e1000_hw *); s32 (*reset_phy)(struct e1000_hw *); s32 (*set_d0_lplu_state)(struct e1000_hw *, bool); s32 (*set_d3_lplu_state)(struct e1000_hw *, bool); s32 (*write_phy_reg)(struct e1000_hw *, u32, u16);};/* Function pointers for the NVM. */struct e1000_nvm_operations { s32 (*acquire_nvm)(struct e1000_hw *); s32 (*read_nvm)(struct e1000_hw *, u16, u16, u16 *); void (*release_nvm)(struct e1000_hw *); s32 (*update_nvm)(struct e1000_hw *); s32 (*valid_led_default)(struct e1000_hw *, u16 *); s32 (*validate_nvm)(struct e1000_hw *); s32 (*write_nvm)(struct e1000_hw *, u16, u16, u16 *);};struct e1000_mac_info { struct e1000_mac_operations ops; u8 addr[6]; u8 perm_addr[6]; enum e1000_mac_type type; u32 collision_delta; u32 ledctl_default; u32 ledctl_mode1; u32 ledctl_mode2; u32 mc_filter_type; u32 tx_packet_delta; u32 txcw; u16 current_ifs_val; u16 ifs_max_val; u16 ifs_min_val; u16 ifs_ratio; u16 ifs_step_size; u16 mta_reg_count; u16 rar_entry_count; u8 forced_speed_duplex; bool arc_subsystem_valid; bool autoneg; bool autoneg_failed; bool get_link_status; bool in_ifs_mode; bool serdes_has_link; bool tx_pkt_filtering;};struct e1000_phy_info { struct e1000_phy_operations ops; enum e1000_phy_type type; enum e1000_1000t_rx_status local_rx; enum e1000_1000t_rx_status remote_rx; enum e1000_ms_type ms_type; enum e1000_ms_type original_ms_type; enum e1000_rev_polarity cable_polarity; enum e1000_smart_speed smart_speed; u32 addr; u32 id; u32 reset_delay_us; /* in usec */ u32 revision; enum e1000_media_type media_type; u16 autoneg_advertised; u16 autoneg_mask; u16 cable_length; u16 max_cable_length; u16 min_cable_length; u8 mdix; bool disable_polarity_correction; bool is_mdix; bool polarity_correction; bool speed_downgraded; bool autoneg_wait_to_complete;};struct e1000_nvm_info { struct e1000_nvm_operations ops; enum e1000_nvm_type type; enum e1000_nvm_override override; u32 flash_bank_size; u32 flash_base_addr; u16 word_size; u16 delay_usec; u16 address_bits; u16 opcode_bits; u16 page_size;};struct e1000_bus_info { enum e1000_bus_width width; u16 func;};struct e1000_fc_info { u32 high_water; /* Flow control high-water mark */ u32 low_water; /* Flow control low-water mark */ u16 pause_time; /* Flow control pause timer */ bool send_xon; /* Flow control send XON */ bool strict_ieee; /* Strict IEEE mode */ enum e1000_fc_type type; /* Type of flow control */ enum e1000_fc_type original_type;};struct e1000_dev_spec_82571 { bool laa_is_present; bool alt_mac_addr_is_present;};struct e1000_shadow_ram { u16 value; bool modified;};#define E1000_ICH8_SHADOW_RAM_WORDS 2048struct e1000_dev_spec_ich8lan { bool kmrn_lock_loss_workaround_enabled; struct e1000_shadow_ram shadow_ram[E1000_ICH8_SHADOW_RAM_WORDS];};struct e1000_hw { struct e1000_adapter *adapter; u8 __iomem *hw_addr; u8 __iomem *flash_address; struct e1000_mac_info mac; struct e1000_fc_info fc; struct e1000_phy_info phy; struct e1000_nvm_info nvm; struct e1000_bus_info bus; struct e1000_host_mng_dhcp_cookie mng_cookie; union { struct e1000_dev_spec_82571 e82571; struct e1000_dev_spec_ich8lan ich8lan; } dev_spec;};static inline int __attribute__ ((format (printf, 2, 3)))hw_dbg(struct e1000_hw *hw, const char *format, ...){ return 0;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -