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