WMM AC: Add add_tx_ts and del_tx_ts driver ops
authorMoshe Benji <Moshe.Benji@intel.com>
Wed, 22 Oct 2014 12:03:55 +0000 (08:03 -0400)
committerJouni Malinen <j@w1.fi>
Sun, 16 Nov 2014 18:47:36 +0000 (20:47 +0200)
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>
src/drivers/driver.h
wpa_supplicant/driver_i.h
wpa_supplicant/wpa_supplicant.c
wpa_supplicant/wpa_supplicant_i.h

index 9804a7a..68fe31f 100644 (file)
@@ -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;
@@ -2869,6 +2871,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
         * @freq: Channel parameters
index 18a5457..4a6d38c 100644 (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);
 }
 
+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)
index 6950048..8261c66 100644 (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->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;
index 334bf71..32401f9 100644 (file)
@@ -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;