Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fe45332e authored by Tomas Winkler's avatar Tomas Winkler Committed by David S. Miller
Browse files

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: default avatarTomas Winkler <tomas.winkler@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0df828f6
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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);

+1 −3
Original line number Diff line number Diff line
@@ -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);
+16 −18
Original line number Diff line number Diff line
@@ -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);