#include "ixgbe.h"
inline device_t
ixgbe_dev_from_hw(struct ixgbe_hw *hw)
{
return ((struct ixgbe_softc *)hw->back)->dev;
}
inline u16
ixgbe_read_pci_cfg(struct ixgbe_hw *hw, u32 reg)
{
return pci_read_config(((struct ixgbe_softc *)hw->back)->dev, reg, 2);
}
inline void
ixgbe_write_pci_cfg(struct ixgbe_hw *hw, u32 reg, u16 value)
{
pci_write_config(((struct ixgbe_softc *)hw->back)->dev, reg, value, 2);
}
inline u32
ixgbe_read_reg(struct ixgbe_hw *hw, u32 reg)
{
return bus_space_read_4(((struct ixgbe_softc *)hw->back)->osdep.mem_bus_space_tag,
((struct ixgbe_softc *)hw->back)->osdep.mem_bus_space_handle, reg);
}
inline void
ixgbe_write_reg(struct ixgbe_hw *hw, u32 reg, u32 val)
{
bus_space_write_4(((struct ixgbe_softc *)hw->back)->osdep.mem_bus_space_tag,
((struct ixgbe_softc *)hw->back)->osdep.mem_bus_space_handle,
reg, val);
}
inline u32
ixgbe_read_reg_array(struct ixgbe_hw *hw, u32 reg, u32 offset)
{
return bus_space_read_4(((struct ixgbe_softc *)hw->back)->osdep.mem_bus_space_tag,
((struct ixgbe_softc *)hw->back)->osdep.mem_bus_space_handle,
reg + (offset << 2));
}
inline void
ixgbe_write_reg_array(struct ixgbe_hw *hw, u32 reg, u32 offset, u32 val)
{
bus_space_write_4(((struct ixgbe_softc *)hw->back)->osdep.mem_bus_space_tag,
((struct ixgbe_softc *)hw->back)->osdep.mem_bus_space_handle,
reg + (offset << 2), val);
}
uint64_t
ixgbe_link_speed_to_baudrate(ixgbe_link_speed speed)
{
uint64_t baudrate;
switch (speed) {
case IXGBE_LINK_SPEED_10GB_FULL:
baudrate = IF_Gbps(10);
break;
case IXGBE_LINK_SPEED_5GB_FULL:
baudrate = IF_Gbps(5);
break;
case IXGBE_LINK_SPEED_2_5GB_FULL:
baudrate = IF_Mbps(2500);
break;
case IXGBE_LINK_SPEED_1GB_FULL:
baudrate = IF_Gbps(1);
break;
case IXGBE_LINK_SPEED_100_FULL:
baudrate = IF_Mbps(100);
break;
case IXGBE_LINK_SPEED_10_FULL:
baudrate = IF_Mbps(10);
break;
case IXGBE_LINK_SPEED_UNKNOWN:
default:
baudrate = 0;
break;
}
return baudrate;
}
void
ixgbe_init_lock(struct ixgbe_lock *lock)
{
mtx_init(&lock->mutex, "mutex",
"ixgbe ACI lock", MTX_DEF | MTX_DUPOK);
}
void
ixgbe_acquire_lock(struct ixgbe_lock *lock)
{
mtx_lock(&lock->mutex);
}
void
ixgbe_release_lock(struct ixgbe_lock *lock)
{
mtx_unlock(&lock->mutex);
}
void
ixgbe_destroy_lock(struct ixgbe_lock *lock)
{
if (mtx_initialized(&lock->mutex))
mtx_destroy(&lock->mutex);
}
void
ixgbe_info_fwlog(struct ixgbe_hw *hw, uint32_t rowsize, uint32_t __unused groupsize,
uint8_t *buf, size_t len)
{
device_t dev = ((struct ixgbe_softc *)hw->back)->dev;
char prettyname[20];
if (!ixgbe_fwlog_supported(hw))
return;
snprintf(prettyname, sizeof(prettyname), "%s: FWLOG: ",
device_get_nameunit(dev));
if (rowsize > 0xFF)
rowsize = 0xFF;
hexdump(buf, len, prettyname, HD_OMIT_CHARS | rowsize);
}