Author: Alexander Feldman Description: Patch to compile with kernel 2.6.29. diff -Naurp broadcom-sta.orig/i386/src/wl/sys/wl_iw.c broadcom-sta/i386/src/wl/sys/wl_iw.c --- broadcom-sta.orig/i386/src/wl/sys/wl_iw.c 2009-05-03 09:16:11.000000000 +0000 +++ broadcom-sta/i386/src/wl/sys/wl_iw.c 2009-05-17 14:46:01.000000000 +0000 @@ -610,7 +610,11 @@ wl_iw_set_spy( char *extra ) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) + wl_iw_t *iw = netdev_priv(dev); +#else wl_iw_t *iw = dev->priv; +#endif struct sockaddr *addr = (struct sockaddr *) extra; int i; @@ -635,7 +639,11 @@ wl_iw_get_spy( char *extra ) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) + wl_iw_t *iw = netdev_priv(dev); +#else wl_iw_t *iw = dev->priv; +#endif struct sockaddr *addr = (struct sockaddr *) extra; struct iw_quality *qual = (struct iw_quality *) &addr[iw->spy_num]; int i; @@ -1110,7 +1118,11 @@ wl_iw_set_nick( char *extra ) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) + wl_iw_t *iw = netdev_priv(dev); +#else wl_iw_t *iw = dev->priv; +#endif WL_TRACE(("%s: SIOCSIWNICKN\n", dev->name)); @@ -1134,7 +1146,11 @@ wl_iw_get_nick( char *extra ) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) + wl_iw_t *iw = netdev_priv(dev); +#else wl_iw_t *iw = dev->priv; +#endif WL_TRACE(("%s: SIOCGIWNICKN\n", dev->name)); @@ -1790,7 +1806,11 @@ wl_iw_set_wpaauth( int paramid; int paramval; int val = 0; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) + wl_iw_t *iw = netdev_priv(dev); +#else wl_iw_t *iw = dev->priv; +#endif WL_TRACE(("%s: SIOCSIWAUTH\n", dev->name)); @@ -1921,7 +1941,11 @@ wl_iw_get_wpaauth( int paramid; int paramval = 0; int val; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) + wl_iw_t *iw = netdev_priv(dev); +#else wl_iw_t *iw = dev->priv; +#endif WL_TRACE(("%s: SIOCGIWAUTH\n", dev->name)); diff -Naurp broadcom-sta.orig/i386/src/wl/sys/wl_linux.c broadcom-sta/i386/src/wl/sys/wl_linux.c --- broadcom-sta.orig/i386/src/wl/sys/wl_linux.c 2009-05-03 09:16:11.000000000 +0000 +++ broadcom-sta/i386/src/wl/sys/wl_linux.c 2009-05-17 14:46:01.000000000 +0000 @@ -53,6 +53,9 @@ #include #define WLC_MAXBSSCFG 1 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) +#include +#endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 14) #include #endif @@ -130,7 +133,11 @@ struct ieee80211_tkip_data { u8 rx_hdr[16], tx_hdr[16]; }; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) +#define WL_DEV_IF(dev) ((wl_if_t*)netdev_priv(dev)) +#else #define WL_DEV_IF(dev) ((wl_if_t*)(dev)->priv) +#endif #define WL_INFO(dev) ((wl_info_t*)(WL_DEV_IF(dev)->wl)) #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20) @@ -282,6 +289,9 @@ wl_attach(uint16 vendor, uint16 device, dev = wlif->dev; wl->dev = dev; wl_if_setup(dev); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) + wlif = netdev_priv(dev); +#endif dev->base_addr = regs; @@ -359,10 +369,20 @@ wl_attach(uint16 vendor, uint16 device, #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 14) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) + wl->tkipmodops = lib80211_get_crypto_ops("TKIP"); +#else wl->tkipmodops = ieee80211_get_crypto_ops("TKIP"); +#endif if (wl->tkipmodops == NULL) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) + request_module("lib80211"); + request_module("lib80211_crypt_tkip"); + wl->tkipmodops = lib80211_get_crypto_ops("TKIP"); +#else request_module("ieee80211_crypt_tkip"); wl->tkipmodops = ieee80211_get_crypto_ops("TKIP"); +#endif } #endif #ifdef CONFIG_WIRELESS_EXT @@ -666,7 +686,11 @@ wl_free(wl_info_t *wl) } if (wl->monitor) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) + wl_free_if(wl, (wl_if_t *)netdev_priv(wl->monitor)); +#else wl_free_if(wl, (wl_if_t *)(wl->monitor->priv)); +#endif wl->monitor = NULL; } @@ -833,7 +857,10 @@ wl_alloc_if(wl_info_t *wl, int iftype, u strncpy(dev->name, name, IFNAMSIZ); #else - dev = alloc_netdev(0, name, ether_setup); + dev = alloc_netdev(sizeof(wl_if_t), name, ether_setup); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) + wlif = netdev_priv(dev); +#endif if (!dev) { MFREE(wl->osh, wlif, sizeof(wl_if_t)); WL_ERROR(("wl%d: wl_alloc_if: out of memory, alloc_netdev\n", @@ -847,7 +874,9 @@ wl_alloc_if(wl_info_t *wl, int iftype, u wlif->wl = wl; wlif->wlcif = wlcif; wlif->subunit = subunit; +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29) dev->priv = wlif; +#endif if (iftype != WL_IFTYPE_MON && wl->dev && netif_queue_stopped(wl->dev)) netif_stop_queue(dev); diff -Naurp broadcom-sta.orig/i386/src/wl/sys/wl_linux.h broadcom-sta/i386/src/wl/sys/wl_linux.h --- broadcom-sta.orig/i386/src/wl/sys/wl_linux.h 2009-05-03 09:16:11.000000000 +0000 +++ broadcom-sta/i386/src/wl/sys/wl_linux.h 2009-05-17 14:46:01.000000000 +0000 @@ -85,10 +85,16 @@ struct wl_info { bool resched; uint32 pci_psstate[16]; #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 14) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) + struct lib80211_crypto_ops *tkipmodops; + struct lib80211_tkip_data *tkip_ucast_data; + struct lib80211_tkip_data *tkip_bcast_data; +#else struct ieee80211_crypto_ops *tkipmodops; struct ieee80211_tkip_data *tkip_ucast_data; struct ieee80211_tkip_data *tkip_bcast_data; #endif +#endif uint stats_id;