Lines Matching full:card

528  * The device node is saved in card->plt_of_node.
546 * the card structure, enables SDIO function number and initiates the
554 struct sdio_mmc_card *card = NULL; in mwifiex_sdio_probe() local
559 card = devm_kzalloc(&func->dev, sizeof(*card), GFP_KERNEL); in mwifiex_sdio_probe()
560 if (!card) in mwifiex_sdio_probe()
563 init_completion(&card->fw_done); in mwifiex_sdio_probe()
565 card->func = func; in mwifiex_sdio_probe()
567 func->card->quirks |= MMC_QUIRK_BLKSZ_FOR_BYTE_MODE; in mwifiex_sdio_probe()
572 card->firmware = data->firmware; in mwifiex_sdio_probe()
573 card->firmware_sdiouart = data->firmware_sdiouart; in mwifiex_sdio_probe()
574 card->reg = data->reg; in mwifiex_sdio_probe()
575 card->max_ports = data->max_ports; in mwifiex_sdio_probe()
576 card->mp_agg_pkt_limit = data->mp_agg_pkt_limit; in mwifiex_sdio_probe()
577 card->supports_sdio_new_mode = data->supports_sdio_new_mode; in mwifiex_sdio_probe()
578 card->has_control_mask = data->has_control_mask; in mwifiex_sdio_probe()
579 card->tx_buf_size = data->tx_buf_size; in mwifiex_sdio_probe()
580 card->mp_tx_agg_buf_size = data->mp_tx_agg_buf_size; in mwifiex_sdio_probe()
581 card->mp_rx_agg_buf_size = data->mp_rx_agg_buf_size; in mwifiex_sdio_probe()
582 card->can_dump_fw = data->can_dump_fw; in mwifiex_sdio_probe()
583 card->fw_dump_enh = data->fw_dump_enh; in mwifiex_sdio_probe()
584 card->can_auto_tdls = data->can_auto_tdls; in mwifiex_sdio_probe()
585 card->can_ext_scan = data->can_ext_scan; in mwifiex_sdio_probe()
586 card->fw_ready_extra_delay = data->fw_ready_extra_delay; in mwifiex_sdio_probe()
587 card->host_mlme = data->host_mlme; in mwifiex_sdio_probe()
588 INIT_WORK(&card->work, mwifiex_sdio_work); in mwifiex_sdio_probe()
607 ret = mwifiex_add_card(card, &card->fw_done, &sdio_ops, in mwifiex_sdio_probe()
610 dev_err(&func->dev, "add card failed\n"); in mwifiex_sdio_probe()
629 * methods. Failing that the kernel simply removes the whole card.
637 struct sdio_mmc_card *card; in mwifiex_sdio_resume() local
640 card = sdio_get_drvdata(func); in mwifiex_sdio_resume()
641 if (!card || !card->adapter) { in mwifiex_sdio_resume()
642 dev_err(dev, "resume: invalid card or adapter\n"); in mwifiex_sdio_resume()
646 adapter = card->adapter; in mwifiex_sdio_resume()
665 /* Write data into SDIO card register. Caller claims SDIO device. */
675 /* This function writes data into SDIO card register.
680 struct sdio_mmc_card *card = adapter->card; in mwifiex_write_reg() local
683 sdio_claim_host(card->func); in mwifiex_write_reg()
684 ret = mwifiex_write_reg_locked(card->func, reg, data); in mwifiex_write_reg()
685 sdio_release_host(card->func); in mwifiex_write_reg()
690 /* This function reads data from SDIO card register.
695 struct sdio_mmc_card *card = adapter->card; in mwifiex_read_reg() local
699 sdio_claim_host(card->func); in mwifiex_read_reg()
700 val = sdio_readb(card->func, reg, &ret); in mwifiex_read_reg()
701 sdio_release_host(card->func); in mwifiex_read_reg()
708 /* This function writes multiple data into SDIO card memory.
716 struct sdio_mmc_card *card = adapter->card; in mwifiex_write_data_sync() local
733 sdio_claim_host(card->func); in mwifiex_write_data_sync()
735 ret = sdio_writesb(card->func, ioport, buffer, blk_cnt * blk_size); in mwifiex_write_data_sync()
737 sdio_release_host(card->func); in mwifiex_write_data_sync()
742 /* This function reads multiple data from SDIO card memory.
747 struct sdio_mmc_card *card = adapter->card; in mwifiex_read_data_sync() local
757 sdio_claim_host(card->func); in mwifiex_read_data_sync()
759 ret = sdio_readsb(card->func, buffer, ioport, blk_cnt * blk_size); in mwifiex_read_data_sync()
762 sdio_release_host(card->func); in mwifiex_read_data_sync()
772 struct sdio_mmc_card *card = adapter->card; in mwifiex_sdio_read_fw_status() local
773 const struct mwifiex_sdio_card_reg *reg = card->reg; in mwifiex_sdio_read_fw_status()
786 /* This function checks the firmware status in card.
791 struct sdio_mmc_card *card = adapter->card; in mwifiex_check_fw_status() local
809 if (card->fw_ready_extra_delay && in mwifiex_check_fw_status()
825 struct sdio_mmc_card *card = adapter->card; in mwifiex_check_winner_status() local
827 if (mwifiex_read_reg(adapter, card->reg->status_reg_0, &winner)) in mwifiex_check_winner_status()
841 * This function removes the interface and frees up the card structure.
846 struct sdio_mmc_card *card; in mwifiex_sdio_remove() local
852 card = sdio_get_drvdata(func); in mwifiex_sdio_remove()
853 if (!card) in mwifiex_sdio_remove()
856 wait_for_completion(&card->fw_done); in mwifiex_sdio_remove()
858 adapter = card->adapter; in mwifiex_sdio_remove()
882 * methods. Failing that the kernel simply removes the whole card.
890 struct sdio_mmc_card *card; in mwifiex_sdio_suspend() local
904 card = sdio_get_drvdata(func); in mwifiex_sdio_suspend()
905 if (!card) { in mwifiex_sdio_suspend()
906 dev_err(dev, "suspend: invalid card\n"); in mwifiex_sdio_suspend()
911 wait_for_completion(&card->fw_done); in mwifiex_sdio_suspend()
913 adapter = card->adapter; in mwifiex_sdio_suspend()
947 struct sdio_mmc_card *card; in mwifiex_sdio_coredump() local
949 card = sdio_get_drvdata(func); in mwifiex_sdio_coredump()
951 &card->work_flags)) in mwifiex_sdio_coredump()
952 schedule_work(&card->work); in mwifiex_sdio_coredump()
999 * This function wakes up the card.
1001 * A host power up command is written to the card configuration
1002 * register to wake up the card.
1013 * This function is called after the card has woken up.
1015 * The card configuration register is reset.
1028 struct sdio_mmc_card *card = adapter->card; in mwifiex_sdio_dnld_fw() local
1031 sdio_claim_host(card->func); in mwifiex_sdio_dnld_fw()
1033 sdio_release_host(card->func); in mwifiex_sdio_dnld_fw()
1045 struct sdio_mmc_card *card = adapter->card; in mwifiex_init_sdio_new_mode() local
1050 if (mwifiex_read_reg(adapter, card->reg->card_cfg_2_1_reg, &reg)) in mwifiex_init_sdio_new_mode()
1052 if (mwifiex_write_reg(adapter, card->reg->card_cfg_2_1_reg, in mwifiex_init_sdio_new_mode()
1057 if (mwifiex_read_reg(adapter, card->reg->cmd_cfg_0, &reg)) in mwifiex_init_sdio_new_mode()
1059 if (mwifiex_write_reg(adapter, card->reg->cmd_cfg_0, in mwifiex_init_sdio_new_mode()
1066 if (mwifiex_read_reg(adapter, card->reg->cmd_cfg_1, &reg)) in mwifiex_init_sdio_new_mode()
1068 if (mwifiex_write_reg(adapter, card->reg->cmd_cfg_1, in mwifiex_init_sdio_new_mode()
1085 struct sdio_mmc_card *card = adapter->card; in mwifiex_init_sdio_ioport() local
1089 if (card->supports_sdio_new_mode) { in mwifiex_init_sdio_ioport()
1096 if (!mwifiex_read_reg(adapter, card->reg->io_port_0_reg, &reg)) in mwifiex_init_sdio_ioport()
1101 if (!mwifiex_read_reg(adapter, card->reg->io_port_1_reg, &reg)) in mwifiex_init_sdio_ioport()
1106 if (!mwifiex_read_reg(adapter, card->reg->io_port_2_reg, &reg)) in mwifiex_init_sdio_ioport()
1115 if (mwifiex_read_reg(adapter, card->reg->host_int_rsr_reg, &reg)) in mwifiex_init_sdio_ioport()
1117 if (mwifiex_write_reg(adapter, card->reg->host_int_rsr_reg, in mwifiex_init_sdio_ioport()
1118 reg | card->reg->sdio_int_mask)) in mwifiex_init_sdio_ioport()
1122 if (mwifiex_read_reg(adapter, card->reg->card_misc_cfg_reg, &reg)) in mwifiex_init_sdio_ioport()
1124 if (mwifiex_write_reg(adapter, card->reg->card_misc_cfg_reg, in mwifiex_init_sdio_ioport()
1132 * This function sends data to the card.
1170 struct sdio_mmc_card *card = adapter->card; in mwifiex_get_rd_port() local
1171 const struct mwifiex_sdio_card_reg *reg = card->reg; in mwifiex_get_rd_port()
1172 u32 rd_bitmap = card->mp_rd_bitmap; in mwifiex_get_rd_port()
1177 if (card->supports_sdio_new_mode) { in mwifiex_get_rd_port()
1185 if ((card->has_control_mask) && in mwifiex_get_rd_port()
1186 (card->mp_rd_bitmap & CTRL_PORT_MASK)) { in mwifiex_get_rd_port()
1187 card->mp_rd_bitmap &= (u32) (~CTRL_PORT_MASK); in mwifiex_get_rd_port()
1191 *port, card->mp_rd_bitmap); in mwifiex_get_rd_port()
1195 if (!(card->mp_rd_bitmap & (1 << card->curr_rd_port))) in mwifiex_get_rd_port()
1199 card->mp_rd_bitmap &= (u32)(~(1 << card->curr_rd_port)); in mwifiex_get_rd_port()
1200 *port = card->curr_rd_port; in mwifiex_get_rd_port()
1202 if (++card->curr_rd_port == card->max_ports) in mwifiex_get_rd_port()
1203 card->curr_rd_port = reg->start_rd_port; in mwifiex_get_rd_port()
1207 *port, rd_bitmap, card->mp_rd_bitmap); in mwifiex_get_rd_port()
1221 struct sdio_mmc_card *card = adapter->card; in mwifiex_get_wr_port_data() local
1222 const struct mwifiex_sdio_card_reg *reg = card->reg; in mwifiex_get_wr_port_data()
1223 u32 wr_bitmap = card->mp_wr_bitmap; in mwifiex_get_wr_port_data()
1228 if (!(wr_bitmap & card->mp_data_port_mask)) { in mwifiex_get_wr_port_data()
1233 if (card->mp_wr_bitmap & (1 << card->curr_wr_port)) { in mwifiex_get_wr_port_data()
1234 card->mp_wr_bitmap &= (u32) (~(1 << card->curr_wr_port)); in mwifiex_get_wr_port_data()
1235 *port = card->curr_wr_port; in mwifiex_get_wr_port_data()
1236 if (++card->curr_wr_port == card->mp_end_port) in mwifiex_get_wr_port_data()
1237 card->curr_wr_port = reg->start_wr_port; in mwifiex_get_wr_port_data()
1243 if ((card->has_control_mask) && (*port == CTRL_PORT)) { in mwifiex_get_wr_port_data()
1246 *port, card->curr_wr_port, wr_bitmap, in mwifiex_get_wr_port_data()
1247 card->mp_wr_bitmap); in mwifiex_get_wr_port_data()
1253 *port, wr_bitmap, card->mp_wr_bitmap); in mwifiex_get_wr_port_data()
1259 * This function polls the card status.
1264 struct sdio_mmc_card *card = adapter->card; in mwifiex_sdio_poll_card_status() local
1269 if (mwifiex_read_reg(adapter, card->reg->poll_reg, &cs)) in mwifiex_sdio_poll_card_status()
1278 "poll card status failed, tries = %d\n", tries); in mwifiex_sdio_poll_card_status()
1287 * written back to the card host interrupt mask register.
1291 struct sdio_mmc_card *card = adapter->card; in mwifiex_sdio_disable_host_int() local
1292 struct sdio_func *func = card->func; in mwifiex_sdio_disable_host_int()
1295 mwifiex_write_reg_locked(func, card->reg->host_int_mask_reg, 0); in mwifiex_sdio_disable_host_int()
1301 * This function reads the interrupt status from card.
1305 struct sdio_mmc_card *card = adapter->card; in mwifiex_interrupt_status() local
1309 if (mwifiex_read_data_sync(adapter, card->mp_regs, in mwifiex_interrupt_status()
1310 card->reg->max_mp_regs, in mwifiex_interrupt_status()
1316 sdio_ireg = card->mp_regs[card->reg->host_int_status_reg]; in mwifiex_interrupt_status()
1343 struct sdio_mmc_card *card; in mwifiex_sdio_interrupt() local
1345 card = sdio_get_drvdata(func); in mwifiex_sdio_interrupt()
1346 if (!card || !card->adapter) { in mwifiex_sdio_interrupt()
1347 pr_err("int: func=%p card=%p adapter=%p\n", in mwifiex_sdio_interrupt()
1348 func, card, card ? card->adapter : NULL); in mwifiex_sdio_interrupt()
1351 adapter = card->adapter; in mwifiex_sdio_interrupt()
1363 * The host interrupt enable mask is written to the card
1368 struct sdio_mmc_card *card = adapter->card; in mwifiex_sdio_enable_host_int() local
1369 struct sdio_func *func = card->func; in mwifiex_sdio_enable_host_int()
1383 ret = mwifiex_write_reg_locked(func, card->reg->host_int_mask_reg, in mwifiex_sdio_enable_host_int()
1384 card->reg->host_int_enable); in mwifiex_sdio_enable_host_int()
1397 * This function sends a data buffer to the card.
1435 * This function downloads the firmware to the card.
1437 * Firmware is downloaded to the card in blocks. Every block download
1444 struct sdio_mmc_card *card = adapter->card; in mwifiex_prog_fw_w_helper() local
1445 const struct mwifiex_sdio_card_reg *reg = card->reg; in mwifiex_prog_fw_w_helper()
1471 sdio_claim_host(card->func); in mwifiex_prog_fw_w_helper()
1582 sdio_release_host(card->func); in mwifiex_prog_fw_w_helper()
1739 * This function transfers received packets from card to driver, performing
1750 struct sdio_mmc_card *card = adapter->card; in mwifiex_sdio_card_to_host_mp_aggr() local
1760 if ((card->has_control_mask) && (port == CTRL_PORT)) { in mwifiex_sdio_card_to_host_mp_aggr()
1770 if (!card->mpa_rx.enabled) { in mwifiex_sdio_card_to_host_mp_aggr()
1779 if ((!card->has_control_mask && (card->mp_rd_bitmap & in mwifiex_sdio_card_to_host_mp_aggr()
1780 card->reg->data_port_mask)) || in mwifiex_sdio_card_to_host_mp_aggr()
1781 (card->has_control_mask && (card->mp_rd_bitmap & in mwifiex_sdio_card_to_host_mp_aggr()
1787 if (MP_RX_AGGR_IN_PROGRESS(card)) { in mwifiex_sdio_card_to_host_mp_aggr()
1788 if (MP_RX_AGGR_BUF_HAS_ROOM(card, rx_len)) { in mwifiex_sdio_card_to_host_mp_aggr()
1805 if (MP_RX_AGGR_IN_PROGRESS(card)) { in mwifiex_sdio_card_to_host_mp_aggr()
1807 if (MP_RX_AGGR_BUF_HAS_ROOM(card, rx_len)) in mwifiex_sdio_card_to_host_mp_aggr()
1821 mp_rx_aggr_setup(card, rx_len, port); in mwifiex_sdio_card_to_host_mp_aggr()
1823 if (MP_RX_AGGR_PKT_LIMIT_REACHED(card) || in mwifiex_sdio_card_to_host_mp_aggr()
1824 mp_rx_aggr_port_limit_reached(card)) { in mwifiex_sdio_card_to_host_mp_aggr()
1837 card->mpa_rx.pkt_cnt); in mwifiex_sdio_card_to_host_mp_aggr()
1839 if (card->supports_sdio_new_mode) { in mwifiex_sdio_card_to_host_mp_aggr()
1843 for (i = 0, port_count = 0; i < card->max_ports; i++) in mwifiex_sdio_card_to_host_mp_aggr()
1844 if (card->mpa_rx.ports & BIT(i)) in mwifiex_sdio_card_to_host_mp_aggr()
1852 (port_count << 8)) + card->mpa_rx.start_port; in mwifiex_sdio_card_to_host_mp_aggr()
1855 (card->mpa_rx.ports << 4)) + in mwifiex_sdio_card_to_host_mp_aggr()
1856 card->mpa_rx.start_port; in mwifiex_sdio_card_to_host_mp_aggr()
1859 if (card->mpa_rx.pkt_cnt == 1) in mwifiex_sdio_card_to_host_mp_aggr()
1860 mport = adapter->ioport + card->mpa_rx.start_port; in mwifiex_sdio_card_to_host_mp_aggr()
1862 if (mwifiex_read_data_sync(adapter, card->mpa_rx.buf, in mwifiex_sdio_card_to_host_mp_aggr()
1863 card->mpa_rx.buf_len, mport, 1)) in mwifiex_sdio_card_to_host_mp_aggr()
1866 curr_ptr = card->mpa_rx.buf; in mwifiex_sdio_card_to_host_mp_aggr()
1868 for (pind = 0; pind < card->mpa_rx.pkt_cnt; pind++) { in mwifiex_sdio_card_to_host_mp_aggr()
1869 u32 *len_arr = card->mpa_rx.len_arr; in mwifiex_sdio_card_to_host_mp_aggr()
1911 MP_RX_AGGR_BUF_RESET(card); in mwifiex_sdio_card_to_host_mp_aggr()
1925 card->mpa_rx.buf, rx_len, in mwifiex_sdio_card_to_host_mp_aggr()
1952 mp_rx_aggr_setup(card, rx_len, port); in mwifiex_sdio_card_to_host_mp_aggr()
1957 if (MP_RX_AGGR_IN_PROGRESS(card)) in mwifiex_sdio_card_to_host_mp_aggr()
1958 MP_RX_AGGR_BUF_RESET(card); in mwifiex_sdio_card_to_host_mp_aggr()
1979 * In case of Rx packets received, the packets are uploaded from card to
1984 struct sdio_mmc_card *card = adapter->card; in mwifiex_process_int_status() local
1985 const struct mwifiex_sdio_card_reg *reg = card->reg; in mwifiex_process_int_status()
2014 rx_len = card->mp_regs[reg->cmd_rd_len_1] << 8; in mwifiex_process_int_status()
2015 rx_len |= (u16)card->mp_regs[reg->cmd_rd_len_0]; in mwifiex_process_int_status()
2049 bitmap = (u32) card->mp_regs[reg->wr_bitmap_l]; in mwifiex_process_int_status()
2050 bitmap |= ((u32) card->mp_regs[reg->wr_bitmap_u]) << 8; in mwifiex_process_int_status()
2051 if (card->supports_sdio_new_mode) { in mwifiex_process_int_status()
2053 ((u32) card->mp_regs[reg->wr_bitmap_1l]) << 16; in mwifiex_process_int_status()
2055 ((u32) card->mp_regs[reg->wr_bitmap_1u]) << 24; in mwifiex_process_int_status()
2057 card->mp_wr_bitmap = bitmap; in mwifiex_process_int_status()
2061 card->mp_wr_bitmap); in mwifiex_process_int_status()
2063 (card->mp_wr_bitmap & card->mp_data_port_mask)) { in mwifiex_process_int_status()
2073 if (card->has_control_mask && adapter->cmd_sent) { in mwifiex_process_int_status()
2076 card->mp_wr_bitmap |= in mwifiex_process_int_status()
2077 (u32) card->mp_regs[reg->wr_bitmap_l] & CTRL_PORT_MASK; in mwifiex_process_int_status()
2078 if (card->mp_wr_bitmap & CTRL_PORT_MASK) in mwifiex_process_int_status()
2085 bitmap = (u32) card->mp_regs[reg->rd_bitmap_l]; in mwifiex_process_int_status()
2086 bitmap |= ((u32) card->mp_regs[reg->rd_bitmap_u]) << 8; in mwifiex_process_int_status()
2087 if (card->supports_sdio_new_mode) { in mwifiex_process_int_status()
2089 ((u32) card->mp_regs[reg->rd_bitmap_1l]) << 16; in mwifiex_process_int_status()
2091 ((u32) card->mp_regs[reg->rd_bitmap_1u]) << 24; in mwifiex_process_int_status()
2093 card->mp_rd_bitmap = bitmap; in mwifiex_process_int_status()
2096 card->mp_rd_bitmap); in mwifiex_process_int_status()
2107 rx_len = ((u16) card->mp_regs[len_reg_u]) << 8; in mwifiex_process_int_status()
2108 rx_len |= (u16) card->mp_regs[len_reg_l]; in mwifiex_process_int_status()
2116 (card->mpa_rx.enabled && in mwifiex_process_int_status()
2118 card->mpa_rx.buf_size))) { in mwifiex_process_int_status()
2167 * the aggregated packet to card.
2170 * buffer and then downloaded to the card. Previous unsent packets in the
2175 * The function will only download the packet to the card when aggregation
2183 struct sdio_mmc_card *card = adapter->card; in mwifiex_host_to_card_mp_aggr() local
2192 if (!card->mpa_tx.enabled || in mwifiex_host_to_card_mp_aggr()
2193 (card->has_control_mask && (port == CTRL_PORT)) || in mwifiex_host_to_card_mp_aggr()
2194 (card->supports_sdio_new_mode && (port == CMD_PORT_SLCT))) { in mwifiex_host_to_card_mp_aggr()
2209 if (MP_TX_AGGR_IN_PROGRESS(card)) { in mwifiex_host_to_card_mp_aggr()
2210 if (MP_TX_AGGR_BUF_HAS_ROOM(card, pkt_len)) { in mwifiex_host_to_card_mp_aggr()
2213 if (!(card->mp_wr_bitmap & in mwifiex_host_to_card_mp_aggr()
2214 (1 << card->curr_wr_port)) || in mwifiex_host_to_card_mp_aggr()
2216 card, pkt_len + next_pkt_len)) in mwifiex_host_to_card_mp_aggr()
2222 if (!(card->mp_wr_bitmap & in mwifiex_host_to_card_mp_aggr()
2223 (1 << card->curr_wr_port))) in mwifiex_host_to_card_mp_aggr()
2229 if (MP_TX_AGGR_BUF_HAS_ROOM(card, pkt_len) && in mwifiex_host_to_card_mp_aggr()
2230 (card->mp_wr_bitmap & (1 << card->curr_wr_port))) in mwifiex_host_to_card_mp_aggr()
2241 if (MP_TX_AGGR_IN_PROGRESS(card)) { in mwifiex_host_to_card_mp_aggr()
2245 if (MP_TX_AGGR_BUF_HAS_ROOM(card, pkt_len)) in mwifiex_host_to_card_mp_aggr()
2259 MP_TX_AGGR_BUF_PUT(card, payload, pkt_len, port); in mwifiex_host_to_card_mp_aggr()
2261 if (MP_TX_AGGR_PKT_LIMIT_REACHED(card) || in mwifiex_host_to_card_mp_aggr()
2262 mp_tx_aggr_port_limit_reached(card)) in mwifiex_host_to_card_mp_aggr()
2270 __func__, card->mpa_tx.start_port, in mwifiex_host_to_card_mp_aggr()
2271 card->mpa_tx.ports); in mwifiex_host_to_card_mp_aggr()
2272 if (card->supports_sdio_new_mode) { in mwifiex_host_to_card_mp_aggr()
2276 for (i = 0, port_count = 0; i < card->max_ports; i++) in mwifiex_host_to_card_mp_aggr()
2277 if (card->mpa_tx.ports & BIT(i)) in mwifiex_host_to_card_mp_aggr()
2285 (port_count << 8)) + card->mpa_tx.start_port; in mwifiex_host_to_card_mp_aggr()
2288 (card->mpa_tx.ports << 4)) + in mwifiex_host_to_card_mp_aggr()
2289 card->mpa_tx.start_port; in mwifiex_host_to_card_mp_aggr()
2292 if (card->mpa_tx.pkt_cnt == 1) in mwifiex_host_to_card_mp_aggr()
2293 mport = adapter->ioport + card->mpa_tx.start_port; in mwifiex_host_to_card_mp_aggr()
2295 ret = mwifiex_write_data_to_card(adapter, card->mpa_tx.buf, in mwifiex_host_to_card_mp_aggr()
2296 card->mpa_tx.buf_len, mport); in mwifiex_host_to_card_mp_aggr()
2303 adapter->dbg.last_mp_wr_bitmap[index] = card->mp_wr_bitmap; in mwifiex_host_to_card_mp_aggr()
2304 adapter->dbg.last_mp_wr_len[index] = card->mpa_tx.buf_len; in mwifiex_host_to_card_mp_aggr()
2305 adapter->dbg.last_mp_curr_wr_port[index] = card->curr_wr_port; in mwifiex_host_to_card_mp_aggr()
2307 MP_TX_AGGR_BUF_RESET(card); in mwifiex_host_to_card_mp_aggr()
2323 MP_TX_AGGR_BUF_PUT(card, payload, pkt_len, port); in mwifiex_host_to_card_mp_aggr()
2330 * This function downloads data from driver to card.
2332 * Both commands and data packets are transferred to the card by this
2343 struct sdio_mmc_card *card = adapter->card; in mwifiex_sdio_host_to_card() local
2382 if (card->supports_sdio_new_mode) in mwifiex_sdio_host_to_card()
2386 /* Transfer data to card */ in mwifiex_sdio_host_to_card()
2403 card->curr_wr_port = port; in mwifiex_sdio_host_to_card()
2404 card->mp_wr_bitmap |= (u32)(1 << card->curr_wr_port); in mwifiex_sdio_host_to_card()
2408 if (!(card->mp_wr_bitmap & (1 << card->curr_wr_port))) in mwifiex_sdio_host_to_card()
2424 struct sdio_mmc_card *card = adapter->card; in mwifiex_alloc_sdio_mpa_buffers() local
2428 card->mpa_tx.buf = kzalloc(mpa_tx_buf_size, GFP_KERNEL); in mwifiex_alloc_sdio_mpa_buffers()
2429 if (!card->mpa_tx.buf) { in mwifiex_alloc_sdio_mpa_buffers()
2434 card->mpa_tx.buf_size = mpa_tx_buf_size; in mwifiex_alloc_sdio_mpa_buffers()
2438 card->mpa_rx.buf = kzalloc(rx_buf_size, GFP_KERNEL); in mwifiex_alloc_sdio_mpa_buffers()
2439 if (!card->mpa_rx.buf) { in mwifiex_alloc_sdio_mpa_buffers()
2444 card->mpa_rx.buf_size = rx_buf_size; in mwifiex_alloc_sdio_mpa_buffers()
2448 kfree(card->mpa_tx.buf); in mwifiex_alloc_sdio_mpa_buffers()
2449 kfree(card->mpa_rx.buf); in mwifiex_alloc_sdio_mpa_buffers()
2450 card->mpa_tx.buf_size = 0; in mwifiex_alloc_sdio_mpa_buffers()
2451 card->mpa_rx.buf_size = 0; in mwifiex_alloc_sdio_mpa_buffers()
2452 card->mpa_tx.buf = NULL; in mwifiex_alloc_sdio_mpa_buffers()
2453 card->mpa_rx.buf = NULL; in mwifiex_alloc_sdio_mpa_buffers()
2468 struct sdio_mmc_card *card = adapter->card; in mwifiex_unregister_dev() local
2470 if (adapter->card) { in mwifiex_unregister_dev()
2471 card->adapter = NULL; in mwifiex_unregister_dev()
2472 sdio_claim_host(card->func); in mwifiex_unregister_dev()
2473 sdio_disable_func(card->func); in mwifiex_unregister_dev()
2474 sdio_release_host(card->func); in mwifiex_unregister_dev()
2486 struct sdio_mmc_card *card = adapter->card; in mwifiex_register_dev() local
2487 struct sdio_func *func = card->func; in mwifiex_register_dev()
2488 const char *firmware = card->firmware; in mwifiex_register_dev()
2490 /* save adapter pointer in card */ in mwifiex_register_dev()
2491 card->adapter = adapter; in mwifiex_register_dev()
2492 adapter->tx_buf_size = card->tx_buf_size; in mwifiex_register_dev()
2497 ret = sdio_set_block_size(card->func, MWIFIEX_SDIO_BLOCK_SIZE); in mwifiex_register_dev()
2508 if (card->firmware_sdiouart) { in mwifiex_register_dev()
2511 mwifiex_read_reg(adapter, card->reg->host_strap_reg, &val); in mwifiex_register_dev()
2512 if ((val & card->reg->host_strap_mask) == card->reg->host_strap_value) in mwifiex_register_dev()
2513 firmware = card->firmware_sdiouart; in mwifiex_register_dev()
2517 if (card->fw_dump_enh) { in mwifiex_register_dev()
2525 adapter->host_mlme_enabled = card->host_mlme; in mwifiex_register_dev()
2538 * - Initialize SDIO variables in card
2544 struct sdio_mmc_card *card = adapter->card; in mwifiex_init_sdio() local
2545 const struct mwifiex_sdio_card_reg *reg = card->reg; in mwifiex_init_sdio()
2549 sdio_set_drvdata(card->func, card); in mwifiex_init_sdio()
2556 mwifiex_read_reg(adapter, card->reg->host_int_status_reg, &sdio_ireg); in mwifiex_init_sdio()
2562 /* Initialize SDIO variables in card */ in mwifiex_init_sdio()
2563 card->mp_rd_bitmap = 0; in mwifiex_init_sdio()
2564 card->mp_wr_bitmap = 0; in mwifiex_init_sdio()
2565 card->curr_rd_port = reg->start_rd_port; in mwifiex_init_sdio()
2566 card->curr_wr_port = reg->start_wr_port; in mwifiex_init_sdio()
2568 card->mp_data_port_mask = reg->data_port_mask; in mwifiex_init_sdio()
2570 card->mpa_tx.buf_len = 0; in mwifiex_init_sdio()
2571 card->mpa_tx.pkt_cnt = 0; in mwifiex_init_sdio()
2572 card->mpa_tx.start_port = 0; in mwifiex_init_sdio()
2574 card->mpa_tx.enabled = 1; in mwifiex_init_sdio()
2575 card->mpa_tx.pkt_aggr_limit = card->mp_agg_pkt_limit; in mwifiex_init_sdio()
2577 card->mpa_rx.buf_len = 0; in mwifiex_init_sdio()
2578 card->mpa_rx.pkt_cnt = 0; in mwifiex_init_sdio()
2579 card->mpa_rx.start_port = 0; in mwifiex_init_sdio()
2581 card->mpa_rx.enabled = 1; in mwifiex_init_sdio()
2582 card->mpa_rx.pkt_aggr_limit = card->mp_agg_pkt_limit; in mwifiex_init_sdio()
2585 card->mp_regs = kzalloc(reg->max_mp_regs, GFP_KERNEL); in mwifiex_init_sdio()
2586 if (!card->mp_regs) in mwifiex_init_sdio()
2589 card->mpa_rx.len_arr = kcalloc(card->mp_agg_pkt_limit, in mwifiex_init_sdio()
2590 sizeof(*card->mpa_rx.len_arr), in mwifiex_init_sdio()
2592 if (!card->mpa_rx.len_arr) { in mwifiex_init_sdio()
2593 kfree(card->mp_regs); in mwifiex_init_sdio()
2598 card->mp_tx_agg_buf_size, in mwifiex_init_sdio()
2599 card->mp_rx_agg_buf_size); in mwifiex_init_sdio()
2602 if (ret && (card->mp_tx_agg_buf_size == MWIFIEX_MP_AGGR_BUF_SIZE_MAX || in mwifiex_init_sdio()
2603 card->mp_rx_agg_buf_size == MWIFIEX_MP_AGGR_BUF_SIZE_MAX)) { in mwifiex_init_sdio()
2612 card->mpa_tx.enabled = 0; in mwifiex_init_sdio()
2613 card->mpa_rx.enabled = 0; in mwifiex_init_sdio()
2617 adapter->auto_tdls = card->can_auto_tdls; in mwifiex_init_sdio()
2618 adapter->ext_scan = card->can_ext_scan; in mwifiex_init_sdio()
2627 struct sdio_mmc_card *card = adapter->card; in mwifiex_cleanup_mpa_buf() local
2629 MP_TX_AGGR_BUF_RESET(card); in mwifiex_cleanup_mpa_buf()
2630 MP_RX_AGGR_BUF_RESET(card); in mwifiex_cleanup_mpa_buf()
2634 * This function cleans up the allocated card buffers.
2643 struct sdio_mmc_card *card = adapter->card; in mwifiex_cleanup_sdio() local
2645 cancel_work_sync(&card->work); in mwifiex_cleanup_sdio()
2647 kfree(card->mp_regs); in mwifiex_cleanup_sdio()
2648 kfree(card->mpa_rx.len_arr); in mwifiex_cleanup_sdio()
2649 kfree(card->mpa_tx.buf); in mwifiex_cleanup_sdio()
2650 kfree(card->mpa_rx.buf); in mwifiex_cleanup_sdio()
2654 * This function updates the MP end port in card.
2659 struct sdio_mmc_card *card = adapter->card; in mwifiex_update_mp_end_port() local
2660 const struct mwifiex_sdio_card_reg *reg = card->reg; in mwifiex_update_mp_end_port()
2663 card->mp_end_port = port; in mwifiex_update_mp_end_port()
2665 card->mp_data_port_mask = reg->data_port_mask; in mwifiex_update_mp_end_port()
2668 for (i = 1; i <= card->max_ports - card->mp_end_port; i++) in mwifiex_update_mp_end_port()
2669 card->mp_data_port_mask &= in mwifiex_update_mp_end_port()
2670 ~(1 << (card->max_ports - i)); in mwifiex_update_mp_end_port()
2673 card->curr_wr_port = reg->start_wr_port; in mwifiex_update_mp_end_port()
2677 port, card->mp_data_port_mask); in mwifiex_update_mp_end_port()
2682 struct sdio_mmc_card *card = adapter->card; in mwifiex_sdio_card_reset_work() local
2683 struct sdio_func *func = card->func; in mwifiex_sdio_card_reset_work()
2688 clear_bit(MWIFIEX_IFACE_WORK_DEVICE_DUMP, &card->work_flags); in mwifiex_sdio_card_reset_work()
2689 clear_bit(MWIFIEX_IFACE_WORK_CARD_RESET, &card->work_flags); in mwifiex_sdio_card_reset_work()
2693 ret = mmc_hw_reset(func->card); in mwifiex_sdio_card_reset_work()
2717 struct sdio_mmc_card *card = adapter->card; in mwifiex_sdio_rdwr_firmware() local
2721 sdio_writeb(card->func, card->reg->fw_dump_host_ready, in mwifiex_sdio_rdwr_firmware()
2722 card->reg->fw_dump_ctrl, &ret); in mwifiex_sdio_rdwr_firmware()
2728 ctrl_data = sdio_readb(card->func, card->reg->fw_dump_ctrl, in mwifiex_sdio_rdwr_firmware()
2738 if (ctrl_data != card->reg->fw_dump_host_ready) { in mwifiex_sdio_rdwr_firmware()
2741 sdio_writeb(card->func, card->reg->fw_dump_host_ready, in mwifiex_sdio_rdwr_firmware()
2742 card->reg->fw_dump_ctrl, &ret); in mwifiex_sdio_rdwr_firmware()
2750 if (ctrl_data == card->reg->fw_dump_host_ready) { in mwifiex_sdio_rdwr_firmware()
2762 struct sdio_mmc_card *card = adapter->card; in mwifiex_sdio_fw_dump() local
2769 if (!card->can_dump_fw) in mwifiex_sdio_fw_dump()
2783 sdio_claim_host(card->func); in mwifiex_sdio_fw_dump()
2791 reg = card->reg->fw_dump_start; in mwifiex_sdio_fw_dump()
2793 dump_num = sdio_readb(card->func, reg, &ret); in mwifiex_sdio_fw_dump()
2808 reg = card->reg->fw_dump_start; in mwifiex_sdio_fw_dump()
2810 read_reg = sdio_readb(card->func, reg, &ret); in mwifiex_sdio_fw_dump()
2822 card->reg->fw_dump_ctrl, in mwifiex_sdio_fw_dump()
2853 reg_start = card->reg->fw_dump_start; in mwifiex_sdio_fw_dump()
2854 reg_end = card->reg->fw_dump_end; in mwifiex_sdio_fw_dump()
2856 *dbg_ptr = sdio_readb(card->func, reg, &ret); in mwifiex_sdio_fw_dump()
2880 sdio_release_host(card->func); in mwifiex_sdio_fw_dump()
2885 struct sdio_mmc_card *card = adapter->card; in mwifiex_sdio_generic_fw_dump() local
2893 if (!card->fw_dump_enh) in mwifiex_sdio_generic_fw_dump()
2903 sdio_claim_host(card->func); in mwifiex_sdio_generic_fw_dump()
2911 reg_start = card->reg->fw_dump_start; in mwifiex_sdio_generic_fw_dump()
2912 reg_end = card->reg->fw_dump_end; in mwifiex_sdio_generic_fw_dump()
2915 start_flag = sdio_readb(card->func, reg, &ret); in mwifiex_sdio_generic_fw_dump()
2951 *dbg_ptr = sdio_readb(card->func, reg, &ret); in mwifiex_sdio_generic_fw_dump()
2994 sdio_release_host(card->func); in mwifiex_sdio_generic_fw_dump()
2999 struct sdio_mmc_card *card = adapter->card; in mwifiex_sdio_device_dump_work() local
3009 if (card->fw_dump_enh) in mwifiex_sdio_device_dump_work()
3019 struct sdio_mmc_card *card = in mwifiex_sdio_work() local
3023 &card->work_flags)) in mwifiex_sdio_work()
3024 mwifiex_sdio_device_dump_work(card->adapter); in mwifiex_sdio_work()
3026 &card->work_flags)) in mwifiex_sdio_work()
3027 mwifiex_sdio_card_reset_work(card->adapter); in mwifiex_sdio_work()
3030 /* This function resets the card */
3033 struct sdio_mmc_card *card = adapter->card; in mwifiex_sdio_card_reset() local
3035 if (!test_and_set_bit(MWIFIEX_IFACE_WORK_CARD_RESET, &card->work_flags)) in mwifiex_sdio_card_reset()
3036 schedule_work(&card->work); in mwifiex_sdio_card_reset()
3042 struct sdio_mmc_card *card = adapter->card; in mwifiex_sdio_device_dump() local
3045 &card->work_flags)) in mwifiex_sdio_device_dump()
3046 schedule_work(&card->work); in mwifiex_sdio_device_dump()
3056 struct sdio_mmc_card *cardp = adapter->card; in mwifiex_sdio_reg_dump()
3147 struct sdio_mmc_card *card = adapter->card; in mwifiex_sdio_up_dev() local
3150 sdio_claim_host(card->func); in mwifiex_sdio_up_dev()
3151 sdio_enable_func(card->func); in mwifiex_sdio_up_dev()
3152 sdio_set_block_size(card->func, MWIFIEX_SDIO_BLOCK_SIZE); in mwifiex_sdio_up_dev()
3153 sdio_release_host(card->func); in mwifiex_sdio_up_dev()
3158 adapter->tx_buf_size = card->tx_buf_size; in mwifiex_sdio_up_dev()
3164 mwifiex_read_reg(adapter, card->reg->host_int_status_reg, &sdio_ireg); in mwifiex_sdio_up_dev()
3167 dev_err(&card->func->dev, "error enabling SDIO port\n"); in mwifiex_sdio_up_dev()