示例#1
0
文件: vx_osl.c 项目: ariavie/bcm
void*
osl_dma_alloc_consistent(void *dev, uint size, void **pap)
{
	void *va;

	va = cacheDmaMalloc(size);
	*pap = (void *)CACHE_DMA_VIRT_TO_PHYS(va);
	return (va);
}
示例#2
0
文件: vx_osl.c 项目: ariavie/bcm
void*
osl_dma_alloc_consistent(osl_t *osh, unsigned int size, ulong *pap)
{
	void *va;

	va = cacheDmaMalloc(size);
	*pap = (ulong)CACHE_DMA_VIRT_TO_PHYS(va);
	return (va);
}
示例#3
0
文件: vx_osl.c 项目: ariavie/bcm
void*
osl_dma_map(void *dev, void *va, uint size, uint direction)
{
	if (direction == DMA_TX)
		cacheFlush(DATA_CACHE, va, size);
	else
		cacheInvalidate(DATA_CACHE, va, size);

	return ((void*)CACHE_DMA_VIRT_TO_PHYS(va));
}
示例#4
0
文件: vx_osl.c 项目: ariavie/bcm
void*
osl_dma_map(osl_t *osh, void *va, unsigned int size, unsigned int direction)
{
    if (((uint)va & 0x20000000) == 0)
    {
	if (direction == DMA_TX)
		cacheFlush(DATA_CACHE, va, size);
	else
		cacheInvalidate(DATA_CACHE, va, size);
    }

	return ((void*)CACHE_DMA_VIRT_TO_PHYS(va));
}
示例#5
0
int fgread(int id, void *buffer, int size) {

     if ( Simulate ) {
          return sfgread(id, buffer, size);
     }

     context->fgStatus = READ;

     intFgPhBuff = CACHE_DMA_VIRT_TO_PHYS(buffer);
     /* Write command structure */
     fg_buf.bufphysadr = (const UINT32)intFgPhBuff;
     fg_buf.bufsize = size;
     fg_buf.bufid = 1234;

     DBGMSG("fgread> bufphysadr=%#lx bufsize=%ld bufid=%#lx\n", fg_buf.bufphysadr, fg_buf.bufsize, fg_buf.bufid);

     if (WRITE_FIFO(context->fifo[USER_DATA_EMPTY], (void *) &fg_buf, sizeof(fg_buf)) != BUFFER_OK) {
           ERRMSG("fgread> ERROR - write to FIFO USER_DATA_EMPTY\n");
           return ERR_WRITEFIFO;
     }

     if ((bytes = READ_FIFO(context->fifo[USER_DATA_FULL], (void *) &fg_buf, sizeof(fg_buf))) != sizeof(fg_buf)) {
        if (bytes > 0) {
            ERRMSG("fgread> ERROR - read from FIFO USER_DATA_FULL %d bytes\n", bytes);
            return ERR_READFIFO;
        } else if (bytes < 0) {
            ERRMSG("fgread> ERROR - read from FIFO USER_DATA_FULL, errno %d\n", bytes);
            return ERR_READFIFO;
        } else {
            /* When zero bytes are read this probably means the task or FIFO has been deleted */
            ERRMSG("fgread> read from FIFO USER_DATA_FULL %d bytes, read FIFO aborted!\n", bytes);
            return ERR_READFIFO;
        }
    } else {
        DBGMSG("fgread> bufphysadr=%#lx bufsize=%ld bufid=%#lx\n", fg_buf.bufphysadr, fg_buf.bufsize, fg_buf.bufid);
    }

    if ( fg_buf.bufphysadr == 0 && fg_buf.bufsize == 0 && fg_buf.bufid == 0 ) {
         ERRMSG("fgread> ERROR - got null buffer\n");
         return ERR_READFIFO;
    }

    DBGMSG("fgread> bufphysadr=%#lx bufsize=%ld bufid=%#lx\n", fg_buf.bufphysadr, fg_buf.bufsize, fg_buf.bufid);


    context->fgStatus = SDSU_FREE;

    return size;
}
示例#6
0
int WriteSDSUCommand(void) {

     if ( intVirBuff == NULL )
          if ( (intVirBuff = (void *)memalign(SDSU_BURST_BLOCK, intBuffSize)) == NULL ) {
               ERRMSG("WriteSDSUCommand> ERROR allocating buffer memory.\n");
               return ERR_MBUFF;
          } else {
               intPhyBuff = CACHE_DMA_VIRT_TO_PHYS(intVirBuff);

               /* Write command structure */
               intBuf.bufphysadr = (volatile const UINT32)intPhyBuff;
               intBuf.bufsize = intBuffSize;
               intBuf.bufid = 4321;
          }

     DBGMSG("WriteSDSUCommand> bufphysadr=%#lx bufsize=%ld bufid=%#lx\n", intBuf.bufphysadr, intBuf.bufsize, intBuf.bufid);

     if (WRITE_FIFO(context->fifo[USER_DATA_EMPTY], (void *) &intBuf, sizeof(intBuf)) != BUFFER_OK) {
         ERRMSG("WriteSDSUCommand> ERROR - write to FIFO USER_DATA_EMPTY\n");
         return ERR_WRITEFIFO;
     }

     return NO_ERROR;
}