亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tmpnp.c

?? PNX系列設備驅動 PNX系列設備驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
			
			// create a device object for this physical hardware
			strSprintf ( KernelDeviceName, "\\Device\\TriMedia%d",
				DeviceNumber );

			RtlInitAnsiString ( &KernelDeviceNameANSI, KernelDeviceName );

			if ( RtlAnsiStringToUnicodeString(
				&KernelDeviceNameUnicode,
				&KernelDeviceNameANSI,
				TRUE) != STATUS_SUCCESS  )
			{
				DPF(0,("tmman:tmmanPnpAddDevice:RtlAnsiStringToUnicodeString:FAIL\n" ));
				goto tmmanPnpAddDeviceExit1;
			}

			Status = IoCreateDevice(
				 DriverObject,
				 sizeof( TMManDeviceObject ),
				 &KernelDeviceNameUnicode,
				 FILE_DEVICE_UNKNOWN,
				 0,                        // No standard device characteristics
				 FALSE,                    // This isn't an exclusive device 
				 &FunctionalDeviceObject  );

			RtlFreeUnicodeString ( &KernelDeviceNameUnicode );	

			if ( NT_SUCCESS(Status) ) 
			{
				break;
			}

			// this object alread exists - so pick up a new ID.
			// Boghos added the "|| Status==STATUS_OBJECT_NAME_COLLISION" in the next line
			// to correct the multi board support problem
			// The problem was diagnosed to be a failure in creating the second device due to
			// a name collision.
			if ( Status == STATUS_OBJECT_NAME_EXISTS || Status==STATUS_OBJECT_NAME_COLLISION )
			{
				DPF(0,("tmman:halCreate:IoCreateDevice:STATUS_OBJECT_NAME_EXISTS\n" ));
				continue;
			}

			if ( ! NT_SUCCESS(Status) )
			{
				DPF(0,("tmman:halCreate:IoCreateDevice:FAIL[%x]\n", Status ));
				goto tmmanPnpAddDeviceExit1;
			}

		}
	}

	FunctionalDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
	DeviceExtension = FunctionalDeviceObject->DeviceExtension;


	// Attach to the FDO to the PDO and retrieve the SDO
	if ( ( StackDeviceObject =
		IoAttachDeviceToDeviceStack(FunctionalDeviceObject, PhysicalDeviceObject) ) == NULL )
	{
		Status = STATUS_UNSUCCESSFUL;
        DPF(0,("tmman:tmmanPnpAddDevice:IoAttachDeviceToDeviceStack:FAIL\n" ));
		goto tmmanPnpAddDeviceExit2;

	}

	// populate the device extension
	DeviceExtension->FunctionalDeviceObject = FunctionalDeviceObject;
	DeviceExtension->PhysicalDeviceObject =	PhysicalDeviceObject;
	DeviceExtension->StackDeviceObject = StackDeviceObject;
	DeviceExtension->DeviceState =	constTMMan_DEVICE_STATE_NEVERSTARTED;
	DeviceExtension->DSPNumber =	DeviceNumber;


	return STATUS_SUCCESS;

//tmmanPnpAddDeviceExit3:
//    IoDetachDevice( StackDeviceObject );

tmmanPnpAddDeviceExit2:
	IoDeleteDevice ( FunctionalDeviceObject );

tmmanPnpAddDeviceExit1:
	return Status; 
}

NTSTATUS
tmmanPnpRemoveDevice(
	PDEVICE_OBJECT FunctionalDeviceObject )
{
	PDEVICE_OBJECT	StackDeviceObject = 
		((TMManDeviceObject*)FunctionalDeviceObject->DeviceExtension)->StackDeviceObject;
    
	IoDetachDevice( StackDeviceObject );

	IoDeleteDevice ( FunctionalDeviceObject );

    return STATUS_SUCCESS;
}

NTSTATUS
tmmanPnpStartDevice(
	PDEVICE_OBJECT FunctionalDeviceObject,
	PIRP Irp )
{
	TMManDeviceObject			*DeviceExtension =  
		(TMManDeviceObject*)FunctionalDeviceObject->DeviceExtension;

	NTSTATUS			Status = STATUS_UNSUCCESSFUL;
	PIO_STACK_LOCATION	IoStack;
	PCM_RESOURCE_LIST	ResourceList;
	PCM_FULL_RESOURCE_DESCRIPTOR FullResourceDescriptor;
	PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
	PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialResourceDescriptor;

	ULONG			MemoryType = 0;

	halParameters		Config;
//    ULONG				i, j;
	PVOID				AllocatedDevice;
	ULONG				Idx;
    PCI_COMMON_CONFIG	PCIConfig;
//    PCI_SLOT_NUMBER		SlotNumber;
	ULONG				ReferenceAddress;

	ULONG				Temp;

	IoStack = IoGetCurrentIrpStackLocation(Irp);
	
	DPF (0,("tmmanPnpStartDevice:FunctionalDeviceObject[%x]:Irp[%x]\n", FunctionalDeviceObject, Irp ));	

	DPF (0,("tmmanPnpStartDevice:RAW RESOURCES[%x]\n",
		IoStack->Parameters.StartDevice.AllocatedResources ));	

	DumpPNPResources ( IoStack->Parameters.StartDevice.AllocatedResources );

	DPF (0,("tmmanPnpStartDevice:TRANSLATED RESOURCES[%x]\n", 
		IoStack->Parameters.StartDevice.AllocatedResourcesTranslated));	

	DumpPNPResources ( IoStack->Parameters.StartDevice.AllocatedResourcesTranslated );

	Config.FunctionalDeviceObject = DeviceExtension->FunctionalDeviceObject;
	Config.PhysicalDeviceObject = DeviceExtension->PhysicalDeviceObject;
	Config.StackDeviceObject = DeviceExtension->StackDeviceObject;
	Config.DSPNumber = DeviceExtension->DSPNumber;


	// retrieve the first memory address that we are going to use a reference
	// to match the resource list with the PCI Config space
	ResourceList = IoStack->Parameters.StartDevice.AllocatedResourcesTranslated;
	FullResourceDescriptor = &ResourceList->List[0];
	PartialResourceList = &FullResourceDescriptor->PartialResourceList;

	for ( Idx = 0 ;	Idx < PartialResourceList->Count ; Idx ++ )
	{

		PartialResourceDescriptor = &PartialResourceList->PartialDescriptors[Idx];

		switch ( PartialResourceDescriptor->Type )
		{

			case CmResourceTypeMemory :
			switch ( MemoryType++ )
			{

				case 0 : 
				ReferenceAddress= PartialResourceDescriptor->u.Memory.Start.LowPart;
				break;

				default :
				break;

			}
			break;

			default :
			break;
		}
	}



	// check for TM1000 or TM2000 or DEC bridge chip
	if ( pnpGetPCIInformation ( 
		constTMMANDECBridgeVendorID,		
		constTMMANDECBridgeDeviceID, 
		ReferenceAddress,
		&Config.BusNumber,
		&Config.SlotNumber ) != TRUE )
	{ 
		// check for TM1000 or TM2000
		if ( pnpGetPCIInformation ( 
			constTMMANTM1000VendorID,		
			constTMMANTM1000DeviceID, 
			ReferenceAddress,
			&Config.BusNumber,
			&Config.SlotNumber ) != TRUE )
		{ 
			if ( pnpGetPCIInformation ( 
				constTMMANTM2000VendorID,		
				constTMMANTM2000DeviceID, 
				ReferenceAddress,
				&Config.BusNumber,
				&Config.SlotNumber ) != TRUE )
			{

				if ( pnpGetPCIInformation ( 
					constTMMANTM1300VendorID,		
					constTMMANTM1300DeviceID, 
					ReferenceAddress,
					&Config.BusNumber,
					&Config.SlotNumber ) != TRUE )
				{
					DPF (0,("tmmanPnpStartDevice:No TriMedia Device Found:FAIL\n" ));
					goto tmmanPnpStartDeviceExit1;
				}
			}
		}
	}




	if ( HalGetBusData (
		PCIConfiguration,
		Config.BusNumber,
		Config.SlotNumber.u.AsULONG,
		&PCIConfig,
		PCI_COMMON_HDR_LENGTH ) == 0 )
	{
		DPF (0,("tmmanPnpStartDevice:HalGetBusData:PCIConfig:FAIL\n" ));
		goto tmmanPnpStartDeviceExit1;
	}


	for ( Idx = 0 ; Idx < constTMMANPCIRegisters ; Idx ++ )
	{
		Config.PCIRegisters[Idx] = ((PULONG)&PCIConfig)[Idx];

		// FOR TESTING - BEGIN
		if ( HalGetBusDataByOffset (
			PCIConfiguration,
			Config.BusNumber,
			Config.SlotNumber.u.AsULONG,
			&Temp, 
			(ULONG)Idx*4,					// register offset in config space
			sizeof (ULONG) ) != sizeof ( ULONG ) )
		{
			DPF(0,("InitTriMedia:HalGetBusDataByOffset:Secondary Vendor Device ID:FAIL\n"));
			return FALSE;
		}
		// END

		DPF (1, 
			("Register #0x%x = [0x%x]\n",
			Idx, Temp )); //Config.PCIRegisters[Idx] ));
	}


	if ( ( PCIConfig.VendorID == constTMMANDECBridgeVendorID ) && 
		( PCIConfig.DeviceID ==  constTMMANDECBridgeDeviceID) )
    {

	    ((PUSHORT)&Config.BridgeDeviceVendorID)[0] =  PCIConfig.VendorID;
		((PUSHORT)&Config.BridgeDeviceVendorID)[1] =  PCIConfig.DeviceID;

		((PUSHORT)&Config.BridgeSubsystemID)[0] =  PCIConfig.u.type0.SubVendorID;
		((PUSHORT)&Config.BridgeSubsystemID)[1] =  PCIConfig.u.type0.SubSystemID;

		((PUCHAR)&Config.BridgeClassRevisionID)[0] =  PCIConfig.RevisionID;
		((PUCHAR)&Config.BridgeClassRevisionID)[1] =  PCIConfig.ProgIf;
		((PUCHAR)&Config.BridgeClassRevisionID)[2] =  PCIConfig.SubClass;
		((PUCHAR)&Config.BridgeClassRevisionID)[3] =  PCIConfig.BaseClass;



		ResourceList = IoStack->Parameters.StartDevice.AllocatedResourcesTranslated;
		FullResourceDescriptor = &ResourceList->List[0];
		PartialResourceList = &FullResourceDescriptor->PartialResourceList;
		MemoryType = 0;

		for ( Idx = 0 ;	Idx < PartialResourceList->Count ; Idx ++ )
		{

			PartialResourceDescriptor = &PartialResourceList->PartialDescriptors[Idx];

			switch ( PartialResourceDescriptor->Type )
			{

				case CmResourceTypeMemory :
				switch ( MemoryType++ )
				{

					case 0 : 
					break;

					case 1 : 
					Config.SDRAMAddrPhysical	= PartialResourceDescriptor->u.Memory.Start;
					Config.SDRAMLength			= PartialResourceDescriptor->u.Memory.Length;
					break;
					
					case 2 : 
					Config.MMIOAddrPhysical		= PartialResourceDescriptor->u.Memory.Start;
					Config.MMIOLength			= PartialResourceDescriptor->u.Memory.Length;
					break;
				}
				break;

				case CmResourceTypeInterrupt :
				Config.InterruptLevel			= (KIRQL)PartialResourceDescriptor->u.Interrupt.Level;
				Config.InterruptVector			= PartialResourceDescriptor->u.Interrupt.Vector;
				Config.InterruptAffinity		= PartialResourceDescriptor->u.Interrupt.Affinity;
				Config.InterruptMode			= 
					(PartialResourceDescriptor->Flags & CM_RESOURCE_INTERRUPT_LATCHED) ? Latched : LevelSensitive;
				break;
			
				case CmResourceTypeBusNumber :
				Config.BusNumber				= PartialResourceDescriptor->u.BusNumber.Start;
				break;

				default :
				break;
			}
		}

    }
	else
	{
	    ((PUSHORT)&Config.TMDeviceVendorID)[0] =  PCIConfig.VendorID;
		((PUSHORT)&Config.TMDeviceVendorID)[1] =  PCIConfig.DeviceID;

		((PUCHAR)&Config.TMClassRevisionID)[0] =  PCIConfig.RevisionID;
		((PUCHAR)&Config.TMClassRevisionID)[1] =  PCIConfig.ProgIf;
		((PUCHAR)&Config.TMClassRevisionID)[2] =  PCIConfig.SubClass;
		((PUCHAR)&Config.TMClassRevisionID)[3] =  PCIConfig.BaseClass;

		((PUSHORT)&Config.TMSubsystemID)[0] =  PCIConfig.u.type0.SubVendorID;
		((PUSHORT)&Config.TMSubsystemID)[1] =  PCIConfig.u.type0.SubSystemID;

		Config.BridgeDeviceVendorID = 0;
		Config.BridgeSubsystemID = 0;
		Config.BridgeClassRevisionID = 0;



		ResourceList = IoStack->Parameters.StartDevice.AllocatedResourcesTranslated;
		FullResourceDescriptor = &ResourceList->List[0];
		PartialResourceList = &FullResourceDescriptor->PartialResourceList;
		MemoryType = 0;

		for ( Idx = 0 ;	Idx < PartialResourceList->Count ; Idx ++ )
		{

			PartialResourceDescriptor = &PartialResourceList->PartialDescriptors[Idx];

			switch ( PartialResourceDescriptor->Type )
			{

				case CmResourceTypeMemory :
				switch ( MemoryType++ )
				{
					case 0 : 
					Config.SDRAMAddrPhysical	= PartialResourceDescriptor->u.Memory.Start;
					Config.SDRAMLength			= PartialResourceDescriptor->u.Memory.Length;
					break;
					
					case 1 : 
					Config.MMIOAddrPhysical		= PartialResourceDescriptor->u.Memory.Start;
					Config.MMIOLength			= PartialResourceDescriptor->u.Memory.Length;
					break;
				}
				break;

				case CmResourceTypeInterrupt :
				Config.InterruptLevel			= (KIRQL)PartialResourceDescriptor->u.Interrupt.Level;
				Config.InterruptVector			= PartialResourceDescriptor->u.Interrupt.Vector;
				Config.InterruptAffinity		= PartialResourceDescriptor->u.Interrupt.Affinity;
				Config.InterruptMode			= 
					(PartialResourceDescriptor->Flags & CM_RESOURCE_INTERRUPT_LATCHED) ? Latched : LevelSensitive;
				break;
			
				case CmResourceTypeBusNumber :
				Config.BusNumber				= PartialResourceDescriptor->u.BusNumber.Start;
				break;
			}
		}

	}


	if ( ( AllocatedDevice = tmmanInit ( 
		DeviceExtension->DSPNumber , &Config ) ) == NULL )
	{
		DPF (0,("tmmanPnpStartDevice:tmmanInit:FAIL\n" ));
		goto tmmanPnpStartDeviceExit1;
	}

	// insert the device we have just created into the global device list for this driver
	TMManGlobal->DeviceList[DeviceExtension->DSPNumber] = AllocatedDevice;
	TMManGlobal->DeviceCount++;

	return STATUS_SUCCESS;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
3atv在线一区二区三区| 亚洲三级视频在线观看| 亚洲三级在线播放| 国内一区二区视频| 欧美日韩色一区| 国产精品国产三级国产三级人妇| 夜夜嗨av一区二区三区四季av| 国产精品99久久久久| 欧美日韩国产高清一区二区三区 | 欧美一区二区三区色| 国产精品婷婷午夜在线观看| 亚洲6080在线| 色悠悠亚洲一区二区| 国产精品家庭影院| 国产一区二区三区黄视频| 91精品黄色片免费大全| 亚洲一区二区三区影院| 成人久久视频在线观看| 国产日韩欧美高清在线| 麻豆精品一区二区综合av| 欧美日韩在线综合| 亚洲制服丝袜在线| 日本道精品一区二区三区| 国产精品毛片大码女人| 成人免费视频视频在线观看免费| 欧美tk丨vk视频| 蜜桃视频在线观看一区| 5月丁香婷婷综合| 日日欢夜夜爽一区| 欧美三级视频在线观看| 亚洲午夜精品在线| 色999日韩国产欧美一区二区| 国产蜜臀97一区二区三区 | 丝袜美腿一区二区三区| 欧美日韩黄色影视| 日本不卡不码高清免费观看| 91精品国产高清一区二区三区 | 亚洲欧洲国产专区| 99re66热这里只有精品3直播| 国产亚洲一本大道中文在线| 国产九色精品成人porny| 国产精品视频免费看| 成人精品在线视频观看| 亚洲人亚洲人成电影网站色| av一区二区不卡| 一区二区三区中文在线| 欧美欧美午夜aⅴ在线观看| 美女性感视频久久| 欧美精品一区二区三区一线天视频| 国内精品伊人久久久久影院对白| 久久久久久久久97黄色工厂| 成人理论电影网| 一区二区成人在线观看| 91精品国产综合久久久久久久| 久久国产乱子精品免费女| 国产三级精品视频| 欧洲精品在线观看| 美女www一区二区| 国产精品对白交换视频| 欧美另类videos死尸| 国内精品不卡在线| 亚洲一区二区三区四区的| 欧美精品一区二区三区很污很色的 | 国产一区二区在线看| 国产精品久久久久久久久久久免费看 | 久久综合久久综合九色| 99久久夜色精品国产网站| 石原莉奈在线亚洲二区| 国产丝袜美腿一区二区三区| 欧美中文字幕一区二区三区亚洲| 麻豆精品在线看| 樱花影视一区二区| 精品久久久久久最新网址| 91片在线免费观看| 久久99精品国产麻豆婷婷| 亚洲三级电影网站| 欧美videos大乳护士334| 色哟哟一区二区三区| 国产自产2019最新不卡| 夜夜嗨av一区二区三区| 国产日韩欧美亚洲| 欧美刺激脚交jootjob| 色国产综合视频| 国产精品亚洲第一区在线暖暖韩国| 亚洲高清不卡在线观看| 国产精品乱人伦中文| 久久综合九色综合欧美98| 欧美调教femdomvk| 成人99免费视频| 黄页视频在线91| 日韩黄色在线观看| 亚洲一区二区三区四区在线| 国产精品乱人伦中文| 久久久久99精品国产片| 日韩欧美久久一区| 欧美色综合天天久久综合精品| 丁香激情综合五月| 国产一区中文字幕| 喷白浆一区二区| 午夜日韩在线观看| 亚洲福利一区二区三区| 亚洲欧美一区二区三区久本道91 | 丰满岳乱妇一区二区三区| 三级欧美在线一区| 亚洲第一激情av| 亚洲超碰97人人做人人爱| 亚洲精品第1页| 亚洲丝袜另类动漫二区| 国产精品天干天干在线综合| 久久精品人人做人人综合 | 欧美日韩色综合| 欧美日韩视频在线一区二区| 在线免费不卡视频| 在线观看日韩一区| 欧美日韩三级一区二区| 欧美精品久久天天躁| 制服丝袜成人动漫| 欧美一区二区三区不卡| 日韩手机在线导航| 久久在线观看免费| 欧美极品少妇xxxxⅹ高跟鞋| 国产精品美女久久久久久久| 国产精品不卡在线| 一区二区三区四区在线免费观看| 综合色中文字幕| 一区二区三区加勒比av| 亚洲va韩国va欧美va| 精品一区在线看| 丁香亚洲综合激情啪啪综合| 色综合一区二区三区| 欧美午夜片在线看| 日韩视频免费观看高清完整版| 欧美成人a视频| 国产农村妇女毛片精品久久麻豆 | 中文字幕一区二区5566日韩| 亚洲精品中文字幕乱码三区| 天天影视网天天综合色在线播放| 青青草原综合久久大伊人精品优势| 黄网站免费久久| 91免费视频观看| 欧美精品少妇一区二区三区| 久久综合给合久久狠狠狠97色69| 中日韩免费视频中文字幕| 一二三区精品视频| 国内精品写真在线观看| 91免费版在线看| 日韩一区二区电影在线| 国产精品视频一二三区| 日本免费在线视频不卡一不卡二| 国产乱子轮精品视频| 色偷偷一区二区三区| 精品粉嫩超白一线天av| 亚洲品质自拍视频| 黑人精品欧美一区二区蜜桃| av午夜精品一区二区三区| 欧美一区二区网站| 亚洲人123区| 国产伦精品一区二区三区免费| 91久久精品一区二区| 26uuu另类欧美| 亚洲国产日韩一级| 成人午夜av影视| 日韩女优毛片在线| 一区二区三区四区不卡在线| 极品美女销魂一区二区三区免费| 91麻豆精品一区二区三区| 精品国产一区二区三区四区四| 亚洲欧美国产高清| 国产精品一区不卡| 欧美日韩国产bt| 亚洲色图视频网| 国产成人欧美日韩在线电影| 欧美一二三区在线观看| 一区二区三区国产精品| 成人av动漫在线| 精品乱码亚洲一区二区不卡| 亚洲成人午夜电影| 91色九色蝌蚪| 国产精品久久久一本精品 | 久久一区二区视频| 日韩成人av影视| 欧美色大人视频| 亚洲精品视频免费观看| 成人动漫一区二区在线| 久久综合九色综合欧美98| 久久99国产精品久久99 | 欧美午夜免费电影| 亚洲天堂久久久久久久| 不卡电影免费在线播放一区| 国产亚洲欧美色| 国产精品白丝jk白祙喷水网站| 日韩免费在线观看| 久久疯狂做爰流白浆xx| 日韩免费一区二区| 精品影院一区二区久久久| 精品国产a毛片| 国产一区二区三区香蕉| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 日韩电影在线免费看| 91精品在线免费|