/**@file | |
This file is for functins related to assign and free Framework HII handle number. | |
Copyright (c) 2008, Intel Corporation | |
All rights reserved. This program and the accompanying materials | |
are licensed and made available under the terms and conditions of the BSD License | |
which accompanies this distribution. The full text of the license may be found at | |
http://opensource.org/licenses/bsd-license.php | |
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
**/ | |
#include "HiiHandle.h" | |
// | |
// FRAMEWORK_EFI_HII_HANDLE | |
// | |
UINT8 mHandle[1024 * 8] = {0}; | |
/** | |
Initialize the Framework Hii Handle database. | |
**/ | |
VOID | |
InitHiiHandleDatabase ( | |
VOID | |
) | |
{ | |
// | |
// FRAMEWORK_EFI_HII_HANDLE 0 is reserved. | |
// Set Bit 0 in mHandle[0] to 1. | |
// | |
mHandle[0] |= 1 << 0; | |
} | |
/** | |
Allocate a new Framework HII handle. | |
@param Handle Returns the new Framework HII Handle assigned. | |
@retval EFI_SUCCESS A new Framework HII Handle is assigned. | |
@retval EFI_OUT_OF_RESOURCE The Framework HII Handle database is depleted. | |
**/ | |
EFI_STATUS | |
AllocateHiiHandle ( | |
OUT FRAMEWORK_EFI_HII_HANDLE *Handle | |
) | |
{ | |
UINTN Index; | |
for (Index = 0; Index < sizeof (mHandle) * 8; Index++) { | |
if ((mHandle[Index / 8] & (1 << (Index % 8))) == 0) { | |
mHandle[Index / 8] = (UINT8) (mHandle[Index / 8] | (1 << (Index % 8))); | |
*Handle = (FRAMEWORK_EFI_HII_HANDLE) Index; | |
ASSERT (*Handle != 0); | |
return EFI_SUCCESS; | |
} | |
} | |
return EFI_OUT_OF_RESOURCES; | |
} | |
/** | |
Free Framework HII handle. | |
@param Handle The Framework HII Handle to be freed. | |
**/ | |
VOID | |
FreeHiiHandle ( | |
IN FRAMEWORK_EFI_HII_HANDLE Handle | |
) | |
{ | |
UINT16 Num; | |
Num = (UINT16) Handle; | |
ASSERT ((mHandle [Num / 8] & (1 << (Num % 8))) != 0); | |
mHandle [Num / 8] = (UINT8) (mHandle [Num / 8] & (~(1 << (Num % 8)))); | |
} |