Re: [PATCH 1/2] ath10k: refactor phyerr event handlers

2015-08-13 Thread Kalle Valo
Kalle Valo  writes:

> Raja Mani  writes:
>
>> Existing phyerr event handlers directly uses phyerr header format
>> (ie, struct wmi_phyerr and struct wmi_phyerr_event) in the code
>> exactly on how firmware packs it. This is the problem in 10.4 fw
>> specific phyerr event handling where it uses different phyerror
>> header format. Before adding 10.4 specific handler, little bit of
>> refactor is done in existing phyerr handlers.
>>
>> Two new abstracted structures (struct wmi_phyerr_ev_hdr_arg and
>> struct wmi_phyerr_ev_arg) are introduced to remove dependency of using
>> firmware specific header format in the code. So that firmware specific
>> phyerror handlers can populate values to abstracted structures and
>> the following code can use abstracted struct for further operation.
>>
>> .pull_phyerr_hdr is added newly to pull common phyerr header info
>> like tsf, buf_len, number of phyerr packed. Existing .pull_phyerr
>> handler is changed and called to parse every sub phyerrs in the event.
>>
>> Validated these refactoring on qca988x hw2.0 using fw 10.2.4 version.
>>
>> Signed-off-by: Raja Mani 
>
> Thanks, applied.

Actually I'll take it back, I dropped these as I see new warnings:

drivers/net/wireless/ath/ath10k/wmi.c:3625:33: warning: restricted __le32 
degrades to integer
drivers/net/wireless/ath/ath10k/wmi.c:3627:38: warning: restricted __le32 
degrades to integer
drivers/net/wireless/ath/ath10k/wmi.c:3599:5: warning: symbol 
'ath10k_wmi_10_4_op_pull_phyerr_ev' was not declared. Should it be static?

-- 
Kalle Valo
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] ath10k: refactor phyerr event handlers

2015-08-13 Thread Kalle Valo
Raja Mani  writes:

> Existing phyerr event handlers directly uses phyerr header format
> (ie, struct wmi_phyerr and struct wmi_phyerr_event) in the code
> exactly on how firmware packs it. This is the problem in 10.4 fw
> specific phyerr event handling where it uses different phyerror
> header format. Before adding 10.4 specific handler, little bit of
> refactor is done in existing phyerr handlers.
>
> Two new abstracted structures (struct wmi_phyerr_ev_hdr_arg and
> struct wmi_phyerr_ev_arg) are introduced to remove dependency of using
> firmware specific header format in the code. So that firmware specific
> phyerror handlers can populate values to abstracted structures and
> the following code can use abstracted struct for further operation.
>
> .pull_phyerr_hdr is added newly to pull common phyerr header info
> like tsf, buf_len, number of phyerr packed. Existing .pull_phyerr
> handler is changed and called to parse every sub phyerrs in the event.
>
> Validated these refactoring on qca988x hw2.0 using fw 10.2.4 version.
>
> Signed-off-by: Raja Mani 

Thanks, applied.

-- 
Kalle Valo
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/2] ath10k: refactor phyerr event handlers

2015-08-12 Thread Raja Mani
Existing phyerr event handlers directly uses phyerr header format
(ie, struct wmi_phyerr and struct wmi_phyerr_event) in the code
exactly on how firmware packs it. This is the problem in 10.4 fw
specific phyerr event handling where it uses different phyerror
header format. Before adding 10.4 specific handler, little bit of
refactor is done in existing phyerr handlers.

Two new abstracted structures (struct wmi_phyerr_ev_hdr_arg and
struct wmi_phyerr_ev_arg) are introduced to remove dependency of using
firmware specific header format in the code. So that firmware specific
phyerror handlers can populate values to abstracted structures and
the following code can use abstracted struct for further operation.

.pull_phyerr_hdr is added newly to pull common phyerr header info
like tsf, buf_len, number of phyerr packed. Existing .pull_phyerr
handler is changed and called to parse every sub phyerrs in the event.

Validated these refactoring on qca988x hw2.0 using fw 10.2.4 version.

Signed-off-by: Raja Mani 
---
 drivers/net/wireless/ath/ath10k/spectral.c |   9 +--
 drivers/net/wireless/ath/ath10k/spectral.h |   4 +-
 drivers/net/wireless/ath/ath10k/wmi-ops.h  |  22 --
 drivers/net/wireless/ath/ath10k/wmi-tlv.c  |  17 ++--
 drivers/net/wireless/ath/ath10k/wmi.c  | 121 -
 drivers/net/wireless/ath/ath10k/wmi.h  |  43 +++---
 6 files changed, 149 insertions(+), 67 deletions(-)

diff --git a/drivers/net/wireless/ath/ath10k/spectral.c 
b/drivers/net/wireless/ath/ath10k/spectral.c
index 8dcd424..e4219b1 100644
--- a/drivers/net/wireless/ath/ath10k/spectral.c
+++ b/drivers/net/wireless/ath/ath10k/spectral.c
@@ -57,7 +57,7 @@ static uint8_t get_max_exp(s8 max_index, u16 max_magnitude, 
size_t bin_len,
 }
 
 int ath10k_spectral_process_fft(struct ath10k *ar,
-   const struct wmi_phyerr *phyerr,
+   struct wmi_phyerr_ev_arg *phyerr,
const struct phyerr_fft_report *fftr,
size_t bin_len, u64 tsf)
 {
@@ -118,15 +118,14 @@ int ath10k_spectral_process_fft(struct ath10k *ar,
fft_sample->total_gain_db = __cpu_to_be16(total_gain_db);
fft_sample->base_pwr_db = __cpu_to_be16(base_pwr_db);
 
-   freq1 = __le16_to_cpu(phyerr->freq1);
-   freq2 = __le16_to_cpu(phyerr->freq2);
+   freq1 = phyerr->freq1;
+   freq2 = phyerr->freq2;
fft_sample->freq1 = __cpu_to_be16(freq1);
fft_sample->freq2 = __cpu_to_be16(freq2);
 
chain_idx = MS(reg0, SEARCH_FFT_REPORT_REG0_FFT_CHN_IDX);
 
-   fft_sample->noise = __cpu_to_be16(
-   __le16_to_cpu(phyerr->nf_chains[chain_idx]));
+   fft_sample->noise = __cpu_to_be16(phyerr->nf_chains[chain_idx]);
 
bins = (u8 *)fftr;
bins += sizeof(*fftr);
diff --git a/drivers/net/wireless/ath/ath10k/spectral.h 
b/drivers/net/wireless/ath/ath10k/spectral.h
index 042f5b3..89b0ad7 100644
--- a/drivers/net/wireless/ath/ath10k/spectral.h
+++ b/drivers/net/wireless/ath/ath10k/spectral.h
@@ -47,7 +47,7 @@ enum ath10k_spectral_mode {
 #ifdef CONFIG_ATH10K_DEBUGFS
 
 int ath10k_spectral_process_fft(struct ath10k *ar,
-   const struct wmi_phyerr *phyerr,
+   struct wmi_phyerr_ev_arg *phyerr,
const struct phyerr_fft_report *fftr,
size_t bin_len, u64 tsf);
 int ath10k_spectral_start(struct ath10k *ar);
@@ -59,7 +59,7 @@ void ath10k_spectral_destroy(struct ath10k *ar);
 
 static inline int
 ath10k_spectral_process_fft(struct ath10k *ar,
-   const struct wmi_phyerr *phyerr,
+   struct wmi_phyerr_ev_arg *phyerr,
const struct phyerr_fft_report *fftr,
size_t bin_len, u64 tsf)
 {
diff --git a/drivers/net/wireless/ath/ath10k/wmi-ops.h 
b/drivers/net/wireless/ath/ath10k/wmi-ops.h
index 47fe2e7..01629c9 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-ops.h
+++ b/drivers/net/wireless/ath/ath10k/wmi-ops.h
@@ -37,8 +37,10 @@ struct wmi_ops {
  struct wmi_peer_kick_ev_arg *arg);
int (*pull_swba)(struct ath10k *ar, struct sk_buff *skb,
 struct wmi_swba_ev_arg *arg);
-   int (*pull_phyerr)(struct ath10k *ar, struct sk_buff *skb,
-  struct wmi_phyerr_ev_arg *arg);
+   int (*pull_phyerr_hdr)(struct ath10k *ar, struct sk_buff *skb,
+  struct wmi_phyerr_hdr_arg *arg);
+   int (*pull_phyerr)(struct ath10k *ar, const void *phyerr_buf,
+  int left_len, struct wmi_phyerr_ev_arg *arg);
int (*pull_svc_rdy)(struct ath10k *ar, struct sk_buff *skb,
struct wmi_svc_rdy_ev_arg *arg);
int (*pull_rdy)(struct ath10k *ar, struct sk_buff *skb,
@@ -260,13 +262,23 @@ ath10k_wmi_pull_swba(struct ath10k *a