From 471cd6e10ca4ba784a1f9d058ce78dfc0f97e218 Mon Sep 17 00:00:00 2001 From: Moshe Benji Date: Wed, 22 Oct 2014 08:03:55 -0400 Subject: [PATCH] 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 Signed-off-by: Eliad Peller --- src/drivers/driver.h | 24 ++++++++++++++++++++++++ wpa_supplicant/driver_i.h | 18 ++++++++++++++++++ wpa_supplicant/wpa_supplicant.c | 1 + wpa_supplicant/wpa_supplicant_i.h | 1 + 4 files changed, 44 insertions(+) diff --git a/src/drivers/driver.h b/src/drivers/driver.h index 9804a7a9c..68fe31f45 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -1072,6 +1072,8 @@ struct wpa_driver_capa { #define WPA_DRIVER_SMPS_MODE_DYNAMIC 0x00000002 unsigned int smps_modes; + unsigned int wmm_ac_supported:1; + int max_scan_ssids; int max_sched_scan_ssids; int sched_scan_supported; @@ -2868,6 +2870,28 @@ struct wpa_driver_ops { */ 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 * @priv: Private driver interface data diff --git a/wpa_supplicant/driver_i.h b/wpa_supplicant/driver_i.h index 18a545764..4a6d38cc4 100644 --- a/wpa_supplicant/driver_i.h +++ b/wpa_supplicant/driver_i.h @@ -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); } +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, enum wnm_oper oper, const u8 *peer, u8 *buf, u16 *buf_len) diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c index 695004856..8261c66b3 100644 --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c @@ -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->num_multichan_concurrent = capa.num_multichan_concurrent; + wpa_s->wmm_ac_supported = capa.wmm_ac_supported; } if (wpa_s->max_remain_on_chan == 0) wpa_s->max_remain_on_chan = 1000; diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h index 334bf717f..32401f910 100644 --- a/wpa_supplicant/wpa_supplicant_i.h +++ b/wpa_supplicant/wpa_supplicant_i.h @@ -861,6 +861,7 @@ struct wpa_supplicant { unsigned int no_keep_alive:1; unsigned int ext_mgmt_frame_handling:1; unsigned int ext_eapol_frame_io:1; + unsigned int wmm_ac_supported:1; #ifdef CONFIG_WNM u8 wnm_dialog_token;