📄 bisbasecode.h
字号:
//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 + -