ath10k: dont duplicate service-pipe mapping
authorMichal Kazior <michal.kazior@tieto.com>
Tue, 26 Aug 2014 16:14:03 +0000 (19:14 +0300)
committerKalle Valo <kvalo@qca.qualcomm.com>
Wed, 27 Aug 2014 12:03:23 +0000 (15:03 +0300)
The mapping is already defined in a structure. It
makes little sense to duplicate information stored
in it within a function.

Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/pci.c

index 71ac018..fa0e245 100644 (file)
@@ -1094,68 +1094,57 @@ static void ath10k_pci_kill_tasklet(struct ath10k *ar)
        del_timer_sync(&ar_pci->rx_post_retry);
 }
 
-/* TODO - temporary mapping while we have too few CE's */
 static int ath10k_pci_hif_map_service_to_pipe(struct ath10k *ar,
                                              u16 service_id, u8 *ul_pipe,
                                              u8 *dl_pipe, int *ul_is_polled,
                                              int *dl_is_polled)
 {
-       int ret = 0;
+       const struct service_to_pipe *entry;
+       bool ul_set = false, dl_set = false;
+       int i;
 
        ath10k_dbg(ar, ATH10K_DBG_PCI, "pci hif map service\n");
 
        /* polling for received messages not supported */
        *dl_is_polled = 0;
 
-       switch (service_id) {
-       case ATH10K_HTC_SVC_ID_HTT_DATA_MSG:
-               /*
-                * Host->target HTT gets its own pipe, so it can be polled
-                * while other pipes are interrupt driven.
-                */
-               *ul_pipe = 4;
-               /*
-                * Use the same target->host pipe for HTC ctrl, HTC raw
-                * streams, and HTT.
-                */
-               *dl_pipe = 1;
-               break;
-
-       case ATH10K_HTC_SVC_ID_RSVD_CTRL:
-       case ATH10K_HTC_SVC_ID_TEST_RAW_STREAMS:
-               /*
-                * Note: HTC_RAW_STREAMS_SVC is currently unused, and
-                * HTC_CTRL_RSVD_SVC could share the same pipe as the
-                * WMI services.  So, if another CE is needed, change
-                * this to *ul_pipe = 3, which frees up CE 0.
-                */
-               /* *ul_pipe = 3; */
-               *ul_pipe = 0;
-               *dl_pipe = 1;
-               break;
+       for (i = 0; i < ARRAY_SIZE(target_service_to_ce_map_wlan); i++) {
+               entry = &target_service_to_ce_map_wlan[i];
 
-       case ATH10K_HTC_SVC_ID_WMI_DATA_BK:
-       case ATH10K_HTC_SVC_ID_WMI_DATA_BE:
-       case ATH10K_HTC_SVC_ID_WMI_DATA_VI:
-       case ATH10K_HTC_SVC_ID_WMI_DATA_VO:
+               if (entry->service_id != service_id)
+                       continue;
 
-       case ATH10K_HTC_SVC_ID_WMI_CONTROL:
-               *ul_pipe = 3;
-               *dl_pipe = 2;
-               break;
+               switch (entry->pipedir) {
+               case PIPEDIR_NONE:
+                       break;
+               case PIPEDIR_IN:
+                       WARN_ON(dl_set);
+                       *dl_pipe = entry->pipenum;
+                       dl_set = true;
+                       break;
+               case PIPEDIR_OUT:
+                       WARN_ON(ul_set);
+                       *ul_pipe = entry->pipenum;
+                       ul_set = true;
+                       break;
+               case PIPEDIR_INOUT:
+                       WARN_ON(dl_set);
+                       WARN_ON(ul_set);
+                       *dl_pipe = entry->pipenum;
+                       *ul_pipe = entry->pipenum;
+                       dl_set = true;
+                       ul_set = true;
+                       break;
+               }
+       }
 
-               /* pipe 5 unused   */
-               /* pipe 6 reserved */
-               /* pipe 7 reserved */
+       if (WARN_ON(!ul_set || !dl_set))
+               return -ENOENT;
 
-       default:
-               ret = -1;
-               break;
-       }
        *ul_is_polled =
                (host_ce_config_wlan[*ul_pipe].flags & CE_ATTR_DIS_INTR) != 0;
 
-       return ret;
+       return 0;
 }
 
 static void ath10k_pci_hif_get_default_pipe(struct ath10k *ar,