git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1676 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			228 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			228 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*++
 | 
						|
 | 
						|
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_
 |