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

📄 tmman.c

📁 PNX系列设备驱动 PNX系列设备驱动
💻 C
📖 第 1 页 / 共 3 页
字号:

tmmanInitExit11:
	channelManagerDestroy ( TMManDevice->ChannelManagerHandle );

tmmanInitExit10:
	memoryDestroy( TMManDevice->ChannelSharedData );

tmmanInitExit9:
	vintrManagerDestroy ( TMManDevice->VIntrManagerHandle );

tmmanInitExit8:
	memoryDestroy( TMManDevice->VIntrSharedData );

tmmanInitExit7:
	memoryManagerDestroy ( TMManDevice->MemoryManagerHandle );

tmmanInitExit6:
	MmFreeContiguousMemory ( TMManDevice->MemoryBlock );

tmmanInitExit5:
	namespaceManagerDestroy ( TMManDevice->NameSpaceManagerHandle );

tmmanInitExit4:
	halDestroy ( TMManDevice->HalHandle );
	
tmmanInitExit3:
	MmFreeContiguousMemory ( TMManDevice->SharedData );

tmmanInitExit2:
	memFree ( TMManDevice );

tmmanInitExit1:
	return NULL;
}

void	tmmanExit (  
	UInt32 DSPNumber )
{

	TMManDeviceObject* TMManDevice = 
		(TMManDeviceObject*)TMManGlobal->DeviceList[DSPNumber];

	sgbufferManagerDestroy ( TMManDevice->SGBufferManagerHandle );

	messageManagerDestroy ( TMManDevice->MessageManagerHandle );

	eventManagerDestroy ( TMManDevice->EventManagerHandle );

	memoryDestroy( TMManDevice->EventSharedData );

	channelManagerDestroy ( TMManDevice->ChannelManagerHandle );

	memoryDestroy( TMManDevice->ChannelSharedData );

	vintrManagerDestroy ( TMManDevice->VIntrManagerHandle );

	memoryDestroy( TMManDevice->VIntrSharedData );

	memoryManagerDestroy ( TMManDevice->MemoryManagerHandle );

	MmFreeContiguousMemory ( TMManDevice->MemoryBlock );

	namespaceManagerDestroy ( TMManDevice->NameSpaceManagerHandle );

	halDestroy ( TMManDevice->HalHandle );

	MmFreeContiguousMemory ( TMManDevice->SharedData );

	memFree ( TMManDevice );
	
}

//////////////////////////////////////////////////////////////////////////////
//
//	HELPER DATA ACCESS FUNCTIONS
//
//////////////////////////////////////////////////////////////////////////////

BOOLEAN RegistryReadDWORD ( 
	DWORD	RegistryHandle, 
	PCHAR	ValueName,
	PULONG	ValuePtr )
{
	ULONG	Size, Data, RegResult;	


	Size = sizeof ( DWORD);
	RegResult = _RegQueryValueEx ( RegistryHandle, 
		ValueName, 
		NULL, NULL,
		&Data, 
		&Size );


    if ( ERROR_SUCCESS == RegResult ) 
	{
		*ValuePtr = Data;
		return TRUE;
    } 
	else 
	{
		return FALSE;
    }
}



/***********************************************************/
STATUS InitBridge(halParameters* pConfig)
{

	DWORD i,dwConfigCtrl;


    if ( pciReadConfigDW ((BYTE)pConfig->BusNumber,
    	DevFunc2BYTE(pConfig->DeviceNumber,pConfig->FunctionNumber), 
    	(WORD)0x8, &pConfig->BridgeClassRevisionID) == FALSE )
    {
    	DPF(0,("TM:pnpConfigStart:BIOS:Revision ID Retrieve:FAIL\n"));
    	return CR_FAILURE;
    }

    // read the subsystem and subsystem vendor ID.
    if ( pciReadConfigDW ((BYTE)pConfig->BusNumber,
    	DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
    	(WORD)0x2c, &pConfig->BridgeSubsystemID ) == FALSE )
    {
    	DPF(0,("TM:pnpConfigStart:BIOS:Subsystem ID Retrieve:FAIL\n"));
    	return CR_FAILURE;
    }

	/* URK
		Configure the secondary side of the bridge
	*/

	/* Secondary Command and Status register */
	if ( pciWriteConfigDW ((BYTE)pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x44, 0x06 ) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:Sec Command Status Write:FAIL\n"));
		return FALSE;
	}


/* Secondary CSR Mem BAR assigned fixed value which is not used in ISA */
	if ( pciWriteConfigDW ((BYTE)pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x50,0x00001000) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:Sec CSR Mem BAR Write:FAIL\n"));
		return FALSE;
	}
/* Secondary CSR IO BAR assigned fixed value which is not used in ISA */
	if ( pciWriteConfigDW ((BYTE)pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x54,0xFFFFFFFF) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:Sec CSR Mem BAR Write:FAIL\n"));
		return FALSE;
	}
/* Secondary upstream Sys Mem BAR */
	if ( pciWriteConfigDW ((BYTE)pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x58,
		pConfig->SystemBaseAddress) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:UpSream Sys Mem BAR Write:FAIL\n"));
		return FALSE;
	}
/*
Configure the translation address bases of the bridge
*/
/* DnStream XLate SDRAM Base */
	if ( pciWriteConfigDW (pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x98,
		pConfig->SDRAMBaseAddress) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:DnStream XLate SDRAM Base Write:FAIL\n"));
		return FALSE;
	}
/* DnStream XLate MMIO Base */
	if ( pciWriteConfigDW (pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x9C,
		pConfig->MMIOBaseAddress) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:DnStream XLate MMIO Base Write:FAIL\n"));
		return FALSE;
	}
/* UpStream System Base Address Always 0 */
	if ( pciWriteConfigDW (pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0xA4, 0x00000000 ) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:UpStream XLate Sys Base Write:FAIL\n"));
		return FALSE;
	}
/* Configuration Control Register Enable config Cycles accross bridge */
	if ( pciWriteConfigDW (pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x90, 0xFFFF0000 ) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:Cfg Ctrl Status Write:FAIL\n"));
		return FALSE;
	}

	return TRUE /* TMOK */;
}

/*
	This function will configure the TMX000 device behind the DEC Bridge
	and also extract the relevant information about the TMX000 device
	into the HalParametrs structure.
*/
STATUS InitTriMedia(halParameters* pConfig)
{

	DWORD i,TmAddr;
	/* search secondary for Trimedia */
	for(i=0;i<16;i++)
	{
		TmAddr = (0x00010000 << i);

		/* Config Address Register Type 0 Address */
		if ( pciWriteConfigDW (pConfig->BusNumber,
    		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
			(WORD)0x80, TmAddr) == FALSE )
		{
			DPF(0,("TM:pnpConfigStart:BIOS:Sec Command Status Write:FAIL\n"));
			return FALSE;
		}

		/* Config Data Register */
		if ( pciReadConfigDW (pConfig->BusNumber,
    		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
    			(WORD)0x84, &pConfig->TMDeviceVendorID ) == FALSE )
		{
			DPF(0,("TM:pnpConfigStart:BIOS:Sec Command Status Write:FAIL\n"));
			return FALSE;
		}

		if ( (  pConfig->TMDeviceVendorID == ( ( constTMMANTM1000DeviceID << 16 ) | constTMMANTM1000VendorID ) ) || 
			( pConfig->TMDeviceVendorID == ( ( constTMMANTM2000DeviceID << 16 ) | constTMMANTM2000VendorID ) ) ||
			( pConfig->TMDeviceVendorID == ( ( constTMMANTM1300DeviceID << 16 ) | constTMMANTM1300VendorID ) ) )
		{
			break;
		}
	}

	if ( (  pConfig->TMDeviceVendorID != ( ( constTMMANTM1000DeviceID << 16 ) | constTMMANTM1000VendorID ) ) && 
		( pConfig->TMDeviceVendorID != ( ( constTMMANTM2000DeviceID << 16 ) | constTMMANTM2000VendorID ) ) &&
		( pConfig->TMDeviceVendorID != ( ( constTMMANTM1300DeviceID << 16 ) | constTMMANTM1300VendorID ) ) )
	{
			return FALSE;
	}

	//URK : Revision ID is significant has to be taken from trimedia
	// read the hardware revision ID
	if ( pciWriteConfigDW (pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x80, TmAddr | 0x00000008 ) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:Sec Command Status Write:FAIL\n"));
		return FALSE;
	}
	if ( pciReadConfigDW (pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x84, &pConfig->TMClassRevisionID ) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:Class & Revision ID Retrieve:FAIL\n"));
		return FALSE;
	}

	// read the subsystem and subsystem vendor ID.
	if ( pciWriteConfigDW (pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x80, TmAddr | 0x0000002C ) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:Sec Command Status Write:FAIL\n"));
		return FALSE;
	}
	if ( pciReadConfigDW (pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x84, &pConfig->TMSubsystemID) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:Subsystem ID Retrieve:FAIL\n"));
		return FALSE;
	}

	/* 
	Configure the Trimedia behind non transparant bridge
	This part should be done before boardCreate is called 
	*/
	if ( pciWriteConfigDW (pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x80, TmAddr | 0x0000000C ) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:Sec Command Status Write:FAIL\n"));
		return FALSE;
	}
	if ( pciWriteConfigDW (pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x84, 0x00000000 ) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:Sec Command Status Write:FAIL\n"));
		return FALSE;
	}

	if ( pciWriteConfigDW (pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x80, TmAddr | 0x00000010 ) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:Sec Command Status Write:FAIL\n"));
		return FALSE;
	}
	if ( pciWriteConfigDW (pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x84,
		pConfig->SDRAMBaseAddress) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:Sec Command Status Write:FAIL\n"));
		return FALSE;
	}

	if ( pciWriteConfigDW (pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x80, TmAddr | 0x00000014 ) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:Sec Command Status Write:FAIL\n"));
		return FALSE;
	}
	if ( pciWriteConfigDW (pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x84,
		pConfig->MMIOBaseAddress) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:Sec Command Status Write:FAIL\n"));
		return FALSE;
	}

	if ( pciWriteConfigDW (pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x80, TmAddr | 0x0000003C ) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:Sec Command Status Write:FAIL\n"));
		return FALSE;
	}
	if ( pciWriteConfigDW (pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x84, pConfig->InterruptVector) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:Sec Command Status Write:FAIL\n"));
		return FALSE;
	}

	if ( pciWriteConfigDW (pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x80, TmAddr | 0x00000004 ) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:Sec Command Status Write:FAIL\n"));
		return FALSE;
	}
	if ( pciWriteConfigDW (pConfig->BusNumber,
		DevFunc2BYTE(pConfig->DeviceNumber, pConfig->FunctionNumber), 
		(WORD)0x84, 0x00000006 ) == FALSE )
	{
		DPF(0,("TM:pnpConfigStart:BIOS:Sec Command Status Write:FAIL\n"));
		return FALSE;
	}
	return TRUE /* TMOK */;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -