| /* |
| * Copyright (c) 2014, 2016 The Linux Foundation. All rights reserved. |
| * |
| * Previously licensed under the ISC license by Qualcomm Atheros, Inc. |
| * |
| * |
| * Permission to use, copy, modify, and/or distribute this software for |
| * any purpose with or without fee is hereby granted, provided that the |
| * above copyright notice and this permission notice appear in all |
| * copies. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL |
| * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED |
| * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE |
| * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL |
| * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR |
| * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER |
| * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
| * PERFORMANCE OF THIS SOFTWARE. |
| */ |
| |
| /* |
| * This file was originally distributed by Qualcomm Atheros, Inc. |
| * under proprietary terms before Copyright ownership was assigned |
| * to the Linux Foundation. |
| */ |
| |
| |
| #if !defined( __SME_QOSAPI_H ) |
| #define __SME_QOSAPI_H |
| |
| |
| /**========================================================================= |
| |
| \file sme_QosApi.h |
| |
| \brief prototype for SME QoS APIs |
| |
| ========================================================================*/ |
| |
| /* $Header$ */ |
| |
| /*-------------------------------------------------------------------------- |
| Include Files |
| ------------------------------------------------------------------------*/ |
| #include "vos_lock.h" |
| #include "vos_trace.h" |
| #include "vos_memory.h" |
| #include "vos_types.h" |
| #include "aniGlobal.h" |
| #include "sirApi.h" |
| |
| /*-------------------------------------------------------------------------- |
| Pre-processor Definitions |
| ------------------------------------------------------------------------*/ |
| #define SME_QOS_UAPSD_VO 0x01 |
| #define SME_QOS_UAPSD_VI 0x02 |
| #define SME_QOS_UAPSD_BE 0x08 |
| #define SME_QOS_UAPSD_BK 0x04 |
| |
| /*-------------------------------------------------------------------------- |
| Type declarations |
| ------------------------------------------------------------------------*/ |
| |
| /*--------------------------------------------------------------------------- |
| Enumeration of the various QoS status types that would be reported to HDD |
| ---------------------------------------------------------------------------*/ |
| typedef enum |
| { |
| //async: once PE notifies successful TSPEC negotiation, or CSR notifies for |
| //successful reassoc, notifies HDD with current QoS Params |
| SME_QOS_STATUS_SETUP_SUCCESS_IND = 0, |
| //sync: only when App asked for APSD & it's already set with ACM = 0 |
| SME_QOS_STATUS_SETUP_SUCCESS_APSD_SET_ALREADY, |
| //both: sync or async: in case of async notifies HDD with current QoS Params |
| SME_QOS_STATUS_SETUP_FAILURE_RSP, |
| //sync |
| SME_QOS_STATUS_SETUP_INVALID_PARAMS_RSP, |
| //sync: AP doesn't support QoS (WMM) |
| SME_QOS_STATUS_SETUP_NOT_QOS_AP_RSP, |
| //sync: either req has been sent down to PE or just buffered in SME |
| SME_QOS_STATUS_SETUP_REQ_PENDING_RSP, |
| //async: in case of flow aggregation, if the new TSPEC negotiation is |
| //successful, OR, |
| //notify existing flows that TSPEC is modified with current QoS Params |
| SME_QOS_STATUS_SETUP_MODIFIED_IND, |
| //sync: no APSD asked for & ACM = 0 |
| SME_QOS_STATUS_SETUP_SUCCESS_NO_ACM_NO_APSD_RSP, |
| //async: In case of UAPSD, once PE notifies successful TSPEC negotiation, or |
| //CSR notifies for successful reassoc to SME-QoS, notify HDD if PMC can't |
| //put the module in UAPSD mode right away (eHAL_STATUS_PMC_PENDING) |
| SME_QOS_STATUS_SETUP_SUCCESS_IND_APSD_PENDING, |
| //async: In case of UAPSD, once PE notifies successful TSPEC negotiation, or |
| //CSR notifies for successful reassoc to SME-QoS, notify HDD if PMC can't |
| //put the module in UAPSD mode at all (eHAL_STATUS_FAILURE) |
| SME_QOS_STATUS_SETUP_SUCCESS_IND_APSD_SET_FAILED, |
| |
| //sync: req has been sent down to PE in case of delts or addts for remain |
| // flows, OR if the AC doesn't have APSD or ACM |
| //async: once the downgrade req for QoS params is successful |
| SME_QOS_STATUS_RELEASE_SUCCESS_RSP = 100, |
| //both: sync or async: in case of async notifies HDD with current QoS Params |
| SME_QOS_STATUS_RELEASE_FAILURE_RSP, |
| //async: AP sent DELTS indication |
| SME_QOS_STATUS_RELEASE_QOS_LOST_IND, |
| //sync: an addts req has been sent down to PE to downgrade the QoS params or |
| // just buffered in SME |
| SME_QOS_STATUS_RELEASE_REQ_PENDING_RSP, |
| //sync |
| SME_QOS_STATUS_RELEASE_INVALID_PARAMS_RSP, |
| |
| //async: for QoS modify request if modification is successful, notifies HDD |
| // with current QoS Params |
| SME_QOS_STATUS_MODIFY_SETUP_SUCCESS_IND = 200, |
| //sync: only when App asked for APSD & it's already set with ACM = 0 |
| SME_QOS_STATUS_MODIFY_SETUP_SUCCESS_APSD_SET_ALREADY, |
| //both: sync or async: in case of async notifies HDD with current QoS Params |
| SME_QOS_STATUS_MODIFY_SETUP_FAILURE_RSP, |
| //sync: either req has been sent down to PE or just buffered in SME |
| SME_QOS_STATUS_MODIFY_SETUP_PENDING_RSP, |
| //sync: no APSD asked for & ACM = 0 |
| SME_QOS_STATUS_MODIFY_SETUP_SUCCESS_NO_ACM_NO_APSD_RSP, |
| //sync |
| SME_QOS_STATUS_MODIFY_SETUP_INVALID_PARAMS_RSP, |
| //async: In case of UAPSD, once PE notifies successful TSPEC negotiation, or |
| //CSR notifies for successful reassoc to SME-QoS, notify HDD if PMC can't |
| //put the module in UAPSD mode right away (eHAL_STATUS_PMC_PENDING) |
| SME_QOS_STATUS_MODIFY_SETUP_SUCCESS_IND_APSD_PENDING, |
| //async: In case of UAPSD, once PE notifies successful TSPEC negotiation, or |
| //CSR notifies for successful reassoc to SME-QoS, notify HDD if PMC can't |
| //put the module in UAPSD mode at all (eHAL_STATUS_FAILURE) |
| SME_QOS_STATUS_MODIFY_SETUP_SUCCESS_IND_APSD_SET_FAILED, |
| //sync: STA is handing off to a new AP |
| SME_QOS_STATUS_HANDING_OFF = 300, |
| /* async:power save mode changed by PMC from UAPSD to Full power */ |
| SME_QOS_STATUS_OUT_OF_APSD_POWER_MODE_IND = 400, |
| /* async:power save mode changed by PMC from Full power to UAPSD */ |
| SME_QOS_STATUS_INTO_APSD_POWER_MODE_IND, |
| |
| }sme_QosStatusType; |
| |
| /*--------------------------------------------------------------------------- |
| Enumeration of the various User priority (UP) types |
| |
| From 802.1D/802.11e/WMM specifications (all refer to same table) |
| ---------------------------------------------------------------------------*/ |
| typedef enum |
| { |
| SME_QOS_WMM_UP_BE = 0, |
| SME_QOS_WMM_UP_BK = 1, |
| SME_QOS_WMM_UP_RESV = 2, /* Reserved */ |
| SME_QOS_WMM_UP_EE = 3, |
| SME_QOS_WMM_UP_CL = 4, |
| SME_QOS_WMM_UP_VI = 5, |
| SME_QOS_WMM_UP_VO = 6, |
| SME_QOS_WMM_UP_NC = 7, |
| |
| SME_QOS_WMM_UP_MAX |
| |
| }sme_QosWmmUpType; |
| |
| /*--------------------------------------------------------------------------- |
| Enumeration of the various TSPEC directions |
| |
| From 802.11e/WMM specifications |
| ---------------------------------------------------------------------------*/ |
| |
| typedef enum |
| { |
| SME_QOS_WMM_TS_DIR_UPLINK = 0, |
| SME_QOS_WMM_TS_DIR_DOWNLINK = 1, |
| SME_QOS_WMM_TS_DIR_RESV = 2, /* Reserved */ |
| SME_QOS_WMM_TS_DIR_BOTH = 3, |
| |
| }sme_QosWmmDirType; |
| |
| /*--------------------------------------------------------------------------- |
| Enumeration of the various TSPEC ack policies. |
| |
| From 802.11 WMM specification |
| ---------------------------------------------------------------------------*/ |
| |
| typedef enum |
| { |
| SME_QOS_WMM_TS_ACK_POLICY_NORMAL_ACK = 0, |
| SME_QOS_WMM_TS_ACK_POLICY_RESV1 = 1, |
| SME_QOS_WMM_TS_ACK_POLICY_RESV2 = 2, /* Reserved */ |
| SME_QOS_WMM_TS_ACK_POLICY_HT_IMMEDIATE_BLOCK_ACK = 3, |
| |
| }sme_QosWmmAckPolicyType; |
| |
| /*--------------------------------------------------------------------------- |
| TS Info field in the WMM TSPEC |
| |
| See suggestive values above |
| ---------------------------------------------------------------------------*/ |
| typedef struct |
| { |
| v_U8_t burst_size_defn; |
| sme_QosWmmAckPolicyType ack_policy; |
| sme_QosWmmUpType up; /* User priority */ |
| v_U8_t psb; /* power-save bit */ |
| sme_QosWmmDirType direction; /* Direction */ |
| v_U8_t tid; /* TID : To be filled up by SME-QoS */ |
| } sme_QosWmmTsInfoType; |
| |
| /*--------------------------------------------------------------------------- |
| The WMM TSPEC Element (from the WMM spec) |
| ---------------------------------------------------------------------------*/ |
| typedef struct |
| { |
| sme_QosWmmTsInfoType ts_info; |
| v_U16_t nominal_msdu_size; |
| v_U16_t maximum_msdu_size; |
| v_U32_t min_service_interval; |
| v_U32_t max_service_interval; |
| v_U32_t inactivity_interval; |
| v_U32_t suspension_interval; |
| v_U32_t svc_start_time; |
| v_U32_t min_data_rate; |
| v_U32_t mean_data_rate; |
| v_U32_t peak_data_rate; |
| v_U32_t max_burst_size; |
| v_U32_t delay_bound; |
| v_U32_t min_phy_rate; |
| v_U16_t surplus_bw_allowance; |
| v_U16_t medium_time; |
| } sme_QosWmmTspecInfo; |
| |
| |
| /*-------------------------------------------------------------------------- |
| External APIs |
| ------------------------------------------------------------------------*/ |
| |
| /*-------------------------------------------------------------------------- |
| \brief sme_QosCallback() - This is a callback function which is registered |
| per flow while HDD is requesting for QoS. Used for any notification for the |
| flow (i.e. setup success/failure/release) which needs to be sent to HDD. HDD |
| will notify the application in turn, if needed. |
| |
| \param hHal - The handle returned by macOpen. |
| \param HDDcontext - A cookie passed by HDD during QoS setup, to be used by SME |
| during any QoS notification (through the callback) to HDD |
| \param pCurrentQoSInfo - Pointer to sme_QosWmmTspecInfo which contains the WMM |
| TSPEC related info as defined above, fed back to HDD |
| \param status - The status of the flow running on an AC. It could be of |
| sme_QosStatusType |
| |
| \return eHAL_STATUS_SUCCESS - Callback invoke successful. |
| |
| |
| \sa |
| |
| --------------------------------------------------------------------------*/ |
| typedef eHalStatus (*sme_QosCallback)(tHalHandle hHal, void * HDDcontext, |
| sme_QosWmmTspecInfo * pCurrentQoSInfo, |
| sme_QosStatusType status, |
| v_U32_t QosFlowID); |
| |
| /*-------------------------------------------------------------------------- |
| \brief sme_QosSetupReq() - The SME QoS API exposed to HDD to request for QoS |
| on a particular AC. This function should be called after a link has been |
| established, i.e. STA is associated with an AP etc. If the request involves |
| admission control on the requested AC, HDD needs to provide the necessary |
| Traffic Specification (TSPEC) parameters otherwise SME is going to use the |
| default params. |
| |
| \param hHal - The handle returned by macOpen. |
| \param sessionId - sessionId returned by sme_OpenSession. Current QOS code doesn't |
| support multiple session. This function returns failure when different |
| sessionId is passed in before calling sme_QosReleaseReq. |
| \param pQoSInfo - Pointer to sme_QosWmmTspecInfo which contains the WMM TSPEC |
| related info as defined above, provided by HDD |
| \param QoSCallback - The callback which is registered per flow while |
| requesting for QoS. Used for any notification for the |
| flow (i.e. setup success/failure/release) which needs to |
| be sent to HDD |
| \param HDDcontext - A cookie passed by HDD to be used by SME during any QoS |
| notification (through the callback) to HDD |
| \param UPType - Useful only if HDD or any other upper layer module (BAP etc.) |
| looking for implicit QoS setup, in that |
| case, the pQoSInfo will be NULL & SME will know about the AC |
| (from the UP provided in this param) QoS is requested on |
| \param pQosFlowID - Identification per flow running on each AC generated by |
| SME. |
| It is only meaningful if the QoS setup for the flow is |
| successful |
| |
| \return SME_QOS_STATUS_SETUP_SUCCESS - Setup request processed successfully. |
| |
| Other status means Setup request failed |
| \sa |
| |
| --------------------------------------------------------------------------*/ |
| sme_QosStatusType sme_QosSetupReq(tHalHandle hHal, tANI_U32 sessionId, |
| sme_QosWmmTspecInfo * pQoSInfo, |
| sme_QosCallback QoSCallback, void * HDDcontext, |
| sme_QosWmmUpType UPType, v_U32_t * pQosFlowID); |
| |
| /*-------------------------------------------------------------------------- |
| \brief sme_QosModifyReq() - The SME QoS API exposed to HDD to request for |
| modification of certain QoS params on a flow running on a particular AC. |
| This function should be called after a link has been established, i.e. STA is |
| associated with an AP etc. & a QoS setup has been successful for that flow. |
| If the request involves admission control on the requested AC, HDD needs to |
| provide the necessary Traffic Specification (TSPEC) parameters & SME might |
| start the renegotiation process through ADDTS. |
| |
| \param hHal - The handle returned by macOpen. |
| \param pQoSInfo - Pointer to sme_QosWmmTspecInfo which contains the WMM TSPEC |
| related info as defined above, provided by HDD |
| \param QosFlowID - Identification per flow running on each AC generated by |
| SME. |
| It is only meaningful if the QoS setup for the flow has |
| been successful already |
| |
| \return SME_QOS_STATUS_SETUP_SUCCESS - Modification request processed |
| successfully. |
| |
| Other status means request failed |
| \sa |
| |
| --------------------------------------------------------------------------*/ |
| sme_QosStatusType sme_QosModifyReq(tHalHandle hHal, |
| sme_QosWmmTspecInfo * pQoSInfo, |
| v_U32_t QosFlowID); |
| |
| /*-------------------------------------------------------------------------- |
| \brief sme_QosReleaseReq() - The SME QoS API exposed to HDD to request for |
| releasing a QoS flow running on a particular AC. This function should be |
| called only if a QoS is set up with a valid FlowID. HDD should invoke this |
| API only if an explicit request for QoS release has come from Application |
| |
| \param hHal - The handle returned by macOpen. |
| \param session_id - session_id returned by sme_OpenSession. |
| \param QosFlowID - Identification per flow running on each AC generated by SME |
| It is only meaningful if the QoS setup for the flow is |
| successful |
| |
| \return SME_QOS_STATUS_RELEASE_SUCCESS - Release request processed |
| successfully. |
| |
| \sa |
| |
| --------------------------------------------------------------------------*/ |
| sme_QosStatusType sme_QosReleaseReq(tHalHandle hHal, uint8_t session_id, |
| v_U32_t QosFlowID); |
| |
| /*-------------------------------------------------------------------------- |
| \brief sme_QosIsTSInfoAckPolicyValid() - The SME QoS API exposed to HDD to |
| check if TS info ack policy field can be set to "HT-immediate block |
| acknowledgment" |
| |
| \param pMac - The handle returned by macOpen. |
| \param pQoSInfo - Pointer to sme_QosWmmTspecInfo which contains the WMM TSPEC |
| related info, provided by HDD |
| \param sessionId - sessionId returned by sme_OpenSession. |
| |
| \return VOS_TRUE - Current Association is HT association and so TS info ack policy |
| can be set to "HT-immediate block acknowledgment" |
| |
| \sa |
| |
| --------------------------------------------------------------------------*/ |
| v_BOOL_t sme_QosIsTSInfoAckPolicyValid(tpAniSirGlobal pMac, |
| sme_QosWmmTspecInfo * pQoSInfo, |
| v_U8_t sessionId); |
| |
| |
| /*-------------------------------------------------------------------------- |
| \brief sme_QosUpdateHandOff() - Function which can be called to update |
| Hand-off state of SME QoS Session |
| \param sessionId - session id |
| \param updateHandOff - value True/False to update the handoff flag |
| |
| \sa |
| |
| -------------------------------------------------------------------------*/ |
| void sme_QosUpdateHandOff(v_U8_t sessionId, |
| v_BOOL_t updateHandOff); |
| |
| |
| /*-------------------------------------------------------------------------- |
| \brief sme_UpdateDSCPtoUPMapping() - Function which can be called to update |
| qos mapping table maintained in HDD |
| \param hHal - The handle returned by macOpen. |
| \param dscpmapping - pointer to the qos mapping structure in HDD |
| \param sessionId - session id |
| |
| \sa |
| -------------------------------------------------------------------------*/ |
| VOS_STATUS sme_UpdateDSCPtoUPMapping(tHalHandle hHal, |
| sme_QosWmmUpType* dscpmapping, v_U8_t sessionId); |
| |
| #endif //#if !defined( __SME_QOSAPI_H ) |