S2io: Enable all the error and alarm indications
Subsystems (2)
PATCH 1/5 S2io: Enable all the error and alarm indications
- Added support to unmask entire set of device errors and alarms.
Signed-off-by Sivakumar Subramani <[email protected]>
Signed-off-by Santosh Rastapur <[email protected]>
Signed-off-by Ramkrishna Vepa <[email protected]>
---
drivers/net/s2io.c +383 -69
@@ -892,8 +892,9 @@ static void free_shared_mem(struct s2io_ k++; }kfree (mac_control->rings[i].ba[j]); - nic->mac_control.stats_info->sw_stat.mem_freed += (sizeof (struct buffAdd ) * - (rxd_count[nic->rxd_mode] +1 )); + nic->mac_control.stats_info->sw_stat.mem_freed += + (sizeof (struct buffAdd ) * + (rxd_count[nic->rxd_mode] +1 )); }kfree (mac_control->rings[i].ba); nic->mac_control.stats_info->sw_stat.mem_freed +=
@@ -1732,6 +1733,365 @@ static int s2io_link_fault_indication(streturn MAC_RMAC_ERR_TIMER ; } +void en_dis_err_alarms (struct s2io_nic *nic,u16 mask,int flag) +{ +struct XENA_dev_config __iomem *bar0 = nic->bar0; + registeru64 val64 =0 , temp64 =0 , gen_int_mask =0 ; + +if (mask &TX_DMA_INTR ) { + gen_int_mask |=TXDMA_INT_M ; + +if (flag ==ENABLE_INTRS ) { + + val64 =TXDMA_TDA_INT |TXDMA_PFC_INT |TXDMA_PCC_INT + |TXDMA_TTI_INT |TXDMA_LSO_INT |TXDMA_TPA_INT + |TXDMA_SM_INT ; + temp64 =readq (&bar0->txdma_int_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->txdma_int_mask); + + val64 =PFC_ECC_DB_ERR |PFC_SM_ERR_ALARM |PFC_MISC_0_ERR + |PFC_MISC_1_ERR |PFC_PCIX_ERR |PFC_ECC_SG_ERR ; + temp64 =readq (&bar0->pfc_err_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->pfc_err_mask); + + val64 = TDA_Fn_ECC_DB_ERR|TDA_SM0_ERR_ALARM + |TDA_SM1_ERR_ALARM |TDA_Fn_ECC_SG_ERR| +TDA_PCIX_ERR ; + temp64 =readq (&bar0->tda_err_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->tda_err_mask); + + val64 =PCC_FB_ECC_DB_ERR |PCC_TXB_ECC_DB_ERR + |PCC_SM_ERR_ALARM |PCC_WR_ERR_ALARM |PCC_N_SERR + |PCC_6_COF_OV_ERR |PCC_7_COF_OV_ERR + |PCC_6_LSO_OV_ERR |PCC_7_LSO_OV_ERR + |PCC_FB_ECC_SG_ERR |PCC_TXB_ECC_SG_ERR ; + temp64 =readq (&bar0->pcc_err_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->pcc_err_mask); + + val64 =TTI_SM_ERR_ALARM |TTI_ECC_SG_ERR |TTI_ECC_DB_ERR ; + temp64 =readq (&bar0->tti_err_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->tti_err_mask); + + + val64 =LSO6_ABORT |LSO7_ABORT |LSO6_SM_ERR_ALARM + |LSO7_SM_ERR_ALARM |LSO6_SEND_OFLOW + |LSO7_SEND_OFLOW ; + temp64 =readq (&bar0->lso_err_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->lso_err_mask); + + val64 =TPA_SM_ERR_ALARM |TPA_TX_FRM_DROP ; + temp64 =readq (&bar0->tpa_err_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->tpa_err_mask); + + val64 =SM_SM_ERR_ALARM ; + temp64 =readq (&bar0->sm_err_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->sm_err_mask); + } +else { + val64 =TXDMA_TDA_INT |TXDMA_PFC_INT |TXDMA_PCC_INT + |TXDMA_TTI_INT |TXDMA_LSO_INT |TXDMA_TPA_INT + |TXDMA_SM_INT ; + temp64 =readq (&bar0->txdma_int_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->txdma_int_mask); + + val64 =PFC_ECC_DB_ERR |PFC_SM_ERR_ALARM |PFC_MISC_0_ERR + |PFC_MISC_1_ERR |PFC_PCIX_ERR |PFC_ECC_SG_ERR ; + temp64 =readq (&bar0->pfc_err_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->pfc_err_mask); + + val64 = TDA_Fn_ECC_DB_ERR|TDA_SM0_ERR_ALARM + |TDA_Fn_ECC_SG_ERR|TDA_SM1_ERR_ALARM + |TDA_PCIX_ERR ; + temp64 =readq (&bar0->tda_err_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->tda_err_mask); + + val64 =PCC_FB_ECC_DB_ERR |PCC_TXB_ECC_DB_ERR + |PCC_SM_ERR_ALARM |PCC_WR_ERR_ALARM |PCC_N_SERR + |PCC_FB_ECC_SG_ERR |PCC_TXB_ECC_SG_ERR + |PCC_6_COF_OV_ERR |PCC_7_COF_OV_ERR + |PCC_6_LSO_OV_ERR |PCC_7_LSO_OV_ERR ; + temp64 =readq (&bar0->pcc_err_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->pcc_err_mask); + + val64 =TTI_SM_ERR_ALARM |TTI_ECC_SG_ERR |TTI_ECC_DB_ERR ; + temp64 =readq (&bar0->tti_err_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->tti_err_mask); + + val64 =LSO6_ABORT |LSO7_ABORT |LSO6_SM_ERR_ALARM + |LSO7_SM_ERR_ALARM |LSO6_SEND_OFLOW + |LSO7_SEND_OFLOW ; + temp64 =readq (&bar0->lso_err_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->lso_err_mask); + + val64 =TPA_SM_ERR_ALARM |TPA_TX_FRM_DROP ; + temp64 =readq (&bar0->tpa_err_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->tpa_err_mask); + + val64 =SM_SM_ERR_ALARM ; + temp64 =readq (&bar0->sm_err_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->sm_err_mask); + } + } + +if (mask &TX_MAC_INTR ) { + gen_int_mask |=TXMAC_INT_M ; + +if (flag ==ENABLE_INTRS ) { + val64 =MAC_INT_STATUS_TMAC_INT ; + temp64 =readq (&bar0->mac_int_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->mac_int_mask); + + val64 =TMAC_TX_BUF_OVRN |TMAC_TX_SM_ERR |TMAC_ECC_SG_ERR | +TMAC_ECC_DB_ERR |TMAC_DESC_ECC_SG_ERR + |TMAC_DESC_ECC_DB_ERR ; + temp64 =readq (&bar0->mac_tmac_err_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->mac_tmac_err_mask); + } +else { + val64 =MAC_INT_STATUS_TMAC_INT ; + temp64 =readq (&bar0->mac_int_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->mac_int_mask); + + val64 =TMAC_ECC_SG_ERR |TMAC_ECC_DB_ERR + |TMAC_TX_BUF_OVRN |TMAC_TX_SM_ERR + |TMAC_DESC_ECC_SG_ERR |TMAC_DESC_ECC_DB_ERR ; + temp64 =readq (&bar0->mac_tmac_err_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->mac_tmac_err_mask); + } + } + +if (mask &TX_XGXS_INTR ) { + gen_int_mask |=TXXGXS_INT_M ; + +if (flag ==ENABLE_INTRS ) { + val64 =XGXS_INT_STATUS_TXGXS ; + temp64 =readq (&bar0->xgxs_int_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->xgxs_int_mask); + + val64 =TXGXS_ESTORE_UFLOW |TXGXS_TX_SM_ERR | +TXGXS_ECC_SG_ERR |TXGXS_ECC_DB_ERR ; + temp64 =readq (&bar0->xgxs_txgxs_err_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->xgxs_txgxs_err_mask); + } +else { + val64 =XGXS_INT_STATUS_TXGXS ; + temp64 =readq (&bar0->mac_int_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->mac_int_mask); + + val64 =TXGXS_ECC_SG_ERR |TXGXS_ECC_DB_ERR + |TXGXS_ESTORE_UFLOW |TXGXS_TX_SM_ERR ; + temp64 =readq (&bar0->xgxs_txgxs_err_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->xgxs_txgxs_err_mask); + } + } + +if (mask &RX_DMA_INTR ) { + gen_int_mask |=RXDMA_INT_M ; + +if (flag ==ENABLE_INTRS ) { + val64 =RXDMA_INT_RC_INT_M |RXDMA_INT_RPA_INT_M + |RXDMA_INT_RDA_INT_M |RXDMA_INT_RTI_INT_M ; + temp64 =readq (&bar0->rxdma_int_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->rxdma_int_mask); + + val64 = RC_PRCn_ECC_DB_ERR|RC_FTC_ECC_DB_ERR | + RC_PRCn_SM_ERR_ALARM|RC_FTC_SM_ERR_ALARM | + RC_PRCn_ECC_SG_ERR|RC_FTC_ECC_SG_ERR | + RC_RDA_FAIL_WR_Rn; + temp64 =readq (&bar0->rc_err_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->rc_err_mask); + + val64 = PRC_PCI_AB_RD_Rn|PRC_PCI_AB_WR_Rn| + PRC_PCI_AB_F_WR_Rn|PRC_PCI_DP_RD_Rn + |PRC_PCI_DP_WR_Rn| + PRC_PCI_DP_F_WR_Rn; + temp64 =readq (&bar0->prc_pcix_err_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->prc_pcix_err_mask); + + val64 =RPA_SM_ERR_ALARM |RPA_CREDIT_ERR | +RPA_ECC_SG_ERR |RPA_ECC_DB_ERR ; + temp64 =readq (&bar0->rpa_err_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->rpa_err_mask); + + val64 = RDA_RXDn_ECC_DB_ERR|RDA_FRM_ECC_DB_N_AERR | +RDA_SM1_ERR_ALARM |RDA_SM0_ERR_ALARM | +RDA_RXD_ECC_DB_SERR |RDA_RXDn_ECC_SG_ERR + |RDA_FRM_ECC_SG_ERR | +RDA_MISC_ERR |RDA_PCIX_ERR ; + temp64 =readq (&bar0->rda_err_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->rda_err_mask); + + val64 =RTI_SM_ERR_ALARM |RTI_ECC_SG_ERR |RTI_ECC_DB_ERR ; + temp64 =readq (&bar0->rti_err_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->rti_err_mask); + } +else { + val64 =RXDMA_INT_RC_INT_M |RXDMA_INT_RPA_INT_M + |RXDMA_INT_RDA_INT_M |RXDMA_INT_RTI_INT_M ; + temp64 =readq (&bar0->rxdma_int_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->rxdma_int_mask); + + val64 = RC_PRCn_ECC_SG_ERR|RC_PRCn_ECC_DB_ERR + |RC_FTC_ECC_SG_ERR |RC_FTC_ECC_DB_ERR + |RC_PRCn_SM_ERR_ALARM|RC_FTC_SM_ERR_ALARM + |RC_RDA_FAIL_WR_Rn; + temp64 =readq (&bar0->rc_err_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->rc_err_mask); + + val64 = PRC_PCI_AB_RD_Rn|PRC_PCI_DP_RD_Rn + |PRC_PCI_AB_WR_Rn|PRC_PCI_DP_WR_Rn + |PRC_PCI_AB_F_WR_Rn|PRC_PCI_DP_F_WR_Rn; + temp64 =readq (&bar0->prc_pcix_err_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->prc_pcix_err_mask); + + val64 =RPA_ECC_SG_ERR |RPA_ECC_DB_ERR + |RPA_FLUSH_REQUEST |RPA_SM_ERR_ALARM + |RPA_CREDIT_ERR ; + temp64 =readq (&bar0->rpa_err_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->rpa_err_mask); + + val64 = RDA_RXDn_ECC_SG_ERR|RDA_RXDn_ECC_DB_ERR + |RDA_FRM_ECC_SG_ERR |RDA_FRM_ECC_DB_N_AERR + |RDA_SM1_ERR_ALARM |RDA_SM0_ERR_ALARM + |RDA_MISC_ERR |RDA_PCIX_ERR |RDA_RXD_ECC_DB_SERR ; + temp64 =readq (&bar0->rda_err_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->rda_err_mask); + + val64 =RTI_ECC_SG_ERR |RTI_ECC_DB_ERR |RTI_SM_ERR_ALARM ; + temp64 =readq (&bar0->rti_err_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->rti_err_mask); + } + } + +if (mask &RX_MAC_INTR ) { + gen_int_mask |=RXMAC_INT_M ; + +if (flag ==ENABLE_INTRS ) { + val64 =MAC_INT_STATUS_RMAC_INT ; + temp64 =readq (&bar0->mac_int_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->mac_int_mask); + + val64 =RMAC_RX_BUFF_OVRN |RMAC_RX_SM_ERR | +RMAC_UNUSED_INT |RMAC_SINGLE_ECC_ERR | +RMAC_DOUBLE_ECC_ERR |RMAC_LINK_STATE_CHANGE_INT ; + temp64 =readq (&bar0->mac_rmac_err_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->mac_rmac_err_mask); + } +else { + val64 =MAC_INT_STATUS_RMAC_INT ; + temp64 =readq (&bar0->mac_int_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->mac_int_mask); + + val64 =RMAC_RX_BUFF_OVRN |RMAC_FRM_RCVD_INT + |RMAC_UNUSED_INT |RMAC_SINGLE_ECC_ERR + |RMAC_DOUBLE_ECC_ERR |RMAC_LINK_STATE_CHANGE_INT + |RMAC_RX_SM_ERR ; + temp64 =readq (&bar0->mac_rmac_err_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->mac_rmac_err_mask); + } + } + +if (mask &RX_XGXS_INTR ) + { + gen_int_mask |=RXXGXS_INT_M ; + +if (flag ==ENABLE_INTRS ) { + val64 =XGXS_INT_STATUS_RXGXS ; + temp64 =readq (&bar0->xgxs_int_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->xgxs_int_mask); + + val64 =RXGXS_ESTORE_OFLOW |RXGXS_RX_SM_ERR ; + temp64 =readq (&bar0->xgxs_rxgxs_err_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->xgxs_rxgxs_err_mask); + } +else { + val64 =XGXS_INT_STATUS_RXGXS ; + temp64 =readq (&bar0->xgxs_int_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->xgxs_int_mask); + + val64 =RXGXS_ESTORE_OFLOW |RXGXS_RX_SM_ERR ; + temp64 =readq (&bar0->xgxs_rxgxs_err_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->xgxs_rxgxs_err_mask); + } + } + +if (mask &MC_INTR ) { + gen_int_mask |=MC_INT_M ; + +if (flag ==ENABLE_INTRS ) { + val64 =MC_INT_MASK_MC_INT ; + temp64 =readq (&bar0->mc_int_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->mc_int_mask); + + val64 =MC_ERR_REG_SM_ERR |MC_ERR_REG_ECC_ALL_SNG | +MC_ERR_REG_ECC_ALL_DBL ; + temp64 =readq (&bar0->mc_err_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->mc_err_mask); + } +else { + val64 =MC_INT_MASK_MC_INT ; + temp64 =readq (&bar0->mc_int_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->mc_int_mask); + + val64 =MC_ERR_REG_ECC_ALL_SNG |MC_ERR_REG_ECC_ALL_DBL + |MC_ERR_REG_SM_ERR |PLL_LOCK_N ; + temp64 =readq (&bar0->mc_err_mask); + temp64 |= ((u64 ) val64); +writeq (temp64, &bar0->mc_err_mask); + } + } + nic->general_int_mask = gen_int_mask; + +/* Remove this line when alarm interrupts are enabled */ + nic->general_int_mask =0 ; +}/** * en_dis_able_nic_intrs - Enable or Disable the interrupts * @nic: device private variable,
@@ -1746,17 +2106,16 @@ static int s2io_link_fault_indication(ststatic void en_dis_able_nic_intrs (struct s2io_nic *nic,u16 mask,int flag) {struct XENA_dev_config __iomem *bar0 = nic->bar0; - registeru64 val64 =0 , temp64 =0 ; + registeru64 temp64 =0 , intr_mask =0 ; + + intr_mask = nic->general_int_mask;/* Top level interrupt classification */ /* PIC Interrupts */ -if ((mask & (TX_PIC_INTR |RX_PIC_INTR ))) { +if (mask &TX_PIC_INTR ) {/* Enable PIC Intrs in the general intr mask register */ - val64 =TXPIC_INT_M ; + intr_mask |=TXPIC_INT_M ;if (flag ==ENABLE_INTRS ) { - temp64 =readq (&bar0->general_int_mask); - temp64 &= ~((u64 ) val64); -writeq (temp64, &bar0->general_int_mask);/* * If Hercules adapter enable GPIO otherwise * disable all PCIX, Flash, MDIO, IIC and GPIO
@@ -1771,58 +2130,21 @@ static void en_dis_able_nic_intrs(struct temp64 =readq (&bar0->gpio_int_mask); temp64 &= ~((u64 )GPIO_INT_MASK_LINK_UP );writeq (temp64, &bar0->gpio_int_mask); - }else { + }else writeq (DISABLE_ALL_INTRS , &bar0->pic_int_mask); - } -/* -* No MSI Support is available presently, so TTI and -* RTI interrupts are also disabled. -*/ }else if (flag ==DISABLE_INTRS ) {/* * Disable PIC Intrs in the general * intr mask register */ writeq (DISABLE_ALL_INTRS , &bar0->pic_int_mask); - temp64 =readq (&bar0->general_int_mask); - val64 |= temp64; -writeq (val64, &bar0->general_int_mask); - } - } - -/* MAC Interrupts */ -/* Enabling/Disabling MAC interrupts */ -if (mask & (TX_MAC_INTR |RX_MAC_INTR )) { - val64 =TXMAC_INT_M |RXMAC_INT_M ; -if (flag ==ENABLE_INTRS ) { - temp64 =readq (&bar0->general_int_mask); - temp64 &= ~((u64 ) val64); -writeq (temp64, &bar0->general_int_mask); -/* -* All MAC block error interrupts are disabled for now -* TODO -*/ - }else if (flag ==DISABLE_INTRS ) { -/* -* Disable MAC Intrs in the general intr mask register -*/ -writeq (DISABLE_ALL_INTRS , &bar0->mac_int_mask); -writeq (DISABLE_ALL_INTRS , - &bar0->mac_rmac_err_mask); - - temp64 =readq (&bar0->general_int_mask); - val64 |= temp64; -writeq (val64, &bar0->general_int_mask); } }/* Tx traffic interrupts */ if (mask &TX_TRAFFIC_INTR ) { - val64 =TXTRAFFIC_INT_M ; + intr_mask |=TXTRAFFIC_INT_M ;if (flag ==ENABLE_INTRS ) { - temp64 =readq (&bar0->general_int_mask); - temp64 &= ~((u64 ) val64); -writeq (temp64, &bar0->general_int_mask);/* * Enable all the Tx side interrupts * writing 0 Enables all 64 TX interrupt levels
@@ -1834,19 +2156,13 @@ static void en_dis_able_nic_intrs(struct* register. */ writeq (DISABLE_ALL_INTRS , &bar0->tx_traffic_mask); - temp64 =readq (&bar0->general_int_mask); - val64 |= temp64; -writeq (val64, &bar0->general_int_mask); } }/* Rx traffic interrupts */ if (mask &RX_TRAFFIC_INTR ) { - val64 =RXTRAFFIC_INT_M ; + intr_mask |=RXTRAFFIC_INT_M ;if (flag ==ENABLE_INTRS ) { - temp64 =readq (&bar0->general_int_mask); - temp64 &= ~((u64 ) val64); -writeq (temp64, &bar0->general_int_mask);/* writing 0 Enables all 8 RX interrupt levels */ writeq (0x0 , &bar0->rx_traffic_mask); }else if (flag ==DISABLE_INTRS ) {
@@ -1855,11 +2171,17 @@ static void en_dis_able_nic_intrs(struct* register. */ writeq (DISABLE_ALL_INTRS , &bar0->rx_traffic_mask); - temp64 =readq (&bar0->general_int_mask); - val64 |= temp64; -writeq (val64, &bar0->general_int_mask); } } + + temp64 =readq (&bar0->general_int_mask); +if (flag ==ENABLE_INTRS ) + temp64 &= ~((u64 ) intr_mask); +else + temp64 =DISABLE_ALL_INTRS ; +writeq (temp64, &bar0->general_int_mask); + + nic->general_int_mask =readq (&bar0->general_int_mask); }/**
@@ -2063,14 +2385,6 @@ static int start_nic(struct s2io_nic *niwriteq (val64, &bar0->adapter_control);/* -* Clearing any possible Link state change interrupts that -* could have popped up just before Enabling the card. -*/ - val64 =readq (&bar0->mac_rmac_err_reg); -if (val64) -writeq (val64, &bar0->mac_rmac_err_reg); - -/* * Verify if the device is ready to be enabled, if so enable * it. */
@@ -2223,9 +2537,9 @@ static void stop_nic(struct s2io_nic *ni config = &nic->config;/* Disable all interrupts */ +en_dis_err_alarms (nic,ENA_ALL_INTRS ,DISABLE_INTRS ); interruptible =TX_TRAFFIC_INTR |RX_TRAFFIC_INTR ; - interruptible |=TX_PIC_INTR |RX_PIC_INTR ; - interruptible |=TX_MAC_INTR |RX_MAC_INTR ; + interruptible |=TX_PIC_INTR ;en_dis_able_nic_intrs (nic, interruptible,DISABLE_INTRS );/* Clearing Adapter_En bit of ADAPTER_CONTROL Register */
@@ -6670,12 +6984,12 @@ static int s2io_card_up(struct s2io_nictasklet_init (&sp->task, s2io_tasklet, (unsigned long ) dev);/* Enable select interrupts */ +en_dis_err_alarms (sp,ENA_ALL_INTRS ,ENABLE_INTRS );if (sp->intr_type !=INTA )en_dis_able_nic_intrs (sp,ENA_ALL_INTRS ,DISABLE_INTRS );else { interruptible =TX_TRAFFIC_INTR |RX_TRAFFIC_INTR ; - interruptible |=TX_PIC_INTR |RX_PIC_INTR ; - interruptible |=TX_MAC_INTR |RX_MAC_INTR ; + interruptible |=TX_PIC_INTR ;en_dis_able_nic_intrs (sp, interruptible,ENABLE_INTRS ); }
drivers/net/s2io.h +1 -0
@@ -892,6 +892,7 @@ struct s2io_nic {spinlock_t rx_lock;atomic_t isr_cnt; +u64 general_int_mask;u64 *ufo_in_band_v;#define VPD_STRING_LEN 80u8 product_name[VPD_STRING_LEN ];
drivers/net/s2io-regs.h +106 -10
195 lines not on this page · raw message
Quoted 31 lines · Ramkrishna Vepa
- Added support to unmask entire set of device errors and alarms.
Signed-off-by Sivakumar Subramani <[email protected]>Signed-off-by Santosh Rastapur <[email protected]>Signed-off-by Ramkrishna Vepa <[email protected]>---
diff -Nurporig/drivers/net/s2io.cpatch1/drivers/net/s2io.cdrivers/net/s2io.c +9
-2@@ -892,8 +892,9 @@ static void free_shared_mem(struct s2io_ k++; }kfree (mac_control->rings[i].ba[j]); - nic->mac_control.stats_info->sw_stat.mem_freed += (sizeof (struct buffAdd ) * - (rxd_count[nic->rxd_mode] +1 )); + nic->mac_control.stats_info->sw_stat.mem_freed += + (sizeof (struct buffAdd ) * + (rxd_count[nic->rxd_mode] +1 )); }kfree (mac_control->rings[i].ba); nic->mac_control.stats_info->sw_stat.mem_freed +=@@ -1732,6 +1733,365 @@ static int s2io_link_fault_indication(streturn MAC_RMAC_ERR_TIMER ; } +void en_dis_err_alarms (struct s2io_nic *nic,u16 mask,int flag) +{ +struct XENA_dev_config __iomem *bar0 = nic->bar0; + registeru64 val64 =0 , temp64 =0 , gen_int_mask =0 ; + +if (mask &TX_DMA_INTR ) {
drivers/net/s2io.c static int s2io_link_fault_indication(st · line 1751
Quoted 10 lines
drivers/net/s2io.c +10
-0+ gen_int_mask |=TXDMA_INT_M ; + +if (flag ==ENABLE_INTRS ) { + + val64 =TXDMA_TDA_INT |TXDMA_PFC_INT |TXDMA_PCC_INT + |TXDMA_TTI_INT |TXDMA_LSO_INT |TXDMA_TPA_INT + |TXDMA_SM_INT ; + temp64 =readq (&bar0->txdma_int_mask); + temp64 &= ~((u64 ) val64); +writeq (temp64, &bar0->txdma_int_mask);
reduce the size of this huge functions by creating a helper function whose use would look something like
writebits(TXDMA_TDA_INT|TXDMA_PFC_INT|TXDMA_PCC_INT| TXDMA_TTI_INT|TXDMA_LSO_INT|TXDMA_TPA_INT| TXDMA_SM_INT, flag, &bar0->txdma_int_mask);
That eliminates the wholesale duplication of code based on the 'flags==ENABLE_INTRS' test, and overall increases readability and decreases code size