⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bisbasecode.h

📁 Next BIOS Source code : Extensible Firmware Interface
💻 H
📖 第 1 页 / 共 2 页
字号:
	//Non-volatile memory nvm.c items.
	UINT8*      flashData;           //A copy of the entire flash area.
	UINT32      flashDataLength;     //length of the data area.
	BIS_BOOLEAN flashDataChanged;    //The copy has changed.
	BIS_BOOLEAN doValidityCheck;     //Indicates whether the one time NVM validity check is
                                     // to be done in NVM_Open.
                                     
	BIS_BOOLEAN bisInUse;			 //Indicates that a BIS_Initialize has been done.
									 // No further BIS_Initialize requests will suceed
									 // until a BIS_shutdown is executed.
                                     
	EFI_BIS_PROTOCOL	bisInterface; //the public structure containing function pointers.

}
BISBC_INSTANCEDATA;


extern  EFI_BIS_PROTOCOL   *BISBC;

BISBC_INSTANCEDATA *getInstanceData( EFI_BIS_PROTOCOL *bisInterface );



//----------------------------------------------------------//
// BIS_APPINFO - this is the data structure pointed to by	//
//	the opaque BIS_APPLICATION_HANDLE						//
typedef
struct _BIS_APPINFO
{
    UINT32          	SizeOfStruct;       //size of this structure.
    UINT32          	LastError;          //errcode of last op.
    COLLECTION*     	memoryAllocations;  //tracks memory obtained by MEM_Alloc()
	NVM_AREA_HANDLE 	nvmHandle;          //used for NVM i/o ops.
    APP_CSSMINFO_PTR 	pCssmInfo;         //this apps cssm instance data.
	BISBC_INSTANCEDATA *efiInstanceData;
}
BIS_APPINFO, *BIS_APPINFO_PTR;

#define CAST_APP_HANDLE(h)   ((BIS_APPINFO*) h)
#define IS_APPINFO_VALID(i)  (i->SizeOfStruct == sizeof(BIS_APPINFO))
#define SET_LASTERROR(i,err) (i->LastError= err)


//----------------------------------------------------------//
//
// Memory mgt wrappers implemented in util\mem.c
//

void 		*MEM_malloc( BIS_APPINFO *appInfo,  UINT32 size );
BIS_BOOLEAN  MEM_free( BIS_APPINFO *appInfo,    void *memblock );
BIS_DATA_PTR MEM_allocBisData( BIS_APPINFO *appInfo,  UINT32 size );
void		 MEM_copy( UINT8 *dest, UINT8 *source, UINT32 byteLength );

void 		*x_malloc( UINT32 size );
void  		 x_free( void *memblock );
void 		*x_calloc( UINT32 num, UINT32 size );


        //
        // EFIBIS_BaseCodeModuleInit creates a COLLECTION named 'appInfoTrackingCollection'.
        // BIS_Initialize and BIS_Shutdowns us it to track BIS_APPINFO  objects.
        // These constants determine the initial size and expansion increment
        // for this collections.
#define APPINFO_COLLECTION_SIZE (16)
#define APPINFO_COLLECTION_INCR (16)


        //
        // BIS_Initialize creates a COLLECTION inside the BIS_APPINO struct
        // to track memory objects.
        // These constants determine the initial size and expansion increment
        // for these collections.

#define BIS_INIT_COLLECTION_SIZE (384)   //see note 1
#define BIS_INIT_COLLECTION_INCR (64)


//The following defs came from:
// Workfile: bis_priv.h
// Revision: 39

            //used by the dispatch function
#define     BIS_FUNCTION_MASK  (0x0000ffff)
#define     BIS_MAX_OPCODE     (BISOP_LAST&BIS_FUNCTION_MASK)


typedef UINT32  (*BIS_INTERNAL_FXN)( void* parmBlock );





			//----------------------------------------//
            //BIS API Internal FUNCTIONS Declarations //
			//----------------------------------------//

UINT32
    BIS_Initialize( BIS_INIT_PARMS *parmBlock );

UINT32
    BIS_Shutdown(   BIS_SHUTDOWN_PARMS *parmBlock );

UINT32
    BIS_Free(       BIS_FREE_PARMS *parmBlock );


UINT32
    BIS_GetBootObjectAuthorizationCertificate( BIS_GBOAC_PARMS *parmBlock );

UINT32
    BIS_GetBootObjectAuthorizationCheckFlag( BIS_GBOACF_PARMS *parmBlock );

UINT32
    BIS_GetBootObjectAuthorizationUpdateToken( BIS_GBOAUT_PARMS *parmBlock );


UINT32
    BIS_GetSigInfo( BIS_GSI_PARMS *parmBlock );


UINT32
    BIS_VerifyBootObject( BIS_VBO_PARMS *parmBlock );

UINT32
    BIS_VerifyObjectWithCredential( BIS_VOWC_PARMS *parmBlock );

UINT32
    BIS_UpdateBootObjectAuthorization( BIS_UBOA_PARMS *parmBlock );

//
// misc function prototypes.
//


BIS_STATUS
	GetSystemGuid( CSSM_GUID_PTR theSystemGuid );

EFI_STATUS
	sha1Digest(
	     BIS_APPINFO_PTR  appInfo
	    ,CSSM_DATA        dataBufs[]
	    ,UINT32           nbrDataBufs
	    ,BIS_DATA_PTR     *digestOut
	    );

int
	BIS_strcmp( UINT8 *s1, UINT8 *s2 );

int
	BIS_strncmp( UINT8 *s1, UINT8 *s2, UINT32 count);

int
	BIS_strlen( UINT8 *s1 );


//
// Define opcode symbols in terms of a efibis.h enum.

// This can probally be removed. There is a need to have all of the BISOPs
// defined ( handling incoming bis requests over the wire) Therefore all
// the BISOPs are defined at the beginning of this header file
//
//#define BISOP_UpdateBootObjectAuthorization   BisCallingFunctionUpdate
//#define BISOP_VerifyBootObject				  BisCallingFunctionVerify

BIS_STATUS
CallAuthorization(
    IN   UINT32           opCode,
    IN   BIS_DATA_PTR     credentials,
    IN   BIS_DATA_PTR     credentialsSigner,
    IN   BIS_DATA_PTR     dataObject,
    IN   BIS_DATA_PTR     reserved,
    OUT  BIS_BOOLEAN *    isAuthorized
    );



//These methods are usually accessed through the protocol interface
//but parmBlockAdaptors.c is part of the implementation of that interface
//and takes the liberty of calling the functions directly and so here are
//there prototype definitions which otherwise are undefined.

	EFI_STATUS
	EFI_BIS_GetBootObjectAuthorizationCheckFlag(
		IN  BIS_APPLICATION_HANDLE  AppHandle,        // From Initialize( ).
		OUT BOOLEAN                 *CheckIsRequired  // Value of check flag.
		);


	EFI_STATUS
	EFI_BIS_VerifyObjectWithCredential(
		IN  BIS_APPLICATION_HANDLE AppHandle,     //  From Initialize( ).
		IN  EFI_BIS_DATA           *Credentials,  //  Verification signed manifest.
		IN  EFI_BIS_DATA           *DataObject,   //  Boot object to verify.
		IN  EFI_BIS_DATA           *SectionName,  //  Name of credential section to use.
		IN  EFI_BIS_DATA           *AuthorityCertificate,  // Certificate for credentials.
		OUT BOOLEAN                *IsVerified    // Result of verifcation.
		);


	EFI_STATUS
	EFI_BIS_GetBootObjectAuthorizationCertificate(
	    IN  BIS_APPLICATION_HANDLE  AppHandle,      // From Initialize( ).
	    OUT EFI_BIS_DATA            **Certificate   // Pointer to certificate.
		);


	EFI_STATUS
	EFI_BIS_GetBootObjectAuthorizationUpdateToken(
	    IN  BIS_APPLICATION_HANDLE  AppHandle,      // From Initialize( ).
	    OUT EFI_BIS_DATA            **UpdateToken   // Pointer to update token.
		);




	//
	// BIS / EFI_BIS Status Code Mapping Functions.
	//

EFI_STATUS
mapBisToEfi(
    IN BIS_STATUS code
    );

BIS_STATUS
mapEfiToBis(
    IN EFI_STATUS code
);

EFI_STATUS  allocStatusCodeMaps();				//initialization fxn



    //-----------------------------------//
    // DEFAULT AUTH Method
    //-----------------------------------//




// Values for CallingFunction being passed in to the CheckCredentials function
typedef enum {
    BisCallingFunctionVerify,
    BisCallingFunctionUpdate
} EFI_BIS_CALLING_FUNCTION;


typedef
EFI_STATUS
(EFIAPI *EFI_BIS_DEFAULT_AUTH_CHECK_CREDENTIALS) (
    IN   EFI_BIS_DEFAULT_AUTH_INTERFACE  *This,
    IN   EFI_BIS_CALLING_FUNCTION        CallingFunction,
    IN   EFI_BIS_DATA                    *Credentials,
    IN   EFI_BIS_DATA                    *CredentialsSigner,
    IN   EFI_BIS_DATA                    *DataObject,
    IN   VOID                            *Reserved,
    OUT  BOOLEAN                         *IsAuthorized
    );

#define EFI_BIS_DEFAULT_AUTH_INTERFACE_REVISION 0x00010000

typedef struct _EFI_BIS_DEFAULT_AUTH_INTERFACE
{
    //member vars
    UINT64           Revision;
    VOID             *InstanceData;

    //Methods
    EFI_BIS_DEFAULT_AUTH_CHECK_CREDENTIALS   CheckCredentials;
}
EFI_BIS_DEFAULT_AUTH_INTERFACE;

EFI_STATUS
EFIBIS_InitAuthFxnModule(
	EFI_BIS_DEFAULT_AUTH_INTERFACE  **authInterface
    );


    //-----------------------------------//
    // EFI_BIS_PERSISTENCE_PROTOCOL
    //-----------------------------------//

#define EFI_BIS_PERSISTENCE_PROTOCOL   \
 { 0x0c63db00, 0x5429, 0x11d4, 0x98, 0x16, 0x00, 0xa0, 0xc9, 0x1f, 0xad, 0xcf }


typedef
EFI_STATUS
(EFIAPI  *EFI_BIS_PERSISTENCE_READ)
    (
    IN  EFI_BIS_PERSISTENCE_INTERFACE *This,
    OUT UINT8                         *Buffer,
    IN  VOID                          *Reserved
    );

typedef
EFI_STATUS
(EFIAPI  *EFI_BIS_PERSISTENCE_WRITE)
    (
    IN EFI_BIS_PERSISTENCE_INTERFACE *This,
    IN UINT8                         *Buffer,
    IN VOID                          *Reserved
    );

typedef
EFI_STATUS
(EFIAPI  *EFI_BIS_PERSISTENCE_GETLENGTH)
    (
    IN EFI_BIS_PERSISTENCE_INTERFACE *This,
    OUT UINT32                       *Length,
    IN  VOID                         *Reserved
    );


#define EFI_BIS_PERSISTENCE_INTERFACE_REVISION 0x00010000

typedef struct _EFI_BIS_PERSISTENCE_INTERFACE
{
    //member vars
    UINT64           Revision;
    VOID             *InstanceData;

    //Methods
    EFI_BIS_PERSISTENCE_READ           Read;
    EFI_BIS_PERSISTENCE_WRITE          Write;
    EFI_BIS_PERSISTENCE_GETLENGTH      GetLength;

}
EFI_BIS_PERSISTENCE_INTERFACE;

EFI_STATUS
EFIBIS_InitPersistModule(
    EFI_BIS_PERSISTENCE_INTERFACE   **persistInterface
    );
    

//
// Define SMBIOS tables.
//
#pragma pack(1)
typedef struct {
    UINT8   AnchorString[4];
    UINT8   EntryPointStructureChecksum;
    UINT8   EntryPointLength;
    UINT8   MajorVersion;
    UINT8   MinorVersion;
    UINT16  MaxStructureSize;
    UINT8   EntryPointRevision;
    UINT8   FormattedArea[5];
    UINT8   IntermediateAnchorString[5];
    UINT8   IntermediateChecksum;
    UINT16  TableLength;
    UINT32  TableAddress;
    UINT16  NumberOfSmbiosStructures;
    UINT8   SmbiosBcdRevision;
} SMBIOS_STRUCTURE_TABLE;

//
// Please note that SMBIOS structures can be odd byte aligned since the
//  unformated section of each record is a set of arbitrary size strings.
//

typedef struct {
    UINT8   Type;
    UINT8   Length;
    UINT8   Handle[2];
} SMBIOS_HEADER;

typedef UINT8   SMBIOS_STRING;

typedef struct {
    SMBIOS_HEADER   Hdr;
    SMBIOS_STRING   Vendor;
    SMBIOS_STRING   BiosVersion;
    UINT8           BiosSegment[2];
    SMBIOS_STRING   BiosReleaseDate;
    UINT8           BiosSize;
    UINT8           BiosCharacteristics[8];
} SMBIOS_TYPE0;

typedef struct {
    SMBIOS_HEADER   Hdr;
    SMBIOS_STRING   Manufacturer;
    SMBIOS_STRING   ProductName;
    SMBIOS_STRING   Version;
    SMBIOS_STRING   SerialNumber;

    //
    // always byte copy this data to prevent alignment faults!
    //
    EFI_GUID        Uuid;
    
    UINT8           WakeUpType;
} SMBIOS_TYPE1;

typedef struct {
    SMBIOS_HEADER   Hdr;
    SMBIOS_STRING   Manufacturer;
    SMBIOS_STRING   ProductName;
    SMBIOS_STRING   Version;
    SMBIOS_STRING   SerialNumber;
} SMBIOS_TYPE2;

typedef struct {
    SMBIOS_HEADER   Hdr;
    SMBIOS_STRING   Manufacturer;
    UINT8           Type;
    SMBIOS_STRING   Version;
    SMBIOS_STRING   SerialNumber;
    SMBIOS_STRING   AssetTag;
    UINT8           BootupState;
    UINT8           PowerSupplyState;
    UINT8           ThermalState;
    UINT8           SecurityStatus;
    UINT8           OemDefined[4];
} SMBIOS_TYPE3;

typedef struct {
    SMBIOS_HEADER   Hdr;
    UINT8           Socket;
    UINT8           ProcessorType;
    UINT8           ProcessorFamily;
    SMBIOS_STRING   ProcessorManufacture;
    UINT8           ProcessorId[8];
    SMBIOS_STRING   ProcessorVersion;
    UINT8           Voltage;
    UINT8           ExternalClock[2];
    UINT8           MaxSpeed[2];
    UINT8           CurrentSpeed[2];
    UINT8           Status;
    UINT8           ProcessorUpgrade;
    UINT8           L1CacheHandle[2];
    UINT8           L2CacheHandle[2];
    UINT8           L3CacheHandle[2];
} SMBIOS_TYPE4;

typedef union {
    SMBIOS_HEADER   *Hdr;
    SMBIOS_TYPE0    *Type0;
    SMBIOS_TYPE1    *Type1;
    SMBIOS_TYPE2    *Type2;
    SMBIOS_TYPE3    *Type3;
    SMBIOS_TYPE4    *Type4;
    UINT8           *Raw;
} SMBIOS_STRUCTURE_POINTER;
#pragma pack()



#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -