📄 hfctldevaccesstest.c
字号:
iWaitCount++;
}
if ((!ucTemp) && (iWaitCount == 30))
{
printf("hfCtlDevDmaReadTest: DMA WAIT TIME OUT.\n");
#if 0
/* DMA Abort process */
iStatus = HFCtlPmcGetRegDmaChannel0CmdStatus(iHfCtlFd, pTempCharData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaReadTest: HFCtlPmcGetRegDmaChannel0CmdStatus() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
ucRegCharData = (*pTempCharData) & ((unsigned char)(~DATA_BIT0)); /* disable DMA channel 0 */
iStatus = HFCtlPmcSetRegDmaChannel0CmdStatus(iHfCtlFd, ucRegCharData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaReadTest: HFCtlPmcSetRegDmaChannel0CmdStatus() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
ucRegCharData = ucRegCharData | DATA_BIT2;
iStatus = HFCtlPmcSetRegDmaChannel0CmdStatus(iHfCtlFd, ucRegCharData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaReadTest: HFCtlPmcSetRegDmaChannel0CmdStatus() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
ucRegCharData = ucRegCharData | DATA_BIT1;
iStatus = HFCtlPmcSetRegDmaChannel0CmdStatus(iHfCtlFd, ucRegCharData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaReadTest: HFCtlPmcSetRegDmaChannel0CmdStatus() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
#endif /* if 0 */
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
cacheInvalidate(DATA_CACHE, pDmaDataAdrs, iDmaByteSize);
for(i = 0; i < (iDmaByteSize / 4); i++)
{
printf("hfCtlDevDmaReadTest: pDmaDataAdrs[%d] = 0x%.8x\n", i, pDmaDataAdrs[i]);
}
/* free the memory */
free(pDmaDataAdrs);
/* close the device */
close(iHfCtlFd);
return(OK);
}
STATUS hfCtlDevDmaWriteTest(int iOffset, int iDmaByteSize, int iList)
{
int i;
int iDmaTempSize;
int iWaitCount;
int iHfCtlFd;
int iStatus;
char hfCtldevName[15];
unsigned long ulDmaDataPciAdrs;
unsigned long ulRegData;
unsigned char ucRegCharData;
unsigned char ucTemp;
unsigned char ucTemp1;
unsigned long *pTempData;
unsigned char *pTempCharData;
unsigned long *pLocalSpace0Adrs;
unsigned long *pLocalSpace1Adrs;
unsigned long *pDmaDataAdrs;
iDmaTempSize = iDmaByteSize;
pDmaDataAdrs = malloc(iDmaByteSize);
if (pDmaDataAdrs == NULL)
{
printf("hfCtlDevDmaWriteTest: memory allocation failed!\n");
return(ERROR);
}
ulDmaDataPciAdrs = (unsigned long)LOCAL2PCI_MEM((unsigned long)pDmaDataAdrs);
printf("hfCtlDevDmaWriteTest: pDmaDataAdrs = 0x%.8x\n", pDmaDataAdrs);
printf("hfCtlDevDmaWriteTest: ulDmaDataPciAdrs = 0x%.8x\n", ulDmaDataPciAdrs);
for(i = 0; i < (iDmaByteSize / 4); i++)
{
pDmaDataAdrs[i] = 0x12121212 + i * 5;
}
cacheFlush(DATA_CACHE, pDmaDataAdrs, iDmaByteSize);
if (iDevTestDebug)
{
for(i = 0; i < (iDmaByteSize / 4); i++)
{
printf("hfCtlDevDmaWriteTest: pDmaDataAdrs[%d] = 0x%.8x\n", i, pDmaDataAdrs[i]);
}
}
sprintf(hfCtldevName, "/HFCtlPmc/0");
/* open the device */
iHfCtlFd = open(hfCtldevName, O_RDWR, 0644);
if (iHfCtlFd == ERROR)
{
printf("hfCtlDevDmaWriteTest: Unable to open HfCtlDev device!\n");
free(pDmaDataAdrs);
return(ERROR);
}
/* get Local configuration register LAS0BA */
iStatus = HFCtlPmcGetRegLocalAdrsSpace0BaseAdrs(iHfCtlFd, pTempData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegLocalAdrsSpace0BaseAdrs() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
if (iDevTestDebug)
{
printf("hfCtlDevDmaWriteTest: LAS0BA = 0x%.8x\n", *pTempData);
}
/* set Local configuration register LAS0BA bit 0 */
ulRegData = (*pTempData) | 0x1;
iStatus = HFCtlPmcSetRegLocalAdrsSpace0BaseAdrs(iHfCtlFd, ulRegData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcSetRegLocalAdrsSpace0BaseAdrs() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
/* get Local configuration register LAS0BA */
iStatus = HFCtlPmcGetRegLocalAdrsSpace0BaseAdrs(iHfCtlFd, pTempData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegLocalAdrsSpace0BaseAdrs() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
if (iDevTestDebug)
{
printf("hfCtlDevDmaWriteTest: after set LAS0BA, LAS0BA = 0x%.8x\n", *pTempData);
}
/* get Local configuration register MARBR */
iStatus = HFCtlPmcGetRegModeArbitration(iHfCtlFd, pTempData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegModeArbitration() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
if (iDevTestDebug)
{
printf("hfCtlDevDmaWriteTest: MARBR = 0x%.8x\n", *pTempData);
}
/* set Local configuration register MARBR */
ulRegData = 0x00210010;
iStatus = HFCtlPmcSetRegModeArbitration(iHfCtlFd, ulRegData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcSetRegModeArbitration() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
/* get Local configuration register MARBR */
iStatus = HFCtlPmcGetRegModeArbitration(iHfCtlFd, pTempData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegModeArbitration() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
if (iDevTestDebug)
{
printf("hfCtlDevDmaWriteTest: after set MARBR, MARBR = 0x%.8x\n", *pTempData);
}
/* get Local configuration register BIGEND */
iStatus = HFCtlPmcGetRegBigEndianDesc(iHfCtlFd, pTempCharData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegBigEndianDesc() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
if (iDevTestDebug)
{
printf("hfCtlDevDmaWriteTest: BIGEND = 0x%.8x\n", *pTempCharData);
}
/* set Local configuration register BIGEND */
ucRegCharData = 0xee; /*0x00;*/
if (iDevTestDebug)
{
printf("hfCtlDevDmaReadTest: ucRegCharData = 0x%.2x\n", ucRegCharData);
}
iStatus = HFCtlPmcSetRegBigEndianDesc(iHfCtlFd, ucRegCharData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaReadTest: HFCtlPmcSetRegBigEndianDesc() failed.\n");
close(iHfCtlFd);
return(ERROR);
}
/* get Local configuration register BIGEND */
iStatus = HFCtlPmcGetRegBigEndianDesc(iHfCtlFd, pTempCharData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaReadTest: HFCtlPmcGetRegBigEndianDesc() failed.\n");
close(iHfCtlFd);
return(ERROR);
}
if (iDevTestDebug)
{
printf("hfCtlDevDmaReadTest: after set BIGEND, BIGEND = 0x%.8x\n", *pTempCharData);
}
/* get Local configuration register LMISC1 */
iStatus = HFCtlPmcGetRegLocalMisc1(iHfCtlFd, pTempCharData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegLocalMisc1() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
if (iDevTestDebug)
{
printf("hfCtlDevDmaWriteTest: LMISC1 = 0x%.8x\n", *pTempCharData);
}
/* set Local configuration register LMISC1 */
ucRegCharData = 0x05;
iStatus = HFCtlPmcSetRegLocalMisc1(iHfCtlFd, ucRegCharData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcSetRegLocalMisc1() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
/* get Local configuration register LMISC1 */
iStatus = HFCtlPmcGetRegLocalMisc1(iHfCtlFd, pTempCharData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegLocalMisc1() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
if (iDevTestDebug)
{
printf("hfCtlDevDmaWriteTest: after set LMISC1, LMISC1 = 0x%.8x\n", *pTempCharData);
}
/* get Local configuration register LMISC2 */
iStatus = HFCtlPmcGetRegLocalMisc2(iHfCtlFd, pTempCharData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegLocalMisc2() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
if (iDevTestDebug)
{
printf("hfCtlDevDmaWriteTest: LMISC2 = 0x%.8x\n", *pTempCharData);
}
/* set Local configuration register LMISC2 */
ucRegCharData = 0x01;
iStatus = HFCtlPmcSetRegLocalMisc2(iHfCtlFd, ucRegCharData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcSetRegLocalMisc2() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
/* get Local configuration register LMISC2 */
iStatus = HFCtlPmcGetRegLocalMisc2(iHfCtlFd, pTempCharData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegLocalMisc2() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
if (iDevTestDebug)
{
printf("hfCtlDevDmaWriteTest: after set LMISC2, LMISC2 = 0x%.8x\n", *pTempCharData);
}
/* get Local configuration register LBRD0 */
iStatus = HFCtlPmcGetRegLocalBusSpace0RegionDesc(iHfCtlFd, pTempData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegLocalBusSpace0RegionDesc() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
if (iDevTestDebug)
{
printf("hfCtlDevDmaWriteTest: LBRD0 = 0x%.8x\n", *pTempData);
}
/* set Local configuration register LBRD0 */
ulRegData = 0x80430303;
#if 0
ulRegData = 0x80430343; /* enable READY */
#endif /* if 0 */
iStatus = HFCtlPmcSetRegLocalBusSpace0RegionDesc(iHfCtlFd, ulRegData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcSetRegLocalBusSpace0RegionDesc() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
/* get Local configuration register LBRD0 */
iStatus = HFCtlPmcGetRegLocalBusSpace0RegionDesc(iHfCtlFd, pTempData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegLocalBusSpace0RegionDesc() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
if (iDevTestDebug)
{
printf("hfCtlDevDmaWriteTest: after set LBRD0, LBRD0 = 0x%.8x\n", *pTempData);
}
/* get DMA register DMAMODE0 */
iStatus = HFCtlPmcGetRegDmaChannel0Mode(iHfCtlFd, pTempData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegDmaChannel0Mode() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
if (iDevTestDebug)
{
printf("hfCtlDevDmaWriteTest: DMAMODE0 = 0x%.8x\n", *pTempData);
}
/* set DMA register DMAMODE0 */
/*
ulRegData = 0x00030843;
*/
ulRegData = 0x00030043; /* the local addr is incremented */
iStatus = HFCtlPmcSetRegDmaChannel0Mode(iHfCtlFd, ulRegData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcSetRegDmaChannel0Mode() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
/* get DMA register DMAMODE0 */
iStatus = HFCtlPmcGetRegDmaChannel0Mode(iHfCtlFd, pTempData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegDmaChannel0Mode() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
if (iDevTestDebug)
{
printf("hfCtlDevDmaWriteTest: after set DMAMODE0, DMAMODE0 = 0x%.8x\n", *pTempData);
}
/* get DMA register DMAPADR0 */
iStatus = HFCtlPmcGetRegDmaChannel0PciAdrs(iHfCtlFd, pTempData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegDmaChannel0PciAdrs() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
if (iDevTestDebug)
{
printf("hfCtlDevDmaWriteTest: DMAPADR0 = 0x%.8x\n", *pTempData);
}
/* set DMA register DMAPADR0 */
ulRegData = ulDmaDataPciAdrs;
iStatus = HFCtlPmcSetRegDmaChannel0PciAdrs(iHfCtlFd, ulRegData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcSetRegDmaChannel0PciAdrs() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
/* get DMA register DMAPADR0 */
iStatus = HFCtlPmcGetRegDmaChannel0PciAdrs(iHfCtlFd, pTempData);
if (iStatus == ERROR)
{
printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegDmaChannel0PciAdrs() failed.\n");
free(pDmaDataAdrs);
close(iHfCtlFd);
return(ERROR);
}
if (iDevTestDebug)
{
printf("hfCtlDevDmaWriteTest: after set DMAPADR0, DMAPADR0 = 0x%.8x\n", *pTempData);
}
/* get DMA register DMALADR0 */
iSta
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -