📄 sicommon_amcc_lnx.cpp
字号:
UINT32 count, UINT32 mailboxNum, UINT32 *data
)
{
UINT32 opreg_info[2], cnt;
for(cnt=0; cnt<count; cnt++)
{
opreg_info[0] = mailboxNum + cnt;
opreg_info[1] = data[cnt];
if(ioctl(pAMCCDev->hDevice, MAILBOX_WRITE, opreg_info) == -1)
return e_Err_OpregReadError;
}
return e_Err_NoError;
}
///////////////////////////////////////////////////////////////////////////////
// INT32 SI_AMCC_ReadPCI_ConfSpace
//
// Description:
//
// Parameters:
// PAMCCDevice pAMCCDev : Handle to the device driver.
// UINT32 count : Number of UINT32 to access.
// UINT32 offset : Byte offset from 0 for PCI config space.
// UINT32 *data : Pointer to host memory where the data resides.
INT32 SI_AMCC_ReadPCI_ConfSpace
(
PAMCCDevice pAMCCDev,
UINT32 count, UINT32 offset, UINT32 *data
)
{
UINT32 cnt;
unsigned char config_data[256], *tempData;
if(ioctl(pAMCCDev->hDevice, CONFIG_READ, config_data) == -1)
return e_Err_ReadError;
tempData = (unsigned char *)data;
for (cnt=0; cnt<count * sizeof(UINT32); cnt++)
*tempData++ = config_data[cnt];
return e_Err_NoError;
}
///////////////////////////////////////////////////////////////////////////////
// INT32 SI_AMCC_ReadPCI_NVWord
//
// Description:
//
// Parameters:
// PAMCCDevice pAMCCDev : Handle to the device driver.
// UINT32 count : Number of UINT32 to access.
// UINT32 addrNVRam: NVRAM address to access (byte offset).
// UINT32 *data : Pointer to host memory where the data resides.
INT32 SI_AMCC_ReadPCI_NVWord
(
PAMCCDevice pAMCCDev,
UINT32 count, UINT32 addrNVRam, UINT32 *data
)
{
UINT32 opreg_info[2], cnt;
for(cnt=0; cnt<count; cnt++)
{
opreg_info[0] = addrNVRam + (cnt << 2);
if(ioctl(pAMCCDev->hDevice, NVRAM_READ, opreg_info) == -1)
return e_Err_NVReadError;
data[cnt] = opreg_info[1];
}
return e_Err_NoError;
}
///////////////////////////////////////////////////////////////////////////////
// INT32 SI_AMCC_WritePCI_NVWord
//
// Description:
//
// Parameters:
// PAMCCDevice pAMCCDev : Handle to the device driver.
// UINT32 count : Number of UINT32 to access.
// UINT32 addrNVRam: NVRAM address to access (byte offset).
// UINT32 *data : Pointer to host memory where the data resides.
INT32 SI_AMCC_WritePCI_NVWord
(
PAMCCDevice pAMCCDev,
UINT32 count, UINT32 addrNVRam, UINT32 *data
)
{
UINT32 opreg_info[2], cnt;
for(cnt=0; cnt<count; cnt++)
{
opreg_info[0] = addrNVRam + (cnt << 2);
opreg_info[1] = data[cnt];
if(ioctl(pAMCCDev->hDevice, NVRAM_WRITE, opreg_info) == -1)
return e_Err_NVWriteError;
}
return e_Err_NoError;
}
///////////////////////////////////////////////////////////////////////////////
// INT32 SI_AMCC_PassThroughRead
//
// Description:
//
// Parameters:
//
//
INT32 SI_AMCC_PassThroughRead
(
PAMCCDevice pAMCCDev,
UINT32 region, UINT32 count, UINT32 offset, UINT32 *data
)
{
ulong driverParams[SI_PARAMS_COUNT];
if (count == 0)
return e_Err_NoError;
driverParams[SI_PARAMS_INDEX_REGION] = region;
driverParams[SI_PARAMS_INDEX_OFFSET] = offset;
driverParams[SI_PARAMS_INDEX_COUNT] = count;
driverParams[SI_PARAMS_INDEX_USERBUFFER]= (ulong)data;
if
(
ioctl
(
pAMCCDev->hDevice,
PASSTHROUGH_READ_32,
driverParams
) == -1
)
return e_Err_TargetReadError;
return e_Err_NoError;
}
///////////////////////////////////////////////////////////////////////////////
// INT32 SI_AMCC_PassThroughRead16
//
// Description:
//
// Parameters:
//
//
INT32 SI_AMCC_PassThroughRead16
(
PAMCCDevice pAMCCDev,
UINT32 region, UINT32 count, UINT32 offset, UINT16 *data
)
{
ulong driverParams[SI_PARAMS_COUNT];
if (count == 0)
return e_Err_NoError;
driverParams[SI_PARAMS_INDEX_REGION] = region;
driverParams[SI_PARAMS_INDEX_OFFSET] = offset;
driverParams[SI_PARAMS_INDEX_COUNT] = count;
driverParams[SI_PARAMS_INDEX_USERBUFFER]= (ulong)data;
if
(
ioctl
(
pAMCCDev->hDevice,
PASSTHROUGH_READ_16,
driverParams
) == -1
)
return e_Err_TargetReadError;
return e_Err_NoError;
}
///////////////////////////////////////////////////////////////////////////////
// INT32 SI_AMCC_PassThroughRead8
//
// Description:
//
// Parameters:
//
//
INT32 SI_AMCC_PassThroughRead8
(
PAMCCDevice pAMCCDev,
UINT32 region, UINT32 count, UINT32 offset, UINT8 *data
)
{
ulong driverParams[SI_PARAMS_COUNT];
if (count == 0)
return e_Err_NoError;
driverParams[SI_PARAMS_INDEX_REGION] = region;
driverParams[SI_PARAMS_INDEX_OFFSET] = offset;
driverParams[SI_PARAMS_INDEX_COUNT] = count;
driverParams[SI_PARAMS_INDEX_USERBUFFER]= (ulong)data;
if
(
ioctl
(
pAMCCDev->hDevice,
PASSTHROUGH_READ_8,
driverParams
) == -1
)
return e_Err_TargetReadError;
return e_Err_NoError;
}
///////////////////////////////////////////////////////////////////////////////
// INT32 SI_AMCC_PassthroughWrite
//
// Description:
//
// Parameters:
//
//
INT32 SI_AMCC_PassThroughWrite
(
PAMCCDevice pAMCCDev,
UINT32 region, UINT32 count, UINT32 offset, UINT32 *data
)
{
ulong driverParams[SI_PARAMS_COUNT];
if (count == 0)
return e_Err_NoError;
driverParams[SI_PARAMS_INDEX_REGION] = region;
driverParams[SI_PARAMS_INDEX_OFFSET] = offset;
driverParams[SI_PARAMS_INDEX_COUNT] = count;
driverParams[SI_PARAMS_INDEX_USERBUFFER]= (ulong)data;
if
(
ioctl
(
pAMCCDev->hDevice,
PASSTHROUGH_WRITE_32,
driverParams
) == -1
)
return e_Err_TargetReadError;
return e_Err_NoError;
}
///////////////////////////////////////////////////////////////////////////////
// INT32 SI_AMCC_PassthroughWrite16
//
// Description:
//
// Parameters:
//
//
INT32 SI_AMCC_PassThroughWrite16
(
PAMCCDevice pAMCCDev,
UINT32 region, UINT32 count, UINT32 offset, UINT16 *data
)
{
ulong driverParams[SI_PARAMS_COUNT];
if (count == 0)
return e_Err_NoError;
driverParams[SI_PARAMS_INDEX_REGION] = region;
driverParams[SI_PARAMS_INDEX_OFFSET] = offset;
driverParams[SI_PARAMS_INDEX_COUNT] = count;
driverParams[SI_PARAMS_INDEX_USERBUFFER]= (ulong)data;
if
(
ioctl
(
pAMCCDev->hDevice,
PASSTHROUGH_WRITE_16,
driverParams
) == -1
)
return e_Err_TargetReadError;
return e_Err_NoError;
}
///////////////////////////////////////////////////////////////////////////////
// INT32 SI_AMCC_PassthroughWrite8
//
// Description:
//
// Parameters:
//
//
INT32 SI_AMCC_PassThroughWrite8
(
PAMCCDevice pAMCCDev,
UINT32 region, UINT32 count, UINT32 offset, UINT8 *data
)
{
ulong driverParams[SI_PARAMS_COUNT];
if (count == 0)
return e_Err_NoError;
driverParams[SI_PARAMS_INDEX_REGION] = region;
driverParams[SI_PARAMS_INDEX_OFFSET] = offset;
driverParams[SI_PARAMS_INDEX_COUNT] = count;
driverParams[SI_PARAMS_INDEX_USERBUFFER]= (ulong)data;
if
(
ioctl
(
pAMCCDev->hDevice,
PASSTHROUGH_WRITE_8,
driverParams
) == -1
)
return e_Err_TargetReadError;
return e_Err_NoError;
}
///////////////////////////////////////////////////////////////////////////////
// INT32 SI_AMCC_DirectAccessAddr
//
// Description:
//
// Parameters:
// PAMCCDevice pAMCCDev : Handle to the device driver.
// UINT32 count : Number of direct access pointers to get.
// UINT32 *addr : Pointer to direct access addresses
// todo: fix this. this needs work.
INT32 SI_AMCC_DirectAccessAddr
(
PAMCCDevice pAMCCDev,
UINT32 count, UINT32 *addr[]
)
{
return e_Err_NoError;
}
///////////////////////////////////////////////////////////////////////////////
// INT32 SI_AMCC_ReleaseDirectAccessAddr
//
// Description:
//
// Parameters:
// PAMCCDevice pAMCCDev : Handle to the device driver.
// todo: fix this. this needs work.
INT32 SI_AMCC_ReleaseDirectAccessAddr
(
PAMCCDevice pAMCCDev
)
{
return e_Err_NoError;
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// Following are only for SI hardware. Do not use these unless SI HW is used.
///////////////////////////////////////////////////////////////////////////////
// INT32 SI_AMCCC31_ReadTarget
//
// Description:
//
// Parameters:
// PAMCCDevice pAMCCDev : Handle to the device driver.
// UINT32 count : Number of UINT32 to access.
// UINT32 dspAddr : DSP board address (DWORD offset for C31).
// UINT32 *hostAddr: Pointer to host memory where the data resides.
INT32 SI_AMCCC31_ReadTarget
(
PAMCCDevice pAMCCDev,
UINT32 count, UINT32 dspAddr, UINT32 *hostAddr
)
{
ulong driverParams[SI_PARAMS_COUNT];
if (count == 0)
return e_Err_NoError;
driverParams[SI_PARAMS_INDEX_REGION] = 0; // not used
driverParams[SI_PARAMS_INDEX_OFFSET] = dspAddr;
driverParams[SI_PARAMS_INDEX_COUNT] = count;
driverParams[SI_PARAMS_INDEX_USERBUFFER]= (ulong)hostAddr;
if
(
ioctl
(
pAMCCDev->hDevice,
DUAL_ACCESS_READ,
driverParams
) == -1
)
return e_Err_TargetReadError;
return e_Err_NoError;
}
///////////////////////////////////////////////////////////////////////////////
// INT32 SI_AMCCC31_WriteTarget
//
// Description:
//
// Parameters:
// PAMCCDevice pAMCCDev : Handle to the device driver.
// UINT32 count : Number of UINT32 to access.
// UINT32 dspAddr : DSP board address (DWORD offset for C31).
// UINT32 *hostAddr: Pointer to host memory where the data resides.
INT32 SI_AMCCC31_WriteTarget
(
PAMCCDevice pAMCCDev,
UINT32 count, UINT32 dspAddr, UINT32 *hostAddr
)
{
ulong driverParams[SI_PARAMS_COUNT];
if (count == 0)
return e_Err_NoError;
driverParams[SI_PARAMS_INDEX_REGION] = 0; // not used
driverParams[SI_PARAMS_INDEX_OFFSET] = dspAddr;
driverParams[SI_PARAMS_INDEX_COUNT] = count;
driverParams[SI_PARAMS_INDEX_USERBUFFER]= (ulong)hostAddr;
if
(
ioctl
(
pAMCCDev->hDevice,
DUAL_ACCESS_WRITE,
driverParams
) == -1
)
return e_Err_TargetReadError;
return e_Err_NoError;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -