/**@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)))); }