本文整理汇总了C++中GetFirstNode函数的典型用法代码示例。如果您正苦于以下问题:C++ GetFirstNode函数的具体用法?C++ GetFirstNode怎么用?C++ GetFirstNode使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GetFirstNode函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: UsbListAllUsbDevices
/***
List all available Usb devices and all their partitions.
@param[in|out] DeviceList The linked list contains all Usb devices.
@retval EFI_SUCCESS The function exited normally.
@retval Other An error occurred.
***/
EFI_STATUS
UsbListAllUsbDevices (
IN OUT LIST_ENTRY *DeviceList
)
{
LIST_ENTRY *DiskNode = NULL;
LIST_ENTRY *PartitionNode = NULL;
DISK_ENTRY *DiskEntry = NULL;
PARTITION_ENTRY *PartitionEntry = NULL;
EFI_BLOCK_IO_PROTOCOL *BlockIo = NULL;
DISK_INFO *DiskInfo = NULL;
PARTITION_INFO *PartitionInfo = NULL;
if (DeviceList == NULL) {
return EFI_INVALID_PARAMETER;
}
DiskNode = GetFirstNode (DeviceList);
while (!IsNull (DeviceList, DiskNode)) {
DiskEntry = (DISK_ENTRY*)DiskNode;
if (DiskEntry != NULL) {
DiskInfo = &(DiskEntry->DiskInfo);
BlockIo = DiskInfo->BlockIo;
Print (L"\n[%d] \n", DiskInfo->DiskIndex);
if (DiskInfo->MaxPartitions > 0) {
PartitionNode = GetFirstNode(&(DiskInfo->PartitionsList));
while (!IsNull (&(DiskInfo->PartitionsList), PartitionNode)) {
PartitionEntry = (PARTITION_ENTRY*)PartitionNode;
if (PartitionEntry != NULL) {
PartitionInfo = &(PartitionEntry->PartitionInfo);
Print (L"|____[Partition] %d, ", PartitionInfo->PartitionNumber);
Print (L"[Size] %ld, ", (PartitionInfo->EndLBA - PartitionInfo->StartLBA + 1));
Print (L"[StartLBA] %ld, [EndLBA] %ld\n", PartitionInfo->StartLBA, PartitionInfo->EndLBA);
}
PartitionNode = GetNextNode (&(DiskInfo->PartitionsList), PartitionNode);
} //end while()
}
}
DiskNode = GetNextNode (DeviceList, DiskNode);
} //end while()
Print (L"Press ESC to return.\n");
return EFI_SUCCESS;
}
开发者ID:nvhien1992,项目名称:AppsTianocore,代码行数:53,代码来源:UsbDiagnostics.c
示例2: TerminalConInRegisterKeyNotify
/**
Register a notification function for a particular keystroke for the input device.
@param This Protocol instance pointer.
@param KeyData A pointer to a buffer that is filled in with the
keystroke information data for the key that was
pressed.
@param KeyNotificationFunction Points to the function to be called when the key
sequence is typed specified by KeyData.
@param NotifyHandle Points to the unique handle assigned to the
registered notification.
@retval EFI_SUCCESS The notification function was registered
successfully.
@retval EFI_OUT_OF_RESOURCES Unable to allocate resources for necessary data
structures.
@retval EFI_INVALID_PARAMETER KeyData or NotifyHandle is NULL.
**/
EFI_STATUS
EFIAPI
TerminalConInRegisterKeyNotify (
IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
IN EFI_KEY_DATA *KeyData,
IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction,
OUT VOID **NotifyHandle
)
{
TERMINAL_DEV *TerminalDevice;
TERMINAL_CONSOLE_IN_EX_NOTIFY *NewNotify;
LIST_ENTRY *Link;
LIST_ENTRY *NotifyList;
TERMINAL_CONSOLE_IN_EX_NOTIFY *CurrentNotify;
if (KeyData == NULL || NotifyHandle == NULL || KeyNotificationFunction == NULL) {
return EFI_INVALID_PARAMETER;
}
TerminalDevice = TERMINAL_CON_IN_EX_DEV_FROM_THIS (This);
//
// Return EFI_SUCCESS if the (KeyData, NotificationFunction) is already registered.
//
NotifyList = &TerminalDevice->NotifyList;
for (Link = GetFirstNode (NotifyList); !IsNull (NotifyList,Link); Link = GetNextNode (NotifyList,Link)) {
CurrentNotify = CR (
Link,
TERMINAL_CONSOLE_IN_EX_NOTIFY,
NotifyEntry,
TERMINAL_CONSOLE_IN_EX_NOTIFY_SIGNATURE
);
if (IsKeyRegistered (&CurrentNotify->KeyData, KeyData)) {
if (CurrentNotify->KeyNotificationFn == KeyNotificationFunction) {
*NotifyHandle = CurrentNotify;
return EFI_SUCCESS;
}
}
}
//
// Allocate resource to save the notification function
//
NewNotify = (TERMINAL_CONSOLE_IN_EX_NOTIFY *) AllocateZeroPool (sizeof (TERMINAL_CONSOLE_IN_EX_NOTIFY));
if (NewNotify == NULL) {
return EFI_OUT_OF_RESOURCES;
}
NewNotify->Signature = TERMINAL_CONSOLE_IN_EX_NOTIFY_SIGNATURE;
NewNotify->KeyNotificationFn = KeyNotificationFunction;
CopyMem (&NewNotify->KeyData, KeyData, sizeof (EFI_KEY_DATA));
InsertTailList (&TerminalDevice->NotifyList, &NewNotify->NotifyEntry);
*NotifyHandle = NewNotify;
return EFI_SUCCESS;
}
开发者ID:B-Rich,项目名称:edk2,代码行数:76,代码来源:TerminalConIn.c
示例3: BootManagerCallback
/**
This call back function is registered with Boot Manager formset.
When user selects a boot option, this call back function will
be triggered. The boot option is saved for later processing.
@param This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
@param Action Specifies the type of action taken by the browser.
@param QuestionId A unique value which is sent to the original exporting driver
so that it can identify the type of data to expect.
@param Type The type of value for the question.
@param Value A pointer to the data being sent to the original exporting driver.
@param ActionRequest On return, points to the action requested by the callback function.
@retval EFI_SUCCESS The callback successfully handled the action.
@retval EFI_INVALID_PARAMETER The setup browser call this function with invalid parameters.
**/
EFI_STATUS
EFIAPI
BootManagerCallback (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
)
{
BDS_COMMON_OPTION *Option;
LIST_ENTRY *Link;
UINT16 KeyCount;
if (Action == EFI_BROWSER_ACTION_CHANGED) {
if ((Value == NULL) || (ActionRequest == NULL)) {
return EFI_INVALID_PARAMETER;
}
//
// Initialize the key count
//
KeyCount = 0;
for (Link = GetFirstNode (&mBootOptionsList); !IsNull (&mBootOptionsList, Link); Link = GetNextNode (&mBootOptionsList, Link)) {
Option = CR (Link, BDS_COMMON_OPTION, Link, BDS_LOAD_OPTION_SIGNATURE);
KeyCount++;
gOption = Option;
//
// Is this device the one chosen?
//
if (KeyCount == QuestionId) {
//
// Assigning the returned Key to a global allows the original routine to know what was chosen
//
mKeyInput = QuestionId;
//
// Request to exit SendForm(), so that we could boot the selected option
//
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;
break;
}
}
return EFI_SUCCESS;
}
//
// All other action return unsupported.
//
return EFI_UNSUPPORTED;
}
开发者ID:EvanLloyd,项目名称:tianocore,代码行数:75,代码来源:BootManager.c
示例4: AdjustOptionOrder
/**
Adjust option order base on the question value.
@param Question Pointer to current question.
@param PopUpMenuLines The line number of the pop up menu.
@retval EFI_SUCCESS If Option input is processed successfully
@retval EFI_DEVICE_ERROR If operation fails
**/
EFI_STATUS
AdjustOptionOrder (
IN FORM_DISPLAY_ENGINE_STATEMENT *Question,
OUT UINTN *PopUpMenuLines
)
{
UINTN Index;
EFI_IFR_ORDERED_LIST *OrderList;
UINT8 *ValueArray;
UINT8 ValueType;
LIST_ENTRY *Link;
DISPLAY_QUESTION_OPTION *OneOfOption;
EFI_HII_VALUE *HiiValueArray;
Link = GetFirstNode (&Question->OptionListHead);
OneOfOption = DISPLAY_QUESTION_OPTION_FROM_LINK (Link);
ValueArray = Question->CurrentValue.Buffer;
ValueType = OneOfOption->OptionOpCode->Type;
OrderList = (EFI_IFR_ORDERED_LIST *) Question->OpCode;
for (Index = 0; Index < OrderList->MaxContainers; Index++) {
if (GetArrayData (ValueArray, ValueType, Index) == 0) {
break;
}
}
*PopUpMenuLines = Index;
//
// Prepare HiiValue array
//
HiiValueArray = AllocateZeroPool (*PopUpMenuLines * sizeof (EFI_HII_VALUE));
ASSERT (HiiValueArray != NULL);
for (Index = 0; Index < *PopUpMenuLines; Index++) {
HiiValueArray[Index].Type = ValueType;
HiiValueArray[Index].Value.u64 = GetArrayData (ValueArray, ValueType, Index);
}
for (Index = 0; Index < *PopUpMenuLines; Index++) {
OneOfOption = ValueToOption (Question, &HiiValueArray[*PopUpMenuLines - Index - 1]);
if (OneOfOption == NULL) {
return EFI_NOT_FOUND;
}
RemoveEntryList (&OneOfOption->Link);
//
// Insert to head.
//
InsertHeadList (&Question->OptionListHead, &OneOfOption->Link);
}
FreePool (HiiValueArray);
return EFI_SUCCESS;
}
开发者ID:ChenFanFnst,项目名称:edk2,代码行数:67,代码来源:InputHandler.c
示例5: GetOneOfOptionMapEntry
/**
Get the ONE_OF_OPTION_MAP_ENTRY for a QuestionId that invokes the
EFI_FORM_CALLBACK_PROTOCOL.Callback. The information is needed as
the callback mechanism for EFI_IFR_ONE_OF_OPTION is changed from
EFI_IFR_ONE_OF_OPTION in Framework IFR. Check EFI_IFR_GUID_OPTIONKEY
for detailed information.
@param ThunkContext The Thunk Context.
@param QuestionId The Question Id.
@param Type The Question Type.
@param Value The One Of Option's value.
@return The ONE_OF_OPTION_MAP_ENTRY found.
@retval NULL If no entry is found.
**/
ONE_OF_OPTION_MAP_ENTRY *
GetOneOfOptionMapEntry (
IN HII_THUNK_CONTEXT *ThunkContext,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value
)
{
LIST_ENTRY *Link;
LIST_ENTRY *Link2;
ONE_OF_OPTION_MAP_ENTRY *OneOfOptionMapEntry;
ONE_OF_OPTION_MAP *OneOfOptionMap;
FORM_BROWSER_FORMSET *FormSet;
FormSet = ThunkContext->FormSet;
Link = GetFirstNode (&FormSet->OneOfOptionMapListHead);
while (!IsNull (&FormSet->OneOfOptionMapListHead, Link)) {
OneOfOptionMap = ONE_OF_OPTION_MAP_FROM_LINK(Link);
if (OneOfOptionMap->QuestionId == QuestionId) {
ASSERT (OneOfOptionMap->ValueType == Type);
Link2 = GetFirstNode (&OneOfOptionMap->OneOfOptionMapEntryListHead);
while (!IsNull (&OneOfOptionMap->OneOfOptionMapEntryListHead, Link2)) {
OneOfOptionMapEntry = ONE_OF_OPTION_MAP_ENTRY_FROM_LINK (Link2);
if (CompareMem (Value, &OneOfOptionMapEntry->Value, sizeof (EFI_IFR_TYPE_VALUE)) == 0) {
return OneOfOptionMapEntry;
}
Link2 = GetNextNode (&OneOfOptionMap->OneOfOptionMapEntryListHead, Link2);
}
}
Link = GetNextNode (&FormSet->OneOfOptionMapListHead, Link);
}
return NULL;
}
开发者ID:AshleyDeSimone,项目名称:edk2,代码行数:57,代码来源:ConfigAccess.c
示例6: FreeFileRegions
// Free the resources in the file's Region list.
STATIC
VOID
FreeFileRegions (
IN BOOTMON_FS_FILE *File
)
{
LIST_ENTRY *RegionToFlushLink;
BOOTMON_FS_FILE_REGION *Region;
RegionToFlushLink = GetFirstNode (&File->RegionToFlushLink);
while (!IsNull (&File->RegionToFlushLink, RegionToFlushLink)) {
// Repeatedly remove the first node from the list and free its resources.
Region = (BOOTMON_FS_FILE_REGION *) RegionToFlushLink;
RemoveEntryList (RegionToFlushLink);
FreePool (Region->Buffer);
FreePool (Region);
RegionToFlushLink = GetFirstNode (&File->RegionToFlushLink);
}
}
开发者ID:Michell-Lee,项目名称:edk2,代码行数:21,代码来源:BootMonFsOpenClose.c
示例7: vtGetContent
//
// stoplights and stopsigns
//
void vtRoadMap3d::GenerateSigns(vtLodGrid *pLodGrid)
{
if (!pLodGrid)
return;
vtContentManager3d &con = vtGetContent();
osg::Node *stopsign = con.CreateNodeFromItemname("American Stopsign");
osg::Node *stoplight = con.CreateNodeFromItemname("Stoplight (right)");
if (!stopsign || !stoplight)
{
VTLOG("Couldn't find stopsign and stoplight.\n");
return;
}
for (NodeGeom *pN = GetFirstNode(); pN; pN = pN->GetNext())
{
for (int r = 0; r < pN->NumLinks(); r++)
{
osg::Node *shape = NULL;
if (pN->GetIntersectType(r) == IT_STOPSIGN && stopsign)
{
shape = (osg::Node *) stopsign->clone(osg::CopyOp::SHALLOW_COPY);
}
if (pN->GetIntersectType(r) == IT_LIGHT && stoplight)
{
shape = (osg::Node *) stoplight->clone(osg::CopyOp::SHALLOW_COPY);
}
if (!shape) continue;
vtTransform *trans = new vtTransform;
trans->addChild(shape);
LinkGeom *link = pN->GetLink(r);
FPoint3 unit = pN->GetUnitLinkVector(r);
FPoint3 perp(unit.z, unit.y, -unit.x);
FPoint3 offset;
// Turn the sign (yaw) to face the oncoming traffic
trans->RotateLocal(FPoint3(0,1,0), pN->GetLinkAngle(r) + PID2f);
if (pN->GetIntersectType(r) == IT_STOPSIGN)
{
offset = pN->m_p3 + (unit * 6.0f) + (perp * (link->m_fRightWidth));
}
if (pN->GetIntersectType(r) == IT_LIGHT)
{
offset = pN->m_p3 - (unit * 6.0f) + (perp * (link->m_fRightWidth));
}
trans->Translate(offset);
pLodGrid->AddToGrid(trans);
}
}
}
开发者ID:kamalsirsa,项目名称:vtp,代码行数:56,代码来源:Roads.cpp
示例8: BmGetBootDescription
/**
Return the boot description for the controller.
@param Handle Controller handle.
@return The description string.
**/
CHAR16 *
BmGetBootDescription (
IN EFI_HANDLE Handle
)
{
LIST_ENTRY *Link;
BM_BOOT_DESCRIPTION_ENTRY *Entry;
CHAR16 *Description;
CHAR16 *DefaultDescription;
CHAR16 *Temp;
UINTN Index;
//
// Firstly get the default boot description
//
DefaultDescription = NULL;
for (Index = 0; Index < sizeof (mBmBootDescriptionHandlers) / sizeof (mBmBootDescriptionHandlers[0]); Index++) {
DefaultDescription = mBmBootDescriptionHandlers[Index] (Handle);
if (DefaultDescription != NULL) {
//
// Avoid description confusion between UEFI & Legacy boot option by adding "UEFI " prefix
// ONLY for core provided boot description handler.
//
Temp = AllocatePool (StrSize (DefaultDescription) + sizeof (mBmUefiPrefix));
ASSERT (Temp != NULL);
StrCpyS (Temp, (StrSize (DefaultDescription) + sizeof (mBmUefiPrefix)) / sizeof (CHAR16), mBmUefiPrefix);
StrCatS (Temp, (StrSize (DefaultDescription) + sizeof (mBmUefiPrefix)) / sizeof (CHAR16), DefaultDescription);
FreePool (DefaultDescription);
DefaultDescription = Temp;
break;
}
}
ASSERT (DefaultDescription != NULL);
//
// Secondly query platform for the better boot description
//
for ( Link = GetFirstNode (&mPlatformBootDescriptionHandlers)
; !IsNull (&mPlatformBootDescriptionHandlers, Link)
; Link = GetNextNode (&mPlatformBootDescriptionHandlers, Link)
) {
Entry = CR (Link, BM_BOOT_DESCRIPTION_ENTRY, Link, BM_BOOT_DESCRIPTION_ENTRY_SIGNATURE);
Description = Entry->Handler (Handle, DefaultDescription);
if (Description != NULL) {
FreePool (DefaultDescription);
return Description;
}
}
return DefaultDescription;
}
开发者ID:M1cha,项目名称:edk2,代码行数:58,代码来源:BmBootDescription.c
示例9: USBKeyboardUnregisterKeyNotify
/**
Remove a registered notification function from a particular keystroke.
@param This Protocol instance pointer.
@param NotificationHandle The handle of the notification function being unregistered.
@retval EFI_SUCCESS The notification function was unregistered successfully.
@retval EFI_INVALID_PARAMETER The NotificationHandle is invalid
**/
EFI_STATUS
EFIAPI
USBKeyboardUnregisterKeyNotify (
IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
IN EFI_HANDLE NotificationHandle
)
{
USB_KB_DEV *UsbKeyboardDevice;
KEYBOARD_CONSOLE_IN_EX_NOTIFY *CurrentNotify;
LIST_ENTRY *Link;
LIST_ENTRY *NotifyList;
if (NotificationHandle == NULL) {
return EFI_INVALID_PARAMETER;
}
if (((KEYBOARD_CONSOLE_IN_EX_NOTIFY *) NotificationHandle)->Signature != USB_KB_CONSOLE_IN_EX_NOTIFY_SIGNATURE) {
return EFI_INVALID_PARAMETER;
}
UsbKeyboardDevice = TEXT_INPUT_EX_USB_KB_DEV_FROM_THIS (This);
//
// Traverse notify list of USB keyboard and remove the entry of NotificationHandle.
//
NotifyList = &UsbKeyboardDevice->NotifyList;
for (Link = GetFirstNode (NotifyList);
!IsNull (NotifyList, Link);
Link = GetNextNode (NotifyList, Link)) {
CurrentNotify = CR (
Link,
KEYBOARD_CONSOLE_IN_EX_NOTIFY,
NotifyEntry,
USB_KB_CONSOLE_IN_EX_NOTIFY_SIGNATURE
);
if (CurrentNotify->NotifyHandle == NotificationHandle) {
//
// Remove the notification function from NotifyList and free resources
//
RemoveEntryList (&CurrentNotify->NotifyEntry);
FreePool (CurrentNotify);
return EFI_SUCCESS;
}
}
//
// Cannot find the matching entry in database.
//
return EFI_INVALID_PARAMETER;
}
开发者ID:AshleyDeSimone,项目名称:edk2,代码行数:61,代码来源:EfiKey.c
示例10: ResetDevice
/**
Resets an SD card that is connected to the SD controller.
The ResetDevice() function resets the SD card specified by Slot.
If this SD controller does not support a device reset operation, EFI_UNSUPPORTED is
returned.
If Slot is not in a valid slot number for this SD controller, EFI_INVALID_PARAMETER
is returned.
If the device reset operation is completed, EFI_SUCCESS is returned.
@param[in] This A pointer to the EFI_SD_MMC_PASS_THRU_PROTOCOL instance.
@param[in] Slot Specifies the slot number of the SD card to be reset.
@retval EFI_SUCCESS The SD card specified by Slot was reset.
@retval EFI_UNSUPPORTED The SD controller does not support a device reset operation.
@retval EFI_INVALID_PARAMETER Slot number is invalid.
@retval EFI_NO_MEDIA SD Device not present in the Slot.
@retval EFI_DEVICE_ERROR The reset command failed due to a device error
**/
EFI_STATUS
EFIAPI
SdMmcPassThruResetDevice (
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
IN UINT8 Slot
)
{
SD_MMC_HC_PRIVATE_DATA *Private;
LIST_ENTRY *Link;
LIST_ENTRY *NextLink;
SD_MMC_HC_TRB *Trb;
EFI_TPL OldTpl;
if (This == NULL) {
return EFI_INVALID_PARAMETER;
}
Private = SD_MMC_HC_PRIVATE_FROM_THIS (This);
if (!Private->Slot[Slot].Enable) {
return EFI_INVALID_PARAMETER;
}
if (!Private->Slot[Slot].MediaPresent) {
return EFI_NO_MEDIA;
}
if (!Private->Slot[Slot].Initialized) {
return EFI_DEVICE_ERROR;
}
//
// Free all async I/O requests in the queue
//
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
for (Link = GetFirstNode (&Private->Queue);
!IsNull (&Private->Queue, Link);
Link = NextLink) {
NextLink = GetNextNode (&Private->Queue, Link);
RemoveEntryList (Link);
Trb = SD_MMC_HC_TRB_FROM_THIS (Link);
Trb->Packet->TransactionStatus = EFI_ABORTED;
gBS->SignalEvent (Trb->Event);
SdMmcFreeTrb (Trb);
}
gBS->RestoreTPL (OldTpl);
return EFI_SUCCESS;
}
开发者ID:baranee,项目名称:edk2,代码行数:73,代码来源:SdMmcPciHcDxe.c
示例11: GetFirstNode
/**
* Gets the number of a nodes on a given node.
*
* @param refNode Node to check level.
* @return The previous node or NULL if there's no previous.
*/
size_t VDFTree::CountBranchNodes(VDFNode *refNode)
{
VDFNode *firstNode;
size_t counter;
firstNode = GetFirstNode(refNode);
counter = 0;
while(firstNode) {
counter++;
firstNode = firstNode->nextNode;
}
return counter;
}
开发者ID:Yepoleb,项目名称:vdfparser,代码行数:21,代码来源:vdfparser.cpp
示例12: VariableClassAddressChangeEvent
/**
Notification function of EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE.
This is a notification function registered on EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE event.
It convers pointer to new virtual address.
@param Event Event whose notification function is being invoked.
@param Context Pointer to the notification function's context.
**/
VOID
EFIAPI
VariableClassAddressChangeEvent (
IN EFI_EVENT Event,
IN VOID *Context
)
{
LIST_ENTRY *Link;
VARIABLE_ENTRY *Entry;
EFI_STATUS Status;
EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->GetBlockSize);
EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->GetPhysicalAddress);
EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->GetAttributes);
EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->SetAttributes);
EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->Read);
EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->Write);
EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->EraseBlocks);
EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance);
EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->PlatformLangCodes);
EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->LangCodes);
EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->PlatformLang);
EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->VariableGlobal.NonVolatileVariableBase);
EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->VariableGlobal.VolatileVariableBase);
EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal);
EfiConvertPointer (0x0, (VOID **) &mHashCtx);
EfiConvertPointer (0x0, (VOID **) &mSerializationRuntimeBuffer);
EfiConvertPointer (0x0, (VOID **) &mNvVariableCache);
EfiConvertPointer (0x0, (VOID **) &mPubKeyStore);
EfiConvertPointer (0x0, (VOID **) &mCertDbStore);
//
// in the list of locked variables, convert the name pointers first
//
for ( Link = GetFirstNode (&mLockedVariableList)
; !IsNull (&mLockedVariableList, Link)
; Link = GetNextNode (&mLockedVariableList, Link)
) {
Entry = BASE_CR (Link, VARIABLE_ENTRY, Link);
Status = EfiConvertPointer (0x0, (VOID **) &Entry->Name);
ASSERT_EFI_ERROR (Status);
}
//
// second, convert the list itself using UefiRuntimeLib
//
Status = EfiConvertList (0x0, &mLockedVariableList);
ASSERT_EFI_ERROR (Status);
}
开发者ID:jeppeter,项目名称:vbox,代码行数:58,代码来源:VariableDxe.c
示例13: KeyNotifyProcessHandler
/**
Process key notify.
@param Event Indicates the event that invoke this function.
@param Context Indicates the calling context.
**/
VOID
EFIAPI
KeyNotifyProcessHandler (
IN EFI_EVENT Event,
IN VOID *Context
)
{
EFI_STATUS Status;
VIRTUAL_KEYBOARD_DEV *VirtualKeyboardPrivate;
EFI_KEY_DATA KeyData;
LIST_ENTRY *Link;
LIST_ENTRY *NotifyList;
VIRTUAL_KEYBOARD_CONSOLE_IN_EX_NOTIFY *CurrentNotify;
EFI_TPL OldTpl;
VirtualKeyboardPrivate = (VIRTUAL_KEYBOARD_DEV *) Context;
//
// Invoke notification functions.
//
NotifyList = &VirtualKeyboardPrivate->NotifyList;
while (TRUE) {
//
// Enter critical section
//
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
Status = Dequeue (&VirtualKeyboardPrivate->QueueForNotify, &KeyData);
//
// Leave critical section
//
gBS->RestoreTPL (OldTpl);
if (EFI_ERROR (Status)) {
break;
}
for (Link = GetFirstNode (NotifyList);
!IsNull (NotifyList, Link);
Link = GetNextNode (NotifyList, Link)) {
CurrentNotify = CR (Link,
VIRTUAL_KEYBOARD_CONSOLE_IN_EX_NOTIFY,
NotifyEntry,
VIRTUAL_KEYBOARD_CONSOLE_IN_EX_NOTIFY_SIGNATURE
);
if (IsKeyRegistered (&CurrentNotify->KeyData, &KeyData)) {
CurrentNotify->KeyNotificationFn (&KeyData);
}
}
}
}
开发者ID:lersek,项目名称:edk2,代码行数:54,代码来源:VirtualKeyboard.c
示例14: SmiHandlerRegister
/**
Search for Framework SMI handler information according to specific PI SMM dispatch handle.
@param[in] DispatchHandle The unique handle assigned by SmiHandlerRegister().
@return Pointer to CALLBACK_INFO. If NULL, no callback info record is found.
**/
CALLBACK_INFO *
GetCallbackInfo (
IN EFI_HANDLE DispatchHandle
)
{
LIST_ENTRY *Node;
Node = GetFirstNode (&mCallbackInfoListHead);
while (!IsNull (&mCallbackInfoListHead, Node)) {
if (((CALLBACK_INFO *)Node)->DispatchHandle == DispatchHandle) {
return (CALLBACK_INFO *)Node;
}
Node = GetNextNode (&mCallbackInfoListHead, Node);
}
return NULL;
}
开发者ID:hsienchieh,项目名称:uefilab,代码行数:23,代码来源:SmmBaseHelper.c
示例15: UsbGetAllPartitions
/***
Get all partitions of all USB devices in linked list.
@param[in|out] DeviceList - Linked list of USB devices.
@param[in] MaxDevices - Number of USB devices in linked list.
@retval EFI_SUCCESS The function exited normally.
@retval Other An error occurred.
***/
EFI_STATUS
UsbGetAllPartitions (
IN OUT LIST_ENTRY *DeviceList,
IN UINTN MaxDevices
)
{
EFI_STATUS Status;
LIST_ENTRY ChildHandleList[MaxDevices];
LIST_ENTRY *Node = NULL;
DISK_ENTRY *DiskEntry = NULL;
UINTN MaxPartitions, Index;
if (IsListEmpty (DeviceList)) {
return EFI_INVALID_PARAMETER;
}
Index = 0;
Node = GetFirstNode (DeviceList);
while (!IsNull (DeviceList, Node)) {
DiskEntry = (DISK_ENTRY*)Node;
MaxPartitions = 0;
Status = GetChildHandles (
DiskEntry->DiskInfo.DiskHandle,
&gEfiBlockIoProtocolGuid,
&gEfiDiskIoProtocolGuid,
&ChildHandleList[Index]
);
if (Status == EFI_SUCCESS) {
Status = CheckGptMbrPartitions (
&ChildHandleList[Index],
DiskEntry->DiskInfo.BlockIo->Media->MediaId,
&(DiskEntry->DiskInfo.PartitionsList),
&MaxPartitions
);
if (Status == EFI_SUCCESS) {
DiskEntry->DiskInfo.MaxPartitions = MaxPartitions;
DBG ("MaxPartitions: %d\n", MaxPartitions);
}
}
Index++;
Node = GetNextNode (DeviceList, Node);
}
DBG ("OK\n");
return EFI_SUCCESS;
}
开发者ID:nvhien1992,项目名称:AppsTianocore,代码行数:56,代码来源:UsbDiagnostics.c
示例16: I2cHostRequestComplete
/**
Complete the current request
This routine is called at TPL_I2C_SYNC.
@param[in] I2cHostContext Address of an I2C_HOST_CONTEXT structure.
@param[in] Status Status of the I2C operation.
@return This routine returns the input status value.
**/
EFI_STATUS
I2cHostRequestComplete (
I2C_HOST_CONTEXT *I2cHostContext,
EFI_STATUS Status
)
{
I2C_REQUEST *I2cRequest;
LIST_ENTRY *EntryHeader;
LIST_ENTRY *Entry;
//
// Remove the current I2C request from the list
//
EntryHeader = &I2cHostContext->RequestList;
Entry = GetFirstNode (EntryHeader);
I2cRequest = I2C_REQUEST_FROM_ENTRY (Entry);
//
// Save the status for QueueRequest
//
if ( NULL != I2cRequest->Status ) {
*I2cRequest->Status = Status;
}
//
// Notify the user of the I2C request completion
//
if ( NULL != I2cRequest->Event ) {
gBS->SignalEvent (I2cRequest->Event);
}
//
// Done with this request, remove the current request from list
//
RemoveEntryList (&I2cRequest->Link);
FreePool (I2cRequest->RequestPacket);
FreePool (I2cRequest);
//
// If there is more I2C request, start next one
//
if(!IsListEmpty (EntryHeader)) {
I2cHostRequestEnable (I2cHostContext);
}
return Status;
}
开发者ID:JohnTroony,项目名称:vector-edk,代码行数:58,代码来源:I2cHost.c
示例17: InternalUpdateAliasOnList
/**
Update the value of a given alias on the list. If the alias is not there then add it.
@param[in] Alias The alias to test for.
@param[in] CommandString The updated command string.
@param[in, out] List The list to search.
@retval EFI_SUCCESS The operation was completed successfully.
@retval EFI_OUT_OF_RESOURCES There was not enough free memory.
**/
EFI_STATUS
EFIAPI
InternalUpdateAliasOnList(
IN CONST CHAR16 *Alias,
IN CONST CHAR16 *CommandString,
IN OUT LIST_ENTRY *List
)
{
ALIAS_LIST *Node;
BOOLEAN Found;
//
// assert for NULL parameter
//
ASSERT(Alias != NULL);
//
// check for the Alias
//
for ( Node = (ALIAS_LIST *)GetFirstNode(List), Found = FALSE
; !IsNull(List, &Node->Link)
; Node = (ALIAS_LIST *)GetNextNode(List, &Node->Link)
){
ASSERT(Node->CommandString != NULL);
ASSERT(Node->Alias != NULL);
if (StrCmp(Node->Alias, Alias)==0) {
FreePool(Node->CommandString);
Node->CommandString = NULL;
Node->CommandString = StrnCatGrow(&Node->CommandString, NULL, CommandString, 0);
Found = TRUE;
break;
}
}
if (!Found) {
Node = AllocateZeroPool(sizeof(ALIAS_LIST));
if (Node == NULL) {
return (EFI_OUT_OF_RESOURCES);
}
ASSERT(Node->Alias == NULL);
Node->Alias = StrnCatGrow(&Node->Alias, NULL, Alias, 0);
ASSERT(Node->CommandString == NULL);
Node->CommandString = StrnCatGrow(&Node->CommandString, NULL, CommandString, 0);
InsertTailList(List, &Node->Link);
}
return (EFI_SUCCESS);
}
开发者ID:JohnTroony,项目名称:vector-edk,代码行数:56,代码来源:For.c
示例18: CopyListOfCommandNames
/**
function to add each command name from the linked list to the string list.
the resultant list is a double NULL terminated list of NULL terminated strings.
@param[in,out] DestList double pointer to the list. may be NULL.
@param[in,out] DestSize pointer to the size of list. may be 0, if DestList is NULL.
@param[in] SourceList the double linked list of commands.
@retval EFI_SUCCESS the operation was successful.
**/
EFI_STATUS
CopyListOfCommandNames(
IN OUT CHAR16 **DestList,
IN OUT UINTN *DestSize,
IN CONST COMMAND_LIST *SourceList
)
{
CONST COMMAND_LIST *Node;
for ( Node = (COMMAND_LIST*)GetFirstNode(&SourceList->Link)
; SourceList != NULL && !IsListEmpty(&SourceList->Link) && !IsNull(&SourceList->Link, &Node->Link)
; Node = (COMMAND_LIST*)GetNextNode(&SourceList->Link, &Node->Link)
) {
LexicalInsertIntoList(DestList, DestSize, Node->CommandString);
}
return (EFI_SUCCESS);
}
开发者ID:shijunjing,项目名称:edk2,代码行数:28,代码来源:Help.c
示例19: EfiKeyFiFoInsertOneKey
/**
Insert one pre-fetched key into the FIFO buffer.
@param TerminalDevice Terminal driver private structure.
@param Key The key will be input.
@retval TRUE If insert successfully.
@retval FLASE If FIFO buffer is full before key insertion,
and the key is lost.
**/
BOOLEAN
EfiKeyFiFoInsertOneKey (
TERMINAL_DEV *TerminalDevice,
EFI_INPUT_KEY *Key
)
{
UINT8 Tail;
LIST_ENTRY *Link;
LIST_ENTRY *NotifyList;
TERMINAL_CONSOLE_IN_EX_NOTIFY *CurrentNotify;
EFI_KEY_DATA KeyData;
Tail = TerminalDevice->EfiKeyFiFo->Tail;
CopyMem (&KeyData.Key, Key, sizeof (EFI_INPUT_KEY));
KeyData.KeyState.KeyShiftState = 0;
KeyData.KeyState.KeyToggleState = 0;
//
// Invoke notification functions if exist
//
NotifyList = &TerminalDevice->NotifyList;
for (Link = GetFirstNode (NotifyList); !IsNull (NotifyList,Link); Link = GetNextNode (NotifyList,Link)) {
CurrentNotify = CR (
Link,
TERMINAL_CONSOLE_IN_EX_NOTIFY,
NotifyEntry,
TERMINAL_CONSOLE_IN_EX_NOTIFY_SIGNATURE
);
if (IsKeyRegistered (&CurrentNotify->KeyData, &KeyData)) {
CurrentNotify->KeyNotificationFn (&KeyData);
}
}
if (IsEfiKeyFiFoFull (TerminalDevice)) {
//
// Efi Key FIFO is full
//
return FALSE;
}
CopyMem (&TerminalDevice->EfiKeyFiFo->Data[Tail], Key, sizeof (EFI_INPUT_KEY));
TerminalDevice->EfiKeyFiFo->Tail = (UINT8) ((Tail + 1) % (FIFO_MAX_NUMBER + 1));
return TRUE;
}
开发者ID:B-Rich,项目名称:edk2,代码行数:57,代码来源:TerminalConIn.c
示例20: TxtInExCallback
/**
Callback function for SimpleTextInEx protocol install events
@param Event the event that is signaled.
@param Context not used here.
**/
VOID
EFIAPI
TxtInExCallback (
IN EFI_EVENT Event,
IN VOID *Context
)
{
EFI_STATUS Status;
UINTN BufferSize;
EFI_HANDLE Handle;
EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TxtInEx;
LIST_ENTRY *Link;
while (TRUE) {
BufferSize = sizeof (EFI_HANDLE);
Status = gBS->LocateHandle (
ByRegisterNotify,
NULL,
mTxtInExRegistration,
&BufferSize,
&Handle
);
if (EFI_ERROR (Status)) {
//
// If no more notification events exist
//
return ;
}
Status = gBS->HandleProtocol (
Handle,
&gEfiSimpleTextInputExProtocolGuid,
(VOID **) &TxtInEx
);
ASSERT_EFI_ERROR (Status);
//
// Register the hot key notification for the existing items in the list
//
EfiAcquireLock (&mHotkeyLock);
for (Link = GetFirstNode (&mHotkeyList); !IsNull (&mHotkeyList, Link); Link = GetNextNode (&mHotkeyList, Link)) {
RegisterHotkeyNotify (TxtInEx, HOTKEY_FROM_LINK (Link));
}
EfiReleaseLock (&mHotkeyLock);
}
}
开发者ID:01org,项目名称:Galileo-Runtime,代码行数:53,代码来源:BdsHotkey.c
注:本文中的GetFirstNode函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论