mirror of
https://github.com/proski/madwifi
synced 2024-11-22 06:21:47 +03:00
Linux 2.4 series compatibility fixes
* Based on patches from nbd * av_beacon_alloc code has been reimplemented using atomic bit operations; I think this is safe for SMP git-svn-id: http://madwifi-project.org/svn/madwifi/trunk@3310 0192ed92-7a03-0410-a25b-9323aeb14dbd
This commit is contained in:
parent
2b8281ba31
commit
0ad2c8981a
20
ath/if_ath.c
20
ath/if_ath.c
@ -526,7 +526,8 @@ ath_attach(u_int16_t devid, struct net_device *dev, HAL_BUS_TAG tag)
|
|||||||
|
|
||||||
/* Allocate space for dynamically determined maximum VAP count */
|
/* Allocate space for dynamically determined maximum VAP count */
|
||||||
sc->sc_bslot =
|
sc->sc_bslot =
|
||||||
kzalloc(ath_maxvaps * sizeof(struct ieee80211vap), GFP_KERNEL);
|
kmalloc(ath_maxvaps * sizeof(struct ieee80211vap), GFP_KERNEL);
|
||||||
|
memset(sc->sc_bslot, 0, ath_maxvaps * sizeof(struct ieee80211vap));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Cache line size is used to size and align various
|
* Cache line size is used to size and align various
|
||||||
@ -1345,7 +1346,11 @@ ath_vap_create(struct ieee80211com *ic, const char *name,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
avp->av_bslot = -1;
|
avp->av_bslot = -1;
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)
|
||||||
atomic_set(&avp->av_beacon_alloc, 0);
|
atomic_set(&avp->av_beacon_alloc, 0);
|
||||||
|
#else
|
||||||
|
clear_bit(0, &avp->av_beacon_alloc);
|
||||||
|
#endif
|
||||||
STAILQ_INIT(&avp->av_mcastq.axq_q);
|
STAILQ_INIT(&avp->av_mcastq.axq_q);
|
||||||
ATH_TXQ_LOCK_INIT(&avp->av_mcastq);
|
ATH_TXQ_LOCK_INIT(&avp->av_mcastq);
|
||||||
if (IEEE80211_IS_MODE_BEACON(opmode)) {
|
if (IEEE80211_IS_MODE_BEACON(opmode)) {
|
||||||
@ -4509,7 +4514,11 @@ ath_beacon_alloc(struct ath_softc *sc, struct ieee80211_node *ni)
|
|||||||
{
|
{
|
||||||
struct ath_vap * avp = ATH_VAP(ni->ni_vap);
|
struct ath_vap * avp = ATH_VAP(ni->ni_vap);
|
||||||
|
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)
|
||||||
atomic_set(&avp->av_beacon_alloc, 1);
|
atomic_set(&avp->av_beacon_alloc, 1);
|
||||||
|
#else
|
||||||
|
set_bit(0, &avp->av_beacon_alloc);
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -4754,9 +4763,12 @@ ath_beacon_generate(struct ath_softc *sc, struct ieee80211vap *vap, int *needmar
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (atomic_add_unless(&avp->av_beacon_alloc, -1, 0)) {
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)
|
||||||
ath_beacon_alloc_internal(sc, vap->iv_bss);
|
if (atomic_add_unless(&avp->av_beacon_alloc, -1, 0))
|
||||||
}
|
#else
|
||||||
|
if (test_and_clear_bit(0, &avp->av_beacon_alloc))
|
||||||
|
#endif
|
||||||
|
ath_beacon_alloc_internal(sc, vap->iv_bss);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Update dynamic beacon contents. If this returns
|
* Update dynamic beacon contents. If this returns
|
||||||
|
@ -1532,9 +1532,11 @@ void ath_rp_init(struct ath_softc *sc)
|
|||||||
|
|
||||||
ath_rp_clear(sc);
|
ath_rp_clear(sc);
|
||||||
|
|
||||||
sc->sc_rp = (struct ath_rp *)kzalloc(
|
sc->sc_rp = (struct ath_rp *)kmalloc(
|
||||||
sizeof(struct ath_rp) *
|
sizeof(struct ath_rp) *
|
||||||
ATH_RADAR_PULSE_NR, GFP_KERNEL);
|
ATH_RADAR_PULSE_NR, GFP_KERNEL);
|
||||||
|
memset(sc->sc_rp, 0, sizeof(struct ath_rp) *
|
||||||
|
ATH_RADAR_PULSE_NR);
|
||||||
|
|
||||||
if (sc->sc_rp == NULL)
|
if (sc->sc_rp == NULL)
|
||||||
return;
|
return;
|
||||||
|
@ -49,6 +49,9 @@
|
|||||||
#include "net80211/ieee80211.h" /* XXX for WME_NUM_AC */
|
#include "net80211/ieee80211.h" /* XXX for WME_NUM_AC */
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)
|
||||||
|
# include <asm/bitops.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Deduce if tasklets are available. If not then
|
* Deduce if tasklets are available. If not then
|
||||||
@ -123,11 +126,6 @@ typedef void irqreturn_t;
|
|||||||
#define ATH_GET_NETDEV_DEV(ndev) ((ndev)->class_dev.dev)
|
#define ATH_GET_NETDEV_DEV(ndev) ((ndev)->class_dev.dev)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef NETDEV_TX_OK
|
|
||||||
#define NETDEV_TX_OK 0
|
|
||||||
#define NETDEV_TX_BUSY 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,23)
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,23)
|
||||||
static inline struct net_device *_alloc_netdev(int sizeof_priv, const char *mask,
|
static inline struct net_device *_alloc_netdev(int sizeof_priv, const char *mask,
|
||||||
void (*setup)(struct net_device *))
|
void (*setup)(struct net_device *))
|
||||||
@ -520,8 +518,12 @@ struct ath_vap {
|
|||||||
struct ieee80211_beacon_offsets av_boff;/* dynamic update state */
|
struct ieee80211_beacon_offsets av_boff;/* dynamic update state */
|
||||||
int av_bslot; /* beacon slot index */
|
int av_bslot; /* beacon slot index */
|
||||||
struct ath_txq av_mcastq; /* multicast transmit queue */
|
struct ath_txq av_mcastq; /* multicast transmit queue */
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)
|
||||||
atomic_t av_beacon_alloc; /* set to 1 when the next beacon needs
|
atomic_t av_beacon_alloc; /* set to 1 when the next beacon needs
|
||||||
to be recomputed */
|
to be recomputed */
|
||||||
|
#else
|
||||||
|
unsigned int av_beacon_alloc;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
#define ATH_VAP(_v) ((struct ath_vap *)(_v))
|
#define ATH_VAP(_v) ((struct ath_vap *)(_v))
|
||||||
|
|
||||||
|
@ -42,7 +42,9 @@
|
|||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/time.h>
|
#include <linux/time.h>
|
||||||
|
#include <linux/netdevice.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(__KERNEL__) || !defined (__bitwise)
|
#if !defined(__KERNEL__) || !defined (__bitwise)
|
||||||
#define __le16 u_int16_t
|
#define __le16 u_int16_t
|
||||||
#define __le32 u_int32_t
|
#define __le32 u_int32_t
|
||||||
@ -54,11 +56,23 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef container_of
|
#ifndef container_of
|
||||||
#define container_of(ptr, type, member) ({ \
|
#define container_of(ptr, type, member) ({ \
|
||||||
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
|
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
|
||||||
(type *)( (char *)__mptr - offsetof(type,member) );})
|
(type *)( (char *)__mptr - offsetof(type,member) );})
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef list_for_each_entry_reverse
|
||||||
|
#define list_for_each_entry_reverse(pos, head, member) \
|
||||||
|
for (pos = list_entry((head)->prev, typeof(*pos), member); \
|
||||||
|
prefetch(pos->member.prev), &pos->member != (head); \
|
||||||
|
pos = list_entry(pos->member.prev, typeof(*pos), member))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NETDEV_TX_OK
|
||||||
|
#define NETDEV_TX_OK 0
|
||||||
|
#define NETDEV_TX_BUSY 1
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* BSD/Linux compatibility shims. These are used mainly to
|
* BSD/Linux compatibility shims. These are used mainly to
|
||||||
* minimize differences when importing necesary BSD code.
|
* minimize differences when importing necesary BSD code.
|
||||||
|
@ -52,11 +52,6 @@
|
|||||||
#include <net80211/ieee80211_var.h>
|
#include <net80211/ieee80211_var.h>
|
||||||
#include <net80211/ieee80211_proto.h>
|
#include <net80211/ieee80211_proto.h>
|
||||||
|
|
||||||
#ifndef NETDEV_TX_OK
|
|
||||||
#define NETDEV_TX_OK 0
|
|
||||||
#define NETDEV_TX_BUSY 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void ieee80211_set_tim(struct ieee80211_node *ni, int set);
|
static void ieee80211_set_tim(struct ieee80211_node *ni, int set);
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -46,7 +46,12 @@
|
|||||||
#include <linux/netdevice.h>
|
#include <linux/netdevice.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
|
||||||
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,11)
|
||||||
|
#include "sort.c"
|
||||||
|
#else
|
||||||
#include <linux/sort.h>
|
#include <linux/sort.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "if_media.h"
|
#include "if_media.h"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user