diff --git a/dp/inc/cdp_txrx_cmn_reg.h b/dp/inc/cdp_txrx_cmn_reg.h index 7dd08e5d8a..7607c2baa4 100644 --- a/dp/inc/cdp_txrx_cmn_reg.h +++ b/dp/inc/cdp_txrx_cmn_reg.h @@ -69,7 +69,7 @@ ol_txrx_soc_attach(void *scn_handle, struct ol_if_ops *dp_ol_if_ops); * Return: DP SOC handle on success, NULL on failure */ #if defined(QCA_WIFI_QCA8074) || defined(QCA_WIFI_QCA6018) || \ - defined(QCA_WIFI_QCA5018) + defined(QCA_WIFI_QCA5018) || defined(QCA_WIFI_QCA9574) struct cdp_soc_t * dp_soc_attach_wifi3(struct cdp_ctrl_objmgr_psoc *ctrl_psoc, struct hif_opaque_softc *hif_handle, @@ -109,6 +109,7 @@ static inline int cdp_get_arch_type_from_devid(uint16_t devid) case LITHIUM_DP: /*FIXME Add lithium devide IDs */ case QCA8074_DEVICE_ID: /* Hawekeye */ case QCA8074V2_DEVICE_ID: /* Hawekeye V2*/ + case QCA9574_DEVICE_ID: case QCA5018_DEVICE_ID: case QCA6290_DEVICE_ID: case QCN9000_DEVICE_ID: diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index cb3dcbc49d..44605b4412 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -12661,7 +12661,7 @@ void dp_soc_set_txrx_ring_map(struct dp_soc *soc) } #if defined(QCA_WIFI_QCA8074) || defined(QCA_WIFI_QCA6018) || \ - defined(QCA_WIFI_QCA5018) + defined(QCA_WIFI_QCA5018) || defined(QCA_WIFI_QCA9574) /** * dp_soc_attach_wifi3() - Attach txrx SOC * @ctrl_psoc: Opaque SOC handle from control plane @@ -14412,6 +14412,7 @@ static void dp_soc_cfg_init(struct dp_soc *soc) break; case TARGET_TYPE_QCA8074V2: case TARGET_TYPE_QCA6018: + case TARGET_TYPE_QCA9574: wlan_cfg_set_mon_delayed_replenish_entries(soc->wlan_cfg_ctx, MON_BUF_MIN_ENTRIES); wlan_cfg_set_reo_dst_ring_size(soc->wlan_cfg_ctx, @@ -14499,6 +14500,7 @@ static void dp_soc_cfg_attach(struct dp_soc *soc) break; case TARGET_TYPE_QCA8074V2: case TARGET_TYPE_QCA6018: + case TARGET_TYPE_QCA9574: case TARGET_TYPE_QCN6122: case TARGET_TYPE_QCA5018: wlan_cfg_set_tso_desc_attach_defer(soc->wlan_cfg_ctx, 1); diff --git a/gpio/dispatcher/src/wlan_gpio_tgt_api.c b/gpio/dispatcher/src/wlan_gpio_tgt_api.c index 293cfdf0bb..1985a2b401 100644 --- a/gpio/dispatcher/src/wlan_gpio_tgt_api.c +++ b/gpio/dispatcher/src/wlan_gpio_tgt_api.c @@ -102,6 +102,7 @@ static bool tgt_gpio_disabled(struct wlan_objmgr_psoc *psoc) if ((target_type == TARGET_TYPE_QCA8074) || (target_type == TARGET_TYPE_QCN6122) || (target_type == TARGET_TYPE_QCA8074V2) || + (target_type == TARGET_TYPE_QCA9574) || (target_type == TARGET_TYPE_QCA5018) || (target_type == TARGET_TYPE_QCA6018)) { return true; diff --git a/hal/wifi3.0/hal_srng.c b/hal/wifi3.0/hal_srng.c index 9ac76464cf..f185b425ad 100644 --- a/hal/wifi3.0/hal_srng.c +++ b/hal/wifi3.0/hal_srng.c @@ -29,7 +29,8 @@ void hal_qca6290_attach(struct hal_soc *hal); #ifdef QCA_WIFI_QCA8074 void hal_qca8074_attach(struct hal_soc *hal); #endif -#if defined(QCA_WIFI_QCA8074V2) || defined(QCA_WIFI_QCA6018) +#if defined(QCA_WIFI_QCA8074V2) || defined(QCA_WIFI_QCA6018) || \ + defined(QCA_WIFI_QCA9574) void hal_qca8074v2_attach(struct hal_soc *hal); #endif #ifdef QCA_WIFI_QCA6390 @@ -417,6 +418,12 @@ static void hal_target_based_configure(struct hal_soc *hal) break; #endif +#if defined(QCA_WIFI_QCA9574) + case TARGET_TYPE_QCA9574: + hal_qca8074v2_attach(hal); + break; +#endif + #if defined(QCA_WIFI_QCN6122) case TARGET_TYPE_QCN6122: hal->use_register_windowing = true; diff --git a/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h b/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h index 38e349f56e..29cbfce7c1 100644 --- a/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h +++ b/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h @@ -23,7 +23,7 @@ #include "hal_tx.h" #include "dp_types.h" #include "hal_api_mon.h" -#ifndef QCA_WIFI_QCA6018 +#if (!defined(QCA_WIFI_QCA6018)) && (!defined(QCA_WIFI_QCA9574)) #include "phyrx_other_receive_info_su_evm_details.h" #endif @@ -422,7 +422,7 @@ static uint8_t hal_rx_get_tlv_8074v2(void *rx_tlv) return HAL_RX_GET(rx_tlv, PHYRX_RSSI_LEGACY_0, RECEIVE_BANDWIDTH); } -#ifndef QCA_WIFI_QCA6018 +#if (!defined(QCA_WIFI_QCA6018)) && (!defined(QCA_WIFI_QCA9574)) #define HAL_RX_UPDATE_SU_EVM_INFO(rx_tlv, ppdu_info, evm, pilot) \ (ppdu_info)->evm_info.pilot_evm[pilot] = HAL_RX_GET(rx_tlv, \ PHYRX_OTHER_RECEIVE_INFO, \ diff --git a/hif/inc/hif.h b/hif/inc/hif.h index f7403f4260..e8d768554f 100644 --- a/hif/inc/hif.h +++ b/hif/inc/hif.h @@ -75,6 +75,7 @@ typedef void *hif_handle_t; #define HIF_TYPE_QCN6122 25 #define HIF_TYPE_WCN7850 26 #define HIF_TYPE_QCN9224 27 +#define HIF_TYPE_QCA9574 28 #define DMA_COHERENT_MASK_DEFAULT 37 diff --git a/hif/inc/hostdef.h b/hif/inc/hostdef.h index 28b02d75c3..496c8c28ec 100644 --- a/hif/inc/hostdef.h +++ b/hif/inc/hostdef.h @@ -49,4 +49,5 @@ extern struct hostdef_s *QCA5018_HOSTDEF; extern struct hostdef_s *QCN9000_HOSTDEF; extern struct hostdef_s *QCN6122_HOSTDEF; extern struct hostdef_s *QCN9224_HOSTDEF; +extern struct hostdef_s *QCA9574_HOSTDEF; #endif diff --git a/hif/inc/target_type.h b/hif/inc/target_type.h index e1fd2fdbb4..2423c6d973 100644 --- a/hif/inc/target_type.h +++ b/hif/inc/target_type.h @@ -79,6 +79,11 @@ extern "C" { #define TARGET_TYPE_QCN9224 32 #endif +/* Alder */ +#ifndef TARGET_TYPE_QCA9574 +#define TARGET_TYPE_QCA9574 33 +#endif + #ifdef __cplusplus } #endif diff --git a/hif/inc/targetdef.h b/hif/inc/targetdef.h index ba0c7e332a..3425f84013 100644 --- a/hif/inc/targetdef.h +++ b/hif/inc/targetdef.h @@ -49,6 +49,7 @@ extern struct targetdef_s *QCN9000_TARGETDEF; extern struct targetdef_s *QCN6122_TARGETDEF; extern struct targetdef_s *WCN7850_TARGETdef; extern struct targetdef_s *QCN9224_TARGETDEF; +extern struct targetdef_s *QCA9574_TARGETDEF; extern struct ce_reg_def *AR6002_CE_TARGETdef; extern struct ce_reg_def *AR6003_CE_TARGETdef; @@ -74,5 +75,6 @@ extern struct ce_reg_def *QCN9000_CE_TARGETDEF; extern struct ce_reg_def *QCN6122_CE_TARGETDEF; extern struct ce_reg_def *WCN7850_CE_TARGETdef; extern struct ce_reg_def *QCN9224_CE_TARGETDEF; +extern struct ce_reg_def *QCA9574_CE_TARGETDEF; #endif diff --git a/hif/src/ath_procfs.c b/hif/src/ath_procfs.c index aa9a93f05a..93fc7f076b 100644 --- a/hif/src/ath_procfs.c +++ b/hif/src/ath_procfs.c @@ -104,6 +104,7 @@ static ssize_t ath_procfs_diag_read_legacy(struct file *file, (tgt_info->target_type == TARGET_TYPE_QCA6490) || (tgt_info->target_type == TARGET_TYPE_QCA8074) || (tgt_info->target_type == TARGET_TYPE_QCA8074V2) || + (tgt_info->target_type == TARGET_TYPE_QCA9574) || (tgt_info->target_type == TARGET_TYPE_QCN9000) || (tgt_info->target_type == TARGET_TYPE_QCN9224) || (tgt_info->target_type == TARGET_TYPE_QCN6122) || @@ -185,6 +186,7 @@ static ssize_t ath_procfs_diag_write_legacy(struct file *file, (tgt_info->target_type == TARGET_TYPE_QCA6490) || (tgt_info->target_type == TARGET_TYPE_QCA8074) || (tgt_info->target_type == TARGET_TYPE_QCA8074V2) || + (tgt_info->target_type == TARGET_TYPE_QCA9574) || (tgt_info->target_type == TARGET_TYPE_QCN9000) || (tgt_info->target_type == TARGET_TYPE_QCN9224) || (tgt_info->target_type == TARGET_TYPE_QCN6122) || diff --git a/hif/src/ce/ce_assignment.h b/hif/src/ce/ce_assignment.h index 8957cb5e13..0da4bf6723 100644 --- a/hif/src/ce/ce_assignment.h +++ b/hif/src/ce/ce_assignment.h @@ -816,6 +816,71 @@ static struct CE_pipe_config target_ce_config_wlan_qca8074_pci[] = { { /* CE11 */ 11, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, }; +static struct CE_attr host_ce_config_wlan_qca9574[] = { + /* host->target HTC control and raw streams */ + { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 2048, 0, NULL,}, + /* target->host HTT + HTC control */ + { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, + /* target->host WMI */ + { /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, + /* host->target WMI (mac0) */ + { /* CE3 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL,}, + /* host->target HTT */ + { /* CE4 */ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, + CE_HTT_H2T_MSG_SRC_NENTRIES, 256, 0, NULL,}, + /* target -> host PKTLOG */ +#ifdef REMOVE_PKT_LOG + { /* CE5 */ 0, 0, 0, 0, 0, NULL,}, +#else + { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, +#endif + /* Target autonomous HIF_memcpy */ + { /* CE6 */ CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR, 0, 0, + 0, 0, NULL,}, + /* host->target WMI (mac1) */ + { /* CE7 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL,}, + /* Target to uMC */ + { /* CE8 */ CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR, 0, 0, 0, 0, NULL,}, + /* host->target WMI (mac2) */ + { /* CE9 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL,}, + /* target->host HTT */ + { /* CE10 unused */ 0, 0, 0, 0, 0, NULL,}, + { /* CE11 unused */ 0, 0, 0, 0, 0, NULL,}, +}; + +static struct CE_pipe_config target_ce_config_wlan_qca9574[] = { + /* host->target HTC control and raw streams */ + { /* CE0 */ 0, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, + /* target->host HTT */ + { /* CE1 */ 1, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, + /* target->host WMI + HTC control */ + { /* CE2 */ 2, PIPEDIR_IN, T2H_WMI_RING_SIZE, 2048, CE_ATTR_FLAGS, 0,}, + /* host->target WMI */ + { /* CE3 */ 3, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, + /* host->target HTT */ + { /* CE4 */ 4, PIPEDIR_OUT, 256, 256, + (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,}, + /* NB: 50% of src nentries, since tx has 2 frags */ + /* Target -> host PKTLOG */ +#ifdef REMOVE_PKT_LOG + { /* CE5 */ 5, PIPEDIR_NONE, 0, 0, 0, 0,}, +#else + { /* CE5 */ 5, PIPEDIR_IN, 32, 2048, 0, 0,}, +#endif + /* Reserved for target autonomous HIF_memcpy */ + { /* CE6 */ 6, PIPEDIR_INOUT, 32, 65535, 64, 0,}, + /* CE7 used only by Host */ + { /* CE7 */ 7, PIPEDIR_OUT, 32, 2048, + 8192, 0,}, + /* CE8 used only by IPA */ + { /* CE8 */ 8, PIPEDIR_INOUT, 32, 65535, 112, 0,}, + /* CE9 target->host HTT */ + { /* CE9 */ 9, PIPEDIR_OUT, 32, 2048, 8192, 0,}, + /* CE10 target->host HTT */ + {/* CE10 unused */10, PIPEDIR_NONE, 0, 0, 0, 0,}, + {/* CE11 unused */11, PIPEDIR_NONE, 0, 0, 0, 0,}, +}; + static struct CE_attr host_lowdesc_ce_config_wlan_adrastea_nopktlog[] = { /* host->target HTC control and raw streams */ { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 2048, 0, NULL,}, diff --git a/hif/src/ce/ce_main.c b/hif/src/ce/ce_main.c index 327e641a3c..e09aa3ea92 100644 --- a/hif/src/ce/ce_main.c +++ b/hif/src/ce/ce_main.c @@ -54,7 +54,8 @@ #if (defined(QCA_WIFI_QCA8074) || defined(QCA_WIFI_QCA6290) || \ defined(QCA_WIFI_QCA6018) || defined(QCA_WIFI_QCA5018) || \ - defined(QCA_WIFI_WCN7850)) && !defined(QCA_WIFI_SUPPORT_SRNG) + defined(QCA_WIFI_WCN7850) || defined(QCA_WIFI_QCA9574)) && \ + !defined(QCA_WIFI_SUPPORT_SRNG) #define QCA_WIFI_SUPPORT_SRNG #endif @@ -767,6 +768,35 @@ static struct service_to_pipe target_service_to_ce_map_qca8074[] = { }; #endif +#if (defined(QCA_WIFI_QCA9574)) +static struct service_to_pipe target_service_to_ce_map_qca9574[] = { + { WMI_DATA_VO_SVC, PIPEDIR_OUT, 3, }, + { WMI_DATA_VO_SVC, PIPEDIR_IN, 2, }, + { WMI_DATA_BK_SVC, PIPEDIR_OUT, 3, }, + { WMI_DATA_BK_SVC, PIPEDIR_IN, 2, }, + { WMI_DATA_BE_SVC, PIPEDIR_OUT, 3, }, + { WMI_DATA_BE_SVC, PIPEDIR_IN, 2, }, + { WMI_DATA_VI_SVC, PIPEDIR_OUT, 3, }, + { WMI_DATA_VI_SVC, PIPEDIR_IN, 2, }, + { WMI_CONTROL_SVC, PIPEDIR_OUT, 3, }, + { WMI_CONTROL_SVC, PIPEDIR_IN, 2, }, + { WMI_CONTROL_SVC_WMAC1, PIPEDIR_OUT, 7}, + { WMI_CONTROL_SVC_WMAC1, PIPEDIR_IN, 2}, + { HTC_CTRL_RSVD_SVC, PIPEDIR_OUT, 0, }, + { HTC_CTRL_RSVD_SVC, PIPEDIR_IN, 1, }, + { HTC_RAW_STREAMS_SVC, PIPEDIR_OUT, 0}, + { HTC_RAW_STREAMS_SVC, PIPEDIR_IN, 1 }, + { HTT_DATA_MSG_SVC, PIPEDIR_OUT, 4, }, + { HTT_DATA_MSG_SVC, PIPEDIR_IN, 1, }, + { PACKET_LOG_SVC, PIPEDIR_IN, 5, }, + /* (Additions here) */ + { 0, 0, 0, }, +}; +#else +static struct service_to_pipe target_service_to_ce_map_qca9574[] = { +}; +#endif + #if (defined(QCA_WIFI_QCA8074V2)) static struct service_to_pipe target_service_to_ce_map_qca8074_v2[] = { { WMI_DATA_VO_SVC, PIPEDIR_OUT, 3, }, @@ -1342,6 +1372,12 @@ static void hif_select_service_to_pipe_map(struct hif_softc *scn, *sz_tgt_svc_map_to_use = sizeof(target_service_to_ce_map_qca8074_v2); break; + case TARGET_TYPE_QCA9574: + *tgt_svc_map_to_use = + target_service_to_ce_map_qca9574; + *sz_tgt_svc_map_to_use = + sizeof(target_service_to_ce_map_qca9574); + break; case TARGET_TYPE_QCA6018: *tgt_svc_map_to_use = target_service_to_ce_map_qca6018; @@ -1594,6 +1630,7 @@ bool ce_srng_based(struct hif_softc *scn) case TARGET_TYPE_QCA5018: case TARGET_TYPE_WCN7850: case TARGET_TYPE_QCN9224: + case TARGET_TYPE_QCA9574: return true; default: return false; @@ -3832,6 +3869,12 @@ void hif_ce_prepare_config(struct hif_softc *scn) sizeof(target_ce_config_wlan_qca5018); scn->ce_count = QCA_5018_CE_COUNT; break; + case TARGET_TYPE_QCA9574: + hif_state->host_ce_config = host_ce_config_wlan_qca9574; + hif_state->target_ce_config = target_ce_config_wlan_qca9574; + hif_state->target_ce_config_sz = + sizeof(target_ce_config_wlan_qca9574); + break; case TARGET_TYPE_QCA6390: hif_state->host_ce_config = host_ce_config_wlan_qca6390; hif_state->target_ce_config = target_ce_config_wlan_qca6390; diff --git a/hif/src/hif_main.c b/hif/src/hif_main.c index 74ce9a2505..55723e7895 100644 --- a/hif/src/hif_main.c +++ b/hif/src/hif_main.c @@ -40,7 +40,7 @@ #include "hif_debug.h" #include "mp_dev.h" #if defined(QCA_WIFI_QCA8074) || defined(QCA_WIFI_QCA6018) || \ - defined(QCA_WIFI_QCA5018) + defined(QCA_WIFI_QCA5018) || defined(QCA_WIFI_QCA9574) #include "hal_api.h" #endif #include "hif_napi.h" @@ -1008,7 +1008,8 @@ static inline int hif_get_num_active_grp_tasklets(struct hif_softc *scn) defined(QCA_WIFI_QCA6290) || defined(QCA_WIFI_QCA6390) || \ defined(QCA_WIFI_QCN9000) || defined(QCA_WIFI_QCA6490) || \ defined(QCA_WIFI_QCA6750) || defined(QCA_WIFI_QCA5018) || \ - defined(QCA_WIFI_WCN7850) || defined(QCA_WIFI_QCN9224)) + defined(QCA_WIFI_WCN7850) || defined(QCA_WIFI_QCN9224) || \ + defined(QCA_WIFI_QCA9574)) /** * hif_get_num_pending_work() - get the number of entries in * the workqueue pending to be completed. @@ -1113,7 +1114,8 @@ uint8_t hif_get_ep_vote_access(struct hif_opaque_softc *hif_ctx, defined(QCA_WIFI_QCA6290) || defined(QCA_WIFI_QCA6390) || \ defined(QCA_WIFI_QCN9000) || defined(QCA_WIFI_QCA6490) || \ defined(QCA_WIFI_QCA6750) || defined(QCA_WIFI_QCA5018) || \ - defined(QCA_WIFI_WCN7850) || defined(QCA_WIFI_QCN9224)) + defined(QCA_WIFI_WCN7850) || defined(QCA_WIFI_QCN9224) || \ + defined(QCA_WIFI_QCA9574)) static QDF_STATUS hif_hal_attach(struct hif_softc *scn) { if (ce_srng_based(scn)) { @@ -1560,6 +1562,12 @@ int hif_get_device_type(uint32_t device_id, hif_info(" *********** qca5018 *************"); break; + case QCA9574_DEVICE_ID: + *hif_type = HIF_TYPE_QCA9574; + *target_type = TARGET_TYPE_QCA9574; + hif_info(" *********** QCA9574 *************"); + break; + default: hif_err("Unsupported device ID = 0x%x!", device_id); ret = -ENODEV; diff --git a/hif/src/hif_main.h b/hif/src/hif_main.h index de426f17e9..718ea415a6 100644 --- a/hif/src/hif_main.h +++ b/hif/src/hif_main.h @@ -119,6 +119,7 @@ #define QCA8074V2_DEVICE_ID (0xfffe) /* Todo: replace this with actual number */ #define QCA6018_DEVICE_ID (0xfffd) /* Todo: replace this with actual number */ #define QCA5018_DEVICE_ID (0xfffc) /* Todo: replace this with actual number */ +#define QCA9574_DEVICE_ID (0xfffa) /* Genoa */ #define QCN7605_DEVICE_ID (0x1102) /* Genoa PCIe device ID*/ #define QCN7605_COMPOSITE (0x9901) diff --git a/hif/src/pcie/if_pci.c b/hif/src/pcie/if_pci.c index 7a7c80b3f1..c1bd37899c 100644 --- a/hif/src/pcie/if_pci.c +++ b/hif/src/pcie/if_pci.c @@ -1707,6 +1707,7 @@ int hif_pci_bus_configure(struct hif_softc *hif_sc) /* todo: consider replacing this with an srng field */ if (((hif_sc->target_info.target_type == TARGET_TYPE_QCA8074) || (hif_sc->target_info.target_type == TARGET_TYPE_QCA8074V2) || + (hif_sc->target_info.target_type == TARGET_TYPE_QCA9574) || (hif_sc->target_info.target_type == TARGET_TYPE_QCA5018) || (hif_sc->target_info.target_type == TARGET_TYPE_QCN6122) || (hif_sc->target_info.target_type == TARGET_TYPE_QCA6018)) && @@ -1729,6 +1730,7 @@ int hif_pci_bus_configure(struct hif_softc *hif_sc) if (((hif_sc->target_info.target_type == TARGET_TYPE_QCA8074) || (hif_sc->target_info.target_type == TARGET_TYPE_QCA8074V2) || + (hif_sc->target_info.target_type == TARGET_TYPE_QCA9574) || (hif_sc->target_info.target_type == TARGET_TYPE_QCA5018) || (hif_sc->target_info.target_type == TARGET_TYPE_QCN6122) || (hif_sc->target_info.target_type == TARGET_TYPE_QCA6018)) && @@ -3245,6 +3247,7 @@ int hif_configure_irq(struct hif_softc *scn) case TARGET_TYPE_QCA8074V2: case TARGET_TYPE_QCA6018: case TARGET_TYPE_QCA5018: + case TARGET_TYPE_QCA9574: ret = hif_ahb_configure_irq(sc); break; default: diff --git a/hif/src/regtable.c b/hif/src/regtable.c index 000d6026f7..74aa52a648 100644 --- a/hif/src/regtable.c +++ b/hif/src/regtable.c @@ -125,6 +125,13 @@ void hif_target_register_tbl_attach(struct hif_softc *scn, u32 target_type) scn->target_ce_def = QCA6018_CE_TARGETDEF; break; #endif +#if defined(QCA9574_HEADERS_DEF) + case TARGET_TYPE_QCA9574: + scn->targetdef = QCA9574_TARGETDEF; + scn->target_ce_def = QCA9574_CE_TARGETDEF; + hif_info("TARGET_TYPE_QCA9574"); + break; +#endif #if defined(QCN9000_HEADERS_DEF) case TARGET_TYPE_QCN9000: @@ -297,6 +304,12 @@ void hif_register_tbl_attach(struct hif_softc *scn, u32 hif_type) scn->hostdef = QCA5018_HOSTDEF; break; #endif +#if defined(QCA9574_HEADERS_DEF) + case HIF_TYPE_QCA9574: + scn->hostdef = QCA9574_HOSTDEF; + hif_info("HIF_TYPE_QCA9574"); + break; +#endif #if defined(QCA6390_HEADERS_DEF) case HIF_TYPE_QCA6390: diff --git a/hif/src/snoc/if_ahb.c b/hif/src/snoc/if_ahb.c index eb3a0a99a7..5d5f3b11ce 100644 --- a/hif/src/snoc/if_ahb.c +++ b/hif/src/snoc/if_ahb.c @@ -520,6 +520,7 @@ void hif_ahb_disable_bus(struct hif_softc *scn) /* Should not be executed on 8074 platform */ if ((tgt_info->target_type != TARGET_TYPE_QCA8074) && (tgt_info->target_type != TARGET_TYPE_QCA8074V2) && + (tgt_info->target_type != TARGET_TYPE_QCA9574) && (tgt_info->target_type != TARGET_TYPE_QCA5018) && (tgt_info->target_type != TARGET_TYPE_QCN6122) && (tgt_info->target_type != TARGET_TYPE_QCA6018)) { @@ -665,6 +666,7 @@ QDF_STATUS hif_ahb_enable_bus(struct hif_softc *ol_sc, if ((tgt_info->target_type != TARGET_TYPE_QCA8074) && (tgt_info->target_type != TARGET_TYPE_QCA8074V2) && + (tgt_info->target_type != TARGET_TYPE_QCA9574) && (tgt_info->target_type != TARGET_TYPE_QCA5018) && (tgt_info->target_type != TARGET_TYPE_QCN6122) && (tgt_info->target_type != TARGET_TYPE_QCA6018)) { @@ -685,6 +687,7 @@ QDF_STATUS hif_ahb_enable_bus(struct hif_softc *ol_sc, err_target_sync: if ((tgt_info->target_type != TARGET_TYPE_QCA8074) && (tgt_info->target_type != TARGET_TYPE_QCA8074V2) && + (tgt_info->target_type != TARGET_TYPE_QCA9574) && (tgt_info->target_type != TARGET_TYPE_QCN6122) && (tgt_info->target_type != TARGET_TYPE_QCA5018) && (tgt_info->target_type != TARGET_TYPE_QCA6018)) { @@ -797,6 +800,7 @@ void hif_ahb_irq_enable(struct hif_softc *scn, int ce_id) hif_write32_mb(scn, mem + reg_offset, regval); if (tgt_info->target_type == TARGET_TYPE_QCA8074 || tgt_info->target_type == TARGET_TYPE_QCA8074V2 || + tgt_info->target_type == TARGET_TYPE_QCA9574 || tgt_info->target_type == TARGET_TYPE_QCA5018 || tgt_info->target_type == TARGET_TYPE_QCA6018) { /* Enable destination ring interrupts for @@ -849,6 +853,7 @@ void hif_ahb_irq_disable(struct hif_softc *scn, int ce_id) hif_write32_mb(scn, mem + reg_offset, regval); if (tgt_info->target_type == TARGET_TYPE_QCA8074 || tgt_info->target_type == TARGET_TYPE_QCA8074V2 || + tgt_info->target_type == TARGET_TYPE_QCA9574 || tgt_info->target_type == TARGET_TYPE_QCA5018 || tgt_info->target_type == TARGET_TYPE_QCA6018) { /* Disable destination ring interrupts for diff --git a/htc/htc.c b/htc/htc.c index dc02a63011..eb611fe41c 100644 --- a/htc/htc.c +++ b/htc/htc.c @@ -47,7 +47,7 @@ ATH_DEBUG_INSTANTIATE_MODULE_VAR(htc, #endif #if (defined(WMI_MULTI_MAC_SVC) || defined(QCA_WIFI_QCA8074) || \ - defined(QCA_WIFI_QCA6018)) + defined(QCA_WIFI_QCA6018) || defined(QCA_WIFI_QCA9574)) static const uint32_t svc_id[] = {WMI_CONTROL_SVC, WMI_CONTROL_SVC_WMAC1, WMI_CONTROL_SVC_WMAC2}; #else diff --git a/target_if/dfs/src/target_if_dfs_full_offload.c b/target_if/dfs/src/target_if_dfs_full_offload.c index 76df2a42c6..e6e53ea09d 100644 --- a/target_if/dfs/src/target_if_dfs_full_offload.c +++ b/target_if/dfs/src/target_if_dfs_full_offload.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved. * * * Permission to use, copy, modify, and/or distribute this software for @@ -392,7 +392,8 @@ free_vdevref: #endif #if (defined(WLAN_DFS_FULL_OFFLOAD) || defined(QCA_WIFI_QCA8074) || \ - defined(QCA_WIFI_QCA6018) || defined(QCA_WIFI_QCA5018)) + defined(QCA_WIFI_QCA6018) || defined(QCA_WIFI_QCA5018) || \ + defined(QCA_WIFI_QCA9574)) QDF_STATUS target_process_bang_radar_cmd( struct wlan_objmgr_pdev *pdev, struct dfs_emulate_bang_radar_test_cmd *dfs_unit_test) diff --git a/target_if/spectral/target_if_spectral.c b/target_if/spectral/target_if_spectral.c index 1e690c4227..94b43d6453 100644 --- a/target_if/spectral/target_if_spectral.c +++ b/target_if/spectral/target_if_spectral.c @@ -2522,6 +2522,7 @@ target_if_spectral_len_adj_swar_init(struct spectral_fft_bin_len_adj_swar *swar, uint32_t target_type) { if (target_type == TARGET_TYPE_QCA8074V2 || + target_type == TARGET_TYPE_QCA9574 || target_type == TARGET_TYPE_QCN9000 || target_type == TARGET_TYPE_QCN6122 || target_type == TARGET_TYPE_QCA5018 || @@ -2537,6 +2538,7 @@ target_if_spectral_len_adj_swar_init(struct spectral_fft_bin_len_adj_swar *swar, if (target_type == TARGET_TYPE_QCA8074 || target_type == TARGET_TYPE_QCA8074V2 || + target_type == TARGET_TYPE_QCA9574 || target_type == TARGET_TYPE_QCA6018 || target_type == TARGET_TYPE_QCN6122 || target_type == TARGET_TYPE_QCA5018 || @@ -2549,7 +2551,8 @@ target_if_spectral_len_adj_swar_init(struct spectral_fft_bin_len_adj_swar *swar, swar->null_fftbin_adj = 0; } - if (target_type == TARGET_TYPE_QCA8074V2) + if (target_type == TARGET_TYPE_QCA8074V2 || + target_type == TARGET_TYPE_QCA9574) swar->packmode_fftbin_size_adj = 1; else swar->packmode_fftbin_size_adj = 0; @@ -2743,6 +2746,7 @@ target_if_pdev_spectral_init(struct wlan_objmgr_pdev *pdev) if (target_type == TARGET_TYPE_QCA8074 || target_type == TARGET_TYPE_QCA8074V2 || + target_type == TARGET_TYPE_QCA9574 || target_type == TARGET_TYPE_QCA6018 || target_type == TARGET_TYPE_QCA5018 || target_type == TARGET_TYPE_QCA6390 || @@ -2758,6 +2762,7 @@ target_if_pdev_spectral_init(struct wlan_objmgr_pdev *pdev) if ((target_type == TARGET_TYPE_QCA8074) || (target_type == TARGET_TYPE_QCA8074V2) || + (target_type == TARGET_TYPE_QCA9574) || (target_type == TARGET_TYPE_QCA6018) || (target_type == TARGET_TYPE_QCA5018) || (target_type == TARGET_TYPE_QCN6122) ||