devices/8139too-2.6.13-ethercat.c
branchstable-1.2
changeset 1739 5fcbd29151d2
parent 1732 1cc865ba17c2
child 1744 7bc131b92039
equal deleted inserted replaced
1738:bc89e3fba1a5 1739:5fcbd29151d2
   691 MODULE_PARM_DESC(ec_device_index,
   691 MODULE_PARM_DESC(ec_device_index,
   692                  "Index of the device reserved for EtherCAT.");
   692                  "Index of the device reserved for EtherCAT.");
   693 MODULE_PARM_DESC(ec_device_master_index,
   693 MODULE_PARM_DESC(ec_device_master_index,
   694                  "Index of the EtherCAT master to register the device.");
   694                  "Index of the EtherCAT master to register the device.");
   695 
   695 
       
   696 void ec_poll(struct net_device *);
       
   697 
   696 /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
   698 /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
   697 
   699 
   698 static int read_eeprom (void __iomem *ioaddr, int location, int addr_len);
   700 static int read_eeprom (void __iomem *ioaddr, int location, int addr_len);
   699 static int rtl8139_open (struct net_device *dev);
   701 static int rtl8139_open (struct net_device *dev);
   700 static int mdio_read (struct net_device *dev, int phy_id, int location);
   702 static int mdio_read (struct net_device *dev, int phy_id, int location);
   707 			       struct net_device *dev);
   709 			       struct net_device *dev);
   708 static int rtl8139_poll(struct net_device *dev, int *budget);
   710 static int rtl8139_poll(struct net_device *dev, int *budget);
   709 #ifdef CONFIG_NET_POLL_CONTROLLER
   711 #ifdef CONFIG_NET_POLL_CONTROLLER
   710 static void rtl8139_poll_controller(struct net_device *dev);
   712 static void rtl8139_poll_controller(struct net_device *dev);
   711 #endif
   713 #endif
   712 irqreturn_t rtl8139_interrupt (int irq, void *dev_instance,
   714 static irqreturn_t rtl8139_interrupt (int irq, void *dev_instance,
   713                                struct pt_regs *regs);
   715 			       struct pt_regs *regs);
   714 static int rtl8139_close (struct net_device *dev);
   716 static int rtl8139_close (struct net_device *dev);
   715 static int netdev_ioctl (struct net_device *dev, struct ifreq *rq, int cmd);
   717 static int netdev_ioctl (struct net_device *dev, struct ifreq *rq, int cmd);
   716 static struct net_device_stats *rtl8139_get_stats (struct net_device *dev);
   718 static struct net_device_stats *rtl8139_get_stats (struct net_device *dev);
   717 static void rtl8139_set_rx_mode (struct net_device *dev);
   719 static void rtl8139_set_rx_mode (struct net_device *dev);
   718 static void __set_rx_mode (struct net_device *dev);
   720 static void __set_rx_mode (struct net_device *dev);
  2335 	spin_unlock(&tp->rx_lock);
  2337 	spin_unlock(&tp->rx_lock);
  2336 
  2338 
  2337 	return !done;
  2339 	return !done;
  2338 }
  2340 }
  2339 
  2341 
       
  2342 /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
       
  2343 
       
  2344 void ec_poll(struct net_device *dev)
       
  2345 {
       
  2346     rtl8139_interrupt(0, dev, NULL);
       
  2347 }
       
  2348 
       
  2349 /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
       
  2350 
  2340 /* The interrupt handler does all of the Rx thread work and cleans up
  2351 /* The interrupt handler does all of the Rx thread work and cleans up
  2341    after the Tx thread. */
  2352    after the Tx thread. */
  2342 irqreturn_t rtl8139_interrupt (int irq, void *dev_instance,
  2353 irqreturn_t rtl8139_interrupt (int irq, void *dev_instance,
  2343                                struct pt_regs *regs)
  2354                                struct pt_regs *regs)
  2344 {
  2355 {
  2901 	}
  2912 	}
  2902 
  2913 
  2903 	if (rtl_ec_net_dev) {
  2914 	if (rtl_ec_net_dev) {
  2904 		printk(KERN_INFO "Registering EtherCAT device...\n");
  2915 		printk(KERN_INFO "Registering EtherCAT device...\n");
  2905 		if (!(rtl_ec_dev = ecdev_register(ec_device_master_index,
  2916 		if (!(rtl_ec_dev = ecdev_register(ec_device_master_index,
  2906 			rtl_ec_net_dev, rtl8139_interrupt, THIS_MODULE))) {
  2917 			rtl_ec_net_dev, ec_poll, THIS_MODULE))) {
  2907 			printk(KERN_ERR "Failed to register EtherCAT device!\n");
  2918 			printk(KERN_ERR "Failed to register EtherCAT device!\n");
  2908 			goto out_pci;
  2919 			goto out_pci;
  2909 		}
  2920 		}
  2910 
  2921 
  2911 		printk(KERN_INFO "Starting EtherCAT device...\n");
  2922 		printk(KERN_INFO "Opening EtherCAT device...\n");
  2912 		if (ecdev_start(ec_device_master_index)) {
  2923 		if (ecdev_open(rtl_ec_dev)) {
  2913 			printk(KERN_ERR "Failed to start EtherCAT device!\n");
  2924 			printk(KERN_ERR "Failed to open EtherCAT device!\n");
  2914 			goto out_unregister;
  2925 			goto out_unregister;
  2915 		}
  2926 		}
       
  2927 
       
  2928 		printk(KERN_INFO "EtherCAT device ready.\n");
  2916 	} else {
  2929 	} else {
  2917 		printk(KERN_WARNING "No EtherCAT device registered!\n");
  2930 		printk(KERN_WARNING "No EtherCAT device registered!\n");
  2918 	}
  2931 	}
  2919 
  2932 
  2920 	return 0;
  2933 	return 0;
  2921 
  2934 
  2922     out_unregister:
  2935     out_unregister:
       
  2936 	printk(KERN_INFO "Unregistering EtherCAT device...\n");
  2923 	ecdev_unregister(ec_device_master_index, rtl_ec_dev);
  2937 	ecdev_unregister(ec_device_master_index, rtl_ec_dev);
       
  2938 	rtl_ec_dev = NULL;
  2924     out_pci:
  2939     out_pci:
  2925 	pci_unregister_driver(&rtl8139_pci_driver);
  2940 	pci_unregister_driver(&rtl8139_pci_driver);
  2926     out_return:
  2941     out_return:
  2927 	return -1;
  2942 	return -1;
  2928 
  2943 
  2935 	/* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
  2950 	/* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
  2936 
  2951 
  2937 	printk(KERN_INFO "Cleaning up RTL8139-EtherCAT module...\n");
  2952 	printk(KERN_INFO "Cleaning up RTL8139-EtherCAT module...\n");
  2938 
  2953 
  2939 	if (rtl_ec_net_dev) {
  2954 	if (rtl_ec_net_dev) {
  2940 		printk(KERN_INFO "Stopping device...\n");
  2955 		printk(KERN_INFO "Closing EtherCAT device...\n");
  2941 		ecdev_stop(ec_device_master_index);
  2956 		ecdev_close(rtl_ec_dev);
  2942 		printk(KERN_INFO "Unregistering device...\n");
  2957 		printk(KERN_INFO "Unregistering EtherCAT device...\n");
  2943 		ecdev_unregister(ec_device_master_index, rtl_ec_dev);
  2958 		ecdev_unregister(ec_device_master_index, rtl_ec_dev);
  2944 		rtl_ec_dev = NULL;
  2959 		rtl_ec_dev = NULL;
  2945 	}
  2960 	}
  2946 
  2961 
  2947 	pci_unregister_driver(&rtl8139_pci_driver);
  2962 	pci_unregister_driver(&rtl8139_pci_driver);