123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- /*
- * Wi-Fi Multimedia Admission Control (WMM-AC)
- * Copyright(c) 2014, Intel Mobile Communication GmbH.
- * Copyright(c) 2014, Intel Corporation. All rights reserved.
- *
- * This software may be distributed under the terms of the BSD license.
- * See README for more details.
- */
- #ifndef WMM_AC_H
- #define WMM_AC_H
- #include "common/ieee802_11_defs.h"
- #include "drivers/driver.h"
- struct wpa_supplicant;
- #define WMM_AC_ACCESS_POLICY_EDCA 1
- #define WMM_AC_FIXED_MSDU_SIZE BIT(15)
- #define WMM_AC_MAX_TID 7
- #define WMM_AC_MAX_USER_PRIORITY 7
- #define WMM_AC_MIN_SBA_UNITY 0x2000
- #define WMM_AC_MAX_NOMINAL_MSDU 32767
- /**
- * struct wmm_ac_assoc_data - WMM Admission Control Association Data
- *
- * This struct will store any relevant WMM association data needed by WMM AC.
- * In case there is a valid WMM association, an instance of this struct will be
- * created. In case there is no instance of this struct, the station is not
- * associated to a valid WMM BSS and hence, WMM AC will not be used.
- */
- struct wmm_ac_assoc_data {
- struct {
- /*
- * acm - Admission Control Mandatory
- * In case an access category is ACM, the traffic will have
- * to be admitted by WMM-AC's admission mechanism before use.
- */
- unsigned int acm:1;
- /*
- * uapsd_queues - Unscheduled Automatic Power Save Delivery
- * queues.
- * Indicates whether ACs are configured for U-APSD (or legacy
- * PS). Storing this value is necessary in order to set the
- * Power Save Bit (PSB) in ADDTS request Action frames (if not
- * given).
- */
- unsigned int uapsd:1;
- } ac_params[WMM_AC_NUM];
- };
- /**
- * wmm_ac_dir - WMM Admission Control Direction
- */
- enum wmm_ac_dir {
- WMM_AC_DIR_UPLINK = 0,
- WMM_AC_DIR_DOWNLINK = 1,
- WMM_AC_DIR_BIDIRECTIONAL = 3
- };
- /**
- * ts_dir_idx - indices of internally saved tspecs
- *
- * we can have multiple tspecs (downlink + uplink) per ac.
- * save them in array, and use the enum to directly access
- * the respective tspec slot (according to the direction).
- */
- enum ts_dir_idx {
- TS_DIR_IDX_UPLINK,
- TS_DIR_IDX_DOWNLINK,
- TS_DIR_IDX_BIDI,
- TS_DIR_IDX_COUNT
- };
- #define TS_DIR_IDX_ALL (BIT(TS_DIR_IDX_COUNT) - 1)
- /**
- * struct wmm_ac_addts_request - ADDTS Request Information
- *
- * The last sent ADDTS request(s) will be saved as element(s) of this struct in
- * order to be compared with the received ADDTS response in ADDTS response
- * action frame handling and should be stored until that point.
- * In case a new traffic stream will be created/replaced/updated, only its
- * relevant traffic stream information will be stored as a wmm_ac_ts struct.
- */
- struct wmm_ac_addts_request {
- /*
- * dialog token - Used to link the received ADDTS response with this
- * saved ADDTS request when ADDTS response is being handled
- */
- u8 dialog_token;
- /*
- * address - The alleged traffic stream's receiver/transmitter address
- * Address and TID are used to identify the TS (TID is contained in
- * TSPEC)
- */
- u8 address[ETH_ALEN];
- /*
- * tspec - Traffic Stream Specification, will be used to compare the
- * sent TSPEC in ADDTS request to the received TSPEC in ADDTS response
- * and act accordingly in ADDTS response handling
- */
- struct wmm_tspec_element tspec;
- };
- /**
- * struct wmm_ac_ts_setup_params - TS setup parameters
- *
- * This struct holds parameters which should be provided
- * to wmm_ac_ts_setup in order to setup a traffic stream
- */
- struct wmm_ac_ts_setup_params {
- /*
- * tsid - Traffic ID
- * TID and address are used to identify the TS
- */
- int tsid;
- /*
- * direction - Traffic Stream's direction
- */
- enum wmm_ac_dir direction;
- /*
- * user_priority - Traffic Stream's user priority
- */
- int user_priority;
- /*
- * nominal_msdu_size - Nominal MAC service data unit size
- */
- int nominal_msdu_size;
- /*
- * fixed_nominal_msdu - Whether the size is fixed
- * 0 = Nominal MSDU size is not fixed
- * 1 = Nominal MSDU size is fixed
- */
- int fixed_nominal_msdu;
- /*
- * surplus_bandwidth_allowance - Specifies excess time allocation
- */
- int mean_data_rate;
- /*
- * minimum_phy_rate - Specifies the minimum supported PHY rate in bps
- */
- int minimum_phy_rate;
- /*
- * surplus_bandwidth_allowance - Specifies excess time allocation
- */
- int surplus_bandwidth_allowance;
- };
- void wmm_ac_notify_assoc(struct wpa_supplicant *wpa_s, const u8 *ies,
- size_t ies_len, const struct wmm_params *wmm_params);
- void wmm_ac_notify_disassoc(struct wpa_supplicant *wpa_s);
- int wpas_wmm_ac_addts(struct wpa_supplicant *wpa_s,
- struct wmm_ac_ts_setup_params *params);
- int wpas_wmm_ac_delts(struct wpa_supplicant *wpa_s, u8 tsid);
- void wmm_ac_rx_action(struct wpa_supplicant *wpa_s, const u8 *da,
- const u8 *sa, const u8 *data, size_t len);
- int wpas_wmm_ac_status(struct wpa_supplicant *wpa_s, char *buf, size_t buflen);
- void wmm_ac_save_tspecs(struct wpa_supplicant *wpa_s);
- void wmm_ac_clear_saved_tspecs(struct wpa_supplicant *wpa_s);
- int wmm_ac_restore_tspecs(struct wpa_supplicant *wpa_s);
- #endif /* WMM_AC_H */
|