#include <sys/param.h>
#include <sys/bus.h>
#include <sys/taskqueue.h>
#include <net/if.h>
#include <net/if_arp.h>
#include <net/if_media.h>
#include <net/ifq_var.h>
#include <dev/netif/ix/ixgbe_api.h>
#include <dev/netif/ix/if_ix.h>
u16
ixgbe_read_pci_cfg_pf(struct ixgbe_hw *hw, u32 reg)
{
return pci_read_config(((struct ix_softc *)hw->back)->dev, reg, 2);
}
void
ixgbe_write_pci_cfg_pf(struct ixgbe_hw *hw, u32 reg, u16 value)
{
pci_write_config(((struct ix_softc *)hw->back)->dev, reg, value, 2);
}
u32
ixgbe_read_reg_pf(struct ixgbe_hw *hw, u32 reg)
{
struct ix_softc *sc = (struct ix_softc *)hw->back;
u32 retval;
u8 i;
retval = bus_space_read_4(sc->osdep.mem_bus_space_tag,
sc->osdep.mem_bus_space_handle, reg);
if ((retval != 0xDEADBEEF) ||
!(hw->phy.nw_mng_if_sel & IXGBE_NW_MNG_IF_SEL_SGMII_ENABLE))
return retval;
for (i = 100; retval; i--) {
if (!i) {
device_printf(sc->dev, "Register (0x%08X) writes did not complete: 0x%08X\n",
reg, retval);
break;
}
retval = bus_space_read_4(sc->osdep.mem_bus_space_tag,
sc->osdep.mem_bus_space_handle, IXGBE_MAC_SGMII_BUSY);
}
for (i = 10; retval == 0xDEADBEEF; i--) {
if (!i) {
device_printf(sc->dev,
"Failed to read register 0x%08X.\n", reg);
break;
}
retval = bus_space_read_4(sc->osdep.mem_bus_space_tag,
sc->osdep.mem_bus_space_handle, reg);
}
return retval;
}
void
ixgbe_write_reg_pf(struct ixgbe_hw *hw, u32 reg, u32 val)
{
bus_space_write_4(((struct ix_softc *)hw->back)->osdep.mem_bus_space_tag,
((struct ix_softc *)hw->back)->osdep.mem_bus_space_handle,
reg, val);
}
u32
ixgbe_read_reg_array_pf(struct ixgbe_hw *hw, u32 reg, u32 offset)
{
return bus_space_read_4(((struct ix_softc *)hw->back)->osdep.mem_bus_space_tag,
((struct ix_softc *)hw->back)->osdep.mem_bus_space_handle,
reg + (offset << 2));
}
void
ixgbe_write_reg_array_pf(struct ixgbe_hw *hw, u32 reg, u32 offset, u32 val)
{
bus_space_write_4(((struct ix_softc *)hw->back)->osdep.mem_bus_space_tag,
((struct ix_softc *)hw->back)->osdep.mem_bus_space_handle,
reg + (offset << 2), val);
}