ifneq ($(wildcard $(MODPROBE)),)
MADWIFI=$(shell $(MODPROBE) -l ath_pci)
OLD_IWL=$(shell $(MODPROBE) -l iwl4965)
+OLD_ALX=$(shell $(MODPROBE) -l atl1c)
endif
DESTDIR?=
@install scripts/athenable $(DESTDIR)/usr/sbin/
@install scripts/b43enable $(DESTDIR)/usr/sbin/
@install scripts/iwl-enable $(DESTDIR)/usr/sbin/
+ @install scripts/alx-enable $(DESTDIR)/usr/sbin/
@install scripts/athload $(DESTDIR)/usr/sbin/
@install scripts/b43load $(DESTDIR)/usr/sbin/
@install scripts/iwl-load $(DESTDIR)/usr/sbin/
echo Running iwl-enable iwlagn...;\
/usr/sbin/iwl-enable iwlagn ;\
fi
+ @if [ ! -z "$(OLD_ALX)" ] && [ -z "$(DESTDIR)" ]; then \
+ echo ;\
+ echo -n "Note: atl1c detected, we're going to disable it. " ;\
+ echo "If you would like to enable it later you can run:" ;\
+ echo " sudo alx-load atl1c" ;\
+ echo ;\
+ echo Running alx-enable alx...;\
+ /usr/sbin/alx-enable alx;\
+ fi
@# If on distributions like Mandriva which like to
@# compress their modules this will find out and do
@# it for you. Reason is some old version of modutils
@$(MODPROBE) -l atl2
@$(MODPROBE) -l atl1e
@$(MODPROBE) -l atl1c
+ @$(MODPROBE) -l alx
@echo
@echo "Currently detected bluetooth subsystem modules:"
@echo
@$(MODPROBE) -l atl2
@$(MODPROBE) -l atl1e
@$(MODPROBE) -l atl1c
+ @$(MODPROBE) -l alx
@echo
@echo "Your old bluetooth subsystem modules were left intact:"
@echo
--- /dev/null
+This should go into patches/01-netdev.patch
+
+--- a/drivers/net/ethernet/atheros/alx/alx_main.c
++++ b/drivers/net/ethernet/atheros/alx/alx_main.c
+@@ -318,7 +318,11 @@ static void alx_set_multicase_list(struc
+
+ /* comoute mc addresses' hash value ,and put it into hash table */
+ netdev_for_each_mc_addr(ha, netdev)
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ hw->cbs.set_mc_addr(hw, ha->addr);
++#else
++ hw->cbs.set_mc_addr(hw, ha->dmi_addr);
++#endif
+ }
+
+
+@@ -2482,7 +2486,7 @@ static void alx_free_all_rtx_descriptor(
+ ring_header->size = ring_header->used = 0;
+ }
+
+-
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))
+ static netdev_features_t alx_fix_features(struct net_device *netdev,
+ netdev_features_t features)
+ {
+@@ -2514,6 +2518,8 @@ static int alx_set_features(struct net_d
+ alx_vlan_mode(netdev, features);
+ return 0;
+ }
++#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) */
++
+ /*
+ * alx_change_mtu - Change the Maximum Transfer Unit
+ */
+@@ -2537,7 +2543,17 @@ static int alx_change_mtu(struct net_dev
+ adpt->hw.mtu = new_mtu;
+ adpt->rxbuf_size = new_mtu > ALX_DEF_RX_BUF_SIZE ?
+ ALIGN(max_frame, 8) : ALX_DEF_RX_BUF_SIZE;
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39))
++ if (new_mtu > (7*1024)) {
++ netdev->features &= ~NETIF_F_TSO;
++ netdev->features &= ~NETIF_F_TSO6;
++ } else {
++ netdev->features |= NETIF_F_TSO;
++ netdev->features |= NETIF_F_TSO6;
++ }
++#else
+ netdev_update_features(netdev);
++#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39)) */
+ alx_reinit_locked(adpt);
+ }
+
+@@ -3443,8 +3459,10 @@ static const struct net_device_ops alx_n
+ .ndo_change_mtu = alx_change_mtu,
+ .ndo_do_ioctl = alx_ioctl,
+ .ndo_tx_timeout = alx_tx_timeout,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))
+ .ndo_fix_features = alx_fix_features,
+ .ndo_set_features = alx_set_features,
++#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) */
+ #ifdef CONFIG_NET_POLL_CONTROLLER
+ .ndo_poll_controller = alx_poll_controller,
+ #endif
+@@ -3531,7 +3549,7 @@ static int __devinit alx_init(struct pci
+ netdev->base_addr = (unsigned long)adpt->hw.hw_addr;
+
+ /* set cb member of netdev structure*/
+- netdev->netdev_ops = &alx_netdev_ops;
++ netdev_attach_ops(netdev, &alx_netdev_ops);
+ alx_set_ethtool_ops(netdev);
+ netdev->watchdog_timeo = ALX_WATCHDOG_TIME;
+ strncpy(netdev->name, pci_name(pdev), sizeof(netdev->name) - 1);
+@@ -3579,6 +3597,7 @@ static int __devinit alx_init(struct pci
+ adpt->max_rxques = min_t(int, ALX_MAX_RX_QUEUES, num_online_cpus());
+ adpt->max_txques = min_t(int, ALX_MAX_TX_QUEUES, num_online_cpus());
+
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))
+ netdev->hw_features = NETIF_F_SG |
+ NETIF_F_HW_CSUM |
+ NETIF_F_HW_VLAN_RX;
+@@ -3590,6 +3609,19 @@ static int __devinit alx_init(struct pci
+ }
+ netdev->features = netdev->hw_features |
+ NETIF_F_HW_VLAN_TX;
++#else
++ netdev->features = NETIF_F_SG |
++ NETIF_F_HW_CSUM |
++ NETIF_F_HW_VLAN_RX;
++ if (adpt->hw.mac_type != alx_mac_l1c &&
++ adpt->hw.mac_type != alx_mac_l2c) {
++ netdev->features = netdev->features |
++ NETIF_F_TSO |
++ NETIF_F_TSO6;
++ }
++ netdev->features = netdev->features |
++ NETIF_F_HW_VLAN_TX;
++#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) */
+
+ /* get mac addr and perm mac addr, set to register */
+ if (hw->cbs.get_mac_addr)
+@@ -3859,6 +3891,8 @@ static struct pci_error_handlers alx_err
+ #ifdef CONFIG_PM_SLEEP
+ static SIMPLE_DEV_PM_OPS(alx_pm_ops, alx_suspend, alx_resume);
+ #define ALX_PM_OPS (&alx_pm_ops)
++compat_pci_suspend(alx_suspend)
++compat_pci_resume(alx_resume)
+ #else
+ #define ALX_PM_OPS NULL
+ #endif
+@@ -3871,7 +3905,12 @@ static struct pci_driver alx_driver = {
+ .remove = __devexit_p(alx_remove),
+ .shutdown = alx_shutdown,
+ .err_handler = &alx_err_handler,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29))
+ .driver.pm = ALX_PM_OPS,
++#elif defined(CONFIG_PM_SLEEP)
++ .suspend = alx_suspend_compat,
++ .resume = alx_resume_compat,
++#endif
+ };
+
+