ath6kl: cleanup callbacks for different scatter gather method
authorVasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
Sat, 16 Jul 2011 14:59:05 +0000 (20:29 +0530)
committerKalle Valo <kvalo@qca.qualcomm.com>
Tue, 9 Aug 2011 16:45:18 +0000 (19:45 +0300)
Define a hook in ath6kl_hif_ops for hif scatter gather mechanism.
When virtual scatter gather is used, call the respective function
directly.

Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath6kl/hif-ops.h
drivers/net/wireless/ath/ath6kl/hif.h
drivers/net/wireless/ath/ath6kl/htc_hif.c
drivers/net/wireless/ath/ath6kl/sdio.c

index ad4966917e84ea636779a9bfcccbef9efbd8918f..32890cd530be1b97ee9e2e257b331ed55263a80a 100644 (file)
@@ -59,6 +59,12 @@ static inline int ath6kl_hif_enable_scatter(struct ath6kl *ar,
        return ar->hif_ops->enable_scatter(ar, info);
 }
 
+static inline int ath6kl_hif_scat_req_rw(struct ath6kl *ar,
+                                        struct hif_scatter_req *scat_req)
+{
+       return ar->hif_ops->scat_req_rw(ar, scat_req);
+}
+
 static inline void ath6kl_hif_cleanup_scatter(struct ath6kl *ar)
 {
        return ar->hif_ops->cleanup_scatter(ar);
index 7d39c1769fe40005ad4e200d19018e681fec8554..ca401041abfb138eeeef4d57f1399d44aa50bb69 100644 (file)
@@ -186,7 +186,6 @@ struct hif_scatter_req {
 };
 
 struct hif_dev_scat_sup_info {
-       int (*rw_scat_func) (struct ath6kl *ar, struct hif_scatter_req *);
        int max_scat_entries;
        int max_xfer_szper_scatreq;
 };
@@ -210,6 +209,8 @@ struct ath6kl_hif_ops {
                                struct hif_scatter_req *s_req);
        int (*enable_scatter)(struct ath6kl *ar,
                              struct hif_dev_scat_sup_info *info);
+       int (*scat_req_rw) (struct ath6kl *ar,
+                           struct hif_scatter_req *scat_req);
        void (*cleanup_scatter)(struct ath6kl *ar);
 };
 
index 1bcaaec579c5079f764e373aa27d21dd79b8e4e9..df904d8c48c08ba80852fa031fd7e6245696c123 100644 (file)
@@ -285,7 +285,10 @@ int ath6kldev_submit_scat_req(struct ath6kl_device *dev,
                return status;
        }
 
-       status = dev->hif_scat_info.rw_scat_func(dev->ar, scat_req);
+       if (dev->virt_scat)
+               status =  ath6kldev_rw_scatter(dev->ar, scat_req);
+       else
+               status = ath6kl_hif_scat_req_rw(dev->ar, scat_req);
 
        if (read) {
                /* in sync mode, we can touch the scatter request */
@@ -340,7 +343,6 @@ static int ath6kldev_setup_virt_scat_sup(struct ath6kl_device *dev)
        if (status)
                ath6kl_hif_cleanup_scatter(dev->ar);
        else {
-               dev->hif_scat_info.rw_scat_func = ath6kldev_rw_scatter;
                dev->hif_scat_info.max_scat_entries =
                        ATH6KL_SCATTER_ENTRIES_PER_REQ;
                dev->hif_scat_info.max_xfer_szper_scatreq =
index b38732aaf41a635c56612e44af2a70a16cfe1696..d217f1c642b33006ed2e53907d49cf58eabcb225 100644 (file)
@@ -271,9 +271,9 @@ static int ath6kl_sdio_scat_rw(struct ath6kl_sdio *ar_sdio,
 }
 
 
-/* callback to issue a read-write scatter request */
+/* scatter gather read write request */
 static int ath6kl_sdio_async_rw_scatter(struct ath6kl *ar,
-                                       struct hif_scatter_req *scat_req)
+                                struct hif_scatter_req *scat_req)
 {
        struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar);
        struct hif_scatter_req_priv *req_priv = scat_req->req_priv;
@@ -379,8 +379,6 @@ static int ath6kl_sdio_setup_scat_resource(struct ath6kl_sdio *ar_sdio,
                hif_scatter_req_add(ar_sdio->ar, s_req);
        }
 
-       /* set scatter function pointers */
-       pinfo->rw_scat_func = ath6kl_sdio_async_rw_scatter;
        pinfo->max_scat_entries = MAX_SCATTER_ENTRIES_PER_REQ;
        pinfo->max_xfer_szper_scatreq = MAX_SCATTER_REQ_TRANSFER_SIZE;
 
@@ -671,6 +669,7 @@ static const struct ath6kl_hif_ops ath6kl_sdio_ops = {
        .scatter_req_get = ath6kl_sdio_scatter_req_get,
        .scatter_req_add = ath6kl_sdio_scatter_req_add,
        .enable_scatter = ath6kl_sdio_enable_scatter,
+       .scat_req_rw = ath6kl_sdio_async_rw_scatter,
        .cleanup_scatter = ath6kl_sdio_cleanup_scatter,
 };