adapter->pm_wakeup_fw_try = false;
 
-       adapter->tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K;
        adapter->curr_tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K;
 
        adapter->is_hs_configured = false;
 
                card->pcie.firmware = data->firmware;
                card->pcie.reg = data->reg;
                card->pcie.blksz_fw_dl = data->blksz_fw_dl;
+               card->pcie.tx_buf_size = data->tx_buf_size;
        }
 
        if (mwifiex_add_card(card, &add_remove_card_sem, &pcie_ops,
        }
 
        adapter->dev = &pdev->dev;
+       adapter->tx_buf_size = card->pcie.tx_buf_size;
        strcpy(adapter->fw_name, card->pcie.firmware);
 
        return 0;
 
        const char *firmware;
        const struct mwifiex_pcie_card_reg *reg;
        u16 blksz_fw_dl;
+       u16 tx_buf_size;
 };
 
 static const struct mwifiex_pcie_device mwifiex_pcie8766 = {
        .firmware       = PCIE8766_DEFAULT_FW_NAME,
        .reg            = &mwifiex_reg_8766,
        .blksz_fw_dl = MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD,
+       .tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K,
 };
 
 static const struct mwifiex_pcie_device mwifiex_pcie8897 = {
        .firmware       = PCIE8897_DEFAULT_FW_NAME,
        .reg            = &mwifiex_reg_8897,
        .blksz_fw_dl = MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD,
+       .tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_4K,
 };
 
 struct mwifiex_evt_buf_desc {
 
                card->mp_agg_pkt_limit = data->mp_agg_pkt_limit;
                card->supports_sdio_new_mode = data->supports_sdio_new_mode;
                card->has_control_mask = data->has_control_mask;
+               card->tx_buf_size = data->tx_buf_size;
        }
 
        sdio_claim_host(func);
 
        /* save adapter pointer in card */
        card->adapter = adapter;
+       adapter->tx_buf_size = card->tx_buf_size;
 
        sdio_claim_host(func);
 
 
        u8 mp_agg_pkt_limit;
        bool supports_sdio_new_mode;
        bool has_control_mask;
+       u16 tx_buf_size;
 
        u32 mp_rd_bitmap;
        u32 mp_wr_bitmap;
        u8 mp_agg_pkt_limit;
        bool supports_sdio_new_mode;
        bool has_control_mask;
+       u16 tx_buf_size;
 };
 
 static const struct mwifiex_sdio_card_reg mwifiex_reg_sd87xx = {
        .mp_agg_pkt_limit = 8,
        .supports_sdio_new_mode = false,
        .has_control_mask = true,
+       .tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K,
 };
 
 static const struct mwifiex_sdio_device mwifiex_sdio_sd8787 = {
        .mp_agg_pkt_limit = 8,
        .supports_sdio_new_mode = false,
        .has_control_mask = true,
+       .tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K,
 };
 
 static const struct mwifiex_sdio_device mwifiex_sdio_sd8797 = {
        .mp_agg_pkt_limit = 8,
        .supports_sdio_new_mode = false,
        .has_control_mask = true,
+       .tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K,
 };
 
 static const struct mwifiex_sdio_device mwifiex_sdio_sd8897 = {
        .mp_agg_pkt_limit = 16,
        .supports_sdio_new_mode = true,
        .has_control_mask = false,
+       .tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_4K,
 };
 
 /*
 
        switch (le16_to_cpu(card->udev->descriptor.idProduct)) {
        case USB8897_PID_1:
        case USB8897_PID_2:
+               adapter->tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_4K;
                strcpy(adapter->fw_name, USB8897_DEFAULT_FW_NAME);
                break;
        case USB8797_PID_1:
        case USB8797_PID_2:
        default:
+               adapter->tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K;
                strcpy(adapter->fw_name, USB8797_DEFAULT_FW_NAME);
                break;
        }