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); |