[Madwifi-cvs] revision 3593 committed
Status: Beta
Brought to you by:
otaku
From: Matthew W. S. B. <svn...@ma...> - 2008-05-01 13:49:13
|
Project : madwifi Revision : 3593 Author : mentor (Matthew W. S. Bell) Date : 2008-05-01 15:49:09 +0200 (Thu, 01 May 2008) Log Message : Move the maximum monitor headroom definition to a nice header file Affected Files: * madwifi/trunk/ath/if_ath.c updated * madwifi/trunk/net80211/ieee80211_monitor.c updated * madwifi/trunk/net80211/ieee80211_monitor.h updated Modified: madwifi/trunk/ath/if_ath.c =================================================================== --- madwifi/trunk/ath/if_ath.c 2008-05-01 00:22:58 UTC (rev 3592) +++ madwifi/trunk/ath/if_ath.c 2008-05-01 13:49:09 UTC (rev 3593) @@ -6339,15 +6339,11 @@ { struct ath_hal *ah = sc->sc_ah; struct ath_desc *ds = NULL; - /* NB: Always use the same size for buffer allocations so that dynamically - * adding a monitor mode VAP to a running driver doesn't cause havoc. */ - unsigned int extra = A_MAX(sizeof(struct ath_rx_radiotap_header), - A_MAX(sizeof(struct wlan_ng_prism2_header), - ATHDESC_HEADER_SIZE)); - /* NB: I'm being cautious by unmapping and releasing the SKB every time. - * XXX: I could probably keep rolling, but the DMA map/unmap logic doesn't - * seem clean enough and cycling the skb through the free function and - * slab allocator seems to scrub any un-reset values. */ + /* NB: I'm being cautious by unmapping and releasing the SKB every + * time. + * XXX: I could probably keep rolling, but the DMA map/unmap logic + * doesn't seem clean enough and cycling the skb through the free + * function and slab allocator seems to scrub any un-reset values. */ if (bf->bf_skb != NULL) { KASSERT(bf->bf_skbaddr, ("bf->bf_skbaddr is 0")); bus_unmap_single(sc->sc_bdev, bf->bf_skbaddr, @@ -6355,7 +6351,11 @@ ieee80211_dev_kfree_skb(&bf->bf_skb); } if (!bf->bf_skb) { - int size = sc->sc_rxbufsize + extra + sc->sc_cachelsz - 1; + /* NB: Always use the same size for buffer allocations so that + * dynamically adding a monitor mode VAP to a running driver + * doesn't cause havoc. */ + int size = sc->sc_rxbufsize + IEEE80211_MON_MAXHDROOM + + sc->sc_cachelsz - 1; int offset = 0; bf->bf_skb = ath_alloc_skb(size, sc->sc_cachelsz); @@ -6367,7 +6367,7 @@ /* * Reserve space for the header. */ - skb_reserve(bf->bf_skb, extra); + skb_reserve(bf->bf_skb, IEEE80211_MON_MAXHDROOM); /* * Cache-line-align. This is important (for the * 5210 at least) as not doing so causes bogus data Modified: madwifi/trunk/net80211/ieee80211_monitor.c =================================================================== --- madwifi/trunk/net80211/ieee80211_monitor.c 2008-05-01 00:22:58 UTC (rev 3592) +++ madwifi/trunk/net80211/ieee80211_monitor.c 2008-05-01 13:49:09 UTC (rev 3593) @@ -297,11 +297,6 @@ /* * Context: softIRQ (tasklet) */ -#define MON_PKT_HDRSPACE ((unsigned int) \ - A_MAX(sizeof(struct ath_tx_radiotap_header), \ - A_MAX(sizeof(struct wlan_ng_prism2_header), \ - ATHDESC_HEADER_SIZE))) - void ieee80211_input_monitor(struct ieee80211com *ic, struct sk_buff *skb, const struct ath_buf *bf, int tx, u_int64_t mactime, struct ath_softc *sc) @@ -377,8 +372,8 @@ continue; } - if (skb_headroom(skb) < MON_PKT_HDRSPACE) - skb1 = skb_copy_expand(skb, MON_PKT_HDRSPACE, + if (skb_headroom(skb) < IEEE80211_MON_MAXHDROOM) + skb1 = skb_copy_expand(skb, IEEE80211_MON_MAXHDROOM, 0, GFP_ATOMIC); else skb1 = skb_copy(skb, GFP_ATOMIC); Modified: madwifi/trunk/net80211/ieee80211_monitor.h =================================================================== --- madwifi/trunk/net80211/ieee80211_monitor.h 2008-05-01 00:22:58 UTC (rev 3592) +++ madwifi/trunk/net80211/ieee80211_monitor.h 2008-05-01 13:49:09 UTC (rev 3593) @@ -29,6 +29,10 @@ #ifndef _NET80211_IEEE80211_MONITOR_H_ #define _NET80211_IEEE80211_MONITOR_H_ +#include <net80211/ieee80211_radiotap.h> +#include <ah_desc.h> +#include <ath/if_athvar.h> + #ifndef ARPHRD_IEEE80211_RADIOTAP #define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */ #endif /* ARPHRD_IEEE80211_RADIOTAP */ @@ -39,9 +43,10 @@ #define ATHDESC_HEADER_SIZE 32 -#include <net80211/ieee80211_radiotap.h> -#include <ah_desc.h> -#include <ath/if_athvar.h> +#define IEEE80211_MON_MAXHDROOM ((unsigned int) \ + A_MAX(sizeof(struct ath_tx_radiotap_header), \ + A_MAX(sizeof(struct wlan_ng_prism2_header), \ + ATHDESC_HEADER_SIZE))) struct ieee80211_phy_params { u_int8_t rate0; |