// // diskpart.h // // // Alignmnet macros // #if defined (i386) # define UNALIGNED #elif defined (_IA64_) # define UNALIGNED __unaligned #elif defined (ALPHA) # define UNALIGNED __unaligned #endif // // C_ASSERT() can be used to perform many compile-time assertions: // type sizes, field offsets, etc. // // An assertion failure results in error C2118: negative subscript. // #define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1] #include "efi.h" #include "efilib.h" #include "msg.h" #include "scriptmsg.h" #include "gpt.h" #include "mbr.h" // // Debug Control // #define DEBUG_NONE 0 #define DEBUG_ERRPRINT 1 #define DEBUG_ARGPRINT 2 #define DEBUG_OPPROMPT 3 extern UINTN DebugLevel; // // Externs // extern EFI_GUID BlockIOProtocol; extern EFI_STATUS status; // always save the last error status // by using this global extern INTN AllocCount; // track DoFree/DoAlloc extern EFI_HANDLE *DiskHandleList; extern INTN SelectedDisk; BOOLEAN ScriptList(CHAR16 **Token); // // Prototypes for all fo the workers for main parser in DiskPart // Declared here so that scripts can call them // BOOLEAN CmdAbout(CHAR16 **Token); BOOLEAN CmdList(CHAR16 **Token); BOOLEAN CmdSelect(CHAR16 **Token); BOOLEAN CmdInspect(CHAR16 **Token); BOOLEAN CmdClean(CHAR16 **Token); BOOLEAN CmdNew(CHAR16 **Token); BOOLEAN CmdFix(CHAR16 **Token); BOOLEAN CmdCreate(CHAR16 **Token); BOOLEAN CmdDelete(CHAR16 **Token); BOOLEAN CmdHelp(CHAR16 **Token); BOOLEAN CmdExit(CHAR16 **Token); BOOLEAN CmdSymbols(CHAR16 **Token); BOOLEAN CmdRemark(CHAR16 **Token); BOOLEAN CmdMake(CHAR16 **Token); BOOLEAN CmdDebug(CHAR16 **Token); // // Worker function type // typedef BOOLEAN (*PSCRIPT_FUNCTION)( CHAR16 **Token ); // // The script table structure // typedef struct { CHAR16 *Name; PSCRIPT_FUNCTION Function; CHAR16 *HelpSummary; } SCRIPT_ENTRY; extern SCRIPT_ENTRY ScriptTable[]; // // Routines that will need to be ported // EFI_STATUS FindPartitionableDevices( EFI_HANDLE **ReturnBuffer, UINTN *Count ); // // Utility/Wrapper routines // UINT32 GetBlockSize(EFI_HANDLE Handle); UINT64 GetDiskSize(EFI_HANDLE Handle); VOID DoFree(VOID *Buffer); VOID *DoAllocate(UINTN Size); UINT32 GetCRC32(VOID *Buffer, UINT32 Length); EFI_GUID GetGUID(); EFI_STATUS WriteBlock( EFI_HANDLE DiskHandle, VOID *Buffer, UINT64 BlockAddress, UINT32 BlockCount ); EFI_STATUS ReadBlock( EFI_HANDLE DiskHandle, VOID *Buffer, UINT64 BlockAddress, UINT32 Size ); EFI_STATUS FlushBlock( EFI_HANDLE DiskHandle ); VOID TerribleError( CHAR16 *String ); // // Misc useful stuff // VOID PrintHelp(CHAR16 *HelpText[]); EFI_STATUS GetGuidFromString(CHAR16 *String, EFI_GUID *Guid); INTN HexChar(CHAR16 Ch); UINT64 Xtoi64(CHAR16 *String); UINT64 Atoi64(CHAR16 *String); VOID PrintGuidString(EFI_GUID *Guid); BOOLEAN IsIn(CHAR16 What, CHAR16 *InWhat); VOID Tokenize(CHAR16 *CommandLine, CHAR16 **Token); #define COMMAND_LINE_MAX 512 #define TOKEN_COUNT_MAX 256 // most possible in 512 chars #define NUL ((CHAR16)0) // // Some EFI functions are just a rename of 'C' lib functions, // so they can just be macroed back. // Somebody will need to check this out... // #if 0 #define CompareMem(a, b, c) memcmp(a, b, c) #define ZeroMem(a, b) memset(a, 0, b) // // This is a fiction, Print is NOT printf, but it's close // enough that everything or almost everything will work... // #define Print printf #endif // // Functions that allow the Guid Generator to be used // VOID InitGuid(VOID); VOID CreateGuid(EFI_GUID *guid); // // Status Symbols // #define DISK_ERROR 0 #define DISK_RAW 1 #define DISK_MBR 2 #define DISK_GPT 4 #define DISK_GPT_UPD 6 #define DISK_GPT_BAD 7