| /****************************************************************************** |
| * |
| * Copyright(c) 2016 - 2017 Realtek Corporation. All rights reserved. |
| * |
| * This program is free software; you can redistribute it and/or modify it |
| * under the terms of version 2 of the GNU General Public License as |
| * published by the Free Software Foundation. |
| * |
| * This program is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| * more details. |
| * |
| ******************************************************************************/ |
| |
| #include "halmac_init_88xx.h" |
| #include "halmac_88xx_cfg.h" |
| #include "halmac_fw_88xx.h" |
| #include "halmac_common_88xx.h" |
| #include "halmac_cfg_wmac_88xx.h" |
| #include "halmac_efuse_88xx.h" |
| #include "halmac_mimo_88xx.h" |
| #include "halmac_bb_rf_88xx.h" |
| #include "halmac_sdio_88xx.h" |
| #include "halmac_usb_88xx.h" |
| #include "halmac_pcie_88xx.h" |
| #include "halmac_gpio_88xx.h" |
| |
| #if HALMAC_8822B_SUPPORT |
| #include "halmac_8822b/halmac_init_8822b.h" |
| #endif |
| |
| #if HALMAC_8821C_SUPPORT |
| #include "halmac_8821c/halmac_init_8821c.h" |
| #endif |
| |
| #if HALMAC_8822C_SUPPORT |
| #include "halmac_8822c/halmac_init_8822c.h" |
| #endif |
| |
| #if HALMAC_PLATFORM_TESTPROGRAM |
| #include "halmisc_api_88xx.h" |
| #endif |
| |
| #if HALMAC_88XX_SUPPORT |
| |
| static VOID |
| halmac_init_state_machine_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter |
| ); |
| |
| static HALMAC_RET_STATUS |
| halmac_verify_io_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter |
| ); |
| |
| |
| static HALMAC_RET_STATUS |
| halmac_verify_send_rsvd_page_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter |
| ); |
| |
| VOID |
| halmac_init_adapter_para_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter |
| ) |
| { |
| pHalmac_adapter->api_registry.rx_expand_mode_en = 1; |
| pHalmac_adapter->api_registry.la_mode_en = 1; |
| pHalmac_adapter->api_registry.cfg_drv_rsvd_pg_en = 1; |
| pHalmac_adapter->api_registry.sdio_cmd53_4byte_en = 1; |
| |
| pHalmac_adapter->pHalAdapter_backup = pHalmac_adapter; |
| pHalmac_adapter->pHalEfuse_map = (u8 *)NULL; |
| pHalmac_adapter->hal_efuse_map_valid = _FALSE; |
| pHalmac_adapter->efuse_end = 0; |
| pHalmac_adapter->pHal_mac_addr[0].Address_L_H.Address_Low = 0; |
| pHalmac_adapter->pHal_mac_addr[0].Address_L_H.Address_High = 0; |
| pHalmac_adapter->pHal_mac_addr[1].Address_L_H.Address_Low = 0; |
| pHalmac_adapter->pHal_mac_addr[1].Address_L_H.Address_High = 0; |
| pHalmac_adapter->pHal_bss_addr[0].Address_L_H.Address_Low = 0; |
| pHalmac_adapter->pHal_bss_addr[0].Address_L_H.Address_High = 0; |
| pHalmac_adapter->pHal_bss_addr[1].Address_L_H.Address_Low = 0; |
| pHalmac_adapter->pHal_bss_addr[1].Address_L_H.Address_High = 0; |
| |
| pHalmac_adapter->low_clk = _FALSE; |
| pHalmac_adapter->max_download_size = HALMAC_FW_MAX_DL_SIZE_88XX; |
| pHalmac_adapter->ofld_func_info.halmac_malloc_max_sz = HALMAC_OFLD_FUNC_MALLOC_MAX_SIZE_88XX; |
| pHalmac_adapter->ofld_func_info.rsvd_pg_drv_buf_max_sz = HALMAC_OFLD_FUNC_RSVD_PG_DRV_BUF_MAX_SIZE_88XX; |
| |
| pHalmac_adapter->config_para_info.pCfg_para_buf = NULL; |
| pHalmac_adapter->config_para_info.pPara_buf_w = NULL; |
| pHalmac_adapter->config_para_info.para_num = 0; |
| pHalmac_adapter->config_para_info.full_fifo_mode = _FALSE; |
| pHalmac_adapter->config_para_info.para_buf_size = 0; |
| pHalmac_adapter->config_para_info.avai_para_buf_size = 0; |
| pHalmac_adapter->config_para_info.offset_accumulation = 0; |
| pHalmac_adapter->config_para_info.value_accumulation = 0; |
| pHalmac_adapter->config_para_info.datapack_segment = 0; |
| |
| pHalmac_adapter->ch_sw_info.ch_info_buf = NULL; |
| pHalmac_adapter->ch_sw_info.ch_info_buf_w = NULL; |
| pHalmac_adapter->ch_sw_info.extra_info_en = 0; |
| pHalmac_adapter->ch_sw_info.buf_size = 0; |
| pHalmac_adapter->ch_sw_info.avai_buf_size = 0; |
| pHalmac_adapter->ch_sw_info.total_size = 0; |
| pHalmac_adapter->ch_sw_info.ch_num = 0; |
| |
| pHalmac_adapter->drv_info_size = 0; |
| pHalmac_adapter->tx_desc_transfer = _FALSE; |
| |
| pHalmac_adapter->txff_allocation.tx_fifo_pg_num = 0; |
| pHalmac_adapter->txff_allocation.ac_q_pg_num = 0; |
| pHalmac_adapter->txff_allocation.rsvd_pg_bndy = 0; |
| pHalmac_adapter->txff_allocation.rsvd_drv_pg_bndy = 0; |
| pHalmac_adapter->txff_allocation.rsvd_h2c_extra_info_pg_bndy = 0; |
| pHalmac_adapter->txff_allocation.rsvd_h2c_queue_pg_bndy = 0; |
| pHalmac_adapter->txff_allocation.rsvd_cpu_instr_pg_bndy = 0; |
| pHalmac_adapter->txff_allocation.rsvd_fw_txbuff_pg_bndy = 0; |
| pHalmac_adapter->txff_allocation.pub_queue_pg_num = 0; |
| pHalmac_adapter->txff_allocation.high_queue_pg_num = 0; |
| pHalmac_adapter->txff_allocation.low_queue_pg_num = 0; |
| pHalmac_adapter->txff_allocation.normal_queue_pg_num = 0; |
| pHalmac_adapter->txff_allocation.extra_queue_pg_num = 0; |
| |
| pHalmac_adapter->txff_allocation.la_mode = HALMAC_LA_MODE_DISABLE; |
| pHalmac_adapter->txff_allocation.rx_fifo_expanding_mode = HALMAC_RX_FIFO_EXPANDING_MODE_DISABLE; |
| |
| pHalmac_adapter->pwr_off_flow_flag = 0; |
| |
| pHalmac_adapter->hw_config_info.security_check_keyid = 0; |
| pHalmac_adapter->hw_config_info.ac_queue_num = 8; |
| |
| pHalmac_adapter->sdio_cmd53_4byte = HALMAC_SDIO_CMD53_4BYTE_MODE_DISABLE; |
| pHalmac_adapter->sdio_hw_info.io_hi_speed_flag = 0; |
| pHalmac_adapter->sdio_hw_info.io_indir_flag = 0; |
| pHalmac_adapter->sdio_hw_info.spec_ver = HALMAC_SDIO_SPEC_VER_2_00; |
| pHalmac_adapter->sdio_hw_info.clock_speed = 50; |
| |
| pHalmac_adapter->pinmux_info.wl_led = 0; |
| pHalmac_adapter->pinmux_info.sdio_int = 0; |
| pHalmac_adapter->pinmux_info.sw_io_0 = 0; |
| pHalmac_adapter->pinmux_info.sw_io_1 = 0; |
| pHalmac_adapter->pinmux_info.sw_io_2 = 0; |
| pHalmac_adapter->pinmux_info.sw_io_3 = 0; |
| pHalmac_adapter->pinmux_info.sw_io_4 = 0; |
| pHalmac_adapter->pinmux_info.sw_io_5 = 0; |
| pHalmac_adapter->pinmux_info.sw_io_6 = 0; |
| pHalmac_adapter->pinmux_info.sw_io_7 = 0; |
| pHalmac_adapter->pinmux_info.sw_io_8 = 0; |
| pHalmac_adapter->pinmux_info.sw_io_9 = 0; |
| pHalmac_adapter->pinmux_info.sw_io_10 = 0; |
| pHalmac_adapter->pinmux_info.sw_io_11 = 0; |
| pHalmac_adapter->pinmux_info.sw_io_12 = 0; |
| pHalmac_adapter->pinmux_info.sw_io_13 = 0; |
| pHalmac_adapter->pinmux_info.sw_io_14 = 0; |
| pHalmac_adapter->pinmux_info.sw_io_15 = 0; |
| |
| pHalmac_adapter->sdio_free_space.pMacid_map = (u8 *)NULL; |
| pHalmac_adapter->sdio_free_space.macid_map_size = HALMAC_MACID_MAX_88XX << 1; |
| |
| if (HALMAC_INTERFACE_SDIO == pHalmac_adapter->halmac_interface) { |
| if (NULL == pHalmac_adapter->sdio_free_space.pMacid_map) { |
| pHalmac_adapter->sdio_free_space.pMacid_map = (u8 *)PLATFORM_RTL_MALLOC(pHalmac_adapter->pDriver_adapter, pHalmac_adapter->sdio_free_space.macid_map_size); |
| if (NULL == pHalmac_adapter->sdio_free_space.pMacid_map) |
| PLATFORM_MSG_PRINT(pHalmac_adapter->pDriver_adapter, HALMAC_MSG_COMMON, HALMAC_DBG_ERR, "[ERR]halmac allocate Macid_map Fail!!\n"); |
| } |
| } |
| |
| halmac_init_adapter_dynamic_para_88xx(pHalmac_adapter); |
| halmac_init_state_machine_88xx(pHalmac_adapter); |
| } |
| |
| VOID |
| halmac_init_adapter_dynamic_para_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter |
| ) |
| { |
| pHalmac_adapter->h2c_packet_seq = 0; |
| pHalmac_adapter->h2c_buf_free_space = 0; |
| } |
| |
| HALMAC_RET_STATUS |
| halmac_mount_api_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter |
| ) |
| { |
| VOID *pDriver_adapter = pHalmac_adapter->pDriver_adapter; |
| PHALMAC_API pHalmac_api = (PHALMAC_API)NULL; |
| |
| pHalmac_adapter->pHalmac_api = (PHALMAC_API)PLATFORM_RTL_MALLOC(pDriver_adapter, sizeof(HALMAC_API)); |
| if (pHalmac_adapter->pHalmac_api == NULL) |
| return HALMAC_RET_MALLOC_FAIL; |
| pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api; |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ALWAYS, HALMAC_SVN_VER_88XX"\n"); |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ALWAYS, "HALMAC_MAJOR_VER_88XX = %x\n", HALMAC_MAJOR_VER_88XX); |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ALWAYS, "HALMAC_PROTOTYPE_88XX = %x\n", HALMAC_PROTOTYPE_VER_88XX); |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ALWAYS, "HALMAC_MINOR_VER_88XX = %x\n", HALMAC_MINOR_VER_88XX); |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ALWAYS, "HALMAC_PATCH_VER_88XX = %x\n", HALMAC_PATCH_VER_88XX); |
| |
| /* Mount function pointer */ |
| pHalmac_api->halmac_register_api = halmac_register_api_88xx; |
| pHalmac_api->halmac_download_firmware = halmac_download_firmware_88xx; |
| pHalmac_api->halmac_free_download_firmware = halmac_free_download_firmware_88xx; |
| pHalmac_api->halmac_get_fw_version = halmac_get_fw_version_88xx; |
| pHalmac_api->halmac_cfg_mac_addr = halmac_cfg_mac_addr_88xx; |
| pHalmac_api->halmac_cfg_bssid = halmac_cfg_bssid_88xx; |
| pHalmac_api->halmac_cfg_transmitter_addr = halmac_cfg_transmitter_addr_88xx; |
| pHalmac_api->halmac_cfg_net_type = halmac_cfg_net_type_88xx; |
| pHalmac_api->halmac_cfg_tsf_rst = halmac_cfg_tsf_rst_88xx; |
| pHalmac_api->halmac_cfg_bcn_space = halmac_cfg_bcn_space_88xx; |
| pHalmac_api->halmac_rw_bcn_ctrl = halmac_rw_bcn_ctrl_88xx; |
| pHalmac_api->halmac_cfg_multicast_addr = halmac_cfg_multicast_addr_88xx; |
| pHalmac_api->halmac_pre_init_system_cfg = halmac_pre_init_system_cfg_88xx; |
| pHalmac_api->halmac_init_system_cfg = halmac_init_system_cfg_88xx; |
| pHalmac_api->halmac_init_edca_cfg = halmac_init_edca_cfg_88xx; |
| pHalmac_api->halmac_cfg_operation_mode = halmac_cfg_operation_mode_88xx; |
| pHalmac_api->halmac_cfg_ch_bw = halmac_cfg_ch_bw_88xx; |
| pHalmac_api->halmac_cfg_bw = halmac_cfg_bw_88xx; |
| pHalmac_api->halmac_init_wmac_cfg = halmac_init_wmac_cfg_88xx; |
| pHalmac_api->halmac_init_mac_cfg = halmac_init_mac_cfg_88xx; |
| pHalmac_api->halmac_dump_efuse_map = halmac_dump_efuse_map_88xx; |
| pHalmac_api->halmac_dump_efuse_map_bt = halmac_dump_efuse_map_bt_88xx; |
| pHalmac_api->halmac_write_efuse_bt = halmac_write_efuse_bt_88xx; |
| pHalmac_api->halmac_read_efuse_bt = halmac_read_efuse_bt_88xx; |
| pHalmac_api->halmac_cfg_efuse_auto_check = halmac_cfg_efuse_auto_check_88xx; |
| pHalmac_api->halmac_dump_logical_efuse_map = halmac_dump_logical_efuse_map_88xx; |
| pHalmac_api->halmac_pg_efuse_by_map = halmac_pg_efuse_by_map_88xx; |
| pHalmac_api->halmac_mask_logical_efuse = halmac_mask_logical_efuse_88xx; |
| pHalmac_api->halmac_get_efuse_size = halmac_get_efuse_size_88xx; |
| pHalmac_api->halmac_get_efuse_available_size = halmac_get_efuse_available_size_88xx; |
| pHalmac_api->halmac_get_c2h_info = halmac_get_c2h_info_88xx; |
| |
| pHalmac_api->halmac_get_logical_efuse_size = halmac_get_logical_efuse_size_88xx; |
| |
| pHalmac_api->halmac_write_logical_efuse = halmac_write_logical_efuse_88xx; |
| pHalmac_api->halmac_read_logical_efuse = halmac_read_logical_efuse_88xx; |
| |
| pHalmac_api->halmac_ofld_func_cfg = halmac_ofld_func_cfg_88xx; |
| pHalmac_api->halmac_h2c_lb = halmac_h2c_lb_88xx; |
| pHalmac_api->halmac_debug = halmac_debug_88xx; |
| pHalmac_api->halmac_cfg_parameter = halmac_cfg_parameter_88xx; |
| pHalmac_api->halmac_update_datapack = halmac_update_datapack_88xx; |
| pHalmac_api->halmac_run_datapack = halmac_run_datapack_88xx; |
| pHalmac_api->halmac_send_bt_coex = halmac_send_bt_coex_88xx; |
| pHalmac_api->halmac_verify_platform_api = halmac_verify_platform_api_88xx; |
| pHalmac_api->halmac_update_packet = halmac_update_packet_88xx; |
| pHalmac_api->halmac_bcn_ie_filter = halmac_bcn_ie_filter_88xx; |
| pHalmac_api->halmac_cfg_txbf = halmac_cfg_txbf_88xx; |
| pHalmac_api->halmac_cfg_mumimo = halmac_cfg_mumimo_88xx; |
| pHalmac_api->halmac_cfg_sounding = halmac_cfg_sounding_88xx; |
| pHalmac_api->halmac_del_sounding = halmac_del_sounding_88xx; |
| pHalmac_api->halmac_su_bfer_entry_init = halmac_su_bfer_entry_init_88xx; |
| pHalmac_api->halmac_su_bfee_entry_init = halmac_su_bfee_entry_init_88xx; |
| pHalmac_api->halmac_mu_bfer_entry_init = halmac_mu_bfer_entry_init_88xx; |
| pHalmac_api->halmac_mu_bfee_entry_init = halmac_mu_bfee_entry_init_88xx; |
| pHalmac_api->halmac_su_bfer_entry_del = halmac_su_bfer_entry_del_88xx; |
| pHalmac_api->halmac_su_bfee_entry_del = halmac_su_bfee_entry_del_88xx; |
| pHalmac_api->halmac_mu_bfer_entry_del = halmac_mu_bfer_entry_del_88xx; |
| pHalmac_api->halmac_mu_bfee_entry_del = halmac_mu_bfee_entry_del_88xx; |
| |
| pHalmac_api->halmac_add_ch_info = halmac_add_ch_info_88xx; |
| pHalmac_api->halmac_add_extra_ch_info = halmac_add_extra_ch_info_88xx; |
| pHalmac_api->halmac_ctrl_ch_switch = halmac_ctrl_ch_switch_88xx; |
| pHalmac_api->halmac_p2pps = halmac_p2pps_88xx; |
| pHalmac_api->halmac_clear_ch_info = halmac_clear_ch_info_88xx; |
| pHalmac_api->halmac_send_general_info = halmac_send_general_info_88xx; |
| |
| pHalmac_api->halmac_start_iqk = halmac_start_iqk_88xx; |
| pHalmac_api->halmac_ctrl_pwr_tracking = halmac_ctrl_pwr_tracking_88xx; |
| pHalmac_api->halmac_psd = halmac_psd_88xx; |
| pHalmac_api->halmac_cfg_la_mode = halmac_cfg_la_mode_88xx; |
| pHalmac_api->halmac_cfg_rx_fifo_expanding_mode = halmac_cfg_rx_fifo_expanding_mode_88xx; |
| |
| pHalmac_api->halmac_config_security = halmac_config_security_88xx; |
| pHalmac_api->halmac_get_used_cam_entry_num = halmac_get_used_cam_entry_num_88xx; |
| pHalmac_api->halmac_read_cam_entry = halmac_read_cam_entry_88xx; |
| pHalmac_api->halmac_write_cam = halmac_write_cam_88xx; |
| pHalmac_api->halmac_clear_cam_entry = halmac_clear_cam_entry_88xx; |
| |
| pHalmac_api->halmac_cfg_drv_rsvd_pg_num = halmac_cfg_drv_rsvd_pg_num_88xx; |
| pHalmac_api->halmac_get_chip_version = halmac_get_version_88xx; |
| |
| pHalmac_api->halmac_query_status = halmac_query_status_88xx; |
| pHalmac_api->halmac_reset_feature = halmac_reset_feature_88xx; |
| pHalmac_api->halmac_check_fw_status = halmac_check_fw_status_88xx; |
| pHalmac_api->halmac_dump_fw_dmem = halmac_dump_fw_dmem_88xx; |
| pHalmac_api->halmac_cfg_max_dl_size = halmac_cfg_max_dl_size_88xx; |
| |
| pHalmac_api->halmac_dump_fifo = halmac_dump_fifo_88xx; |
| pHalmac_api->halmac_get_fifo_size = halmac_get_fifo_size_88xx; |
| |
| pHalmac_api->halmac_chk_txdesc = halmac_chk_txdesc_88xx; |
| pHalmac_api->halmac_dl_drv_rsvd_page = halmac_dl_drv_rsvd_page_88xx; |
| pHalmac_api->halmac_cfg_csi_rate = halmac_cfg_csi_rate_88xx; |
| |
| pHalmac_api->halmac_fill_txdesc_checksum = halmac_fill_txdesc_check_sum_88xx; |
| |
| pHalmac_api->halmac_sdio_cmd53_4byte = halmac_sdio_cmd53_4byte_88xx; |
| pHalmac_api->halmac_sdio_hw_info = halmac_sdio_hw_info_88xx; |
| |
| pHalmac_api->halmac_init_sdio_cfg = halmac_init_sdio_cfg_88xx; |
| pHalmac_api->halmac_init_usb_cfg = halmac_init_usb_cfg_88xx; |
| pHalmac_api->halmac_init_pcie_cfg = halmac_init_pcie_cfg_88xx; |
| pHalmac_api->halmac_deinit_sdio_cfg = halmac_deinit_sdio_cfg_88xx; |
| pHalmac_api->halmac_deinit_usb_cfg = halmac_deinit_usb_cfg_88xx; |
| pHalmac_api->halmac_deinit_pcie_cfg = halmac_deinit_pcie_cfg_88xx; |
| pHalmac_api->halmac_txfifo_is_empty = halmac_txfifo_is_empty_88xx; |
| pHalmac_api->halmac_download_flash = halmac_download_flash_88xx; |
| pHalmac_api->halmac_read_flash = halmac_read_flash_88xx; |
| pHalmac_api->halmac_erase_flash = halmac_erase_flash_88xx; |
| pHalmac_api->halmac_check_flash = halmac_check_flash_88xx; |
| pHalmac_api->halmac_cfg_edca_para = halmac_cfg_edca_para_88xx; |
| pHalmac_api->halmac_pinmux_wl_led_mode = halmac_pinmux_wl_led_mode_88xx; |
| pHalmac_api->halmac_pinmux_wl_led_sw_ctrl = halmac_pinmux_wl_led_sw_ctrl_88xx; |
| pHalmac_api->halmac_pinmux_sdio_int_polarity = halmac_pinmux_sdio_int_polarity_88xx; |
| pHalmac_api->halmac_pinmux_gpio_mode = halmac_pinmux_gpio_mode_88xx; |
| pHalmac_api->halmac_pinmux_gpio_output = halmac_pinmux_gpio_output_88xx; |
| pHalmac_api->halmac_pinmux_pin_status = halmac_pinmux_pin_status_88xx; |
| |
| pHalmac_api->halmac_rx_cut_amsdu_cfg = halmac_rx_cut_amsdu_cfg_88xx; |
| pHalmac_api->halmac_fw_snding = halmac_fw_snding_88xx; |
| pHalmac_api->halmac_get_mac_addr = halmac_get_mac_addr_88xx; |
| |
| if (pHalmac_adapter->halmac_interface == HALMAC_INTERFACE_SDIO) { |
| pHalmac_api->halmac_cfg_rx_aggregation = halmac_cfg_rx_aggregation_88xx_sdio; |
| pHalmac_api->halmac_init_interface_cfg = halmac_init_sdio_cfg_88xx; |
| pHalmac_api->halmac_deinit_interface_cfg = halmac_deinit_sdio_cfg_88xx; |
| pHalmac_api->halmac_cfg_tx_agg_align = halmac_cfg_tx_agg_align_sdio_88xx; |
| pHalmac_api->halmac_set_bulkout_num = halmac_set_bulkout_num_sdio_88xx; |
| pHalmac_api->halmac_get_usb_bulkout_id = halmac_get_usb_bulkout_id_sdio_88xx; |
| pHalmac_api->halmac_reg_read_indirect_32 = halmac_reg_read_indirect_32_sdio_88xx; |
| pHalmac_api->halmac_reg_sdio_cmd53_read_n = halmac_reg_read_nbyte_sdio_88xx; |
| } else if (pHalmac_adapter->halmac_interface == HALMAC_INTERFACE_USB) { |
| pHalmac_api->halmac_cfg_rx_aggregation = halmac_cfg_rx_aggregation_88xx_usb; |
| pHalmac_api->halmac_init_interface_cfg = halmac_init_usb_cfg_88xx; |
| pHalmac_api->halmac_deinit_interface_cfg = halmac_deinit_usb_cfg_88xx; |
| pHalmac_api->halmac_cfg_tx_agg_align = halmac_cfg_tx_agg_align_usb_88xx; |
| pHalmac_api->halmac_tx_allowed_sdio = halmac_tx_allowed_usb_88xx; |
| pHalmac_api->halmac_set_bulkout_num = halmac_set_bulkout_num_usb_88xx; |
| pHalmac_api->halmac_get_sdio_tx_addr = halmac_get_sdio_tx_addr_usb_88xx; |
| pHalmac_api->halmac_get_usb_bulkout_id = halmac_get_usb_bulkout_id_usb_88xx; |
| pHalmac_api->halmac_reg_read_8 = halmac_reg_read_8_usb_88xx; |
| pHalmac_api->halmac_reg_write_8 = halmac_reg_write_8_usb_88xx; |
| pHalmac_api->halmac_reg_read_16 = halmac_reg_read_16_usb_88xx; |
| pHalmac_api->halmac_reg_write_16 = halmac_reg_write_16_usb_88xx; |
| pHalmac_api->halmac_reg_read_32 = halmac_reg_read_32_usb_88xx; |
| pHalmac_api->halmac_reg_write_32 = halmac_reg_write_32_usb_88xx; |
| pHalmac_api->halmac_reg_read_indirect_32 = halmac_reg_read_indirect_32_usb_88xx; |
| pHalmac_api->halmac_reg_sdio_cmd53_read_n = halmac_reg_read_nbyte_usb_88xx; |
| } else if (pHalmac_adapter->halmac_interface == HALMAC_INTERFACE_PCIE) { |
| pHalmac_api->halmac_cfg_rx_aggregation = halmac_cfg_rx_aggregation_88xx_pcie; |
| pHalmac_api->halmac_init_interface_cfg = halmac_init_pcie_cfg_88xx; |
| pHalmac_api->halmac_deinit_interface_cfg = halmac_deinit_pcie_cfg_88xx; |
| pHalmac_api->halmac_cfg_tx_agg_align = halmac_cfg_tx_agg_align_pcie_88xx; |
| pHalmac_api->halmac_tx_allowed_sdio = halmac_tx_allowed_pcie_88xx; |
| pHalmac_api->halmac_set_bulkout_num = halmac_set_bulkout_num_pcie_88xx; |
| pHalmac_api->halmac_get_sdio_tx_addr = halmac_get_sdio_tx_addr_pcie_88xx; |
| pHalmac_api->halmac_get_usb_bulkout_id = halmac_get_usb_bulkout_id_pcie_88xx; |
| pHalmac_api->halmac_reg_read_8 = halmac_reg_read_8_pcie_88xx; |
| pHalmac_api->halmac_reg_write_8 = halmac_reg_write_8_pcie_88xx; |
| pHalmac_api->halmac_reg_read_16 = halmac_reg_read_16_pcie_88xx; |
| pHalmac_api->halmac_reg_write_16 = halmac_reg_write_16_pcie_88xx; |
| pHalmac_api->halmac_reg_read_32 = halmac_reg_read_32_pcie_88xx; |
| pHalmac_api->halmac_reg_write_32 = halmac_reg_write_32_pcie_88xx; |
| pHalmac_api->halmac_reg_read_indirect_32 = halmac_reg_read_indirect_32_pcie_88xx; |
| pHalmac_api->halmac_reg_sdio_cmd53_read_n = halmac_reg_read_nbyte_pcie_88xx; |
| } else { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]Set halmac io function Error!!\n"); |
| } |
| |
| if (pHalmac_adapter->chip_id == HALMAC_CHIP_ID_8822B) { |
| #if HALMAC_8822B_SUPPORT |
| halmac_mount_api_8822b(pHalmac_adapter); |
| #endif |
| } else if (pHalmac_adapter->chip_id == HALMAC_CHIP_ID_8821C) { |
| #if HALMAC_8821C_SUPPORT |
| halmac_mount_api_8821c(pHalmac_adapter); |
| #endif |
| } else if (pHalmac_adapter->chip_id == HALMAC_CHIP_ID_8822C) { |
| #if HALMAC_8822C_SUPPORT |
| halmac_mount_api_8822c(pHalmac_adapter); |
| #endif |
| } else { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]Chip ID undefine!!\n"); |
| return HALMAC_RET_CHIP_NOT_SUPPORT; |
| } |
| |
| #if HALMAC_PLATFORM_TESTPROGRAM |
| halmac_mount_misc_api_88xx(pHalmac_adapter); |
| #endif |
| |
| return HALMAC_RET_SUCCESS; |
| } |
| |
| static VOID |
| halmac_init_state_machine_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter |
| ) |
| { |
| PHALMAC_STATE pState = &pHalmac_adapter->halmac_state; |
| |
| halmac_init_offload_feature_state_machine_88xx(pHalmac_adapter); |
| |
| pState->api_state = HALMAC_API_STATE_INIT; |
| |
| pState->dlfw_state = HALMAC_DLFW_NONE; |
| pState->mac_power = HALMAC_MAC_POWER_OFF; |
| pState->ps_state = HALMAC_PS_STATE_UNDEFINE; |
| pState->gpio_cfg_state = HALMAC_GPIO_CFG_STATE_IDLE; |
| pState->rsvd_pg_state = HALMAC_RSVD_PG_STATE_IDLE; |
| } |
| |
| VOID |
| halmac_init_offload_feature_state_machine_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter |
| ) |
| { |
| PHALMAC_STATE pState = &pHalmac_adapter->halmac_state; |
| |
| pState->efuse_state_set.efuse_cmd_construct_state = HALMAC_EFUSE_CMD_CONSTRUCT_IDLE; |
| pState->efuse_state_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->efuse_state_set.seq_num = pHalmac_adapter->h2c_packet_seq; |
| |
| pState->cfg_para_state_set.cfg_para_cmd_construct_state = HALMAC_CFG_PARA_CMD_CONSTRUCT_IDLE; |
| pState->cfg_para_state_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->cfg_para_state_set.seq_num = pHalmac_adapter->h2c_packet_seq; |
| |
| pState->scan_state_set.scan_cmd_construct_state = HALMAC_SCAN_CMD_CONSTRUCT_IDLE; |
| pState->scan_state_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->scan_state_set.seq_num = pHalmac_adapter->h2c_packet_seq; |
| |
| pState->update_packet_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->update_packet_set.seq_num = pHalmac_adapter->h2c_packet_seq; |
| |
| pState->iqk_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->iqk_set.seq_num = pHalmac_adapter->h2c_packet_seq; |
| |
| pState->power_tracking_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->power_tracking_set.seq_num = pHalmac_adapter->h2c_packet_seq; |
| |
| pState->psd_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->psd_set.seq_num = pHalmac_adapter->h2c_packet_seq; |
| pState->psd_set.data_size = 0; |
| pState->psd_set.segment_size = 0; |
| pState->psd_set.pData = NULL; |
| |
| pState->fw_snding_set.fw_snding_cmd_construct_state = HALMAC_FW_SNDING_CMD_CONSTRUCT_IDLE; |
| pState->fw_snding_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->fw_snding_set.seq_num = pHalmac_adapter->h2c_packet_seq; |
| } |
| |
| /** |
| * halmac_register_api_88xx() - register feature list |
| * @pHalmac_adapter |
| * @pApi_registry : feature list, 1->enable 0->disable |
| * Author : Ivan Lin |
| * |
| * Default is enable all api registry |
| * |
| * Return : HALMAC_RET_STATUS |
| * More details of status code can be found in prototype document |
| */ |
| HALMAC_RET_STATUS |
| halmac_register_api_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter, |
| IN PHALMAC_API_REGISTRY pApi_registry |
| ) |
| { |
| VOID *pDriver_adapter = NULL; |
| |
| if (halmac_adapter_validate(pHalmac_adapter) != HALMAC_RET_SUCCESS) |
| return HALMAC_RET_ADAPTER_INVALID; |
| |
| if (halmac_api_validate(pHalmac_adapter) != HALMAC_RET_SUCCESS) |
| return HALMAC_RET_API_INVALID; |
| |
| if (pApi_registry == NULL) |
| return HALMAC_RET_NULL_POINTER; |
| |
| pDriver_adapter = pHalmac_adapter->pDriver_adapter; |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]halmac_register_api_88xx ==========>\n"); |
| |
| PLATFORM_RTL_MEMCPY(pDriver_adapter, &pHalmac_adapter->api_registry, pApi_registry, sizeof(*pApi_registry)); |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]rx_expand : %d\n", pHalmac_adapter->api_registry.rx_expand_mode_en); |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]la_mode : %d\n", pHalmac_adapter->api_registry.la_mode_en); |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]cfg_drv_rsvd_pg : %d\n", pHalmac_adapter->api_registry.cfg_drv_rsvd_pg_en); |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]sdio_cmd53_4byte : %d\n", pHalmac_adapter->api_registry.sdio_cmd53_4byte_en); |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]halmac_register_api_88xx <==========\n"); |
| |
| return HALMAC_RET_SUCCESS; |
| } |
| |
| /** |
| * halmac_pre_init_system_cfg_88xx() - pre-init system config |
| * @pHalmac_adapter : the adapter of halmac |
| * Author : KaiYuan Chang/Ivan Lin |
| * Return : HALMAC_RET_STATUS |
| * More details of status code can be found in prototype document |
| */ |
| HALMAC_RET_STATUS |
| halmac_pre_init_system_cfg_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter |
| ) |
| { |
| u32 value32, counter; |
| VOID *pDriver_adapter = NULL; |
| PHALMAC_API pHalmac_api; |
| u8 enable_bb; |
| |
| if (halmac_adapter_validate(pHalmac_adapter) != HALMAC_RET_SUCCESS) |
| return HALMAC_RET_ADAPTER_INVALID; |
| |
| if (halmac_api_validate(pHalmac_adapter) != HALMAC_RET_SUCCESS) |
| return HALMAC_RET_API_INVALID; |
| |
| pDriver_adapter = pHalmac_adapter->pDriver_adapter; |
| pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api; |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]halmac_pre_init_system_cfg ==========>\n"); |
| |
| HALMAC_REG_WRITE_8(pHalmac_adapter, REG_RSV_CTRL, 0); |
| |
| if (pHalmac_adapter->halmac_interface == HALMAC_INTERFACE_SDIO) { |
| HALMAC_REG_WRITE_8(pHalmac_adapter, REG_SDIO_HSUS_CTRL, HALMAC_REG_READ_8(pHalmac_adapter, REG_SDIO_HSUS_CTRL) & ~(BIT(0))); |
| counter = 10000; |
| while (!(HALMAC_REG_READ_8(pHalmac_adapter, REG_SDIO_HSUS_CTRL) & 0x02)) { |
| counter--; |
| if (counter == 0) |
| return HALMAC_RET_SDIO_LEAVE_SUSPEND_FAIL; |
| } |
| |
| if (pHalmac_adapter->sdio_hw_info.spec_ver == HALMAC_SDIO_SPEC_VER_3_00) |
| HALMAC_REG_WRITE_8(pHalmac_adapter, REG_HCI_OPT_CTRL + 2, HALMAC_REG_READ_8(pHalmac_adapter, REG_HCI_OPT_CTRL + 2) | BIT(2)); |
| else |
| HALMAC_REG_WRITE_8(pHalmac_adapter, REG_HCI_OPT_CTRL + 2, HALMAC_REG_READ_8(pHalmac_adapter, REG_HCI_OPT_CTRL + 2) & ~(BIT(2))); |
| } else if (pHalmac_adapter->halmac_interface == HALMAC_INTERFACE_USB) { |
| if (HALMAC_REG_READ_8(pHalmac_adapter, REG_SYS_CFG2 + 3) == 0x20) /* usb3.0 */ |
| HALMAC_REG_WRITE_8(pHalmac_adapter, 0xFE5B, HALMAC_REG_READ_8(pHalmac_adapter, 0xFE5B) | BIT(4)); |
| } else if (pHalmac_adapter->halmac_interface == HALMAC_INTERFACE_PCIE) { |
| /* For PCIE power on fail issue */ |
| HALMAC_REG_WRITE_8(pHalmac_adapter, REG_HCI_OPT_CTRL + 1, HALMAC_REG_READ_8(pHalmac_adapter, REG_HCI_OPT_CTRL + 1) | BIT(0)); |
| } |
| |
| /* Config PIN Mux */ |
| value32 = HALMAC_REG_READ_32(pHalmac_adapter, REG_PAD_CTRL1); |
| value32 = value32 & (~(BIT(28) | BIT(29))); |
| value32 = value32 | BIT(28) | BIT(29); |
| HALMAC_REG_WRITE_32(pHalmac_adapter, REG_PAD_CTRL1, value32); |
| |
| value32 = HALMAC_REG_READ_32(pHalmac_adapter, REG_LED_CFG); |
| value32 = value32 & (~(BIT(25) | BIT(26))); |
| HALMAC_REG_WRITE_32(pHalmac_adapter, REG_LED_CFG, value32); |
| |
| value32 = HALMAC_REG_READ_32(pHalmac_adapter, REG_GPIO_MUXCFG); |
| value32 = value32 & (~(BIT(2))); |
| value32 = value32 | BIT(2); |
| HALMAC_REG_WRITE_32(pHalmac_adapter, REG_GPIO_MUXCFG, value32); |
| |
| enable_bb = _FALSE; |
| halmac_set_hw_value_88xx(pHalmac_adapter, HALMAC_HW_EN_BB_RF, &enable_bb); |
| |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]halmac_pre_init_system_cfg <==========\n"); |
| |
| return HALMAC_RET_SUCCESS; |
| } |
| |
| /** |
| * halmac_init_system_cfg_88xx() - init system config |
| * @pHalmac_adapter : the adapter of halmac |
| * Author : KaiYuan Chang/Ivan Lin |
| * Return : HALMAC_RET_STATUS |
| * More details of status code can be found in prototype document |
| */ |
| HALMAC_RET_STATUS |
| halmac_init_system_cfg_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter |
| ) |
| { |
| VOID *pDriver_adapter = NULL; |
| PHALMAC_API pHalmac_api; |
| u32 temp = 0; |
| |
| if (halmac_adapter_validate(pHalmac_adapter) != HALMAC_RET_SUCCESS) |
| return HALMAC_RET_ADAPTER_INVALID; |
| |
| if (halmac_api_validate(pHalmac_adapter) != HALMAC_RET_SUCCESS) |
| return HALMAC_RET_API_INVALID; |
| |
| pDriver_adapter = pHalmac_adapter->pDriver_adapter; |
| pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api; |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]halmac_init_system_cfg ==========>\n"); |
| |
| HALMAC_REG_WRITE_8(pHalmac_adapter, REG_SYS_FUNC_EN + 1, HALMAC_FUNCTION_ENABLE_88XX); |
| HALMAC_REG_WRITE_32(pHalmac_adapter, REG_SYS_SDIO_CTRL, (u32)(HALMAC_REG_READ_32(pHalmac_adapter, REG_SYS_SDIO_CTRL) | BIT_LTE_MUX_CTRL_PATH)); |
| HALMAC_REG_WRITE_32(pHalmac_adapter, REG_CPU_DMEM_CON, (u32)(HALMAC_REG_READ_32(pHalmac_adapter, REG_CPU_DMEM_CON) | BIT_WL_PLATFORM_RST)); |
| |
| /*disable boot-from-flash for driver's DL FW*/ |
| temp = HALMAC_REG_READ_32(pHalmac_adapter, REG_MCUFW_CTRL); |
| if (temp & BIT_BOOT_FSPI_EN) { |
| HALMAC_REG_WRITE_32(pHalmac_adapter, REG_MCUFW_CTRL, temp & (~BIT_BOOT_FSPI_EN)); |
| HALMAC_REG_WRITE_32(pHalmac_adapter, REG_GPIO_MUXCFG, HALMAC_REG_READ_32(pHalmac_adapter, REG_GPIO_MUXCFG) & (~BIT_FSPI_EN)); |
| } |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]halmac_init_system_cfg <==========\n"); |
| |
| return HALMAC_RET_SUCCESS; |
| } |
| |
| /** |
| * halmac_init_edca_cfg_88xx() - init EDCA config |
| * @pHalmac_adapter : the adapter of halmac |
| * Author : KaiYuan Chang/Ivan Lin |
| * Return : HALMAC_RET_STATUS |
| * More details of status code can be found in prototype document |
| */ |
| HALMAC_RET_STATUS |
| halmac_init_edca_cfg_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter |
| ) |
| { |
| u32 value32; |
| VOID *pDriver_adapter = NULL; |
| PHALMAC_API pHalmac_api; |
| |
| if (halmac_adapter_validate(pHalmac_adapter) != HALMAC_RET_SUCCESS) |
| return HALMAC_RET_ADAPTER_INVALID; |
| |
| if (halmac_api_validate(pHalmac_adapter) != HALMAC_RET_SUCCESS) |
| return HALMAC_RET_API_INVALID; |
| |
| pDriver_adapter = pHalmac_adapter->pDriver_adapter; |
| pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api; |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]halmac_init_edca_cfg_88xx ==========>\n"); |
| |
| /* Clear TX pause */ |
| HALMAC_REG_WRITE_16(pHalmac_adapter, REG_TXPAUSE, 0x0000); |
| |
| HALMAC_REG_WRITE_8(pHalmac_adapter, REG_SLOT, HALMAC_SLOT_TIME_88XX); |
| HALMAC_REG_WRITE_8(pHalmac_adapter, REG_PIFS, HALMAC_PIFS_TIME_88XX); |
| value32 = HALMAC_SIFS_CCK_CTX_88XX | (HALMAC_SIFS_OFDM_CTX_88XX << BIT_SHIFT_SIFS_OFDM_CTX) | |
| (HALMAC_SIFS_CCK_TRX_88XX << BIT_SHIFT_SIFS_CCK_TRX) | (HALMAC_SIFS_OFDM_TRX_88XX << BIT_SHIFT_SIFS_OFDM_TRX); |
| HALMAC_REG_WRITE_32(pHalmac_adapter, REG_SIFS, value32); |
| |
| HALMAC_REG_WRITE_32(pHalmac_adapter, REG_EDCA_VO_PARAM, HALMAC_REG_READ_32(pHalmac_adapter, REG_EDCA_VO_PARAM) & 0xFFFF); |
| HALMAC_REG_WRITE_16(pHalmac_adapter, REG_EDCA_VO_PARAM + 2, HALMAC_VO_TXOP_LIMIT_88XX); |
| HALMAC_REG_WRITE_16(pHalmac_adapter, REG_EDCA_VI_PARAM + 2, HALMAC_VI_TXOP_LIMIT_88XX); |
| |
| HALMAC_REG_WRITE_32(pHalmac_adapter, REG_RD_NAV_NXT, HALMAC_RDG_NAV_88XX | (HALMAC_TXOP_NAV_88XX << 16)); |
| HALMAC_REG_WRITE_16(pHalmac_adapter, REG_RXTSF_OFFSET_CCK, HALMAC_CCK_RX_TSF_88XX | (HALMAC_OFDM_RX_TSF_88XX) << 8); |
| |
| /* Set beacon cotnrol - enable TSF and other related functions */ |
| HALMAC_REG_WRITE_8(pHalmac_adapter, REG_BCN_CTRL, (u8)(HALMAC_REG_READ_8(pHalmac_adapter, REG_BCN_CTRL) | BIT_EN_BCN_FUNCTION)); |
| |
| /* Set send beacon related registers */ |
| HALMAC_REG_WRITE_32(pHalmac_adapter, REG_TBTT_PROHIBIT, HALMAC_TBTT_PROHIBIT_88XX | (HALMAC_TBTT_HOLD_TIME_88XX << BIT_SHIFT_TBTT_HOLD_TIME_AP)); |
| HALMAC_REG_WRITE_8(pHalmac_adapter, REG_DRVERLYINT, HALMAC_DRIVER_EARLY_INT_88XX); |
| HALMAC_REG_WRITE_8(pHalmac_adapter, REG_BCNDMATIM, HALMAC_BEACON_DMA_TIM_88XX); |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]halmac_init_edca_cfg_88xx <==========\n"); |
| |
| return HALMAC_RET_SUCCESS; |
| } |
| |
| /** |
| * halmac_init_wmac_cfg_88xx() - init wmac config |
| * @pHalmac_adapter : the adapter of halmac |
| * Author : KaiYuan Chang/Ivan Lin |
| * Return : HALMAC_RET_STATUS |
| * More details of status code can be found in prototype document |
| */ |
| HALMAC_RET_STATUS |
| halmac_init_wmac_cfg_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter |
| ) |
| { |
| u32 value32; |
| VOID *pDriver_adapter = NULL; |
| PHALMAC_API pHalmac_api; |
| |
| if (halmac_adapter_validate(pHalmac_adapter) != HALMAC_RET_SUCCESS) |
| return HALMAC_RET_ADAPTER_INVALID; |
| |
| if (halmac_api_validate(pHalmac_adapter) != HALMAC_RET_SUCCESS) |
| return HALMAC_RET_API_INVALID; |
| |
| pDriver_adapter = pHalmac_adapter->pDriver_adapter; |
| pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api; |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]halmac_init_wmac_cfg_88xx ==========>\n"); |
| |
| HALMAC_REG_WRITE_32(pHalmac_adapter, REG_RXFLTMAP0, HALMAC_RX_FILTER0_88XX); |
| HALMAC_REG_WRITE_16(pHalmac_adapter, REG_RXFLTMAP2, HALMAC_RX_FILTER_88XX); |
| |
| HALMAC_REG_WRITE_32(pHalmac_adapter, REG_RCR, HALMAC_RCR_CONFIG_88XX); |
| |
| HALMAC_REG_WRITE_8(pHalmac_adapter, REG_RX_PKT_LIMIT, HALMAC_RXPKT_MAX_SIZE_BASE512); |
| |
| HALMAC_REG_WRITE_8(pHalmac_adapter, REG_TCR + 2, 0x30); |
| HALMAC_REG_WRITE_8(pHalmac_adapter, REG_TCR + 1, 0x30); |
| |
| #if HALMAC_8821C_SUPPORT |
| if (pHalmac_adapter->chip_id == HALMAC_CHIP_ID_8821C) |
| HALMAC_REG_WRITE_8(pHalmac_adapter, REG_ACKTO_CCK, HALMAC_ACK_TO_CCK_88XX); |
| #endif |
| HALMAC_REG_WRITE_32(pHalmac_adapter, REG_WMAC_OPTION_FUNCTION + 8, 0x30810041); |
| |
| value32 = (pHalmac_adapter->hw_config_info.trx_mode == HALMAC_TRNSFER_NORMAL) ? 0x50802098 : 0x50802080; |
| HALMAC_REG_WRITE_32(pHalmac_adapter, REG_WMAC_OPTION_FUNCTION + 4, value32); |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]halmac_init_wmac_cfg_88xx <==========\n"); |
| |
| return HALMAC_RET_SUCCESS; |
| } |
| |
| /** |
| * halmac_init_mac_cfg_88xx() - config page1~page7 register |
| * @pHalmac_adapter : the adapter of halmac |
| * @mode : trx mode |
| * Author : KaiYuan Chang/Ivan Lin |
| * Return : HALMAC_RET_STATUS |
| * More details of status code can be found in prototype document |
| */ |
| HALMAC_RET_STATUS |
| halmac_init_mac_cfg_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter, |
| IN HALMAC_TRX_MODE mode |
| ) |
| { |
| VOID *pDriver_adapter = NULL; |
| PHALMAC_API pHalmac_api; |
| HALMAC_RET_STATUS status = HALMAC_RET_SUCCESS; |
| |
| if (halmac_adapter_validate(pHalmac_adapter) != HALMAC_RET_SUCCESS) |
| return HALMAC_RET_ADAPTER_INVALID; |
| |
| if (halmac_api_validate(pHalmac_adapter) != HALMAC_RET_SUCCESS) |
| return HALMAC_RET_API_INVALID; |
| |
| pDriver_adapter = pHalmac_adapter->pDriver_adapter; |
| pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api; |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]halmac_init_mac_cfg_88xx ==========>mode = %d\n", mode); |
| |
| status = pHalmac_api->halmac_init_trx_cfg(pHalmac_adapter, mode); |
| if (status != HALMAC_RET_SUCCESS) { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]halmac_init_trx_cfg errorr = %x\n", status); |
| return status; |
| } |
| |
| status = pHalmac_api->halmac_init_protocol_cfg(pHalmac_adapter); |
| if (status != HALMAC_RET_SUCCESS) { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]halmac_init_protocol_cfg_88xx error = %x\n", status); |
| return status; |
| } |
| |
| status = halmac_init_edca_cfg_88xx(pHalmac_adapter); |
| if (status != HALMAC_RET_SUCCESS) { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]halmac_init_edca_cfg_88xx error = %x\n", status); |
| return status; |
| } |
| |
| status = halmac_init_wmac_cfg_88xx(pHalmac_adapter); |
| if (status != HALMAC_RET_SUCCESS) { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]halmac_init_wmac_cfg_88xx error = %x\n", status); |
| return status; |
| } |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]halmac_init_mac_cfg_88xx <==========\n"); |
| |
| return status; |
| } |
| |
| /** |
| * halmac_reset_feature_88xx() -reset async api cmd status |
| * @pHalmac_adapter : the adapter of halmac |
| * @feature_id : feature_id |
| * Author : Ivan Lin/KaiYuan Chang |
| * Return : HALMAC_RET_STATUS. |
| * More details of status code can be found in prototype document |
| */ |
| HALMAC_RET_STATUS |
| halmac_reset_feature_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter, |
| IN HALMAC_FEATURE_ID feature_id |
| ) |
| { |
| VOID *pDriver_adapter = NULL; |
| PHALMAC_STATE pState = &pHalmac_adapter->halmac_state; |
| |
| if (halmac_adapter_validate(pHalmac_adapter) != HALMAC_RET_SUCCESS) |
| return HALMAC_RET_ADAPTER_INVALID; |
| |
| if (halmac_api_validate(pHalmac_adapter) != HALMAC_RET_SUCCESS) |
| return HALMAC_RET_API_INVALID; |
| |
| pDriver_adapter = pHalmac_adapter->pDriver_adapter; |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_H2C, HALMAC_DBG_TRACE, "[TRACE]halmac_reset_feature_88xx ==========>\n"); |
| |
| switch (feature_id) { |
| case HALMAC_FEATURE_CFG_PARA: |
| pState->cfg_para_state_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->cfg_para_state_set.cfg_para_cmd_construct_state = HALMAC_CFG_PARA_CMD_CONSTRUCT_IDLE; |
| break; |
| case HALMAC_FEATURE_DUMP_PHYSICAL_EFUSE: |
| case HALMAC_FEATURE_DUMP_LOGICAL_EFUSE: |
| pState->efuse_state_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->efuse_state_set.efuse_cmd_construct_state = HALMAC_EFUSE_CMD_CONSTRUCT_IDLE; |
| break; |
| case HALMAC_FEATURE_CHANNEL_SWITCH: |
| pState->scan_state_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->scan_state_set.scan_cmd_construct_state = HALMAC_SCAN_CMD_CONSTRUCT_IDLE; |
| break; |
| case HALMAC_FEATURE_UPDATE_PACKET: |
| pState->update_packet_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| break; |
| case HALMAC_FEATURE_IQK: |
| pState->iqk_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| break; |
| case HALMAC_FEATURE_POWER_TRACKING: |
| pState->power_tracking_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| break; |
| case HALMAC_FEATURE_PSD: |
| pState->psd_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| break; |
| case HALMAC_FEATURE_FW_SNDING: |
| pState->fw_snding_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->fw_snding_set.fw_snding_cmd_construct_state = HALMAC_FW_SNDING_CMD_CONSTRUCT_IDLE; |
| break; |
| case HALMAC_FEATURE_ALL: |
| pState->cfg_para_state_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->cfg_para_state_set.cfg_para_cmd_construct_state = HALMAC_CFG_PARA_CMD_CONSTRUCT_IDLE; |
| pState->efuse_state_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->efuse_state_set.efuse_cmd_construct_state = HALMAC_EFUSE_CMD_CONSTRUCT_IDLE; |
| pState->scan_state_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->scan_state_set.scan_cmd_construct_state = HALMAC_SCAN_CMD_CONSTRUCT_IDLE; |
| pState->update_packet_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->iqk_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->power_tracking_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->psd_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->fw_snding_set.process_status = HALMAC_CMD_PROCESS_IDLE; |
| pState->fw_snding_set.fw_snding_cmd_construct_state = HALMAC_FW_SNDING_CMD_CONSTRUCT_IDLE; |
| break; |
| default: |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_SND, HALMAC_DBG_ERR, "[ERR]halmac_reset_feature_88xx invalid feature id %d\n", feature_id); |
| return HALMAC_RET_INVALID_FEATURE_ID; |
| } |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_H2C, HALMAC_DBG_TRACE, "[TRACE]halmac_reset_feature_88xx <==========\n"); |
| |
| return HALMAC_RET_SUCCESS; |
| } |
| |
| /** |
| * (debug API)halmac_verify_platform_api_88xx() - verify platform api |
| * @pHalmac_adapter : the adapter of halmac |
| * Author : KaiYuan Chang/Ivan Lin |
| * Return : HALMAC_RET_STATUS |
| * More details of status code can be found in prototype document |
| */ |
| HALMAC_RET_STATUS |
| halmac_verify_platform_api_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter |
| ) |
| { |
| VOID *pDriver_adapter = NULL; |
| HALMAC_RET_STATUS ret_status = HALMAC_RET_SUCCESS; |
| |
| if (halmac_adapter_validate(pHalmac_adapter) != HALMAC_RET_SUCCESS) |
| return HALMAC_RET_ADAPTER_INVALID; |
| |
| if (halmac_api_validate(pHalmac_adapter) != HALMAC_RET_SUCCESS) |
| return HALMAC_RET_API_INVALID; |
| |
| pDriver_adapter = pHalmac_adapter->pDriver_adapter; |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_H2C, HALMAC_DBG_TRACE, "[TRACE]halmac_verify_platform_api_88xx ==========>\n"); |
| |
| ret_status = halmac_verify_io_88xx(pHalmac_adapter); |
| |
| if (ret_status != HALMAC_RET_SUCCESS) |
| return ret_status; |
| |
| if (pHalmac_adapter->txff_allocation.la_mode != HALMAC_LA_MODE_FULL) |
| ret_status = halmac_verify_send_rsvd_page_88xx(pHalmac_adapter); |
| |
| if (ret_status != HALMAC_RET_SUCCESS) |
| return ret_status; |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_H2C, HALMAC_DBG_TRACE, "[TRACE]halmac_verify_platform_api_88xx <==========\n"); |
| |
| return ret_status; |
| } |
| |
| VOID |
| halmac_tx_desc_checksum_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter, |
| IN u8 enable |
| ) |
| { |
| VOID *pDriver_adapter = NULL; |
| PHALMAC_API pHalmac_api; |
| |
| pDriver_adapter = pHalmac_adapter->pDriver_adapter; |
| pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api; |
| |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]halmac_tx_desc_checksum_88xx ==========>halmac_tx_desc_checksum_en = %d\n", enable); |
| |
| pHalmac_adapter->tx_desc_checksum = enable; |
| if (enable == _TRUE) |
| HALMAC_REG_WRITE_16(pHalmac_adapter, REG_TXDMA_OFFSET_CHK, (u16)(HALMAC_REG_READ_16(pHalmac_adapter, REG_TXDMA_OFFSET_CHK) | BIT_SDIO_TXDESC_CHKSUM_EN)); |
| else |
| HALMAC_REG_WRITE_16(pHalmac_adapter, REG_TXDMA_OFFSET_CHK, (u16)(HALMAC_REG_READ_16(pHalmac_adapter, REG_TXDMA_OFFSET_CHK) & ~BIT_SDIO_TXDESC_CHKSUM_EN)); |
| } |
| |
| static HALMAC_RET_STATUS |
| halmac_verify_io_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter |
| ) |
| { |
| u8 value8, wvalue8; |
| u32 value32, value32_2, wvalue32; |
| u32 halmac_offset; |
| VOID *pDriver_adapter = NULL; |
| HALMAC_RET_STATUS ret_status = HALMAC_RET_SUCCESS; |
| |
| pDriver_adapter = pHalmac_adapter->pDriver_adapter; |
| |
| if (pHalmac_adapter->halmac_interface == HALMAC_INTERFACE_SDIO) { |
| halmac_offset = REG_PAGE5_DUMMY; |
| if (0 == (halmac_offset & 0xFFFF0000)) |
| halmac_offset |= WLAN_IOREG_OFFSET; |
| |
| ret_status = halmac_convert_to_sdio_bus_offset_88xx(pHalmac_adapter, &halmac_offset); |
| |
| /* Verify CMD52 R/W */ |
| wvalue8 = 0xab; |
| PLATFORM_SDIO_CMD52_WRITE(pDriver_adapter, halmac_offset, wvalue8); |
| |
| value8 = PLATFORM_SDIO_CMD52_READ(pDriver_adapter, halmac_offset); |
| |
| if (value8 != wvalue8) { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]cmd52 r/w fail write = %X read = %X\n", wvalue8, value8); |
| ret_status = HALMAC_RET_PLATFORM_API_INCORRECT; |
| } else { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]cmd52 r/w ok\n"); |
| } |
| |
| /* Verify CMD53 R/W */ |
| PLATFORM_SDIO_CMD52_WRITE(pDriver_adapter, halmac_offset, 0xaa); |
| PLATFORM_SDIO_CMD52_WRITE(pDriver_adapter, halmac_offset + 1, 0xbb); |
| PLATFORM_SDIO_CMD52_WRITE(pDriver_adapter, halmac_offset + 2, 0xcc); |
| PLATFORM_SDIO_CMD52_WRITE(pDriver_adapter, halmac_offset + 3, 0xdd); |
| |
| value32 = PLATFORM_SDIO_CMD53_READ_32(pDriver_adapter, halmac_offset); |
| |
| if (value32 != 0xddccbbaa) { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]cmd53 r fail : read = %X\n"); |
| ret_status = HALMAC_RET_PLATFORM_API_INCORRECT; |
| } else { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]cmd53 r ok\n"); |
| } |
| |
| wvalue32 = 0x11223344; |
| PLATFORM_SDIO_CMD53_WRITE_32(pDriver_adapter, halmac_offset, wvalue32); |
| |
| value32 = PLATFORM_SDIO_CMD53_READ_32(pDriver_adapter, halmac_offset); |
| |
| if (value32 != wvalue32) { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]cmd53 w fail\n"); |
| ret_status = HALMAC_RET_PLATFORM_API_INCORRECT; |
| } else { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]cmd53 w ok\n"); |
| } |
| |
| value32 = PLATFORM_SDIO_CMD53_READ_32(pDriver_adapter, halmac_offset + 2); /* value32 should be 0x33441122 */ |
| |
| wvalue32 = 0x11225566; |
| PLATFORM_SDIO_CMD53_WRITE_32(pDriver_adapter, halmac_offset, wvalue32); |
| |
| value32_2 = PLATFORM_SDIO_CMD53_READ_32(pDriver_adapter, halmac_offset + 2); /* value32 should be 0x55661122 */ |
| if (value32_2 == value32) { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]cmd52 is used for HAL_SDIO_CMD53_READ_32\n"); |
| ret_status = HALMAC_RET_PLATFORM_API_INCORRECT; |
| } else { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]cmd53 is correctly used\n"); |
| } |
| } else { |
| wvalue32 = 0x77665511; |
| PLATFORM_REG_WRITE_32(pDriver_adapter, REG_PAGE5_DUMMY, wvalue32); |
| |
| value32 = PLATFORM_REG_READ_32(pDriver_adapter, REG_PAGE5_DUMMY); |
| if (value32 != wvalue32) { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]reg rw\n"); |
| ret_status = HALMAC_RET_PLATFORM_API_INCORRECT; |
| } else { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]reg rw ok\n"); |
| } |
| } |
| |
| return ret_status; |
| } |
| |
| static HALMAC_RET_STATUS |
| halmac_verify_send_rsvd_page_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter |
| ) |
| { |
| u8 *rsvd_buf = NULL; |
| u8 *rsvd_page = NULL; |
| u32 i; |
| u32 h2c_pkt_verify_size = 64, h2c_pkt_verify_payload = 0xab; |
| VOID *pDriver_adapter = NULL; |
| HALMAC_RET_STATUS ret_status = HALMAC_RET_SUCCESS; |
| |
| pDriver_adapter = pHalmac_adapter->pDriver_adapter; |
| |
| rsvd_buf = (u8 *)PLATFORM_RTL_MALLOC(pDriver_adapter, h2c_pkt_verify_size); |
| |
| if (rsvd_buf == NULL) { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]rsvd buffer malloc fail!!\n"); |
| return HALMAC_RET_MALLOC_FAIL; |
| } |
| |
| PLATFORM_RTL_MEMSET(pDriver_adapter, rsvd_buf, (u8)h2c_pkt_verify_payload, h2c_pkt_verify_size); |
| |
| ret_status = halmac_download_rsvd_page_88xx(pHalmac_adapter, pHalmac_adapter->txff_allocation.rsvd_pg_bndy, |
| rsvd_buf, h2c_pkt_verify_size); |
| if (ret_status != HALMAC_RET_SUCCESS) { |
| PLATFORM_RTL_FREE(pDriver_adapter, rsvd_buf, h2c_pkt_verify_size); |
| return ret_status; |
| } |
| |
| rsvd_page = (u8 *)PLATFORM_RTL_MALLOC(pDriver_adapter, h2c_pkt_verify_size + pHalmac_adapter->hw_config_info.txdesc_size); |
| |
| if (rsvd_page == NULL) { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]rsvd page malloc fail!!\n"); |
| PLATFORM_RTL_FREE(pDriver_adapter, rsvd_buf, h2c_pkt_verify_size); |
| return HALMAC_RET_MALLOC_FAIL; |
| } |
| |
| PLATFORM_RTL_MEMSET(pDriver_adapter, rsvd_page, 0x00, h2c_pkt_verify_size + pHalmac_adapter->hw_config_info.txdesc_size); |
| |
| ret_status = halmac_dump_fifo_88xx(pHalmac_adapter, HAL_FIFO_SEL_RSVD_PAGE, 0, h2c_pkt_verify_size + pHalmac_adapter->hw_config_info.txdesc_size, rsvd_page); |
| |
| if (ret_status != HALMAC_RET_SUCCESS) { |
| PLATFORM_RTL_FREE(pDriver_adapter, rsvd_buf, h2c_pkt_verify_size); |
| PLATFORM_RTL_FREE(pDriver_adapter, rsvd_page, h2c_pkt_verify_size + pHalmac_adapter->hw_config_info.txdesc_size); |
| return ret_status; |
| } |
| |
| for (i = 0; i < h2c_pkt_verify_size; i++) { |
| if (*(rsvd_buf + i) != *(rsvd_page + (i + pHalmac_adapter->hw_config_info.txdesc_size))) { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]Compare RSVD page Fail\n"); |
| ret_status = HALMAC_RET_PLATFORM_API_INCORRECT; |
| } |
| } |
| |
| PLATFORM_RTL_FREE(pDriver_adapter, rsvd_buf, h2c_pkt_verify_size); |
| PLATFORM_RTL_FREE(pDriver_adapter, rsvd_page, h2c_pkt_verify_size + pHalmac_adapter->hw_config_info.txdesc_size); |
| |
| return ret_status; |
| } |
| |
| HALMAC_RET_STATUS |
| halmac_pg_num_parser_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter, |
| IN HALMAC_TRX_MODE halmac_trx_mode, |
| IN PHALMAC_PG_NUM pPg_num_table |
| ) |
| { |
| u8 search_flag; |
| u16 HPQ_num = 0, LPQ_Nnum = 0, NPQ_num = 0, GAPQ_num = 0; |
| u16 EXPQ_num = 0, PUBQ_num = 0; |
| u32 i = 0; |
| VOID *pDriver_adapter = NULL; |
| |
| pDriver_adapter = pHalmac_adapter->pDriver_adapter; |
| |
| search_flag = 0; |
| for (i = 0; i < HALMAC_TRX_MODE_MAX; i++) { |
| if (halmac_trx_mode == pPg_num_table[i].mode) { |
| HPQ_num = pPg_num_table[i].hq_num; |
| LPQ_Nnum = pPg_num_table[i].lq_num; |
| NPQ_num = pPg_num_table[i].nq_num; |
| EXPQ_num = pPg_num_table[i].exq_num; |
| GAPQ_num = pPg_num_table[i].gap_num; |
| PUBQ_num = pHalmac_adapter->txff_allocation.ac_q_pg_num - HPQ_num - LPQ_Nnum - NPQ_num - EXPQ_num - GAPQ_num; |
| search_flag = 1; |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]halmac_pg_num_parser_88xx done\n"); |
| break; |
| } |
| } |
| |
| if (search_flag == 0) { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]HALMAC_RET_TRX_MODE_NOT_SUPPORT 1 switch case not support\n"); |
| return HALMAC_RET_TRX_MODE_NOT_SUPPORT; |
| } |
| |
| if (pHalmac_adapter->txff_allocation.ac_q_pg_num < HPQ_num + LPQ_Nnum + NPQ_num + EXPQ_num + GAPQ_num) { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]acqnum = %d\n", pHalmac_adapter->txff_allocation.ac_q_pg_num); |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]HPQ_num = %d\n", HPQ_num); |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]LPQ_num = %d\n", LPQ_Nnum); |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]NPQ_num = %d\n", NPQ_num); |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]EPQ_num = %d\n", EXPQ_num); |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]GAPQ_num = %d\n", GAPQ_num); |
| return HALMAC_RET_CFG_TXFIFO_PAGE_FAIL; |
| } |
| |
| pHalmac_adapter->txff_allocation.high_queue_pg_num = HPQ_num; |
| pHalmac_adapter->txff_allocation.low_queue_pg_num = LPQ_Nnum; |
| pHalmac_adapter->txff_allocation.normal_queue_pg_num = NPQ_num; |
| pHalmac_adapter->txff_allocation.extra_queue_pg_num = EXPQ_num; |
| pHalmac_adapter->txff_allocation.pub_queue_pg_num = PUBQ_num; |
| |
| return HALMAC_RET_SUCCESS; |
| } |
| |
| HALMAC_RET_STATUS |
| halmac_rqpn_parser_88xx( |
| IN PHALMAC_ADAPTER pHalmac_adapter, |
| IN HALMAC_TRX_MODE halmac_trx_mode, |
| IN PHALMAC_RQPN pRqpn_table |
| ) |
| { |
| u8 search_flag; |
| u32 i; |
| VOID *pDriver_adapter = NULL; |
| |
| pDriver_adapter = pHalmac_adapter->pDriver_adapter; |
| |
| search_flag = 0; |
| for (i = 0; i < HALMAC_TRX_MODE_MAX; i++) { |
| if (halmac_trx_mode == pRqpn_table[i].mode) { |
| pHalmac_adapter->halmac_ptcl_queue[HALMAC_PTCL_QUEUE_VO] = pRqpn_table[i].dma_map_vo; |
| pHalmac_adapter->halmac_ptcl_queue[HALMAC_PTCL_QUEUE_VI] = pRqpn_table[i].dma_map_vi; |
| pHalmac_adapter->halmac_ptcl_queue[HALMAC_PTCL_QUEUE_BE] = pRqpn_table[i].dma_map_be; |
| pHalmac_adapter->halmac_ptcl_queue[HALMAC_PTCL_QUEUE_BK] = pRqpn_table[i].dma_map_bk; |
| pHalmac_adapter->halmac_ptcl_queue[HALMAC_PTCL_QUEUE_MG] = pRqpn_table[i].dma_map_mg; |
| pHalmac_adapter->halmac_ptcl_queue[HALMAC_PTCL_QUEUE_HI] = pRqpn_table[i].dma_map_hi; |
| search_flag = 1; |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE]halmac_rqpn_parser_88xx done\n"); |
| break; |
| } |
| } |
| |
| if (search_flag == 0) { |
| PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "[ERR]HALMAC_RET_TRX_MODE_NOT_SUPPORT 1 switch case not support\n"); |
| return HALMAC_RET_TRX_MODE_NOT_SUPPORT; |
| } |
| |
| return HALMAC_RET_SUCCESS; |
| } |
| |
| #endif /* HALMAC_88XX_SUPPORT */ |