> +static inline u16 get_beacon_period(u8 *data)
> +{
> +     u16 bcn_per;
> +
> +     bcn_per  = data[0];
> +     bcn_per |= (data[1] << 8);
> +
> +     return bcn_per;
> +}

Remove and use get_unaligned_le16().

> +static inline u32 get_beacon_timestamp_lo(u8 *data)
> +{
> +     u32 time_stamp = 0;
> +     u32 index    = MAC_HDR_LEN;
> +
> +     time_stamp |= data[index++];
> +     time_stamp |= (data[index++] << 8);
> +     time_stamp |= (data[index++] << 16);
> +     time_stamp |= (data[index]   << 24);
> +
> +     return time_stamp;
> +}

get_unaligned_le32()

> +static inline u32 get_beacon_timestamp_hi(u8 *data)
> +{
> +     u32 time_stamp = 0;
> +     u32 index    = (MAC_HDR_LEN + 4);
> +
> +     time_stamp |= data[index++];
> +     time_stamp |= (data[index++] << 8);
> +     time_stamp |= (data[index++] << 16);
> +     time_stamp |= (data[index]   << 24);
> +
> +     return time_stamp;
> +}

get_unaligned_le32()

> +static inline enum sub_frame_type get_sub_type(u8 *header)
> +{
> +     return ((enum sub_frame_type)(header[0] & 0xFC));
> +}

remove, use include/linux/ieee80211.h.

> +static inline u8 get_to_ds(u8 *header)
> +{
> +     return (header[1] & 0x01);
> +}
> +
> +static inline u8 get_from_ds(u8 *header)
> +{
> +     return ((header[1] & 0x02) >> 1);
> +}

dito

> +static inline void get_address1(u8 *msa, u8 *addr)
> +{
> +     memcpy(addr, msa + 4, 6);
> +}
> +
> +static inline void get_address2(u8 *msa, u8 *addr)
> +{
> +     memcpy(addr, msa + 10, 6);
> +}
> +
> +static inline void get_address3(u8 *msa, u8 *addr)

you probably shouldn't memcpy() here, that's expensive.

> +static inline void get_bssid(u8 *data, u8 *bssid)
> +{
> +     if (get_from_ds(data) == 1)
> +             get_address2(data, bssid);
> +     else if (get_to_ds(data) == 1)
> +             get_address1(data, bssid);
> +     else
> +             get_address3(data, bssid);
> +}

I just noticed we don't have this in ieee80211.h, but perhaps we should.

I think you should just return a pointer though, there's no point in
memcpy().

> +static inline void get_ssid(u8 *data, u8 *ssid, u8 *p_ssid_len)
> +{
> +     u8 i, j, len;
> +
> +     len = data[TAG_PARAM_OFFSET + 1];
> +     j   = TAG_PARAM_OFFSET + 2;
> +
> +     if (len >= MAX_SSID_LEN)
> +             len = 0;
> +
> +     for (i = 0; i < len; i++, j++)
> +             ssid[i] = data[j];
> +
> +     ssid[len] = '\0';

SSIDs are *NOT* strings, don't pretend they are.

> +     *p_ssid_len = len;
> +}

Uh, no, we have helper functions for finding elements.

Again, return something, don't just fill out parameters.

> +static inline u16 get_cap_info(u8 *data)
> +{
> +     u16 cap_info = 0;
> +     u16 index    = MAC_HDR_LEN;
> +     enum sub_frame_type st;
> +
> +     st = get_sub_type(data);
> +
> +     if (st == BEACON || st == PROBE_RSP)
> +             index += TIME_STAMP_LEN + BEACON_INTERVAL_LEN;
> +
> +     cap_info  = data[index];
> +     cap_info |= (data[index + 1] << 8);
> +
> +     return cap_info;
> +}

Umm, no, ieee80211.h.

> +static inline u16 get_asoc_status(u8 *data)
> +{
> +     u16 asoc_status;
> +
> +     asoc_status = data[3];
> +     return (asoc_status << 8) | data[2];
> +}

I'll just stop here - you need to replace almost all of this file with
ieee80211.h stuff instead.

johannes

Reply via email to