From bf9c5056ac1f4a0b7dd38d1576ba773c6b74979d Mon Sep 17 00:00:00 2001 From: xj Date: Mon, 5 Aug 2024 00:51:52 -0700 Subject: [PATCH] Adding usb memory pool functions --- .../drivers/usb/components/mem/usb_mem.c | 42 +++++++++++++++++++ .../drivers/usb/components/mem/usb_mem.h | 3 +- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/mem/usb_mem.c b/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/mem/usb_mem.c index 134e29c35..14da9ec0e 100644 --- a/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/mem/usb_mem.c +++ b/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/mem/usb_mem.c @@ -134,4 +134,46 @@ void usb_free_mem_page(usb_mem_page_t page){ header = 0; usb_mem_pool.header = header; +} + + +int usb_used_page_num_mem_pool(){ + int header, tail, used_num; + header = usb_mem_pool.header; + tail = usb_mem_pool.tail; + + used_num = tail - header; + + if(used_num < 0) + used_num += MEM_POOL_SIZE; + + return used_num; +} + + +uintptr_t usb_mem_page_phy2vir(uintptr_t phy_addr){ + int header, used_num, cnt; + uintptr_t vir_addr = 0; + + header = usb_mem_pool.header; + used_num = usb_used_page_num_mem_pool(); + + cnt = 0; + while(cnt < used_num){ + if(usb_mem_pool.pages[header].phy_addr == phy_addr){ + vir_addr = usb_mem_pool.pages[header].vir_addr; + break; + } + + + header++; + + if(header == MEM_POOL_SIZE - 1) + header = 0; + + + cnt++; + } + + return vir_addr; } \ No newline at end of file diff --git a/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/mem/usb_mem.h b/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/mem/usb_mem.h index 821234025..65b1d6fdd 100644 --- a/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/mem/usb_mem.h +++ b/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/mem/usb_mem.h @@ -60,7 +60,8 @@ int usb_mem_pool_init(); void usb_mem_pool_destory(); int usb_alloc_mem_page(usb_mem_page_t page); void usb_free_mem_page(usb_mem_page_t page); - +int usb_used_page_num_mem_pool(); +uintptr_t usb_mem_page_phy2vir(uintptr_t phy_addr); #endif