⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sicommon_amcc_lnx.cpp

📁 The PCI Local bus concept was developed to break the PC data I/O bottleneck and clearly opens the d
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 + -