/*++ Copyright (c) 2004, 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. Module Name: VfrServices.h Abstract: Prototypes and defines for routines and classes used by the EFI VFR compiler. --*/ #ifndef _VFR_SERVICES_H_ #define _VFR_SERVICES_H_ class VfrOpcodeHandler { public: VfrOpcodeHandler ( VOID ) /*++ Routine Description: Constructor for the VFR opcode handling class. Arguments: None Returns: None --*/ ; ~VfrOpcodeHandler ( VOID ) /*++ Routine Description: Destructor for the VFR opcode handler. Free up memory allocated while parsing the VFR script. Arguments: None Returns: None --*/ ; void WriteIfrBytes ( VOID ) /*++ Routine Description: This function is invoked at the end of parsing. Its purpose is to write out all the IFR bytes that were queued up while parsing. Arguments: None Returns: None --*/ ; int AddOpcodeByte ( UINT8 OpcodeByte, UINT32 LineNum ) /*++ Routine Description: This function is invoked by the parser when a new IFR opcode should be emitted. Arguments: OpcodeByte - the IFR opcode LineNum - the line number from the source file that resulted in the opcode being emitted. Returns: 0 always --*/ ; void AddByte ( UINT8 ByteVal, UINT8 KeyByte ) /*++ Routine Description: This function is invoked by the parser when it determines that more raw IFR bytes should be emitted to the output stream. Here we just queue them up into an output buffer. Arguments: ByteVal - the raw byte to emit to the output IFR stream KeyByte - a value that can be used for debug. Returns: None --*/ ; void SetVarStoreId ( UINT16 VarStoreId ) /*++ Routine Description: This function is invoked by the parser when a variable is referenced in the VFR. Save the variable store (and set a flag) so that we can later determine if we need to emit a varstore-select or varstore-select-pair opcode. Arguments: VarStoreId - ID of the variable store referenced in the VFR Returns: None --*/ ; void SetSecondaryVarStoreId ( UINT16 VarStoreId ) /*++ Routine Description: This function is invoked by the parser when a secondary variable is referenced in the VFR. Save the variable store (and set a flag) so that we can later determine if we need to emit a varstore-select or varstore-pair opcode. Arguments: VarStoreId - ID of the variable store referenced in the VFR Returns: None --*/ ; /* */ private: int FlushQueue ( VOID ) /*++ Routine Description: This function is invoked to flush the internal IFR buffer. Arguments: None Returns: 0 always --*/ ; int IAddByte ( UINT8 ByteVal, UINT8 KeyByte, UINT32 LineNum ) /*++ Routine Description: This internal function is used to add actual IFR bytes to the output stream. Most other functions queue up the bytes in an internal buffer. Once they come here, there's no going back. Arguments: ByteVal - value to write to output KeyByte - key value tied to the byte -- useful for debug LineNum - line number from source file the byte resulted from Returns: 0 - if successful 1 - failed due to memory allocation failure --*/ ; /* */ private: IFR_BYTE *mIfrBytes; IFR_BYTE *mLastIfrByte; UINT32 mQueuedByteCount; UINT32 mBytesWritten; UINT32 mQueuedLineNum; UINT8 mQueuedBytes[MAX_QUEUE_COUNT]; UINT8 mQueuedKeyBytes[MAX_QUEUE_COUNT]; UINT8 mQueuedOpcodeByte; UINT32 mQueuedOpcodeByteValid; UINT16 mPrimaryVarStoreId; UINT8 mPrimaryVarStoreIdSet; UINT16 mSecondaryVarStoreId; UINT8 mSecondaryVarStoreIdSet; UINT16 mDefaultVarStoreId; }; #endif // #ifndef _VFR_SERVICES_H_