Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/qlxgbe/ql_hw.c
Show First 20 Lines • Show All 2,157 Lines • ▼ Show 20 Lines | |||||
ql_get_stats(qla_host_t *ha) | ql_get_stats(qla_host_t *ha) | ||||
{ | { | ||||
q80_get_stats_rsp_t *stat_rsp; | q80_get_stats_rsp_t *stat_rsp; | ||||
q80_mac_stats_t *mstat; | q80_mac_stats_t *mstat; | ||||
q80_xmt_stats_t *xstat; | q80_xmt_stats_t *xstat; | ||||
q80_rcv_stats_t *rstat; | q80_rcv_stats_t *rstat; | ||||
uint32_t cmd; | uint32_t cmd; | ||||
int i; | int i; | ||||
struct ifnet *ifp = ha->ifp; | if_t ifp = ha->ifp; | ||||
if (ifp == NULL) | if (ifp == NULL) | ||||
return; | return; | ||||
if (QLA_LOCK(ha, __func__, QLA_LOCK_DEFAULT_MS_TIMEOUT, 0) != 0) { | if (QLA_LOCK(ha, __func__, QLA_LOCK_DEFAULT_MS_TIMEOUT, 0) != 0) { | ||||
device_printf(ha->pci_dev, "%s: failed\n", __func__); | device_printf(ha->pci_dev, "%s: failed\n", __func__); | ||||
return; | return; | ||||
} | } | ||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) { | if (!(if_getdrvflags(ifp) & IFF_DRV_RUNNING)) { | ||||
QLA_UNLOCK(ha, __func__); | QLA_UNLOCK(ha, __func__); | ||||
return; | return; | ||||
} | } | ||||
stat_rsp = (q80_get_stats_rsp_t *)ha->hw.mbox; | stat_rsp = (q80_get_stats_rsp_t *)ha->hw.mbox; | ||||
/* | /* | ||||
* Get MAC Statistics | * Get MAC Statistics | ||||
*/ | */ | ||||
cmd = Q8_GET_STATS_CMD_TYPE_MAC; | cmd = Q8_GET_STATS_CMD_TYPE_MAC; | ||||
// cmd |= Q8_GET_STATS_CMD_CLEAR; | // cmd |= Q8_GET_STATS_CMD_CLEAR; | ||||
cmd |= ((ha->pci_func & 0x1) << 16); | cmd |= ((ha->pci_func & 0x1) << 16); | ||||
if (ha->qla_watchdog_pause || (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) || | if (ha->qla_watchdog_pause || (!(if_getdrvflags(ifp) & IFF_DRV_RUNNING)) || | ||||
ha->offline) | ha->offline) | ||||
goto ql_get_stats_exit; | goto ql_get_stats_exit; | ||||
if (qla_get_hw_stats(ha, cmd, sizeof (q80_get_stats_rsp_t)) == 0) { | if (qla_get_hw_stats(ha, cmd, sizeof (q80_get_stats_rsp_t)) == 0) { | ||||
mstat = (q80_mac_stats_t *)&stat_rsp->u.mac; | mstat = (q80_mac_stats_t *)&stat_rsp->u.mac; | ||||
bcopy(mstat, &ha->hw.mac, sizeof(q80_mac_stats_t)); | bcopy(mstat, &ha->hw.mac, sizeof(q80_mac_stats_t)); | ||||
} else { | } else { | ||||
device_printf(ha->pci_dev, "%s: mac failed [0x%08x]\n", | device_printf(ha->pci_dev, "%s: mac failed [0x%08x]\n", | ||||
__func__, ha->hw.mbox[0]); | __func__, ha->hw.mbox[0]); | ||||
} | } | ||||
/* | /* | ||||
* Get RCV Statistics | * Get RCV Statistics | ||||
*/ | */ | ||||
cmd = Q8_GET_STATS_CMD_RCV | Q8_GET_STATS_CMD_TYPE_CNTXT; | cmd = Q8_GET_STATS_CMD_RCV | Q8_GET_STATS_CMD_TYPE_CNTXT; | ||||
// cmd |= Q8_GET_STATS_CMD_CLEAR; | // cmd |= Q8_GET_STATS_CMD_CLEAR; | ||||
cmd |= (ha->hw.rcv_cntxt_id << 16); | cmd |= (ha->hw.rcv_cntxt_id << 16); | ||||
if (ha->qla_watchdog_pause || (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) || | if (ha->qla_watchdog_pause || (!(if_getdrvflags(ifp) & IFF_DRV_RUNNING)) || | ||||
ha->offline) | ha->offline) | ||||
goto ql_get_stats_exit; | goto ql_get_stats_exit; | ||||
if (qla_get_hw_stats(ha, cmd, sizeof (q80_get_stats_rsp_t)) == 0) { | if (qla_get_hw_stats(ha, cmd, sizeof (q80_get_stats_rsp_t)) == 0) { | ||||
rstat = (q80_rcv_stats_t *)&stat_rsp->u.rcv; | rstat = (q80_rcv_stats_t *)&stat_rsp->u.rcv; | ||||
bcopy(rstat, &ha->hw.rcv, sizeof(q80_rcv_stats_t)); | bcopy(rstat, &ha->hw.rcv, sizeof(q80_rcv_stats_t)); | ||||
} else { | } else { | ||||
device_printf(ha->pci_dev, "%s: rcv failed [0x%08x]\n", | device_printf(ha->pci_dev, "%s: rcv failed [0x%08x]\n", | ||||
__func__, ha->hw.mbox[0]); | __func__, ha->hw.mbox[0]); | ||||
} | } | ||||
if (ha->qla_watchdog_pause || (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) || | if (ha->qla_watchdog_pause || (!(if_getdrvflags(ifp) & IFF_DRV_RUNNING)) || | ||||
ha->offline) | ha->offline) | ||||
goto ql_get_stats_exit; | goto ql_get_stats_exit; | ||||
/* | /* | ||||
* Get XMT Statistics | * Get XMT Statistics | ||||
*/ | */ | ||||
for (i = 0 ; (i < ha->hw.num_tx_rings); i++) { | for (i = 0 ; (i < ha->hw.num_tx_rings); i++) { | ||||
if (ha->qla_watchdog_pause || | if (ha->qla_watchdog_pause || | ||||
(!(ifp->if_drv_flags & IFF_DRV_RUNNING)) || | (!(if_getdrvflags(ifp) & IFF_DRV_RUNNING)) || | ||||
ha->offline) | ha->offline) | ||||
goto ql_get_stats_exit; | goto ql_get_stats_exit; | ||||
cmd = Q8_GET_STATS_CMD_XMT | Q8_GET_STATS_CMD_TYPE_CNTXT; | cmd = Q8_GET_STATS_CMD_XMT | Q8_GET_STATS_CMD_TYPE_CNTXT; | ||||
// cmd |= Q8_GET_STATS_CMD_CLEAR; | // cmd |= Q8_GET_STATS_CMD_CLEAR; | ||||
cmd |= (ha->hw.tx_cntxt[i].tx_cntxt_id << 16); | cmd |= (ha->hw.tx_cntxt[i].tx_cntxt_id << 16); | ||||
if (qla_get_hw_stats(ha, cmd, sizeof(q80_get_stats_rsp_t)) | if (qla_get_hw_stats(ha, cmd, sizeof(q80_get_stats_rsp_t)) | ||||
▲ Show 20 Lines • Show All 735 Lines • ▼ Show 20 Lines | if (qla_config_rss_ind_table(ha)) | ||||
return (-1); | return (-1); | ||||
if (qla_config_intr_coalesce(ha, ha->hw.rcv_cntxt_id, 0, 1)) | if (qla_config_intr_coalesce(ha, ha->hw.rcv_cntxt_id, 0, 1)) | ||||
return (-1); | return (-1); | ||||
if (qla_link_event_req(ha, ha->hw.rcv_cntxt_id)) | if (qla_link_event_req(ha, ha->hw.rcv_cntxt_id)) | ||||
return (-1); | return (-1); | ||||
if (ha->ifp->if_capenable & IFCAP_LRO) { | if (if_getcapenable(ha->ifp) & IFCAP_LRO) { | ||||
if (ha->hw.enable_hw_lro) { | if (ha->hw.enable_hw_lro) { | ||||
ha->hw.enable_soft_lro = 0; | ha->hw.enable_soft_lro = 0; | ||||
if (qla_config_fw_lro(ha, ha->hw.rcv_cntxt_id)) | if (qla_config_fw_lro(ha, ha->hw.rcv_cntxt_id)) | ||||
return (-1); | return (-1); | ||||
} else { | } else { | ||||
ha->hw.enable_soft_lro = 1; | ha->hw.enable_soft_lro = 1; | ||||
▲ Show 20 Lines • Show All 792 Lines • ▼ Show 20 Lines | |||||
void | void | ||||
ql_update_link_state(qla_host_t *ha) | ql_update_link_state(qla_host_t *ha) | ||||
{ | { | ||||
uint32_t link_state = 0; | uint32_t link_state = 0; | ||||
uint32_t prev_link_state; | uint32_t prev_link_state; | ||||
prev_link_state = ha->hw.link_up; | prev_link_state = ha->hw.link_up; | ||||
if (ha->ifp->if_drv_flags & IFF_DRV_RUNNING) { | if (if_getdrvflags(ha->ifp) & IFF_DRV_RUNNING) { | ||||
link_state = READ_REG32(ha, Q8_LINK_STATE); | link_state = READ_REG32(ha, Q8_LINK_STATE); | ||||
if (ha->pci_func == 0) { | if (ha->pci_func == 0) { | ||||
link_state = (((link_state & 0xF) == 1)? 1 : 0); | link_state = (((link_state & 0xF) == 1)? 1 : 0); | ||||
} else { | } else { | ||||
link_state = ((((link_state >> 4)& 0xF) == 1)? 1 : 0); | link_state = ((((link_state >> 4)& 0xF) == 1)? 1 : 0); | ||||
} | } | ||||
} | } | ||||
▲ Show 20 Lines • Show All 1,774 Lines • Show Last 20 Lines |