ath6kl: cleanup diagnose window read and write functions
authorKalle Valo <kvalo@qca.qualcomm.com>
Fri, 2 Sep 2011 07:32:05 +0000 (10:32 +0300)
committerKalle Valo <kvalo@qca.qualcomm.com>
Fri, 2 Sep 2011 07:32:05 +0000 (10:32 +0300)
Just to make them a bit easier to read and unify naming. 32 suffix
in the function name means that it will be a 32 bit transfer. If there's
no number a buffer is transfered instead.

Use void pointers to get rid of ugly casts.

Don't provide target address as a pointer, pass it by value. Same for
the value used in write32().

Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath6kl/core.h
drivers/net/wireless/ath/ath6kl/init.c
drivers/net/wireless/ath/ath6kl/main.c

index 58c810acdbf2a5ad769dda2062d3a7a666a9f846..c5213d509093eecc04fc315a8a31468d4da61db9 100644 (file)
@@ -507,9 +507,9 @@ enum htc_send_full_action ath6kl_tx_queue_full(struct htc_target *target,
                                               struct htc_packet *packet);
 void ath6kl_stop_txrx(struct ath6kl *ar);
 void ath6kl_cleanup_amsdu_rxbufs(struct ath6kl *ar);
-int ath6kl_access_datadiag(struct ath6kl *ar, u32 address,
-                          u8 *data, u32 length, bool read);
-int ath6kl_read_reg_diag(struct ath6kl *ar, u32 *address, u32 *data);
+int ath6kl_diag_write(struct ath6kl *ar, u32 address, void *data, u32 length);
+int ath6kl_diag_read32(struct ath6kl *ar, u32 address, u32 *value);
+int ath6kl_diag_read(struct ath6kl *ar, u32 address, void *data, u32 length);
 void ath6kl_init_profile_info(struct ath6kl *ar);
 void ath6kl_tx_data_cleanup(struct ath6kl *ar);
 void ath6kl_stop_endpoint(struct net_device *dev, bool keep_profile,
index a638c3c9b79b55202d45dd398833b5720e9bc16c..60baf448f5482b7bd311bdfedb4418f129b30942 100644 (file)
@@ -133,14 +133,13 @@ static int ath6kl_set_host_app_area(struct ath6kl *ar)
        address = ath6kl_get_hi_item_addr(ar, HI_ITEM(hi_app_host_interest));
        address = TARG_VTOP(ar->target_type, address);
 
-       if (ath6kl_read_reg_diag(ar, &address, &data))
+       if (ath6kl_diag_read32(ar, address, &data))
                return -EIO;
 
        address = TARG_VTOP(ar->target_type, data);
        host_app_area.wmi_protocol_ver = WMI_PROTOCOL_VERSION;
-       if (ath6kl_access_datadiag(ar, address,
-                               (u8 *)&host_app_area,
-                               sizeof(struct host_app_area), false))
+       if (ath6kl_diag_write(ar, address, (u8 *) &host_app_area,
+                             sizeof(struct host_app_area)))
                return -EIO;
 
        return 0;
@@ -377,7 +376,7 @@ static void ath6kl_dump_target_assert_info(struct ath6kl *ar)
        address = TARG_VTOP(ar->target_type, address);
 
        /* read RAM location through diagnostic window */
-       status = ath6kl_read_reg_diag(ar, &address, &regdump_loc);
+       status = ath6kl_diag_read32(ar, address, &regdump_loc);
 
        if (status || !regdump_loc) {
                ath6kl_err("failed to get ptr to register dump area\n");
@@ -389,11 +388,8 @@ static void ath6kl_dump_target_assert_info(struct ath6kl *ar)
        regdump_loc = TARG_VTOP(ar->target_type, regdump_loc);
 
        /* fetch register dump data */
-       status = ath6kl_access_datadiag(ar,
-                                       regdump_loc,
-                                       (u8 *)&regdump_val[0],
-                                       REG_DUMP_COUNT_AR6003 * (sizeof(u32)),
-                                       true);
+       status = ath6kl_diag_read(ar, regdump_loc, (u8 *)&regdump_val[0],
+                                 REG_DUMP_COUNT_AR6003 * (sizeof(u32)));
 
        if (status) {
                ath6kl_err("failed to get register dump\n");
index 0c4f39c6c44f11d56661c409f5cd564b5da85261..e346f835e7793405b023316166d7e6b54118a6c1 100644 (file)
@@ -229,74 +229,84 @@ static int ath6kl_set_addrwin_reg(struct ath6kl *ar, u32 reg_addr, u32 addr)
 }
 
 /*
- * Read from the ATH6KL through its diagnostic window. No cooperation from
- * the Target is required for this.
+ * Read from the hardware through its diagnostic window. No cooperation
+ * from the firmware is required for this.
  */
-int ath6kl_read_reg_diag(struct ath6kl *ar, u32 *address, u32 *data)
+int ath6kl_diag_read32(struct ath6kl *ar, u32 address, u32 *value)
 {
-       int status;
+       int ret;
 
        /* set window register to start read cycle */
-       status = ath6kl_set_addrwin_reg(ar, WINDOW_READ_ADDR_ADDRESS,
-                                       *address);
-
-       if (status)
-               return status;
+       ret = ath6kl_set_addrwin_reg(ar, WINDOW_READ_ADDR_ADDRESS, address);
+       if (ret)
+               return ret;
 
        /* read the data */
-       status = hif_read_write_sync(ar, WINDOW_DATA_ADDRESS, (u8 *)data,
-                                    sizeof(u32), HIF_RD_SYNC_BYTE_INC);
-       if (status) {
-               ath6kl_err("failed to read from window data addr\n");
-               return status;
+       ret = hif_read_write_sync(ar, WINDOW_DATA_ADDRESS, (u8 *) value,
+                                 sizeof(*value), HIF_RD_SYNC_BYTE_INC);
+       if (ret) {
+               ath6kl_warn("failed to read32 through diagnose window: %d\n",
+                           ret);
+               return ret;
        }
 
-       return status;
+       return 0;
 }
 
-
 /*
  * Write to the ATH6KL through its diagnostic window. No cooperation from
  * the Target is required for this.
  */
-static int ath6kl_write_reg_diag(struct ath6kl *ar, u32 *address, u32 *data)
+static int ath6kl_diag_write32(struct ath6kl *ar, u32 address, u32 value)
 {
-       int status;
+       int ret;
 
        /* set write data */
-       status = hif_read_write_sync(ar, WINDOW_DATA_ADDRESS, (u8 *)data,
-                                    sizeof(u32), HIF_WR_SYNC_BYTE_INC);
-       if (status) {
-               ath6kl_err("failed to write 0x%x to window data addr\n", *data);
-               return status;
+       ret = hif_read_write_sync(ar, WINDOW_DATA_ADDRESS, (u8 *) &value,
+                                 sizeof(value), HIF_WR_SYNC_BYTE_INC);
+       if (ret) {
+               ath6kl_err("failed to write 0x%x during diagnose window to 0x%d\n",
+                          address, value);
+               return ret;
        }
 
        /* set window register, which starts the write cycle */
        return ath6kl_set_addrwin_reg(ar, WINDOW_WRITE_ADDR_ADDRESS,
-                                     *address);
+                                     address);
 }
 
-int ath6kl_access_datadiag(struct ath6kl *ar, u32 address,
-                          u8 *data, u32 length, bool read)
+int ath6kl_diag_read(struct ath6kl *ar, u32 address, void *data, u32 length)
 {
-       u32 count;
-       int status = 0;
+       u32 count, *buf = data;
+       int ret;
 
-       for (count = 0; count < length; count += 4, address += 4) {
-               if (read) {
-                       status = ath6kl_read_reg_diag(ar, &address,
-                                                     (u32 *) &data[count]);
-                       if (status)
-                               break;
-               } else {
-                       status = ath6kl_write_reg_diag(ar, &address,
-                                                      (u32 *) &data[count]);
-                       if (status)
-                               break;
-               }
+       if (WARN_ON(length % 4))
+               return -EINVAL;
+
+       for (count = 0; count < length / 4; count++, address += 4) {
+               ret = ath6kl_diag_read32(ar, address, &buf[count]);
+               if (ret)
+                       return ret;
        }
 
-       return status;
+       return 0;
+}
+
+int ath6kl_diag_write(struct ath6kl *ar, u32 address, void *data, u32 length)
+{
+       u32 count, *buf = data;
+       int ret;
+
+       if (WARN_ON(length % 4))
+               return -EINVAL;
+
+       for (count = 0; count < length / 4; count++, address += 4) {
+               ret = ath6kl_diag_write32(ar, address, buf[count]);
+               if (ret)
+                       return ret;
+       }
+
+       return 0;
 }
 
 /* FIXME: move to a better place, target.h? */
@@ -328,7 +338,7 @@ static void ath6kl_reset_device(struct ath6kl *ar, u32 target_type,
                break;
        }
 
-       status = ath6kl_write_reg_diag(ar, &address, &data);
+       status = ath6kl_diag_write32(ar, address, data);
 
        if (status)
                ath6kl_err("failed to reset target\n");