@@ -593,47 +593,43 @@ static const struct net_device_ops netxen_netdev_ops = {
593593};
594594
595595static void
596- netxen_setup_intr (struct netxen_adapter * adapter )
596+ netxen_initialize_interrupt_registers (struct netxen_adapter * adapter )
597597{
598598 struct netxen_legacy_intr_set * legacy_intrp ;
599- struct pci_dev * pdev = adapter -> pdev ;
600- int err , num_msix ;
601-
602- if (adapter -> rss_supported ) {
603- num_msix = (num_online_cpus () >= MSIX_ENTRIES_PER_ADAPTER ) ?
604- MSIX_ENTRIES_PER_ADAPTER : 2 ;
605- } else
606- num_msix = 1 ;
607-
608- adapter -> max_sds_rings = 1 ;
609-
610- adapter -> flags &= ~(NETXEN_NIC_MSI_ENABLED | NETXEN_NIC_MSIX_ENABLED );
599+ u32 tgt_status_reg , int_state_reg ;
611600
612601 if (adapter -> ahw .revision_id >= NX_P3_B0 )
613602 legacy_intrp = & legacy_intr [adapter -> ahw .pci_func ];
614603 else
615604 legacy_intrp = & legacy_intr [0 ];
616605
606+ tgt_status_reg = legacy_intrp -> tgt_status_reg ;
607+ int_state_reg = ISR_INT_STATE_REG ;
608+
617609 adapter -> int_vec_bit = legacy_intrp -> int_vec_bit ;
618- adapter -> tgt_status_reg = netxen_get_ioaddr (adapter ,
619- legacy_intrp -> tgt_status_reg );
610+ adapter -> tgt_status_reg = netxen_get_ioaddr (adapter , tgt_status_reg );
620611 adapter -> tgt_mask_reg = netxen_get_ioaddr (adapter ,
621- legacy_intrp -> tgt_mask_reg );
612+ legacy_intrp -> tgt_mask_reg );
622613 adapter -> pci_int_reg = netxen_get_ioaddr (adapter ,
623- legacy_intrp -> pci_int_reg );
614+ legacy_intrp -> pci_int_reg );
624615 adapter -> isr_int_vec = netxen_get_ioaddr (adapter , ISR_INT_VECTOR );
625616
626617 if (adapter -> ahw .revision_id >= NX_P3_B1 )
627618 adapter -> crb_int_state_reg = netxen_get_ioaddr (adapter ,
628- ISR_INT_STATE_REG );
619+ int_state_reg );
629620 else
630621 adapter -> crb_int_state_reg = netxen_get_ioaddr (adapter ,
631- CRB_INT_VECTOR );
622+ CRB_INT_VECTOR );
623+ }
632624
633- netxen_set_msix_bit (pdev , 0 );
625+ static int netxen_setup_msi_interrupts (struct netxen_adapter * adapter ,
626+ int num_msix )
627+ {
628+ struct pci_dev * pdev = adapter -> pdev ;
629+ u32 value ;
630+ int err ;
634631
635632 if (adapter -> msix_supported ) {
636-
637633 netxen_init_msix_entries (adapter , num_msix );
638634 err = pci_enable_msix (pdev , adapter -> msix_entries , num_msix );
639635 if (err == 0 ) {
@@ -644,26 +640,45 @@ netxen_setup_intr(struct netxen_adapter *adapter)
644640 adapter -> max_sds_rings = num_msix ;
645641
646642 dev_info (& pdev -> dev , "using msi-x interrupts\n" );
647- return ;
643+ return 0 ;
648644 }
649-
650- if (err > 0 )
651- pci_disable_msix (pdev );
652-
653645 /* fall through for msi */
654646 }
655647
656648 if (use_msi && !pci_enable_msi (pdev )) {
649+ value = msi_tgt_status [adapter -> ahw .pci_func ];
657650 adapter -> flags |= NETXEN_NIC_MSI_ENABLED ;
658- adapter -> tgt_status_reg = netxen_get_ioaddr (adapter ,
659- msi_tgt_status [adapter -> ahw .pci_func ]);
660- dev_info (& pdev -> dev , "using msi interrupts\n" );
651+ adapter -> tgt_status_reg = netxen_get_ioaddr (adapter , value );
661652 adapter -> msix_entries [0 ].vector = pdev -> irq ;
662- return ;
653+ dev_info (& pdev -> dev , "using msi interrupts\n" );
654+ return 0 ;
663655 }
664656
665- dev_info (& pdev -> dev , "using legacy interrupts\n" );
657+ return - EIO ;
658+ }
659+
660+ static void netxen_setup_intr (struct netxen_adapter * adapter )
661+ {
662+ struct pci_dev * pdev = adapter -> pdev ;
663+ int num_msix ;
664+
665+ if (adapter -> rss_supported )
666+ num_msix = (num_online_cpus () >= MSIX_ENTRIES_PER_ADAPTER ) ?
667+ MSIX_ENTRIES_PER_ADAPTER : 2 ;
668+ else
669+ num_msix = 1 ;
670+
671+ adapter -> max_sds_rings = 1 ;
672+ adapter -> flags &= ~(NETXEN_NIC_MSI_ENABLED | NETXEN_NIC_MSIX_ENABLED );
673+
674+ netxen_initialize_interrupt_registers (adapter );
675+ netxen_set_msix_bit (pdev , 0 );
676+
677+ if (!netxen_setup_msi_interrupts (adapter , num_msix ))
678+ return ;
679+
666680 adapter -> msix_entries [0 ].vector = pdev -> irq ;
681+ dev_info (& pdev -> dev , "using legacy interrupts\n" );
667682}
668683
669684static void
0 commit comments