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

📄 namespc.c

📁 PNX系列设备驱动 PNX系列设备驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
		/* LEAVE CRITICAL SECTION */
		critsectLeave ( Manager->CriticalSectionHandle, &NestedContext );
		goto	namespaceCreateExit1;
	}

	/* find the ID relative to the type of object we are looking for */
	for ( ObjectIdx = 0 ; ; ObjectIdx++ )
	{
		Bool	IDFound = False;

		for ( Idx = 0 ; Idx < Manager->NameSpaceCount ; Idx ++ )
		{
			NameSpaceObject*	Object;

			if ( ( Object = objectlistGetObject (
				&Manager->List, 
				Idx ) ) != Null )
			{


				/* a different type of object */
				if ( NameSpaceObjectType != Object->ControlObjectType )
					continue;

				
				/* same type of object with a different ID */
				if ( ObjectIdx != Object->ControlObjectIndex )
					continue;

				/* name space conflict */
				if ( strCmp ( NameSpaceName, 
					(Pointer)Object->ControlName ) == 0 )
				{
					DPF(0,("tmman:namespaceCreate:NameSpace[%s]:CONFLICT:FAIL\n",
						NameSpaceName ));

					/* this name already exists for this object so stop */
					Status = statusNameSpaceNameConflict;
					/* LEAVE CRITICAL SECTION */
					critsectLeave ( Manager->CriticalSectionHandle, &NestedContext );
					goto	namespaceCreateExit1;
				}

				/* Id exists - so increment ObjectIdx and start search again */
				break;
			}
		}

		/* check if have reached the end without colliding with the ID */
		if ( Idx >= Manager->NameSpaceCount ) 
		{
			/* we have found an ObjectIdx that is not present */
			IDFound = True;
			break;
		}

		/* otherwise increment and try the search again */
	}
	
	/* this loop always exists with some Object Idx that is not already present */

	/* copy the shared control data */
	halAccessEnable( Manager->HalHandle );

	Manager->Control[SlotIdx].ObjectType = 
		halAccess32 ( Manager->HalHandle, NameSpaceObjectType );
	Manager->Control[SlotIdx].ObjectIndex = 
		halAccess32 ( Manager->HalHandle, ObjectIdx );

	halAccessDisable( Manager->HalHandle );


	halAccessEnable( Manager->HalHandle );
	strCopy( (Pointer)Manager->Control[SlotIdx].Name, NameSpaceName );
	halAccessDisable( Manager->HalHandle );


	
#else	/* TMMAN_TARGET */


	for ( SlotIdx = 0 ; SlotIdx < Manager->NameSpaceCount ; SlotIdx ++ )
	{
		UInt32	StrCmpResult, ObjectType, ObjectIndex;
		UInt8	ObjectName[constTMManNameSpaceNameLength];


		halAccessEnable( Manager->HalHandle );

		ObjectType = halAccess32 ( Manager->HalHandle, 
			Manager->Control[SlotIdx].ObjectType );
	
		ObjectIndex = halAccess32 ( Manager->HalHandle, 
			Manager->Control[SlotIdx].ObjectIndex );

		strCopy( (Pointer)ObjectName, (Pointer) Manager->Control[SlotIdx].Name );

		halAccessDisable( Manager->HalHandle );

		if ( ObjectType != 	constTMManNameSpaceObjectInvalid )
		{
			DPF(0,("tmman:TARGET:namespaceCreate:Slot#[%x]:Type[%x]:Idx[%x]:Name[%s]\n",
				SlotIdx, 
				ObjectType,
				ObjectIndex,
				ObjectName ));
		}
		else
		{
			continue;
		}


		if ( ObjectType  != NameSpaceObjectType )
			continue;
		
		/* BUGCHECK : Strcmp performs bytes accesses over the PCI bus */
		halAccessEnable( Manager->HalHandle );

		StrCmpResult = strCmp ((Pointer)Manager->Control[SlotIdx].Name, 
			NameSpaceName );

		halAccessDisable( Manager->HalHandle );

		if ( StrCmpResult == 0 )
		{
			break;
		}
	}


	if ( SlotIdx >= Manager->NameSpaceCount )
	{
		DPF(0,("tmman:namespaceCreate:Name[%s]:NON EXISTENT:FAIL\n",
			NameSpaceName ));
		Status = statusNameSpaceNameNonExistent;
		goto	namespaceCreateExit1;
	}

#endif

	if ( ( NameSpace = objectAllocate (
		sizeof ( NameSpaceObject ), NameSpaceFourCC ) ) == Null )
	{
		DPF(0,("tmman:namespaceCreate:objectAllocate:FAIL\n"));
		Status = statusObjectAllocFail;
		goto namespaceCreateExit2;	
	}

	if ( objectlistInsert ( 
		&Manager->List, 
		NameSpace,
		SlotIdx ) != True )
	{
		DPF(0,("tmman:namespaceCreate:objectlistInsert:FAIL\n"));
		Status = statusObjectInsertFail;
		goto namespaceCreateExit3;	
	}

	NameSpace->NameSpaceManager = Manager;
	NameSpace->NameSpaceNumber = SlotIdx;

#ifdef TMMAN_HOST

	/* LEAVE CRITICAL SECTION */
	critsectLeave ( Manager->CriticalSectionHandle, &NestedContext );

	NameSpace->ObjectId = ObjectIdx;
	/*
	save the shared (control) data in our local object  for 
	using it at the time of reset, when endianess is known
	*/
	NameSpace->ControlObjectType = NameSpaceObjectType;
	NameSpace->ControlObjectIndex = ObjectIdx;
	strCopy( (Pointer)NameSpace->ControlName, NameSpaceName );

#else

	halAccessEnable( Manager->HalHandle );

	NameSpace->ObjectId = 
		halAccess32 ( Manager->HalHandle, 
		Manager->Control[SlotIdx].ObjectIndex );

	halAccessDisable( Manager->HalHandle );

#endif

	DPF(9,("tmman:namespaceCreate:Slot#[%x]:Type[%x]:Idx[%x]:Name[%s]\n",
		SlotIdx, 
		NameSpaceObjectType,
		NameSpace->ObjectId,
		NameSpaceName ));

	*NameSpaceHandlePointer = (UInt32)NameSpace;
	*ObjectIdPointer = NameSpace->ObjectId;

	return statusSuccess;
/*
namespaceCreateExit4 :
	objectlistDelete ( 
		&Manager->List, 
		NameSpace,
		SlotIdx );
*/

namespaceCreateExit3 :
	objectFree ( NameSpace );

namespaceCreateExit2 :

#ifdef TMMAN_HOST
	halAccessEnable( Manager->HalHandle );

	Manager->Control[SlotIdx].ObjectType = 
		halAccess32 ( Manager->HalHandle, constTMManNameSpaceObjectInvalid );
	Manager->Control[SlotIdx].ObjectIndex = 
		halAccess32 ( Manager->HalHandle, 0 );

	halAccessDisable( Manager->HalHandle );

#endif

namespaceCreateExit1 :
	return Status;
}

TMStatus	namespaceDestroy ( 
	UInt32 NameSpaceHandle )
{
	NameSpaceManagerObject*	NameSpaceManager;
	NameSpaceObject*	NameSpace =
		(NameSpaceObject*) NameSpaceHandle;
	UInt32				SlotIdx;
	UInt32				NestedContext;


	if ( objectValidate ( NameSpace, NameSpaceFourCC ) != True )
	{
		DPF(0,("tmman:namespaceDestroy:objectValidate:FAIL\n"));
		return statusInvalidHandle;
	}

	DPF(9,("tmman:namespaceDestroy:Slot#[%x]:Type[%x]:Idx[%x]:Name[%s]\n",
		NameSpace->NameSpaceNumber,
		NameSpace->ControlObjectType,
		NameSpace->ControlObjectIndex,
		NameSpace->ControlName ));

	NameSpaceManager = (NameSpaceManagerObject* )NameSpace->NameSpaceManager;

	SlotIdx = NameSpace->NameSpaceNumber;

	objectlistDelete ( 
		&NameSpaceManager->List, 
		NameSpace,
		NameSpace->NameSpaceNumber );

	objectFree ( NameSpace );

#ifdef TMMAN_HOST
	
	/* ENTER CRITICAL SECTION */
	critsectEnter ( NameSpaceManager->CriticalSectionHandle, &NestedContext );
	
	halAccessEnable( NameSpaceManager->HalHandle );
				
	NameSpaceManager->Control[SlotIdx].ObjectType = 
		halAccess32 ( NameSpaceManager->HalHandle, constTMManNameSpaceObjectInvalid );
	NameSpaceManager->Control[SlotIdx].ObjectIndex = 
		halAccess32 ( NameSpaceManager->HalHandle, 0 );

	halAccessDisable( NameSpaceManager->HalHandle );
			
	/* LEAVE CRITICAL SECTION */
	critsectLeave ( NameSpaceManager->CriticalSectionHandle, &NestedContext );

#endif

	return statusSuccess;
}



void namespaceDump ( UInt32 NameSpaceHandle )
{
	NameSpaceObject*	Object =
		(NameSpaceObject*) NameSpaceHandle;

	DPF(9,("namespaceDump:MAN[%x]:NUM[%x]:OID[%x]:COT[%x]:COI[%x]\n",
		Object->NameSpaceManager,
		Object->NameSpaceNumber,
		Object->ObjectId,
		Object->ControlObjectType,
		Object->ControlObjectIndex ));
}

⌨️ 快捷键说明

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