Line 289... |
Line 289... |
|
|
AdmNumber = pKernMemDscr->LocalAddr >> 16;
|
AdmNumber = pKernMemDscr->LocalAddr >> 16;
|
TetrNumber = pKernMemDscr->LocalAddr & 0xff;
|
TetrNumber = pKernMemDscr->LocalAddr & 0xff;
|
Address = AdmNumber*ADM_SIZE + TetrNumber*TETRAD_SIZE + TRDadr_DATA*REG_SIZE;
|
Address = AdmNumber*ADM_SIZE + TetrNumber*TETRAD_SIZE + TRDadr_DATA*REG_SIZE;
|
|
|
SetDmaLocalAddress(dma, Address);
|
//SetDmaLocalAddress(dma, Address);
|
SetAdmTetr(dma, AdmNumber, TetrNumber);
|
//SetAdmTetr(dma, AdmNumber, TetrNumber);
|
error = SetDmaMode(brd, i, AdmNumber, TetrNumber);
|
//error = SetDmaMode(brd, i, AdmNumber, TetrNumber);
|
|
|
dbg_msg(dbg_trace, "%s(): 4\n", __FUNCTION__);
|
dbg_msg(dbg_trace, "%s(): 4\n", __FUNCTION__);
|
|
|
error = RequestMemory( dma, pKernMemDscr->pBlock, pKernMemDscr->BlockSize,
|
error = RequestMemory( dma, pKernMemDscr->pBlock, pKernMemDscr->BlockSize,
|
(u32*)&pKernMemDscr->BlockCnt, &pKernMemDscr->pStub, pKernMemDscr->MemType );
|
(u32*)&pKernMemDscr->BlockCnt, &pKernMemDscr->pStub, pKernMemDscr->MemType );
|
Line 365... |
Line 365... |
{
|
{
|
int Status = -EINVAL;
|
int Status = -EINVAL;
|
AMB_START_DMA_CHANNEL StartDscr;
|
AMB_START_DMA_CHANNEL StartDscr;
|
PAMB_START_DMA_CHANNEL pStartDscr = &StartDscr;
|
PAMB_START_DMA_CHANNEL pStartDscr = &StartDscr;
|
|
|
|
printk("<0>ioctl_start_mem: Entered.\n");
|
down(&brd->m_BoardSem);
|
down(&brd->m_BoardSem);
|
|
|
if( copy_from_user((void *)&StartDscr, (void *)arg, sizeof(AMB_START_DMA_CHANNEL))) {
|
if( copy_from_user((void *)&StartDscr, (void *)arg, sizeof(AMB_START_DMA_CHANNEL))) {
|
err_msg(err_trace, "%s(): Error copy data from userspace\n", __FUNCTION__ );
|
err_msg(err_trace, "%s(): Error copy data from userspace\n", __FUNCTION__ );
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
Line 389... |
Line 390... |
|
|
Status = StartDmaTransfer(brd->m_DmaChannel[pStartDscr->DmaChanNum], pStartDscr->IsCycling);
|
Status = StartDmaTransfer(brd->m_DmaChannel[pStartDscr->DmaChanNum], pStartDscr->IsCycling);
|
Status = HwStartDmaTransfer(brd, pStartDscr->DmaChanNum);
|
Status = HwStartDmaTransfer(brd, pStartDscr->DmaChanNum);
|
|
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
|
printk("<0>ioctl_start_mem: exit Status=0x%.8X \n", Status );
|
|
|
return Status;
|
return Status;
|
}
|
}
|
|
|
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
Line 506... |
Line 508... |
int Status = -EINVAL;
|
int Status = -EINVAL;
|
u32 i;
|
u32 i;
|
AMB_SET_DMA_CHANNEL MemDscr;
|
AMB_SET_DMA_CHANNEL MemDscr;
|
PAMB_SET_DMA_CHANNEL pMemDscr = &MemDscr;
|
PAMB_SET_DMA_CHANNEL pMemDscr = &MemDscr;
|
|
|
//printk("<0>IoctlSetDirMem: Entered.\n");
|
printk("<0>IoctlSetDirMem: Entered.\n");
|
down(&brd->m_BoardSem);
|
down(&brd->m_BoardSem);
|
|
|
// get the user buffer
|
// get the user buffer
|
if( copy_from_user((void *)&MemDscr, (void *)arg, sizeof(AMB_SET_DMA_CHANNEL))) {
|
if( copy_from_user((void *)&MemDscr, (void *)arg, sizeof(AMB_SET_DMA_CHANNEL))) {
|
err_msg(err_trace, "%s(): Error copy data from userspace\n", __FUNCTION__ );
|
err_msg(err_trace, "%s(): Error copy data from userspace\n", __FUNCTION__ );
|
Line 543... |
Line 545... |
u32 TetrNumber = 0;
|
u32 TetrNumber = 0;
|
u32 Address = 0;
|
u32 Address = 0;
|
AMB_SET_DMA_CHANNEL MemDscr;
|
AMB_SET_DMA_CHANNEL MemDscr;
|
PAMB_SET_DMA_CHANNEL pMemDscr = &MemDscr;
|
PAMB_SET_DMA_CHANNEL pMemDscr = &MemDscr;
|
|
|
|
printk("<0>IoctlSetSrcMem: Entered.\n");
|
down(&brd->m_BoardSem);
|
down(&brd->m_BoardSem);
|
|
|
// get the user buffer
|
// get the user buffer
|
if( copy_from_user((void *)&MemDscr, (void *)arg, sizeof(AMB_SET_DMA_CHANNEL))) {
|
if( copy_from_user((void *)&MemDscr, (void *)arg, sizeof(AMB_SET_DMA_CHANNEL))) {
|
err_msg(err_trace, "%s(): Error copy data from userspace\n", __FUNCTION__ );
|
err_msg(err_trace, "%s(): Error copy data from userspace\n", __FUNCTION__ );
|
Line 560... |
Line 563... |
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EINVAL;
|
return -EINVAL;
|
}
|
}
|
|
|
i = pMemDscr->DmaChanNum;
|
i = pMemDscr->DmaChanNum;
|
AdmNumber = pMemDscr->Param >> 16;
|
//AdmNumber = pMemDscr->Param >> 16;
|
TetrNumber = pMemDscr->Param & 0xff;
|
//TetrNumber = pMemDscr->Param & 0xff;
|
Address = AdmNumber * ADM_SIZE + TetrNumber * TETRAD_SIZE + TRDadr_DATA * REG_SIZE;
|
//Address = AdmNumber * ADM_SIZE + TetrNumber * TETRAD_SIZE + TRDadr_DATA * REG_SIZE;
|
|
|
|
AdmNumber=0;
|
|
TetrNumber=0;
|
|
Address = pMemDscr->Param;
|
SetDmaLocalAddress(brd->m_DmaChannel[i], Address);
|
SetDmaLocalAddress(brd->m_DmaChannel[i], Address);
|
SetAdmTetr(brd->m_DmaChannel[i], AdmNumber, TetrNumber);
|
SetAdmTetr(brd->m_DmaChannel[i], AdmNumber, TetrNumber);
|
Status = SetDmaMode(brd, i, AdmNumber, TetrNumber);
|
//Status = SetDmaMode(brd, i, AdmNumber, TetrNumber);
|
|
Status=0;
|
|
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
|
|
return Status;
|
return Status;
|
}
|
}
|