@@ -312,6 +312,11 @@ inline void qlcnic_83xx_clear_legacy_intr_mask(struct qlcnic_adapter *adapter)
312312 writel (0 , adapter -> tgt_mask_reg );
313313}
314314
315+ inline void qlcnic_83xx_set_legacy_intr_mask (struct qlcnic_adapter * adapter )
316+ {
317+ writel (1 , adapter -> tgt_mask_reg );
318+ }
319+
315320/* Enable MSI-x and INT-x interrupts */
316321void qlcnic_83xx_enable_intr (struct qlcnic_adapter * adapter ,
317322 struct qlcnic_host_sds_ring * sds_ring )
@@ -458,6 +463,9 @@ void qlcnic_83xx_free_mbx_intr(struct qlcnic_adapter *adapter)
458463{
459464 u32 num_msix ;
460465
466+ if (!(adapter -> flags & QLCNIC_MSIX_ENABLED ))
467+ qlcnic_83xx_set_legacy_intr_mask (adapter );
468+
461469 qlcnic_83xx_disable_mbx_intr (adapter );
462470
463471 if (adapter -> flags & QLCNIC_MSIX_ENABLED )
@@ -474,7 +482,6 @@ int qlcnic_83xx_setup_mbx_intr(struct qlcnic_adapter *adapter)
474482{
475483 irq_handler_t handler ;
476484 u32 val ;
477- char name [32 ];
478485 int err = 0 ;
479486 unsigned long flags = 0 ;
480487
@@ -485,9 +492,7 @@ int qlcnic_83xx_setup_mbx_intr(struct qlcnic_adapter *adapter)
485492 if (adapter -> flags & QLCNIC_MSIX_ENABLED ) {
486493 handler = qlcnic_83xx_handle_aen ;
487494 val = adapter -> msix_entries [adapter -> ahw -> num_msix - 1 ].vector ;
488- snprintf (name , (IFNAMSIZ + 4 ),
489- "%s[%s]" , "qlcnic" , "aen" );
490- err = request_irq (val , handler , flags , name , adapter );
495+ err = request_irq (val , handler , flags , "qlcnic-MB" , adapter );
491496 if (err ) {
492497 dev_err (& adapter -> pdev -> dev ,
493498 "failed to register MBX interrupt\n" );
@@ -1588,16 +1593,24 @@ int qlcnic_83xx_loopback_test(struct net_device *netdev, u8 mode)
15881593 struct qlcnic_hardware_context * ahw = adapter -> ahw ;
15891594 int ret = 0 , loop = 0 , max_sds_rings = adapter -> max_sds_rings ;
15901595
1591- QLCDB (adapter , DRV , "%s loopback test in progress\n" ,
1592- mode == QLCNIC_ILB_MODE ? "internal" : "external" );
15931596 if (ahw -> op_mode == QLCNIC_NON_PRIV_FUNC ) {
1594- dev_warn ( & adapter -> pdev -> dev ,
1595- "Loopback test not supported for non privilege function \n" );
1597+ netdev_warn ( netdev ,
1598+ "Loopback test not supported in non privileged mode \n" );
15961599 return ret ;
15971600 }
15981601
1599- if (test_and_set_bit (__QLCNIC_RESETTING , & adapter -> state ))
1602+ if (test_bit (__QLCNIC_RESETTING , & adapter -> state )) {
1603+ netdev_info (netdev , "Device is resetting\n" );
16001604 return - EBUSY ;
1605+ }
1606+
1607+ if (qlcnic_get_diag_lock (adapter )) {
1608+ netdev_info (netdev , "Device is in diagnostics mode\n" );
1609+ return - EBUSY ;
1610+ }
1611+
1612+ netdev_info (netdev , "%s loopback test in progress\n" ,
1613+ mode == QLCNIC_ILB_MODE ? "internal" : "external" );
16011614
16021615 ret = qlcnic_83xx_diag_alloc_res (netdev , QLCNIC_LOOPBACK_TEST ,
16031616 max_sds_rings );
@@ -1638,7 +1651,7 @@ int qlcnic_83xx_loopback_test(struct net_device *netdev, u8 mode)
16381651
16391652fail_diag_alloc :
16401653 adapter -> max_sds_rings = max_sds_rings ;
1641- clear_bit ( __QLCNIC_RESETTING , & adapter -> state );
1654+ qlcnic_release_diag_lock ( adapter );
16421655 return ret ;
16431656}
16441657
@@ -2121,26 +2134,25 @@ int qlcnic_83xx_get_nic_info(struct qlcnic_adapter *adapter,
21212134int qlcnic_83xx_get_pci_info (struct qlcnic_adapter * adapter ,
21222135 struct qlcnic_pci_info * pci_info )
21232136{
2137+ struct qlcnic_hardware_context * ahw = adapter -> ahw ;
2138+ struct device * dev = & adapter -> pdev -> dev ;
2139+ struct qlcnic_cmd_args cmd ;
21242140 int i , err = 0 , j = 0 ;
21252141 u32 temp ;
2126- struct qlcnic_cmd_args cmd ;
21272142
21282143 qlcnic_alloc_mbx_args (& cmd , adapter , QLCNIC_CMD_GET_PCI_INFO );
21292144 err = qlcnic_issue_cmd (adapter , & cmd );
21302145
2131- adapter -> ahw -> act_pci_func = 0 ;
2146+ ahw -> act_pci_func = 0 ;
21322147 if (err == QLCNIC_RCODE_SUCCESS ) {
2133- pci_info -> func_count = cmd .rsp .arg [1 ] & 0xFF ;
2134- dev_info (& adapter -> pdev -> dev ,
2135- "%s: total functions = %d\n" ,
2136- __func__ , pci_info -> func_count );
2148+ ahw -> max_pci_func = cmd .rsp .arg [1 ] & 0xFF ;
21372149 for (i = 2 , j = 0 ; j < QLCNIC_MAX_PCI_FUNC ; j ++ , pci_info ++ ) {
21382150 pci_info -> id = cmd .rsp .arg [i ] & 0xFFFF ;
21392151 pci_info -> active = (cmd .rsp .arg [i ] & 0xFFFF0000 ) >> 16 ;
21402152 i ++ ;
21412153 pci_info -> type = cmd .rsp .arg [i ] & 0xFFFF ;
21422154 if (pci_info -> type == QLCNIC_TYPE_NIC )
2143- adapter -> ahw -> act_pci_func ++ ;
2155+ ahw -> act_pci_func ++ ;
21442156 temp = (cmd .rsp .arg [i ] & 0xFFFF0000 ) >> 16 ;
21452157 pci_info -> default_port = temp ;
21462158 i ++ ;
@@ -2152,18 +2164,21 @@ int qlcnic_83xx_get_pci_info(struct qlcnic_adapter *adapter,
21522164 i ++ ;
21532165 memcpy (pci_info -> mac + sizeof (u32 ), & cmd .rsp .arg [i ], 2 );
21542166 i = i + 3 ;
2155-
2156- dev_info (& adapter -> pdev -> dev , "%s: \n"
2157- "\tid = %d active = %d type = %d\n"
2158- "\tport = %d min bw = %d max bw = %d \n"
2159- "\tmac_addr = %pM\n" , __func__ ,
2160- pci_info -> id , pci_info -> active , pci_info -> type ,
2161- pci_info -> default_port , pci_info -> tx_min_bw ,
2162- pci_info -> tx_max_bw , pci_info -> mac );
2167+ if ( ahw -> op_mode == QLCNIC_MGMT_FUNC )
2168+ dev_info (dev , "id = %d active = %d type = %d \n"
2169+ "\tport = %d min bw = %d max bw = %d\n"
2170+ "\tmac_addr = %pM \n" , pci_info -> id ,
2171+ pci_info -> active , pci_info -> type ,
2172+ pci_info -> default_port ,
2173+ pci_info -> tx_min_bw ,
2174+ pci_info -> tx_max_bw , pci_info -> mac );
21632175 }
2176+ if (ahw -> op_mode == QLCNIC_MGMT_FUNC )
2177+ dev_info (dev , "Max vNIC functions = %d, active vNIC functions = %d\n" ,
2178+ ahw -> max_pci_func , ahw -> act_pci_func );
2179+
21642180 } else {
2165- dev_err (& adapter -> pdev -> dev , "Failed to get PCI Info%d\n" ,
2166- err );
2181+ dev_err (dev , "Failed to get PCI Info, error = %d\n" , err );
21672182 err = - EIO ;
21682183 }
21692184
@@ -3113,8 +3128,10 @@ int qlcnic_83xx_interrupt_test(struct net_device *netdev)
31133128 u8 val ;
31143129 int ret , max_sds_rings = adapter -> max_sds_rings ;
31153130
3116- if (test_and_set_bit (__QLCNIC_RESETTING , & adapter -> state ))
3117- return - EIO ;
3131+ if (qlcnic_get_diag_lock (adapter )) {
3132+ netdev_info (netdev , "Device in diagnostics mode\n" );
3133+ return - EBUSY ;
3134+ }
31183135
31193136 ret = qlcnic_83xx_diag_alloc_res (netdev , QLCNIC_INTERRUPT_TEST ,
31203137 max_sds_rings );
@@ -3156,7 +3173,7 @@ int qlcnic_83xx_interrupt_test(struct net_device *netdev)
31563173
31573174fail_diag_irq :
31583175 adapter -> max_sds_rings = max_sds_rings ;
3159- clear_bit ( __QLCNIC_RESETTING , & adapter -> state );
3176+ qlcnic_release_diag_lock ( adapter );
31603177 return ret ;
31613178}
31623179
0 commit comments