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 323... |
Line 323... |
|
|
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
|
|
int ioctl_free_mem(struct pex_device *brd, size_t arg)
|
int ioctl_free_mem(struct pex_device *brd, size_t arg)
|
{
|
{
|
u32 i = 0;
|
|
int error = 0;
|
int error = 0;
|
AMB_MEM_DMA_CHANNEL MemDscr = {0};
|
AMB_MEM_DMA_CHANNEL MemDscr = {0};
|
PAMB_MEM_DMA_CHANNEL pMemDscr = &MemDscr;
|
PAMB_MEM_DMA_CHANNEL pMemDscr = &MemDscr;
|
|
|
down(&brd->m_BoardSem);
|
down(&brd->m_BoardSem);
|
Line 342... |
Line 341... |
err_msg(err_trace, "%s(): Invalid DMA channel number\n", __FUNCTION__);
|
err_msg(err_trace, "%s(): Invalid DMA channel number\n", __FUNCTION__);
|
error = -EINVAL;
|
error = -EINVAL;
|
goto do_exit;
|
goto do_exit;
|
}
|
}
|
|
|
i = pMemDscr->DmaChanNum;
|
error = ReleaseMemory(brd->m_DmaChannel[pMemDscr->DmaChanNum]);
|
ReleaseMemory(brd->m_DmaChannel[i]);
|
|
|
|
if(copy_to_user (( void *)arg, (void *)&MemDscr, sizeof(AMB_MEM_DMA_CHANNEL) + (pMemDscr->BlockCnt - 1) * sizeof(void*) )) {
|
//if(copy_to_user (( void *)arg, (void *)&MemDscr, sizeof(AMB_MEM_DMA_CHANNEL) + (pMemDscr->BlockCnt - 1) * sizeof(void*) )) {
|
err_msg(err_trace, "%s(): Error copy descriptor to user space\n", __FUNCTION__);
|
// err_msg(err_trace, "%s(): Error copy descriptor to user space\n", __FUNCTION__);
|
error = -EFAULT;
|
// error = -EFAULT;
|
goto do_exit;
|
// goto do_exit;
|
}
|
//}
|
|
|
do_exit:
|
do_exit:
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
|
|
return error;
|
return error;
|
Line 365... |
Line 363... |
{
|
{
|
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");
|
printk("%s(): Entered.\n", __FUNCTION__);
|
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);
|
return -EFAULT;
|
return -EFAULT;
|
}
|
}
|
|
|
if(pStartDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS) {
|
if(pStartDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS) {
|
printk("<0>%s(): too large stream number\n", __FUNCTION__);
|
printk("%s(): too large stream number\n", __FUNCTION__);
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EINVAL;
|
return -EINVAL;
|
}
|
}
|
|
|
if(!(brd->m_DmaChanMask & (1 << pStartDscr->DmaChanNum))) {
|
if(!(brd->m_DmaChanMask & (1 << pStartDscr->DmaChanNum))) {
|
printk("<0>%s(): invalid stream number\n", __FUNCTION__);
|
printk("%s(): invalid stream number\n", __FUNCTION__);
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EINVAL;
|
return -EINVAL;
|
}
|
}
|
|
|
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 );
|
printk("%s(): exit Status=0x%.8X \n", __FUNCTION__, Status);
|
|
|
return Status;
|
return Status;
|
}
|
}
|
|
|
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
Line 413... |
Line 411... |
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);
|
return -EFAULT;
|
return -EFAULT;
|
}
|
}
|
|
|
//printk("<0>IoctlStopMem: Entered.\n");
|
//printk("%s()\n", __FUNCTION__);
|
|
|
if(pStopDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
if(pStopDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
{
|
{
|
printk("<0>IoctlStopMem: too large stream number\n");
|
printk("IoctlStopMem: too large stream number\n");
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EINVAL;
|
return -EINVAL;
|
}
|
}
|
|
|
i = pStopDscr->DmaChanNum;
|
i = pStopDscr->DmaChanNum;
|
Line 467... |
Line 465... |
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);
|
return -EFAULT;
|
return -EFAULT;
|
}
|
}
|
|
|
//printk("<0>IoctlStateMem: Entered.\n");
|
//printk("%s()\n", __FUNCTION__);
|
|
|
if(pStateDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
if(pStateDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
{
|
{
|
printk("<0>IoctlStateMem: too large stream number\n");
|
printk("IoctlStateMem: too large stream number\n");
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EINVAL;
|
return -EINVAL;
|
}
|
}
|
|
|
i = pStateDscr->DmaChanNum;
|
i = pStateDscr->DmaChanNum;
|
Line 508... |
Line 506... |
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("%s()\n", __FUNCTION__);
|
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 520... |
Line 518... |
return -EFAULT;
|
return -EFAULT;
|
}
|
}
|
|
|
if(pMemDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
if(pMemDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
{
|
{
|
printk("<0>IoctlSetDirMem: too large stream number\n");
|
printk("%s(): too large stream number\n", __FUNCTION__);
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EINVAL;
|
return -EINVAL;
|
}
|
}
|
|
|
i = pMemDscr->DmaChanNum;
|
i = pMemDscr->DmaChanNum;
|
Line 545... |
Line 543... |
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");
|
printk("%s()\n", __FUNCTION__);
|
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 557... |
Line 555... |
return -EFAULT;
|
return -EFAULT;
|
}
|
}
|
|
|
if(pMemDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
if(pMemDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
{
|
{
|
printk("<0>IoctlSetSrcMem: too large stream number\n");
|
printk("%s(): too large stream number\n", __FUNCTION__);
|
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;
|
}
|
}
|
Line 593... |
Line 586... |
AMB_SET_DMA_CHANNEL MemDscr;
|
AMB_SET_DMA_CHANNEL MemDscr;
|
PAMB_SET_DMA_CHANNEL pMemDscr = &MemDscr;
|
PAMB_SET_DMA_CHANNEL pMemDscr = &MemDscr;
|
|
|
down(&brd->m_BoardSem);
|
down(&brd->m_BoardSem);
|
|
|
//printk("<0>IoctlSetSrcMem: Entered.\n");
|
//printk("%s()\n", __FUNCTION__);
|
|
|
// 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__ );
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EFAULT;
|
return -EFAULT;
|
}
|
}
|
|
|
if(pMemDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
if(pMemDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
{
|
{
|
printk("<0>IoctlSetDrqMem: too large stream number\n");
|
printk("IoctlSetDrqMem: too large stream number\n");
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EINVAL;
|
return -EINVAL;
|
}
|
}
|
|
|
i = pMemDscr->DmaChanNum;
|
i = pMemDscr->DmaChanNum;
|
Line 629... |
Line 622... |
AMB_SET_DMA_CHANNEL MemDscr;
|
AMB_SET_DMA_CHANNEL MemDscr;
|
PAMB_SET_DMA_CHANNEL pMemDscr = &MemDscr;
|
PAMB_SET_DMA_CHANNEL pMemDscr = &MemDscr;
|
|
|
down(&brd->m_BoardSem);
|
down(&brd->m_BoardSem);
|
|
|
//printk("<0>%s()\n", __FUNCTION__);
|
//printk("%s()\n", __FUNCTION__);
|
|
|
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__ );
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EFAULT;
|
return -EFAULT;
|
}
|
}
|
|
|
if(pMemDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
if(pMemDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
{
|
{
|
printk("<0>IoctlSetDrqMem: too large stream number\n");
|
printk("IoctlSetDrqMem: too large stream number\n");
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EINVAL;
|
return -EINVAL;
|
}
|
}
|
if(!(brd->m_DmaChanMask & (1 << pMemDscr->DmaChanNum)))
|
if(!(brd->m_DmaChanMask & (1 << pMemDscr->DmaChanNum)))
|
{
|
{
|
printk("<0>%s(): invalid stream number\n", __FUNCTION__);
|
printk("%s(): invalid stream number\n", __FUNCTION__);
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EINVAL;
|
return -EINVAL;
|
}
|
}
|
|
|
i = pMemDscr->DmaChanNum;
|
i = pMemDscr->DmaChanNum;
|
Line 670... |
Line 663... |
AMB_SET_DMA_CHANNEL MemDscr;
|
AMB_SET_DMA_CHANNEL MemDscr;
|
PAMB_SET_DMA_CHANNEL pMemDscr = &MemDscr;
|
PAMB_SET_DMA_CHANNEL pMemDscr = &MemDscr;
|
|
|
down(&brd->m_BoardSem);
|
down(&brd->m_BoardSem);
|
|
|
//printk("<0>%s()\n", __FUNCTION__);
|
//printk("%s()\n", __FUNCTION__);
|
|
|
// 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__ );
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EFAULT;
|
return -EFAULT;
|
}
|
}
|
|
|
if(pMemDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
if(pMemDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
{
|
{
|
printk("<0>IoctlSetDrqMem: too large stream number\n");
|
printk("IoctlSetDrqMem: too large stream number\n");
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EINVAL;
|
return -EINVAL;
|
}
|
}
|
if(!(brd->m_DmaChanMask & (1 << pMemDscr->DmaChanNum)))
|
if(!(brd->m_DmaChanMask & (1 << pMemDscr->DmaChanNum)))
|
{
|
{
|
printk("<0>%s(): invalid stream number\n", __FUNCTION__);
|
printk("%s(): invalid stream number\n", __FUNCTION__);
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EINVAL;
|
return -EINVAL;
|
}
|
}
|
|
|
i = pMemDscr->DmaChanNum;
|
i = pMemDscr->DmaChanNum;
|
Line 721... |
Line 714... |
return -EFAULT;
|
return -EFAULT;
|
}
|
}
|
|
|
if(pMemDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
if(pMemDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
{
|
{
|
printk("<0>%s(): too large stream number\n", __FUNCTION__);
|
printk("%s(): too large stream number\n", __FUNCTION__);
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EINVAL;
|
return -EINVAL;
|
}
|
}
|
if(!(brd->m_DmaChanMask & (1 << pMemDscr->DmaChanNum)))
|
if(!(brd->m_DmaChanMask & (1 << pMemDscr->DmaChanNum)))
|
{
|
{
|
printk("<0>%s(): invalid stream number\n", __FUNCTION__);
|
printk("%s(): invalid stream number\n", __FUNCTION__);
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EINVAL;
|
return -EINVAL;
|
}
|
}
|
|
|
Status = ResetFifo(brd, pMemDscr->DmaChanNum);
|
Status = ResetFifo(brd, pMemDscr->DmaChanNum);
|
Line 756... |
Line 749... |
return -EFAULT;
|
return -EFAULT;
|
}
|
}
|
|
|
if(DmaInfo.DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
if(DmaInfo.DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
{
|
{
|
printk("<0>%s(): too large stream number\n", __FUNCTION__);
|
printk("%s(): too large stream number\n", __FUNCTION__);
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EINVAL;
|
return -EINVAL;
|
}
|
}
|
if(!(brd->m_DmaChanMask & (1 << DmaInfo.DmaChanNum)))
|
if(!(brd->m_DmaChanMask & (1 << DmaInfo.DmaChanNum)))
|
{
|
{
|
printk("<0>%s(): invalid stream number\n", __FUNCTION__);
|
printk("%s(): invalid stream number\n", __FUNCTION__);
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EINVAL;
|
return -EINVAL;
|
}
|
}
|
|
|
DmaInfo.Direction = brd->m_DmaDir[DmaInfo.DmaChanNum];
|
DmaInfo.Direction = brd->m_DmaDir[DmaInfo.DmaChanNum];
|
Line 800... |
Line 793... |
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);
|
return -EFAULT;
|
return -EFAULT;
|
}
|
}
|
|
|
//printk("<0>%s(): DMA %d\n", __FUNCTION__, pStateDscr->DmaChanNum);
|
//printk("%s(): DMA %d\n", __FUNCTION__, pStateDscr->DmaChanNum);
|
|
|
if(pStateDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
if(pStateDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
{
|
{
|
printk("<0>%s(): too large stream number\n", __FUNCTION__);
|
printk("%s(): too large stream number\n", __FUNCTION__);
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EINVAL;
|
return -EINVAL;
|
}
|
}
|
|
|
i = pStateDscr->DmaChanNum;
|
i = pStateDscr->DmaChanNum;
|
Line 847... |
Line 840... |
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);
|
return -EFAULT;
|
return -EFAULT;
|
}
|
}
|
|
|
printk("<0>%s(): DMA %d\n", __FUNCTION__, pStateDscr->DmaChanNum);
|
printk("%s(): DMA %d\n", __FUNCTION__, pStateDscr->DmaChanNum);
|
|
|
if(pStateDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
if(pStateDscr->DmaChanNum >= MAX_NUMBER_OF_DMACHANNELS)
|
{
|
{
|
printk("<0>%s(): too large stream number\n", __FUNCTION__);
|
printk("%s(): too large stream number\n", __FUNCTION__);
|
up(&brd->m_BoardSem);
|
up(&brd->m_BoardSem);
|
return -EINVAL;
|
return -EINVAL;
|
}
|
}
|
|
|
i = pStateDscr->DmaChanNum;
|
i = pStateDscr->DmaChanNum;
|