Some other things to think about when comparing
to the intel code in FreeBSD/Linux:

igb_read_phy_reg_gs40g/igb_write_phy_reg_gs40g
clearing of GS40G_CS_POWER_DOW to power up phy

i210 specific part of igb_has_link()

igb_acquire_swfw_sync_i210/igb_release_swfw_sync_i210
igb_init_nvm_params_i210/igb_get_flash_presence_i210 etc

The phy seems to be a marvell one instead of the intel?
one used in the 82580/i350, ie compare the callbacks

        case I82580_I_PHY_ID:
        case I350_I_PHY_ID:
                phy->type = e1000_phy_82580;
                phy->ops.force_speed_duplex =
                                         igb_phy_force_speed_duplex_82580;
                phy->ops.get_cable_length = igb_get_cable_length_82580;
                phy->ops.get_phy_info = igb_get_phy_info_82580;
                phy->ops.set_d0_lplu_state = igb_set_d0_lplu_state_82580;
                phy->ops.set_d3_lplu_state = igb_set_d3_lplu_state_82580;
                break;
        case I210_I_PHY_ID:
                phy->type               = e1000_phy_i210;
                phy->ops.check_polarity = igb_check_polarity_m88;
                phy->ops.get_phy_info   = igb_get_phy_info_m88;
                phy->ops.get_cable_length = igb_get_cable_length_m88_gen2;
                phy->ops.set_d0_lplu_state = igb_set_d0_lplu_state_82580;
                phy->ops.set_d3_lplu_state = igb_set_d3_lplu_state_82580;
                phy->ops.force_speed_duplex = igb_phy_force_speed_duplex_m88;

A new phy type should be added rather than using em_phy_82580.

And if you want to look at offloading with the legacy
descriptor format on the 75+ server adapters it seems
the first descriptor has to be used rather than the last.
See http://mail-index.netbsd.org/source-changes/2012/08/29/msg036938.html
for a writeup.

Reply via email to