WMM AC: Add add_tx_ts and del_tx_ts driver ops

Add add_tx_ts() and del_tx_ts() ops to notify the driver about
TSPEC add / delete.

Additionally, add wmm_ac_supported flag to indicate
whether the driver supports WMM AC.

Signed-off-by: Moshe Benji <moshe.benji@intel.com>
Signed-off-by: Eliad Peller <eliad@wizery.com>
This commit is contained in:
Moshe Benji 2014-10-22 08:03:55 -04:00 committed by Jouni Malinen
parent a0413b1734
commit 471cd6e10c
4 changed files with 44 additions and 0 deletions

View file

@ -1072,6 +1072,8 @@ struct wpa_driver_capa {
#define WPA_DRIVER_SMPS_MODE_DYNAMIC 0x00000002 #define WPA_DRIVER_SMPS_MODE_DYNAMIC 0x00000002
unsigned int smps_modes; unsigned int smps_modes;
unsigned int wmm_ac_supported:1;
int max_scan_ssids; int max_scan_ssids;
int max_sched_scan_ssids; int max_sched_scan_ssids;
int sched_scan_supported; int sched_scan_supported;
@ -2868,6 +2870,28 @@ struct wpa_driver_ops {
*/ */
int (*switch_channel)(void *priv, struct csa_settings *settings); int (*switch_channel)(void *priv, struct csa_settings *settings);
/**
* add_tx_ts - Add traffic stream
* @priv: Private driver interface data
* @tsid: Traffic stream ID
* @addr: Receiver address
* @user_prio: User priority of the traffic stream
* @admitted_time: Admitted time for this TS in units of
* 32 microsecond periods (per second).
* Returns: 0 on success, -1 on failure
*/
int (*add_tx_ts)(void *priv, u8 tsid, const u8 *addr, u8 user_prio,
u16 admitted_time);
/**
* del_tx_ts - Delete traffic stream
* @priv: Private driver interface data
* @tsid: Traffic stream ID
* @addr: Receiver address
* Returns: 0 on success, -1 on failure
*/
int (*del_tx_ts)(void *priv, u8 tsid, const u8 *addr);
/** /**
* start_dfs_cac - Listen for radar interference on the channel * start_dfs_cac - Listen for radar interference on the channel
* @priv: Private driver interface data * @priv: Private driver interface data

View file

@ -609,6 +609,24 @@ static inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s,
return wpa_s->driver->switch_channel(wpa_s->drv_priv, settings); return wpa_s->driver->switch_channel(wpa_s->drv_priv, settings);
} }
static inline int wpa_drv_add_ts(struct wpa_supplicant *wpa_s, u8 tsid,
const u8 *address, u8 user_priority,
u16 admitted_time)
{
if (!wpa_s->driver->add_tx_ts)
return -1;
return wpa_s->driver->add_tx_ts(wpa_s->drv_priv, tsid, address,
user_priority, admitted_time);
}
static inline int wpa_drv_del_ts(struct wpa_supplicant *wpa_s, u8 tid,
const u8 *address)
{
if (!wpa_s->driver->del_tx_ts)
return -1;
return wpa_s->driver->del_tx_ts(wpa_s->drv_priv, tid, address);
}
static inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s, static inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s,
enum wnm_oper oper, const u8 *peer, enum wnm_oper oper, const u8 *peer,
u8 *buf, u16 *buf_len) u8 *buf, u16 *buf_len)

View file

@ -3813,6 +3813,7 @@ static int wpa_supplicant_init_iface(struct wpa_supplicant *wpa_s,
wpa_s->extended_capa_len = capa.extended_capa_len; wpa_s->extended_capa_len = capa.extended_capa_len;
wpa_s->num_multichan_concurrent = wpa_s->num_multichan_concurrent =
capa.num_multichan_concurrent; capa.num_multichan_concurrent;
wpa_s->wmm_ac_supported = capa.wmm_ac_supported;
} }
if (wpa_s->max_remain_on_chan == 0) if (wpa_s->max_remain_on_chan == 0)
wpa_s->max_remain_on_chan = 1000; wpa_s->max_remain_on_chan = 1000;

View file

@ -861,6 +861,7 @@ struct wpa_supplicant {
unsigned int no_keep_alive:1; unsigned int no_keep_alive:1;
unsigned int ext_mgmt_frame_handling:1; unsigned int ext_mgmt_frame_handling:1;
unsigned int ext_eapol_frame_io:1; unsigned int ext_eapol_frame_io:1;
unsigned int wmm_ac_supported:1;
#ifdef CONFIG_WNM #ifdef CONFIG_WNM
u8 wnm_dialog_token; u8 wnm_dialog_token;