?? pc1394regaccesstest1.c
字號:
/* CFG_ROM_MAP */
ulTempData = pciReadLong((int)(pPc1394Dev.pciControllerSpace0 + CFG_ROM_MAP_ADR));
pCfgRomAdrs = (unsigned long*)ulTempData;
printf("pc1394DevCfgROMAccessTest: configROM addr = 0x%.8x\n\n", ulTempData);
for(i = 0; i < 16; i++)
{
pCfgRomData[i] = pciReadLong((int)(ulTempData + i * 4));
}
for(i = 0; i < 16; i++)
{
printf("0x%.8x : 0x%.8x\n\n", ulTempData + i * 4, pCfgRomData[i]);
}
return(OK);
}
/******************************************************************************
TITLE: pc1394DevGetCfgROMHeader
DESC: routine to get config ROM header register of PC 1394 card
PARAM: none
RETURN: ulTempData - value return from Link
******************************************************************************/
unsigned long pc1394DevGetCfgROMHeader(void)
{
unsigned long ulTempData;
ulTempData = pciReadLong((int)(pPc1394Dev.pciControllerSpace0 + CFG_ROM_HEADER_ADR));
return(ulTempData);
}
/******************************************************************************
TITLE: pc1394DevGetBusIdentification
DESC: routine to get Bus Identification register of PC 1394 card
PARAM: none
RETURN: ulTempData - value return from Link
******************************************************************************/
unsigned long pc1394DevGetBusIdentification(void)
{
unsigned long ulTempData;
ulTempData = pciReadLong((int)(pPc1394Dev.pciControllerSpace0 + BUS_ID_ADR));
return(ulTempData);
}
/******************************************************************************
TITLE: pc1394DevGetBusOptions
DESC: routine to get Bus Options register of PC 1394 card
PARAM: none
RETURN: ulTempData - value return from Link
******************************************************************************/
unsigned long pc1394DevGetBusOptions(void)
{
unsigned long ulTempData;
ulTempData = pciReadLong((int)(pPc1394Dev.pciControllerSpace0 + BUS_OPTION_ADR));
return(ulTempData);
}
/******************************************************************************
TITLE: pc1394DevSetBusOptions
DESC: routine to get Bus Options register of PC 1394 card
PARAM: ulRegData - data to write to register
RETURN: OK - operation runs successfully
ERROR - operation runs failed
******************************************************************************/
unsigned long pc1394DevSetBusOptions(unsigned long ulRegData)
{
pciWriteLong((int)(pPc1394Dev.pciControllerSpace0 + BUS_OPTION_ADR), ulRegData);
return(ERROR);
}
/******************************************************************************
TITLE: pc1394DevGetBusMaxRec
DESC: routine to get BusOptions.max_rec of PC 1394 card
PARAM: none
RETURN: ulTempData - value return from Link
******************************************************************************/
unsigned long pc1394DevGetBusMaxRec(void)
{
unsigned long ulTempData;
ulTempData = pc1394DevGetBusOptions();
ulTempData = (ulTempData & 0x0000f000) >> 12;
return(ulTempData);
}
/******************************************************************************
TITLE: pc1394DevSetBusMaxRec
DESC: routine to set BusOptions.max_rec of PC 1394 card
PARAM: ulMaxRec - data to write to the specific field of BusOptions register
RETURN: OK - operation runs successfully
ERROR - operation runs failed
NOTE: ulMaxRec should be 2^X format.
******************************************************************************/
STATUS pc1394DevSetBusMaxRec(unsigned long ulMaxRec)
{
unsigned long ulTempData;
unsigned long ulTempMaxRec;
if ((ulMaxRec > 65536) | (ulMaxRec < 4))
{
printf("pc1394DevSetBusMaxRec: parameter ulMaxRec should be in [4..65536].\n");
return(ERROR);
}
switch (ulMaxRec)
{
case 4:
ulTempMaxRec = 0x1;
break;
case 8:
ulTempMaxRec = 0x2;
break;
case 16:
ulTempMaxRec = 0x3;
break;
case 32:
ulTempMaxRec = 0x4;
break;
case 64:
ulTempMaxRec = 0x5;
break;
case 128:
ulTempMaxRec = 0x6;
break;
case 256:
ulTempMaxRec = 0x7;
break;
case 512:
ulTempMaxRec = 0x8;
break;
case 1024:
ulTempMaxRec = 0x9;
break;
case 2048:
ulTempMaxRec = 0xa;
break;
case 4096:
ulTempMaxRec = 0xb;
break;
case 8192:
ulTempMaxRec = 0xc;
break;
case 16384:
ulTempMaxRec = 0xd;
break;
case 32768:
ulTempMaxRec = 0xe;
break;
default:
printf("pc1394DevSetBusMaxRec: parameter ulMaxRec should be in 2^X format.\n");
return(ERROR);
}
/*
printf("pc1394DevSetBusMaxRec: ulTempMaxRec = 0x%.4x\n", ulTempMaxRec);
*/ /* comment by chenxuhao at 2004-11-16 */
ulTempData = pc1394DevGetBusOptions();
ulTempData = (ulTempData & 0x00000007) | (ulTempMaxRec << 12);
/*
printf("pc1394DevSetBusMaxRec: ulTempData = 0x%.8x\n", ulTempData);
*/ /* comment by chenxuhao at 2004-11-16 */
pc1394DevSetBusOptions(ulTempData);
return(OK);
}
/******************************************************************************
TITLE: pc1394DevGetBusLinkSpeed
DESC: routine to get BusOptions.link_spd of PC 1394 card
PARAM: none
RETURN: ulTempData - value return from Link
******************************************************************************/
unsigned long pc1394DevGetBusLinkSpeed(void)
{
unsigned long ulTempData;
ulTempData = pc1394DevGetBusOptions();
ulTempData = ulTempData & 0x00000007;
return(ulTempData);
}
/******************************************************************************
TITLE: pc1394DevSetBusLinkSpeed
DESC: routine to set BusOptions.LinkSpeed of PC 1394 card
PARAM: ulLinkSpeed - data to write to the specific field of BusOptions register
RETURN: OK - operation runs successfully
ERROR - operation runs failed
******************************************************************************/
STATUS pc1394DevSetBusLinkSpeed(unsigned long ulLinkSpeed)
{
unsigned long ulTempData;
if (ulLinkSpeed > 2)
{
printf("pc1394DevSetBusMaxRec: parameter ulLinkSpeed should be less than 3.\n");
return(ERROR);
}
ulTempData = pc1394DevGetBusOptions();
ulTempData = (ulTempData & 0x0000f000) | ulLinkSpeed;
pc1394DevSetBusOptions(ulTempData);
return(OK);
}
/******************************************************************************
TITLE: pc1394DevGetPhyReg
DESC: routine to get specified PHY register
PARAM: ulRegAdrs - which PHY reg to read
RETURN: ulPhyRdData - value return from PHY
ERROR - operation runs failed
******************************************************************************/
int pc1394DevGetPhyReg(unsigned long ulRegAdrs)
{
int iReadCount;
unsigned long ulTempData;
unsigned long ulPhyRegAdrs;
unsigned long ulPhyRdAdrs;
unsigned long ulPhyRdData;
unsigned long *pCfgRomAdrs;
ulPhyRegAdrs = ulRegAdrs;
/*
printf("pc1394DevGetPhyReg: ulPhyRegAdrs = 0x%.8x\n", ulPhyRegAdrs);
*/
ulTempData = (ulPhyRegAdrs << 8) | DATA_BIT15;
/*
printf("pc1394DevGetPhyReg: ulTempData = 0x%.8x\n", ulTempData);
*/
pciWriteLong((int)(pPc1394Dev.pciControllerSpace0 + PHY_CTR_REG_ADR), ulTempData);
iReadCount = 0;
ulTempData = 0;
while ((!(ulTempData & DATA_BIT31)) && (iReadCount < 30))
{
taskDelay(1);
ulTempData = pciReadLong((int)(pPc1394Dev.pciControllerSpace0 + PHY_CTR_REG_ADR));
iReadCount++;
}
if ((!(ulTempData & DATA_BIT31)) && (iReadCount == 30))
{
printf("pc1394DevGetPhyReg: read count error.\n");
return(ERROR);
}
/*
printf("pc1394DevGetPhyReg: ulTempData = 0x%.8x\n", ulTempData);
*/
ulPhyRdAdrs = (ulTempData & 0x0f000000) >> 24;
if (ulPhyRegAdrs != ulPhyRdAdrs)
{
printf("pc1394DevGetPhyReg: read address error.\n");
return(ERROR);
}
ulPhyRdData = (ulTempData & 0x00ff0000) >> 16;
return(ulPhyRdData);
}
/******************************************************************************
TITLE: pc1394DevSetPhyReg
DESC: routine to set specified PHY register
PARAM: ulRegAdrs - which PHY reg to write
ulRegData - data to write to the specific PHY reg
RETURN: OK - operation runs successfully
ERROR - operation runs failed
******************************************************************************/
STATUS pc1394DevSetPhyReg(unsigned long ulRegAdrs, unsigned long ulRegData)
{
int iReadCount;
unsigned long ulTempData;
unsigned long ulPhyRegAdrs;
unsigned long ulPhyRdAdrs;
unsigned long ulPhyWrData;
unsigned long *pCfgRomAdrs;
ulPhyRegAdrs = ulRegAdrs;
ulPhyWrData = ulRegData;
/*
printf("pc1394DevSetPhyReg: ulPhyRegAdrs = 0x%.8x\n", ulPhyRegAdrs);
*/
ulTempData = ((ulPhyRegAdrs & 0xf) << 8) | DATA_BIT14 | (ulPhyWrData & 0xff);
/*
printf("pc1394DevSetPhyReg: ulTempData = 0x%.8x\n", ulTempData);
*/
pciWriteLong((int)(pPc1394Dev.pciControllerSpace0 + PHY_CTR_REG_ADR), ulTempData);
iReadCount = 0;
ulTempData = 0;
while ((!(ulTempData & DATA_BIT31)) && (iReadCount < 30))
{
taskDelay(1);
ulTempData = pciReadLong((int)(pPc1394Dev.pciControllerSpace0 + PHY_CTR_REG_ADR));
iReadCount++;
}
if ((!(ulTempData & DATA_BIT31)) && (iReadCount == 30))
{
printf("pc1394DevSetPhyReg: read count error.\n");
return(ERROR);
}
/*
printf("pc1394DevSetPhyReg: ulTempData = 0x%.8x\n", ulTempData);
ulPhyRdAdrs = (ulTempData & 0x0f000000) >> 24;
if (ulPhyRegAdrs != ulPhyRdAdrs)
{
printf("pc1394DevSetPhyReg: read address error.\n");
return(ERROR);
}
*/
return(OK);
}
/******************************************************************************
TITLE: pc1394DevGetPhyReg0Test
DESC: test routine to get PHY register 0
PARAM: none
RETURN: OK - operation runs successfully
ERROR - operation runs failed
******************************************************************************/
STATUS pc1394DevGetPhyReg0Test(void)
{
int iReadCount;
unsigned long ulTempData;
unsigned long ulPhyRegAdrs;
unsigned long ulPhyRdAdrs;
unsigned long ulPhyRdData;
unsigned long *pCfgRomAdrs;
/* PHY_CTR_REG 0 */
ulPhyRegAdrs = 0x0000;
ulTempData = (ulPhyRegAdrs << 8) | DATA_BIT15;
pciWriteLong((int)(pPc1394Dev.pciControllerSpace0 + PHY_CTR_REG_ADR), ulTempData);
iReadCount = 0;
ulTempData = 0;
while ((!(ulTempData & DATA_BIT31)) && (iReadCount < 30))
{
taskDelay(1);
ulTempData = pciReadLong((int)(pPc1394Dev.pciControllerSpace0 + PHY_CTR_REG_ADR));
iReadCount++;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -