123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715 |
- /*
- * Copyright (c) 2021, The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
- *
- * 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.
- */
- /*
- * DOC: contains MLO manager containing util public api's
- */
- #ifndef _WLAN_UTILS_MLO_H_
- #define _WLAN_UTILS_MLO_H_
- #include <wlan_cmn_ieee80211.h>
- #include "wlan_mlo_mgr_public_structs.h"
- #include <wlan_cm_ucfg_api.h>
- #include <wlan_objmgr_vdev_obj.h>
- #include <wlan_mlo_epcs.h>
- #ifdef WLAN_FEATURE_11BE_MLO
- #define MLO_LINKSPECIFIC_ASSOC_REQ_FC0 0x00
- #define MLO_LINKSPECIFIC_ASSOC_REQ_FC1 0x00
- #define MLO_LINKSPECIFIC_ASSOC_RESP_FC0 0x10
- #define MLO_LINKSPECIFIC_ASSOC_RESP_FC1 0x00
- #define MLO_LINKSPECIFIC_PROBE_RESP_FC0 0x50
- #define MLO_LINKSPECIFIC_PROBE_RESP_FC1 0x00
- /**
- * util_gen_link_assoc_req() - Generate link specific assoc request
- * @frame: Pointer to original association request. This should not contain the
- * 802.11 header, and must start from the fixed fields in the association
- * request. This is required due to some caller semantics built into the end to
- * end design.
- * @frame_len: Length of original association request
- * @isreassoc: Whether this is a re-association request
- * @link_id: Link ID for secondary links
- * @link_addr: Secondary link's MAC address
- * @link_frame: Generated secondary link specific association request. Note that
- * this will start from the 802.11 header (unlike the original association
- * request). This should be ignored in the case of failure.
- * @link_frame_maxsize: Maximum size of generated secondary link specific
- * association request
- * @link_frame_len: Pointer to location where populated length of generated
- * secondary link specific association request should be written. This should be
- * ignored in the case of failure.
- *
- * Generate a link specific logically equivalent association request for the
- * secondary link from the original association request containing a Multi-Link
- * element. This applies to both association and re-association requests.
- * Currently, only two link MLO is supported.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure.
- */
- QDF_STATUS
- util_gen_link_assoc_req(uint8_t *frame, qdf_size_t frame_len, bool isreassoc,
- uint8_t link_id,
- struct qdf_mac_addr link_addr,
- uint8_t *link_frame,
- qdf_size_t link_frame_maxsize,
- qdf_size_t *link_frame_len);
- /**
- * util_gen_link_assoc_rsp() - Generate link specific assoc response
- * @frame: Pointer to original association response. This should not contain the
- * 802.11 header, and must start from the fixed fields in the association
- * response. This is required due to some caller semantics built into the end to
- * end design.
- * @frame_len: Length of original association response
- * @isreassoc: Whether this is a re-association response
- * @link_id: Link ID for secondary links
- * @link_addr: Secondary link's MAC address
- * @link_frame: Generated secondary link specific association response. Note
- * that this will start from the 802.11 header (unlike the original association
- * response). This should be ignored in the case of failure.
- * @link_frame_maxsize: Maximum size of generated secondary link specific
- * association response
- * @link_frame_len: Pointer to location where populated length of generated
- * secondary link specific association response should be written. This should
- * be ignored in the case of failure.
- *
- * Generate a link specific logically equivalent association response for the
- * secondary link from the original association response containing a Multi-Link
- * element. This applies to both association and re-association responses.
- * Currently, only two link MLO is supported.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure.
- */
- QDF_STATUS
- util_gen_link_assoc_rsp(uint8_t *frame, qdf_size_t frame_len, bool isreassoc,
- uint8_t link_id,
- struct qdf_mac_addr link_addr,
- uint8_t *link_frame,
- qdf_size_t link_frame_maxsize,
- qdf_size_t *link_frame_len);
- /**
- * util_gen_link_probe_rsp() - Generate link specific probe response
- * @frame: Pointer to original probe response. This should not contain the
- * 802.11 header, and must start from the fixed fields in the probe
- * response. This is required due to some caller semantics built into the end to
- * end design.
- * @frame_len: Length of original probe response
- * @link_addr: Secondary link's MAC address
- * @link_id: Link ID for secondary links
- * @link_frame: Generated secondary link specific probe response. Note
- * that this will start from the 802.11 header (unlike the original probe
- * response). This should be ignored in the case of failure.
- * @link_frame_maxsize: Maximum size of generated secondary link specific
- * probe response
- * @link_frame_len: Pointer to location where populated length of generated
- * secondary link specific probe response should be written. This should
- * be ignored in the case of failure.
- *
- * Generate a link specific logically equivalent probe response for the
- * secondary link from the original probe response containing a Multi-Link
- * element. This applies to both probe responses.
- * Currently, only two link MLO is supported.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure.
- */
- QDF_STATUS
- util_gen_link_probe_rsp(uint8_t *frame, qdf_size_t frame_len,
- uint8_t link_id,
- struct qdf_mac_addr link_addr,
- uint8_t *link_frame,
- qdf_size_t link_frame_maxsize,
- qdf_size_t *link_frame_len);
- /**
- * util_find_mlie - Find the first Multi-Link element or the start of the first
- * Multi-Link element fragment sequence in a given buffer containing elements,
- * if a Multi-Link element or element fragment sequence exists in the given
- * buffer.
- *
- * @buf: Buffer to be searched for the Multi-Link element or the start of the
- * Multi-Link element fragment sequence
- * @buflen: Length of the buffer
- * @mlieseq: Pointer to location where the starting address of the Multi-Link
- * element or Multi-Link element fragment sequence should be updated if found
- * in the given buffer. The value NULL will be updated to this location if the
- * element or element fragment sequence is not found. This should be ignored by
- * the caller if the function returns error.
- * @mlieseqlen: Pointer to location where the total length of the Multi-Link
- * element or Multi-Link element fragment sequence should be updated if found
- * in the given buffer. This should be ignored by the caller if the function
- * returns error, or if the function indicates that the element or element
- * fragment sequence was not found by providing a starting address of NULL.
- *
- * Find the first Multi-Link element or the start of the first Multi-Link
- * element fragment sequence in a given buffer containing elements, if a
- * Multi-Link element or element fragment sequence exists in the given buffer.
- * The buffer should contain only 802.11 Information elements, and thus should
- * not contain other information like 802.11 header, 802.11 frame body
- * components like fields that are not elements (e.g. Capability Information
- * field, Beacon Interval field), etc.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure
- */
- QDF_STATUS
- util_find_mlie(uint8_t *buf, qdf_size_t buflen, uint8_t **mlieseq,
- qdf_size_t *mlieseqlen);
- /**
- * util_find_mlie_by_variant - Find the first Multi-Link element or the start of
- * the first Multi-Link element fragment sequence in a given buffer containing
- * elements based on variant, if a Multi-Link element or element fragment
- * sequence exists in the given buffer.
- *
- * @buf: Buffer to be searched for the Multi-Link element or the start of the
- * Multi-Link element fragment sequence
- * @buflen: Length of the buffer
- * @mlieseq: Based on the variant, pointer to location where the starting
- * address of the Multi-Link element or Multi-Link element fragment sequence
- * should be updated if found in the given buffer. The value NULL will be
- * updated to this location if the element or element fragment sequence is not
- * found. This should be ignored by the caller if the function returns error.
- * @mlieseqlen: Pointer to location where the total length of the Multi-Link
- * element or Multi-Link element fragment sequence should be updated if found
- * in the given buffer. This should be ignored by the caller if the function
- * returns error, or if the function indicates that the element or element
- * fragment sequence was not found by providing a starting address of NULL.
- * @variant: Multi-Link element variant. The value should be interpreted by the
- * caller as a member of enum wlan_ml_variant. (This enum is not directly used
- * as an argument, so that non-MLO code that happens to call this function does
- * not need to be aware of the definition of the enum, though such a call would
- * ultimately result in an error).
- *
- * Based on variant, find the Multi-Link element or the start of the Multi-Link
- * element fragment sequence in a given buffer containing elements, if a
- * Multi-Link element or element fragment sequence exists in the given buffer.
- * The buffer should contain only 802.11 Information elements, and thus should
- * not contain other information like 802.11 header, 802.11 frame body
- * components like fields that are not elements (e.g. Capability Information
- * field, Beacon Interval field), etc.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure
- */
- QDF_STATUS
- util_find_mlie_by_variant(uint8_t *buf, qdf_size_t buflen, uint8_t **mlieseq,
- qdf_size_t *mlieseqlen, int variant);
- /**
- * util_get_mlie_variant() - Get ML IE variant
- * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @variant: Pointer to the location where the value of the variant should be
- * updated. On success, the value should be interpreted by the caller as a
- * member of enum wlan_ml_variant. (This enum is not directly used as an
- * argument, so that non-MLO code that happens to call this function does not
- * need to be aware of the definition of the enum, though such a call would
- * ultimately result in an error). The value should be ignored by the caller if
- * the function returns error.
- *
- * Get the variant of the given Multi-Link element or element fragment sequence.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure
- */
- QDF_STATUS
- util_get_mlie_variant(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- int *variant);
- /**
- * util_get_bvmlie_mldmacaddr() - Get the MLD MAC address
- * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mldmacaddr: Pointer to the location where the MLD MAC address should be
- * updated. This should be ignored by the caller if the function returns error.
- *
- * Get the MLD MAC address from a given Basic variant Multi-Link element
- * or element fragment sequence.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure
- */
- QDF_STATUS
- util_get_bvmlie_mldmacaddr(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- struct qdf_mac_addr *mldmacaddr);
- /**
- * util_get_bvmlie_eml_cap() - Get the EML capabilities
- * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @eml_cap_found: Pointer to the location where a boolean status should be
- * updated indicating whether the EML cabalility was found or not. This should
- * be ignored by the caller if the function returns error.
- * @eml_cap: Pointer to the location where the EML capabilities should be
- * updated. This should be ignored by the caller if the function indicates
- * that the EML capability was not found.
- *
- * Get the EML capabilities from a given Basic variant Multi-Link element or
- * element fragment sequence.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure
- */
- QDF_STATUS
- util_get_bvmlie_eml_cap(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- bool *eml_cap_found,
- uint16_t *eml_cap);
- /**
- * util_get_bvmlie_msd_cap() - Get the MSD capabilities for Basic variant
- * MLO IE
- * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @msd_cap_found: Pointer to the location where a boolean status should be
- * updated indicating whether the MSD cabalility was found or not. This should
- * be ignored by the caller if the function returns error.
- * @msd_cap: Pointer to the location where the MSD capabilities should be
- * updated. This should be ignored by the caller if the function indicates
- * that the MSD capability was not found.
- *
- * Get the MSD capabilities from a given Basic variant Multi-Link element or
- * element fragment sequence.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure
- */
- QDF_STATUS
- util_get_bvmlie_msd_cap(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- bool *msd_cap_found, uint16_t *msd_cap);
- /**
- * util_get_bvmlie_primary_linkid() - Get the link identifier
- * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @linkidfound: Pointer to the location where a boolean status should be
- * updated indicating whether the link identifier was found or not. This should
- * be ignored by the caller if the function returns error.
- * @linkid: Pointer to the location where the value of the link identifier
- * should be updated. This should be ignored by the caller if the function
- * returns error, or if the function indicates that the link identifier was not
- * found.
- *
- * Get the link identifier from a given Basic variant Multi-Link element or
- * element fragment sequence, of the AP that transmits the Multi-Link
- * element/element fragment sequence or the nontransmitted BSSID in the same
- * multiple BSSID set as the AP that transmits the Multi-Link element/element
- * fragment sequence and that is affiliated with the MLD that is described in
- * the Multi-Link element.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure
- */
- QDF_STATUS
- util_get_bvmlie_primary_linkid(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- bool *linkidfound, uint8_t *linkid);
- /**
- * util_get_mlie_common_info_len() - Get the MLD common info len
- * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @commoninfo_len: Pointer to the location where the value of the MLD common
- * info len should be updated. This should be ignored by the caller if the
- * function returns error.
- *
- * Get the MLD common info len from Multi-Link element transmitted by the AP.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure
- */
- QDF_STATUS
- util_get_mlie_common_info_len(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- uint8_t *commoninfo_len);
- /**
- * util_get_bvmlie_bssparamchangecnt() - Get the MLD BSS PARAM Change Count
- * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @bssparamchangecntfound: Pointer to the location where a boolean status
- * should be updated indicating whether the MLD BSS PARAM Change Count was
- * found or not. This should be ignored by the caller if the function
- * returns error.
- * @bssparamchangecnt: Pointer to the location where the value of the MLD BSS
- * PARAM Change Count should be updated. This should be ignored by the caller
- * if the function returns error, or if the function indicates that the MLD
- * BSS PARAM Change Count was not found.
- *
- * Get the MLD BSS PARAM Change Count from Multi-Link element transmitted
- * by the AP.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure
- */
- QDF_STATUS
- util_get_bvmlie_bssparamchangecnt(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- bool *bssparamchangecntfound,
- uint8_t *bssparamchangecnt);
- /**
- * util_get_bvmlie_mldcap() - Get the MLD capabilities
- * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mldcapfound: Pointer to the location where a boolean status should be
- * updated indicating whether the MLD capabilities was found or not. This should
- * be ignored by the caller if the function returns error.
- * @mldcap: Pointer to the location where the value of the MLD capabilities
- * should be updated. This should be ignored by the caller if the function
- * returns error, or if the function indicates that the MLD capabilities was not
- * found.
- *
- * Get the MLD capabilities from a given Basic variant Multi-Link element or
- * element fragment sequence, of the AP that transmits the Multi-Link
- * element/element fragment sequence or the nontransmitted BSSID in the same
- * multiple BSSID set as the AP that transmits the Multi-Link element/element
- * fragment sequence and that is affiliated with the MLD that is described in
- * the Multi-Link element.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure
- */
- QDF_STATUS
- util_get_bvmlie_mldcap(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- bool *mldcapfound, uint16_t *mldcap);
- /**
- * util_get_bvmlie_ext_mld_cap_op_info() - Get Ext MLD Capabilities and
- * operation
- * @mlie_seq: Starting address of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mlie_seqlen: Total length of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @ext_mld_cap_found: Pointer to the location where a boolean status should be
- * updated indicating whether the Ext MLD capabilities was found or not.
- * This should be ignored by the caller if the function returns error.
- * @ext_mld_cap: Pointer to the location where the value of the Ext MLD
- * capabilities should be updated. This should be ignored by the caller if the
- * function returns error, or if the function indicates that the MLD
- * capabilities was not found.
- *
- * Get the Ext MLD capabilities from a given Basic variant Multi-Link element or
- * element fragment sequence, of the AP that transmits the Multi-Link element/
- * element fragment sequence or the non-transmitted BSSID in the same
- * multiple BSSID set as the AP that transmits the Multi-Link element/element
- * fragment sequence and that is affiliated with the MLD that is described in
- * the Multi-Link element.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure
- */
- QDF_STATUS
- util_get_bvmlie_ext_mld_cap_op_info(uint8_t *mlie_seq, qdf_size_t mlie_seqlen,
- bool *ext_mld_cap_found,
- uint16_t *ext_mld_cap);
- /**
- * util_get_bvmlie_persta_partner_info() - Get per-STA partner link information
- * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @partner_info: Pointer to the location where the partner link information
- * should be updated. This should be ignored by the caller if the function
- * returns error. Note that success will be returned and the number of links in
- * this structure will be reported as 0, if no Link Info is found, or no per-STA
- * profile is found, or if none of the per-STA profiles includes a MAC address
- * in the STA Info field (assuming no errors are encountered).
- *
- * Get partner link information and NSTR capability information in the
- * per-STA profiles present in a Basic variant Multi-Link element.
- * The partner link information is returned only for those per-STA profiles
- * which have a MAC address in the STA Info field.
- * The NSTR capability information is returned only for those per-STA profiles
- * which are Complete per-STA profiles.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure
- */
- QDF_STATUS
- util_get_bvmlie_persta_partner_info(uint8_t *mlieseq,
- qdf_size_t mlieseqlen,
- struct mlo_partner_info *partner_info);
- /**
- * util_get_prvmlie_mldid - Get the MLD ID from a given Probe Request
- * variant Multi-Link element , of the STA that transmits ML Probe Request
- * with the Multi-Link element
- *
- * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mldidfound: Pointer to the location where a boolean status should be
- * updated indicating whether the MLD ID was found or not. This should
- * be ignored by the caller if the function returns error.
- * @mldid: Pointer to the location where the value of the MLD ID
- * should be updated. This should be ignored by the caller if the function
- * returns error, or if the function indicates that the MLD ID was not
- * found.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure
- */
- QDF_STATUS
- util_get_prvmlie_mldid(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- bool *mldidfound, uint8_t *mldid);
- /**
- * util_get_prvmlie_persta_link_id() - Get per-STA probe req link information
- *
- * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @probereq_info: Pointer to the location where the probe req link information
- * should be updated. This should be ignored by the caller if the function
- * returns error. Note that success will be returned and the number of links in
- * this structure will be reported as 0, if no Link Info is found, or no per-STA
- * profile is found.
- *
- * Get probe req link information in the per-STA profiles present in a Probe req
- * variant Multi-Link element.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure
- */
- QDF_STATUS
- util_get_prvmlie_persta_link_id(uint8_t *mlieseq,
- qdf_size_t mlieseqlen,
- struct mlo_probereq_info *probereq_info);
- /**
- * util_get_rvmlie_mldmacaddr() - Get the MLD MAC address from a given Reconfig
- * variant Multi-Link element.
- *
- * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mldmacaddr: Pointer to the location where the MLD MAC address should be
- * updated. This should be ignored by the caller if the function returns error.
- * @is_mldmacaddr_found: mld address found or not
- *
- * Get the MLD MAC address from a given Reconfig variant Multi-Link element
- * or element fragment sequence.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure
- */
- QDF_STATUS
- util_get_rvmlie_mldmacaddr(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- struct qdf_mac_addr *mldmacaddr,
- bool *is_mldmacaddr_found);
- /**
- * util_get_rvmlie_persta_link_info() - Get per-STA reconfig link information
- *
- * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @reconfig_info: Pointer to the location where the reconfig link information
- * should be updated. This should be ignored by the caller if the function
- * returns error. Note that success will be returned and the number of links in
- * this structure will be reported as 0, if no Link Info is found, or no per-STA
- * profile is found.
- *
- * Get reconfig link information in the per-STA profiles present in a Reconfig
- * variant Multi-Link element.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure.
- */
- QDF_STATUS
- util_get_rvmlie_persta_link_info(uint8_t *mlieseq,
- qdf_size_t mlieseqlen,
- struct ml_rv_info *reconfig_info);
- /**
- * util_get_pav_mlie_link_info() - Get priority access link information
- *
- * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
- * fragment sequence
- * @pa_info: Pointer to the location where the priority access multi link
- * information is stored.
- *
- * Get EPCS priority access information from Priority Access Multi-Link element.
- *
- * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
- * the reason for error in the case of failure.
- */
- QDF_STATUS util_get_pav_mlie_link_info(uint8_t *mlieseq,
- qdf_size_t mlieseqlen,
- struct ml_pa_info *pa_info);
- #else
- static inline QDF_STATUS
- util_gen_link_assoc_req(uint8_t *frame, qdf_size_t frame_len, bool isreassoc,
- uint8_t link_id,
- struct qdf_mac_addr link_addr,
- uint8_t *link_frame,
- qdf_size_t link_frame_maxsize,
- qdf_size_t *link_frame_len)
- {
- return QDF_STATUS_E_NOSUPPORT;
- }
- static inline QDF_STATUS
- util_gen_link_assoc_rsp(uint8_t *frame, qdf_size_t frame_len, bool isreassoc,
- uint8_t link_id,
- struct qdf_mac_addr link_addr,
- uint8_t *link_frame,
- qdf_size_t link_frame_maxsize,
- qdf_size_t *link_frame_len)
- {
- return QDF_STATUS_E_NOSUPPORT;
- }
- static inline QDF_STATUS
- util_find_mlie(uint8_t *buf, qdf_size_t buflen, uint8_t **mlieseq,
- qdf_size_t *mlieseqlen)
- {
- return QDF_STATUS_E_NOSUPPORT;
- }
- static inline QDF_STATUS
- util_find_mlie_by_variant(uint8_t *buf, qdf_size_t buflen, uint8_t **mlieseq,
- qdf_size_t *mlieseqlen)
- {
- return QDF_STATUS_E_FAILURE;
- }
- static inline QDF_STATUS
- util_get_mlie_variant(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- int *variant)
- {
- return QDF_STATUS_E_NOSUPPORT;
- }
- static inline QDF_STATUS
- util_get_mlie_common_info_len(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- uint8_t *commoninfo_len)
- {
- return QDF_STATUS_E_NOSUPPORT;
- }
- static inline QDF_STATUS
- util_get_bvmlie_bssparamchangecnt(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- bool *bssparamchangecntfound,
- uint8_t *bssparamchangecnt)
- {
- return QDF_STATUS_E_NOSUPPORT;
- }
- static inline QDF_STATUS
- util_get_bvmlie_mldmacaddr(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- struct qdf_mac_addr *mldmacaddr)
- {
- return QDF_STATUS_E_NOSUPPORT;
- }
- static inline QDF_STATUS
- util_get_bvmlie_eml_cap(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- bool *eml_cap_found,
- uint16_t *eml_cap)
- {
- return QDF_STATUS_E_NOSUPPORT;
- }
- static inline QDF_STATUS
- util_get_bvmlie_msd_cap(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- bool *msd_cap_found,
- uint16_t *msd_cap)
- {
- return QDF_STATUS_E_NOSUPPORT;
- }
- static inline QDF_STATUS
- util_get_bvmlie_primary_linkid(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- bool *linkidfound, uint8_t *linkid)
- {
- return QDF_STATUS_E_NOSUPPORT;
- }
- static inline QDF_STATUS
- util_get_bvmlie_persta_partner_info(uint8_t *mlieseq,
- qdf_size_t mlieseqlen,
- struct mlo_partner_info *partner_info)
- {
- return QDF_STATUS_E_NOSUPPORT;
- }
- static inline QDF_STATUS
- util_get_prvmlie_persta_link_id(uint8_t *mlieseq,
- qdf_size_t mlieseqlen,
- struct mlo_probereq_info *probereq_info)
- {
- return QDF_STATUS_E_NOSUPPORT;
- }
- static inline QDF_STATUS
- util_get_prvmlie_mldid(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- bool *mldcapfound, uint8_t *mldcap)
- {
- return QDF_STATUS_E_NOSUPPORT;
- }
- static inline QDF_STATUS
- util_get_rvmlie_mldmacaddr(uint8_t *mlieseq, qdf_size_t mlieseqlen,
- struct qdf_mac_addr *mldmacaddr,
- bool *is_mldmacaddr_found)
- {
- return QDF_STATUS_E_NOSUPPORT;
- }
- static inline QDF_STATUS
- util_get_rvmlie_persta_link_info(uint8_t *mlieseq,
- qdf_size_t mlieseqlen,
- struct ml_rv_info *reconfig_info)
- {
- return QDF_STATUS_E_NOSUPPORT;
- }
- static inline
- QDF_STATUS util_get_pav_mlie_link_info(uint8_t *mlieseq,
- qdf_size_t mlieseqlen,
- struct ml_pa_info *pa_info)
- {
- return QDF_STATUS_E_NOSUPPORT;
- }
- #endif /* WLAN_FEATURE_11BE_MLO */
- #endif /* _WLAN_UTILS_MLO_H_ */
|