/linux/drivers/gpu/drm/ttm/tests/ |
H A D | ttm_bo_validate_test.c | 23 u32 mem_type; member 158 u32 mem_type = TTM_PL_VRAM; in ttm_bo_init_reserved_mock_man() local 163 ttm_mock_manager_init(priv->ttm_dev, mem_type, MANAGER_SIZE); in ttm_bo_init_reserved_mock_man() 168 place = ttm_place_kunit_init(test, mem_type, 0); in ttm_bo_init_reserved_mock_man() 190 ttm_mock_manager_fini(priv->ttm_dev, mem_type); in ttm_bo_init_reserved_mock_man() 264 KUNIT_EXPECT_EQ(test, bo->resource->mem_type, snd_mem); in ttm_bo_validate_basic() 305 u32 mem_type = TTM_PL_VRAM; in ttm_bo_validate_failed_alloc() local 313 ttm_bad_manager_init(priv->ttm_dev, mem_type, MANAGER_SIZE); in ttm_bo_validate_failed_alloc() 315 place = ttm_place_kunit_init(test, mem_type, 0); in ttm_bo_validate_failed_alloc() 325 ttm_bad_manager_fini(priv->ttm_dev, mem_type); in ttm_bo_validate_failed_alloc() [all …]
|
H A D | ttm_resource_test.c | 14 u32 mem_type; member 50 u32 mem_type, u32 flags) in ttm_init_test_mocks() argument 58 priv->place = ttm_place_kunit_init(test, mem_type, flags); in ttm_init_test_mocks() 63 u32 mem_type) in ttm_init_test_manager() argument 76 ttm_set_driver_manager(ttm_dev, mem_type, man); in ttm_init_test_manager() 83 .mem_type = TTM_PL_SYSTEM, 87 .mem_type = TTM_PL_VRAM, 91 .mem_type = TTM_PRIV_DUMMY_REG, 95 .mem_type = TTM_PL_SYSTEM, 117 ttm_init_test_mocks(test, priv, params->mem_type, params->flags); in ttm_resource_init_basic() [all …]
|
H A D | ttm_kunit_helpers.c | 12 .mem_type = TTM_PL_SYSTEM, 19 .mem_type = TTM_PL_MOCK1, 26 .mem_type = TTM_PL_MOCK2, 67 if (!old_mem || (old_mem->mem_type == TTM_PL_SYSTEM && !bo->ttm)) { in mock_move() 72 if (bo->resource->mem_type == TTM_PL_VRAM && in mock_move() 73 new_mem->mem_type == TTM_PL_SYSTEM) { in mock_move() 74 hop->mem_type = TTM_PL_TT; in mock_move() 81 if ((old_mem->mem_type == TTM_PL_SYSTEM && in mock_move() 82 new_mem->mem_type == TTM_PL_TT) || in mock_move() 83 (old_mem->mem_type == TTM_PL_TT && in mock_move() [all …]
|
H A D | ttm_mock_manager.c | 93 int ttm_mock_manager_init(struct ttm_device *bdev, u32 mem_type, u32 size) in ttm_mock_manager_init() argument 118 ttm_set_driver_manager(bdev, mem_type, base); in ttm_mock_manager_init() 125 void ttm_mock_manager_fini(struct ttm_device *bdev, u32 mem_type) in ttm_mock_manager_fini() argument 131 man = ttm_manager_type(bdev, mem_type); in ttm_mock_manager_fini() 144 ttm_set_driver_manager(bdev, mem_type, NULL); in ttm_mock_manager_fini() 189 int ttm_bad_manager_init(struct ttm_device *bdev, u32 mem_type, u32 size) in ttm_bad_manager_init() argument 200 ttm_set_driver_manager(bdev, mem_type, man); in ttm_bad_manager_init() 207 int ttm_busy_manager_init(struct ttm_device *bdev, u32 mem_type, u32 size) in ttm_busy_manager_init() argument 211 ttm_bad_manager_init(bdev, mem_type, size); in ttm_busy_manager_init() 212 man = ttm_manager_type(bdev, mem_type); in ttm_busy_manager_init() [all …]
|
H A D | ttm_mock_manager.h | 24 int ttm_mock_manager_init(struct ttm_device *bdev, u32 mem_type, u32 size); 25 int ttm_bad_manager_init(struct ttm_device *bdev, u32 mem_type, u32 size); 26 int ttm_busy_manager_init(struct ttm_device *bdev, u32 mem_type, u32 size); 27 void ttm_mock_manager_fini(struct ttm_device *bdev, u32 mem_type); 28 void ttm_bad_manager_fini(struct ttm_device *bdev, u32 mem_type);
|
H A D | ttm_bo_test.c | 246 u32 mem_type = TTM_PL_SYSTEM; in ttm_bo_unreserve_basic() local 249 place = ttm_place_kunit_init(test, mem_type, 0); in ttm_bo_unreserve_basic() 272 man = ttm_manager_type(priv->ttm_dev, mem_type); in ttm_bo_unreserve_basic() 287 u32 mem_type = TTM_PL_SYSTEM; in ttm_bo_unreserve_pinned() local 298 place = ttm_place_kunit_init(test, mem_type, 0); in ttm_bo_unreserve_pinned() 331 u32 mem_type = TTM_PL_SYSTEM; in ttm_bo_unreserve_bulk() local 337 place = ttm_place_kunit_init(test, mem_type, 0); in ttm_bo_unreserve_bulk() 373 pos = &lru_bulk_move.pos[mem_type][bo_priority]; in ttm_bo_unreserve_bulk() 389 u32 mem_type = TTM_PL_SYSTEM; in ttm_bo_put_basic() local 392 place = ttm_place_kunit_init(test, mem_type, 0); in ttm_bo_put_basic() [all …]
|
/linux/tools/testing/selftests/arm64/mte/ |
H A D | check_buffer_fill.c | 28 static int check_buffer_by_byte(int mem_type, int mode) in check_buffer_by_byte() argument 38 ptr = (char *)mte_allocate_memory(sizes[i], mem_type, 0, true); in check_buffer_by_byte() 39 if (check_allocated_memory(ptr, sizes[i], mem_type, true) != KSFT_PASS) in check_buffer_by_byte() 52 mte_free_memory((void *)ptr, sizes[i], mem_type, true); in check_buffer_by_byte() 63 static int check_buffer_underflow_by_byte(int mem_type, int mode, in check_buffer_underflow_by_byte() argument 74 ptr = (char *)mte_allocate_memory_tag_range(sizes[i], mem_type, 0, in check_buffer_underflow_by_byte() 76 if (check_allocated_memory_range(ptr, sizes[i], mem_type, in check_buffer_underflow_by_byte() 151 mte_free_memory_tag_range((void *)ptr, sizes[i], mem_type, underflow_range, 0); in check_buffer_underflow_by_byte() 158 static int check_buffer_overflow_by_byte(int mem_type, int mode, in check_buffer_overflow_by_byte() argument 170 ptr = (char *)mte_allocate_memory_tag_range(sizes[i], mem_type, in check_buffer_overflow_by_byte() 261 check_buffer_by_block_iterate(int mem_type,int mode,size_t size) check_buffer_by_block_iterate() argument 336 check_buffer_by_block(int mem_type,int mode) check_buffer_by_block() argument 365 check_memory_initial_tags(int mem_type,int mode,int mapping) check_memory_initial_tags() argument [all...] |
H A D | check_tags_inclusion.c | 49 static int check_single_included_tags(int mem_type, int mode) in check_single_included_tags() argument 54 ptr = mte_allocate_memory(BUFFER_SIZE + MT_GRANULE_SIZE, mem_type, 0, false); in check_single_included_tags() 56 mem_type, false) != KSFT_PASS) in check_single_included_tags() 77 mte_free_memory_tag_range(ptr, BUFFER_SIZE, mem_type, 0, MT_GRANULE_SIZE); in check_single_included_tags() 81 static int check_multiple_included_tags(int mem_type, int mode) in check_multiple_included_tags() argument 87 ptr = mte_allocate_memory(BUFFER_SIZE + MT_GRANULE_SIZE, mem_type, 0, false); in check_multiple_included_tags() 89 mem_type, false) != KSFT_PASS) in check_multiple_included_tags() 109 mte_free_memory_tag_range(ptr, BUFFER_SIZE, mem_type, 0, MT_GRANULE_SIZE); in check_multiple_included_tags() 113 static int check_all_included_tags(int mem_type, int mode) in check_all_included_tags() argument 118 ptr = mte_allocate_memory(BUFFER_SIZE + MT_GRANULE_SIZE, mem_type, in check_all_included_tags() 139 check_none_included_tags(int mem_type,int mode) check_none_included_tags() argument [all...] |
H A D | mte_common_util.c | 123 static void *__mte_allocate_memory_range(size_t size, int mem_type, int mapping, in __mte_allocate_memory_range() argument 131 switch (mem_type) { in __mte_allocate_memory_range() 143 if (mem_type == USE_MMAP) in __mte_allocate_memory_range() 156 if (mem_type == USE_MPROTECT) { in __mte_allocate_memory_range() 168 void *mte_allocate_memory_tag_range(size_t size, int mem_type, int mapping, in mte_allocate_memory_tag_range() argument 171 return __mte_allocate_memory_range(size, mem_type, mapping, range_before, in mte_allocate_memory_tag_range() 175 void *mte_allocate_memory(size_t size, int mem_type, int mapping, bool tags) in mte_allocate_memory() argument 177 return __mte_allocate_memory_range(size, mem_type, mapping, 0, 0, tags, -1); in mte_allocate_memory() 180 void *mte_allocate_file_memory(size_t size, int mem_type, int mapping, bool tags, int fd) in mte_allocate_file_memory() argument 185 if (mem_type ! in mte_allocate_file_memory() 205 mte_allocate_file_memory_tag_range(size_t size,int mem_type,int mapping,size_t range_before,size_t range_after,int fd) mte_allocate_file_memory_tag_range() argument 232 __mte_free_memory_range(void * ptr,size_t size,int mem_type,size_t range_before,size_t range_after,bool tags) __mte_free_memory_range() argument 251 mte_free_memory_tag_range(void * ptr,size_t size,int mem_type,size_t range_before,size_t range_after) mte_free_memory_tag_range() argument 257 mte_free_memory(void * ptr,size_t size,int mem_type,bool tags) mte_free_memory() argument [all...] |
H A D | mte_common_util.h | 45 void *mte_allocate_memory(size_t size, int mem_type, int mapping, bool tags); 46 void *mte_allocate_memory_tag_range(size_t size, int mem_type, int mapping, 48 void *mte_allocate_file_memory(size_t size, int mem_type, int mapping, 50 void *mte_allocate_file_memory_tag_range(size_t size, int mem_type, int mapping, 52 void mte_free_memory(void *ptr, size_t size, int mem_type, bool tags); 53 void mte_free_memory_tag_range(void *ptr, size_t size, int mem_type, 96 int mem_type, bool tags) in check_allocated_memory() argument 105 mte_free_memory((void *)ptr, size, mem_type, false); in check_allocated_memory() 112 static inline int check_allocated_memory_range(void *ptr, size_t size, int mem_type, in check_allocated_memory_range() argument 122 mte_free_memory_tag_range((void *)ptr, size, mem_type, range_befor in check_allocated_memory_range() [all...] |
H A D | check_mmap_options.c | 60 static int check_anonymous_memory_mapping(int mem_type, int mode, int mapping, int tag_check) in check_anonymous_memory_mapping() argument 69 map_ptr = (char *)mte_allocate_memory(map_size, mem_type, mapping, false); in check_anonymous_memory_mapping() 70 if (check_allocated_memory(map_ptr, map_size, mem_type, false) != KSFT_PASS) in check_anonymous_memory_mapping() 84 mte_free_memory((void *)map_ptr, map_size, mem_type, false); in check_anonymous_memory_mapping() 91 static int check_file_memory_mapping(int mem_type, int mode, int mapping, int tag_check) in check_file_memory_mapping() argument 105 map_ptr = (char *)mte_allocate_file_memory(map_size, mem_type, mapping, false, fd); in check_file_memory_mapping() 106 if (check_allocated_memory(map_ptr, map_size, mem_type, false) != KSFT_PASS) { in check_file_memory_mapping() 130 static int check_clear_prot_mte_flag(int mem_type, int mode, int mapping) in check_clear_prot_mte_flag() argument 140 ptr = (char *)mte_allocate_memory_tag_range(sizes[run], mem_type, mapping, in check_clear_prot_mte_flag() 142 if (check_allocated_memory_range(ptr, sizes[run], mem_type, in check_clear_prot_mte_flag() [all …]
|
H A D | check_child_memory.c | 84 static int check_child_memory_mapping(int mem_type, int mode, int mapping) in check_child_memory_mapping() argument 93 ptr = (char *)mte_allocate_memory_tag_range(sizes[run], mem_type, mapping, in check_child_memory_mapping() 95 if (check_allocated_memory_range(ptr, sizes[run], mem_type, in check_child_memory_mapping() 99 mte_free_memory_tag_range((void *)ptr, sizes[run], mem_type, UNDERFLOW, OVERFLOW); in check_child_memory_mapping() 106 static int check_child_file_mapping(int mem_type, int mode, int mapping) in check_child_file_mapping() argument 119 map_ptr = (char *)mte_allocate_file_memory(map_size, mem_type, mapping, false, fd); in check_child_file_mapping() 120 if (check_allocated_memory(map_ptr, map_size, mem_type, false) != KSFT_PASS) { in check_child_file_mapping()
|
/linux/drivers/gpu/drm/xe/ |
H A D | xe_drm_client.c | 171 u32 mem_type = bo->ttm.resource->mem_type; in bo_meminfo() local 176 stats[mem_type].shared += sz; in bo_meminfo() 178 stats[mem_type].private += sz; in bo_meminfo() 181 stats[mem_type].resident += sz; in bo_meminfo() 185 stats[mem_type].active += sz; in bo_meminfo() 186 else if (mem_type == XE_PL_SYSTEM) in bo_meminfo() 187 stats[mem_type].purgeable += sz; in bo_meminfo() 202 u32 mem_type; in show_meminfo() local 255 for (mem_type = XE_PL_SYSTEM; mem_type < TTM_NUM_MEM_TYPES; ++mem_type) { in show_meminfo() 256 if (!xe_mem_type_to_name[mem_type]) in show_meminfo() [all …]
|
H A D | xe_bo.c | 43 .mem_type = XE_PL_SYSTEM, 56 .mem_type = XE_PL_TT, 62 .mem_type = XE_PL_SYSTEM, 72 bool mem_type_is_vram(u32 mem_type) in mem_type_is_vram() argument 74 return mem_type >= XE_PL_VRAM0 && mem_type != XE_PL_STOLEN; in mem_type_is_vram() 79 return res->mem_type == XE_PL_STOLEN && IS_DGFX(xe); in resource_is_stolen_vram() 84 return mem_type_is_vram(res->mem_type); in resource_is_vram() 95 return bo->ttm.resource->mem_type == XE_PL_STOLEN; in xe_bo_is_stolen() 133 mem_type_to_migrate(struct xe_device *xe, u32 mem_type) in mem_type_to_migrate() argument 137 xe_assert(xe, mem_type == XE_PL_STOLEN || mem_type_is_vram(mem_type)); in mem_type_to_migrate() [all …]
|
H A D | xe_res_cursor.h | 45 u32 mem_type; member 54 mgr = ttm_manager_type(res->bo->bdev, res->mem_type); in xe_res_get_buddy() 78 cur->mem_type = res->mem_type; in xe_res_first() 80 switch (cur->mem_type) { in xe_res_first() 124 cur->mem_type = XE_PL_TT; in xe_res_first() 164 cur->mem_type = XE_PL_TT; in xe_res_first_sg() 200 switch (cur->mem_type) { in xe_res_next()
|
/linux/drivers/gpu/drm/loongson/ |
H A D | lsdc_ttm.c | 15 const char *lsdc_mem_type_to_str(uint32_t mem_type) in lsdc_mem_type_to_str() argument 17 switch (mem_type) { in lsdc_mem_type_to_str() 59 lbo->placements[c].mem_type = TTM_PL_VRAM; in lsdc_bo_set_placement() 64 lbo->placements[c].mem_type = TTM_PL_TT; in lsdc_bo_set_placement() 69 lbo->placements[c].mem_type = TTM_PL_SYSTEM; in lsdc_bo_set_placement() 74 lbo->placements[c].mem_type = TTM_PL_SYSTEM; in lsdc_bo_set_placement() 145 switch (resource->mem_type) { in lsdc_bo_evict_flags() 180 lbo, lsdc_mem_type_to_str(new_mem->mem_type), in lsdc_bo_move() 186 if (old_mem->mem_type == TTM_PL_SYSTEM && !tbo->ttm) { in lsdc_bo_move() 193 if (old_mem->mem_type == TTM_PL_SYSTEM && in lsdc_bo_move() [all …]
|
/linux/drivers/gpu/drm/nouveau/nvkm/falcon/ |
H A D | base.c | 45 nvkm_falcon_dma(struct nvkm_falcon *falcon, enum nvkm_falcon_mem *mem_type, u32 *mem_base) in nvkm_falcon_dma() argument 47 switch (*mem_type) { in nvkm_falcon_dma() 57 enum nvkm_falcon_mem mem_type, u32 mem_base, int len, bool sec) in nvkm_falcon_dma_wr() argument 59 const struct nvkm_falcon_func_dma *dma = nvkm_falcon_dma(falcon, &mem_type, &mem_base); in nvkm_falcon_dma_wr() 60 const char *type = nvkm_falcon_mem(mem_type); in nvkm_falcon_dma_wr() 69 if (mem_type == DMEM) { in nvkm_falcon_dma_wr() 79 ret = dma->init(falcon, dma_addr, dmalen, mem_type, sec, &cmd); in nvkm_falcon_dma_wr() 121 nvkm_falcon_pio(struct nvkm_falcon *falcon, enum nvkm_falcon_mem *mem_type, u32 *mem_base) in nvkm_falcon_pio() argument 123 switch (*mem_type) { in nvkm_falcon_pio() 140 nvkm_falcon_pio_rd(struct nvkm_falcon *falcon, u8 port, enum nvkm_falcon_mem mem_type, u32 mem_base, in nvkm_falcon_pio_rd() argument [all …]
|
/linux/arch/mips/loongson64/ |
H A D | init.c | 51 u32 i, mem_type; in szmem() local 64 mem_type = loongson_memmap->map[i].mem_type; in szmem() 75 switch (mem_type) { in szmem() 79 pr_info("Node %d, mem_type:%d\t[%pa], %pa bytes usable\n", in szmem() 80 (u32)node_id, mem_type, &mem_start, &mem_size); in szmem() 89 pr_info("Node %d, mem_type:%d\t[%pa], %pa bytes reserved\n", in szmem() 90 (u32)node_id, mem_type, &mem_start, &mem_size); in szmem() 96 pr_info("Node %d, mem_type:%d\t[%pa], %pa bytes unhandled\n", in szmem() 97 (u32)node_id, mem_type, &mem_start, &mem_size); in szmem()
|
/linux/include/trace/events/ |
H A D | xdp.h | 330 __field(u32, mem_type) 337 __entry->mem_type = xa->mem.type; 341 TP_printk("mem_id=%d mem_type=%s allocator=%p", 343 __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB), 358 __field(u32, mem_type) 367 __entry->mem_type = xa->mem.type; 373 TP_printk("mem_id=%d mem_type=%s allocator=%p" 376 __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB), 392 __field(u32, mem_type) 398 __entry->mem_type [all...] |
/linux/drivers/gpu/drm/amd/amdgpu/ |
H A D | amdgpu_ttm.c | 98 .mem_type = TTM_PL_SYSTEM, in amdgpu_evict_flags() 121 switch (bo->resource->mem_type) { in amdgpu_evict_flags() 196 if (WARN_ON(mem->mem_type == AMDGPU_PL_PREEMPT)) in amdgpu_ttm_map_buffer() 201 *addr = amdgpu_ttm_domain_start(adev, mem->mem_type) + in amdgpu_ttm_map_buffer() 250 if (mem->mem_type == TTM_PL_TT) { in amdgpu_ttm_map_buffer() 334 (abo_src->tbo.resource->mem_type == TTM_PL_VRAM)) in amdgpu_ttm_copy_mem_to_mem() 337 (dst->mem->mem_type == TTM_PL_VRAM)) { in amdgpu_ttm_copy_mem_to_mem() 399 if (old_mem->mem_type == TTM_PL_VRAM && in amdgpu_move_blit() 444 if (res->mem_type == TTM_PL_SYSTEM || res->mem_type == TTM_PL_TT || in amdgpu_res_cpu_visible() 445 res->mem_type == AMDGPU_PL_PREEMPT || res->mem_type == AMDGPU_PL_DOORBELL) in amdgpu_res_cpu_visible() [all …]
|
H A D | amdgpu_atomfirmware.c | 306 u8 mem_type; in amdgpu_atomfirmware_get_vram_info() local 339 mem_type = igp_info->v11.memorytype; in amdgpu_atomfirmware_get_vram_info() 340 if (mem_type == LpDdr5MemType) in amdgpu_atomfirmware_get_vram_info() 347 *vram_type = convert_atom_mem_type_to_vram_type(adev, mem_type); in amdgpu_atomfirmware_get_vram_info() 360 mem_type = igp_info->v21.memorytype; in amdgpu_atomfirmware_get_vram_info() 361 if (mem_type == LpDdr5MemType) in amdgpu_atomfirmware_get_vram_info() 368 *vram_type = convert_atom_mem_type_to_vram_type(adev, mem_type); in amdgpu_atomfirmware_get_vram_info() 374 mem_type = igp_info->v23.memorytype; in amdgpu_atomfirmware_get_vram_info() 375 if (mem_type == LpDdr5MemType) in amdgpu_atomfirmware_get_vram_info() 382 *vram_type = convert_atom_mem_type_to_vram_type(adev, mem_type); in amdgpu_atomfirmware_get_vram_info() [all …]
|
H A D | amdgpu_res_cursor.h | 41 uint32_t mem_type; member 67 cur->mem_type = res->mem_type; in amdgpu_res_first() 69 switch (cur->mem_type) { in amdgpu_res_first() 143 switch (cur->mem_type) { in amdgpu_res_next() 178 switch (cur->mem_type) { in amdgpu_res_cleared()
|
/linux/drivers/gpu/drm/vmwgfx/ |
H A D | vmwgfx_ttm_buffer.c | 35 .mem_type = TTM_PL_VRAM, 42 .mem_type = TTM_PL_SYSTEM, 291 vmw_be->mem_type = bo_mem->mem_type; in vmw_ttm_bind() 293 switch (bo_mem->mem_type) { in vmw_ttm_bind() 329 switch (vmw_be->mem_type) { in vmw_ttm_unbind() 442 switch (mem->mem_type) { in vmw_ttm_io_mem_reserve() 491 static bool vmw_memtype_is_system(uint32_t mem_type) in vmw_memtype_is_system() argument 493 return mem_type == TTM_PL_SYSTEM || mem_type == VMW_PL_SYSTEM; in vmw_memtype_is_system() 506 new_man = ttm_manager_type(bo->bdev, new_mem->mem_type); in vmw_move() 508 old_man = ttm_manager_type(bo->bdev, bo->resource->mem_type); in vmw_move() [all …]
|
H A D | vmwgfx_bo.c | 216 if (bo->resource->mem_type == TTM_PL_VRAM && in vmw_bo_pin_in_start_of_vram() 286 if (bo->resource->mem_type == TTM_PL_VRAM) { in vmw_bo_get_guest_ptr() 309 uint32_t old_mem_type = bo->resource->mem_type; in vmw_bo_pin_reserved() 319 pl.mem_type = bo->resource->mem_type; in vmw_bo_pin_reserved() 328 BUG_ON(ret != 0 || bo->resource->mem_type != old_mem_type); in vmw_bo_pin_reserved() 729 if (mem->mem_type == TTM_PL_VRAM || bo->resource->mem_type == TTM_PL_VRAM) in vmw_bo_move_notify() 737 if (mem->mem_type != VMW_PL_MOB && bo->resource->mem_type == VMW_PL_MOB) in vmw_bo_move_notify() 762 pl[n].mem_type = VMW_PL_MOB; in set_placement_list() 770 pl[n].mem_type = VMW_PL_GMR; in set_placement_list() 778 pl[n].mem_type = TTM_PL_VRAM; in set_placement_list() [all …]
|
/linux/drivers/i2c/busses/ |
H A D | i2c-amd-mp2.h | 64 enum mem_type { enum 76 * @mem_type: bit 31 0-DRAM; 1-C2P msg o/p 86 enum mem_type mem_type : 1; member 119 * @mem_type: bit 7 0-DRAM; 1-C2P msg o/p 129 enum mem_type mem_type : 1; member
|