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: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0df828f670
commit
fe45332ed2
@ -228,7 +228,7 @@ static int iwmct_download_section(struct iwmct_priv *priv, const u8 *p_sec,
|
|||||||
hdr->cmd = cpu_to_le32(cmd);
|
hdr->cmd = cpu_to_le32(cmd);
|
||||||
/* send it down */
|
/* send it down */
|
||||||
/* TODO: add more proper sending and error checking */
|
/* 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) {
|
if (ret != 0) {
|
||||||
LOG_INFO(priv, FW_DOWNLOAD,
|
LOG_INFO(priv, FW_DOWNLOAD,
|
||||||
"iwmct_tx returned %d\n", ret);
|
"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));
|
LOG_HEXDUMP(FW_DOWNLOAD, parser->buf, sizeof(*hdr));
|
||||||
/* send it down */
|
/* send it down */
|
||||||
/* TODO: add more proper sending and error checking */
|
/* 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)
|
if (ret)
|
||||||
LOG_INFO(priv, FW_DOWNLOAD, "iwmct_tx returned %d", ret);
|
LOG_INFO(priv, FW_DOWNLOAD, "iwmct_tx returned %d", ret);
|
||||||
|
|
||||||
|
@ -196,9 +196,7 @@ struct iwmct_priv {
|
|||||||
struct list_head read_req_list;
|
struct list_head read_req_list;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern int iwmct_tx(struct iwmct_priv *priv, unsigned int addr,
|
extern int iwmct_tx(struct iwmct_priv *priv, void *src, int count);
|
||||||
void *src, int count);
|
|
||||||
|
|
||||||
extern int iwmct_fw_load(struct iwmct_priv *priv);
|
extern int iwmct_fw_load(struct iwmct_priv *priv);
|
||||||
|
|
||||||
extern void iwmct_dbg_init_params(struct iwmct_priv *drv);
|
extern void iwmct_dbg_init_params(struct iwmct_priv *drv);
|
||||||
|
@ -49,6 +49,20 @@ MODULE_LICENSE("GPL");
|
|||||||
MODULE_AUTHOR(DRIVER_COPYRIGHT);
|
MODULE_AUTHOR(DRIVER_COPYRIGHT);
|
||||||
MODULE_FIRMWARE(FW_NAME(FW_API_VER));
|
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
|
* This workers main task is to wait for OP_OPR_ALIVE
|
||||||
* from TOP FW until ALIVE_MSG_TIMOUT timeout is elapsed.
|
* 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);
|
memcpy(buf, cmd, len);
|
||||||
|
ret = iwmct_tx(priv, buf, FW_HCMD_BLOCK_SIZE);
|
||||||
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);
|
|
||||||
|
|
||||||
kfree(buf);
|
kfree(buf);
|
||||||
return ret;
|
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)
|
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) {
|
if (barker & BARKER_DNLOAD_SYNC_MSK) {
|
||||||
/* Send the same barker back */
|
/* Send the same barker back */
|
||||||
ret = sdio_memcpy_toio(priv->func, IWMC_SDIO_DATA_ADDR,
|
ret = __iwmct_tx(priv, buf, iosize);
|
||||||
buf, iosize);
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
LOG_ERROR(priv, IRQ,
|
LOG_ERROR(priv, IRQ,
|
||||||
"error %d echoing barker\n", ret);
|
"error %d echoing barker\n", ret);
|
||||||
|
Loading…
Reference in New Issue
Block a user