git.samba.org
/
sfrench
/
cifs-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
mwifiex: few more register offset entries for sdio card structure
[sfrench/cifs-2.6.git]
/
drivers
/
net
/
wireless
/
mwifiex
/
sdio.c
diff --git
a/drivers/net/wireless/mwifiex/sdio.c
b/drivers/net/wireless/mwifiex/sdio.c
index 1770fa3fc1e621fc2965cde14581c337c1691d98..a22e9a91f2f2d2d9bf0765641c5cb94c709f277b 100644
(file)
--- a/
drivers/net/wireless/mwifiex/sdio.c
+++ b/
drivers/net/wireless/mwifiex/sdio.c
@@
-448,28
+448,31
@@
static int mwifiex_pm_wakeup_card_complete(struct mwifiex_adapter *adapter)
static int mwifiex_init_sdio_new_mode(struct mwifiex_adapter *adapter)
{
u8 reg;
static int mwifiex_init_sdio_new_mode(struct mwifiex_adapter *adapter)
{
u8 reg;
+ struct sdio_mmc_card *card = adapter->card;
adapter->ioport = MEM_PORT;
/* enable sdio new mode */
adapter->ioport = MEM_PORT;
/* enable sdio new mode */
- if (mwifiex_read_reg(adapter,
CARD_CONFIG_2_1_REG
, ®))
+ if (mwifiex_read_reg(adapter,
card->reg->card_cfg_2_1_reg
, ®))
return -1;
return -1;
- if (mwifiex_write_reg(adapter,
CARD_CONFIG_2_1_REG
,
+ if (mwifiex_write_reg(adapter,
card->reg->card_cfg_2_1_reg
,
reg | CMD53_NEW_MODE))
return -1;
/* Configure cmd port and enable reading rx length from the register */
reg | CMD53_NEW_MODE))
return -1;
/* Configure cmd port and enable reading rx length from the register */
- if (mwifiex_read_reg(adapter,
CMD_CONFIG
_0, ®))
+ if (mwifiex_read_reg(adapter,
card->reg->cmd_cfg
_0, ®))
return -1;
return -1;
- if (mwifiex_write_reg(adapter, CMD_CONFIG_0, reg | CMD_PORT_RD_LEN_EN))
+ if (mwifiex_write_reg(adapter, card->reg->cmd_cfg_0,
+ reg | CMD_PORT_RD_LEN_EN))
return -1;
/* Enable Dnld/Upld ready auto reset for cmd port after cmd53 is
* completed
*/
return -1;
/* Enable Dnld/Upld ready auto reset for cmd port after cmd53 is
* completed
*/
- if (mwifiex_read_reg(adapter,
CMD_CONFIG
_1, ®))
+ if (mwifiex_read_reg(adapter,
card->reg->cmd_cfg
_1, ®))
return -1;
return -1;
- if (mwifiex_write_reg(adapter, CMD_CONFIG_1, reg | CMD_PORT_AUTO_EN))
+ if (mwifiex_write_reg(adapter, card->reg->cmd_cfg_1,
+ reg | CMD_PORT_AUTO_EN))
return -1;
return 0;
return -1;
return 0;
@@
-496,17
+499,17
@@
static int mwifiex_init_sdio_ioport(struct mwifiex_adapter *adapter)
}
/* Read the IO port */
}
/* Read the IO port */
- if (!mwifiex_read_reg(adapter,
IO_PORT_0_REG
, ®))
+ if (!mwifiex_read_reg(adapter,
card->reg->io_port_0_reg
, ®))
adapter->ioport |= (reg & 0xff);
else
return -1;
adapter->ioport |= (reg & 0xff);
else
return -1;
- if (!mwifiex_read_reg(adapter,
IO_PORT_1_REG
, ®))
+ if (!mwifiex_read_reg(adapter,
card->reg->io_port_1_reg
, ®))
adapter->ioport |= ((reg & 0xff) << 8);
else
return -1;
adapter->ioport |= ((reg & 0xff) << 8);
else
return -1;
- if (!mwifiex_read_reg(adapter,
IO_PORT_2_REG
, ®))
+ if (!mwifiex_read_reg(adapter,
card->reg->io_port_2_reg
, ®))
adapter->ioport |= ((reg & 0xff) << 16);
else
return -1;
adapter->ioport |= ((reg & 0xff) << 16);
else
return -1;
@@
-514,8
+517,8
@@
cont:
pr_debug("info: SDIO FUNC1 IO port: %#x\n", adapter->ioport);
/* Set Host interrupt reset to read to clear */
pr_debug("info: SDIO FUNC1 IO port: %#x\n", adapter->ioport);
/* Set Host interrupt reset to read to clear */
- if (!mwifiex_read_reg(adapter,
HOST_INT_RSR_REG
, ®))
- mwifiex_write_reg(adapter,
HOST_INT_RSR_REG
,
+ if (!mwifiex_read_reg(adapter,
card->reg->host_int_rsr_reg
, ®))
+ mwifiex_write_reg(adapter,
card->reg->host_int_rsr_reg
,
reg | card->reg->sdio_int_mask);
else
return -1;
reg | card->reg->sdio_int_mask);
else
return -1;
@@
-622,22
+625,15
@@
static int mwifiex_get_wr_port_data(struct mwifiex_adapter *adapter, u32 *port)
dev_dbg(adapter->dev, "data: mp_wr_bitmap=0x%08x\n", wr_bitmap);
dev_dbg(adapter->dev, "data: mp_wr_bitmap=0x%08x\n", wr_bitmap);
- if (card->supports_sdio_new_mode &&
- !(wr_bitmap & reg->data_port_mask)) {
+ if (!(wr_bitmap & card->mp_data_port_mask)) {
adapter->data_sent = true;
return -EBUSY;
adapter->data_sent = true;
return -EBUSY;
- } else if (!card->supports_sdio_new_mode &&
- !(wr_bitmap & card->mp_data_port_mask)) {
- return -1;
}
if (card->mp_wr_bitmap & (1 << card->curr_wr_port)) {
card->mp_wr_bitmap &= (u32) (~(1 << card->curr_wr_port));
*port = card->curr_wr_port;
}
if (card->mp_wr_bitmap & (1 << card->curr_wr_port)) {
card->mp_wr_bitmap &= (u32) (~(1 << card->curr_wr_port));
*port = card->curr_wr_port;
- if (((card->supports_sdio_new_mode) &&
- (++card->curr_wr_port == card->max_ports)) ||
- ((!card->supports_sdio_new_mode) &&
- (++card->curr_wr_port == card->mp_end_port)))
+ if (++card->curr_wr_port == card->mp_end_port)
card->curr_wr_port = reg->start_wr_port;
} else {
adapter->data_sent = true;
card->curr_wr_port = reg->start_wr_port;
} else {
adapter->data_sent = true;
@@
-715,7
+711,7
@@
static void mwifiex_sdio_disable_host_int(struct mwifiex_adapter *adapter)
struct sdio_func *func = card->func;
sdio_claim_host(func);
struct sdio_func *func = card->func;
sdio_claim_host(func);
- mwifiex_write_reg_locked(func,
HOST_INT_MASK_REG
, 0);
+ mwifiex_write_reg_locked(func,
card->reg->host_int_mask_reg
, 0);
sdio_release_irq(func);
sdio_release_host(func);
}
sdio_release_irq(func);
sdio_release_host(func);
}
@@
-736,7
+732,7
@@
static void mwifiex_interrupt_status(struct mwifiex_adapter *adapter)
return;
}
return;
}
- sdio_ireg = card->mp_regs[
HOST_INTSTATUS_REG
];
+ sdio_ireg = card->mp_regs[
card->reg->host_int_status_reg
];
if (sdio_ireg) {
/*
* DN_LD_HOST_INT_STATUS and/or UP_LD_HOST_INT_STATUS
if (sdio_ireg) {
/*
* DN_LD_HOST_INT_STATUS and/or UP_LD_HOST_INT_STATUS
@@
-801,7
+797,7
@@
static int mwifiex_sdio_enable_host_int(struct mwifiex_adapter *adapter)
}
/* Simply write the mask to the register */
}
/* Simply write the mask to the register */
- ret = mwifiex_write_reg_locked(func,
HOST_INT_MASK_REG
,
+ ret = mwifiex_write_reg_locked(func,
card->reg->host_int_mask_reg
,
card->reg->host_int_enable);
if (ret) {
dev_err(adapter->dev, "enable host interrupt failed\n");
card->reg->host_int_enable);
if (ret) {
dev_err(adapter->dev, "enable host interrupt failed\n");
@@
-1055,7
+1051,13
@@
static int mwifiex_decode_rx_packet(struct mwifiex_adapter *adapter,
switch (upld_typ) {
case MWIFIEX_TYPE_DATA:
dev_dbg(adapter->dev, "info: --- Rx: Data packet ---\n");
switch (upld_typ) {
case MWIFIEX_TYPE_DATA:
dev_dbg(adapter->dev, "info: --- Rx: Data packet ---\n");
- mwifiex_handle_rx_packet(adapter, skb);
+ if (adapter->rx_work_enabled) {
+ skb_queue_tail(&adapter->rx_data_q, skb);
+ adapter->data_received = true;
+ atomic_inc(&adapter->rx_pending);
+ } else {
+ mwifiex_handle_rx_packet(adapter, skb);
+ }
break;
case MWIFIEX_TYPE_CMD:
break;
case MWIFIEX_TYPE_CMD:
@@
-1335,8
+1337,8
@@
static int mwifiex_process_int_status(struct mwifiex_adapter *adapter)
u32 pkt_type;
/* read the len of control packet */
u32 pkt_type;
/* read the len of control packet */
- rx_len = card->mp_regs[
CMD_RD_LEN
_1] << 8;
- rx_len |= (u16)
card->mp_regs[CMD_RD_LEN
_0];
+ rx_len = card->mp_regs[
reg->cmd_rd_len
_1] << 8;
+ rx_len |= (u16)
card->mp_regs[reg->cmd_rd_len
_0];
rx_blocks = DIV_ROUND_UP(rx_len, MWIFIEX_SDIO_BLOCK_SIZE);
if (rx_len <= INTF_HEADER_LEN ||
(rx_blocks * MWIFIEX_SDIO_BLOCK_SIZE) >
rx_blocks = DIV_ROUND_UP(rx_len, MWIFIEX_SDIO_BLOCK_SIZE);
if (rx_len <= INTF_HEADER_LEN ||
(rx_blocks * MWIFIEX_SDIO_BLOCK_SIZE) >
@@
-1527,8
+1529,7
@@
static int mwifiex_host_to_card_mp_aggr(struct mwifiex_adapter *adapter,
__func__);
if (MP_TX_AGGR_IN_PROGRESS(card)) {
__func__);
if (MP_TX_AGGR_IN_PROGRESS(card)) {
- if (!mp_tx_aggr_port_limit_reached(card) &&
- MP_TX_AGGR_BUF_HAS_ROOM(card, pkt_len)) {
+ if (MP_TX_AGGR_BUF_HAS_ROOM(card, pkt_len)) {
f_precopy_cur_buf = 1;
if (!(card->mp_wr_bitmap &
f_precopy_cur_buf = 1;
if (!(card->mp_wr_bitmap &
@@
-1540,8
+1541,7
@@
static int mwifiex_host_to_card_mp_aggr(struct mwifiex_adapter *adapter,
/* No room in Aggr buf, send it */
f_send_aggr_buf = 1;
/* No room in Aggr buf, send it */
f_send_aggr_buf = 1;
- if (mp_tx_aggr_port_limit_reached(card) ||
- !(card->mp_wr_bitmap &
+ if (!(card->mp_wr_bitmap &
(1 << card->curr_wr_port)))
f_send_cur_buf = 1;
else
(1 << card->curr_wr_port)))
f_send_cur_buf = 1;
else
@@
-1826,11
+1826,11
@@
static int mwifiex_init_sdio(struct mwifiex_adapter *adapter)
sdio_set_drvdata(card->func, card);
/*
sdio_set_drvdata(card->func, card);
/*
- * Read the
HOST_INT_STATUS_REG
for ACK the first interrupt got
+ * Read the
host_int_status_reg
for ACK the first interrupt got
* from the bootloader. If we don't do this we get a interrupt
* as soon as we register the irq.
*/
* from the bootloader. If we don't do this we get a interrupt
* as soon as we register the irq.
*/
- mwifiex_read_reg(adapter,
HOST_INTSTATUS_REG
, &sdio_ireg);
+ mwifiex_read_reg(adapter,
card->reg->host_int_status_reg
, &sdio_ireg);
/* Get SDIO ioport */
mwifiex_init_sdio_ioport(adapter);
/* Get SDIO ioport */
mwifiex_init_sdio_ioport(adapter);