📄 tmman.c
字号:
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 + -