@@ -646,41 +646,33 @@ static int atl1c_alloc_queues(struct atl1c_adapter *adapter)
646646 return 0 ;
647647}
648648
649- static void atl1c_set_mac_type (struct atl1c_hw * hw )
649+ static enum atl1c_nic_type atl1c_get_mac_type (struct pci_dev * pdev ,
650+ u8 __iomem * hw_addr )
650651{
651- u32 magic ;
652- switch (hw -> device_id ) {
652+ switch (pdev -> device ) {
653653 case PCI_DEVICE_ID_ATTANSIC_L2C :
654- hw -> nic_type = athr_l2c ;
655- break ;
654+ return athr_l2c ;
656655 case PCI_DEVICE_ID_ATTANSIC_L1C :
657- hw -> nic_type = athr_l1c ;
658- break ;
656+ return athr_l1c ;
659657 case PCI_DEVICE_ID_ATHEROS_L2C_B :
660- hw -> nic_type = athr_l2c_b ;
661- break ;
658+ return athr_l2c_b ;
662659 case PCI_DEVICE_ID_ATHEROS_L2C_B2 :
663- hw -> nic_type = athr_l2c_b2 ;
664- break ;
660+ return athr_l2c_b2 ;
665661 case PCI_DEVICE_ID_ATHEROS_L1D :
666- hw -> nic_type = athr_l1d ;
667- break ;
662+ return athr_l1d ;
668663 case PCI_DEVICE_ID_ATHEROS_L1D_2_0 :
669- hw -> nic_type = athr_l1d_2 ;
670- AT_READ_REG (hw , REG_MT_MAGIC , & magic );
671- if (magic == MT_MAGIC )
672- hw -> nic_type = athr_mt ;
673- break ;
664+ if (readl (hw_addr + REG_MT_MAGIC ) == MT_MAGIC )
665+ return athr_mt ;
666+ return athr_l1d_2 ;
674667 default :
675- break ;
668+ return athr_l1c ;
676669 }
677670}
678671
679672static int atl1c_setup_mac_funcs (struct atl1c_hw * hw )
680673{
681674 u32 link_ctrl_data ;
682675
683- atl1c_set_mac_type (hw );
684676 AT_READ_REG (hw , REG_LINK_CTRL , & link_ctrl_data );
685677
686678 hw -> ctrl_flags = ATL1C_INTR_MODRT_ENABLE |
@@ -2568,7 +2560,8 @@ static int atl1c_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
25682560 struct net_device * netdev ;
25692561 struct atl1c_adapter * adapter ;
25702562 static int cards_found ;
2571-
2563+ u8 __iomem * hw_addr ;
2564+ enum atl1c_nic_type nic_type ;
25722565 int err = 0 ;
25732566
25742567 /* enable device (incl. PCI PM wakeup and hotplug setup) */
@@ -2602,6 +2595,15 @@ static int atl1c_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
26022595
26032596 pci_set_master (pdev );
26042597
2598+ hw_addr = pci_ioremap_bar (pdev , 0 );
2599+ if (!hw_addr ) {
2600+ err = - EIO ;
2601+ dev_err (& pdev -> dev , "cannot map device registers\n" );
2602+ goto err_ioremap ;
2603+ }
2604+
2605+ nic_type = atl1c_get_mac_type (pdev , hw_addr );
2606+
26052607 netdev = alloc_etherdev (sizeof (struct atl1c_adapter ));
26062608 if (netdev == NULL ) {
26072609 err = - ENOMEM ;
@@ -2618,13 +2620,9 @@ static int atl1c_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
26182620 adapter -> netdev = netdev ;
26192621 adapter -> pdev = pdev ;
26202622 adapter -> hw .adapter = adapter ;
2623+ adapter -> hw .nic_type = nic_type ;
26212624 adapter -> msg_enable = netif_msg_init (-1 , atl1c_default_msg );
2622- adapter -> hw .hw_addr = ioremap (pci_resource_start (pdev , 0 ), pci_resource_len (pdev , 0 ));
2623- if (!adapter -> hw .hw_addr ) {
2624- err = - EIO ;
2625- dev_err (& pdev -> dev , "cannot map device registers\n" );
2626- goto err_ioremap ;
2627- }
2625+ adapter -> hw .hw_addr = hw_addr ;
26282626
26292627 /* init mii data */
26302628 adapter -> mii .dev = netdev ;
@@ -2687,11 +2685,11 @@ static int atl1c_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
26872685err_reset :
26882686err_register :
26892687err_sw_init :
2690- iounmap (adapter -> hw .hw_addr );
26912688err_init_netdev :
2692- err_ioremap :
26932689 free_netdev (netdev );
26942690err_alloc_etherdev :
2691+ iounmap (hw_addr );
2692+ err_ioremap :
26952693 pci_release_regions (pdev );
26962694err_pci_reg :
26972695err_dma :
0 commit comments