broadcom 802.11 driver
Broadcom 802.11 Linux STA driver が 5/1に更新されていたようなので入れる。
2.6.29ではそのままコンパイル通らなかったのでパッチを作成した。
diff -ur orig/src/wl/sys/wl_iw.c patched/src/wl/sys/wl_iw.c --- orig/src/wl/sys/wl_iw.c 2009-04-23 02:46:35.000000000 +0900 +++ patched/src/wl/sys/wl_iw.c 2009-05-11 02:46:01.000000000 +0900 @@ -610,7 +610,11 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 -ur orig/src/wl/sys/wl_linux.c patched/src/wl/sys/wl_linux.c --- orig/src/wl/sys/wl_linux.c 2009-04-23 02:48:59.000000000 +0900 +++ patched/src/wl/sys/wl_linux.c 2009-05-11 02:46:01.000000000 +0900 @@ -53,6 +53,9 @@ #include <linux/pci_ids.h> #define WLC_MAXBSSCFG 1 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) +#include <net/lib80211.h> +#endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 14) #include <net/ieee80211.h> #endif @@ -130,7 +133,11 @@ 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 @@ 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,19 @@ #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"); + 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 +685,11 @@ } 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; } @@ -834,6 +857,9 @@ #else dev = alloc_netdev(0, 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 +873,9 @@ 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 -ur orig/src/wl/sys/wl_linux.h patched/src/wl/sys/wl_linux.h --- orig/src/wl/sys/wl_linux.h 2009-04-23 02:49:04.000000000 +0900 +++ patched/src/wl/sys/wl_linux.h 2009-05-11 02:45:04.000000000 +0900 @@ -85,7 +85,11 @@ bool resched; uint32 pci_psstate[16]; #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 14) - struct ieee80211_crypto_ops *tkipmodops; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) + struct lib80211_crypto_ops *tkipmodops; +#else + struct ieee80211_crypto_ops *tkipmodops; +#endif struct ieee80211_tkip_data *tkip_ucast_data; struct ieee80211_tkip_data *tkip_bcast_data; #endif