/* Transmit Descriptor */
struct igc_tx_desc {
uint64_t buffer_addr; /* Address of the descriptor's data buffer */
union {
uint32_t data;
struct {
uint16_t length; /* Data buffer length */
uint8_t cso; /* Checksum offset */
uint8_t cmd; /* Descriptor control */
} flags;
} lower;
union {
uint32_t data;
struct {
uint8_t status; /* Descriptor status */
uint8_t css; /* Checksum start */
uint16_t special;
} fields;
} upper;
};
/* Function pointers for the MAC. */
struct igc_mac_operations {
int (*init_params)(struct igc_hw *);
int (*check_for_link)(struct igc_hw *);
void (*clear_hw_cntrs)(struct igc_hw *);
void (*clear_vfta)(struct igc_hw *);
int (*get_bus_info)(struct igc_hw *);
void (*set_lan_id)(struct igc_hw *);
int (*get_link_up_info)(struct igc_hw *, uint16_t *, uint16_t *);
void (*update_mc_addr_list)(struct igc_hw *, uint8_t *, uint32_t);
int (*reset_hw)(struct igc_hw *);
int (*init_hw)(struct igc_hw *);
int (*setup_link)(struct igc_hw *);
int (*setup_physical_interface)(struct igc_hw *);
void (*write_vfta)(struct igc_hw *, uint32_t, uint32_t);
void (*config_collision_dist)(struct igc_hw *);
int (*rar_set)(struct igc_hw *, uint8_t *, uint32_t);
int (*read_mac_addr)(struct igc_hw *);
int (*validate_mdi_setting)(struct igc_hw *);
int (*acquire_swfw_sync)(struct igc_hw *, uint16_t);
void (*release_swfw_sync)(struct igc_hw *, uint16_t);
};
/* When to use various PHY register access functions:
*
* Func Caller
* Function Does Does When to use
* ~~~~~~~~~~~~ ~~~~~ ~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* X_reg L,P,A n/a for simple PHY reg accesses
* X_reg_locked P,A L for multiple accesses of different regs
* on different pages
* X_reg_page A L,P for multiple accesses of different regs
* on the same page
*
* Where X=[read|write], L=locking, P=sets page, A=register access
*
*/
struct igc_phy_operations {
int (*init_params)(struct igc_hw *);
int (*acquire)(struct igc_hw *);
int (*check_reset_block)(struct igc_hw *);
int (*force_speed_duplex)(struct igc_hw *);
int (*get_info)(struct igc_hw *);
int (*set_page)(struct igc_hw *, uint16_t);
int (*read_reg)(struct igc_hw *, uint32_t, uint16_t *);
int (*read_reg_locked)(struct igc_hw *, uint32_t, uint16_t *);
int (*read_reg_page)(struct igc_hw *, uint32_t, uint16_t *);
void (*release)(struct igc_hw *);
int (*reset)(struct igc_hw *);
int (*set_d0_lplu_state)(struct igc_hw *, bool);
int (*set_d3_lplu_state)(struct igc_hw *, bool);
int (*write_reg)(struct igc_hw *, uint32_t, uint16_t);
int (*write_reg_locked)(struct igc_hw *, uint32_t, uint16_t);
int (*write_reg_page)(struct igc_hw *, uint32_t, uint16_t);
void (*power_up)(struct igc_hw *);
void (*power_down)(struct igc_hw *);
};
/* Function pointers for the NVM. */
struct igc_nvm_operations {
int (*init_params)(struct igc_hw *);
int (*acquire)(struct igc_hw *);
int (*read)(struct igc_hw *, uint16_t, uint16_t, uint16_t *);
void (*release)(struct igc_hw *);
void (*reload)(struct igc_hw *);
int (*update)(struct igc_hw *);
int (*validate)(struct igc_hw *);
int (*write)(struct igc_hw *, uint16_t, uint16_t, uint16_t *);
};
/* Maximum size of the MTA register table in all supported adapters */
#define MAX_MTA_REG 128
uint32_t mta_shadow[MAX_MTA_REG];
uint16_t rar_entry_count;