示例#1
0
/**
 * 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));
    }
}
示例#3
0
/**
 * 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);
	}
}