qcacmn: Link descriptor IDs to assist debug
We need only 3 bits of cookie field in link descriptor buff_addr_info
to store bank ID. The remaining bytes will be used set a unique ID,
which will be useful in debugging. Also fixed an issue in scatter idle
list setup.
Change-Id: Id3cc9a8a316fe942e749611c2f57e9324419dd40
diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c
index 07d78df..fbe14d9 100644
--- a/dp/wifi3.0/dp_main.c
+++ b/dp/wifi3.0/dp_main.c
@@ -1065,6 +1065,7 @@
uint32_t last_bank_size = 0;
uint32_t entry_size, num_entries;
int i;
+ uint32_t desc_id = 0;
/* Only Tx queue descriptors are allocated from common link descriptor
* pool Rx queue descriptors are not included in this because (REO queue
@@ -1195,8 +1196,10 @@
while (num_entries && (desc = hal_srng_src_get_next(
soc->hal_soc,
soc->wbm_idle_link_ring.hal_srng))) {
- hal_set_link_desc_addr(desc, i, paddr);
+ hal_set_link_desc_addr(desc,
+ LINK_DESC_COOKIE(desc_id, i), paddr);
num_entries--;
+ desc_id++;
paddr += link_desc_size;
}
}
@@ -1249,14 +1252,12 @@
/ link_desc_size;
unsigned long paddr = (unsigned long)(
soc->link_desc_banks[i].base_paddr);
- void *desc = NULL;
- while (num_link_descs && (desc =
- hal_srng_src_get_next(soc->hal_soc,
- soc->wbm_idle_link_ring.hal_srng))) {
+ while (num_link_descs) {
hal_set_link_desc_addr((void *)scatter_buf_ptr,
- i, paddr);
+ LINK_DESC_COOKIE(desc_id, i), paddr);
num_link_descs--;
+ desc_id++;
paddr += link_desc_size;
if (rem_entries) {
rem_entries--;
diff --git a/dp/wifi3.0/dp_rx.h b/dp/wifi3.0/dp_rx.h
index 18fdc87..2193762 100644
--- a/dp/wifi3.0/dp_rx.h
+++ b/dp/wifi3.0/dp_rx.h
@@ -505,13 +505,15 @@
struct hal_buf_info *buf_info)
{
void *link_desc_va;
+ uint32_t bank_id = LINK_DESC_COOKIE_BANK_ID(buf_info->sw_cookie);
+
/* TODO */
/* Add sanity for cookie */
- link_desc_va = soc->link_desc_banks[buf_info->sw_cookie].base_vaddr +
+ link_desc_va = soc->link_desc_banks[bank_id].base_vaddr +
(buf_info->paddr -
- soc->link_desc_banks[buf_info->sw_cookie].base_paddr);
+ soc->link_desc_banks[bank_id].base_paddr);
return link_desc_va;
}
diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h
index df83bfc..86f05c6 100644
--- a/dp/wifi3.0/dp_types.h
+++ b/dp/wifi3.0/dp_types.h
@@ -834,6 +834,21 @@
/* Same as NAC_MAX_CLENT */
#define DP_NAC_MAX_CLIENT 24
+/*
+ * Macros to setup link descriptor cookies - for link descriptors, we just
+ * need first 3 bits to store bank ID. The remaining bytes will be used set a
+ * unique ID, which will be useful in debugging
+ */
+#define LINK_DESC_BANK_ID_MASK 0x7
+#define LINK_DESC_ID_SHIFT 3
+#define LINK_DESC_ID_START 0x8000
+
+#define LINK_DESC_COOKIE(_desc_id, _bank_id) \
+ ((((_desc_id) + LINK_DESC_ID_START) << LINK_DESC_ID_SHIFT) | (_bank_id))
+
+#define LINK_DESC_COOKIE_BANK_ID(_cookie) \
+ ((_cookie) & LINK_DESC_BANK_ID_MASK)
+
/* same as ieee80211_nac_param */
enum dp_nac_param_cmd {
/* IEEE80211_NAC_PARAM_ADD */