Use bit mask/shift and helper functions instead of C bit fields
This commit is contained in:
parent
3ae0800c5f
commit
979be3fecf
2 changed files with 35 additions and 31 deletions
|
@ -30,6 +30,24 @@
|
||||||
static u8 wmm_oui[3] = { 0x00, 0x50, 0xf2 };
|
static u8 wmm_oui[3] = { 0x00, 0x50, 0xf2 };
|
||||||
|
|
||||||
|
|
||||||
|
static inline u8 wmm_aci_aifsn(int aifsn, int acm, int aci)
|
||||||
|
{
|
||||||
|
u8 ret;
|
||||||
|
ret = (aifsn << WMM_AC_AIFNS_SHIFT) & WMM_AC_AIFSN_MASK;
|
||||||
|
if (acm)
|
||||||
|
ret |= WMM_AC_ACM;
|
||||||
|
ret |= (aci << WMM_AC_ACI_SHIFT) & WMM_AC_ACI_MASK;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static inline u8 wmm_ecw(int ecwmin, int ecwmax)
|
||||||
|
{
|
||||||
|
return ((ecwmin << WMM_AC_ECWMIN_SHIFT) & WMM_AC_ECWMIN_MASK) |
|
||||||
|
((ecwmax << WMM_AC_ECWMAX_SHIFT) & WMM_AC_ECWMAX_MASK);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add WMM Parameter Element to Beacon, Probe Response, and (Re)Association
|
* Add WMM Parameter Element to Beacon, Probe Response, and (Re)Association
|
||||||
* Response frames.
|
* Response frames.
|
||||||
|
@ -58,12 +76,10 @@ u8 * hostapd_eid_wmm(struct hostapd_data *hapd, u8 *eid)
|
||||||
struct hostapd_wmm_ac_params *acp =
|
struct hostapd_wmm_ac_params *acp =
|
||||||
&hapd->iconf->wmm_ac_params[e];
|
&hapd->iconf->wmm_ac_params[e];
|
||||||
|
|
||||||
ac->aifsn = acp->aifs;
|
ac->aci_aifsn = wmm_aci_aifsn(acp->aifs,
|
||||||
ac->acm = acp->admission_control_mandatory;
|
acp->admission_control_mandatory,
|
||||||
ac->aci = e;
|
e);
|
||||||
ac->reserved = 0;
|
ac->cw = wmm_ecw(acp->cwmin, acp->cwmax);
|
||||||
ac->e_cw_min = acp->cwmin;
|
|
||||||
ac->e_cw_max = acp->cwmax;
|
|
||||||
ac->txop_limit = host_to_le16(acp->txop_limit);
|
ac->txop_limit = host_to_le16(acp->txop_limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,32 +42,20 @@ struct wmm_information_element {
|
||||||
|
|
||||||
} __attribute__ ((packed));
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
#define WMM_AC_AIFSN_MASK 0x0f
|
||||||
|
#define WMM_AC_AIFNS_SHIFT 0
|
||||||
|
#define WMM_AC_ACM 0x10
|
||||||
|
#define WMM_AC_ACI_MASK 0x60
|
||||||
|
#define WMM_AC_ACI_SHIFT 5
|
||||||
|
|
||||||
|
#define WMM_AC_ECWMIN_MASK 0x0f
|
||||||
|
#define WMM_AC_ECWMIN_SHIFT 0
|
||||||
|
#define WMM_AC_ECWMAX_MASK 0xf0
|
||||||
|
#define WMM_AC_ECWMAX_SHIFT 4
|
||||||
|
|
||||||
struct wmm_ac_parameter {
|
struct wmm_ac_parameter {
|
||||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
u8 aci_aifsn; /* AIFSN, ACM, ACI */
|
||||||
/* byte 1: ACI/AIFSN */
|
u8 cw; /* ECWmin, ECWmax (CW = 2^ECW - 1) */
|
||||||
u8 aifsn:4,
|
|
||||||
acm:1,
|
|
||||||
aci:2,
|
|
||||||
reserved:1;
|
|
||||||
|
|
||||||
/* byte 2: ECWmin/ECWmax (CW = 2^ECW - 1) */
|
|
||||||
u8 e_cw_min:4,
|
|
||||||
e_cw_max:4;
|
|
||||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
|
||||||
/* byte 1: ACI/AIFSN */
|
|
||||||
u8 reserved:1,
|
|
||||||
aci:2,
|
|
||||||
acm:1,
|
|
||||||
aifsn:4;
|
|
||||||
|
|
||||||
/* byte 2: ECWmin/ECWmax */
|
|
||||||
u8 e_cw_max:4,
|
|
||||||
e_cw_min:4;
|
|
||||||
#else
|
|
||||||
#error "Please fix <endian.h>"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* bytes 3 & 4 */
|
|
||||||
le16 txop_limit;
|
le16 txop_limit;
|
||||||
} __attribute__ ((packed));
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue