|
@@ -366,6 +366,8 @@ static int fjes_setup_resources(struct fjes_adapter *adapter)
|
|
|
FJES_ZONING_STATUS_ENABLE)) {
|
|
|
fjes_hw_raise_interrupt(hw, epidx,
|
|
|
REG_ICTL_MASK_INFO_UPDATE);
|
|
|
+ hw->ep_shm_info[epidx].ep_stats
|
|
|
+ .send_intr_zoneupdate += 1;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -397,6 +399,9 @@ static int fjes_setup_resources(struct fjes_adapter *adapter)
|
|
|
adapter->force_reset = true;
|
|
|
return result;
|
|
|
}
|
|
|
+
|
|
|
+ hw->ep_shm_info[epidx].ep_stats
|
|
|
+ .com_regist_buf_exec += 1;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -422,6 +427,8 @@ static void fjes_free_resources(struct fjes_adapter *adapter)
|
|
|
result = fjes_hw_unregister_buff_addr(hw, epidx);
|
|
|
mutex_unlock(&hw->hw_info.lock);
|
|
|
|
|
|
+ hw->ep_shm_info[epidx].ep_stats.com_unregist_buf_exec += 1;
|
|
|
+
|
|
|
if (result)
|
|
|
reset_flag = true;
|
|
|
|
|
@@ -567,6 +574,7 @@ static void fjes_raise_intr_rxdata_task(struct work_struct *work)
|
|
|
FJES_RX_POLL_WORK)) {
|
|
|
fjes_hw_raise_interrupt(hw, epid,
|
|
|
REG_ICTL_MASK_RX_DATA);
|
|
|
+ hw->ep_shm_info[epid].ep_stats.send_intr_rx += 1;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -663,6 +671,9 @@ fjes_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
|
|
|
|
|
|
pstatus = fjes_hw_get_partner_ep_status(hw, dest_epid);
|
|
|
if (pstatus != EP_PARTNER_SHARED) {
|
|
|
+ if (!is_multi)
|
|
|
+ hw->ep_shm_info[dest_epid].ep_stats
|
|
|
+ .tx_dropped_not_shared += 1;
|
|
|
ret = NETDEV_TX_OK;
|
|
|
} else if (!fjes_hw_check_epbuf_version(
|
|
|
&adapter->hw.ep_shm_info[dest_epid].rx, 0)) {
|
|
@@ -670,6 +681,8 @@ fjes_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
|
|
|
adapter->stats64.tx_carrier_errors += 1;
|
|
|
hw->ep_shm_info[dest_epid].net_stats
|
|
|
.tx_carrier_errors += 1;
|
|
|
+ hw->ep_shm_info[dest_epid].ep_stats
|
|
|
+ .tx_dropped_ver_mismatch += 1;
|
|
|
|
|
|
ret = NETDEV_TX_OK;
|
|
|
} else if (!fjes_hw_check_mtu(
|
|
@@ -679,12 +692,16 @@ fjes_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
|
|
|
hw->ep_shm_info[dest_epid].net_stats.tx_dropped += 1;
|
|
|
adapter->stats64.tx_errors += 1;
|
|
|
hw->ep_shm_info[dest_epid].net_stats.tx_errors += 1;
|
|
|
+ hw->ep_shm_info[dest_epid].ep_stats
|
|
|
+ .tx_dropped_buf_size_mismatch += 1;
|
|
|
|
|
|
ret = NETDEV_TX_OK;
|
|
|
} else if (vlan &&
|
|
|
!fjes_hw_check_vlan_id(
|
|
|
&adapter->hw.ep_shm_info[dest_epid].rx,
|
|
|
vlan_id)) {
|
|
|
+ hw->ep_shm_info[dest_epid].ep_stats
|
|
|
+ .tx_dropped_vlanid_mismatch += 1;
|
|
|
ret = NETDEV_TX_OK;
|
|
|
} else {
|
|
|
if (len < VLAN_ETH_HLEN) {
|
|
@@ -718,6 +735,8 @@ fjes_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
|
|
|
ret = NETDEV_TX_OK;
|
|
|
} else {
|
|
|
netif_trans_update(netdev);
|
|
|
+ hw->ep_shm_info[dest_epid].ep_stats
|
|
|
+ .tx_buffer_full += 1;
|
|
|
netif_tx_stop_queue(cur_queue);
|
|
|
|
|
|
if (!work_pending(&adapter->tx_stall_task))
|
|
@@ -970,21 +989,33 @@ static irqreturn_t fjes_intr(int irq, void *data)
|
|
|
icr = fjes_hw_capture_interrupt_status(hw);
|
|
|
|
|
|
if (icr & REG_IS_MASK_IS_ASSERT) {
|
|
|
- if (icr & REG_ICTL_MASK_RX_DATA)
|
|
|
+ if (icr & REG_ICTL_MASK_RX_DATA) {
|
|
|
fjes_rx_irq(adapter, icr & REG_IS_MASK_EPID);
|
|
|
+ hw->ep_shm_info[icr & REG_IS_MASK_EPID].ep_stats
|
|
|
+ .recv_intr_rx += 1;
|
|
|
+ }
|
|
|
|
|
|
- if (icr & REG_ICTL_MASK_DEV_STOP_REQ)
|
|
|
+ if (icr & REG_ICTL_MASK_DEV_STOP_REQ) {
|
|
|
fjes_stop_req_irq(adapter, icr & REG_IS_MASK_EPID);
|
|
|
+ hw->ep_shm_info[icr & REG_IS_MASK_EPID].ep_stats
|
|
|
+ .recv_intr_stop += 1;
|
|
|
+ }
|
|
|
|
|
|
- if (icr & REG_ICTL_MASK_TXRX_STOP_REQ)
|
|
|
+ if (icr & REG_ICTL_MASK_TXRX_STOP_REQ) {
|
|
|
fjes_txrx_stop_req_irq(adapter, icr & REG_IS_MASK_EPID);
|
|
|
+ hw->ep_shm_info[icr & REG_IS_MASK_EPID].ep_stats
|
|
|
+ .recv_intr_unshare += 1;
|
|
|
+ }
|
|
|
|
|
|
if (icr & REG_ICTL_MASK_TXRX_STOP_DONE)
|
|
|
fjes_hw_set_irqmask(hw,
|
|
|
REG_ICTL_MASK_TXRX_STOP_DONE, true);
|
|
|
|
|
|
- if (icr & REG_ICTL_MASK_INFO_UPDATE)
|
|
|
+ if (icr & REG_ICTL_MASK_INFO_UPDATE) {
|
|
|
fjes_update_zone_irq(adapter, icr & REG_IS_MASK_EPID);
|
|
|
+ hw->ep_shm_info[icr & REG_IS_MASK_EPID].ep_stats
|
|
|
+ .recv_intr_zoneupdate += 1;
|
|
|
+ }
|
|
|
|
|
|
ret = IRQ_HANDLED;
|
|
|
} else {
|
|
@@ -1364,6 +1395,8 @@ static void fjes_watch_unshare_task(struct work_struct *work)
|
|
|
break;
|
|
|
}
|
|
|
mutex_unlock(&hw->hw_info.lock);
|
|
|
+ hw->ep_shm_info[epidx].ep_stats
|
|
|
+ .com_unregist_buf_exec += 1;
|
|
|
|
|
|
spin_lock_irqsave(&hw->rx_status_lock, flags);
|
|
|
fjes_hw_setup_epbuf(&hw->ep_shm_info[epidx].tx,
|
|
@@ -1406,6 +1439,9 @@ static void fjes_watch_unshare_task(struct work_struct *work)
|
|
|
}
|
|
|
mutex_unlock(&hw->hw_info.lock);
|
|
|
|
|
|
+ hw->ep_shm_info[epidx].ep_stats
|
|
|
+ .com_unregist_buf_exec += 1;
|
|
|
+
|
|
|
spin_lock_irqsave(&hw->rx_status_lock, flags);
|
|
|
fjes_hw_setup_epbuf(
|
|
|
&hw->ep_shm_info[epidx].tx,
|