Lines Matching refs:ab
246 static int ath11k_hal_alloc_cont_rdp(struct ath11k_base *ab) in ath11k_hal_alloc_cont_rdp() argument
248 struct ath11k_hal *hal = &ab->hal; in ath11k_hal_alloc_cont_rdp()
252 hal->rdp.vaddr = dma_alloc_coherent(ab->dev, size, &hal->rdp.paddr, in ath11k_hal_alloc_cont_rdp()
260 static void ath11k_hal_free_cont_rdp(struct ath11k_base *ab) in ath11k_hal_free_cont_rdp() argument
262 struct ath11k_hal *hal = &ab->hal; in ath11k_hal_free_cont_rdp()
269 dma_free_coherent(ab->dev, size, in ath11k_hal_free_cont_rdp()
274 static int ath11k_hal_alloc_cont_wrp(struct ath11k_base *ab) in ath11k_hal_alloc_cont_wrp() argument
276 struct ath11k_hal *hal = &ab->hal; in ath11k_hal_alloc_cont_wrp()
280 hal->wrp.vaddr = dma_alloc_coherent(ab->dev, size, &hal->wrp.paddr, in ath11k_hal_alloc_cont_wrp()
288 static void ath11k_hal_free_cont_wrp(struct ath11k_base *ab) in ath11k_hal_free_cont_wrp() argument
290 struct ath11k_hal *hal = &ab->hal; in ath11k_hal_free_cont_wrp()
297 dma_free_coherent(ab->dev, size, in ath11k_hal_free_cont_wrp()
302 static void ath11k_hal_ce_dst_setup(struct ath11k_base *ab, in ath11k_hal_ce_dst_setup() argument
305 struct hal_srng_config *srng_config = &ab->hal.srng_config[HAL_CE_DST]; in ath11k_hal_ce_dst_setup()
313 val = ath11k_hif_read32(ab, addr); in ath11k_hal_ce_dst_setup()
317 ath11k_hif_write32(ab, addr, val); in ath11k_hal_ce_dst_setup()
320 static void ath11k_hal_srng_dst_hw_init(struct ath11k_base *ab, in ath11k_hal_srng_dst_hw_init() argument
323 struct ath11k_hal *hal = &ab->hal; in ath11k_hal_srng_dst_hw_init()
331 ath11k_hif_write32(ab, reg_base + in ath11k_hal_srng_dst_hw_init()
332 HAL_REO1_RING_MSI1_BASE_LSB_OFFSET(ab), in ath11k_hal_srng_dst_hw_init()
339 ath11k_hif_write32(ab, reg_base + in ath11k_hal_srng_dst_hw_init()
340 HAL_REO1_RING_MSI1_BASE_MSB_OFFSET(ab), val); in ath11k_hal_srng_dst_hw_init()
342 ath11k_hif_write32(ab, in ath11k_hal_srng_dst_hw_init()
343 reg_base + HAL_REO1_RING_MSI1_DATA_OFFSET(ab), in ath11k_hal_srng_dst_hw_init()
347 ath11k_hif_write32(ab, reg_base, srng->ring_base_paddr); in ath11k_hal_srng_dst_hw_init()
354 ath11k_hif_write32(ab, reg_base + HAL_REO1_RING_BASE_MSB_OFFSET(ab), val); in ath11k_hal_srng_dst_hw_init()
358 ath11k_hif_write32(ab, reg_base + HAL_REO1_RING_ID_OFFSET(ab), val); in ath11k_hal_srng_dst_hw_init()
368 ath11k_hif_write32(ab, in ath11k_hal_srng_dst_hw_init()
369 reg_base + HAL_REO1_RING_PRODUCER_INT_SETUP_OFFSET(ab), in ath11k_hal_srng_dst_hw_init()
375 ath11k_hif_write32(ab, reg_base + HAL_REO1_RING_HP_ADDR_LSB_OFFSET(ab), in ath11k_hal_srng_dst_hw_init()
377 ath11k_hif_write32(ab, reg_base + HAL_REO1_RING_HP_ADDR_MSB_OFFSET(ab), in ath11k_hal_srng_dst_hw_init()
382 ath11k_hif_write32(ab, reg_base, 0); in ath11k_hal_srng_dst_hw_init()
383 ath11k_hif_write32(ab, reg_base + HAL_REO1_RING_TP_OFFSET(ab), 0); in ath11k_hal_srng_dst_hw_init()
396 ath11k_hif_write32(ab, reg_base + HAL_REO1_RING_MISC_OFFSET(ab), val); in ath11k_hal_srng_dst_hw_init()
399 static void ath11k_hal_srng_src_hw_init(struct ath11k_base *ab, in ath11k_hal_srng_src_hw_init() argument
402 struct ath11k_hal *hal = &ab->hal; in ath11k_hal_srng_src_hw_init()
410 ath11k_hif_write32(ab, reg_base + in ath11k_hal_srng_src_hw_init()
411 HAL_TCL1_RING_MSI1_BASE_LSB_OFFSET(ab), in ath11k_hal_srng_src_hw_init()
418 ath11k_hif_write32(ab, reg_base + in ath11k_hal_srng_src_hw_init()
419 HAL_TCL1_RING_MSI1_BASE_MSB_OFFSET(ab), in ath11k_hal_srng_src_hw_init()
422 ath11k_hif_write32(ab, reg_base + in ath11k_hal_srng_src_hw_init()
423 HAL_TCL1_RING_MSI1_DATA_OFFSET(ab), in ath11k_hal_srng_src_hw_init()
427 ath11k_hif_write32(ab, reg_base, srng->ring_base_paddr); in ath11k_hal_srng_src_hw_init()
434 ath11k_hif_write32(ab, reg_base + HAL_TCL1_RING_BASE_MSB_OFFSET(ab), val); in ath11k_hal_srng_src_hw_init()
437 ath11k_hif_write32(ab, reg_base + HAL_TCL1_RING_ID_OFFSET(ab), val); in ath11k_hal_srng_src_hw_init()
450 ath11k_hif_write32(ab, in ath11k_hal_srng_src_hw_init()
451 reg_base + HAL_TCL1_RING_CONSR_INT_SETUP_IX0_OFFSET(ab), in ath11k_hal_srng_src_hw_init()
459 ath11k_hif_write32(ab, in ath11k_hal_srng_src_hw_init()
460 reg_base + HAL_TCL1_RING_CONSR_INT_SETUP_IX1_OFFSET(ab), in ath11k_hal_srng_src_hw_init()
467 ath11k_hif_write32(ab, in ath11k_hal_srng_src_hw_init()
468 reg_base + HAL_TCL1_RING_TP_ADDR_LSB_OFFSET(ab), in ath11k_hal_srng_src_hw_init()
470 ath11k_hif_write32(ab, in ath11k_hal_srng_src_hw_init()
471 reg_base + HAL_TCL1_RING_TP_ADDR_MSB_OFFSET(ab), in ath11k_hal_srng_src_hw_init()
477 ath11k_hif_write32(ab, reg_base, 0); in ath11k_hal_srng_src_hw_init()
478 ath11k_hif_write32(ab, reg_base + HAL_TCL1_RING_TP_OFFSET, 0); in ath11k_hal_srng_src_hw_init()
495 ath11k_hif_write32(ab, reg_base + HAL_TCL1_RING_MISC_OFFSET(ab), val); in ath11k_hal_srng_src_hw_init()
498 static void ath11k_hal_srng_hw_init(struct ath11k_base *ab, in ath11k_hal_srng_hw_init() argument
502 ath11k_hal_srng_src_hw_init(ab, srng); in ath11k_hal_srng_hw_init()
504 ath11k_hal_srng_dst_hw_init(ab, srng); in ath11k_hal_srng_hw_init()
507 static int ath11k_hal_srng_get_ring_id(struct ath11k_base *ab, in ath11k_hal_srng_get_ring_id() argument
511 struct hal_srng_config *srng_config = &ab->hal.srng_config[type]; in ath11k_hal_srng_get_ring_id()
515 ath11k_warn(ab, "invalid ring number :%d\n", ring_num); in ath11k_hal_srng_get_ring_id()
529 int ath11k_hal_srng_get_entrysize(struct ath11k_base *ab, u32 ring_type) in ath11k_hal_srng_get_entrysize() argument
536 srng_config = &ab->hal.srng_config[ring_type]; in ath11k_hal_srng_get_entrysize()
541 int ath11k_hal_srng_get_max_entries(struct ath11k_base *ab, u32 ring_type) in ath11k_hal_srng_get_max_entries() argument
548 srng_config = &ab->hal.srng_config[ring_type]; in ath11k_hal_srng_get_max_entries()
553 void ath11k_hal_srng_get_params(struct ath11k_base *ab, struct hal_srng *srng, in ath11k_hal_srng_get_params() argument
568 dma_addr_t ath11k_hal_srng_get_hp_addr(struct ath11k_base *ab, in ath11k_hal_srng_get_hp_addr() argument
575 return ab->hal.wrp.paddr + in ath11k_hal_srng_get_hp_addr()
577 (unsigned long)ab->hal.wrp.vaddr); in ath11k_hal_srng_get_hp_addr()
579 return ab->hal.rdp.paddr + in ath11k_hal_srng_get_hp_addr()
581 (unsigned long)ab->hal.rdp.vaddr); in ath11k_hal_srng_get_hp_addr()
584 dma_addr_t ath11k_hal_srng_get_tp_addr(struct ath11k_base *ab, in ath11k_hal_srng_get_tp_addr() argument
591 return ab->hal.rdp.paddr + in ath11k_hal_srng_get_tp_addr()
593 (unsigned long)ab->hal.rdp.vaddr); in ath11k_hal_srng_get_tp_addr()
595 return ab->hal.wrp.paddr + in ath11k_hal_srng_get_tp_addr()
597 (unsigned long)ab->hal.wrp.vaddr); in ath11k_hal_srng_get_tp_addr()
664 u32 *ath11k_hal_srng_dst_peek(struct ath11k_base *ab, struct hal_srng *srng) in ath11k_hal_srng_dst_peek() argument
674 u32 *ath11k_hal_srng_dst_get_next_entry(struct ath11k_base *ab, in ath11k_hal_srng_dst_get_next_entry() argument
692 int ath11k_hal_srng_dst_num_free(struct ath11k_base *ab, struct hal_srng *srng, in ath11k_hal_srng_dst_num_free() argument
715 int ath11k_hal_srng_src_num_free(struct ath11k_base *ab, struct hal_srng *srng, in ath11k_hal_srng_src_num_free() argument
737 u32 *ath11k_hal_srng_src_get_next_entry(struct ath11k_base *ab, in ath11k_hal_srng_src_get_next_entry() argument
770 u32 *ath11k_hal_srng_src_reap_next(struct ath11k_base *ab, in ath11k_hal_srng_src_reap_next() argument
790 u32 *ath11k_hal_srng_src_get_next_reaped(struct ath11k_base *ab, in ath11k_hal_srng_src_get_next_reaped() argument
807 u32 *ath11k_hal_srng_src_peek(struct ath11k_base *ab, struct hal_srng *srng) in ath11k_hal_srng_src_peek() argument
818 void ath11k_hal_srng_access_begin(struct ath11k_base *ab, struct hal_srng *srng) in ath11k_hal_srng_access_begin() argument
832 void ath11k_hal_srng_access_end(struct ath11k_base *ab, struct hal_srng *srng) in ath11k_hal_srng_access_end() argument
853 ath11k_hif_write32(ab, in ath11k_hal_srng_access_end()
855 (unsigned long)ab->mem, in ath11k_hal_srng_access_end()
859 ath11k_hif_write32(ab, in ath11k_hal_srng_access_end()
861 (unsigned long)ab->mem, in ath11k_hal_srng_access_end()
869 void ath11k_hal_setup_link_idle_list(struct ath11k_base *ab, in ath11k_hal_setup_link_idle_list() argument
893 ath11k_hif_write32(ab, in ath11k_hal_setup_link_idle_list()
897 ath11k_hif_write32(ab, in ath11k_hal_setup_link_idle_list()
901 ath11k_hif_write32(ab, in ath11k_hal_setup_link_idle_list()
906 ath11k_hif_write32(ab, in ath11k_hal_setup_link_idle_list()
917 ath11k_hif_write32(ab, in ath11k_hal_setup_link_idle_list()
922 ath11k_hif_write32(ab, in ath11k_hal_setup_link_idle_list()
931 ath11k_hif_write32(ab, in ath11k_hal_setup_link_idle_list()
937 ath11k_hif_write32(ab, in ath11k_hal_setup_link_idle_list()
942 ath11k_hif_write32(ab, in ath11k_hal_setup_link_idle_list()
950 ath11k_hif_write32(ab, in ath11k_hal_setup_link_idle_list()
956 ath11k_hif_write32(ab, in ath11k_hal_setup_link_idle_list()
961 int ath11k_hal_srng_setup(struct ath11k_base *ab, enum hal_ring_type type, in ath11k_hal_srng_setup() argument
965 struct ath11k_hal *hal = &ab->hal; in ath11k_hal_srng_setup()
966 struct hal_srng_config *srng_config = &ab->hal.srng_config[type]; in ath11k_hal_srng_setup()
973 ring_id = ath11k_hal_srng_get_ring_id(ab, type, ring_num, mac_id); in ath11k_hal_srng_setup()
1024 if (!ab->hw_params.supports_shadow_regs) in ath11k_hal_srng_setup()
1026 (u32 *)((unsigned long)ab->mem + reg_base); in ath11k_hal_srng_setup()
1028 ath11k_dbg(ab, ATH11k_DBG_HAL, in ath11k_hal_srng_setup()
1033 (unsigned long)ab->mem); in ath11k_hal_srng_setup()
1057 if (!ab->hw_params.supports_shadow_regs) in ath11k_hal_srng_setup()
1059 (u32 *)((unsigned long)ab->mem + reg_base + in ath11k_hal_srng_setup()
1060 (HAL_REO1_RING_TP(ab) - HAL_REO1_RING_HP(ab))); in ath11k_hal_srng_setup()
1062 ath11k_dbg(ab, ATH11k_DBG_HAL, in ath11k_hal_srng_setup()
1065 reg_base + (HAL_REO1_RING_TP(ab) - in ath11k_hal_srng_setup()
1066 HAL_REO1_RING_HP(ab)), in ath11k_hal_srng_setup()
1068 (unsigned long)ab->mem); in ath11k_hal_srng_setup()
1075 ath11k_hal_srng_hw_init(ab, srng); in ath11k_hal_srng_setup()
1079 ath11k_hal_ce_dst_setup(ab, srng, ring_num); in ath11k_hal_srng_setup()
1085 static void ath11k_hal_srng_update_hp_tp_addr(struct ath11k_base *ab, in ath11k_hal_srng_update_hp_tp_addr() argument
1091 struct ath11k_hal *hal = &ab->hal; in ath11k_hal_srng_update_hp_tp_addr()
1095 ring_id = ath11k_hal_srng_get_ring_id(ab, ring_type, ring_num, 0); in ath11k_hal_srng_update_hp_tp_addr()
1103 (unsigned long)ab->mem); in ath11k_hal_srng_update_hp_tp_addr()
1106 (unsigned long)ab->mem); in ath11k_hal_srng_update_hp_tp_addr()
1109 int ath11k_hal_srng_update_shadow_config(struct ath11k_base *ab, in ath11k_hal_srng_update_shadow_config() argument
1113 struct ath11k_hal *hal = &ab->hal; in ath11k_hal_srng_update_shadow_config()
1134 ath11k_hal_srng_update_hp_tp_addr(ab, shadow_cfg_idx, ring_type, in ath11k_hal_srng_update_shadow_config()
1137 ath11k_dbg(ab, ATH11k_DBG_HAL, in ath11k_hal_srng_update_shadow_config()
1147 void ath11k_hal_srng_shadow_config(struct ath11k_base *ab) in ath11k_hal_srng_shadow_config() argument
1149 struct ath11k_hal *hal = &ab->hal; in ath11k_hal_srng_shadow_config()
1165 ath11k_hal_srng_update_shadow_config(ab, ring_type, ring_num); in ath11k_hal_srng_shadow_config()
1169 void ath11k_hal_srng_get_shadow_config(struct ath11k_base *ab, in ath11k_hal_srng_get_shadow_config() argument
1172 struct ath11k_hal *hal = &ab->hal; in ath11k_hal_srng_get_shadow_config()
1178 void ath11k_hal_srng_shadow_update_hp_tp(struct ath11k_base *ab, in ath11k_hal_srng_shadow_update_hp_tp() argument
1188 ath11k_hal_srng_access_end(ab, srng); in ath11k_hal_srng_shadow_update_hp_tp()
1191 static int ath11k_hal_srng_create_config(struct ath11k_base *ab) in ath11k_hal_srng_create_config() argument
1193 struct ath11k_hal *hal = &ab->hal; in ath11k_hal_srng_create_config()
1203 s->reg_start[0] = HAL_SEQ_WCSS_UMAC_REO_REG + HAL_REO1_RING_BASE_LSB(ab); in ath11k_hal_srng_create_config()
1204 s->reg_start[1] = HAL_SEQ_WCSS_UMAC_REO_REG + HAL_REO1_RING_HP(ab); in ath11k_hal_srng_create_config()
1205 s->reg_size[0] = HAL_REO2_RING_BASE_LSB(ab) - HAL_REO1_RING_BASE_LSB(ab); in ath11k_hal_srng_create_config()
1206 s->reg_size[1] = HAL_REO2_RING_HP(ab) - HAL_REO1_RING_HP(ab); in ath11k_hal_srng_create_config()
1209 s->reg_start[0] = HAL_SEQ_WCSS_UMAC_REO_REG + HAL_REO_TCL_RING_BASE_LSB(ab); in ath11k_hal_srng_create_config()
1210 s->reg_start[1] = HAL_SEQ_WCSS_UMAC_REO_REG + HAL_REO_TCL_RING_HP(ab); in ath11k_hal_srng_create_config()
1221 s->reg_start[0] = HAL_SEQ_WCSS_UMAC_REO_REG + HAL_REO_STATUS_RING_BASE_LSB(ab); in ath11k_hal_srng_create_config()
1222 s->reg_start[1] = HAL_SEQ_WCSS_UMAC_REO_REG + HAL_REO_STATUS_HP(ab); in ath11k_hal_srng_create_config()
1225 s->reg_start[0] = HAL_SEQ_WCSS_UMAC_TCL_REG + HAL_TCL1_RING_BASE_LSB(ab); in ath11k_hal_srng_create_config()
1227 s->reg_size[0] = HAL_TCL2_RING_BASE_LSB(ab) - HAL_TCL1_RING_BASE_LSB(ab); in ath11k_hal_srng_create_config()
1231 s->reg_start[0] = HAL_SEQ_WCSS_UMAC_TCL_REG + HAL_TCL_RING_BASE_LSB(ab); in ath11k_hal_srng_create_config()
1235 s->reg_start[0] = HAL_SEQ_WCSS_UMAC_TCL_REG + HAL_TCL_STATUS_RING_BASE_LSB(ab); in ath11k_hal_srng_create_config()
1241 static void ath11k_hal_register_srng_key(struct ath11k_base *ab) in ath11k_hal_register_srng_key() argument
1243 struct ath11k_hal *hal = &ab->hal; in ath11k_hal_register_srng_key()
1250 static void ath11k_hal_unregister_srng_key(struct ath11k_base *ab) in ath11k_hal_unregister_srng_key() argument
1252 struct ath11k_hal *hal = &ab->hal; in ath11k_hal_unregister_srng_key()
1259 int ath11k_hal_srng_init(struct ath11k_base *ab) in ath11k_hal_srng_init() argument
1261 struct ath11k_hal *hal = &ab->hal; in ath11k_hal_srng_init()
1266 ret = ath11k_hal_srng_create_config(ab); in ath11k_hal_srng_init()
1270 ret = ath11k_hal_alloc_cont_rdp(ab); in ath11k_hal_srng_init()
1274 ret = ath11k_hal_alloc_cont_wrp(ab); in ath11k_hal_srng_init()
1278 ath11k_hal_register_srng_key(ab); in ath11k_hal_srng_init()
1283 ath11k_hal_free_cont_rdp(ab); in ath11k_hal_srng_init()
1290 void ath11k_hal_srng_deinit(struct ath11k_base *ab) in ath11k_hal_srng_deinit() argument
1292 struct ath11k_hal *hal = &ab->hal; in ath11k_hal_srng_deinit()
1294 ath11k_hal_unregister_srng_key(ab); in ath11k_hal_srng_deinit()
1295 ath11k_hal_free_cont_rdp(ab); in ath11k_hal_srng_deinit()
1296 ath11k_hal_free_cont_wrp(ab); in ath11k_hal_srng_deinit()
1301 void ath11k_hal_dump_srng_stats(struct ath11k_base *ab) in ath11k_hal_dump_srng_stats() argument
1308 ath11k_err(ab, "Last interrupt received for each CE:\n"); in ath11k_hal_dump_srng_stats()
1309 for (i = 0; i < ab->hw_params.ce_count; i++) { in ath11k_hal_dump_srng_stats()
1310 ce_pipe = &ab->ce.ce_pipe[i]; in ath11k_hal_dump_srng_stats()
1312 if (ath11k_ce_get_attr_flags(ab, i) & CE_ATTR_DIS_INTR) in ath11k_hal_dump_srng_stats()
1315 ath11k_err(ab, "CE_id %d pipe_num %d %ums before\n", in ath11k_hal_dump_srng_stats()
1320 ath11k_err(ab, "\nLast interrupt received for each group:\n"); in ath11k_hal_dump_srng_stats()
1322 irq_grp = &ab->ext_irq_grp[i]; in ath11k_hal_dump_srng_stats()
1323 ath11k_err(ab, "group_id %d %ums before\n", in ath11k_hal_dump_srng_stats()
1329 srng = &ab->hal.srng_list[i]; in ath11k_hal_dump_srng_stats()
1335 ath11k_err(ab, in ath11k_hal_dump_srng_stats()
1343 ath11k_err(ab, in ath11k_hal_dump_srng_stats()