提交 fe45332e 编写于 作者: T Tomas Winkler 提交者: David S. Miller

iwmc3200top: simplify imwct_tx

1. remove address argument since we use same address IWMC_SDIO_DATA_ADDR in
    all cases
2. add __iwmct_tx - non locking tx function for already locked contexts
Signed-off-by: NTomas Winkler <tomas.winkler@intel.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 0df828f6
......@@ -228,7 +228,7 @@ static int iwmct_download_section(struct iwmct_priv *priv, const u8 *p_sec,
hdr->cmd = cpu_to_le32(cmd);
/* send it down */
/* TODO: add more proper sending and error checking */
ret = iwmct_tx(priv, 0, parser->buf, trans_size);
ret = iwmct_tx(priv, parser->buf, trans_size);
if (ret != 0) {
LOG_INFO(priv, FW_DOWNLOAD,
"iwmct_tx returned %d\n", ret);
......@@ -280,7 +280,7 @@ static int iwmct_kick_fw(struct iwmct_priv *priv, bool jump)
LOG_HEXDUMP(FW_DOWNLOAD, parser->buf, sizeof(*hdr));
/* send it down */
/* TODO: add more proper sending and error checking */
ret = iwmct_tx(priv, 0, parser->buf, IWMC_SDIO_BLK_SIZE);
ret = iwmct_tx(priv, parser->buf, IWMC_SDIO_BLK_SIZE);
if (ret)
LOG_INFO(priv, FW_DOWNLOAD, "iwmct_tx returned %d", ret);
......
......@@ -196,9 +196,7 @@ struct iwmct_priv {
struct list_head read_req_list;
};
extern int iwmct_tx(struct iwmct_priv *priv, unsigned int addr,
void *src, int count);
extern int iwmct_tx(struct iwmct_priv *priv, void *src, int count);
extern int iwmct_fw_load(struct iwmct_priv *priv);
extern void iwmct_dbg_init_params(struct iwmct_priv *drv);
......
......@@ -49,6 +49,20 @@ MODULE_LICENSE("GPL");
MODULE_AUTHOR(DRIVER_COPYRIGHT);
MODULE_FIRMWARE(FW_NAME(FW_API_VER));
static inline int __iwmct_tx(struct iwmct_priv *priv, void *src, int count)
{
return sdio_memcpy_toio(priv->func, IWMC_SDIO_DATA_ADDR, src, count);
}
int iwmct_tx(struct iwmct_priv *priv, void *src, int count)
{
int ret;
sdio_claim_host(priv->func);
ret = __iwmct_tx(priv, src, count);
sdio_release_host(priv->func);
return ret;
}
/*
* This workers main task is to wait for OP_OPR_ALIVE
* from TOP FW until ALIVE_MSG_TIMOUT timeout is elapsed.
......@@ -158,27 +172,12 @@ int iwmct_send_hcmd(struct iwmct_priv *priv, u8 *cmd, u16 len)
}
memcpy(buf, cmd, len);
sdio_claim_host(priv->func);
ret = sdio_memcpy_toio(priv->func, IWMC_SDIO_DATA_ADDR, buf,
FW_HCMD_BLOCK_SIZE);
sdio_release_host(priv->func);
ret = iwmct_tx(priv, buf, FW_HCMD_BLOCK_SIZE);
kfree(buf);
return ret;
}
int iwmct_tx(struct iwmct_priv *priv, unsigned int addr,
void *src, int count)
{
int ret;
sdio_claim_host(priv->func);
ret = sdio_memcpy_toio(priv->func, addr, src, count);
sdio_release_host(priv->func);
return ret;
}
static void iwmct_irq_read_worker(struct work_struct *ws)
{
......@@ -273,8 +272,7 @@ static void iwmct_irq_read_worker(struct work_struct *ws)
if (barker & BARKER_DNLOAD_SYNC_MSK) {
/* Send the same barker back */
ret = sdio_memcpy_toio(priv->func, IWMC_SDIO_DATA_ADDR,
buf, iosize);
ret = __iwmct_tx(priv, buf, iosize);
if (ret) {
LOG_ERROR(priv, IRQ,
"error %d echoing barker\n", ret);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册