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