@@ -252,19 +252,6 @@ rio_probe1 (struct pci_dev *pdev, const struct pci_device_id *ent)
252
252
if (err )
253
253
goto err_out_unmap_rx ;
254
254
255
- if (np -> chip_id == CHIP_IP1000A &&
256
- (np -> pdev -> revision == 0x40 || np -> pdev -> revision == 0x41 )) {
257
- /* PHY magic taken from ipg driver, undocumented registers */
258
- mii_write (dev , np -> phy_addr , 31 , 0x0001 );
259
- mii_write (dev , np -> phy_addr , 27 , 0x01e0 );
260
- mii_write (dev , np -> phy_addr , 31 , 0x0002 );
261
- mii_write (dev , np -> phy_addr , 27 , 0xeb8e );
262
- mii_write (dev , np -> phy_addr , 31 , 0x0000 );
263
- mii_write (dev , np -> phy_addr , 30 , 0x005e );
264
- /* advertise 1000BASE-T half & full duplex, prefer MASTER */
265
- mii_write (dev , np -> phy_addr , MII_CTRL1000 , 0x0700 );
266
- }
267
-
268
255
/* Fiber device? */
269
256
np -> phy_media = (dr16 (ASICCtrl ) & PhyMedia ) ? 1 : 0 ;
270
257
np -> link_status = 0 ;
@@ -274,13 +261,11 @@ rio_probe1 (struct pci_dev *pdev, const struct pci_device_id *ent)
274
261
if (np -> an_enable == 2 ) {
275
262
np -> an_enable = 1 ;
276
263
}
277
- mii_set_media_pcs (dev );
278
264
} else {
279
265
/* Auto-Negotiation is mandatory for 1000BASE-T,
280
266
IEEE 802.3ab Annex 28D page 14 */
281
267
if (np -> speed == 1000 )
282
268
np -> an_enable = 1 ;
283
- mii_set_media (dev );
284
269
}
285
270
286
271
err = register_netdev (dev );
@@ -531,25 +516,13 @@ static int alloc_list(struct net_device *dev)
531
516
return 0 ;
532
517
}
533
518
534
- static int
535
- rio_open (struct net_device * dev )
519
+ static void rio_hw_init (struct net_device * dev )
536
520
{
537
521
struct netdev_private * np = netdev_priv (dev );
538
522
void __iomem * ioaddr = np -> ioaddr ;
539
- const int irq = np -> pdev -> irq ;
540
523
int i ;
541
524
u16 macctrl ;
542
525
543
- i = alloc_list (dev );
544
- if (i )
545
- return i ;
546
-
547
- i = request_irq (irq , rio_interrupt , IRQF_SHARED , dev -> name , dev );
548
- if (i ) {
549
- free_list (dev );
550
- return i ;
551
- }
552
-
553
526
/* Reset all logic functions */
554
527
dw16 (ASICCtrl + 2 ,
555
528
GlobalReset | DMAReset | FIFOReset | NetworkReset | HostReset );
@@ -560,6 +533,24 @@ rio_open (struct net_device *dev)
560
533
/* DebugCtrl bit 4, 5, 9 must set */
561
534
dw32 (DebugCtrl , dr32 (DebugCtrl ) | 0x0230 );
562
535
536
+ if (np -> chip_id == CHIP_IP1000A &&
537
+ (np -> pdev -> revision == 0x40 || np -> pdev -> revision == 0x41 )) {
538
+ /* PHY magic taken from ipg driver, undocumented registers */
539
+ mii_write (dev , np -> phy_addr , 31 , 0x0001 );
540
+ mii_write (dev , np -> phy_addr , 27 , 0x01e0 );
541
+ mii_write (dev , np -> phy_addr , 31 , 0x0002 );
542
+ mii_write (dev , np -> phy_addr , 27 , 0xeb8e );
543
+ mii_write (dev , np -> phy_addr , 31 , 0x0000 );
544
+ mii_write (dev , np -> phy_addr , 30 , 0x005e );
545
+ /* advertise 1000BASE-T half & full duplex, prefer MASTER */
546
+ mii_write (dev , np -> phy_addr , MII_CTRL1000 , 0x0700 );
547
+ }
548
+
549
+ if (np -> phy_media )
550
+ mii_set_media_pcs (dev );
551
+ else
552
+ mii_set_media (dev );
553
+
563
554
/* Jumbo frame */
564
555
if (np -> jumbo != 0 )
565
556
dw16 (MaxFrameSize , MAX_JUMBO + 14 );
@@ -602,10 +593,6 @@ rio_open (struct net_device *dev)
602
593
dw32 (MACCtrl , dr32 (MACCtrl ) | AutoVLANuntagging );
603
594
}
604
595
605
- setup_timer (& np -> timer , rio_timer , (unsigned long )dev );
606
- np -> timer .expires = jiffies + 1 * HZ ;
607
- add_timer (& np -> timer );
608
-
609
596
/* Start Tx/Rx */
610
597
dw32 (MACCtrl , dr32 (MACCtrl ) | StatsEnable | RxEnable | TxEnable );
611
598
@@ -615,6 +602,42 @@ rio_open (struct net_device *dev)
615
602
macctrl |= (np -> tx_flow ) ? TxFlowControlEnable : 0 ;
616
603
macctrl |= (np -> rx_flow ) ? RxFlowControlEnable : 0 ;
617
604
dw16 (MACCtrl , macctrl );
605
+ }
606
+
607
+ static void rio_hw_stop (struct net_device * dev )
608
+ {
609
+ struct netdev_private * np = netdev_priv (dev );
610
+ void __iomem * ioaddr = np -> ioaddr ;
611
+
612
+ /* Disable interrupts */
613
+ dw16 (IntEnable , 0 );
614
+
615
+ /* Stop Tx and Rx logics */
616
+ dw32 (MACCtrl , TxDisable | RxDisable | StatsDisable );
617
+ }
618
+
619
+ static int rio_open (struct net_device * dev )
620
+ {
621
+ struct netdev_private * np = netdev_priv (dev );
622
+ const int irq = np -> pdev -> irq ;
623
+ int i ;
624
+
625
+ i = alloc_list (dev );
626
+ if (i )
627
+ return i ;
628
+
629
+ rio_hw_init (dev );
630
+
631
+ i = request_irq (irq , rio_interrupt , IRQF_SHARED , dev -> name , dev );
632
+ if (i ) {
633
+ rio_hw_stop (dev );
634
+ free_list (dev );
635
+ return i ;
636
+ }
637
+
638
+ setup_timer (& np -> timer , rio_timer , (unsigned long )dev );
639
+ np -> timer .expires = jiffies + 1 * HZ ;
640
+ add_timer (& np -> timer );
618
641
619
642
netif_start_queue (dev );
620
643
@@ -1764,17 +1787,11 @@ static int
1764
1787
rio_close (struct net_device * dev )
1765
1788
{
1766
1789
struct netdev_private * np = netdev_priv (dev );
1767
- void __iomem * ioaddr = np -> ioaddr ;
1768
-
1769
1790
struct pci_dev * pdev = np -> pdev ;
1770
1791
1771
1792
netif_stop_queue (dev );
1772
1793
1773
- /* Disable interrupts */
1774
- dw16 (IntEnable , 0 );
1775
-
1776
- /* Stop Tx and Rx logics */
1777
- dw32 (MACCtrl , TxDisable | RxDisable | StatsDisable );
1794
+ rio_hw_stop (dev );
1778
1795
1779
1796
free_irq (pdev -> irq , dev );
1780
1797
del_timer_sync (& np -> timer );
0 commit comments