Lines Matching refs:srng
1236 struct hal_srng *srng, int ring_num) in ath12k_hal_ce_dst_setup() argument
1248 val |= u32_encode_bits(srng->u.dst_ring.max_buffer_length, in ath12k_hal_ce_dst_setup()
1254 struct hal_srng *srng) in ath12k_hal_srng_dst_hw_init() argument
1261 reg_base = srng->hwreg_base[HAL_SRNG_REG_GRP_R0]; in ath12k_hal_srng_dst_hw_init()
1263 if (srng->flags & HAL_SRNG_FLAGS_MSI_INTR) { in ath12k_hal_srng_dst_hw_init()
1266 srng->msi_addr); in ath12k_hal_srng_dst_hw_init()
1268 val = u32_encode_bits(((u64)srng->msi_addr >> HAL_ADDR_MSB_REG_SHIFT), in ath12k_hal_srng_dst_hw_init()
1276 srng->msi_data); in ath12k_hal_srng_dst_hw_init()
1279 ath12k_hif_write32(ab, reg_base, srng->ring_base_paddr); in ath12k_hal_srng_dst_hw_init()
1281 val = u32_encode_bits(((u64)srng->ring_base_paddr >> HAL_ADDR_MSB_REG_SHIFT), in ath12k_hal_srng_dst_hw_init()
1283 u32_encode_bits((srng->entry_size * srng->num_entries), in ath12k_hal_srng_dst_hw_init()
1287 val = u32_encode_bits(srng->ring_id, HAL_REO1_RING_ID_RING_ID) | in ath12k_hal_srng_dst_hw_init()
1288 u32_encode_bits(srng->entry_size, HAL_REO1_RING_ID_ENTRY_SIZE); in ath12k_hal_srng_dst_hw_init()
1292 val = u32_encode_bits((srng->intr_timer_thres_us >> 3), in ath12k_hal_srng_dst_hw_init()
1295 val |= u32_encode_bits((srng->intr_batch_cntr_thres_entries * srng->entry_size), in ath12k_hal_srng_dst_hw_init()
1303 ((unsigned long)srng->u.dst_ring.hp_addr - in ath12k_hal_srng_dst_hw_init()
1311 reg_base = srng->hwreg_base[HAL_SRNG_REG_GRP_R2]; in ath12k_hal_srng_dst_hw_init()
1314 *srng->u.dst_ring.hp_addr = 0; in ath12k_hal_srng_dst_hw_init()
1316 reg_base = srng->hwreg_base[HAL_SRNG_REG_GRP_R0]; in ath12k_hal_srng_dst_hw_init()
1318 if (srng->flags & HAL_SRNG_FLAGS_DATA_TLV_SWAP) in ath12k_hal_srng_dst_hw_init()
1320 if (srng->flags & HAL_SRNG_FLAGS_RING_PTR_SWAP) in ath12k_hal_srng_dst_hw_init()
1322 if (srng->flags & HAL_SRNG_FLAGS_MSI_SWAP) in ath12k_hal_srng_dst_hw_init()
1330 struct hal_srng *srng) in ath12k_hal_srng_src_hw_init() argument
1337 reg_base = srng->hwreg_base[HAL_SRNG_REG_GRP_R0]; in ath12k_hal_srng_src_hw_init()
1339 if (srng->flags & HAL_SRNG_FLAGS_MSI_INTR) { in ath12k_hal_srng_src_hw_init()
1342 srng->msi_addr); in ath12k_hal_srng_src_hw_init()
1344 val = u32_encode_bits(((u64)srng->msi_addr >> HAL_ADDR_MSB_REG_SHIFT), in ath12k_hal_srng_src_hw_init()
1353 srng->msi_data); in ath12k_hal_srng_src_hw_init()
1356 ath12k_hif_write32(ab, reg_base, srng->ring_base_paddr); in ath12k_hal_srng_src_hw_init()
1358 val = u32_encode_bits(((u64)srng->ring_base_paddr >> HAL_ADDR_MSB_REG_SHIFT), in ath12k_hal_srng_src_hw_init()
1360 u32_encode_bits((srng->entry_size * srng->num_entries), in ath12k_hal_srng_src_hw_init()
1364 val = u32_encode_bits(srng->entry_size, HAL_REO1_RING_ID_ENTRY_SIZE); in ath12k_hal_srng_src_hw_init()
1367 val = u32_encode_bits(srng->intr_timer_thres_us, in ath12k_hal_srng_src_hw_init()
1370 val |= u32_encode_bits((srng->intr_batch_cntr_thres_entries * srng->entry_size), in ath12k_hal_srng_src_hw_init()
1378 if (srng->flags & HAL_SRNG_FLAGS_LOW_THRESH_INTR_EN) { in ath12k_hal_srng_src_hw_init()
1379 val |= u32_encode_bits(srng->u.src_ring.low_threshold, in ath12k_hal_srng_src_hw_init()
1386 if (srng->ring_id != HAL_SRNG_RING_ID_WBM_IDLE_LINK) { in ath12k_hal_srng_src_hw_init()
1388 ((unsigned long)srng->u.src_ring.tp_addr - in ath12k_hal_srng_src_hw_init()
1399 reg_base = srng->hwreg_base[HAL_SRNG_REG_GRP_R2]; in ath12k_hal_srng_src_hw_init()
1402 *srng->u.src_ring.tp_addr = 0; in ath12k_hal_srng_src_hw_init()
1404 reg_base = srng->hwreg_base[HAL_SRNG_REG_GRP_R0]; in ath12k_hal_srng_src_hw_init()
1406 if (srng->flags & HAL_SRNG_FLAGS_DATA_TLV_SWAP) in ath12k_hal_srng_src_hw_init()
1408 if (srng->flags & HAL_SRNG_FLAGS_RING_PTR_SWAP) in ath12k_hal_srng_src_hw_init()
1410 if (srng->flags & HAL_SRNG_FLAGS_MSI_SWAP) in ath12k_hal_srng_src_hw_init()
1418 if (srng->ring_id == HAL_SRNG_RING_ID_WBM_IDLE_LINK) in ath12k_hal_srng_src_hw_init()
1425 struct hal_srng *srng) in ath12k_hal_srng_hw_init() argument
1427 if (srng->ring_dir == HAL_SRNG_DIR_SRC) in ath12k_hal_srng_hw_init()
1428 ath12k_hal_srng_src_hw_init(ab, srng); in ath12k_hal_srng_hw_init()
1430 ath12k_hal_srng_dst_hw_init(ab, srng); in ath12k_hal_srng_hw_init()
1479 void ath12k_hal_srng_get_params(struct ath12k_base *ab, struct hal_srng *srng, in ath12k_hal_srng_get_params() argument
1482 params->ring_base_paddr = srng->ring_base_paddr; in ath12k_hal_srng_get_params()
1483 params->ring_base_vaddr = srng->ring_base_vaddr; in ath12k_hal_srng_get_params()
1484 params->num_entries = srng->num_entries; in ath12k_hal_srng_get_params()
1485 params->intr_timer_thres_us = srng->intr_timer_thres_us; in ath12k_hal_srng_get_params()
1487 srng->intr_batch_cntr_thres_entries; in ath12k_hal_srng_get_params()
1488 params->low_threshold = srng->u.src_ring.low_threshold; in ath12k_hal_srng_get_params()
1489 params->msi_addr = srng->msi_addr; in ath12k_hal_srng_get_params()
1490 params->msi2_addr = srng->msi2_addr; in ath12k_hal_srng_get_params()
1491 params->msi_data = srng->msi_data; in ath12k_hal_srng_get_params()
1492 params->msi2_data = srng->msi2_data; in ath12k_hal_srng_get_params()
1493 params->flags = srng->flags; in ath12k_hal_srng_get_params()
1497 struct hal_srng *srng) in ath12k_hal_srng_get_hp_addr() argument
1499 if (!(srng->flags & HAL_SRNG_FLAGS_LMAC_RING)) in ath12k_hal_srng_get_hp_addr()
1502 if (srng->ring_dir == HAL_SRNG_DIR_SRC) in ath12k_hal_srng_get_hp_addr()
1504 ((unsigned long)srng->u.src_ring.hp_addr - in ath12k_hal_srng_get_hp_addr()
1508 ((unsigned long)srng->u.dst_ring.hp_addr - in ath12k_hal_srng_get_hp_addr()
1513 struct hal_srng *srng) in ath12k_hal_srng_get_tp_addr() argument
1515 if (!(srng->flags & HAL_SRNG_FLAGS_LMAC_RING)) in ath12k_hal_srng_get_tp_addr()
1518 if (srng->ring_dir == HAL_SRNG_DIR_SRC) in ath12k_hal_srng_get_tp_addr()
1520 ((unsigned long)srng->u.src_ring.tp_addr - in ath12k_hal_srng_get_tp_addr()
1524 ((unsigned long)srng->u.dst_ring.tp_addr - in ath12k_hal_srng_get_tp_addr()
1586 void *ath12k_hal_srng_dst_peek(struct ath12k_base *ab, struct hal_srng *srng) in ath12k_hal_srng_dst_peek() argument
1588 lockdep_assert_held(&srng->lock); in ath12k_hal_srng_dst_peek()
1590 if (srng->u.dst_ring.tp != srng->u.dst_ring.cached_hp) in ath12k_hal_srng_dst_peek()
1591 return (srng->ring_base_vaddr + srng->u.dst_ring.tp); in ath12k_hal_srng_dst_peek()
1597 struct hal_srng *srng) in ath12k_hal_srng_dst_get_next_entry() argument
1601 lockdep_assert_held(&srng->lock); in ath12k_hal_srng_dst_get_next_entry()
1603 if (srng->u.dst_ring.tp == srng->u.dst_ring.cached_hp) in ath12k_hal_srng_dst_get_next_entry()
1606 desc = srng->ring_base_vaddr + srng->u.dst_ring.tp; in ath12k_hal_srng_dst_get_next_entry()
1608 srng->u.dst_ring.tp = (srng->u.dst_ring.tp + srng->entry_size) % in ath12k_hal_srng_dst_get_next_entry()
1609 srng->ring_size; in ath12k_hal_srng_dst_get_next_entry()
1614 int ath12k_hal_srng_dst_num_free(struct ath12k_base *ab, struct hal_srng *srng, in ath12k_hal_srng_dst_num_free() argument
1619 lockdep_assert_held(&srng->lock); in ath12k_hal_srng_dst_num_free()
1621 tp = srng->u.dst_ring.tp; in ath12k_hal_srng_dst_num_free()
1624 hp = *srng->u.dst_ring.hp_addr; in ath12k_hal_srng_dst_num_free()
1625 srng->u.dst_ring.cached_hp = hp; in ath12k_hal_srng_dst_num_free()
1627 hp = srng->u.dst_ring.cached_hp; in ath12k_hal_srng_dst_num_free()
1631 return (hp - tp) / srng->entry_size; in ath12k_hal_srng_dst_num_free()
1633 return (srng->ring_size - tp + hp) / srng->entry_size; in ath12k_hal_srng_dst_num_free()
1637 int ath12k_hal_srng_src_num_free(struct ath12k_base *ab, struct hal_srng *srng, in ath12k_hal_srng_src_num_free() argument
1642 lockdep_assert_held(&srng->lock); in ath12k_hal_srng_src_num_free()
1644 hp = srng->u.src_ring.hp; in ath12k_hal_srng_src_num_free()
1647 tp = *srng->u.src_ring.tp_addr; in ath12k_hal_srng_src_num_free()
1648 srng->u.src_ring.cached_tp = tp; in ath12k_hal_srng_src_num_free()
1650 tp = srng->u.src_ring.cached_tp; in ath12k_hal_srng_src_num_free()
1654 return ((tp - hp) / srng->entry_size) - 1; in ath12k_hal_srng_src_num_free()
1656 return ((srng->ring_size - hp + tp) / srng->entry_size) - 1; in ath12k_hal_srng_src_num_free()
1660 struct hal_srng *srng) in ath12k_hal_srng_src_get_next_entry() argument
1665 lockdep_assert_held(&srng->lock); in ath12k_hal_srng_src_get_next_entry()
1673 next_hp = (srng->u.src_ring.hp + srng->entry_size) % srng->ring_size; in ath12k_hal_srng_src_get_next_entry()
1675 if (next_hp == srng->u.src_ring.cached_tp) in ath12k_hal_srng_src_get_next_entry()
1678 desc = srng->ring_base_vaddr + srng->u.src_ring.hp; in ath12k_hal_srng_src_get_next_entry()
1679 srng->u.src_ring.hp = next_hp; in ath12k_hal_srng_src_get_next_entry()
1687 srng->u.src_ring.reap_hp = next_hp; in ath12k_hal_srng_src_get_next_entry()
1693 struct hal_srng *srng) in ath12k_hal_srng_src_reap_next() argument
1698 lockdep_assert_held(&srng->lock); in ath12k_hal_srng_src_reap_next()
1700 next_reap_hp = (srng->u.src_ring.reap_hp + srng->entry_size) % in ath12k_hal_srng_src_reap_next()
1701 srng->ring_size; in ath12k_hal_srng_src_reap_next()
1703 if (next_reap_hp == srng->u.src_ring.cached_tp) in ath12k_hal_srng_src_reap_next()
1706 desc = srng->ring_base_vaddr + next_reap_hp; in ath12k_hal_srng_src_reap_next()
1707 srng->u.src_ring.reap_hp = next_reap_hp; in ath12k_hal_srng_src_reap_next()
1713 struct hal_srng *srng) in ath12k_hal_srng_src_get_next_reaped() argument
1717 lockdep_assert_held(&srng->lock); in ath12k_hal_srng_src_get_next_reaped()
1719 if (srng->u.src_ring.hp == srng->u.src_ring.reap_hp) in ath12k_hal_srng_src_get_next_reaped()
1722 desc = srng->ring_base_vaddr + srng->u.src_ring.hp; in ath12k_hal_srng_src_get_next_reaped()
1723 srng->u.src_ring.hp = (srng->u.src_ring.hp + srng->entry_size) % in ath12k_hal_srng_src_get_next_reaped()
1724 srng->ring_size; in ath12k_hal_srng_src_get_next_reaped()
1729 void ath12k_hal_srng_access_begin(struct ath12k_base *ab, struct hal_srng *srng) in ath12k_hal_srng_access_begin() argument
1731 lockdep_assert_held(&srng->lock); in ath12k_hal_srng_access_begin()
1733 if (srng->ring_dir == HAL_SRNG_DIR_SRC) in ath12k_hal_srng_access_begin()
1734 srng->u.src_ring.cached_tp = in ath12k_hal_srng_access_begin()
1735 *(volatile u32 *)srng->u.src_ring.tp_addr; in ath12k_hal_srng_access_begin()
1737 srng->u.dst_ring.cached_hp = *srng->u.dst_ring.hp_addr; in ath12k_hal_srng_access_begin()
1743 void ath12k_hal_srng_access_end(struct ath12k_base *ab, struct hal_srng *srng) in ath12k_hal_srng_access_end() argument
1745 lockdep_assert_held(&srng->lock); in ath12k_hal_srng_access_end()
1748 if (srng->flags & HAL_SRNG_FLAGS_LMAC_RING) { in ath12k_hal_srng_access_end()
1752 if (srng->ring_dir == HAL_SRNG_DIR_SRC) { in ath12k_hal_srng_access_end()
1753 srng->u.src_ring.last_tp = in ath12k_hal_srng_access_end()
1754 *(volatile u32 *)srng->u.src_ring.tp_addr; in ath12k_hal_srng_access_end()
1755 *srng->u.src_ring.hp_addr = srng->u.src_ring.hp; in ath12k_hal_srng_access_end()
1757 srng->u.dst_ring.last_hp = *srng->u.dst_ring.hp_addr; in ath12k_hal_srng_access_end()
1758 *srng->u.dst_ring.tp_addr = srng->u.dst_ring.tp; in ath12k_hal_srng_access_end()
1761 if (srng->ring_dir == HAL_SRNG_DIR_SRC) { in ath12k_hal_srng_access_end()
1762 srng->u.src_ring.last_tp = in ath12k_hal_srng_access_end()
1763 *(volatile u32 *)srng->u.src_ring.tp_addr; in ath12k_hal_srng_access_end()
1765 (unsigned long)srng->u.src_ring.hp_addr - in ath12k_hal_srng_access_end()
1767 srng->u.src_ring.hp); in ath12k_hal_srng_access_end()
1769 srng->u.dst_ring.last_hp = *srng->u.dst_ring.hp_addr; in ath12k_hal_srng_access_end()
1771 (unsigned long)srng->u.dst_ring.tp_addr - in ath12k_hal_srng_access_end()
1773 srng->u.dst_ring.tp); in ath12k_hal_srng_access_end()
1777 srng->timestamp = jiffies; in ath12k_hal_srng_access_end()
1892 struct hal_srng *srng; in ath12k_hal_srng_setup() local
1902 srng = &hal->srng_list[ring_id]; in ath12k_hal_srng_setup()
1904 srng->ring_id = ring_id; in ath12k_hal_srng_setup()
1905 srng->ring_dir = srng_config->ring_dir; in ath12k_hal_srng_setup()
1906 srng->ring_base_paddr = params->ring_base_paddr; in ath12k_hal_srng_setup()
1907 srng->ring_base_vaddr = params->ring_base_vaddr; in ath12k_hal_srng_setup()
1908 srng->entry_size = srng_config->entry_size; in ath12k_hal_srng_setup()
1909 srng->num_entries = params->num_entries; in ath12k_hal_srng_setup()
1910 srng->ring_size = srng->entry_size * srng->num_entries; in ath12k_hal_srng_setup()
1911 srng->intr_batch_cntr_thres_entries = in ath12k_hal_srng_setup()
1913 srng->intr_timer_thres_us = params->intr_timer_thres_us; in ath12k_hal_srng_setup()
1914 srng->flags = params->flags; in ath12k_hal_srng_setup()
1915 srng->msi_addr = params->msi_addr; in ath12k_hal_srng_setup()
1916 srng->msi2_addr = params->msi2_addr; in ath12k_hal_srng_setup()
1917 srng->msi_data = params->msi_data; in ath12k_hal_srng_setup()
1918 srng->msi2_data = params->msi2_data; in ath12k_hal_srng_setup()
1919 srng->initialized = 1; in ath12k_hal_srng_setup()
1920 spin_lock_init(&srng->lock); in ath12k_hal_srng_setup()
1921 lockdep_set_class(&srng->lock, &srng->lock_key); in ath12k_hal_srng_setup()
1924 srng->hwreg_base[i] = srng_config->reg_start[i] + in ath12k_hal_srng_setup()
1928 memset(srng->ring_base_vaddr, 0, in ath12k_hal_srng_setup()
1929 (srng->entry_size * srng->num_entries) << 2); in ath12k_hal_srng_setup()
1931 reg_base = srng->hwreg_base[HAL_SRNG_REG_GRP_R2]; in ath12k_hal_srng_setup()
1933 if (srng->ring_dir == HAL_SRNG_DIR_SRC) { in ath12k_hal_srng_setup()
1934 srng->u.src_ring.hp = 0; in ath12k_hal_srng_setup()
1935 srng->u.src_ring.cached_tp = 0; in ath12k_hal_srng_setup()
1936 srng->u.src_ring.reap_hp = srng->ring_size - srng->entry_size; in ath12k_hal_srng_setup()
1937 srng->u.src_ring.tp_addr = (void *)(hal->rdp.vaddr + ring_id); in ath12k_hal_srng_setup()
1938 srng->u.src_ring.low_threshold = params->low_threshold * in ath12k_hal_srng_setup()
1939 srng->entry_size; in ath12k_hal_srng_setup()
1942 srng->u.src_ring.hp_addr = in ath12k_hal_srng_setup()
1949 (unsigned long)srng->u.src_ring.hp_addr - in ath12k_hal_srng_setup()
1953 srng->u.src_ring.hp_addr = (void *)(hal->wrp.vaddr + in ath12k_hal_srng_setup()
1955 srng->flags |= HAL_SRNG_FLAGS_LMAC_RING; in ath12k_hal_srng_setup()
1966 srng->u.dst_ring.loop_cnt = 1; in ath12k_hal_srng_setup()
1967 srng->u.dst_ring.tp = 0; in ath12k_hal_srng_setup()
1968 srng->u.dst_ring.cached_hp = 0; in ath12k_hal_srng_setup()
1969 srng->u.dst_ring.hp_addr = (void *)(hal->rdp.vaddr + ring_id); in ath12k_hal_srng_setup()
1972 srng->u.dst_ring.tp_addr = in ath12k_hal_srng_setup()
1980 (unsigned long)srng->u.dst_ring.tp_addr - in ath12k_hal_srng_setup()
1987 srng->u.dst_ring.tp_addr = (void *)(hal->wrp.vaddr + in ath12k_hal_srng_setup()
1989 srng->flags |= HAL_SRNG_FLAGS_LMAC_RING; in ath12k_hal_srng_setup()
1996 ath12k_hal_srng_hw_init(ab, srng); in ath12k_hal_srng_setup()
1999 srng->u.dst_ring.max_buffer_length = params->max_buffer_len; in ath12k_hal_srng_setup()
2000 ath12k_hal_ce_dst_setup(ab, srng, ring_num); in ath12k_hal_srng_setup()
2011 struct hal_srng *srng; in ath12k_hal_srng_update_hp_tp_addr() local
2020 srng = &hal->srng_list[ring_id]; in ath12k_hal_srng_update_hp_tp_addr()
2023 srng->u.dst_ring.tp_addr = (u32 *)(HAL_SHADOW_REG(shadow_cfg_idx) + in ath12k_hal_srng_update_hp_tp_addr()
2026 srng->u.src_ring.hp_addr = (u32 *)(HAL_SHADOW_REG(shadow_cfg_idx) + in ath12k_hal_srng_update_hp_tp_addr()
2101 struct hal_srng *srng) in ath12k_hal_srng_shadow_update_hp_tp() argument
2103 lockdep_assert_held(&srng->lock); in ath12k_hal_srng_shadow_update_hp_tp()
2108 if (srng->ring_dir == HAL_SRNG_DIR_SRC && in ath12k_hal_srng_shadow_update_hp_tp()
2109 *srng->u.src_ring.tp_addr != srng->u.src_ring.hp) in ath12k_hal_srng_shadow_update_hp_tp()
2110 ath12k_hal_srng_access_end(ab, srng); in ath12k_hal_srng_shadow_update_hp_tp()
2174 struct hal_srng *srng; in ath12k_hal_dump_srng_stats() local
2200 srng = &ab->hal.srng_list[i]; in ath12k_hal_dump_srng_stats()
2202 if (!srng->initialized) in ath12k_hal_dump_srng_stats()
2205 if (srng->ring_dir == HAL_SRNG_DIR_SRC) in ath12k_hal_dump_srng_stats()
2208 srng->ring_id, srng->u.src_ring.hp, in ath12k_hal_dump_srng_stats()
2209 srng->u.src_ring.reap_hp, in ath12k_hal_dump_srng_stats()
2210 *srng->u.src_ring.tp_addr, srng->u.src_ring.cached_tp, in ath12k_hal_dump_srng_stats()
2211 srng->u.src_ring.last_tp, in ath12k_hal_dump_srng_stats()
2212 jiffies_to_msecs(jiffies - srng->timestamp)); in ath12k_hal_dump_srng_stats()
2213 else if (srng->ring_dir == HAL_SRNG_DIR_DST) in ath12k_hal_dump_srng_stats()
2216 srng->ring_id, srng->u.dst_ring.tp, in ath12k_hal_dump_srng_stats()
2217 *srng->u.dst_ring.hp_addr, in ath12k_hal_dump_srng_stats()
2218 srng->u.dst_ring.cached_hp, in ath12k_hal_dump_srng_stats()
2219 srng->u.dst_ring.last_hp, in ath12k_hal_dump_srng_stats()
2220 jiffies_to_msecs(jiffies - srng->timestamp)); in ath12k_hal_dump_srng_stats()