[RFC PATCH 07/34] API to add NTB capabilities in USD PR IE
Peddolla Harshavardhan Reddy
peddolla at qti.qualcomm.com
Thu May 15 00:17:30 PDT 2025
Signed-off-by: Peddolla Harshavardhan Reddy <peddolla at qti.qualcomm.com>
---
src/common/proximity_ranging.c | 60 ++++++++++++++++++++++++++++++++++
src/common/proximity_ranging.h | 49 +++++++++++++++++++++++++++
2 files changed, 109 insertions(+)
diff --git a/src/common/proximity_ranging.c b/src/common/proximity_ranging.c
index 5e0872749..18701646b 100644
--- a/src/common/proximity_ranging.c
+++ b/src/common/proximity_ranging.c
@@ -183,6 +183,36 @@ static void pr_get_edca_capabilities(struct pr_data *pr,
}
+static void pr_get_ntb_capabilities(struct pr_data *pr,
+ struct ntb_capabilities *capab)
+{
+ u32 ntb_hw_caps = 0;
+
+ os_memset(capab, 0, sizeof(struct ntb_capabilities));
+ capab->ista_support = pr->cfg->ntb_ista_support;
+ capab->rsta_support = pr->cfg->ntb_rsta_support;
+ os_memcpy(capab->country, pr->cfg->country, 3);
+ capab->secure_he_ltf = pr->cfg->secure_he_ltf;
+
+ ntb_hw_caps |= (pr->cfg->ntb_format_and_bw & NTB_FORMAT_AND_BW_MASK);
+ ntb_hw_caps |= ((pr->cfg->max_tx_ltf_repetations & MAX_TX_LTF_REPETATIONS_MASK) << MAX_TX_LTF_REPETATIONS);
+ ntb_hw_caps |= ((pr->cfg->max_rx_ltf_repetations & MAX_RX_LTF_REPETATIONS_MASK) << MAX_RX_LTF_REPETATIONS);
+
+ ntb_hw_caps |= ((pr->cfg->max_rx_ltf_total & MAX_RX_LTF_TOTAL_MASK) << MAX_RX_LTF_TOTAL);
+ ntb_hw_caps |= ((pr->cfg->max_tx_ltf_total & MAX_TX_LTF_TOTAL_MASK) << MAX_TX_LTF_TOTAL);
+
+ ntb_hw_caps |= ((pr->cfg->max_rx_sts_le_80 & MAX_RX_STS_LE_80_MASK) << MAX_RX_STS_LE_80);
+ ntb_hw_caps |= ((pr->cfg->max_rx_sts_gt_80 & MAX_RX_STS_GT_80_MASK) << MAX_RX_STS_GT_80);
+
+ ntb_hw_caps |= ((pr->cfg->max_tx_sts_le_80 & MAX_TX_STS_LE_80_MASK) << MAX_TX_STS_LE_80);
+ ntb_hw_caps |= ((pr->cfg->max_rx_sts_gt_80 & MAX_TX_STS_GT_80_MASK) << MAX_TX_STS_GT_80);
+
+ capab->ntb_hw_caps = ntb_hw_caps;
+ os_memcpy(&capab->channels, &pr->cfg->edca_channels,
+ sizeof(struct pr_channels));
+}
+
+
static void pr_buf_add_channel_list(struct wpabuf *buf, const char *country,
struct pr_channels *chan)
{
@@ -273,12 +303,37 @@ static void pr_buf_add_edca_capa_info(struct wpabuf *buf,
}
+static void pr_buf_add_ntb_capa_info(struct wpabuf *buf,
+ struct ntb_capabilities *ntb_data)
+{
+ u8 *len;
+ u8 ranging_role = 0;
+
+ wpabuf_put_u8(buf, PR_ATTR_NTB_CAPABILITY);
+ len = wpabuf_put(buf, 2);
+
+ if (ntb_data->ista_support)
+ ranging_role |= PR_ISTA_SUPPORT;
+ if (ntb_data->rsta_support)
+ ranging_role |= PR_RSTA_SUPPORT;
+
+ wpabuf_put_u8(buf, ranging_role);
+ wpabuf_put_be32(buf, ntb_data->ntb_hw_caps);
+ pr_buf_add_channel_list(buf, ntb_data->country, &ntb_data->channels);
+
+ WPA_PUT_LE16(len, (u8 *) wpabuf_put(buf, 0) - len - 2);
+ wpa_hexdump(MSG_DEBUG, "PR: * NTB data",
+ len + 2, (u8 *) wpabuf_put(buf, 0) - len - 2);
+}
+
+
struct wpabuf * pr_prepare_usd_elems(struct pr_data *pr, const char *country)
{
u32 ie_type;
struct wpabuf *buf, *buf2;
struct pr_capabilities pr_caps;
struct edca_capabilities edca_caps;
+ struct ntb_capabilities ntb_caps;
buf = wpabuf_alloc(1000);
if (!buf)
@@ -292,6 +347,11 @@ struct wpabuf * pr_prepare_usd_elems(struct pr_data *pr, const char *country)
pr_buf_add_edca_capa_info(buf, &edca_caps);
}
+ if (pr->cfg->ntb_ista_support || pr->cfg->ntb_rsta_support) {
+ pr_get_ntb_capabilities(pr, &ntb_caps);
+ pr_buf_add_ntb_capa_info(buf, &ntb_caps);
+ }
+
ie_type = (OUI_WFA << 8) | PR_OUI_TYPE;
buf2 = pr_encaps_ie(buf, ie_type);
wpabuf_free(buf);
diff --git a/src/common/proximity_ranging.h b/src/common/proximity_ranging.h
index 0b3dc0a06..df4a898b8 100644
--- a/src/common/proximity_ranging.h
+++ b/src/common/proximity_ranging.h
@@ -92,6 +92,55 @@ struct edca_capabilities {
struct pr_channels channels;
};
+struct ntb_capabilities {
+ bool ista_support;
+
+ bool rsta_support;
+
+ bool secure_he_ltf;
+
+#define NTB_FORMAT_AND_BW 0
+#define MAX_TX_LTF_REPETATIONS 3
+#define MAX_RX_LTF_REPETATIONS 6
+#define MAX_RX_LTF_TOTAL 9
+#define MAX_TX_LTF_TOTAL 11
+#define MAX_RX_STS_LE_80 13
+#define MAX_RX_STS_GT_80 16
+#define MAX_TX_STS_LE_80 19
+#define MAX_TX_STS_GT_80 22
+
+
+#define NTB_FORMAT_AND_BW_MASK 0x00000007
+
+/* Max Tx LTF repetations supported for non trigger based ranging */
+#define MAX_TX_LTF_REPETATIONS_MASK 0x00000007
+
+/* Max Rx LTF repetations supported for non trigger based ranging */
+#define MAX_RX_LTF_REPETATIONS_MASK 0x00000007
+
+/* Max Rx LTF total supported for non trigger based ranging */
+#define MAX_RX_LTF_TOTAL_MASK 0x00000003
+
+/* Max Tx LTF total supported for non trigger based ranging */
+#define MAX_TX_LTF_TOTAL_MASK 0x00000003
+
+/* To configure max R2I STS for Bandwidth less than or equal to 80Mz */
+#define MAX_RX_STS_LE_80_MASK 0x00000007
+
+/* To configure max R2I STS for Bandwidth greater than 80Mz */
+#define MAX_RX_STS_GT_80_MASK 0x00000007
+
+/* To configure max I2R STS for Bandwidth less than or equal to 80Mz */
+#define MAX_TX_STS_LE_80_MASK 0x00000007
+
+/* To configure max I2R STS for Bandwidth greater than 80Mz */
+#define MAX_TX_STS_GT_80_MASK 0x00000007
+ u32 ntb_hw_caps;
+
+ char country[3];
+
+ struct pr_channels channels;
+};
enum pr_attr_id {
PR_ATTR_STATUS = 0,
--
2.34.1
More information about the Hostap
mailing list