/** * mu3d_hal_alloc_qmu_mem - allocate gpd and bd memory for all ep * */ void mu3d_hal_alloc_qmu_mem(void) { DEV_UINT32 i, size; TGPD *ptr, *io_ptr; for (i = 1; i <= MAX_QMU_EP; i++) { /* Allocate Rx GPD */ size = (sizeof(TGPD) + AT_GPD_EXT_LEN) * MAX_GPD_NUM; ptr = (TGPD *) kmalloc(size, GFP_KERNEL); memset(ptr, 0, size); io_ptr = (TGPD *) dma_map_single(NULL, ptr, size, DMA_BIDIRECTIONAL); init_gpd_list(USB_RX, i, ptr, io_ptr, MAX_GPD_NUM); Rx_gpd_end[i] = ptr; qmu_printk(K_INFO, "ALLOC RX GPD End [%d] Virtual Mem=%p, DMA addr=%p\n", i, Rx_gpd_end[i], io_ptr); TGPD_CLR_FLAGS_HWO(Rx_gpd_end[i]); Rx_gpd_head[i] = Rx_gpd_last[i] = Rx_gpd_end[i]; qmu_printk(K_INFO, "RQSAR[%d]=%p\n", i, (void *)virt_to_phys(Rx_gpd_end[i])); /* Allocate Tx GPD */ size = (sizeof(TGPD) + AT_GPD_EXT_LEN) * MAX_GPD_NUM; ptr = (TGPD *) kmalloc(size, GFP_KERNEL); memset(ptr, 0, size); io_ptr = (TGPD *) dma_map_single(NULL, ptr, size, DMA_BIDIRECTIONAL); init_gpd_list(USB_TX, i, ptr, io_ptr, MAX_GPD_NUM); Tx_gpd_end[i] = ptr; qmu_printk(K_INFO, "ALLOC TX GPD End [%d] Virtual Mem=%p, DMA addr=%p\n", i, Tx_gpd_end[i], io_ptr); TGPD_CLR_FLAGS_HWO(Tx_gpd_end[i]); Tx_gpd_head[i] = Tx_gpd_last[i] = Tx_gpd_end[i]; qmu_printk(K_INFO, "TQSAR[%d]=%p\n", i, (void *)virt_to_phys(Tx_gpd_end[i])); } }
void _ex_mu3d_hal_alloc_qmu_mem(struct device *dev) { DEV_UINT32 i, size; TGPD *ptr; dma_addr_t io_ptr; dma_addr_t dma_handle; /*TODO: dma_pool_alloc() is an alternative choice once the memory size is a concern */ for ( i=1; i<=MAX_QMU_EP; i++) { /* Allocate Rx GPD */ size = (sizeof(TGPD) + AT_GPD_EXT_LEN) * MAX_GPD_NUM; ptr = (TGPD*)dma_alloc_coherent(dev, size, &dma_handle, GFP_KERNEL); memset(ptr, 0 , size); Rx_gpd_ioptr[i] = io_ptr = dma_handle ; init_gpd_list( USB_RX, i, ptr, io_ptr, MAX_GPD_NUM); Rx_gpd_end[i] = ptr; qmu_printk(K_INFO, "ALLOC RX GPD End [%d] Virtual Mem=%p, DMA addr=%08llx\n", i, Rx_gpd_end[i], (unsigned long long) io_ptr); TGPD_CLR_FLAGS_HWO(Rx_gpd_end[i]); Rx_gpd_head[i] = Rx_gpd_last[i] = Rx_gpd_end[i]; qmu_printk(K_INFO, "RQSAR[%d]=%08llx\n", i, (unsigned long long) mu3d_hal_gpd_virt_to_phys(Rx_gpd_end[i], USB_RX, i)); /* Allocate Tx GPD */ size = (sizeof(TGPD) + AT_GPD_EXT_LEN) * MAX_GPD_NUM; ptr = (TGPD*)dma_alloc_coherent(dev, size, &dma_handle, GFP_KERNEL); memset(ptr, 0 , size); Tx_gpd_ioptr[i] = io_ptr = dma_handle ; init_gpd_list( USB_TX, i, ptr, io_ptr, MAX_GPD_NUM); Tx_gpd_end[i]= ptr; qmu_printk(K_INFO, "ALLOC TX GPD End [%d] Virtual Mem=%p, DMA addr=%08llx\n", i, Tx_gpd_end[i], (unsigned long long) io_ptr); TGPD_CLR_FLAGS_HWO(Tx_gpd_end[i]); Tx_gpd_head[i] = Tx_gpd_last[i] = Tx_gpd_end[i]; qmu_printk(K_INFO, "TQSAR[%d]=%08llx\n", i, (unsigned long long) mu3d_hal_gpd_virt_to_phys(Tx_gpd_end[i], USB_TX, i)); } }
/** * mu3d_hal_alloc_qmu_mem - allocate gpd and bd memory for all ep * */ void mu3d_hal_alloc_qmu_mem(void) { DEV_UINT32 i, size; TGPD *ptr, *io_ptr; TBD *bptr, *io_bptr; for (i = 1; i <= MAX_QMU_EP; i++) { /* Allocate Tx GPD */ size = sizeof(TGPD); size *= MAX_GPD_NUM; ptr = (TGPD *) os_mem_alloc(size); os_memset(ptr, 0, size); io_ptr = (TGPD *) dma_map_single(NULL, ptr, size, DMA_TO_DEVICE); /* io_ptr = (TGPD*)os_ioremap(os_virt_to_phys(ptr),size); */ /* io_ptr = (TGPD*)(os_virt_to_phys(ptr)); */ /* init_gpd_list(USB_RX,i,ptr,io_ptr,MAX_GPD_NUM); */ init_gpd_list(USB_RX, i, ptr, io_ptr, MAX_GPD_NUM); Rx_gpd_end[i] = ptr; os_printk(K_DEBUG, "ALLOC RX GPD End [%d] Virtual Mem=%p, DMA addr=%p\n", i, Rx_gpd_end[i], io_ptr); /* os_memset(Rx_gpd_end[i], 0 , sizeof(TGPD)); */ TGPD_CLR_FLAGS_HWO(Rx_gpd_end[i]); Rx_gpd_head[i] = Rx_gpd_last[i] = Rx_gpd_end[i]; os_printk(K_DEBUG, "RQSAR[%d]=%p\n", i, (void *)mu3d_hal_gpd_virt_to_phys(Rx_gpd_end[i], USB_RX, i)); /* Allocate Rx GPD */ size = sizeof(TGPD); size += AT_GPD_EXT_LEN; size *= MAX_GPD_NUM; ptr = (TGPD *) os_mem_alloc(size); os_memset(ptr, 0, size); io_ptr = (TGPD *) dma_map_single(NULL, ptr, size, DMA_TO_DEVICE); /* io_ptr = (TGPD*)os_ioremap(os_virt_to_phys(ptr),size); */ init_gpd_list(USB_TX, i, ptr, io_ptr, MAX_GPD_NUM); Tx_gpd_end[i] = ptr; os_printk(K_DEBUG, "ALLOC TX GPD End [%d] Virtual Mem=%p, DMA addr=%p\n", i, Tx_gpd_end[i], io_ptr); /* os_memset(Tx_gpd_end[i], 0 , sizeof(TGPD)+AT_GPD_EXT_LEN); */ TGPD_CLR_FLAGS_HWO(Tx_gpd_end[i]); Tx_gpd_head[i] = Tx_gpd_last[i] = Tx_gpd_end[i]; os_printk(K_DEBUG, "TQSAR[%d]=%p\n", i, (void *)mu3d_hal_gpd_virt_to_phys(Tx_gpd_end[i], USB_TX, i)); /* Allocate Tx BD */ size = (sizeof(TBD)); size *= MAX_BD_NUM; bptr = (TBD *) os_mem_alloc(size); os_memset(bptr, 0, size); io_bptr = (TBD *) dma_map_single(NULL, bptr, size, DMA_TO_DEVICE); /* io_bptr = (TBD*)os_ioremap(os_virt_to_phys(bptr),size); */ init_bd_list(USB_RX, i, bptr, io_bptr, MAX_BD_NUM); /* Allocate Rx BD */ size = (sizeof(TBD)); size += AT_BD_EXT_LEN; size *= MAX_BD_NUM; bptr = (TBD *) os_mem_alloc(size); os_memset(bptr, 0, size); io_bptr = (TBD *) dma_map_single(NULL, bptr, size, DMA_TO_DEVICE); /* io_bptr = (TBD*)os_ioremap(os_virt_to_phys(bptr),size); */ init_bd_list(USB_TX, i, bptr, io_bptr, MAX_BD_NUM); } }