Ver código fonte

qcacmn: Move to index based assignment for srng register offset

Currently the hardware srng register offset is statically
assigned to the handle. This can lead to incorrect index access
when targets (eg: wcn7850) is added which require additional
register offsets to be stored in the hw srng register offset table.

Move to the index based assignment of the srng register offset.

Change-Id: I8e38bdd0c28068029a0267fce706edf4378b9df8
CRs-Fixed: 2965081
Rakesh Pillai 4 anos atrás
pai
commit
47af4d320f

+ 44 - 0
hal/wifi3.0/hal_generic_api.h

@@ -449,4 +449,48 @@ void hal_srng_dst_hw_init_generic(struct hal_soc *hal,
 	SRNG_DST_REG_WRITE(srng, MISC, reg_val);
 
 }
+
+/**
+ * hal_srng_hw_reg_offset_init_generic() - Initialize the HW srng reg offset
+ * @hal_soc: HAL Soc handle
+ *
+ * Return: None
+ */
+static inline void hal_srng_hw_reg_offset_init_generic(struct hal_soc *hal_soc)
+{
+	int32_t *hw_reg_offset = hal_soc->hal_hw_reg_offset;
+
+	/* dst */
+	hw_reg_offset[DST_HP] = REG_OFFSET(DST, HP);
+	hw_reg_offset[DST_TP] = REG_OFFSET(DST, TP);
+	hw_reg_offset[DST_ID] = REG_OFFSET(DST, ID);
+	hw_reg_offset[DST_MISC] = REG_OFFSET(DST, MISC);
+	hw_reg_offset[DST_HP_ADDR_LSB] = REG_OFFSET(DST, HP_ADDR_LSB);
+	hw_reg_offset[DST_HP_ADDR_MSB] = REG_OFFSET(DST, HP_ADDR_MSB);
+	hw_reg_offset[DST_MSI1_BASE_LSB] = REG_OFFSET(DST, MSI1_BASE_LSB);
+	hw_reg_offset[DST_MSI1_BASE_MSB] = REG_OFFSET(DST, MSI1_BASE_MSB);
+	hw_reg_offset[DST_MSI1_DATA] = REG_OFFSET(DST, MSI1_DATA);
+	hw_reg_offset[DST_BASE_LSB] = REG_OFFSET(DST, BASE_LSB);
+	hw_reg_offset[DST_BASE_MSB] = REG_OFFSET(DST, BASE_MSB);
+	hw_reg_offset[DST_PRODUCER_INT_SETUP] =
+					REG_OFFSET(DST, PRODUCER_INT_SETUP);
+
+	/* src */
+	hw_reg_offset[SRC_HP] = REG_OFFSET(SRC, HP);
+	hw_reg_offset[SRC_TP] = REG_OFFSET(SRC, TP);
+	hw_reg_offset[SRC_ID] = REG_OFFSET(SRC, ID);
+	hw_reg_offset[SRC_MISC] = REG_OFFSET(SRC, MISC);
+	hw_reg_offset[SRC_TP_ADDR_LSB] = REG_OFFSET(SRC, TP_ADDR_LSB);
+	hw_reg_offset[SRC_TP_ADDR_MSB] = REG_OFFSET(SRC, TP_ADDR_MSB);
+	hw_reg_offset[SRC_MSI1_BASE_LSB] = REG_OFFSET(SRC, MSI1_BASE_LSB);
+	hw_reg_offset[SRC_MSI1_BASE_MSB] = REG_OFFSET(SRC, MSI1_BASE_MSB);
+	hw_reg_offset[SRC_MSI1_DATA] = REG_OFFSET(SRC, MSI1_DATA);
+	hw_reg_offset[SRC_BASE_LSB] = REG_OFFSET(SRC, BASE_LSB);
+	hw_reg_offset[SRC_BASE_MSB] = REG_OFFSET(SRC, BASE_MSB);
+	hw_reg_offset[SRC_CONSUMER_INT_SETUP_IX0] =
+					REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX0);
+	hw_reg_offset[SRC_CONSUMER_INT_SETUP_IX1] =
+					REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX1);
+}
+
 #endif /* HAL_GENERIC_API_H_ */

+ 1 - 1
hal/wifi3.0/hal_internal.h

@@ -1077,7 +1077,7 @@ struct hal_soc {
 
 	/* srng table */
 	struct hal_hw_srng_config *hw_srng_table;
-	int32_t *hal_hw_reg_offset;
+	int32_t hal_hw_reg_offset[SRNG_REGISTER_MAX];
 	struct hal_hw_txrx_ops *ops;
 
 	/* Indicate srngs initialization */

+ 2 - 31
hal/wifi3.0/qca5018/hal_5018.c

@@ -2238,36 +2238,6 @@ struct hal_hw_srng_config hw_srng_table_5018[] = {
 #endif
 };
 
-int32_t hal_hw_reg_offset_qca5018[] = {
-	/* dst */
-	REG_OFFSET(DST, HP),
-	REG_OFFSET(DST, TP),
-	REG_OFFSET(DST, ID),
-	REG_OFFSET(DST, MISC),
-	REG_OFFSET(DST, HP_ADDR_LSB),
-	REG_OFFSET(DST, HP_ADDR_MSB),
-	REG_OFFSET(DST, MSI1_BASE_LSB),
-	REG_OFFSET(DST, MSI1_BASE_MSB),
-	REG_OFFSET(DST, MSI1_DATA),
-	REG_OFFSET(DST, BASE_LSB),
-	REG_OFFSET(DST, BASE_MSB),
-	REG_OFFSET(DST, PRODUCER_INT_SETUP),
-	/* src */
-	REG_OFFSET(SRC, HP),
-	REG_OFFSET(SRC, TP),
-	REG_OFFSET(SRC, ID),
-	REG_OFFSET(SRC, MISC),
-	REG_OFFSET(SRC, TP_ADDR_LSB),
-	REG_OFFSET(SRC, TP_ADDR_MSB),
-	REG_OFFSET(SRC, MSI1_BASE_LSB),
-	REG_OFFSET(SRC, MSI1_BASE_MSB),
-	REG_OFFSET(SRC, MSI1_DATA),
-	REG_OFFSET(SRC, BASE_LSB),
-	REG_OFFSET(SRC, BASE_MSB),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX0),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX1),
-};
-
 /**
  * hal_qca5018_attach()- Attach 5018 target specific hal_soc ops,
  *			  offset and srng table
@@ -2276,7 +2246,8 @@ int32_t hal_hw_reg_offset_qca5018[] = {
 void hal_qca5018_attach(struct hal_soc *hal_soc)
 {
 	hal_soc->hw_srng_table = hw_srng_table_5018;
-	hal_soc->hal_hw_reg_offset = hal_hw_reg_offset_qca5018;
+
+	hal_srng_hw_reg_offset_init_generic(hal_soc);
 	hal_hw_txrx_default_ops_attach_li(hal_soc);
 	hal_hw_txrx_ops_attach_qca5018(hal_soc);
 }

+ 1 - 31
hal/wifi3.0/qca6290/hal_6290.c

@@ -1619,36 +1619,6 @@ struct hal_hw_srng_config hw_srng_table_6290[] = {
 #endif
 };
 
-int32_t hal_hw_reg_offset_qca6290[] = {
-	/* dst */
-	REG_OFFSET(DST, HP),
-	REG_OFFSET(DST, TP),
-	REG_OFFSET(DST, ID),
-	REG_OFFSET(DST, MISC),
-	REG_OFFSET(DST, HP_ADDR_LSB),
-	REG_OFFSET(DST, HP_ADDR_MSB),
-	REG_OFFSET(DST, MSI1_BASE_LSB),
-	REG_OFFSET(DST, MSI1_BASE_MSB),
-	REG_OFFSET(DST, MSI1_DATA),
-	REG_OFFSET(DST, BASE_LSB),
-	REG_OFFSET(DST, BASE_MSB),
-	REG_OFFSET(DST, PRODUCER_INT_SETUP),
-	/* src */
-	REG_OFFSET(SRC, HP),
-	REG_OFFSET(SRC, TP),
-	REG_OFFSET(SRC, ID),
-	REG_OFFSET(SRC, MISC),
-	REG_OFFSET(SRC, TP_ADDR_LSB),
-	REG_OFFSET(SRC, TP_ADDR_MSB),
-	REG_OFFSET(SRC, MSI1_BASE_LSB),
-	REG_OFFSET(SRC, MSI1_BASE_MSB),
-	REG_OFFSET(SRC, MSI1_DATA),
-	REG_OFFSET(SRC, BASE_LSB),
-	REG_OFFSET(SRC, BASE_MSB),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX0),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX1),
-};
-
 /**
  * hal_qca6290_attach() - Attach 6290 target specific hal_soc ops,
  *			  offset and srng table
@@ -1656,7 +1626,7 @@ int32_t hal_hw_reg_offset_qca6290[] = {
 void hal_qca6290_attach(struct hal_soc *hal_soc)
 {
 	hal_soc->hw_srng_table = hw_srng_table_6290;
-	hal_soc->hal_hw_reg_offset = hal_hw_reg_offset_qca6290;
+	hal_srng_hw_reg_offset_init_generic(hal_soc);
 
 	hal_hw_txrx_default_ops_attach_li(hal_soc);
 	hal_hw_txrx_ops_attach_6290(hal_soc);

+ 1 - 31
hal/wifi3.0/qca6390/hal_6390.c

@@ -1687,36 +1687,6 @@ struct hal_hw_srng_config hw_srng_table_6390[] = {
 #endif
 };
 
-int32_t hal_hw_reg_offset_qca6390[] = {
-	/* dst */
-	REG_OFFSET(DST, HP),
-	REG_OFFSET(DST, TP),
-	REG_OFFSET(DST, ID),
-	REG_OFFSET(DST, MISC),
-	REG_OFFSET(DST, HP_ADDR_LSB),
-	REG_OFFSET(DST, HP_ADDR_MSB),
-	REG_OFFSET(DST, MSI1_BASE_LSB),
-	REG_OFFSET(DST, MSI1_BASE_MSB),
-	REG_OFFSET(DST, MSI1_DATA),
-	REG_OFFSET(DST, BASE_LSB),
-	REG_OFFSET(DST, BASE_MSB),
-	REG_OFFSET(DST, PRODUCER_INT_SETUP),
-	/* src */
-	REG_OFFSET(SRC, HP),
-	REG_OFFSET(SRC, TP),
-	REG_OFFSET(SRC, ID),
-	REG_OFFSET(SRC, MISC),
-	REG_OFFSET(SRC, TP_ADDR_LSB),
-	REG_OFFSET(SRC, TP_ADDR_MSB),
-	REG_OFFSET(SRC, MSI1_BASE_LSB),
-	REG_OFFSET(SRC, MSI1_BASE_MSB),
-	REG_OFFSET(SRC, MSI1_DATA),
-	REG_OFFSET(SRC, BASE_LSB),
-	REG_OFFSET(SRC, BASE_MSB),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX0),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX1),
-};
-
 /**
  * hal_qca6390_attach() - Attach 6390 target specific hal_soc ops,
  *			  offset and srng table
@@ -1724,7 +1694,7 @@ int32_t hal_hw_reg_offset_qca6390[] = {
 void hal_qca6390_attach(struct hal_soc *hal_soc)
 {
 	hal_soc->hw_srng_table = hw_srng_table_6390;
-	hal_soc->hal_hw_reg_offset = hal_hw_reg_offset_qca6390;
+	hal_srng_hw_reg_offset_init_generic(hal_soc);
 	hal_hw_txrx_default_ops_attach_li(hal_soc);
 	hal_hw_txrx_ops_attach_qca6390(hal_soc);
 }

+ 2 - 31
hal/wifi3.0/qca6490/hal_6490.c

@@ -2277,36 +2277,6 @@ struct hal_hw_srng_config hw_srng_table_6490[] = {
 #endif
 };
 
-int32_t hal_hw_reg_offset_qca6490[] = {
-	/* dst */
-	REG_OFFSET(DST, HP),
-	REG_OFFSET(DST, TP),
-	REG_OFFSET(DST, ID),
-	REG_OFFSET(DST, MISC),
-	REG_OFFSET(DST, HP_ADDR_LSB),
-	REG_OFFSET(DST, HP_ADDR_MSB),
-	REG_OFFSET(DST, MSI1_BASE_LSB),
-	REG_OFFSET(DST, MSI1_BASE_MSB),
-	REG_OFFSET(DST, MSI1_DATA),
-	REG_OFFSET(DST, BASE_LSB),
-	REG_OFFSET(DST, BASE_MSB),
-	REG_OFFSET(DST, PRODUCER_INT_SETUP),
-	/* src */
-	REG_OFFSET(SRC, HP),
-	REG_OFFSET(SRC, TP),
-	REG_OFFSET(SRC, ID),
-	REG_OFFSET(SRC, MISC),
-	REG_OFFSET(SRC, TP_ADDR_LSB),
-	REG_OFFSET(SRC, TP_ADDR_MSB),
-	REG_OFFSET(SRC, MSI1_BASE_LSB),
-	REG_OFFSET(SRC, MSI1_BASE_MSB),
-	REG_OFFSET(SRC, MSI1_DATA),
-	REG_OFFSET(SRC, BASE_LSB),
-	REG_OFFSET(SRC, BASE_MSB),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX0),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX1),
-};
-
 /**
  * hal_qca6490_attach() - Attach 6490 target specific hal_soc ops,
  *			  offset and srng table
@@ -2314,7 +2284,8 @@ int32_t hal_hw_reg_offset_qca6490[] = {
 void hal_qca6490_attach(struct hal_soc *hal_soc)
 {
 	hal_soc->hw_srng_table = hw_srng_table_6490;
-	hal_soc->hal_hw_reg_offset = hal_hw_reg_offset_qca6490;
+
+	hal_srng_hw_reg_offset_init_generic(hal_soc);
 
 	hal_hw_txrx_default_ops_attach_li(hal_soc);
 	hal_hw_txrx_ops_attach_qca6490(hal_soc);

+ 1 - 31
hal/wifi3.0/qca6750/hal_6750.c

@@ -2431,36 +2431,6 @@ struct hal_hw_srng_config hw_srng_table_6750[] = {
 #endif
 };
 
-int32_t hal_hw_reg_offset_qca6750[] = {
-	/* dst */
-	REG_OFFSET(DST, HP),
-	REG_OFFSET(DST, TP),
-	REG_OFFSET(DST, ID),
-	REG_OFFSET(DST, MISC),
-	REG_OFFSET(DST, HP_ADDR_LSB),
-	REG_OFFSET(DST, HP_ADDR_MSB),
-	REG_OFFSET(DST, MSI1_BASE_LSB),
-	REG_OFFSET(DST, MSI1_BASE_MSB),
-	REG_OFFSET(DST, MSI1_DATA),
-	REG_OFFSET(DST, BASE_LSB),
-	REG_OFFSET(DST, BASE_MSB),
-	REG_OFFSET(DST, PRODUCER_INT_SETUP),
-	/* src */
-	REG_OFFSET(SRC, HP),
-	REG_OFFSET(SRC, TP),
-	REG_OFFSET(SRC, ID),
-	REG_OFFSET(SRC, MISC),
-	REG_OFFSET(SRC, TP_ADDR_LSB),
-	REG_OFFSET(SRC, TP_ADDR_MSB),
-	REG_OFFSET(SRC, MSI1_BASE_LSB),
-	REG_OFFSET(SRC, MSI1_BASE_MSB),
-	REG_OFFSET(SRC, MSI1_DATA),
-	REG_OFFSET(SRC, BASE_LSB),
-	REG_OFFSET(SRC, BASE_MSB),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX0),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX1),
-};
-
 /**
  * hal_qca6750_attach() - Attach 6750 target specific hal_soc ops,
  *			  offset and srng table
@@ -2468,7 +2438,7 @@ int32_t hal_hw_reg_offset_qca6750[] = {
 void hal_qca6750_attach(struct hal_soc *hal_soc)
 {
 	hal_soc->hw_srng_table = hw_srng_table_6750;
-	hal_soc->hal_hw_reg_offset = hal_hw_reg_offset_qca6750;
+	hal_srng_hw_reg_offset_init_generic(hal_soc);
 	hal_hw_txrx_default_ops_attach_li(hal_soc);
 	hal_hw_txrx_ops_attach_qca6750(hal_soc);
 }

+ 1 - 31
hal/wifi3.0/qca8074v1/hal_8074v1.c

@@ -1802,36 +1802,6 @@ struct hal_hw_srng_config hw_srng_table_8074[] = {
 #endif
 };
 
-int32_t hal_hw_reg_offset_qca8074[] = {
-	/* dst */
-	REG_OFFSET(DST, HP),
-	REG_OFFSET(DST, TP),
-	REG_OFFSET(DST, ID),
-	REG_OFFSET(DST, MISC),
-	REG_OFFSET(DST, HP_ADDR_LSB),
-	REG_OFFSET(DST, HP_ADDR_MSB),
-	REG_OFFSET(DST, MSI1_BASE_LSB),
-	REG_OFFSET(DST, MSI1_BASE_MSB),
-	REG_OFFSET(DST, MSI1_DATA),
-	REG_OFFSET(DST, BASE_LSB),
-	REG_OFFSET(DST, BASE_MSB),
-	REG_OFFSET(DST, PRODUCER_INT_SETUP),
-	/* src */
-	REG_OFFSET(SRC, HP),
-	REG_OFFSET(SRC, TP),
-	REG_OFFSET(SRC, ID),
-	REG_OFFSET(SRC, MISC),
-	REG_OFFSET(SRC, TP_ADDR_LSB),
-	REG_OFFSET(SRC, TP_ADDR_MSB),
-	REG_OFFSET(SRC, MSI1_BASE_LSB),
-	REG_OFFSET(SRC, MSI1_BASE_MSB),
-	REG_OFFSET(SRC, MSI1_DATA),
-	REG_OFFSET(SRC, BASE_LSB),
-	REG_OFFSET(SRC, BASE_MSB),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX0),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX1),
-};
-
 /**
  * hal_qca8074_attach() - Attach 8074 target specific hal_soc ops,
  *			  offset and srng table
@@ -1839,7 +1809,7 @@ int32_t hal_hw_reg_offset_qca8074[] = {
 void hal_qca8074_attach(struct hal_soc *hal_soc)
 {
 	hal_soc->hw_srng_table = hw_srng_table_8074;
-	hal_soc->hal_hw_reg_offset = hal_hw_reg_offset_qca8074;
+	hal_srng_hw_reg_offset_init_generic(hal_soc);
 	hal_hw_txrx_default_ops_attach_li(hal_soc);
 	hal_hw_txrx_ops_attach_qca8074(hal_soc);
 }

+ 1 - 31
hal/wifi3.0/qca8074v2/hal_8074v2.c

@@ -1805,36 +1805,6 @@ struct hal_hw_srng_config hw_srng_table_8074v2[] = {
 #endif
 };
 
-int32_t hal_hw_reg_offset_qca8074v2[] = {
-	/* dst */
-	REG_OFFSET(DST, HP),
-	REG_OFFSET(DST, TP),
-	REG_OFFSET(DST, ID),
-	REG_OFFSET(DST, MISC),
-	REG_OFFSET(DST, HP_ADDR_LSB),
-	REG_OFFSET(DST, HP_ADDR_MSB),
-	REG_OFFSET(DST, MSI1_BASE_LSB),
-	REG_OFFSET(DST, MSI1_BASE_MSB),
-	REG_OFFSET(DST, MSI1_DATA),
-	REG_OFFSET(DST, BASE_LSB),
-	REG_OFFSET(DST, BASE_MSB),
-	REG_OFFSET(DST, PRODUCER_INT_SETUP),
-	/* src */
-	REG_OFFSET(SRC, HP),
-	REG_OFFSET(SRC, TP),
-	REG_OFFSET(SRC, ID),
-	REG_OFFSET(SRC, MISC),
-	REG_OFFSET(SRC, TP_ADDR_LSB),
-	REG_OFFSET(SRC, TP_ADDR_MSB),
-	REG_OFFSET(SRC, MSI1_BASE_LSB),
-	REG_OFFSET(SRC, MSI1_BASE_MSB),
-	REG_OFFSET(SRC, MSI1_DATA),
-	REG_OFFSET(SRC, BASE_LSB),
-	REG_OFFSET(SRC, BASE_MSB),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX0),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX1),
-};
-
 
 /**
  * hal_qca8074v2_attach() - Attach 8074v2 target specific hal_soc ops,
@@ -1843,7 +1813,7 @@ int32_t hal_hw_reg_offset_qca8074v2[] = {
 void hal_qca8074v2_attach(struct hal_soc *hal_soc)
 {
 	hal_soc->hw_srng_table = hw_srng_table_8074v2;
-	hal_soc->hal_hw_reg_offset = hal_hw_reg_offset_qca8074v2;
+	hal_srng_hw_reg_offset_init_generic(hal_soc);
 	hal_hw_txrx_default_ops_attach_li(hal_soc);
 	hal_hw_txrx_ops_attach_qca8074v2(hal_soc);
 }

+ 1 - 31
hal/wifi3.0/qcn6122/hal_qcn6122.c

@@ -2304,36 +2304,6 @@ struct hal_hw_srng_config hw_srng_table_6122[] = {
 #endif
 };
 
-int32_t hal_hw_reg_offset_qcn6122[] = {
-	/* dst */
-	REG_OFFSET(DST, HP),
-	REG_OFFSET(DST, TP),
-	REG_OFFSET(DST, ID),
-	REG_OFFSET(DST, MISC),
-	REG_OFFSET(DST, HP_ADDR_LSB),
-	REG_OFFSET(DST, HP_ADDR_MSB),
-	REG_OFFSET(DST, MSI1_BASE_LSB),
-	REG_OFFSET(DST, MSI1_BASE_MSB),
-	REG_OFFSET(DST, MSI1_DATA),
-	REG_OFFSET(DST, BASE_LSB),
-	REG_OFFSET(DST, BASE_MSB),
-	REG_OFFSET(DST, PRODUCER_INT_SETUP),
-	/* src */
-	REG_OFFSET(SRC, HP),
-	REG_OFFSET(SRC, TP),
-	REG_OFFSET(SRC, ID),
-	REG_OFFSET(SRC, MISC),
-	REG_OFFSET(SRC, TP_ADDR_LSB),
-	REG_OFFSET(SRC, TP_ADDR_MSB),
-	REG_OFFSET(SRC, MSI1_BASE_LSB),
-	REG_OFFSET(SRC, MSI1_BASE_MSB),
-	REG_OFFSET(SRC, MSI1_DATA),
-	REG_OFFSET(SRC, BASE_LSB),
-	REG_OFFSET(SRC, BASE_MSB),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX0),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX1),
-};
-
 /**
  * hal_qcn6122_attach()- Attach 6122 target specific hal_soc ops,
  *			  offset and srng table
@@ -2342,7 +2312,7 @@ int32_t hal_hw_reg_offset_qcn6122[] = {
 void hal_qcn6122_attach(struct hal_soc *hal_soc)
 {
 	hal_soc->hw_srng_table = hw_srng_table_6122;
-	hal_soc->hal_hw_reg_offset = hal_hw_reg_offset_qcn6122;
+	hal_srng_hw_reg_offset_init_generic(hal_soc);
 
 	hal_hw_txrx_default_ops_attach_li(hal_soc);
 	hal_hw_txrx_ops_attach_qcn6122(hal_soc);

+ 1 - 31
hal/wifi3.0/qcn9000/hal_9000.c

@@ -2339,36 +2339,6 @@ struct hal_hw_srng_config hw_srng_table_9000[] = {
 #endif
 };
 
-int32_t hal_hw_reg_offset_qcn9000[] = {
-	/* dst */
-	REG_OFFSET(DST, HP),
-	REG_OFFSET(DST, TP),
-	REG_OFFSET(DST, ID),
-	REG_OFFSET(DST, MISC),
-	REG_OFFSET(DST, HP_ADDR_LSB),
-	REG_OFFSET(DST, HP_ADDR_MSB),
-	REG_OFFSET(DST, MSI1_BASE_LSB),
-	REG_OFFSET(DST, MSI1_BASE_MSB),
-	REG_OFFSET(DST, MSI1_DATA),
-	REG_OFFSET(DST, BASE_LSB),
-	REG_OFFSET(DST, BASE_MSB),
-	REG_OFFSET(DST, PRODUCER_INT_SETUP),
-	/* src */
-	REG_OFFSET(SRC, HP),
-	REG_OFFSET(SRC, TP),
-	REG_OFFSET(SRC, ID),
-	REG_OFFSET(SRC, MISC),
-	REG_OFFSET(SRC, TP_ADDR_LSB),
-	REG_OFFSET(SRC, TP_ADDR_MSB),
-	REG_OFFSET(SRC, MSI1_BASE_LSB),
-	REG_OFFSET(SRC, MSI1_BASE_MSB),
-	REG_OFFSET(SRC, MSI1_DATA),
-	REG_OFFSET(SRC, BASE_LSB),
-	REG_OFFSET(SRC, BASE_MSB),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX0),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX1),
-};
-
 /**
  * hal_qcn9000_attach()- Attach 9000 target specific hal_soc ops,
  *			  offset and srng table
@@ -2377,7 +2347,7 @@ int32_t hal_hw_reg_offset_qcn9000[] = {
 void hal_qcn9000_attach(struct hal_soc *hal_soc)
 {
 	hal_soc->hw_srng_table = hw_srng_table_9000;
-	hal_soc->hal_hw_reg_offset = hal_hw_reg_offset_qcn9000;
+	hal_srng_hw_reg_offset_init_generic(hal_soc);
 	hal_hw_txrx_default_ops_attach_li(hal_soc);
 	hal_hw_txrx_ops_attach_qcn9000(hal_soc);
 	if (hal_soc->static_window_map)

+ 20 - 34
hal/wifi3.0/wcn7850/hal_7850.c

@@ -1848,39 +1848,23 @@ struct hal_hw_srng_config hw_srng_table_7850[] = {
 #endif
 };
 
-int32_t hal_hw_reg_offset_wcn7850[] = {
-	/* dst */
-	REG_OFFSET(DST, HP),
-	REG_OFFSET(DST, TP),
-	REG_OFFSET(DST, ID),
-	REG_OFFSET(DST, MISC),
-	REG_OFFSET(DST, HP_ADDR_LSB),
-	REG_OFFSET(DST, HP_ADDR_MSB),
-	REG_OFFSET(DST, MSI1_BASE_LSB),
-	REG_OFFSET(DST, MSI1_BASE_MSB),
-	REG_OFFSET(DST, MSI1_DATA),
-	REG_OFFSET(DST, MSI2_BASE_LSB),
-	REG_OFFSET(DST, MSI2_BASE_MSB),
-	REG_OFFSET(DST, MSI2_DATA),
-	REG_OFFSET(DST, BASE_LSB),
-	REG_OFFSET(DST, BASE_MSB),
-	REG_OFFSET(DST, PRODUCER_INT_SETUP),
-	REG_OFFSET(DST, PRODUCER_INT2_SETUP),
-	/* src */
-	REG_OFFSET(SRC, HP),
-	REG_OFFSET(SRC, TP),
-	REG_OFFSET(SRC, ID),
-	REG_OFFSET(SRC, MISC),
-	REG_OFFSET(SRC, TP_ADDR_LSB),
-	REG_OFFSET(SRC, TP_ADDR_MSB),
-	REG_OFFSET(SRC, MSI1_BASE_LSB),
-	REG_OFFSET(SRC, MSI1_BASE_MSB),
-	REG_OFFSET(SRC, MSI1_DATA),
-	REG_OFFSET(SRC, BASE_LSB),
-	REG_OFFSET(SRC, BASE_MSB),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX0),
-	REG_OFFSET(SRC, CONSUMER_INT_SETUP_IX1),
-};
+/**
+ * hal_srng_hw_reg_offset_init_wcn7850() - Initialize the HW srng reg offset
+ *				applicable only for WCN7850
+ * @hal_soc: HAL Soc handle
+ *
+ * Return: None
+ */
+static inline void hal_srng_hw_reg_offset_init_wcn7850(struct hal_soc *hal_soc)
+{
+	int32_t *hw_reg_offset = hal_soc->hal_hw_reg_offset;
+
+	hw_reg_offset[DST_MSI2_BASE_LSB] = REG_OFFSET(DST, MSI2_BASE_LSB),
+	hw_reg_offset[DST_MSI2_BASE_MSB] = REG_OFFSET(DST, MSI2_BASE_MSB),
+	hw_reg_offset[DST_MSI2_DATA] = REG_OFFSET(DST, MSI2_DATA),
+	hw_reg_offset[DST_PRODUCER_INT2_SETUP] =
+					REG_OFFSET(DST, PRODUCER_INT2_SETUP);
+}
 
 /**
  * hal_wcn7850_attach() - Attach 7850 target specific hal_soc ops,
@@ -1889,7 +1873,9 @@ int32_t hal_hw_reg_offset_wcn7850[] = {
 void hal_wcn7850_attach(struct hal_soc *hal_soc)
 {
 	hal_soc->hw_srng_table = hw_srng_table_7850;
-	hal_soc->hal_hw_reg_offset = hal_hw_reg_offset_wcn7850;
+
+	hal_srng_hw_reg_offset_init_generic(hal_soc);
+	hal_srng_hw_reg_offset_init_wcn7850(hal_soc);
 	hal_hw_txrx_default_ops_attach_be(hal_soc);
 	hal_hw_txrx_ops_attach_wcn7850(hal_soc);
 }