From 5d58b46bbe8e169af92ceb5d33d8c52b0576f8d0 Mon Sep 17 00:00:00 2001 From: Thomas Oltmann Date: Sat, 15 Mar 2025 18:48:09 +0100 Subject: [PATCH] Set up a new repo based on BOOTBOOT sources --- include/bootboot.h | 155 +++ x86_64-efi/.gitignore | 2 + x86_64-efi/Makefile | 35 + x86_64-efi/bootnetboot.c | 2193 +++++++++++++++++++++++++++++++++ x86_64-efi/crt0-efi-x86_64.o | Bin 0 -> 1328 bytes x86_64-efi/efirom.c | 278 +++++ x86_64-efi/elf_x86_64_efi.lds | 74 ++ x86_64-efi/fs.h | 356 ++++++ x86_64-efi/libefi.a | Bin 0 -> 659244 bytes x86_64-efi/libgnuefi.a | Bin 0 -> 18618 bytes x86_64-efi/smp.S | 112 ++ x86_64-efi/tinf.h | 117 ++ x86_64-efi/tinflate.c | 475 +++++++ 13 files changed, 3797 insertions(+) create mode 100644 include/bootboot.h create mode 100644 x86_64-efi/.gitignore create mode 100644 x86_64-efi/Makefile create mode 100644 x86_64-efi/bootnetboot.c create mode 100644 x86_64-efi/crt0-efi-x86_64.o create mode 100644 x86_64-efi/efirom.c create mode 100644 x86_64-efi/elf_x86_64_efi.lds create mode 100644 x86_64-efi/fs.h create mode 100644 x86_64-efi/libefi.a create mode 100644 x86_64-efi/libgnuefi.a create mode 100644 x86_64-efi/smp.S create mode 100644 x86_64-efi/tinf.h create mode 100644 x86_64-efi/tinflate.c diff --git a/include/bootboot.h b/include/bootboot.h new file mode 100644 index 0000000..406023f --- /dev/null +++ b/include/bootboot.h @@ -0,0 +1,155 @@ +/* + * bootboot.h + * https://gitlab.com/bztsrc/bootboot + * + * Copyright (C) 2017 - 2021 bzt (bztsrc@gitlab) + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * This file is part of the BOOTBOOT Protocol package. + * @brief The BOOTBOOT structure + * + */ + +#ifndef _BOOTBOOT_H_ +#define _BOOTBOOT_H_ + +#ifdef __cplusplus +extern "C" { +#endif +#ifndef _MSC_VER +#define _pack __attribute__((packed)) +#else +#define _pack +#pragma pack(push) +#pragma pack(1) +#endif + +#define BOOTBOOT_MAGIC "BOOT" + +/* default virtual addresses for level 0 and 1 static loaders */ +#define BOOTBOOT_MMIO 0xfffffffff8000000 /* memory mapped IO virtual address */ +#define BOOTBOOT_FB 0xfffffffffc000000 /* frame buffer virtual address */ +#define BOOTBOOT_INFO 0xffffffffffe00000 /* bootboot struct virtual address */ +#define BOOTBOOT_ENV 0xffffffffffe01000 /* environment string virtual address */ +#define BOOTBOOT_CORE 0xffffffffffe02000 /* core loadable segment start */ + +/* minimum protocol level: + * hardcoded kernel name, static kernel memory addresses */ +#define PROTOCOL_MINIMAL 0 +/* static protocol level: + * kernel name parsed from environment, static kernel memory addresses */ +#define PROTOCOL_STATIC 1 +/* dynamic protocol level: + * kernel name parsed, kernel memory addresses from ELF or PE symbols */ +#define PROTOCOL_DYNAMIC 2 +/* big-endian flag */ +#define PROTOCOL_BIGENDIAN 0x80 + +/* loader types, just informational */ +#define LOADER_BIOS (0<<2) +#define LOADER_UEFI (1<<2) +#define LOADER_RPI (2<<2) +#define LOADER_COREBOOT (3<<2) + +/* framebuffer pixel format, only 32 bits supported */ +#define FB_ARGB 0 +#define FB_RGBA 1 +#define FB_ABGR 2 +#define FB_BGRA 3 + +/* mmap entry, type is stored in least significant tetrad (half byte) of size + * this means size described in 16 byte units (not a problem, most modern + * firmware report memory in pages, 4096 byte units anyway). */ +typedef struct { + uint64_t ptr; + uint64_t size; +} _pack MMapEnt; +#define MMapEnt_Ptr(a) ((a)->ptr) +#define MMapEnt_Size(a) ((a)->size & 0xFFFFFFFFFFFFFFF0) +#define MMapEnt_Type(a) ((a)->size & 0xF) +#define MMapEnt_IsFree(a) (((a)->size&0xF)==1) + +#define MMAP_USED 0 /* don't use. Reserved or unknown regions */ +#define MMAP_FREE 1 /* usable memory */ +#define MMAP_ACPI 2 /* acpi memory, volatile and non-volatile as well */ +#define MMAP_MMIO 3 /* memory mapped IO region */ + +#define INITRD_MAXSIZE 16 /* Mb */ + +typedef struct { + /* first 64 bytes is platform independent */ + uint8_t magic[4]; /* 'BOOT' magic */ + uint32_t size; /* length of bootboot structure, minimum 128 */ + uint8_t protocol; /* 1, static addresses, see PROTOCOL_* and LOADER_* above */ + uint8_t fb_type; /* framebuffer type, see FB_* above */ + uint16_t numcores; /* number of processor cores */ + uint16_t bspid; /* Bootsrap processor ID (Local APIC Id on x86_64) */ + int16_t timezone; /* in minutes -1440..1440 */ + uint8_t datetime[8]; /* in BCD yyyymmddhhiiss UTC (independent to timezone) */ + uint64_t initrd_ptr; /* ramdisk image position and size */ + uint64_t initrd_size; + uint64_t fb_ptr; /* framebuffer pointer and dimensions */ + uint32_t fb_size; + uint32_t fb_width; + uint32_t fb_height; + uint32_t fb_scanline; + + /* the rest (64 bytes) is platform specific */ + union { + struct { + uint64_t acpi_ptr; + uint64_t smbi_ptr; + uint64_t efi_ptr; + uint64_t mp_ptr; + uint64_t unused0; + uint64_t unused1; + uint64_t unused2; + uint64_t unused3; + } x86_64; + struct { + uint64_t acpi_ptr; + uint64_t mmio_ptr; + uint64_t efi_ptr; + uint64_t unused0; + uint64_t unused1; + uint64_t unused2; + uint64_t unused3; + uint64_t unused4; + } aarch64; + } arch; + + /* from 128th byte, MMapEnt[], more records may follow */ + MMapEnt mmap; + /* use like this: + * MMapEnt *mmap_ent = &bootboot.mmap; mmap_ent++; + * until you reach bootboot->size, while(mmap_ent < bootboot + bootboot->size) */ +} _pack BOOTBOOT; + +#ifdef _MSC_VER +#pragma pack(pop) +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/x86_64-efi/.gitignore b/x86_64-efi/.gitignore new file mode 100644 index 0000000..9faefab --- /dev/null +++ b/x86_64-efi/.gitignore @@ -0,0 +1,2 @@ +*.o +!crt0-efi-x86_64.o diff --git a/x86_64-efi/Makefile b/x86_64-efi/Makefile new file mode 100644 index 0000000..7ae037a --- /dev/null +++ b/x86_64-efi/Makefile @@ -0,0 +1,35 @@ +ARCH = $(shell uname -m | sed s,i[3456789]86,ia32,) +GNUEFI_INCLUDES = -I/usr/include -I. -I/usr/include/efi -I/usr/include/efi/$(ARCH) -I/usr/include/efi/protocol -I../include +GNUEFI_CRT_OBJS = crt0-efi-$(ARCH).o +GNUEFI_LDS = elf_$(ARCH)_efi.lds + +CC ?= gcc +LD ?= ld +OBJCOPY ?= objcopy +CFLAGS = -mno-red-zone -mno-mmx -mno-sse -O2 -fpic -pedantic -Wall -Wextra -Werror -fshort-wchar -fno-strict-aliasing -ffreestanding -fno-stack-protector -fno-stack-check -DCONFIG_$(ARCH) -DGNU_EFI_USE_MS_ABI --std=c11 + +LDFLAGS = -nostdlib +LDFLAGS += -shared -Bsymbolic -L. $(GNUEFI_CRT_OBJS) + +TARGET = bootnetboot.efi + +all: tinflate.o smp.o $(TARGET) + +%.efi: %.so + @$(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel -j .rela -j .rel.* -j .rela.* -j .reloc --target efi-app-$(ARCH) --subsystem=10 $^ $@ + @printf "BOOTBOOT Loader do not " | dd conv=notrunc of=$(TARGET) bs=1 seek=78 1>/dev/null 2>/dev/null + @$(CC) $(GNUEFI_INCLUDES) -Wall -fshort-wchar efirom.c -o efirom $(LIBS) + @./efirom $(TARGET) bootnetboot.rom || true + +%.so: %.o + @$(LD) $(LDFLAGS) tinflate.o smp.o $^ -o $@ -lefi -lgnuefi -T $(GNUEFI_LDS) + +%.o: %.c + @$(CC) $(GNUEFI_INCLUDES) $(CFLAGS) -c $< -o $@ + +%.o: %.S + @$(CC) $(GNUEFI_INCLUDES) $(CFLAGS) -c $< -o $@ + +clean: + @rm bootboot.o $(TARGET) $(TARGET) bootnetboot.rom *.so *.efi efirom tinflate.o smp.o 2>/dev/null || true + diff --git a/x86_64-efi/bootnetboot.c b/x86_64-efi/bootnetboot.c new file mode 100644 index 0000000..ff1864d --- /dev/null +++ b/x86_64-efi/bootnetboot.c @@ -0,0 +1,2193 @@ +/* + * x86_64-efi/bootboot.c + * + * Copyright (C) 2017 - 2021 bzt (bztsrc@gitlab) + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * This file is part of the BOOTBOOT Protocol package. + * @brief Booting code for EFI + * + */ + +#define BBDEBUG 1 +//#define GOP_DEBUG BBDEBUG +#define USE_MP_SERVICES 0 /* without fallback to ACPI parser and APIC INIT + SIPI */ + +#if BBDEBUG +#define DBG(fmt, ...) do{Print(fmt,__VA_ARGS__); }while(0); +#else +#define DBG(fmt, ...) +#endif + +// get UEFI functions and environment +#include +#include +#include +#include +#include +#include "tinf.h" +// get BOOTBOOT specific stuff +#include + +/*** ELF64 defines and structs ***/ +#define ELFMAG "\177ELF" +#define SELFMAG 4 +#define EI_CLASS 4 /* File class byte index */ +#define ELFCLASS64 2 /* 64-bit objects */ +#define EI_DATA 5 /* Data encoding byte index */ +#define ELFDATA2LSB 1 /* 2's complement, little endian */ +#define PT_LOAD 1 /* Loadable program segment */ +#define EM_X86_64 62 /* AMD x86-64 architecture */ + +typedef struct +{ + unsigned char e_ident[16];/* Magic number and other info */ + UINT16 e_type; /* Object file type */ + UINT16 e_machine; /* Architecture */ + UINT32 e_version; /* Object file version */ + UINT64 e_entry; /* Entry point virtual address */ + UINT64 e_phoff; /* Program header table file offset */ + UINT64 e_shoff; /* Section header table file offset */ + UINT32 e_flags; /* Processor-specific flags */ + UINT16 e_ehsize; /* ELF header size in bytes */ + UINT16 e_phentsize; /* Program header table entry size */ + UINT16 e_phnum; /* Program header table entry count */ + UINT16 e_shentsize; /* Section header table entry size */ + UINT16 e_shnum; /* Section header table entry count */ + UINT16 e_shstrndx; /* Section header string table index */ +} Elf64_Ehdr; + +typedef struct +{ + UINT32 p_type; /* Segment type */ + UINT32 p_flags; /* Segment flags */ + UINT64 p_offset; /* Segment file offset */ + UINT64 p_vaddr; /* Segment virtual address */ + UINT64 p_paddr; /* Segment physical address */ + UINT64 p_filesz; /* Segment size in file */ + UINT64 p_memsz; /* Segment size in memory */ + UINT64 p_align; /* Segment alignment */ +} Elf64_Phdr; + +typedef struct +{ + UINT32 sh_name; /* Section name (string tbl index) */ + UINT32 sh_type; /* Section type */ + UINT64 sh_flags; /* Section flags */ + UINT64 sh_addr; /* Section virtual addr at execution */ + UINT64 sh_offset; /* Section file offset */ + UINT64 sh_size; /* Section size in bytes */ + UINT32 sh_link; /* Link to another section */ + UINT32 sh_info; /* Additional section information */ + UINT64 sh_addralign; /* Section alignment */ + UINT64 sh_entsize; /* Entry size if section holds table */ +} Elf64_Shdr; + +typedef struct +{ + UINT32 st_name; /* Symbol name (string tbl index) */ + UINT8 st_info; /* Symbol type and binding */ + UINT8 st_other; /* Symbol visibility */ + UINT16 st_shndx; /* Section index */ + UINT64 st_value; /* Symbol value */ + UINT64 st_size; /* Symbol size */ +} Elf64_Sym; + +/*** PE32+ defines and structs ***/ +#define MZ_MAGIC 0x5a4d /* "MZ" */ +#define PE_MAGIC 0x00004550 /* "PE\0\0" */ +#define IMAGE_FILE_MACHINE_AMD64 0x8664 /* AMD x86_64 architecture */ +#define PE_OPT_MAGIC_PE32PLUS 0x020b /* PE32+ format */ +typedef struct +{ + UINT16 magic; /* MZ magic */ + UINT16 reserved[29]; /* reserved */ + UINT32 peaddr; /* address of pe header */ +} mz_hdr; + +typedef struct { + UINT32 magic; /* PE magic */ + UINT16 machine; /* machine type */ + UINT16 sections; /* number of sections */ + UINT32 timestamp; /* time_t */ + UINT32 sym_table; /* symbol table offset */ + INT32 numsym; /* number of symbols */ + UINT16 opt_hdr_size; /* size of optional header */ + UINT16 flags; /* flags */ + UINT16 file_type; /* file type, PE32PLUS magic */ + UINT8 ld_major; /* linker major version */ + UINT8 ld_minor; /* linker minor version */ + UINT32 text_size; /* size of text section(s) */ + UINT32 data_size; /* size of data section(s) */ + UINT32 bss_size; /* size of bss section(s) */ + INT32 entry_point; /* file offset of entry point */ + INT32 code_base; /* relative code addr in ram */ +} pe_hdr; + +typedef struct { + UINT32 iszero; /* if this is not zero, then iszero+nameoffs gives UTF-8 string */ + UINT32 nameoffs; + INT32 value; /* value of the symbol */ + UINT16 section; /* section it belongs to */ + UINT16 type; /* symbol type */ + UINT8 storclass; /* storage class */ + UINT8 auxsyms; /* number of pe_sym records following */ +} pe_sym; + +/*** EFI defines and structs ***/ +struct EFI_SIMPLE_FILE_SYSTEM_PROTOCOL; +struct EFI_FILE_PROTOCOL; + +#if USE_MP_SERVICES +#ifndef EFI_MP_SERVICES_PROTOCOL_GUID +#define EFI_MP_SERVICES_PROTOCOL_GUID \ + { 0x3fdda605, 0xa76e, 0x4f46, {0xad, 0x29, 0x12, 0xf4, 0x53, 0x1b, 0x3d, 0x08} } +typedef struct _EFI_MP_SERVICES_PROTOCOL EFI_MP_SERVICES_PROTOCOL; + +#define PROCESSOR_AS_BSP_BIT 0x00000001 + +typedef struct { + UINT64 ProcessorId; + UINT32 StatusFlag; +} EFI_PROCESSOR_INFORMATION; + +typedef +EFI_STATUS +(EFIAPI *EFI_MP_SERVICES_DUMMY)( + IN EFI_MP_SERVICES_PROTOCOL *This + ); + +typedef +VOID +(EFIAPI *EFI_AP_PROCEDURE)( + IN OUT VOID *Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_MP_SERVICES_GET_NUMBER_OF_PROCESSORS)( + IN EFI_MP_SERVICES_PROTOCOL *This, + OUT UINTN *NumberOfProcessors, + OUT UINTN *NumberOfEnabledProcessors + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_MP_SERVICES_GET_PROCESSOR_INFO)( + IN EFI_MP_SERVICES_PROTOCOL *This, + IN UINTN ProcessorNumber, + OUT EFI_PROCESSOR_INFORMATION *ProcessorInfoBuffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_MP_SERVICES_STARTUP_THIS_AP)( + IN EFI_MP_SERVICES_PROTOCOL *This, + IN EFI_AP_PROCEDURE Procedure, + IN UINTN ProcessorNumber, + IN EFI_EVENT WaitEvent OPTIONAL, + IN UINTN TimeoutInMicroseconds, + IN VOID *ProcedureArgument OPTIONAL, + OUT BOOLEAN *Finished OPTIONAL + ); + +struct _EFI_MP_SERVICES_PROTOCOL { + EFI_MP_SERVICES_GET_NUMBER_OF_PROCESSORS GetNumberOfProcessors; + EFI_MP_SERVICES_GET_PROCESSOR_INFO GetProcessorInfo; + EFI_MP_SERVICES_DUMMY StartupAllAPs; + EFI_MP_SERVICES_STARTUP_THIS_AP StartupThisAP; + EFI_MP_SERVICES_DUMMY SwitchBSP; + EFI_MP_SERVICES_DUMMY EnableDisableAP; + EFI_MP_SERVICES_DUMMY WhoAmI; +}; +#endif +#else +extern void ap_trampoline(); +UINT16 lapic_ids[1024]; +UINT64 lapic_addr=0; +#endif + +typedef +EFI_STATUS +(EFIAPI *EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME)( + IN struct EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, + OUT struct EFI_FILE_PROTOCOL **Root + ); + +/* Intel EFI headers has simple file protocol, but not GNU EFI */ +#ifndef EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION +typedef struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL { + UINT64 Revision; + EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME OpenVolume; +} EFI_SIMPLE_FILE_SYSTEM_PROTOCOL; + +typedef struct _EFI_FILE_PROTOCOL { + UINT64 Revision; + EFI_FILE_OPEN Open; + EFI_FILE_CLOSE Close; + EFI_FILE_DELETE Delete; + EFI_FILE_READ Read; + EFI_FILE_WRITE Write; + EFI_FILE_GET_POSITION GetPosition; + EFI_FILE_SET_POSITION SetPosition; + EFI_FILE_GET_INFO GetInfo; + EFI_FILE_SET_INFO SetInfo; + EFI_FILE_FLUSH Flush; +} EFI_FILE_PROTOCOL; +#endif + +#ifndef EFI_PCI_OPTION_ROM_TABLE_GUID +#define EFI_PCI_OPTION_ROM_TABLE_GUID \ + { 0x7462660f, 0x1cbd, 0x48da, {0xad, 0x11, 0x91, 0x71, 0x79, 0x13, 0x83, 0x1c} } +typedef struct { + EFI_PHYSICAL_ADDRESS RomAddress; + EFI_MEMORY_TYPE MemoryType; + UINT32 RomLength; + UINT32 Seg; + UINT8 Bus; + UINT8 Dev; + UINT8 Func; + BOOLEAN ExecutedLegacyBiosImage; + BOOLEAN DontLoadEfiRom; +} EFI_PCI_OPTION_ROM_DESCRIPTOR; + +typedef struct { + UINT64 PciOptionRomCount; + EFI_PCI_OPTION_ROM_DESCRIPTOR *PciOptionRomDescriptors; +} EFI_PCI_OPTION_ROM_TABLE; +#endif + +#ifndef EFI_SERIAL_IO_PROTOCOL_GUID +#define EFI_SERIAL_IO_PROTOCOL_GUID \ + { 0xBB25CF6F, 0xF1D4, 0x11D2, {0x9A, 0x0C, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0xFD} } + +typedef enum { + DefaultParity, + NoParity, + EvenParity, + OddParity, + MarkParity, + SpaceParity +} EFI_PARITY_TYPE; + +typedef enum { + DefaultStopBits, + OneStopBit, // 1 stop bit + OneFiveStopBits, // 1.5 stop bits + TwoStopBits // 2 stop bits +} EFI_STOP_BITS_TYPE; + +typedef +EFI_STATUS +(EFIAPI *EFI_SERIAL_DUMMY)( + IN EFI_SERIAL_IO_PROTOCOL *This + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SERIAL_SET_ATTRIBUTES) ( + IN struct _EFI_SERIAL_IO_PROTOCOL *This, + IN UINT64 BaudRate, + IN UINT32 ReceiveFifoDepth, + IN UINT32 Timeout, + IN EFI_PARITY_TYPE Parity, + IN UINT8 DataBits, + IN EFI_STOP_BITS_TYPE StopBits + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SERIAL_WRITE) ( + IN struct _EFI_SERIAL_IO_PROTOCOL *This, + IN OUT UINTN *BufferSize, + IN VOID *Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SERIAL_READ) ( + IN struct _EFI_SERIAL_IO_PROTOCOL *This, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer + ); + +typedef struct _EFI_SERIAL_IO_PROTOCOL { + UINT32 Revision; + EFI_SERIAL_DUMMY Reset; + EFI_SERIAL_SET_ATTRIBUTES SetAttributes; + EFI_SERIAL_DUMMY SetControl; + EFI_SERIAL_DUMMY GetControl; + EFI_SERIAL_WRITE Write; + EFI_SERIAL_READ Read; +} EFI_SERIAL_IO_PROTOCOL; +#endif + +/*** other defines and structs ***/ +typedef struct { + UINT8 magic[8]; + UINT8 chksum; + CHAR8 oemid[6]; + UINT8 revision; + UINT32 rsdt; + UINT32 length; + UINT64 xsdt; + UINT32 echksum; +} __attribute__((packed)) ACPI_RSDPTR; + +#define PAGESIZE 4096 + +/** + * return type for fs drivers + */ +typedef struct { + UINT8 *ptr; + UINTN size; +} file_t; + +/*** common variables ***/ +file_t env; // environment file descriptor +file_t initrd; // initrd file descriptor +file_t core; // kernel file descriptor +BOOTBOOT *bootboot; // the BOOTBOOT structure +UINT64 *paging; // paging table for MMU +UINT64 entrypoint; // kernel entry point +UINT64 fb_addr = BOOTBOOT_FB; // virtual addresses +UINT64 bb_addr = BOOTBOOT_INFO; +UINT64 env_addr= BOOTBOOT_ENV; +UINT64 core_addr=BOOTBOOT_CORE; + +UINT64 initstack = 1024; + +EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Volume; +EFI_FILE_HANDLE RootDir; +EFI_FILE_PROTOCOL *Root; +SIMPLE_INPUT_INTERFACE *CI; +unsigned char *kne, nosmp=0; +volatile char bsp_done=0, ap_done=0; + +// default environment variables. M$ states that 1024x768 must be supported +int reqwidth = 1024, reqheight = 768; +char *kernelname="sys/core"; + +// alternative environment name +char *cfgname="sys/config"; + +/** + * SHA-256 + */ +typedef struct { + UINT8 d[64]; + UINT32 l; + UINT32 b[2]; + UINT32 s[8]; +} SHA256_CTX; +#define SHA_ADD(a,b,c) if(a>0xffffffff-(c))b++;a+=c; +#define SHA_ROTL(a,b) (((a)<<(b))|((a)>>(32-(b)))) +#define SHA_ROTR(a,b) (((a)>>(b))|((a)<<(32-(b)))) +#define SHA_CH(x,y,z) (((x)&(y))^(~(x)&(z))) +#define SHA_MAJ(x,y,z) (((x)&(y))^((x)&(z))^((y)&(z))) +#define SHA_EP0(x) (SHA_ROTR(x,2)^SHA_ROTR(x,13)^SHA_ROTR(x,22)) +#define SHA_EP1(x) (SHA_ROTR(x,6)^SHA_ROTR(x,11)^SHA_ROTR(x,25)) +#define SHA_SIG0(x) (SHA_ROTR(x,7)^SHA_ROTR(x,18)^((x)>>3)) +#define SHA_SIG1(x) (SHA_ROTR(x,17)^SHA_ROTR(x,19)^((x)>>10)) +static UINT32 sha256_k[64]={ + 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5, + 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174, + 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da, + 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967, + 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85, + 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070, + 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3, + 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 +}; +void sha256_t(SHA256_CTX *ctx) +{ + UINT32 a,b,c,d,e,f,g,h,i,j,t1,t2,m[64]; + for(i=0,j=0;i<16;i++,j+=4) m[i]=(ctx->d[j]<<24)|(ctx->d[j+1]<<16)|(ctx->d[j+2]<<8)|(ctx->d[j+3]); + for(;i<64;i++) m[i]=SHA_SIG1(m[i-2])+m[i-7]+SHA_SIG0(m[i-15])+m[i-16]; + a=ctx->s[0];b=ctx->s[1];c=ctx->s[2];d=ctx->s[3]; + e=ctx->s[4];f=ctx->s[5];g=ctx->s[6];h=ctx->s[7]; + for(i=0;i<64;i++) { + t1=h+SHA_EP1(e)+SHA_CH(e,f,g)+sha256_k[i]+m[i]; + t2=SHA_EP0(a)+SHA_MAJ(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2; + } + ctx->s[0]+=a;ctx->s[1]+=b;ctx->s[2]+=c;ctx->s[3]+=d; + ctx->s[4]+=e;ctx->s[5]+=f;ctx->s[6]+=g;ctx->s[7]+=h; +} +void SHA256_Init(SHA256_CTX *ctx) +{ + ctx->l=0;ctx->b[0]=ctx->b[1]=0; + ctx->s[0]=0x6a09e667;ctx->s[1]=0xbb67ae85;ctx->s[2]=0x3c6ef372;ctx->s[3]=0xa54ff53a; + ctx->s[4]=0x510e527f;ctx->s[5]=0x9b05688c;ctx->s[6]=0x1f83d9ab;ctx->s[7]=0x5be0cd19; +} +void SHA256_Update(SHA256_CTX *ctx, const void *data, int len) +{ + UINT8 *d=(UINT8 *)data; + for(;len--;d++) { + ctx->d[ctx->l++]=*d; + if(ctx->l==64) {sha256_t(ctx);SHA_ADD(ctx->b[0],ctx->b[1],512);ctx->l=0;} + } +} +void SHA256_Final(unsigned char *h, SHA256_CTX *ctx) +{ + UINT32 i=ctx->l; + ctx->d[i++]=0x80; + if(ctx->l<56) {while(i<56) ctx->d[i++]=0x00;} + else {while(i<64) ctx->d[i++]=0x00;sha256_t(ctx);ZeroMem(ctx->d,56);} + SHA_ADD(ctx->b[0],ctx->b[1],ctx->l*8); + ctx->d[63]=ctx->b[0];ctx->d[62]=ctx->b[0]>>8;ctx->d[61]=ctx->b[0]>>16;ctx->d[60]=ctx->b[0]>>24; + ctx->d[59]=ctx->b[1];ctx->d[58]=ctx->b[1]>>8;ctx->d[57]=ctx->b[1]>>16;ctx->d[56]=ctx->b[1]>>24; + sha256_t(ctx); + for(i=0;i<4;i++) { + h[i] =(ctx->s[0]>>(24-i*8)); h[i+4] =(ctx->s[1]>>(24-i*8)); + h[i+8] =(ctx->s[2]>>(24-i*8)); h[i+12]=(ctx->s[3]>>(24-i*8)); + h[i+16]=(ctx->s[4]>>(24-i*8)); h[i+20]=(ctx->s[5]>>(24-i*8)); + h[i+24]=(ctx->s[6]>>(24-i*8)); h[i+28]=(ctx->s[7]>>(24-i*8)); + } +} + +/** + * precalculated CRC32c lookup table for polynomial 0x1EDC6F41 (castagnoli-crc) + */ +UINT32 crc32c_lookup[256]={ + 0x00000000L, 0xF26B8303L, 0xE13B70F7L, 0x1350F3F4L, 0xC79A971FL, 0x35F1141CL, 0x26A1E7E8L, 0xD4CA64EBL, + 0x8AD958CFL, 0x78B2DBCCL, 0x6BE22838L, 0x9989AB3BL, 0x4D43CFD0L, 0xBF284CD3L, 0xAC78BF27L, 0x5E133C24L, + 0x105EC76FL, 0xE235446CL, 0xF165B798L, 0x030E349BL, 0xD7C45070L, 0x25AFD373L, 0x36FF2087L, 0xC494A384L, + 0x9A879FA0L, 0x68EC1CA3L, 0x7BBCEF57L, 0x89D76C54L, 0x5D1D08BFL, 0xAF768BBCL, 0xBC267848L, 0x4E4DFB4BL, + 0x20BD8EDEL, 0xD2D60DDDL, 0xC186FE29L, 0x33ED7D2AL, 0xE72719C1L, 0x154C9AC2L, 0x061C6936L, 0xF477EA35L, + 0xAA64D611L, 0x580F5512L, 0x4B5FA6E6L, 0xB93425E5L, 0x6DFE410EL, 0x9F95C20DL, 0x8CC531F9L, 0x7EAEB2FAL, + 0x30E349B1L, 0xC288CAB2L, 0xD1D83946L, 0x23B3BA45L, 0xF779DEAEL, 0x05125DADL, 0x1642AE59L, 0xE4292D5AL, + 0xBA3A117EL, 0x4851927DL, 0x5B016189L, 0xA96AE28AL, 0x7DA08661L, 0x8FCB0562L, 0x9C9BF696L, 0x6EF07595L, + 0x417B1DBCL, 0xB3109EBFL, 0xA0406D4BL, 0x522BEE48L, 0x86E18AA3L, 0x748A09A0L, 0x67DAFA54L, 0x95B17957L, + 0xCBA24573L, 0x39C9C670L, 0x2A993584L, 0xD8F2B687L, 0x0C38D26CL, 0xFE53516FL, 0xED03A29BL, 0x1F682198L, + 0x5125DAD3L, 0xA34E59D0L, 0xB01EAA24L, 0x42752927L, 0x96BF4DCCL, 0x64D4CECFL, 0x77843D3BL, 0x85EFBE38L, + 0xDBFC821CL, 0x2997011FL, 0x3AC7F2EBL, 0xC8AC71E8L, 0x1C661503L, 0xEE0D9600L, 0xFD5D65F4L, 0x0F36E6F7L, + 0x61C69362L, 0x93AD1061L, 0x80FDE395L, 0x72966096L, 0xA65C047DL, 0x5437877EL, 0x4767748AL, 0xB50CF789L, + 0xEB1FCBADL, 0x197448AEL, 0x0A24BB5AL, 0xF84F3859L, 0x2C855CB2L, 0xDEEEDFB1L, 0xCDBE2C45L, 0x3FD5AF46L, + 0x7198540DL, 0x83F3D70EL, 0x90A324FAL, 0x62C8A7F9L, 0xB602C312L, 0x44694011L, 0x5739B3E5L, 0xA55230E6L, + 0xFB410CC2L, 0x092A8FC1L, 0x1A7A7C35L, 0xE811FF36L, 0x3CDB9BDDL, 0xCEB018DEL, 0xDDE0EB2AL, 0x2F8B6829L, + 0x82F63B78L, 0x709DB87BL, 0x63CD4B8FL, 0x91A6C88CL, 0x456CAC67L, 0xB7072F64L, 0xA457DC90L, 0x563C5F93L, + 0x082F63B7L, 0xFA44E0B4L, 0xE9141340L, 0x1B7F9043L, 0xCFB5F4A8L, 0x3DDE77ABL, 0x2E8E845FL, 0xDCE5075CL, + 0x92A8FC17L, 0x60C37F14L, 0x73938CE0L, 0x81F80FE3L, 0x55326B08L, 0xA759E80BL, 0xB4091BFFL, 0x466298FCL, + 0x1871A4D8L, 0xEA1A27DBL, 0xF94AD42FL, 0x0B21572CL, 0xDFEB33C7L, 0x2D80B0C4L, 0x3ED04330L, 0xCCBBC033L, + 0xA24BB5A6L, 0x502036A5L, 0x4370C551L, 0xB11B4652L, 0x65D122B9L, 0x97BAA1BAL, 0x84EA524EL, 0x7681D14DL, + 0x2892ED69L, 0xDAF96E6AL, 0xC9A99D9EL, 0x3BC21E9DL, 0xEF087A76L, 0x1D63F975L, 0x0E330A81L, 0xFC588982L, + 0xB21572C9L, 0x407EF1CAL, 0x532E023EL, 0xA145813DL, 0x758FE5D6L, 0x87E466D5L, 0x94B49521L, 0x66DF1622L, + 0x38CC2A06L, 0xCAA7A905L, 0xD9F75AF1L, 0x2B9CD9F2L, 0xFF56BD19L, 0x0D3D3E1AL, 0x1E6DCDEEL, 0xEC064EEDL, + 0xC38D26C4L, 0x31E6A5C7L, 0x22B65633L, 0xD0DDD530L, 0x0417B1DBL, 0xF67C32D8L, 0xE52CC12CL, 0x1747422FL, + 0x49547E0BL, 0xBB3FFD08L, 0xA86F0EFCL, 0x5A048DFFL, 0x8ECEE914L, 0x7CA56A17L, 0x6FF599E3L, 0x9D9E1AE0L, + 0xD3D3E1ABL, 0x21B862A8L, 0x32E8915CL, 0xC083125FL, 0x144976B4L, 0xE622F5B7L, 0xF5720643L, 0x07198540L, + 0x590AB964L, 0xAB613A67L, 0xB831C993L, 0x4A5A4A90L, 0x9E902E7BL, 0x6CFBAD78L, 0x7FAB5E8CL, 0x8DC0DD8FL, + 0xE330A81AL, 0x115B2B19L, 0x020BD8EDL, 0xF0605BEEL, 0x24AA3F05L, 0xD6C1BC06L, 0xC5914FF2L, 0x37FACCF1L, + 0x69E9F0D5L, 0x9B8273D6L, 0x88D28022L, 0x7AB90321L, 0xAE7367CAL, 0x5C18E4C9L, 0x4F48173DL, 0xBD23943EL, + 0xF36E6F75L, 0x0105EC76L, 0x12551F82L, 0xE03E9C81L, 0x34F4F86AL, 0xC69F7B69L, 0xD5CF889DL, 0x27A40B9EL, + 0x79B737BAL, 0x8BDCB4B9L, 0x988C474DL, 0x6AE7C44EL, 0xBE2DA0A5L, 0x4C4623A6L, 0x5F16D052L, 0xAD7D5351L +}; +UINT32 crc32_calc(char *start,int length) +{ + UINT32 crc32_val=0; + while(length--) crc32_val=(crc32_val>>8)^crc32c_lookup[(crc32_val&0xff)^(unsigned char)*start++]; + return crc32_val; +} + +/** + * AES-256-CBC + */ +#define GETU32(pt) (((UINT32)(pt)[0]<<24)^((UINT32)(pt)[1]<<16)^((UINT32)(pt)[2]<<8)^((UINT32)(pt)[3])) +#define PUTU32(ct,st) {(ct)[0]=(UINT8)((st)>>24);(ct)[1]=(UINT8)((st)>>16);(ct)[2]=(UINT8)((st)>>8);(ct)[3]=(UINT8)(st);} +static const UINT32 Te0[256]={ + 0xc66363a5U,0xf87c7c84U,0xee777799U,0xf67b7b8dU,0xfff2f20dU,0xd66b6bbdU,0xde6f6fb1U,0x91c5c554U, + 0x60303050U,0x02010103U,0xce6767a9U,0x562b2b7dU,0xe7fefe19U,0xb5d7d762U,0x4dababe6U,0xec76769aU, + 0x8fcaca45U,0x1f82829dU,0x89c9c940U,0xfa7d7d87U,0xeffafa15U,0xb25959ebU,0x8e4747c9U,0xfbf0f00bU, + 0x41adadecU,0xb3d4d467U,0x5fa2a2fdU,0x45afafeaU,0x239c9cbfU,0x53a4a4f7U,0xe4727296U,0x9bc0c05bU, + 0x75b7b7c2U,0xe1fdfd1cU,0x3d9393aeU,0x4c26266aU,0x6c36365aU,0x7e3f3f41U,0xf5f7f702U,0x83cccc4fU, + 0x6834345cU,0x51a5a5f4U,0xd1e5e534U,0xf9f1f108U,0xe2717193U,0xabd8d873U,0x62313153U,0x2a15153fU, + 0x0804040cU,0x95c7c752U,0x46232365U,0x9dc3c35eU,0x30181828U,0x379696a1U,0x0a05050fU,0x2f9a9ab5U, + 0x0e070709U,0x24121236U,0x1b80809bU,0xdfe2e23dU,0xcdebeb26U,0x4e272769U,0x7fb2b2cdU,0xea75759fU, + 0x1209091bU,0x1d83839eU,0x582c2c74U,0x341a1a2eU,0x361b1b2dU,0xdc6e6eb2U,0xb45a5aeeU,0x5ba0a0fbU, + 0xa45252f6U,0x763b3b4dU,0xb7d6d661U,0x7db3b3ceU,0x5229297bU,0xdde3e33eU,0x5e2f2f71U,0x13848497U, + 0xa65353f5U,0xb9d1d168U,0x00000000U,0xc1eded2cU,0x40202060U,0xe3fcfc1fU,0x79b1b1c8U,0xb65b5bedU, + 0xd46a6abeU,0x8dcbcb46U,0x67bebed9U,0x7239394bU,0x944a4adeU,0x984c4cd4U,0xb05858e8U,0x85cfcf4aU, + 0xbbd0d06bU,0xc5efef2aU,0x4faaaae5U,0xedfbfb16U,0x864343c5U,0x9a4d4dd7U,0x66333355U,0x11858594U, + 0x8a4545cfU,0xe9f9f910U,0x04020206U,0xfe7f7f81U,0xa05050f0U,0x783c3c44U,0x259f9fbaU,0x4ba8a8e3U, + 0xa25151f3U,0x5da3a3feU,0x804040c0U,0x058f8f8aU,0x3f9292adU,0x219d9dbcU,0x70383848U,0xf1f5f504U, + 0x63bcbcdfU,0x77b6b6c1U,0xafdada75U,0x42212163U,0x20101030U,0xe5ffff1aU,0xfdf3f30eU,0xbfd2d26dU, + 0x81cdcd4cU,0x180c0c14U,0x26131335U,0xc3ecec2fU,0xbe5f5fe1U,0x359797a2U,0x884444ccU,0x2e171739U, + 0x93c4c457U,0x55a7a7f2U,0xfc7e7e82U,0x7a3d3d47U,0xc86464acU,0xba5d5de7U,0x3219192bU,0xe6737395U, + 0xc06060a0U,0x19818198U,0x9e4f4fd1U,0xa3dcdc7fU,0x44222266U,0x542a2a7eU,0x3b9090abU,0x0b888883U, + 0x8c4646caU,0xc7eeee29U,0x6bb8b8d3U,0x2814143cU,0xa7dede79U,0xbc5e5ee2U,0x160b0b1dU,0xaddbdb76U, + 0xdbe0e03bU,0x64323256U,0x743a3a4eU,0x140a0a1eU,0x924949dbU,0x0c06060aU,0x4824246cU,0xb85c5ce4U, + 0x9fc2c25dU,0xbdd3d36eU,0x43acacefU,0xc46262a6U,0x399191a8U,0x319595a4U,0xd3e4e437U,0xf279798bU, + 0xd5e7e732U,0x8bc8c843U,0x6e373759U,0xda6d6db7U,0x018d8d8cU,0xb1d5d564U,0x9c4e4ed2U,0x49a9a9e0U, + 0xd86c6cb4U,0xac5656faU,0xf3f4f407U,0xcfeaea25U,0xca6565afU,0xf47a7a8eU,0x47aeaee9U,0x10080818U, + 0x6fbabad5U,0xf0787888U,0x4a25256fU,0x5c2e2e72U,0x381c1c24U,0x57a6a6f1U,0x73b4b4c7U,0x97c6c651U, + 0xcbe8e823U,0xa1dddd7cU,0xe874749cU,0x3e1f1f21U,0x964b4bddU,0x61bdbddcU,0x0d8b8b86U,0x0f8a8a85U, + 0xe0707090U,0x7c3e3e42U,0x71b5b5c4U,0xcc6666aaU,0x904848d8U,0x06030305U,0xf7f6f601U,0x1c0e0e12U, + 0xc26161a3U,0x6a35355fU,0xae5757f9U,0x69b9b9d0U,0x17868691U,0x99c1c158U,0x3a1d1d27U,0x279e9eb9U, + 0xd9e1e138U,0xebf8f813U,0x2b9898b3U,0x22111133U,0xd26969bbU,0xa9d9d970U,0x078e8e89U,0x339494a7U, + 0x2d9b9bb6U,0x3c1e1e22U,0x15878792U,0xc9e9e920U,0x87cece49U,0xaa5555ffU,0x50282878U,0xa5dfdf7aU, + 0x038c8c8fU,0x59a1a1f8U,0x09898980U,0x1a0d0d17U,0x65bfbfdaU,0xd7e6e631U,0x844242c6U,0xd06868b8U, + 0x824141c3U,0x299999b0U,0x5a2d2d77U,0x1e0f0f11U,0x7bb0b0cbU,0xa85454fcU,0x6dbbbbd6U,0x2c16163aU, +}; +static const UINT32 Te1[256]={ + 0xa5c66363U,0x84f87c7cU,0x99ee7777U,0x8df67b7bU,0x0dfff2f2U,0xbdd66b6bU,0xb1de6f6fU,0x5491c5c5U, + 0x50603030U,0x03020101U,0xa9ce6767U,0x7d562b2bU,0x19e7fefeU,0x62b5d7d7U,0xe64dababU,0x9aec7676U, + 0x458fcacaU,0x9d1f8282U,0x4089c9c9U,0x87fa7d7dU,0x15effafaU,0xebb25959U,0xc98e4747U,0x0bfbf0f0U, + 0xec41adadU,0x67b3d4d4U,0xfd5fa2a2U,0xea45afafU,0xbf239c9cU,0xf753a4a4U,0x96e47272U,0x5b9bc0c0U, + 0xc275b7b7U,0x1ce1fdfdU,0xae3d9393U,0x6a4c2626U,0x5a6c3636U,0x417e3f3fU,0x02f5f7f7U,0x4f83ccccU, + 0x5c683434U,0xf451a5a5U,0x34d1e5e5U,0x08f9f1f1U,0x93e27171U,0x73abd8d8U,0x53623131U,0x3f2a1515U, + 0x0c080404U,0x5295c7c7U,0x65462323U,0x5e9dc3c3U,0x28301818U,0xa1379696U,0x0f0a0505U,0xb52f9a9aU, + 0x090e0707U,0x36241212U,0x9b1b8080U,0x3ddfe2e2U,0x26cdebebU,0x694e2727U,0xcd7fb2b2U,0x9fea7575U, + 0x1b120909U,0x9e1d8383U,0x74582c2cU,0x2e341a1aU,0x2d361b1bU,0xb2dc6e6eU,0xeeb45a5aU,0xfb5ba0a0U, + 0xf6a45252U,0x4d763b3bU,0x61b7d6d6U,0xce7db3b3U,0x7b522929U,0x3edde3e3U,0x715e2f2fU,0x97138484U, + 0xf5a65353U,0x68b9d1d1U,0x00000000U,0x2cc1ededU,0x60402020U,0x1fe3fcfcU,0xc879b1b1U,0xedb65b5bU, + 0xbed46a6aU,0x468dcbcbU,0xd967bebeU,0x4b723939U,0xde944a4aU,0xd4984c4cU,0xe8b05858U,0x4a85cfcfU, + 0x6bbbd0d0U,0x2ac5efefU,0xe54faaaaU,0x16edfbfbU,0xc5864343U,0xd79a4d4dU,0x55663333U,0x94118585U, + 0xcf8a4545U,0x10e9f9f9U,0x06040202U,0x81fe7f7fU,0xf0a05050U,0x44783c3cU,0xba259f9fU,0xe34ba8a8U, + 0xf3a25151U,0xfe5da3a3U,0xc0804040U,0x8a058f8fU,0xad3f9292U,0xbc219d9dU,0x48703838U,0x04f1f5f5U, + 0xdf63bcbcU,0xc177b6b6U,0x75afdadaU,0x63422121U,0x30201010U,0x1ae5ffffU,0x0efdf3f3U,0x6dbfd2d2U, + 0x4c81cdcdU,0x14180c0cU,0x35261313U,0x2fc3ececU,0xe1be5f5fU,0xa2359797U,0xcc884444U,0x392e1717U, + 0x5793c4c4U,0xf255a7a7U,0x82fc7e7eU,0x477a3d3dU,0xacc86464U,0xe7ba5d5dU,0x2b321919U,0x95e67373U, + 0xa0c06060U,0x98198181U,0xd19e4f4fU,0x7fa3dcdcU,0x66442222U,0x7e542a2aU,0xab3b9090U,0x830b8888U, + 0xca8c4646U,0x29c7eeeeU,0xd36bb8b8U,0x3c281414U,0x79a7dedeU,0xe2bc5e5eU,0x1d160b0bU,0x76addbdbU, + 0x3bdbe0e0U,0x56643232U,0x4e743a3aU,0x1e140a0aU,0xdb924949U,0x0a0c0606U,0x6c482424U,0xe4b85c5cU, + 0x5d9fc2c2U,0x6ebdd3d3U,0xef43acacU,0xa6c46262U,0xa8399191U,0xa4319595U,0x37d3e4e4U,0x8bf27979U, + 0x32d5e7e7U,0x438bc8c8U,0x596e3737U,0xb7da6d6dU,0x8c018d8dU,0x64b1d5d5U,0xd29c4e4eU,0xe049a9a9U, + 0xb4d86c6cU,0xfaac5656U,0x07f3f4f4U,0x25cfeaeaU,0xafca6565U,0x8ef47a7aU,0xe947aeaeU,0x18100808U, + 0xd56fbabaU,0x88f07878U,0x6f4a2525U,0x725c2e2eU,0x24381c1cU,0xf157a6a6U,0xc773b4b4U,0x5197c6c6U, + 0x23cbe8e8U,0x7ca1ddddU,0x9ce87474U,0x213e1f1fU,0xdd964b4bU,0xdc61bdbdU,0x860d8b8bU,0x850f8a8aU, + 0x90e07070U,0x427c3e3eU,0xc471b5b5U,0xaacc6666U,0xd8904848U,0x05060303U,0x01f7f6f6U,0x121c0e0eU, + 0xa3c26161U,0x5f6a3535U,0xf9ae5757U,0xd069b9b9U,0x91178686U,0x5899c1c1U,0x273a1d1dU,0xb9279e9eU, + 0x38d9e1e1U,0x13ebf8f8U,0xb32b9898U,0x33221111U,0xbbd26969U,0x70a9d9d9U,0x89078e8eU,0xa7339494U, + 0xb62d9b9bU,0x223c1e1eU,0x92158787U,0x20c9e9e9U,0x4987ceceU,0xffaa5555U,0x78502828U,0x7aa5dfdfU, + 0x8f038c8cU,0xf859a1a1U,0x80098989U,0x171a0d0dU,0xda65bfbfU,0x31d7e6e6U,0xc6844242U,0xb8d06868U, + 0xc3824141U,0xb0299999U,0x775a2d2dU,0x111e0f0fU,0xcb7bb0b0U,0xfca85454U,0xd66dbbbbU,0x3a2c1616U, +}; +static const UINT32 Te2[256]={ + 0x63a5c663U,0x7c84f87cU,0x7799ee77U,0x7b8df67bU,0xf20dfff2U,0x6bbdd66bU,0x6fb1de6fU,0xc55491c5U, + 0x30506030U,0x01030201U,0x67a9ce67U,0x2b7d562bU,0xfe19e7feU,0xd762b5d7U,0xabe64dabU,0x769aec76U, + 0xca458fcaU,0x829d1f82U,0xc94089c9U,0x7d87fa7dU,0xfa15effaU,0x59ebb259U,0x47c98e47U,0xf00bfbf0U, + 0xadec41adU,0xd467b3d4U,0xa2fd5fa2U,0xafea45afU,0x9cbf239cU,0xa4f753a4U,0x7296e472U,0xc05b9bc0U, + 0xb7c275b7U,0xfd1ce1fdU,0x93ae3d93U,0x266a4c26U,0x365a6c36U,0x3f417e3fU,0xf702f5f7U,0xcc4f83ccU, + 0x345c6834U,0xa5f451a5U,0xe534d1e5U,0xf108f9f1U,0x7193e271U,0xd873abd8U,0x31536231U,0x153f2a15U, + 0x040c0804U,0xc75295c7U,0x23654623U,0xc35e9dc3U,0x18283018U,0x96a13796U,0x050f0a05U,0x9ab52f9aU, + 0x07090e07U,0x12362412U,0x809b1b80U,0xe23ddfe2U,0xeb26cdebU,0x27694e27U,0xb2cd7fb2U,0x759fea75U, + 0x091b1209U,0x839e1d83U,0x2c74582cU,0x1a2e341aU,0x1b2d361bU,0x6eb2dc6eU,0x5aeeb45aU,0xa0fb5ba0U, + 0x52f6a452U,0x3b4d763bU,0xd661b7d6U,0xb3ce7db3U,0x297b5229U,0xe33edde3U,0x2f715e2fU,0x84971384U, + 0x53f5a653U,0xd168b9d1U,0x00000000U,0xed2cc1edU,0x20604020U,0xfc1fe3fcU,0xb1c879b1U,0x5bedb65bU, + 0x6abed46aU,0xcb468dcbU,0xbed967beU,0x394b7239U,0x4ade944aU,0x4cd4984cU,0x58e8b058U,0xcf4a85cfU, + 0xd06bbbd0U,0xef2ac5efU,0xaae54faaU,0xfb16edfbU,0x43c58643U,0x4dd79a4dU,0x33556633U,0x85941185U, + 0x45cf8a45U,0xf910e9f9U,0x02060402U,0x7f81fe7fU,0x50f0a050U,0x3c44783cU,0x9fba259fU,0xa8e34ba8U, + 0x51f3a251U,0xa3fe5da3U,0x40c08040U,0x8f8a058fU,0x92ad3f92U,0x9dbc219dU,0x38487038U,0xf504f1f5U, + 0xbcdf63bcU,0xb6c177b6U,0xda75afdaU,0x21634221U,0x10302010U,0xff1ae5ffU,0xf30efdf3U,0xd26dbfd2U, + 0xcd4c81cdU,0x0c14180cU,0x13352613U,0xec2fc3ecU,0x5fe1be5fU,0x97a23597U,0x44cc8844U,0x17392e17U, + 0xc45793c4U,0xa7f255a7U,0x7e82fc7eU,0x3d477a3dU,0x64acc864U,0x5de7ba5dU,0x192b3219U,0x7395e673U, + 0x60a0c060U,0x81981981U,0x4fd19e4fU,0xdc7fa3dcU,0x22664422U,0x2a7e542aU,0x90ab3b90U,0x88830b88U, + 0x46ca8c46U,0xee29c7eeU,0xb8d36bb8U,0x143c2814U,0xde79a7deU,0x5ee2bc5eU,0x0b1d160bU,0xdb76addbU, + 0xe03bdbe0U,0x32566432U,0x3a4e743aU,0x0a1e140aU,0x49db9249U,0x060a0c06U,0x246c4824U,0x5ce4b85cU, + 0xc25d9fc2U,0xd36ebdd3U,0xacef43acU,0x62a6c462U,0x91a83991U,0x95a43195U,0xe437d3e4U,0x798bf279U, + 0xe732d5e7U,0xc8438bc8U,0x37596e37U,0x6db7da6dU,0x8d8c018dU,0xd564b1d5U,0x4ed29c4eU,0xa9e049a9U, + 0x6cb4d86cU,0x56faac56U,0xf407f3f4U,0xea25cfeaU,0x65afca65U,0x7a8ef47aU,0xaee947aeU,0x08181008U, + 0xbad56fbaU,0x7888f078U,0x256f4a25U,0x2e725c2eU,0x1c24381cU,0xa6f157a6U,0xb4c773b4U,0xc65197c6U, + 0xe823cbe8U,0xdd7ca1ddU,0x749ce874U,0x1f213e1fU,0x4bdd964bU,0xbddc61bdU,0x8b860d8bU,0x8a850f8aU, + 0x7090e070U,0x3e427c3eU,0xb5c471b5U,0x66aacc66U,0x48d89048U,0x03050603U,0xf601f7f6U,0x0e121c0eU, + 0x61a3c261U,0x355f6a35U,0x57f9ae57U,0xb9d069b9U,0x86911786U,0xc15899c1U,0x1d273a1dU,0x9eb9279eU, + 0xe138d9e1U,0xf813ebf8U,0x98b32b98U,0x11332211U,0x69bbd269U,0xd970a9d9U,0x8e89078eU,0x94a73394U, + 0x9bb62d9bU,0x1e223c1eU,0x87921587U,0xe920c9e9U,0xce4987ceU,0x55ffaa55U,0x28785028U,0xdf7aa5dfU, + 0x8c8f038cU,0xa1f859a1U,0x89800989U,0x0d171a0dU,0xbfda65bfU,0xe631d7e6U,0x42c68442U,0x68b8d068U, + 0x41c38241U,0x99b02999U,0x2d775a2dU,0x0f111e0fU,0xb0cb7bb0U,0x54fca854U,0xbbd66dbbU,0x163a2c16U, +}; +static const UINT32 Te3[256]={ + 0x6363a5c6U,0x7c7c84f8U,0x777799eeU,0x7b7b8df6U,0xf2f20dffU,0x6b6bbdd6U,0x6f6fb1deU,0xc5c55491U, + 0x30305060U,0x01010302U,0x6767a9ceU,0x2b2b7d56U,0xfefe19e7U,0xd7d762b5U,0xababe64dU,0x76769aecU, + 0xcaca458fU,0x82829d1fU,0xc9c94089U,0x7d7d87faU,0xfafa15efU,0x5959ebb2U,0x4747c98eU,0xf0f00bfbU, + 0xadadec41U,0xd4d467b3U,0xa2a2fd5fU,0xafafea45U,0x9c9cbf23U,0xa4a4f753U,0x727296e4U,0xc0c05b9bU, + 0xb7b7c275U,0xfdfd1ce1U,0x9393ae3dU,0x26266a4cU,0x36365a6cU,0x3f3f417eU,0xf7f702f5U,0xcccc4f83U, + 0x34345c68U,0xa5a5f451U,0xe5e534d1U,0xf1f108f9U,0x717193e2U,0xd8d873abU,0x31315362U,0x15153f2aU, + 0x04040c08U,0xc7c75295U,0x23236546U,0xc3c35e9dU,0x18182830U,0x9696a137U,0x05050f0aU,0x9a9ab52fU, + 0x0707090eU,0x12123624U,0x80809b1bU,0xe2e23ddfU,0xebeb26cdU,0x2727694eU,0xb2b2cd7fU,0x75759feaU, + 0x09091b12U,0x83839e1dU,0x2c2c7458U,0x1a1a2e34U,0x1b1b2d36U,0x6e6eb2dcU,0x5a5aeeb4U,0xa0a0fb5bU, + 0x5252f6a4U,0x3b3b4d76U,0xd6d661b7U,0xb3b3ce7dU,0x29297b52U,0xe3e33eddU,0x2f2f715eU,0x84849713U, + 0x5353f5a6U,0xd1d168b9U,0x00000000U,0xeded2cc1U,0x20206040U,0xfcfc1fe3U,0xb1b1c879U,0x5b5bedb6U, + 0x6a6abed4U,0xcbcb468dU,0xbebed967U,0x39394b72U,0x4a4ade94U,0x4c4cd498U,0x5858e8b0U,0xcfcf4a85U, + 0xd0d06bbbU,0xefef2ac5U,0xaaaae54fU,0xfbfb16edU,0x4343c586U,0x4d4dd79aU,0x33335566U,0x85859411U, + 0x4545cf8aU,0xf9f910e9U,0x02020604U,0x7f7f81feU,0x5050f0a0U,0x3c3c4478U,0x9f9fba25U,0xa8a8e34bU, + 0x5151f3a2U,0xa3a3fe5dU,0x4040c080U,0x8f8f8a05U,0x9292ad3fU,0x9d9dbc21U,0x38384870U,0xf5f504f1U, + 0xbcbcdf63U,0xb6b6c177U,0xdada75afU,0x21216342U,0x10103020U,0xffff1ae5U,0xf3f30efdU,0xd2d26dbfU, + 0xcdcd4c81U,0x0c0c1418U,0x13133526U,0xecec2fc3U,0x5f5fe1beU,0x9797a235U,0x4444cc88U,0x1717392eU, + 0xc4c45793U,0xa7a7f255U,0x7e7e82fcU,0x3d3d477aU,0x6464acc8U,0x5d5de7baU,0x19192b32U,0x737395e6U, + 0x6060a0c0U,0x81819819U,0x4f4fd19eU,0xdcdc7fa3U,0x22226644U,0x2a2a7e54U,0x9090ab3bU,0x8888830bU, + 0x4646ca8cU,0xeeee29c7U,0xb8b8d36bU,0x14143c28U,0xdede79a7U,0x5e5ee2bcU,0x0b0b1d16U,0xdbdb76adU, + 0xe0e03bdbU,0x32325664U,0x3a3a4e74U,0x0a0a1e14U,0x4949db92U,0x06060a0cU,0x24246c48U,0x5c5ce4b8U, + 0xc2c25d9fU,0xd3d36ebdU,0xacacef43U,0x6262a6c4U,0x9191a839U,0x9595a431U,0xe4e437d3U,0x79798bf2U, + 0xe7e732d5U,0xc8c8438bU,0x3737596eU,0x6d6db7daU,0x8d8d8c01U,0xd5d564b1U,0x4e4ed29cU,0xa9a9e049U, + 0x6c6cb4d8U,0x5656faacU,0xf4f407f3U,0xeaea25cfU,0x6565afcaU,0x7a7a8ef4U,0xaeaee947U,0x08081810U, + 0xbabad56fU,0x787888f0U,0x25256f4aU,0x2e2e725cU,0x1c1c2438U,0xa6a6f157U,0xb4b4c773U,0xc6c65197U, + 0xe8e823cbU,0xdddd7ca1U,0x74749ce8U,0x1f1f213eU,0x4b4bdd96U,0xbdbddc61U,0x8b8b860dU,0x8a8a850fU, + 0x707090e0U,0x3e3e427cU,0xb5b5c471U,0x6666aaccU,0x4848d890U,0x03030506U,0xf6f601f7U,0x0e0e121cU, + 0x6161a3c2U,0x35355f6aU,0x5757f9aeU,0xb9b9d069U,0x86869117U,0xc1c15899U,0x1d1d273aU,0x9e9eb927U, + 0xe1e138d9U,0xf8f813ebU,0x9898b32bU,0x11113322U,0x6969bbd2U,0xd9d970a9U,0x8e8e8907U,0x9494a733U, + 0x9b9bb62dU,0x1e1e223cU,0x87879215U,0xe9e920c9U,0xcece4987U,0x5555ffaaU,0x28287850U,0xdfdf7aa5U, + 0x8c8c8f03U,0xa1a1f859U,0x89898009U,0x0d0d171aU,0xbfbfda65U,0xe6e631d7U,0x4242c684U,0x6868b8d0U, + 0x4141c382U,0x9999b029U,0x2d2d775aU,0x0f0f111eU,0xb0b0cb7bU,0x5454fca8U,0xbbbbd66dU,0x16163a2cU, +}; + +static const UINT32 Td0[256]={ + 0x51f4a750U,0x7e416553U,0x1a17a4c3U,0x3a275e96U,0x3bab6bcbU,0x1f9d45f1U,0xacfa58abU,0x4be30393U, + 0x2030fa55U,0xad766df6U,0x88cc7691U,0xf5024c25U,0x4fe5d7fcU,0xc52acbd7U,0x26354480U,0xb562a38fU, + 0xdeb15a49U,0x25ba1b67U,0x45ea0e98U,0x5dfec0e1U,0xc32f7502U,0x814cf012U,0x8d4697a3U,0x6bd3f9c6U, + 0x038f5fe7U,0x15929c95U,0xbf6d7aebU,0x955259daU,0xd4be832dU,0x587421d3U,0x49e06929U,0x8ec9c844U, + 0x75c2896aU,0xf48e7978U,0x99583e6bU,0x27b971ddU,0xbee14fb6U,0xf088ad17U,0xc920ac66U,0x7dce3ab4U, + 0x63df4a18U,0xe51a3182U,0x97513360U,0x62537f45U,0xb16477e0U,0xbb6bae84U,0xfe81a01cU,0xf9082b94U, + 0x70486858U,0x8f45fd19U,0x94de6c87U,0x527bf8b7U,0xab73d323U,0x724b02e2U,0xe31f8f57U,0x6655ab2aU, + 0xb2eb2807U,0x2fb5c203U,0x86c57b9aU,0xd33708a5U,0x302887f2U,0x23bfa5b2U,0x02036abaU,0xed16825cU, + 0x8acf1c2bU,0xa779b492U,0xf307f2f0U,0x4e69e2a1U,0x65daf4cdU,0x0605bed5U,0xd134621fU,0xc4a6fe8aU, + 0x342e539dU,0xa2f355a0U,0x058ae132U,0xa4f6eb75U,0x0b83ec39U,0x4060efaaU,0x5e719f06U,0xbd6e1051U, + 0x3e218af9U,0x96dd063dU,0xdd3e05aeU,0x4de6bd46U,0x91548db5U,0x71c45d05U,0x0406d46fU,0x605015ffU, + 0x1998fb24U,0xd6bde997U,0x894043ccU,0x67d99e77U,0xb0e842bdU,0x07898b88U,0xe7195b38U,0x79c8eedbU, + 0xa17c0a47U,0x7c420fe9U,0xf8841ec9U,0x00000000U,0x09808683U,0x322bed48U,0x1e1170acU,0x6c5a724eU, + 0xfd0efffbU,0x0f853856U,0x3daed51eU,0x362d3927U,0x0a0fd964U,0x685ca621U,0x9b5b54d1U,0x24362e3aU, + 0x0c0a67b1U,0x9357e70fU,0xb4ee96d2U,0x1b9b919eU,0x80c0c54fU,0x61dc20a2U,0x5a774b69U,0x1c121a16U, + 0xe293ba0aU,0xc0a02ae5U,0x3c22e043U,0x121b171dU,0x0e090d0bU,0xf28bc7adU,0x2db6a8b9U,0x141ea9c8U, + 0x57f11985U,0xaf75074cU,0xee99ddbbU,0xa37f60fdU,0xf701269fU,0x5c72f5bcU,0x44663bc5U,0x5bfb7e34U, + 0x8b432976U,0xcb23c6dcU,0xb6edfc68U,0xb8e4f163U,0xd731dccaU,0x42638510U,0x13972240U,0x84c61120U, + 0x854a247dU,0xd2bb3df8U,0xaef93211U,0xc729a16dU,0x1d9e2f4bU,0xdcb230f3U,0x0d8652ecU,0x77c1e3d0U, + 0x2bb3166cU,0xa970b999U,0x119448faU,0x47e96422U,0xa8fc8cc4U,0xa0f03f1aU,0x567d2cd8U,0x223390efU, + 0x87494ec7U,0xd938d1c1U,0x8ccaa2feU,0x98d40b36U,0xa6f581cfU,0xa57ade28U,0xdab78e26U,0x3fadbfa4U, + 0x2c3a9de4U,0x5078920dU,0x6a5fcc9bU,0x547e4662U,0xf68d13c2U,0x90d8b8e8U,0x2e39f75eU,0x82c3aff5U, + 0x9f5d80beU,0x69d0937cU,0x6fd52da9U,0xcf2512b3U,0xc8ac993bU,0x10187da7U,0xe89c636eU,0xdb3bbb7bU, + 0xcd267809U,0x6e5918f4U,0xec9ab701U,0x834f9aa8U,0xe6956e65U,0xaaffe67eU,0x21bccf08U,0xef15e8e6U, + 0xbae79bd9U,0x4a6f36ceU,0xea9f09d4U,0x29b07cd6U,0x31a4b2afU,0x2a3f2331U,0xc6a59430U,0x35a266c0U, + 0x744ebc37U,0xfc82caa6U,0xe090d0b0U,0x33a7d815U,0xf104984aU,0x41ecdaf7U,0x7fcd500eU,0x1791f62fU, + 0x764dd68dU,0x43efb04dU,0xccaa4d54U,0xe49604dfU,0x9ed1b5e3U,0x4c6a881bU,0xc12c1fb8U,0x4665517fU, + 0x9d5eea04U,0x018c355dU,0xfa877473U,0xfb0b412eU,0xb3671d5aU,0x92dbd252U,0xe9105633U,0x6dd64713U, + 0x9ad7618cU,0x37a10c7aU,0x59f8148eU,0xeb133c89U,0xcea927eeU,0xb761c935U,0xe11ce5edU,0x7a47b13cU, + 0x9cd2df59U,0x55f2733fU,0x1814ce79U,0x73c737bfU,0x53f7cdeaU,0x5ffdaa5bU,0xdf3d6f14U,0x7844db86U, + 0xcaaff381U,0xb968c43eU,0x3824342cU,0xc2a3405fU,0x161dc372U,0xbce2250cU,0x283c498bU,0xff0d9541U, + 0x39a80171U,0x080cb3deU,0xd8b4e49cU,0x6456c190U,0x7bcb8461U,0xd532b670U,0x486c5c74U,0xd0b85742U, +}; +static const UINT32 Td1[256]={ + 0x5051f4a7U,0x537e4165U,0xc31a17a4U,0x963a275eU,0xcb3bab6bU,0xf11f9d45U,0xabacfa58U,0x934be303U, + 0x552030faU,0xf6ad766dU,0x9188cc76U,0x25f5024cU,0xfc4fe5d7U,0xd7c52acbU,0x80263544U,0x8fb562a3U, + 0x49deb15aU,0x6725ba1bU,0x9845ea0eU,0xe15dfec0U,0x02c32f75U,0x12814cf0U,0xa38d4697U,0xc66bd3f9U, + 0xe7038f5fU,0x9515929cU,0xebbf6d7aU,0xda955259U,0x2dd4be83U,0xd3587421U,0x2949e069U,0x448ec9c8U, + 0x6a75c289U,0x78f48e79U,0x6b99583eU,0xdd27b971U,0xb6bee14fU,0x17f088adU,0x66c920acU,0xb47dce3aU, + 0x1863df4aU,0x82e51a31U,0x60975133U,0x4562537fU,0xe0b16477U,0x84bb6baeU,0x1cfe81a0U,0x94f9082bU, + 0x58704868U,0x198f45fdU,0x8794de6cU,0xb7527bf8U,0x23ab73d3U,0xe2724b02U,0x57e31f8fU,0x2a6655abU, + 0x07b2eb28U,0x032fb5c2U,0x9a86c57bU,0xa5d33708U,0xf2302887U,0xb223bfa5U,0xba02036aU,0x5ced1682U, + 0x2b8acf1cU,0x92a779b4U,0xf0f307f2U,0xa14e69e2U,0xcd65daf4U,0xd50605beU,0x1fd13462U,0x8ac4a6feU, + 0x9d342e53U,0xa0a2f355U,0x32058ae1U,0x75a4f6ebU,0x390b83ecU,0xaa4060efU,0x065e719fU,0x51bd6e10U, + 0xf93e218aU,0x3d96dd06U,0xaedd3e05U,0x464de6bdU,0xb591548dU,0x0571c45dU,0x6f0406d4U,0xff605015U, + 0x241998fbU,0x97d6bde9U,0xcc894043U,0x7767d99eU,0xbdb0e842U,0x8807898bU,0x38e7195bU,0xdb79c8eeU, + 0x47a17c0aU,0xe97c420fU,0xc9f8841eU,0x00000000U,0x83098086U,0x48322bedU,0xac1e1170U,0x4e6c5a72U, + 0xfbfd0effU,0x560f8538U,0x1e3daed5U,0x27362d39U,0x640a0fd9U,0x21685ca6U,0xd19b5b54U,0x3a24362eU, + 0xb10c0a67U,0x0f9357e7U,0xd2b4ee96U,0x9e1b9b91U,0x4f80c0c5U,0xa261dc20U,0x695a774bU,0x161c121aU, + 0x0ae293baU,0xe5c0a02aU,0x433c22e0U,0x1d121b17U,0x0b0e090dU,0xadf28bc7U,0xb92db6a8U,0xc8141ea9U, + 0x8557f119U,0x4caf7507U,0xbbee99ddU,0xfda37f60U,0x9ff70126U,0xbc5c72f5U,0xc544663bU,0x345bfb7eU, + 0x768b4329U,0xdccb23c6U,0x68b6edfcU,0x63b8e4f1U,0xcad731dcU,0x10426385U,0x40139722U,0x2084c611U, + 0x7d854a24U,0xf8d2bb3dU,0x11aef932U,0x6dc729a1U,0x4b1d9e2fU,0xf3dcb230U,0xec0d8652U,0xd077c1e3U, + 0x6c2bb316U,0x99a970b9U,0xfa119448U,0x2247e964U,0xc4a8fc8cU,0x1aa0f03fU,0xd8567d2cU,0xef223390U, + 0xc787494eU,0xc1d938d1U,0xfe8ccaa2U,0x3698d40bU,0xcfa6f581U,0x28a57adeU,0x26dab78eU,0xa43fadbfU, + 0xe42c3a9dU,0x0d507892U,0x9b6a5fccU,0x62547e46U,0xc2f68d13U,0xe890d8b8U,0x5e2e39f7U,0xf582c3afU, + 0xbe9f5d80U,0x7c69d093U,0xa96fd52dU,0xb3cf2512U,0x3bc8ac99U,0xa710187dU,0x6ee89c63U,0x7bdb3bbbU, + 0x09cd2678U,0xf46e5918U,0x01ec9ab7U,0xa8834f9aU,0x65e6956eU,0x7eaaffe6U,0x0821bccfU,0xe6ef15e8U, + 0xd9bae79bU,0xce4a6f36U,0xd4ea9f09U,0xd629b07cU,0xaf31a4b2U,0x312a3f23U,0x30c6a594U,0xc035a266U, + 0x37744ebcU,0xa6fc82caU,0xb0e090d0U,0x1533a7d8U,0x4af10498U,0xf741ecdaU,0x0e7fcd50U,0x2f1791f6U, + 0x8d764dd6U,0x4d43efb0U,0x54ccaa4dU,0xdfe49604U,0xe39ed1b5U,0x1b4c6a88U,0xb8c12c1fU,0x7f466551U, + 0x049d5eeaU,0x5d018c35U,0x73fa8774U,0x2efb0b41U,0x5ab3671dU,0x5292dbd2U,0x33e91056U,0x136dd647U, + 0x8c9ad761U,0x7a37a10cU,0x8e59f814U,0x89eb133cU,0xeecea927U,0x35b761c9U,0xede11ce5U,0x3c7a47b1U, + 0x599cd2dfU,0x3f55f273U,0x791814ceU,0xbf73c737U,0xea53f7cdU,0x5b5ffdaaU,0x14df3d6fU,0x867844dbU, + 0x81caaff3U,0x3eb968c4U,0x2c382434U,0x5fc2a340U,0x72161dc3U,0x0cbce225U,0x8b283c49U,0x41ff0d95U, + 0x7139a801U,0xde080cb3U,0x9cd8b4e4U,0x906456c1U,0x617bcb84U,0x70d532b6U,0x74486c5cU,0x42d0b857U, +}; +static const UINT32 Td2[256]={ + 0xa75051f4U,0x65537e41U,0xa4c31a17U,0x5e963a27U,0x6bcb3babU,0x45f11f9dU,0x58abacfaU,0x03934be3U, + 0xfa552030U,0x6df6ad76U,0x769188ccU,0x4c25f502U,0xd7fc4fe5U,0xcbd7c52aU,0x44802635U,0xa38fb562U, + 0x5a49deb1U,0x1b6725baU,0x0e9845eaU,0xc0e15dfeU,0x7502c32fU,0xf012814cU,0x97a38d46U,0xf9c66bd3U, + 0x5fe7038fU,0x9c951592U,0x7aebbf6dU,0x59da9552U,0x832dd4beU,0x21d35874U,0x692949e0U,0xc8448ec9U, + 0x896a75c2U,0x7978f48eU,0x3e6b9958U,0x71dd27b9U,0x4fb6bee1U,0xad17f088U,0xac66c920U,0x3ab47dceU, + 0x4a1863dfU,0x3182e51aU,0x33609751U,0x7f456253U,0x77e0b164U,0xae84bb6bU,0xa01cfe81U,0x2b94f908U, + 0x68587048U,0xfd198f45U,0x6c8794deU,0xf8b7527bU,0xd323ab73U,0x02e2724bU,0x8f57e31fU,0xab2a6655U, + 0x2807b2ebU,0xc2032fb5U,0x7b9a86c5U,0x08a5d337U,0x87f23028U,0xa5b223bfU,0x6aba0203U,0x825ced16U, + 0x1c2b8acfU,0xb492a779U,0xf2f0f307U,0xe2a14e69U,0xf4cd65daU,0xbed50605U,0x621fd134U,0xfe8ac4a6U, + 0x539d342eU,0x55a0a2f3U,0xe132058aU,0xeb75a4f6U,0xec390b83U,0xefaa4060U,0x9f065e71U,0x1051bd6eU, + 0x8af93e21U,0x063d96ddU,0x05aedd3eU,0xbd464de6U,0x8db59154U,0x5d0571c4U,0xd46f0406U,0x15ff6050U, + 0xfb241998U,0xe997d6bdU,0x43cc8940U,0x9e7767d9U,0x42bdb0e8U,0x8b880789U,0x5b38e719U,0xeedb79c8U, + 0x0a47a17cU,0x0fe97c42U,0x1ec9f884U,0x00000000U,0x86830980U,0xed48322bU,0x70ac1e11U,0x724e6c5aU, + 0xfffbfd0eU,0x38560f85U,0xd51e3daeU,0x3927362dU,0xd9640a0fU,0xa621685cU,0x54d19b5bU,0x2e3a2436U, + 0x67b10c0aU,0xe70f9357U,0x96d2b4eeU,0x919e1b9bU,0xc54f80c0U,0x20a261dcU,0x4b695a77U,0x1a161c12U, + 0xba0ae293U,0x2ae5c0a0U,0xe0433c22U,0x171d121bU,0x0d0b0e09U,0xc7adf28bU,0xa8b92db6U,0xa9c8141eU, + 0x198557f1U,0x074caf75U,0xddbbee99U,0x60fda37fU,0x269ff701U,0xf5bc5c72U,0x3bc54466U,0x7e345bfbU, + 0x29768b43U,0xc6dccb23U,0xfc68b6edU,0xf163b8e4U,0xdccad731U,0x85104263U,0x22401397U,0x112084c6U, + 0x247d854aU,0x3df8d2bbU,0x3211aef9U,0xa16dc729U,0x2f4b1d9eU,0x30f3dcb2U,0x52ec0d86U,0xe3d077c1U, + 0x166c2bb3U,0xb999a970U,0x48fa1194U,0x642247e9U,0x8cc4a8fcU,0x3f1aa0f0U,0x2cd8567dU,0x90ef2233U, + 0x4ec78749U,0xd1c1d938U,0xa2fe8ccaU,0x0b3698d4U,0x81cfa6f5U,0xde28a57aU,0x8e26dab7U,0xbfa43fadU, + 0x9de42c3aU,0x920d5078U,0xcc9b6a5fU,0x4662547eU,0x13c2f68dU,0xb8e890d8U,0xf75e2e39U,0xaff582c3U, + 0x80be9f5dU,0x937c69d0U,0x2da96fd5U,0x12b3cf25U,0x993bc8acU,0x7da71018U,0x636ee89cU,0xbb7bdb3bU, + 0x7809cd26U,0x18f46e59U,0xb701ec9aU,0x9aa8834fU,0x6e65e695U,0xe67eaaffU,0xcf0821bcU,0xe8e6ef15U, + 0x9bd9bae7U,0x36ce4a6fU,0x09d4ea9fU,0x7cd629b0U,0xb2af31a4U,0x23312a3fU,0x9430c6a5U,0x66c035a2U, + 0xbc37744eU,0xcaa6fc82U,0xd0b0e090U,0xd81533a7U,0x984af104U,0xdaf741ecU,0x500e7fcdU,0xf62f1791U, + 0xd68d764dU,0xb04d43efU,0x4d54ccaaU,0x04dfe496U,0xb5e39ed1U,0x881b4c6aU,0x1fb8c12cU,0x517f4665U, + 0xea049d5eU,0x355d018cU,0x7473fa87U,0x412efb0bU,0x1d5ab367U,0xd25292dbU,0x5633e910U,0x47136dd6U, + 0x618c9ad7U,0x0c7a37a1U,0x148e59f8U,0x3c89eb13U,0x27eecea9U,0xc935b761U,0xe5ede11cU,0xb13c7a47U, + 0xdf599cd2U,0x733f55f2U,0xce791814U,0x37bf73c7U,0xcdea53f7U,0xaa5b5ffdU,0x6f14df3dU,0xdb867844U, + 0xf381caafU,0xc43eb968U,0x342c3824U,0x405fc2a3U,0xc372161dU,0x250cbce2U,0x498b283cU,0x9541ff0dU, + 0x017139a8U,0xb3de080cU,0xe49cd8b4U,0xc1906456U,0x84617bcbU,0xb670d532U,0x5c74486cU,0x5742d0b8U, +}; +static const UINT32 Td3[256]={ + 0xf4a75051U,0x4165537eU,0x17a4c31aU,0x275e963aU,0xab6bcb3bU,0x9d45f11fU,0xfa58abacU,0xe303934bU, + 0x30fa5520U,0x766df6adU,0xcc769188U,0x024c25f5U,0xe5d7fc4fU,0x2acbd7c5U,0x35448026U,0x62a38fb5U, + 0xb15a49deU,0xba1b6725U,0xea0e9845U,0xfec0e15dU,0x2f7502c3U,0x4cf01281U,0x4697a38dU,0xd3f9c66bU, + 0x8f5fe703U,0x929c9515U,0x6d7aebbfU,0x5259da95U,0xbe832dd4U,0x7421d358U,0xe0692949U,0xc9c8448eU, + 0xc2896a75U,0x8e7978f4U,0x583e6b99U,0xb971dd27U,0xe14fb6beU,0x88ad17f0U,0x20ac66c9U,0xce3ab47dU, + 0xdf4a1863U,0x1a3182e5U,0x51336097U,0x537f4562U,0x6477e0b1U,0x6bae84bbU,0x81a01cfeU,0x082b94f9U, + 0x48685870U,0x45fd198fU,0xde6c8794U,0x7bf8b752U,0x73d323abU,0x4b02e272U,0x1f8f57e3U,0x55ab2a66U, + 0xeb2807b2U,0xb5c2032fU,0xc57b9a86U,0x3708a5d3U,0x2887f230U,0xbfa5b223U,0x036aba02U,0x16825cedU, + 0xcf1c2b8aU,0x79b492a7U,0x07f2f0f3U,0x69e2a14eU,0xdaf4cd65U,0x05bed506U,0x34621fd1U,0xa6fe8ac4U, + 0x2e539d34U,0xf355a0a2U,0x8ae13205U,0xf6eb75a4U,0x83ec390bU,0x60efaa40U,0x719f065eU,0x6e1051bdU, + 0x218af93eU,0xdd063d96U,0x3e05aeddU,0xe6bd464dU,0x548db591U,0xc45d0571U,0x06d46f04U,0x5015ff60U, + 0x98fb2419U,0xbde997d6U,0x4043cc89U,0xd99e7767U,0xe842bdb0U,0x898b8807U,0x195b38e7U,0xc8eedb79U, + 0x7c0a47a1U,0x420fe97cU,0x841ec9f8U,0x00000000U,0x80868309U,0x2bed4832U,0x1170ac1eU,0x5a724e6cU, + 0x0efffbfdU,0x8538560fU,0xaed51e3dU,0x2d392736U,0x0fd9640aU,0x5ca62168U,0x5b54d19bU,0x362e3a24U, + 0x0a67b10cU,0x57e70f93U,0xee96d2b4U,0x9b919e1bU,0xc0c54f80U,0xdc20a261U,0x774b695aU,0x121a161cU, + 0x93ba0ae2U,0xa02ae5c0U,0x22e0433cU,0x1b171d12U,0x090d0b0eU,0x8bc7adf2U,0xb6a8b92dU,0x1ea9c814U, + 0xf1198557U,0x75074cafU,0x99ddbbeeU,0x7f60fda3U,0x01269ff7U,0x72f5bc5cU,0x663bc544U,0xfb7e345bU, + 0x4329768bU,0x23c6dccbU,0xedfc68b6U,0xe4f163b8U,0x31dccad7U,0x63851042U,0x97224013U,0xc6112084U, + 0x4a247d85U,0xbb3df8d2U,0xf93211aeU,0x29a16dc7U,0x9e2f4b1dU,0xb230f3dcU,0x8652ec0dU,0xc1e3d077U, + 0xb3166c2bU,0x70b999a9U,0x9448fa11U,0xe9642247U,0xfc8cc4a8U,0xf03f1aa0U,0x7d2cd856U,0x3390ef22U, + 0x494ec787U,0x38d1c1d9U,0xcaa2fe8cU,0xd40b3698U,0xf581cfa6U,0x7ade28a5U,0xb78e26daU,0xadbfa43fU, + 0x3a9de42cU,0x78920d50U,0x5fcc9b6aU,0x7e466254U,0x8d13c2f6U,0xd8b8e890U,0x39f75e2eU,0xc3aff582U, + 0x5d80be9fU,0xd0937c69U,0xd52da96fU,0x2512b3cfU,0xac993bc8U,0x187da710U,0x9c636ee8U,0x3bbb7bdbU, + 0x267809cdU,0x5918f46eU,0x9ab701ecU,0x4f9aa883U,0x956e65e6U,0xffe67eaaU,0xbccf0821U,0x15e8e6efU, + 0xe79bd9baU,0x6f36ce4aU,0x9f09d4eaU,0xb07cd629U,0xa4b2af31U,0x3f23312aU,0xa59430c6U,0xa266c035U, + 0x4ebc3774U,0x82caa6fcU,0x90d0b0e0U,0xa7d81533U,0x04984af1U,0xecdaf741U,0xcd500e7fU,0x91f62f17U, + 0x4dd68d76U,0xefb04d43U,0xaa4d54ccU,0x9604dfe4U,0xd1b5e39eU,0x6a881b4cU,0x2c1fb8c1U,0x65517f46U, + 0x5eea049dU,0x8c355d01U,0x877473faU,0x0b412efbU,0x671d5ab3U,0xdbd25292U,0x105633e9U,0xd647136dU, + 0xd7618c9aU,0xa10c7a37U,0xf8148e59U,0x133c89ebU,0xa927eeceU,0x61c935b7U,0x1ce5ede1U,0x47b13c7aU, + 0xd2df599cU,0xf2733f55U,0x14ce7918U,0xc737bf73U,0xf7cdea53U,0xfdaa5b5fU,0x3d6f14dfU,0x44db8678U, + 0xaff381caU,0x68c43eb9U,0x24342c38U,0xa3405fc2U,0x1dc37216U,0xe2250cbcU,0x3c498b28U,0x0d9541ffU, + 0xa8017139U,0x0cb3de08U,0xb4e49cd8U,0x56c19064U,0xcb84617bU,0x32b670d5U,0x6c5c7448U,0xb85742d0U, +}; +static const UINT8 Td4[256]={ + 0x52U,0x09U,0x6aU,0xd5U,0x30U,0x36U,0xa5U,0x38U,0xbfU,0x40U,0xa3U,0x9eU,0x81U,0xf3U,0xd7U,0xfbU, + 0x7cU,0xe3U,0x39U,0x82U,0x9bU,0x2fU,0xffU,0x87U,0x34U,0x8eU,0x43U,0x44U,0xc4U,0xdeU,0xe9U,0xcbU, + 0x54U,0x7bU,0x94U,0x32U,0xa6U,0xc2U,0x23U,0x3dU,0xeeU,0x4cU,0x95U,0x0bU,0x42U,0xfaU,0xc3U,0x4eU, + 0x08U,0x2eU,0xa1U,0x66U,0x28U,0xd9U,0x24U,0xb2U,0x76U,0x5bU,0xa2U,0x49U,0x6dU,0x8bU,0xd1U,0x25U, + 0x72U,0xf8U,0xf6U,0x64U,0x86U,0x68U,0x98U,0x16U,0xd4U,0xa4U,0x5cU,0xccU,0x5dU,0x65U,0xb6U,0x92U, + 0x6cU,0x70U,0x48U,0x50U,0xfdU,0xedU,0xb9U,0xdaU,0x5eU,0x15U,0x46U,0x57U,0xa7U,0x8dU,0x9dU,0x84U, + 0x90U,0xd8U,0xabU,0x00U,0x8cU,0xbcU,0xd3U,0x0aU,0xf7U,0xe4U,0x58U,0x05U,0xb8U,0xb3U,0x45U,0x06U, + 0xd0U,0x2cU,0x1eU,0x8fU,0xcaU,0x3fU,0x0fU,0x02U,0xc1U,0xafU,0xbdU,0x03U,0x01U,0x13U,0x8aU,0x6bU, + 0x3aU,0x91U,0x11U,0x41U,0x4fU,0x67U,0xdcU,0xeaU,0x97U,0xf2U,0xcfU,0xceU,0xf0U,0xb4U,0xe6U,0x73U, + 0x96U,0xacU,0x74U,0x22U,0xe7U,0xadU,0x35U,0x85U,0xe2U,0xf9U,0x37U,0xe8U,0x1cU,0x75U,0xdfU,0x6eU, + 0x47U,0xf1U,0x1aU,0x71U,0x1dU,0x29U,0xc5U,0x89U,0x6fU,0xb7U,0x62U,0x0eU,0xaaU,0x18U,0xbeU,0x1bU, + 0xfcU,0x56U,0x3eU,0x4bU,0xc6U,0xd2U,0x79U,0x20U,0x9aU,0xdbU,0xc0U,0xfeU,0x78U,0xcdU,0x5aU,0xf4U, + 0x1fU,0xddU,0xa8U,0x33U,0x88U,0x07U,0xc7U,0x31U,0xb1U,0x12U,0x10U,0x59U,0x27U,0x80U,0xecU,0x5fU, + 0x60U,0x51U,0x7fU,0xa9U,0x19U,0xb5U,0x4aU,0x0dU,0x2dU,0xe5U,0x7aU,0x9fU,0x93U,0xc9U,0x9cU,0xefU, + 0xa0U,0xe0U,0x3bU,0x4dU,0xaeU,0x2aU,0xf5U,0xb0U,0xc8U,0xebU,0xbbU,0x3cU,0x83U,0x53U,0x99U,0x61U, + 0x17U,0x2bU,0x04U,0x7eU,0xbaU,0x77U,0xd6U,0x26U,0xe1U,0x69U,0x14U,0x63U,0x55U,0x21U,0x0cU,0x7dU, +}; +static const UINT32 rcon[]={ + 0x01000000,0x02000000,0x04000000,0x08000000,0x10000000,0x20000000,0x40000000,0x80000000,0x1B000000 +}; +UINT32 decrd[4*15]; +UINT8 aes_iv[16]; + +void aes_init(unsigned char *pass) +{ + UINT32 i=0,j=0,t,*rk; + CopyMem(aes_iv,pass+(pass[0]&0xF),16); + rk=decrd; + rk[0]=GETU32(pass );rk[1]=GETU32(pass+ 4);rk[2]=GETU32(pass+ 8);rk[3]=GETU32(pass+12); + rk[4]=GETU32(pass+16);rk[5]=GETU32(pass+20);rk[6]=GETU32(pass+24);rk[7]=GETU32(pass+28); + while (1) { + t=rk[7];rk[8]=rk[0]^(Te2[(t>>16)&0xff]&0xff000000)^(Te3[(t>>8)&0xff]&0x00ff0000)^ + (Te0[(t)&0xff]&0x0000ff00)^(Te1[(t>>24)]&0x000000ff)^rcon[i]; + rk[9]=rk[1]^rk[8];rk[10]=rk[2]^rk[9];rk[11]=rk[3]^rk[10]; + if(++i==7) break; + t=rk[11];rk[12]=rk[4]^(Te2[(t>>24)]&0xff000000)^(Te3[(t>>16)&0xff]&0x00ff0000)^ + (Te0[(t>>8)&0xff]&0x0000ff00)^(Te1[(t)&0xff]&0x000000ff); + rk[13]=rk[5]^rk[12];rk[14]=rk[6]^rk[13];rk[15]=rk[7]^rk[14];rk+=8; + } + rk=decrd; + for(i=0,j=4*14;i>24)]&0xff]^Td1[Te1[(rk[0]>>16)&0xff]&0xff]^ + Td2[Te1[(rk[0]>>8)&0xff]&0xff]^Td3[Te1[(rk[0])&0xff]&0xff]; + rk[1]=Td0[Te1[(rk[1]>>24)]&0xff]^Td1[Te1[(rk[1]>>16)&0xff]&0xff]^ + Td2[Te1[(rk[1]>>8)&0xff]&0xff]^Td3[Te1[(rk[1])&0xff]&0xff]; + rk[2]=Td0[Te1[(rk[2]>>24)]&0xff]^Td1[Te1[(rk[2]>>16)&0xff]&0xff]^ + Td2[Te1[(rk[2]>>8)&0xff]&0xff]^Td3[Te1[(rk[2])&0xff]&0xff]; + rk[3]=Td0[Te1[(rk[3]>>24)]&0xff]^Td1[Te1[(rk[3]>>16)&0xff]&0xff]^ + Td2[Te1[(rk[3]>>8)&0xff]&0xff]^Td3[Te1[(rk[3])&0xff]&0xff]; + } +} + +void aes_dec(unsigned char *data, UINT32 l) +{ + UINT32 rd[4*15],*rk=rd,n,s0,s1,s2,s3,t0,t1,t2,t3; + unsigned char ivec[16],c[sizeof(ivec)],d,*out=data; + CopyMem(&rd,&decrd,sizeof(rd)); + CopyMem(ivec,aes_iv,sizeof(ivec)); + while(l>=16) { + rk=rd;s0=GETU32(out)^rk[0];s1=GETU32(out+4)^rk[1];s2=GETU32(out+8)^rk[2];s3=GETU32(out+12)^rk[3]; + for(n=14>>1;;){ + t0=Td0[(s0>>24)]^Td1[(s3>>16)&0xff]^Td2[(s2>>8)&0xff]^Td3[(s1)&0xff]^rk[4]; + t1=Td0[(s1>>24)]^Td1[(s0>>16)&0xff]^Td2[(s3>>8)&0xff]^Td3[(s2)&0xff]^rk[5]; + t2=Td0[(s2>>24)]^Td1[(s1>>16)&0xff]^Td2[(s0>>8)&0xff]^Td3[(s3)&0xff]^rk[6]; + t3=Td0[(s3>>24)]^Td1[(s2>>16)&0xff]^Td2[(s1>>8)&0xff]^Td3[(s0)&0xff]^rk[7]; + rk+=8; + if(--n==0) break; + s0=Td0[(t0>>24)]^Td1[(t3>>16)&0xff]^Td2[(t2>>8)&0xff]^Td3[(t1)&0xff]^rk[0]; + s1=Td0[(t1>>24)]^Td1[(t0>>16)&0xff]^Td2[(t3>>8)&0xff]^Td3[(t2)&0xff]^rk[1]; + s2=Td0[(t2>>24)]^Td1[(t1>>16)&0xff]^Td2[(t0>>8)&0xff]^Td3[(t3)&0xff]^rk[2]; + s3=Td0[(t3>>24)]^Td1[(t2>>16)&0xff]^Td2[(t1>>8)&0xff]^Td3[(t0)&0xff]^rk[3]; + } + s0=((uint32_t)Td4[(t0>>24)]<<24)^((uint32_t)Td4[(t3>>16)&0xff]<<16)^ + ((uint32_t)Td4[(t2>>8)&0xff]<<8)^((uint32_t)Td4[(t1)&0xff])^rk[0]; + PUTU32(c,s0); + s1=((uint32_t)Td4[(t1>>24)]<<24)^((uint32_t)Td4[(t0>>16)&0xff]<<16)^ + ((uint32_t)Td4[(t3>>8)&0xff]<<8)^((uint32_t)Td4[(t2)&0xff])^rk[1]; + PUTU32(c+4,s1); + s2=((uint32_t)Td4[(t2>>24)]<<24)^((uint32_t)Td4[(t1>>16)&0xff]<<16)^ + ((uint32_t)Td4[(t0>>8)&0xff]<<8)^((uint32_t)Td4[(t3)&0xff])^rk[2]; + PUTU32(c+8,s2); + s3=((uint32_t)Td4[(t3>>24)]<<24)^((uint32_t)Td4[(t2>>16)&0xff]<<16)^ + ((uint32_t)Td4[(t1>>8)&0xff]<<8)^((uint32_t)Td4[(t0)&0xff])^rk[3]; + PUTU32(c+12,s3); + for(n=0;n<16;n++) {d=out[n];out[n]=c[n]^ivec[n];ivec[n]=d;} + l-=16; + out+=16; + } +} + +/** + * Read a line from ConIn + */ +int ReadLine(unsigned char *buf, int l) +{ + int i=0; + EFI_INPUT_KEY key; + while(1) { + if(!uefi_call_wrapper(CI->ReadKeyStroke, 2, CI, &key)) { + if(key.UnicodeChar==CHAR_LINEFEED || key.UnicodeChar==CHAR_CARRIAGE_RETURN) { + break; + } else + if(key.UnicodeChar==CHAR_BACKSPACE || key.ScanCode==SCAN_DELETE) { + if(i) i--; + buf[i]=0; + continue; + } else + if(key.ScanCode==SCAN_ESC) { + buf[0]=0; + return 0; + } else + if(key.UnicodeChar && i>6)&0x1F)|0xC0; + buf[i++]=(key.UnicodeChar&0x3F)|0x80; + } else { + buf[i++]=((key.UnicodeChar>>12)&0xF)|0xE0; + buf[i++]=((key.UnicodeChar>>6)&0x3F)|0x80; + buf[i++]=(key.UnicodeChar&0x3F)|0x80; + } + buf[i]=0; + } + } + } + return i; +} + +/** + * function to convert ascii to number + */ +int atoi(unsigned char*c) +{ + int r=0; + while(*c>='0'&&*c<='9') { + r*=10; r+=*c-'0'; + c++; + } + return r; +} + +/** + * convert ascii to unicode characters + */ +CHAR16 * +a2u (char *str) +{ + static CHAR16 mem[PAGESIZE]; + int i; + + for (i = 0; str[i]; ++i) + mem[i] = (CHAR16) str[i]; + mem[i] = 0; + return mem; +} + +/** + * report status with message to standard output + */ +EFI_STATUS +report(EFI_STATUS Status,CHAR16 *Msg) +{ + Print(L"BOOTBOOT-PANIC: %s (EFI %r)\n",Msg,Status); + return Status; +} + +/** + * convert ascii octal number to binary number + */ +int oct2bin(unsigned char *str,int size) +{ + int s=0; + unsigned char *c=str; + while(size-->0){ + s*=8; + s+=*c-'0'; + c++; + } + return s; +} + +/** + * convert ascii hex number to binary number + */ +int hex2bin(unsigned char *str, int size) +{ + int v=0; + while(size-->0){ + v <<= 4; + if(*str>='0' && *str<='9') + v += (int)((unsigned char)(*str)-'0'); + else if(*str >= 'A' && *str <= 'F') + v += (int)((unsigned char)(*str)-'A'+10); + str++; + } + return v; +} + +/** + * Add a mapping to paging tables + */ +int freep = 24; +void MapPage(UINT64 virt, UINT64 phys) +{ + int i,j; + j = (virt>>(9+12)) & 0x1FF; + if(!paging[22*512 + j] || (paging[22*512 + j] & 0xFF) == 0x83) { + if(freep == 37) return; + paging[22*512 + j]=(UINT64)((UINT8 *)paging+freep*PAGESIZE+3); + freep++; + } + i = (paging[22*512 + j] - (UINT64)((UINT8 *)paging)) >> 12; + j = (virt>>(12)) & 0x1FF; + paging[i*512 + j] = phys | 1; +} + +// get filesystem drivers for initrd +#include "fs.h" + +/** + * Parse FS0:\BOOTBOOT\CONFIG or /sys/config + */ +EFI_STATUS +ParseEnvironment(unsigned char *cfg, int len, INTN argc, CHAR16 **argv) +{ + unsigned char *ptr=cfg-1; + int i; + // failsafe + if(len>PAGESIZE-1) { + len=PAGESIZE-1; + } + // append temporary variables provided on EFI command line + // if a key exists multiple times, the last is used + cfg[len]=0; + if(argc>2){ + ptr=cfg+len; + for(i=3;icfg && ptr[-1]!=' '&&ptr[-1]!='\t'&&ptr[-1]!='\r'&&ptr[-1]!='\n') + continue; + // parse screen dimensions + if(!CompareMem(ptr,(const CHAR8 *)"screen=",7)){ + ptr+=7; + reqwidth=atoi(ptr); + while(ptrLocateProtocol, 3, &gopGuid, NULL, (void**)&gop); + if(EFI_ERROR(status) && gop) + return status; + + // minimum resolution + if(reqwidth < 640) reqwidth = 640; + if(reqheight < 480) reqheight = 480; + + // get current video mode + status = uefi_call_wrapper(gop->QueryMode, 4, gop, gop->Mode==NULL?0:gop->Mode->Mode, &SizeOfInfo, &info); + if (status == EFI_NOT_STARTED) + status = uefi_call_wrapper(gop->SetMode, 2, gop, 0); + if(EFI_ERROR(status)) + return status; + nativeMode = gop->Mode->Mode; + imax=gop->Mode->MaxMode; + for (i = 0; i < imax; i++) { + status = uefi_call_wrapper(gop->QueryMode, 4, gop, i, &SizeOfInfo, &info); + // failsafe + if (EFI_ERROR(status)) + continue; +#if GOP_DEBUG + valid=0; +#endif + // get the mode for the closest resolution + if((info->PixelFormat == PixelRedGreenBlueReserved8BitPerColor || + info->PixelFormat == PixelBlueGreenRedReserved8BitPerColor +// there's a bug in TianoCore, it reports bad masks in PixelInformation, so we don't use PixelBitMask +// || (info->PixelFormat == PixelBitMask) + )){ + if(info->HorizontalResolution >= (unsigned int)reqwidth && + info->VerticalResolution >= (unsigned int)reqheight && + (selectedMode==9999||(info->HorizontalResolutionVerticalResolution < sh))) { + selectedMode = i; + sw = info->HorizontalResolution; + sh = info->VerticalResolution; + } +#if GOP_DEBUG + valid=1; +#endif + } +#if GOP_DEBUG + DBG(L" %c%2d %4d x %4d, %d%c ", i==selectedMode?'+':(i==nativeMode?'-':' '), + i, info->HorizontalResolution, info->VerticalResolution, info->PixelFormat,valid?' ':'?'); + DBG(L"r:%x g:%x b:%x\n", + info->PixelFormat==PixelRedGreenBlueReserved8BitPerColor?0xff:( + info->PixelFormat==PixelBlueGreenRedReserved8BitPerColor?0xff0000:( + info->PixelFormat==PixelBitMask?info->PixelInformation.RedMask:0)), + info->PixelFormat==PixelRedGreenBlueReserved8BitPerColor || + info->PixelFormat==PixelBlueGreenRedReserved8BitPerColor?0xff00:( + info->PixelFormat==PixelBitMask?info->PixelInformation.GreenMask:0), + info->PixelFormat==PixelRedGreenBlueReserved8BitPerColor?0xff0000:( + info->PixelFormat==PixelBlueGreenRedReserved8BitPerColor?0xff:( + info->PixelFormat==PixelBitMask?info->PixelInformation.BlueMask:0))); +#endif + } + // if we have found a new, better mode + if(selectedMode != 9999 && selectedMode != nativeMode) { + status = uefi_call_wrapper(gop->SetMode, 2, gop, selectedMode); + if(!EFI_ERROR(status)) + nativeMode = selectedMode; + } + // get framebuffer properties + bootboot->fb_ptr=(uint64_t)gop->Mode->FrameBufferBase; + bootboot->fb_size=gop->Mode->FrameBufferSize; + bootboot->fb_scanline=4*gop->Mode->Info->PixelsPerScanLine; + bootboot->fb_width=gop->Mode->Info->HorizontalResolution; + bootboot->fb_height=gop->Mode->Info->VerticalResolution; + bootboot->fb_type= + gop->Mode->Info->PixelFormat==PixelBlueGreenRedReserved8BitPerColor || + (gop->Mode->Info->PixelFormat==PixelBitMask && gop->Mode->Info->PixelInformation.BlueMask==0)? FB_ARGB : ( + gop->Mode->Info->PixelFormat==PixelRedGreenBlueReserved8BitPerColor || + (gop->Mode->Info->PixelFormat==PixelBitMask && gop->Mode->Info->PixelInformation.RedMask==0)? FB_ABGR : ( + gop->Mode->Info->PixelInformation.BlueMask==0xFF00? FB_RGBA : FB_BGRA + )); + DBG(L" * Screen %d x %d, scanline %d, fb @%lx %d bytes, type %d %s\n", + bootboot->fb_width, bootboot->fb_height, bootboot->fb_scanline, + bootboot->fb_ptr, bootboot->fb_size, gop->Mode->Info->PixelFormat, + bootboot->fb_type==FB_ARGB?L"ARGB":(bootboot->fb_type==FB_ABGR?L"ABGR":( + bootboot->fb_type==FB_RGBA?L"RGBA":L"BGRA"))); + return EFI_SUCCESS; +} + +/** + * Load a file from FS0 into memory + */ +EFI_STATUS +LoadFile(IN CHAR16 *FileName, OUT UINT8 **FileData, OUT UINTN *FileDataLength) +{ + EFI_STATUS status; + EFI_FILE_HANDLE FileHandle; + EFI_FILE_INFO *FileInfo; + UINT64 ReadSize; + UINTN BufferSize; + UINT8 *Buffer = NULL; + + if ((RootDir == NULL) || (FileName == NULL)) { + return report(EFI_NOT_FOUND,L"Empty Root or FileName\n"); + } + + status = uefi_call_wrapper(RootDir->Open, 5, RootDir, &FileHandle, FileName, + EFI_FILE_MODE_READ, EFI_FILE_READ_ONLY | EFI_FILE_HIDDEN | EFI_FILE_SYSTEM); + if (EFI_ERROR(status)) { + return status; +// Print(L"%s not found\n",FileName); +// return report(status,L"Open error"); + } + FileInfo = LibFileInfo(FileHandle); + if (FileInfo == NULL) { + uefi_call_wrapper(FileHandle->Close, 1, FileHandle); + Print(L"%s not found\n",FileName); + return report(EFI_NOT_FOUND,L"FileInfo error"); + } + ReadSize = FileInfo->FileSize; + if (ReadSize > 16*1024*1024) + ReadSize = 16*1024*1024; + FreePool(FileInfo); + + BufferSize = (UINTN)((ReadSize+PAGESIZE-1)/PAGESIZE); + status = uefi_call_wrapper(BS->AllocatePages, 4, 0, 2, BufferSize, (EFI_PHYSICAL_ADDRESS*)&Buffer); + if (EFI_ERROR(status) || Buffer == NULL) { + uefi_call_wrapper(FileHandle->Close, 1, FileHandle); + return report(EFI_OUT_OF_RESOURCES,L"AllocatePages"); + } + status = uefi_call_wrapper(FileHandle->Read, 3, FileHandle, &ReadSize, Buffer); + uefi_call_wrapper(FileHandle->Close, 1, FileHandle); + if (EFI_ERROR(status)) { + uefi_call_wrapper(BS->FreePages, 2, (EFI_PHYSICAL_ADDRESS)(Buffer), BufferSize); + Print(L"%s not found\n",FileName); + return report(status,L"Read error"); + } + + *FileData = Buffer; + *FileDataLength = ReadSize; + return EFI_SUCCESS; +} + +/** + * Locate and load the kernel in initrd + */ +EFI_STATUS +LoadCore() +{ + EFI_STATUS status; + int i=0,bss=0; + UINT8 *ptr; + core.ptr=ptr=NULL; + while(core.ptr==NULL && fsdrivers[i]!=NULL) { + core=(*fsdrivers[i++])((unsigned char*)initrd.ptr,kernelname); + } + // if every driver failed, try brute force, scan for the first elf or pe executable + if(core.ptr==NULL) { + DBG(L" * Autodetecting kernel%s\n",L""); + i=initrd.size; + ptr=initrd.ptr; + while(i-->0) { + Elf64_Ehdr *ehdr=(Elf64_Ehdr *)(ptr); + pe_hdr *pehdr=(pe_hdr*)(ptr + ((mz_hdr*)(ptr))->peaddr); + if((!CompareMem(ehdr->e_ident,ELFMAG,SELFMAG)||!CompareMem(ehdr->e_ident,"OS/Z",4))&& + ehdr->e_ident[EI_CLASS]==ELFCLASS64&& + ehdr->e_ident[EI_DATA]==ELFDATA2LSB&& + ehdr->e_machine==EM_X86_64&& + ehdr->e_phnum>0){ + core.ptr=ptr; + break; + } + if(((mz_hdr*)(ptr))->magic==MZ_MAGIC && ((mz_hdr*)(ptr))->peaddr<65536 && pehdr->magic == PE_MAGIC && + pehdr->machine == IMAGE_FILE_MACHINE_AMD64 && pehdr->file_type == PE_OPT_MAGIC_PE32PLUS) { + core.ptr=ptr; + break; + } + ptr++; + } + } + + if(core.ptr!=NULL) { + Elf64_Ehdr *ehdr=(Elf64_Ehdr *)(core.ptr); + pe_hdr *pehdr=(pe_hdr*)(core.ptr + ((mz_hdr*)(core.ptr))->peaddr); + if((!CompareMem(ehdr->e_ident,ELFMAG,SELFMAG)||!CompareMem(ehdr->e_ident,"OS/Z",4))&& + ehdr->e_ident[EI_CLASS]==ELFCLASS64&&ehdr->e_ident[EI_DATA]==ELFDATA2LSB&& + ehdr->e_machine==EM_X86_64&&ehdr->e_phnum>0){ + // Parse ELF64 + DBG(L" * Parsing ELF64 @%lx\n",core.ptr); + Elf64_Phdr *phdr=(Elf64_Phdr *)((UINT8 *)ehdr+ehdr->e_phoff); + for(i=0;ie_phnum;i++){ + if(phdr->p_type==PT_LOAD && (phdr->p_vaddr >> 30) == 0x3FFFFFFFF) { + // hack to keep symtab and strtab for shared libraries + core.size = phdr->p_filesz + (ehdr->e_type==3?0x4000:0); + ptr = (UINT8*)ehdr + phdr->p_offset; + bss = phdr->p_memsz - core.size; + core_addr = phdr->p_vaddr; + entrypoint = ehdr->e_entry; + break; + } + phdr=(Elf64_Phdr *)((UINT8 *)phdr+ehdr->e_phentsize); + } + if(ehdr->e_shoff > 0) { + Elf64_Shdr *shdr=(Elf64_Shdr *)((UINT8 *)ehdr + ehdr->e_shoff), *sym_sh = NULL, *str_sh = NULL; + Elf64_Shdr *strt=(Elf64_Shdr *)((UINT8 *)shdr+(UINT64)ehdr->e_shstrndx*(UINT64)ehdr->e_shentsize); + Elf64_Sym *sym = NULL, *s; + char *strtable = (char *)ehdr + strt->sh_offset; + UINT32 strsz = 0, syment = 0; + for(i = 0; i < ehdr->e_shnum; i++){ + /* checking shdr->sh_type is not enough, there can be multiple SHT_STRTAB records... */ + if(!CompareMem(strtable + shdr->sh_name, ".symtab", 8)) sym_sh = shdr; + if(!CompareMem(strtable + shdr->sh_name, ".strtab", 8)) str_sh = shdr; + shdr = (Elf64_Shdr *)((UINT8 *)shdr + ehdr->e_shentsize); + } + if(str_sh && sym_sh) { + strtable = (char *)ehdr + str_sh->sh_offset; strsz = str_sh->sh_size; + sym = (Elf64_Sym *)((UINT8*)ehdr + sym_sh->sh_offset); syment = sym_sh->sh_entsize; + if(str_sh->sh_offset && strsz > 0 && sym_sh->sh_offset && syment > 0) + for(s = sym, i = 0; i<(strtable-(char*)sym)/syment && s->st_name < strsz; i++, s++) { + if(!CompareMem(strtable + s->st_name, "bootboot", 9)) bb_addr = s->st_value; + if(!CompareMem(strtable + s->st_name, "environment", 12)) env_addr = s->st_value; + if(!CompareMem(strtable + s->st_name, "fb", 3)) fb_addr = s->st_value; + if(!CompareMem(strtable + s->st_name, "initstack", 10)) initstack = s->st_value; + } + } + } + } else if(((mz_hdr*)(core.ptr))->magic==MZ_MAGIC && ((mz_hdr*)(core.ptr))->peaddr<65536 && pehdr->magic == PE_MAGIC && + pehdr->machine == IMAGE_FILE_MACHINE_AMD64 && pehdr->file_type == PE_OPT_MAGIC_PE32PLUS && + (pehdr->code_base & 0xC0000000)) { + // Parse PE32+ + DBG(L" * Parsing PE32+ @%lx\n",core.ptr); + core.size = (pehdr->entry_point-pehdr->code_base) + pehdr->text_size + pehdr->data_size; + ptr = core.ptr; + bss = pehdr->bss_size; + core_addr = (INT64)pehdr->code_base; + entrypoint = (INT64)pehdr->entry_point; + if(pehdr->sym_table > 0 && pehdr->numsym > 0) { + pe_sym *s; + char *strtable = (char *)pehdr + pehdr->sym_table + pehdr->numsym * 18 + 4, *name; + for(i = 0; i < pehdr->numsym; i++) { + s = (pe_sym*)((UINT8 *)pehdr + pehdr->sym_table + i * 18); + name = !s->iszero ? (char*)&s->iszero : strtable + s->nameoffs; + if(!CompareMem(name, "bootboot", 9)) bb_addr = (INT64)s->value; + if(!CompareMem(name, "environment", 12)) env_addr = (INT64)s->value; + if(!CompareMem(name, "fb", 3)) fb_addr = (INT64)s->value; + if(!CompareMem(name, "initstack", 10)) initstack = (INT64)s->value; + i += s->auxsyms; + } + } + } + if(ptr==NULL || core.size<2 || entrypoint==0 || (core_addr&(PAGESIZE-1)) || (bb_addr>>30)!=0x3FFFFFFFF || + (bb_addr & (PAGESIZE-1)) || (env_addr>>30)!=0x3FFFFFFFF || (env_addr&(PAGESIZE-1)) || (fb_addr>>30)!=0x3FFFFFFFF || + (fb_addr&(1024*1024*2-1))) + return report(EFI_LOAD_ERROR,L"Kernel is not a valid executable"); + if(core.size+bss > 16*1024*1024) + return report(EFI_LOAD_ERROR,L"Kernel is too big"); + if(initstack < 1024) initstack = 1024; + if(initstack > 16384) initstack = 16384; + // create core segment + core.ptr = NULL; + status = uefi_call_wrapper(BS->AllocatePages, 4, 0, 2, + (core.size + bss + PAGESIZE-1)/PAGESIZE, (EFI_PHYSICAL_ADDRESS*)&core.ptr); + if (EFI_ERROR(status) || core.ptr == NULL) + return report(EFI_OUT_OF_RESOURCES,L"AllocatePages"); + CopyMem((void*)core.ptr,ptr,core.size); + if(bss>0) + ZeroMem((UINT8*)core.ptr + core.size, bss); + core.size += bss; + DBG(L" * fb @%lx\n", fb_addr); + DBG(L" * bootboot @%lx\n", bb_addr); + DBG(L" * environment @%lx\n", env_addr); + DBG(L" * Entry point @%lx, text @%lx %d bytes\n",entrypoint, core.ptr, core.size); + if(initstack != 1024) { + DBG(L" * Stack size %ld bytes per core\n", initstack); + } + core.size = ((core.size+PAGESIZE-1)/PAGESIZE)*PAGESIZE; + return EFI_SUCCESS; + + } + return report(EFI_LOAD_ERROR,L"Kernel not found in initrd"); +} + +/** + * Initialize logical cores + * Because Local APIC ID is not contiguous, core id != core num + */ +VOID EFIAPI bootboot_startcore(IN VOID* buf) +{ +#if USE_MP_SERVICES + // we have a scalar number, not a pointer, so cast it + register UINTN core_num = (UINTN)buf; +#else + (void)buf; + register UINT16 core_num = 0; + if(lapic_addr) { + // enable Local APIC + *((volatile uint32_t*)(lapic_addr + 0x0F0)) = *((volatile uint32_t*)(lapic_addr + 0x0F0)) | 0x100; + core_num = lapic_ids[*((volatile uint32_t*)(lapic_addr + 0x20)) >> 24]; + } +#endif + ap_done = 1; + + // spinlock until BSP finishes (or forever if we got an invalid lapicid, should never happen) + do { __asm__ __volatile__ ("pause" : : : "memory"); } while(!bsp_done && core_num != 0xFFFF); + + // enable SSE + __asm__ __volatile__ ( + "movl $0xC0000011, %%eax;" + "movq %%rax, %%cr0;" + "movq %%cr4, %%rax;" + "orw $3 << 8, %%ax;" + "mov %%rax, %%cr4" + : ); + + // set up paging + __asm__ __volatile__ ( + "mov %0, %%rax;" + "mov %%rax, %%cr3" + : : "b"(paging) : "memory" ); + + // set stack and call _start() in sys/core + __asm__ __volatile__ ( + // get a valid stack for the core we're running on + "xorq %%rsp, %%rsp;" + "subq %0, %%rsp;" // sp = core_num * -initstack + // pass control over + "pushq %1;" + "movq %2, %%rdi;" + "retq" + : : "a"((UINTN)core_num*initstack), "b"(entrypoint), "c"((UINTN)core_num) : "memory" ); +} + +/** + * Main EFI application entry point + */ +EFI_STATUS +efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab) +{ + EFI_LOADED_IMAGE *loaded_image = NULL; + EFI_GUID lipGuid = LOADED_IMAGE_PROTOCOL; + EFI_GUID RomTableGuid = EFI_PCI_OPTION_ROM_TABLE_GUID; + EFI_PCI_OPTION_ROM_TABLE *RomTable; + EFI_GUID bioGuid = BLOCK_IO_PROTOCOL; + EFI_BLOCK_IO *bio; + EFI_HANDLE *handles = NULL; + EFI_STATUS status=EFI_SUCCESS; + EFI_MEMORY_DESCRIPTOR *memory_map = NULL, *mement; + EFI_PARTITION_TABLE_HEADER *gptHdr; + EFI_PARTITION_ENTRY *gptEnt; + EFI_INPUT_KEY key; +#if USE_MP_SERVICES + EFI_EVENT Event; + EFI_GUID mpspGuid = EFI_MP_SERVICES_PROTOCOL_GUID; + EFI_MP_SERVICES_PROTOCOL *mp = NULL; + UINT8 pibuffer[100]; + EFI_PROCESSOR_INFORMATION *pibuf=(EFI_PROCESSOR_INFORMATION*)pibuffer; +#else + UINT64 ncycles = 0, currtime, endtime; + UINTN bad_madt=0; +#endif + EFI_GUID SerIoGuid = EFI_SERIAL_IO_PROTOCOL_GUID; + EFI_SERIAL_IO_PROTOCOL *ser = NULL; + UINTN bsp_num=0, i, j=0, x,y, handle_size=0,memory_map_size=0, map_key=0, desc_size=0; + UINT32 desc_version=0, a, b; + UINT64 lba_s=0,lba_e=0,sysptr; + MMapEnt *mmapent, *last=NULL, *sort; + file_t ret={NULL,0}; + CHAR16 **argv, *initrdfile, *configfile, *help= + L"SYNOPSIS\n BOOTBOOT.EFI [ -h | -? | /h | /? | -s ] [ INITRDFILE [ ENVIRONFILE [...] ] ]\n\nDESCRIPTION\n Bootstraps an operating system via the BOOTBOOT Protocol.\n If arguments not given, defaults to\n FS0:\\BOOTBOOT\\INITRD as ramdisk image and\n FS0:\\BOOTBOOT\\CONFIG for boot environment.\n Additional \"key=value\" command line arguments will be appended to the\n environment. If INITRD not found, it will use the first bootable partition\n in GPT. If CONFIG not found, it will look for /sys/config inside the\n INITRD (or partition). With -s it will scan the memory for an initrd ROM.\n\n As this is a loader, it is not supposed to return control to the shell.\n\n"; + INTN argc, scanmemory=0; + + // Initialize UEFI Library + InitializeLib(image, systab); + BS = systab->BootServices; + CI = systab->ConIn; + + // Parse command line arguments + // BOOTBOOT.EFI [-?|-h|/?|/h] [initrd [config [key=value...]] + argc = GetShellArgcArgv(image, &argv); + if(argc>1) { + if((argv[1][0]=='-'||argv[1][0]=='/')&&(argv[1][1]=='?'||argv[1][1]=='h')){ + Print(L"BOOTBOOT LOADER (build %s)\n\n%s",a2u(__DATE__),help); + return EFI_SUCCESS; + } + if(argv[1][0]=='-'||argv[1][0]=='s') { + argc--; argv++; scanmemory = 1; + } + } + if(argc>1) { + initrdfile=argv[1]; + } else { + initrdfile=L"\\BOOTBOOT\\INITRD"; + } + if(argc>2) { + configfile=argv[2]; + } else { + configfile=L"\\BOOTBOOT\\CONFIG"; + } + + Print(L"Booting OS...\n"); + + // get memory for bootboot structure + bootboot = NULL; + status = uefi_call_wrapper(BS->AllocatePages, 4, 0, 2, 1, (EFI_PHYSICAL_ADDRESS*)&bootboot); + if (EFI_ERROR(status) || bootboot == NULL) + return report(EFI_OUT_OF_RESOURCES,L"AllocatePages"); + ZeroMem((void*)bootboot,PAGESIZE); + CopyMem(bootboot->magic,BOOTBOOT_MAGIC,4); + // unlike BIOS+MultiBoot bootboot, no need to check if we have + // PAE + MSR + LME, as we're already in long mode. + __asm__ __volatile__ ( + "mov $1, %%eax;" + "cpuid;" + "shrl $24, %%ebx;" + "mov %%bx,%0" + : "=b"(bootboot->bspid) : : ); +#if !defined(USE_MP_SERVICES) || !USE_MP_SERVICES + // should be no need to check for RDSTC, available since Pentium, therefore + // all long mode capable CPUs should have it. But just to be on the safe side + __asm__ __volatile__ ("mov $1, %%eax; cpuid;" : "=d"(a) : : ); + if(a & (1<<4)) { + // calibrate CPU clock cycles + __asm__ __volatile__ ( "rdtsc" : "=a"(a),"=d"(b)); currtime=((UINT64)b << 32)|a; + uefi_call_wrapper(BS->Stall, 1, 1); + __asm__ __volatile__ ( "rdtsc" : "=a"(a),"=d"(b)); ncycles=((UINT64)b << 32)|a; + ncycles -= currtime; + ncycles /= 5; + if(ncycles < 1) ncycles = 1; + } else { + // fallback to dummy loops without RDTSC (should never happen) + ncycles = 0; + } +#define sleep(n) do { \ + if(ncycles) { \ + __asm__ __volatile__ ( "rdtsc" : "=a"(a),"=d"(b)); endtime=(((UINT64)b << 32)|a) + n*ncycles; \ + do { \ + __asm__ __volatile__ ( "rdtsc" : "=a"(a),"=d"(b)); currtime=((UINT64)b << 32)|a; \ + } while(currtime < endtime); \ + } else \ + __asm__ __volatile__ ("1: pause; dec %%ecx; or %%ecx, %%ecx; jnz 1b" : : "c"(n*1000) : "memory"); \ + } while(0) +#define send_ipi(a,m,v) do { \ + while(*((volatile uint32_t*)(lapic_addr + 0x300)) & (1 << 12)) __asm__ __volatile__ ("pause" : : : "memory"); \ + *((volatile uint32_t*)(lapic_addr + 0x310)) = (*((volatile uint32_t*)(lapic_addr + 0x310)) & 0x00ffffff) | (a << 24); \ + *((volatile uint32_t*)(lapic_addr + 0x300)) = (*((volatile uint32_t*)(lapic_addr + 0x300)) & m) | v; \ +} while(0) +#endif + + // locate InitRD in ROM + DBG(L" * Locate initrd in Option ROMs%s\n",L""); + RomTable = NULL; initrd.ptr = NULL; initrd.size = 0; + status=EFI_LOAD_ERROR; + // first, try RomTable + LibGetSystemConfigurationTable(&RomTableGuid,(void *)&(RomTable)); + if(RomTable!=NULL) { + for (i=0;iPciOptionRomCount;i++) { + ret.ptr=(UINT8*)RomTable->PciOptionRomDescriptors[i].RomAddress; + if(ret.ptr[0]==0x55 && ret.ptr[1]==0xAA && !CompareMem(ret.ptr+8,(const CHAR8 *)"INITRD",6)) { + CopyMem(&initrd.size,ret.ptr+16,4); + initrd.ptr=ret.ptr+32; + status=EFI_SUCCESS; + break; + } + } + } + //if not found, scan memory + if(scanmemory && (EFI_ERROR(status) || initrd.ptr==NULL)){ + status = uefi_call_wrapper(BS->GetMemoryMap, 5, + &memory_map_size, memory_map, NULL, &desc_size, NULL); + if (status!=EFI_BUFFER_TOO_SMALL || memory_map_size==0) { + return report(EFI_OUT_OF_RESOURCES,L"GetMemoryMap getSize"); + } + memory_map_size+=2*desc_size; + memory_map = NULL; + status = uefi_call_wrapper(BS->AllocatePages, 4, 0, 2, + (memory_map_size+PAGESIZE-1)/PAGESIZE, + (EFI_PHYSICAL_ADDRESS*)&memory_map); + if (EFI_ERROR(status) || memory_map == NULL) { + return report(EFI_OUT_OF_RESOURCES,L"AllocatePages"); + } + status = uefi_call_wrapper(BS->GetMemoryMap, 5, + &memory_map_size, memory_map, &map_key, &desc_size, &desc_version); + status=EFI_LOAD_ERROR; + for(mement=memory_map; + mementPhysicalStart==0 && mement->NumberOfPages==0)) + break; + // skip free and ACPI memory + if(mement->Type==7||(mement->Type>=9&&mement->Type<=13)) + continue; + // according to spec, EFI Option ROMs must start on 512 bytes boundary, not 2048 + for(ret.ptr=(UINT8*)mement->PhysicalStart; + ret.ptr+512<(UINT8*)mement->PhysicalStart+mement->NumberOfPages*PAGESIZE; + ret.ptr+=512) { + if(ret.ptr[0]==0x55 && ret.ptr[1]==0xAA && !CompareMem(ret.ptr+8,(const CHAR8 *)"INITRD",6)) { + CopyMem(&initrd.size,ret.ptr+16,4); + initrd.ptr=ret.ptr+32; + status=EFI_SUCCESS; + goto foundinrom; + } + } + } +foundinrom: + uefi_call_wrapper(BS->FreePages, 2, (EFI_PHYSICAL_ADDRESS)memory_map, (memory_map_size+PAGESIZE-1)/PAGESIZE); + } + // try reading the initrd from serial line + if(EFI_ERROR(status) || initrd.ptr==NULL){ + status = uefi_call_wrapper(BS->LocateProtocol, 3, &SerIoGuid, NULL, (void**)&ser); + if(!EFI_ERROR(status) && ser) { + // 1000 microsec timeout, mode 115200,8,n,1 + status = uefi_call_wrapper(ser->SetAttributes, 7, ser, 115200, 0, 1000, NoParity, 8, OneStopBit); + if(!EFI_ERROR(status)) { + i = 3; + uefi_call_wrapper(ser->Write, 3, ser, &i, "\003\003\003"); + i = 4; initrd.size = 0; + status = uefi_call_wrapper(ser->Read, 3, ser, &i, (VOID*)&initrd.size); + if(!EFI_ERROR(status) && i == 4) { + i = 2; + if(initrd.size < 32 || initrd.size >= INITRD_MAXSIZE*1024*1024) { + uefi_call_wrapper(ser->Write, 3, ser, &i, "SE"); + initrd.size = 0; + status = EFI_LOAD_ERROR; + } else { + initrd.ptr = NULL; + status = uefi_call_wrapper(BS->AllocatePages, 4, 0, 2, (initrd.size+PAGESIZE-1)/PAGESIZE, + (EFI_PHYSICAL_ADDRESS*)&initrd.ptr); + if (EFI_ERROR(status) || initrd.ptr == NULL) { + uefi_call_wrapper(ser->Write, 3, ser, &i, "SE"); + return report(EFI_OUT_OF_RESOURCES,L"AllocatePages"); + } + uefi_call_wrapper(ser->Write, 3, ser, &i, "OK"); + i = initrd.size; + status = uefi_call_wrapper(ser->Read, 3, ser, &i, (VOID*)initrd.ptr); + if(EFI_ERROR(status) || i != initrd.size) { + uefi_call_wrapper(BS->FreePages, 2, (EFI_PHYSICAL_ADDRESS)initrd.ptr, + (initrd.size+PAGESIZE-1)/PAGESIZE); + initrd.ptr = NULL; + initrd.size = 0; + status = EFI_LOAD_ERROR; + } + } + } + } + } + } + // fall back to INITRD on filesystem + if(EFI_ERROR(status) || initrd.ptr==NULL){ + // if the user presses any key now, we fallback to backup initrd + for(i=0;i<500;i++) { + if(!uefi_call_wrapper(BS->CheckEvent, 1, CI->WaitForKey)) { + uefi_call_wrapper(CI->ReadKeyStroke, 2, CI, &key); + Print(L" * Backup initrd\n"); + initrdfile=L"\\BOOTBOOT\\INITRD.BAK"; + break; + } + // delay 1ms + uefi_call_wrapper(BS->Stall, 1, 1000); + } + DBG(L" * Locate initrd in %s\n",initrdfile); + // Initialize FS with the DeviceHandler from loaded image protocol + status = uefi_call_wrapper(BS->HandleProtocol, + 3, + image, + &lipGuid, + (void **) &loaded_image); + if (!EFI_ERROR(status) && loaded_image!=NULL) { + status=EFI_LOAD_ERROR; + RootDir = LibOpenRoot(loaded_image->DeviceHandle); + // load ramdisk + status=LoadFile(initrdfile,&initrd.ptr, &initrd.size); + } + } + // if not found, try architecture specific initrd file + if(EFI_ERROR(status) || initrd.ptr==NULL){ + initrdfile=L"\\BOOTBOOT\\X86_64"; + DBG(L" * Locate initrd in %s\n",initrdfile); + status=LoadFile(initrdfile,&initrd.ptr, &initrd.size); + } + // if even that failed, look for a partition + if(status!=EFI_SUCCESS || initrd.size==0){ + DBG(L" * Locate initrd in GPT%s\n",L""); + status = uefi_call_wrapper(BS->LocateHandle, 5, ByProtocol, &bioGuid, NULL, &handle_size, handles); + if (status!=EFI_BUFFER_TOO_SMALL || handle_size==0) { + return report(EFI_OUT_OF_RESOURCES,L"LocateHandle getSize"); + } + handles = NULL; + status = uefi_call_wrapper(BS->AllocatePages, 4, 0, 2, (handle_size+PAGESIZE-1)/PAGESIZE, + (EFI_PHYSICAL_ADDRESS*)&handles); + if(EFI_ERROR(status) || handles == NULL) + return report(EFI_OUT_OF_RESOURCES,L"AllocatePages\n"); + initrd.ptr = NULL; + status = uefi_call_wrapper(BS->AllocatePages, 4, 0, 2, 1, (EFI_PHYSICAL_ADDRESS*)&initrd.ptr); + if (EFI_ERROR(status) || initrd.ptr == NULL) + return report(EFI_OUT_OF_RESOURCES,L"AllocatePages"); + lba_s=lba_e=0; + status = uefi_call_wrapper(BS->LocateHandle, 5, ByProtocol, &bioGuid, NULL, &handle_size, handles); + for(i=0;iHandleProtocol, 3, handles[i], &bioGuid, (void **) &bio); + if(status!=EFI_SUCCESS || bio==NULL || bio->Media->BlockSize==0) + continue; + status = uefi_call_wrapper(bio->ReadBlocks, 5, bio, bio->Media->MediaId, 1, PAGESIZE, initrd.ptr); + if(status!=EFI_SUCCESS || CompareMem(initrd.ptr,EFI_PTAB_HEADER_ID,8)) + continue; + gptHdr = (EFI_PARTITION_TABLE_HEADER*)initrd.ptr; + if(gptHdr->NumberOfPartitionEntries>127) gptHdr->NumberOfPartitionEntries=127; + // first, look for a partition with bootable flag + ret.ptr= (UINT8*)(initrd.ptr + (gptHdr->PartitionEntryLBA-1) * bio->Media->BlockSize); + for(j=0;jNumberOfPartitionEntries;j++) { + gptEnt=(EFI_PARTITION_ENTRY*)ret.ptr; + if((ret.ptr[0]==0 && ret.ptr[1]==0 && ret.ptr[2]==0 && ret.ptr[3]==0) || gptEnt->StartingLBA==0) + break; + // use first partition with bootable flag as INITRD + if((gptEnt->Attributes & EFI_PART_USED_BY_OS)) goto partfound; + ret.ptr+=gptHdr->SizeOfPartitionEntry; + } + // if none, look for specific partition types + ret.ptr= (UINT8*)(initrd.ptr + (gptHdr->PartitionEntryLBA-1) * bio->Media->BlockSize); + for(j=0;jNumberOfPartitionEntries;j++) { + gptEnt=(EFI_PARTITION_ENTRY*)ret.ptr; + if((ret.ptr[0]==0 && ret.ptr[1]==0 && ret.ptr[2]==0 && ret.ptr[3]==0) || gptEnt->StartingLBA==0) + break; + // use the first OS/Z root partition for this architecture + if(!CompareMem(&gptEnt->PartitionTypeGUID.Data1,"OS/Z",4) && + gptEnt->PartitionTypeGUID.Data2==0x8664 && + !CompareMem(&gptEnt->PartitionTypeGUID.Data4[4],"root",4)) { +partfound: lba_s=gptEnt->StartingLBA; lba_e=gptEnt->EndingLBA; + initrd.size = (((lba_e-lba_s)*bio->Media->BlockSize + PAGESIZE-1)/PAGESIZE)*PAGESIZE; + status=EFI_SUCCESS; + goto partok; + } + ret.ptr+=gptHdr->SizeOfPartitionEntry; + } + } + return report(EFI_LOAD_ERROR,L"No boot partition"); +partok: + uefi_call_wrapper(BS->FreePages, 2, (EFI_PHYSICAL_ADDRESS)initrd.ptr, 1); + if(initrd.size>0 && bio!=NULL) { + initrd.ptr = NULL; + status = uefi_call_wrapper(BS->AllocatePages, 4, 0, 2, initrd.size/PAGESIZE, (EFI_PHYSICAL_ADDRESS*)&initrd.ptr); + if (EFI_ERROR(status) || initrd.ptr == NULL) + return report(EFI_OUT_OF_RESOURCES,L"AllocatePages"); + status = uefi_call_wrapper(bio->ReadBlocks, 5, bio, bio->Media->MediaId, lba_s, initrd.size, initrd.ptr); + } else + status=EFI_LOAD_ERROR; + } + if(status==EFI_SUCCESS && initrd.size>0){ + //check if initrd is gzipped + if(initrd.ptr[0]==0x1f && initrd.ptr[1]==0x8b){ + unsigned char *addr,f; + int len=0, r; + TINF_DATA d; + DBG(L" * Gzip compressed initrd @%lx %d bytes\n",initrd.ptr,initrd.size); + // skip gzip header + addr=initrd.ptr+2; + if(*addr++!=8) goto gzerr; + f=*addr++; addr+=6; + if(f&4) { r=*addr++; r+=(*addr++ << 8); addr+=r; } + if(f&8) { while(*addr++ != 0); } + if(f&16) { while(*addr++ != 0); } + if(f&2) addr+=2; + d.source = addr; + // allocate destination buffer + CopyMem(&len,initrd.ptr+initrd.size-4,4); + addr = NULL; + status = uefi_call_wrapper(BS->AllocatePages, 4, 0, 2, (len+PAGESIZE-1)/PAGESIZE, (EFI_PHYSICAL_ADDRESS*)&addr); + if(EFI_ERROR(status) || addr == NULL) + return report(EFI_OUT_OF_RESOURCES,L"AllocatePages\n"); + // decompress + d.bitcount = 0; + d.bfinal = 0; + d.btype = -1; + d.dict_size = 0; + d.dict_ring = NULL; + d.dict_idx = 0; + d.curlen = 0; + d.dest = addr; + d.destSize = len; + do { r = uzlib_uncompress(&d); } while (!r); + if (r != TINF_DONE) { +gzerr: return report(EFI_COMPROMISED_DATA,L"Unable to uncompress"); + } + // swap initrd.ptr with the uncompressed buffer + // if it's not page aligned, we came from ROM, no FreePages + if(((UINT64)initrd.ptr&(PAGESIZE-1))==0) + uefi_call_wrapper(BS->FreePages, 2, (EFI_PHYSICAL_ADDRESS)initrd.ptr, (initrd.size+PAGESIZE-1)/PAGESIZE); + initrd.ptr=addr; + initrd.size=len; + } + DBG(L" * Initrd loaded @%lx %d bytes\n",initrd.ptr,initrd.size); + kne=env.ptr=NULL; + // if there's an environment file, load it + if(loaded_image!=NULL && LoadFile(configfile,&env.ptr,&env.size)!=EFI_SUCCESS) { + env.ptr=NULL; + } + if(env.ptr==NULL) { + // if there were no environment file on boot partition, find it inside the INITRD + j=0; ret.ptr=NULL; ret.size=0; + while(ret.ptr==NULL && fsdrivers[j]!=NULL) { + ret=(*fsdrivers[j++])((unsigned char*)initrd.ptr,cfgname); + } + if(ret.ptr!=NULL) { + if(ret.size>PAGESIZE-1) + ret.size=PAGESIZE-1; + env.ptr = NULL; + status = uefi_call_wrapper(BS->AllocatePages, 4, 0, 2, 1, (EFI_PHYSICAL_ADDRESS*)&env.ptr); + if(EFI_ERROR(status) || env.ptr == NULL) + return report(EFI_OUT_OF_RESOURCES,L"AllocatePages"); + ZeroMem((void*)env.ptr,PAGESIZE); + CopyMem((void*)env.ptr,ret.ptr,ret.size); + env.size=ret.size; + } + } + if(env.ptr!=NULL) { + ParseEnvironment(env.ptr,env.size, argc, argv); + } else { + // provide an empty environment for the OS + env.size = 0; + env.ptr = NULL; + status = uefi_call_wrapper(BS->AllocatePages, 4, 0, 2, 1, (EFI_PHYSICAL_ADDRESS*)&env.ptr); + if (EFI_ERROR(status) || env.ptr == NULL) { + return report(EFI_OUT_OF_RESOURCES,L"AllocatePages"); + } + ZeroMem((void*)env.ptr,PAGESIZE); + CopyMem((void*)env.ptr,"// N/A",8); + } + + // get linear frame buffer + status = GetLFB(); + if (EFI_ERROR(status) || bootboot->fb_width==0 || bootboot->fb_ptr==0) + return report(status, L"GOP failed, no framebuffer"); + + // collect information on system + bootboot->protocol=PROTOCOL_DYNAMIC | LOADER_UEFI; + bootboot->size=128; + CopyMem((void *)&(bootboot->initrd_ptr),&initrd.ptr,8); + bootboot->initrd_size=((initrd.size+PAGESIZE-1)/PAGESIZE)*PAGESIZE; + CopyMem((void *)&(bootboot->arch.x86_64.efi_ptr),&systab,8); + + // System tables and structures + DBG(L" * System tables%s\n",L""); + sysptr = 0; LibGetSystemConfigurationTable(&AcpiTableGuid,(void *)&sysptr); bootboot->arch.x86_64.acpi_ptr = sysptr; + sysptr = 0; LibGetSystemConfigurationTable(&SMBIOSTableGuid,(void *)&sysptr); bootboot->arch.x86_64.smbi_ptr = sysptr; + sysptr = 0; LibGetSystemConfigurationTable(&MpsTableGuid,(void *)&sysptr); bootboot->arch.x86_64.mp_ptr = sysptr; + + // FIX ACPI table pointer on TianoCore... + ret.ptr = (UINT8*)(bootboot->arch.x86_64.acpi_ptr); + if(CompareMem(ret.ptr,(const CHAR8 *)"RSDT", 4) && CompareMem(ret.ptr,(const CHAR8 *)"XSDT", 4)) { + // scan for the real rsd ptr, as AcpiTableGuid returns bad address + for(i=1;i<256;i++) { + if(!CompareMem(ret.ptr+i, (const CHAR8 *)"RSD PTR ", 8)){ + ret.ptr+=i; + break; + } + } + // get ACPI system table + ACPI_RSDPTR *rsd = (ACPI_RSDPTR*)ret.ptr; + if(rsd->xsdt!=0) + bootboot->arch.x86_64.acpi_ptr = rsd->xsdt; + else + bootboot->arch.x86_64.acpi_ptr = (UINT64)((UINT32)rsd->rsdt); + } + + // Date and time + EFI_TIME t; + uefi_call_wrapper(ST->RuntimeServices->GetTime, 2, &t, NULL); + bootboot->datetime[0]=DecimaltoBCD(t.Year/100); + bootboot->datetime[1]=DecimaltoBCD(t.Year%100); + bootboot->datetime[2]=DecimaltoBCD(t.Month); + bootboot->datetime[3]=DecimaltoBCD(t.Day); + bootboot->datetime[4]=DecimaltoBCD(t.Hour); + bootboot->datetime[5]=DecimaltoBCD(t.Minute); + bootboot->datetime[6]=DecimaltoBCD(t.Second); + bootboot->datetime[7]=DecimaltoBCD(t.Daylight); + CopyMem((void *)&bootboot->timezone, &t.TimeZone, 2); + if(bootboot->timezone<-1440||bootboot->timezone>1440) // TZ in mins + bootboot->timezone=0; + DBG(L" * System time %d-%02d-%02d %02d:%02d:%02d GMT%s%d:%02d %s\n", + t.Year,t.Month,t.Day,t.Hour,t.Minute,t.Second, + bootboot->timezone>=0?L"+":L"",bootboot->timezone/60,bootboot->timezone%60, + t.Daylight?L"summertime":L""); + // get sys/core and parse + status=LoadCore(); + if (EFI_ERROR(status)) + return status; + if(kne!=NULL) + *kne='\n'; + + // Symmetric Multi Processing support +#if USE_MP_SERVICES + status = uefi_call_wrapper(BS->LocateProtocol, 3, &mpspGuid, NULL, (void**)&mp); + if(!nosmp && !EFI_ERROR(status) && mp) { + // override default values in bootboot struct + status = uefi_call_wrapper(mp->GetNumberOfProcessors, 3, mp, &i, &j); + if(!EFI_ERROR(status)) { + // failsafe: we cannot map more stacks (each core has 1k) + if(i>PAGESIZE/8/2*4) i=PAGESIZE/8/2*4; + if(i<1) i = 1; + bootboot->numcores = i; + } + DBG(L" * SMP numcores %d\n", bootboot->numcores); + // start APs + status = uefi_call_wrapper(BS->CreateEvent, 5, 0, TPL_NOTIFY, NULL, NULL, &Event); + if(!EFI_ERROR(status)) { + for(i=0; inumcores; i++) { + status = uefi_call_wrapper(mp->GetProcessorInfo, 5, mp, i, pibuf); + if(!EFI_ERROR(status)) { + if(pibuf->StatusFlag & PROCESSOR_AS_BSP_BIT) { + bootboot->bspid = pibuf->ProcessorId; + bsp_num = i; + } else { + uefi_call_wrapper(mp->StartupThisAP, 7, mp, bootboot_startcore, i, Event, 0, (VOID*)i, NULL); + } + } + } + } + } else + bootboot->numcores = 1; +#else + UINT8 *ptr = (UINT8*)bootboot->arch.x86_64.acpi_ptr, *pe, *data; + UINT64 r; + for(i = 0; i < (int)(sizeof(lapic_ids)/sizeof(lapic_ids[0])); i++) lapic_ids[i] = 0xFFFF; + if(!nosmp && ptr && (ptr[0]=='X' || ptr[0]=='R') && ptr[1]=='S' && ptr[2]=='D' && ptr[3]=='T') { + pe = ptr; ptr += 36; + // iterate on ACPI table pointers + for(r = *((uint32_t*)(pe + 4)); ptr < pe + r; ptr += pe[0] == 'X' ? 8 : 4) { + data = (uint8_t*)(uintptr_t)(pe[0] == 'X' ? *((uint64_t*)ptr) : *((uint32_t*)ptr)); + if(!CompareMem(data, "APIC", 4)) { + // found MADT, iterate on its variable length entries + lapic_addr = (uint64_t)(*((uint32_t*)(data+0x24))); + for(r = *((uint32_t*)(data + 4)), ptr = data + 44, i = 0; ptr < data + r && + i < (int)(sizeof(lapic_ids)/sizeof(lapic_ids[0])); ptr += ptr[1]) { + switch(ptr[0]) { + case 0: // found Processor Local APIC + if((ptr[4] & 1) && ptr[3] != 0xFF && lapic_ids[(INTN)ptr[3]] == 0xFFFF) + lapic_ids[(INTN)ptr[3]] = i++; + else bad_madt++; + break; + case 5: lapic_addr = *((uint64_t*)(ptr+4)); break; // found 64 bit Local APIC Address + } + } + if(i) { + bsp_num = lapic_ids[bootboot->bspid]; + if(bsp_num == 0xFFFF) bsp_num = 0; + else { + bootboot->numcores = i; + DBG(L" * SMP numcores %d%s\n", bootboot->numcores, bad_madt ? L" (bad MADT)" : L""); + } + } + break; + } + } + } + if(nosmp || bootboot->numcores < 2 || !lapic_addr) { + bootboot->numcores = 1; + lapic_addr = 0; + } +#endif + + // query size of memory map + status = uefi_call_wrapper(BS->GetMemoryMap, 5, + &memory_map_size, memory_map, NULL, &desc_size, NULL); + if (status!=EFI_BUFFER_TOO_SMALL || memory_map_size==0) { + return report(EFI_OUT_OF_RESOURCES,L"GetMemoryMap getSize"); + } + // allocate memory for memory descriptors. We assume that one or two new memory + // descriptor may be created by our next allocate calls and we round up to page size + memory_map_size+=16*desc_size; + memory_map = NULL; + status = uefi_call_wrapper(BS->AllocatePages, 4, 0, 2, + (memory_map_size+PAGESIZE-1)/PAGESIZE, + (EFI_PHYSICAL_ADDRESS*)&memory_map); + if (EFI_ERROR(status) || memory_map == NULL) { + return report(EFI_OUT_OF_RESOURCES,L"AllocatePages"); + } + + // create page tables + paging = NULL; + status = uefi_call_wrapper(BS->AllocatePages, 4, 0, 2, 37+ + (bootboot->numcores*initstack+PAGESIZE-1)/PAGESIZE, (EFI_PHYSICAL_ADDRESS*)&paging); + if (EFI_ERROR(status) || paging == NULL) { + return report(EFI_OUT_OF_RESOURCES,L"AllocatePages"); + } + ZeroMem((void*)paging,(37+(bootboot->numcores*initstack+PAGESIZE-1)/PAGESIZE)*PAGESIZE); + DBG(L" * Pagetables PML4 @%lx\n",paging); + //PML4 + paging[0]=(UINT64)((UINT8 *)paging+PAGESIZE)+3; // pointer to 2M PDPE (16G RAM identity mapped) + paging[511]=(UINT64)((UINT8 *)paging+20*PAGESIZE)+3; // pointer to 4k PDPE (core mapped at -2M) + //identity mapping + //2M PDPE + for(i=0;i<16;i++) + paging[512+i]=(UINT64)((UINT8 *)paging+(3+i)*PAGESIZE+3); + //first 2M mapped per page + paging[3*512]=(UINT64)((UINT8 *)paging+2*PAGESIZE+3); + for(i=0;i<512;i++) + paging[2*512+i]=(UINT64)(i*PAGESIZE+3); + //2M PDE + for(i=1;i<512*16;i++) + paging[3*512+i]=(UINT64)((i<<21)+0x83); + //kernel mapping + //4k PDPE + paging[20*512+511]=(UINT64)((UINT8 *)paging+22*PAGESIZE+3); + //4k PDE + j = (fb_addr>>(9+12)) & 0x1FF; + for(i=0;j+i<511 && i<63;i++) + paging[22*512+j+i]=(UINT64)((bootboot->fb_ptr+(i<<21))+0x83); // map framebuffer + paging[22*512+511]=(UINT64)((UINT8 *)paging+23*PAGESIZE+3); + //4k PT + //dynamically map these. Main struct, environment string and code segment + for(i=0;i<(core.size/PAGESIZE);i++) + MapPage(core_addr + i*PAGESIZE, (UINT64)((UINT8 *)core.ptr+i*PAGESIZE+3)); + MapPage(bb_addr, (UINT64)(bootboot)+1); + MapPage(env_addr, (UINT64)(env.ptr)+1); + // stack at the top of the memory + for(i=0; i<(UINTN)((bootboot->numcores*initstack+PAGESIZE-1)/PAGESIZE); i++) { + if(paging[23*512+511-i]) + return report(EFI_OUT_OF_RESOURCES,L"Stack smash"); + paging[23*512+511-i]=(UINT64)((UINT8 *)paging+(37+i)*PAGESIZE+3); // core stacks + } + + // Get memory map + int cnt = 3, apmemfree = 0; +get_memory_map: + DBG(L" * Memory Map @%lx %d bytes try #%d\n", memory_map, memory_map_size, 4-cnt); + mmapent = (MMapEnt *)&(bootboot->mmap); + bootboot->size = 128; + status = uefi_call_wrapper(BS->GetMemoryMap, 5, + &memory_map_size, memory_map, &map_key, &desc_size, &desc_version); + if (EFI_ERROR(status)) { + return report(status,L"GetMemoryMap"); + } + last=NULL; + for(mement=memory_map; + mementsize>=PAGESIZE-128 || + (mement->PhysicalStart==0 && mement->NumberOfPages==0)) + break; + // check if the AP trampoline code's memory is free + if( mement->Type==7 && mement->PhysicalStart <= (UINT64)0x8000 && + mement->PhysicalStart+(mement->NumberOfPages*PAGESIZE) > (UINT64)0x8000) + apmemfree = 1; + // failsafe, don't report our own structures as free + if( mement->NumberOfPages==0 || + ((mement->PhysicalStart <= (UINT64)bootboot && + mement->PhysicalStart+(mement->NumberOfPages*PAGESIZE) > (UINT64)bootboot) || + (mement->PhysicalStart <= (UINT64)env.ptr && + mement->PhysicalStart+(mement->NumberOfPages*PAGESIZE) > (UINT64)env.ptr) || + (mement->PhysicalStart <= (UINT64)initrd.ptr && + mement->PhysicalStart+(mement->NumberOfPages*PAGESIZE) > (UINT64)initrd.ptr) || + (mement->PhysicalStart <= (UINT64)core.ptr && + mement->PhysicalStart+(mement->NumberOfPages*PAGESIZE) > (UINT64)core.ptr) || + (mement->PhysicalStart <= (UINT64)paging && + mement->PhysicalStart+(mement->NumberOfPages*PAGESIZE) > (UINT64)paging) + )) { + continue; + } + mmapent->ptr=mement->PhysicalStart; + mmapent->size=(mement->NumberOfPages*PAGESIZE)+ + ((mement->Type>0&&mement->Type<5)||mement->Type==7?MMAP_FREE: + (mement->Type==9 || mement->Type==10 || (bootboot->arch.x86_64.acpi_ptr >= mmapent->ptr && + bootboot->arch.x86_64.acpi_ptr < mmapent->ptr+mement->NumberOfPages*PAGESIZE)?MMAP_ACPI: + (mement->Type==11||mement->Type==12?MMAP_MMIO: + MMAP_USED))); + // merge continous areas of the same type + if(last!=NULL && + MMapEnt_Type(last) == MMapEnt_Type(mmapent) && + MMapEnt_Ptr(last)+MMapEnt_Size(last) == MMapEnt_Ptr(mmapent)) { + last->size+=MMapEnt_Size(mmapent); + mmapent->ptr=mmapent->size=0; + } else { + last=mmapent; + bootboot->size+=16; + // bubble up record. It's okay to use an ineffective, but simple sort here, because there are no + // more records than a couple hundred, and in most scenearios they are already sorted, meaning this + // loop will never run at all. But in the unlikely event they aren't sorted, this will fix that. + for(sort = mmapent - 1; sort >= (MMapEnt *)&(bootboot->mmap) && sort[0].ptr > sort[1].ptr; sort--) { + lba_s = sort[0].ptr; lba_e = sort[0].size; + sort[0].ptr = sort[1].ptr; sort[0].size = sort[1].size; + sort[1].ptr = lba_s; sort[1].size = lba_e; + } + mmapent++; + } + } + // --- NO PRINT AFTER THIS POINT --- + + // blue (or red) dot on the top left corner (sort of status report) + *((volatile uint64_t*)(bootboot->fb_ptr)) = + *((volatile uint64_t*)(bootboot->fb_ptr + bootboot->fb_scanline)) = 0x000000FF000000FFUL; + __asm__ __volatile__ ("invlpg (%0)" : : "a"(bootboot->fb_ptr) : "memory"); // memory barrier and flush screen + + //inform firmware that we're about to leave it's realm + status = uefi_call_wrapper(BS->ExitBootServices, 2, image, map_key); + if(EFI_ERROR(status)){ + cnt--; + if(cnt>0) goto get_memory_map; + return report(status,L"ExitBootServices"); + } + + // disable PIC and NMI + __asm__ __volatile__ ( + "movb $0xFF, %%al; outb %%al, $0x21; outb %%al, $0xA1;" // disable PIC + "inb $0x70, %%al; orb $0x80, %%al; outb %%al, $0x70;" // disable NMI + : : :); + +#if !defined(USE_MP_SERVICES) || !USE_MP_SERVICES + // green dot on the top left corner (do not allow gcc to rearrange this!!!) + *((volatile uint64_t*)(bootboot->fb_ptr)) = + *((volatile uint64_t*)(bootboot->fb_ptr + bootboot->fb_scanline)) = 0x0000FF000000FF00UL; + __asm__ __volatile__ ("invlpg (%0)" : : "a"(bootboot->fb_ptr) : "memory"); // memory barrier and flush screen + + // start APs + if(bootboot->numcores > 1 && apmemfree) { + + // copy trampoline and save UEFI's 64 bit system registers for the trampoline code + __asm__ __volatile__ ( + "movq $32, %%rcx; movq %0, %%rsi; movq $0x8000, %%rdi; repnz movsq;" + "movq %%cr3, %%rax; movq %%rax, 0x80C0;" + "movl %%cs, %%eax; movl %%eax, 0x80CC;" + "movl %%ds, %%eax; movl %%eax, 0x80D0;" + "movq %%rbx, 0x80D8;" + "sgdt 0x80E0;" : : "d"((uint64_t)&ap_trampoline), "b"((uint64_t)&bootboot_startcore) : ); + + // enable Local APIC + *((volatile uint32_t*)(lapic_addr + 0x0D0)) = (1 << 24); + *((volatile uint32_t*)(lapic_addr + 0x0E0)) = 0xFFFFFFFF; + *((volatile uint32_t*)(lapic_addr + 0x0F0)) = *((volatile uint32_t*)(lapic_addr + 0x0F0)) | 0x1FF; + *((volatile uint32_t*)(lapic_addr + 0x080)) = 0; + // make sure we use the correct Local APIC ID for the BSP + bootboot->bspid = *((volatile uint32_t*)(lapic_addr + 0x20)) >> 24; + +#if 0 + // use broadcast IPI if MADT is okay (no bcast id and all CPUs enabled) + if(!bad_madt) { + // send Broadcast INIT IPI + *((volatile uint32_t*)(lapic_addr + 0x300)) = 0x0C4500; + sleep(50); // wait 10 msec + // send Broadcast STARTUP IPI + *((volatile uint32_t*)(lapic_addr + 0x300)) = 0x0C4608; // start at 0800:0000h + sleep(1); // wait 200 usec + // send second SIPI + *((volatile uint32_t*)(lapic_addr + 0x300)) = 0x0C4608; + sleep(1); // wait 200 usec + } else +#endif + { + // supports up to 255 cores (lapicid 255 is bcast address), requires x2APIC to have more + for(i = 0; i < 255; i++) { + if(i == bootboot->bspid || lapic_ids[i] == 0xFFFF) continue; + *((volatile uint32_t*)(lapic_addr + 0x280)) = 0; // clear APIC errors + a = *((volatile uint32_t*)(lapic_addr + 0x280)); + send_ipi(i, 0xfff00000, 0x00C500); // trigger INIT IPI + sleep(1); + send_ipi(i, 0xfff00000, 0x008500); // deassert INIT IPI + } + sleep(50); // wait 10 msec + for(i = 0; i < 255; i++) { + if(i == bootboot->bspid || lapic_ids[i] == 0xFFFF) continue; + ap_done = 0; + send_ipi(i, 0xfff0f800, 0x004608); // trigger SIPI, start at 0800:0000h + for(a = 250; !ap_done && a > 0; a--) sleep(1); // wait for AP with 50 msec timeout + if(!ap_done) { + send_ipi(i, 0xfff0f800, 0x004608); + sleep(250); + } + } + } + } + __asm__ __volatile__ ("pause" : : : "memory"); // memory barrier +#endif + + // clear the screen + for(j=y=0;yfb_height;y++) { + i=j; + for(x=0;xfb_width;x+=2,i+=8) + *((uint64_t*)(bootboot->fb_ptr + i))=0; + j+=bootboot->fb_scanline; + } + + // release AP spinlock + bsp_done = 1; + __asm__ __volatile__ ("pause" : : : "memory"); // memory barrier + bootboot_startcore((VOID*)bsp_num); + } + return report(status,L"Initrd not found"); +} + diff --git a/x86_64-efi/crt0-efi-x86_64.o b/x86_64-efi/crt0-efi-x86_64.o new file mode 100644 index 0000000000000000000000000000000000000000..82ed97d2d6259781f20e1905a3d7219cbca83a97 GIT binary patch literal 1328 zcmbu9%}T>S5Xb*%)z+#|!Gq$Z7ezq=Jt(~>sb8d^f<0Le#;uJSXjGaN+LMQ#`!0P4 zeHafufCoW$l3kl_6E9AoGxOV-*;#frFGnZG8N+}Q1A7>GiUPyT$hJb$LIFA0{g3>4 z-5%@`vj^Lx8kgtwcQTx-P}%*r{44n+g-HGNpH1ul$ckT*WHB{?qca%T&{lGxpH^pD ziv|`#GRc<&FDCT48uE!USWDq%3a_Mam~PkOXg&LW4{g?T+hsTbXC023&+goP7PxQ@ z8)wzi+5w!7+kU)Z+=YAVIX?3qRA;l&plc=j>pPNSjMG&qz7peeFce@;Bi*W|C83Zsx8lFSd{Ese)WSWf`t%xQ4O^xf5MfXe0 z(&9elqq&wmFEk<2B+HS)y3oY+3H0Q;zMm{BSAi{IQB6JH|BVs==&%2PN7{HUy%tk)3mp~Kk=mf Ohcd4!>nJ6$a`6Mqk6|wW literal 0 HcmV?d00001 diff --git a/x86_64-efi/efirom.c b/x86_64-efi/efirom.c new file mode 100644 index 0000000..f3a65be --- /dev/null +++ b/x86_64-efi/efirom.c @@ -0,0 +1,278 @@ +/* + * Copyright (C) 2009 Michael Brown . + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * modifications for gnuefi by bzt (bztsrc@gitlab) + */ + +//#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define eprintf(...) fprintf ( stderr, __VA_ARGS__ ) + +/** Command-line options */ +struct options { + uint16_t vendor; + uint16_t device; +}; + +/** + * Allocate memory + * + * @v len Length of memory to allocate + * @ret ptr Pointer to allocated memory + */ +static void * xmalloc ( size_t len ) { + void *ptr; + + ptr = malloc ( len ); + if ( ! ptr ) { + eprintf ( "Could not allocate %zd bytes\n", len ); + exit ( 1 ); + } + + return ptr; +} + +/** + * Get file size + * + * @v file File + * @v len File size + */ +/* +static size_t file_size ( FILE *file ) { + ssize_t len; + + return len; +} +*/ +/** + * Read information from PE headers + * + * @v pe PE file + * @ret machine Machine type + * @ret subsystem EFI subsystem + */ +static void read_pe_info ( void *pe, uint16_t *machine, + uint16_t *subsystem ) { + IMAGE_DOS_HEADER *dos; + union { + IMAGE_NT_HEADERS nt64; + } *nt; + + /* Locate NT header */ + dos = pe; + nt = ( pe + dos->e_lfanew ); + + /* issue 4: TianoCore demands subsystem 10, so we must use EFI_APPLICATION + * in the PE header. Therefore we force EFI_ROM subsystem in this code here. */ + if(nt->nt64.OptionalHeader.Subsystem == 10) + nt->nt64.OptionalHeader.Subsystem = 13; + + /* Parse out PE information */ + *machine = nt->nt64.FileHeader.Machine; + *subsystem = nt->nt64.OptionalHeader.Subsystem; +} + +/** + * Convert EFI image to ROM image + * + * @v pe EFI file + * @v rom ROM file + */ +static void make_efi_rom ( FILE *pe, FILE *rom, struct options *opts ) { + struct { + EFI_PCI_EXPANSION_ROM_HEADER rom; + PCI_DATA_STRUCTURE pci __attribute__ (( aligned ( 4 ) )); + uint8_t checksum; + } *headers; + struct stat pe_stat; + size_t pe_size; + size_t rom_size; + void *buf; + void *payload; + unsigned int i; + uint8_t checksum; + + /* Determine PE file size */ + if ( fstat ( fileno ( pe ), &pe_stat ) != 0 ) { + eprintf ( "Could not stat PE file: %s\n", + strerror ( errno ) ); + exit ( 1 ); + } + pe_size = pe_stat.st_size; + + /* Determine ROM file size */ + rom_size = ( ( pe_size + sizeof ( *headers ) + 511 ) & ~511 ); + + /* Allocate ROM buffer and read in PE file */ + buf = xmalloc ( rom_size ); + memset ( buf, 0, rom_size ); + headers = buf; + payload = ( buf + sizeof ( *headers ) ); + if ( fread ( payload, pe_size, 1, pe ) != 1 ) { + eprintf ( "Could not read PE file: %s\n", + strerror ( errno ) ); + exit ( 1 ); + } + + /* Construct ROM header */ + headers->rom.Signature = PCI_EXPANSION_ROM_HEADER_SIGNATURE; + headers->rom.InitializationSize = ( rom_size / 512 ); + headers->rom.EfiSignature = EFI_PCI_EXPANSION_ROM_HEADER_EFISIGNATURE; + read_pe_info ( payload, &headers->rom.EfiMachineType, + &headers->rom.EfiSubsystem ); + headers->rom.EfiImageHeaderOffset = sizeof ( *headers ); + headers->rom.PcirOffset = + offsetof ( typeof ( *headers ), pci ); + headers->pci.Signature = PCI_DATA_STRUCTURE_SIGNATURE; + headers->pci.VendorId = opts->vendor ? opts->vendor : 0x8086; + headers->pci.DeviceId = opts->device ? opts->device : 0x100E; + headers->pci.Length = sizeof ( headers->pci ); + headers->pci.ClassCode[0] = PCI_CLASS_NETWORK; + headers->pci.ImageLength = ( rom_size / 512 ); + headers->pci.CodeType = 0x03; /* No constant in EFI headers? */ + headers->pci.Indicator = 0x80; /* No constant in EFI headers? */ + + /* Fix image checksum */ + for ( i = 0, checksum = 0 ; i < rom_size ; i++ ) + checksum += *( ( uint8_t * ) buf + i ); + headers->checksum -= checksum; + + /* Write out ROM */ + if ( fwrite ( buf, rom_size, 1, rom ) != 1 ) { + eprintf ( "Could not write ROM file: %s\n", + strerror ( errno ) ); + exit ( 1 ); + } +} + +/** + * Print help + * + * @v program_name Program name + */ +static void print_help ( const char *program_name ) { + eprintf ( "Syntax: %s [--vendor=VVVV] [--device=DDDD] " + "infile outfile\n", program_name ); +} + +/** + * Parse command-line options + * + * @v argc Argument count + * @v argv Argument list + * @v opts Options structure to populate + */ +static int parse_options ( const int argc, char **argv, + struct options *opts ) { + char *end; + int c; + + while (1) { + int option_index = 0; + static struct option long_options[] = { + { "vendor", required_argument, NULL, 'v' }, + { "device", required_argument, NULL, 'd' }, + { "help", 0, NULL, 'h' }, + { 0, 0, 0, 0 } + }; + + if ( ( c = getopt_long ( argc, argv, "v:d:h", + long_options, + &option_index ) ) == -1 ) { + break; + } + + switch ( c ) { + case 'v': + opts->vendor = strtoul ( optarg, &end, 16 ); + if ( *end ) { + eprintf ( "Invalid vendor \"%s\"\n", optarg ); + exit ( 2 ); + } + break; + case 'd': + opts->device = strtoul ( optarg, &end, 16 ); + if ( *end ) { + eprintf ( "Invalid device \"%s\"\n", optarg ); + exit ( 2 ); + } + break; + case 'h': + print_help ( argv[0] ); + exit ( 0 ); + case '?': + default: + exit ( 2 ); + } + } + return optind; +} + +int main ( int argc, char **argv ) { + struct options opts = { + }; + unsigned int infile_index; + const char *infile_name; + const char *outfile_name; + FILE *infile; + FILE *outfile; + + /* Parse command-line arguments */ + infile_index = parse_options ( argc, argv, &opts ); + if ( argc != ( infile_index + 2 ) ) { + print_help ( argv[0] ); + exit ( 2 ); + } + infile_name = argv[infile_index]; + outfile_name = argv[infile_index + 1]; + + /* Open input and output files */ + infile = fopen ( infile_name, "r" ); + if ( ! infile ) { + eprintf ( "Could not open %s for reading: %s\n", + infile_name, strerror ( errno ) ); + exit ( 1 ); + } + outfile = fopen ( outfile_name, "w" ); + if ( ! outfile ) { + eprintf ( "Could not open %s for writing: %s\n", + outfile_name, strerror ( errno ) ); + exit ( 1 ); + } + + /* Convert file */ + make_efi_rom ( infile, outfile, &opts ); + + fclose ( outfile ); + fclose ( infile ); + + return 0; +} diff --git a/x86_64-efi/elf_x86_64_efi.lds b/x86_64-efi/elf_x86_64_efi.lds new file mode 100644 index 0000000..942d1f3 --- /dev/null +++ b/x86_64-efi/elf_x86_64_efi.lds @@ -0,0 +1,74 @@ +/* Same as elf_x86_64_fbsd_efi.lds, except for OUTPUT_FORMAT below - KEEP IN SYNC */ +OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") +OUTPUT_ARCH(i386:x86-64) +ENTRY(_start) +SECTIONS +{ + . = 0; + ImageBase = .; + .hash : { *(.hash) } /* this MUST come first! */ + . = ALIGN(4096); + .eh_frame : + { + *(.eh_frame) + } + . = ALIGN(4096); + .text : + { + _text = .; + *(.text) + *(.text.*) + *(.gnu.linkonce.t.*) + . = ALIGN(16); + } + _etext = .; + _text_size = . - _text; + . = ALIGN(4096); + .reloc : + { + *(.reloc) + } + . = ALIGN(4096); + .data : + { + _data = .; + *(.rodata*) + *(.got.plt) + *(.got) + *(.data*) + *(.sdata) + /* the EFI loader doesn't seem to like a .bss section, so we stick + it all into .data: */ + *(.sbss) + *(.scommon) + *(.dynbss) + *(.bss) + *(COMMON) + *(.rel.local) + } + .note.gnu.build-id : { *(.note.gnu.build-id) } + + _edata = .; + _data_size = . - _etext; + . = ALIGN(4096); + .dynamic : { *(.dynamic) } + . = ALIGN(4096); + .rela : + { + *(.rela.data*) + *(.rela.got) + *(.rela.stab) + } + . = ALIGN(4096); + .dynsym : { *(.dynsym) } + . = ALIGN(4096); + .dynstr : { *(.dynstr) } + . = ALIGN(4096); + .ignored.reloc : + { + *(.rela.reloc) + *(.eh_frame) + *(.note.GNU-stack) + } + .comment 0 : { *(.comment) } +} diff --git a/x86_64-efi/fs.h b/x86_64-efi/fs.h new file mode 100644 index 0000000..81e3e36 --- /dev/null +++ b/x86_64-efi/fs.h @@ -0,0 +1,356 @@ +/* + * x86_64-efi/fs.h + * + * Copyright (C) 2017 - 2021 bzt (bztsrc@gitlab) + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * This file is part of the BOOTBOOT Protocol package. + * @brief Filesystem drivers for initial ramdisk. + * + */ + +/** + * FS/Z initrd (OS/Z's native file system) + */ +file_t fsz_initrd(unsigned char *initrd_p, char *kernel) +{ + file_t ret = { NULL, 0 }; + if(initrd_p==NULL || CompareMem(initrd_p + 512,"FS/Z",4) || kernel==NULL){ + return ret; + } + unsigned char passphrase[256],chk[32],iv[32]; + unsigned int i,j,k,l,ss=1<<(initrd_p[518]+11); + unsigned char *ent, *in=(initrd_p+*((uint64_t*)(initrd_p+560))*ss); + SHA256_CTX ctx; + DBG(L" * FS/Z %s\n",a2u(kernel)); + //decrypt initrd + while(*((uint32_t*)(initrd_p+520))!=0) { + Print(L" * Passphrase? "); + l=ReadLine(passphrase,sizeof(passphrase)); + if(!l) { + Print(L"\n"); + return ret; + } + if(*((uint32_t*)(initrd_p+520))!=crc32_calc((char*)passphrase,l)) { + Print(L"\rBOOTBOOT-ERROR: Bad passphrase\n"); + continue; + } + Print(L"\r * Decrypting...\r"); + SHA256_Init(&ctx); + SHA256_Update(&ctx,passphrase,l); + SHA256_Update(&ctx,initrd_p+512,6); + SHA256_Final(chk,&ctx); + for(i=0;i<32;i++) initrd_p[i+680]^=chk[i]; + SHA256_Init(&ctx); + SHA256_Update(&ctx,initrd_p+680,32); + SHA256_Final(iv,&ctx); + if(((initrd_p[519]>>4)&15)==1) { + // FSZ_SB_EALG_AESCBC + aes_init(iv); + for(k=ss,j=1;j<*((uint32_t*)(initrd_p+528));k+=ss,j++) { + aes_dec(initrd_p+k,ss); + } + } else { + // FSZ_SB_EALG_SHACBC + for(k=ss,j=1;j<*((uint32_t*)(initrd_p+528));j++) { + CopyMem(chk,iv,32); + for(i=0;i0){ + if(!CompareMem(ent + 16,s,e-s)) { + if(*e==0) { + i=*((uint64_t*)(ent+0)); + break; + } else { + s=e; + in=(initrd_p+*((uint64_t*)(ent+0))*ss); + goto again; + } + } + ent+=128; + } + } else { + i=0; + } + if(i!=0) { + // fid -> inode ptr -> data ptr + unsigned char *in=(initrd_p+i*ss); + if(!CompareMem(in,"FSIN",4)){ + ret.size=*((uint64_t*)(in+464)); + if(*((uint64_t*)(in+448)) == i) { + if(!(in[488]&31)) { + // inline data + ret.ptr=(uint8_t*)(initrd_p+i*ss+(initrd_p[520]&1? 2048 : 1024)); + } else { + // sector directory or list inlined + ret.ptr=(uint8_t*)(initrd_p + *((uint64_t*)(initrd_p[520]&1? in + 2048 : in + 1024))*ss); + } + } else + if(*((uint64_t*)(in+448))) { + switch((in[488]&15) + (in[488]&16 ? 1 : 0)) { + case 0: // direct data + ret.ptr=(uint8_t*)(initrd_p + *((uint64_t*)(in+448)) * ss); + break; + case 1: // sector directory or list (only one level supported here, and no holes in files) + ret.ptr=(uint8_t*)(initrd_p + *((uint64_t*)(initrd_p + *((uint64_t*)(in+448))*ss)) * ss); + break; + } + } else ret.size=0; + } + } + return ret; +} + +/** + * Minix3 file system + * directories only checked for their first block, and kernel must be defragmented + */ +file_t mfs_initrd(unsigned char *initrd_p, char *kernel) +{ + UINT32 o, bs, ino_tbl; + UINT8 *ino, *d; + char *s = kernel, *e; + file_t ret = { NULL, 0 }; + if(initrd_p[1048] != 'Z' || initrd_p[1049] != 'M') return ret; + DBG(L" * MFS %s\n",a2u(kernel)); + bs = *((UINT16*)(initrd_p + 1052)); + ino_tbl = (2 + *((UINT16*)(initrd_p + 1030)) + *((UINT16*)(initrd_p + 1032))) * bs; + ino = initrd_p + ino_tbl; +again: + for(e = s; *e && *e != '/'; e++); + d = initrd_p + *((UINT32*)(ino + 24)) * bs; + for(o = 0; o < *((UINT32*)(ino + 8)) && o < bs; o += 64, d += 64) { + if(*((UINT32*)d) && !CompareMem(s, d + 4, e - s) && !d[e - s]) { + ino = initrd_p + ino_tbl + (*((UINT32*)d) - 1) * 64; + d = initrd_p + *((UINT32*)(ino + 24)) * bs; + if(!*e) { ret.ptr = d; ret.size = *((UINT32*)(ino + 8)); return ret; } + s = e + 1; goto again; + } + } + return ret; +} + +/** + * cpio archive + */ +file_t cpio_initrd(unsigned char *initrd_p, char *kernel) +{ + unsigned char *ptr=initrd_p; + int k; + file_t ret = { NULL, 0 }; + if(initrd_p==NULL || kernel==NULL || + (CompareMem(initrd_p,"070701",6) && CompareMem(initrd_p,"070702",6) && CompareMem(initrd_p,"070707",6))) + return ret; + DBG(L" * cpio %s\n",a2u(kernel)); + k=strlena(kernel); + // hpodc archive + while(!CompareMem(ptr,"070707",6)){ + int ns=oct2bin(ptr+8*6+11,6); + int fs=oct2bin(ptr+8*6+11+6,11); + if(!CompareMem(ptr+9*6+2*11,kernel,k+1) || + (ptr[9*6+2*11] == '.' && ptr[9*6+2*11+1] == '/' && !CompareMem(ptr+9*6+2*11+2,kernel,k+1))) { + ret.size=fs; + ret.ptr=(UINT8*)(ptr+9*6+2*11+ns); + return ret; + } + ptr+=(76+ns+fs); + } + // newc and crc archive + while(!CompareMem(ptr,"07070",5)){ + int fs=hex2bin(ptr+8*6+6,8); + int ns=hex2bin(ptr+8*11+6,8); + if(!CompareMem(ptr+110,kernel,k+1) || (ptr[110] == '.' && ptr[111] == '/' && !CompareMem(ptr+112,kernel,k+1))) { + ret.size=fs; + ret.ptr=(UINT8*)(ptr+((110+ns+3)/4)*4); + return ret; + } + ptr+=((110+ns+3)/4)*4 + ((fs+3)/4)*4; + } + return ret; +} + +/** + * ustar tarball archive + */ +file_t tar_initrd(unsigned char *initrd_p, char *kernel) +{ + unsigned char *ptr=initrd_p; + int k; + file_t ret = { NULL, 0 }; + if(initrd_p==NULL || kernel==NULL || CompareMem(initrd_p+257,"ustar",5)) + return ret; + DBG(L" * tar %s\n",a2u(kernel)); + k=strlena(kernel); + while(!CompareMem(ptr+257,"ustar",5)){ + int fs=oct2bin(ptr+0x7c,11); + if(!CompareMem(ptr,kernel,k+1) || (ptr[0] == '.' && ptr[1] == '/' && !CompareMem(ptr+2,kernel,k+1))) { + ret.size=fs; + ret.ptr=(UINT8*)(ptr+512); + return ret; + } + ptr+=(((fs+511)/512)+1)*512; + } + return ret; +} + +/** + * Simple File System + */ +file_t sfs_initrd(unsigned char *initrd_p, char *kernel) +{ + unsigned char *ptr, *end; + int k,bs,ver; + file_t ret = { NULL, 0 }; + if(initrd_p==NULL || kernel==NULL || (CompareMem(initrd_p+0x1AC,"SFS",3) && CompareMem(initrd_p+0x1A6,"SFS",3))) + return ret; + // 1.0 Brendan's version, 1.10 BenLunt's version + ver=!CompareMem(initrd_p+0x1A6,"SFS",3)?10:0; + bs=1<<(7+(UINT8)initrd_p[ver?0x1B6:0x1BC]); + end=initrd_p + *((UINT64 *)&initrd_p[ver?0x1AA:0x1B0]) * bs; // base + total_number_of_blocks * blocksize + // get index area + ptr=end - *((UINT64 *)&initrd_p[ver?0x19E:0x1A4]); // end - size of index area + // got a Starting Marker Entry? + if(ptr[0]!=2) + return ret; + DBG(L" * SFS 1.%d %s\n",ver,a2u(kernel)); + k=strlena(kernel); + // iterate on index until we reach the end or Volume Identifier + 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%0AJ_x?mgm@00o)(v6QnDKHa7OH zNeLnD5v#-2O#)ZgV6bA~MY#WNaK456p!KLPER+qbzV)_$x?@G#)AVq?Aj zKOO%txQ>AD12?_=YyGkD@K5_EgX>Hpq{2uM&+6aopAOE)Lh!)g5#8Sm$N#DQB-)!h z2!s7Fci23Hw%-%S{;B>Q;P?l?{_p`ke%Qa+{}b4s5ZM7K;sxRM|EKy(g8IXL!rWn( zG-&-Vf#aiEs_?hfxUiGcmJJ>sKBnPb!=A%9LDM}Po6o@IJ;a-_!j<6uxm%w9F~U8O z1p9Ag*mJlaF4^cJl$v?$U2gGmd_{Xm2;QlbK7(>S{=KBfQ z{~=b`vZ3|I%4pp&^C6DSov6W!*yS#EiGUs-%gKK_{#(w?{jE12{`^OekLhY}6;u7c zYN?8eONe7qs{aiwRX(FXhsTrKcq)gxmtzOs{$7)KgU9pg8T21bh|>5KF2r3BIYr)2 zlYSiUGOz4It#)!fdy~8!@|D!4W$jD*ZS0AC@D?4@)EhtdK03^Du4CWC@L_zVc$KOz z=g+^P(pj~mdmnx;ZC0r!yuxBH|C(F0kF(Fb~I(it|7CxVoPk+Kj{Zu=(kT)U-*CUO-or$eSgT7FrJ;Eh->O_nnr zNqgw(bv|GIhiqSZXc{#(U$?iqHL7NYE$?gH`Cgj4IXHjLKGIT`8{dC$vOHFNez^E6 zbJ&d>;UUAo;J>d^+a9Hw@x+xwH~m#xdK{V&?xks*-7H^u8vR~5r-$a!u}yz*uBHRC z-tV=FNZWl=Szw)~M1<^0BO@>iL3 z2Y;Ifx(vVdI^Ou|REaS6Gdh9Ofz(s|eKhIHoBm2fa+nlqcWdQ0Q;_noUiZeUUe|1J z%Gbc)KI9XR7ycbXsto{oYHHfWKKE z!nsyLzS6((y(5}>gL_Na^Evn3z7K!m{qy|O$UR5b{*<+79=TLJiomt+$fmz5!b^sl z*KlRo&GKF|?PL?XzwP%vA^wcK5m!FG`8o&kddq1)$#&&;&<70h^Q`qWxSqB`D`bf(8SO2(%??3 z8}YV|cT^PXOgt4kgvLCcx0-oe(+uWzI+r{b_JOJ0F_pF6nx(>8uyH3-eVh45>c=7! zd&~-^BEIe(SnKoZv7_WY-RITGN9ma4BB{6Cc3#MtN&2RBRA`pAQ>vp?ij9mZ>viGA zu&D@>>uojiXy-N<8p@?{t&0vEJtq?O~^fhgb0bQ8KVasT_Mc|Icl^G zyS-E;meUU?*7?pWkImTQ5qhNR-L?_*^rm(?K`Y>_r6||*!MBo$7q;_{d&2X> z^BFbRl1YtuZ06fVL+q)$xY9mU%^ta!*q*(owU24JB~f)f6GRf+udAvB9pB(d627}vPybY zl=~ttQ!7sQ^9gk*gHnz>jT0$jvbO}ixyo6p#M2EldkzQ3cCB(qZR6GSo77Kv!`V9J zG&~d|c$|Fq@XH&vE*9CGGs?kkbT_RR5=b+}lv=(-^!eu13tzf=bd-<&alwqVM-u64 zrkIbt#jmcheiFB`lJ{gk@kB5#-sy|ocD9GgWKC&YXL5EFu?`P=u=blQ@uoHf6863x zRpdWf7GFcrkVO}$|GuDui$X?gTgBi*4rM#ugx$_IWbeY}8MB41YQ4Qtw?hiV4-%vkV^+$2FJJiq-W-$jF&fNlIPv3!75l-4~EBlao_JyJkp0LvDB@=~rUX z{FNV}`gtRilm1C!^`XoRXHx|N){m$NChvW27ubD5O#B*^_nKe7P2_Q=UMJBBF>7nh zg2>TmQd{DCSDA-fQq>B)Igc~dyyfzsdy<^RJz>?Qt2y|`Qaxls20>r5ul z`ra7@+8hIV(&~GckJmC5SVlL7t2Sr*o_Jt9&s@vucwcP~iEi+$VUnlO$2rM6bl2Sa zr+9-xzHzFb*PXZjS$n-Qo2xVMZSu8ovct?gEiq@_JlE7GygO-PiNzhr+W<^@@_K=eW3l1n3JZ3?vgd(8csPClx?r2g*E{++Wt z?;WlTio6&pmR7kTZTzJFx?4A%_y0E*E|ZuO~N*e)M?cnmPVS{j?my zj?b@`SG$M^fAHh8Th{0u;<cFFTGm7E#umw$jsf z8cEe$IWh{l!FEyuMn&It;h&XPvQn%(s4L^a(V4RE>npkaQjBiLUK(0H&L+g~zL@1V z+{G85pd>}3Q*=1gr_9Bch`)jQN1J=^okL<@9(WWyD_$Yw?+xE3Px3;HPmFR$@thn> z6OZcbw-bddWl4J1bO$`s!`I0Tf`W8*=(Bsgme!(HYtABG9*h4a6ehd&u`Fk)y!8Bf zP^ssX{nAC>1sR#hQ?eza?-KhC6_^~@QKeHV@~hgF_6r@C+VxO1^_zS0KYphvWXVrj zoz6Qn-xl(+myn8khV1 zK0Cl<{MJ$3C(dhM5i~P=yY@NYQ4_4@~gom`6h>J?>vw^ zeYvLab40!jXX#o%DT%?J4$5%;lSP4%ueX(`k&;F6J$$Neb#F&$?P7;!-*ba+b%zhE znZ+p?pLEYs{>Zd&UFVxa*_zm$&^) zy5_vdn}edhQh5QGVNo?ARZd!e-qjHVf zDC>2_S-N-M@xSgDt>BwrcsF8mXOF^(n&1XW6;<}xK{ml>1v461(~|S41mhNZcCj~D z6q_x?D~u}?3qvZh8+S@iTxEWFs>vsdZN;8d>e=y`&wOQiJyCRbSVZ%~dU$oJ6!v|( z^`x9%i6Cev{coMv^ZBjr{6CgRokfp^_tZ4Sj$LIVCd^!0|ID*I$-x+pL9kcTC3`%6| z%`5zEKL0$#uZCtVKU<&ri(bE$umPoEAhRP=nYKa6S;?|P8u#K%OYXA7>s#yR(CEEk zj12e~l3SPRa!dUb+s&4iBfJXtWpfHm@5bk6TyfU*_&zK#zw`CtE&!b-NDU36vH+aJ!=tg3FuPbZTPhf$U|K~@i z(dB_f?X25=^b3pEg4>1GbsMAZhx9zyH$N3nRCjOpTkoW79bL)Xh=o{Re;dw7XNs?) zy*JlB)}9<*8BlTAz9(Ay(KWsJO9`^M#yw+ehDpy(^qlRT{>HQX_E`ztc#)0#J>?HJ z+|SL-Ej~t%T~LGcuDNBgyUaV)G08&PAIZpGtVU%=MGb3*fQXvxV$%I10fymox*HQjRK$9?C*TCy}`B9H4fSalSn#P&wu-Wm=Wo9LBG*Uun)e&^AqUdej)5V}?ULyO*U6F4&P-Sf39bD%jERVWJ9TN zS1nCbdI}H0;htiT7&XYmSm9AvQ(9_wXYx1HQf7v3_IsLAi z2csTtuQfG2B=W`hQt|*1@kHxx=YHWYYyHK&UVBF}%IoKk`3K!HwY!+Qe#W>v_UYoV zNsHjK2rXHrlZ9O$PEjz6%q)f-A)@Kjq6oglcjodtew7B==dOywK9;u^&F0mY zNMt$cN+u89dEZ6bxl>vp5Py|o$;QfvaFz1NM6(C6rIpobLUM{F>&ZxBhTQ>ILK&Hd zdYd&U1VrEK5}w^<>^3<|Y-v4tjrfy9WkTpr3KlD?m{6l##x9d`gxhyX4mEQSQ;B&s zgw7HhG8sEhk`Pu%RFbj(YHzpw5#TB`{OZChzK7z31~JI zKk2RM$4@#>Mi;q|epQJYnLhr*h4dS?_az&^j=aEdwT-zH%Br|;pYzR&G{U9pP_0`H0{Lz)@XT#4@wNY{0DNG`IL=YEuDt= zE)MNztz+<}j$Ra)-pO8GA6*gB@Nn-lJnuZEh8uhG4(ugrWxDu;X!>gFodUB&KG(@+oqm+n3Qk`kcn(fP#W(Y){?bw{{1hZ8H*6BM72-;51z)PNxJ5p z%UYbLeXp&vpmn_Y_|)Qsz~WbU@+B8S;^xUH;&fu$!yZ3+a%M%GJhG5-F^{0`&J|I? zhfGTMD?e)y*!11XQ#8tTQyoXohyB*xm=VBV{v`VhrcAMfG$f_Ny zp4aANoO@Gk(QazgJ*{DQ=bp^)e!_wMcxTkwANSZZ4*#0ssw^4J)$%&2Gp8e^m&ZVV z-#;j!q5Zcg!+SzkWwsjZJKfFCvEav7|MjgaZ2UKXVHp>UOApCfgeju*jxJ`1%U_uq zi7Oj(u(GpvwNH50agkB)P%KBpO85+~C!S=pMuEunRkZ>UliGa;#NtPLCRxfp7ngfT zNJ>}V?5Da~*s|X;x-GurbVx+1{mBDVm5R@4%N|d1@}53gFJL+Qe&@t`XM5K58>*=V z#y3gLhqQDX80H?VN>H|~eT_f#;-i+^3;Qskhx0N8uzDI`jSDPeQj#WmBkDV|uD7sx zk#H%^a_^`X7%6tTYpU5GR9q!~+u+IWK~*xZ^FIfVUSuHrYKiAw<9A)=%^G!0@+mIs zZJz2^rCkr5l#(9w_c_!(#(rwL&R&{mrQPImbUIDLnUb8d) zZ_gMmL_J(v#7RktF?vEN$uV-q=N`Qx-Z|TRH3t0pZ`kamZF;?}BIapE@?f|7?b>~= zJiJv$glfzBI`V|qqE{a6ekUB*DVDl8C9PH>wsU?Y^6Q#`g`%c@Qz_ZkI%ckYad_7^ zr6kifq$K_H{g%^Mcg4iIwEfcGcG2ndRkmBtR>Xhv`c4;&UO3u$HYRZ{!O+FiXo{!3 zp|#63Kr&lkLOT^U{zj933k#fTNVQON7#kdvUwXO#a+p?vlc~w{0HOJO>dJ9eL zfZ8 zbgqWr;O0q#UjN$ir>6;% zXU#tiRGlw+PjEZp^WJEqcZua2nvx5T2Qf{_y*N!t=Yn~nDEIdCs~5FSUgHY1*LWp5 z+Ee+Ma*=wXrcIJrq>h;X{yUxzebYXx_x1UWXRRg>e89Zr#`;> z73e6qH&wF2;E38{Pi`C?PsSkD}vdDQblW@q1uapj53!xMk5?SJ5U-2n_%h%cSBV{$>i5D{;qp8vF zs;lReTMR8$!~DBl#vfPmvwoYkyAoR&o6YmQa>dUko@#+iX|SEq(oiCnJ5u z`Q67;dbP$p!%87^r})`uJomHE9$LK+BREa}IAO?aKQR@V6QT2!>TP!ly;6r~cD}be zq3N&UGFa<=;k536zcBZU(aSQ4Qaj1Jh|@GwP0y*v^~MYsrbh`g$7p-H8@w=eA?pz2 zp3&6fR5O<)a8i9mUPDJCtlAmEE=#0LWo^vPLT&NY%XQm+<6#EB$QUB8u%b9Cg6`b* zOP2-CSCA0a6b2lQoF<^)Vq||EQ>z|whxD!0)i@x@b3hcN)gN-Yn8^|mo->t zGCnZoHoJTMBm03J6RXb@-@UZJS8R&9KJK6v(6KR3#EIcuG3f=@d8JJuk#@3_eN_wk*lbay?P=S=H#@`v?}O)#LM+dyz|07%#X?#^dyZ1Q z*?o|r_N4=DZ}BzHNz2hWPVJYcYJ8eI@0{5Em}r42xhjo9Oz_>&CmIsK-EYSiKIDV%7q!i1d!#-o!>~c_BISA6 zo?d;p=)8U+CWl(qXaACA0dLr#DABaf;_-Uzds)*RPD- zjknyMp6683(7`E3$_0ki(2R<$@a1`6%8{`+<;e2h+L#UH$f6hC<3!)v8hI`&J6RCK zv#(Bl|EwioxAf94=j2tpy;^A$XN@w|gZrA47jr9KN<e1?XH46fE$X@1qeNn@aEXhJq{%>Lx# z(vBW6Im@#q)!as`X7tBg@=Zkhh`iz*a??Ea1$iESVb@7D!au()jAx(E8p&hTlK#tX zOWD^Fk7dT0Un;CP+RY1h_9%T zk)-#?fA@FAU5gL7vI^(>#&63_T&^0)-cvkc+bcBrd3q$J;^h5_f&TFb zyEm=QtdTxyyVaQ)9WJT7pBE!N^HHZ{j=blVpW5EeL5rYi4}z{<>D!-Pd|Dg3Yr2cb zE3k$8UH++v8+D`ZVM~wi-@SY0i_h=b<+)#rV~+;eChm_5Jfl2GVkr2FkU-by&1%WF zJogV&k^b`nzGoBjXl>etx3X(v4$E3N=

X-#5xn>q_bdF-ekB&VqEdTa@s%r{jN-92sB4oB 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 ii`OW{O{H9aI`-SBLg; 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

S+GR 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 literal 0 HcmV?d00001 diff --git a/x86_64-efi/smp.S b/x86_64-efi/smp.S new file mode 100644 index 0000000..e26855b --- /dev/null +++ b/x86_64-efi/smp.S @@ -0,0 +1,112 @@ +/* + * x86_64-efi/smp.S + * + * Copyright (C) 2017 - 2021 bzt (bztsrc@gitlab) + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * This file is part of the BOOTBOOT Protocol package. + * @brief SMP initialization code. + * + */ + +.globl ap_trampoline +.extern bootboot_startcode + +/***************************************************************************** + * things to do on the APs * + *****************************************************************************/ + .balign 128 + .code16 + /* this code will be relocated to 0x8000 - 0x8100 */ +ap_trampoline: + cli + cld + ljmp $0, $0x8040 + .balign 16 + // prot mode GDT +_L8010_GDT_table: + .long 0, 0 + .long 0x0000FFFF, 0x00CF9A00 // flat code + .long 0x0000FFFF, 0x008F9200 // flat data + .long 0x00000068, 0x00CF8900 // tss, not used but required by VB's vt-x +_L8030_GDT_value: + .word _L8030_GDT_value - _L8010_GDT_table - 1 + .long 0x8010 + .long 0, 0 + .balign 64 +_L8040: + xorw %ax, %ax + movw %ax, %ds + lgdtl 0x8030 + movl %cr0, %eax + orl $1, %eax + movl %eax, %cr0 + ljmp $8, $0x8060 + .balign 32 + .code32 +_L8060: + movw $16, %ax + movw %ax, %ds + movw %ax, %ss + movl $0x368, %eax // Set PAE, MCE, PGE; OSFXSR, OSXMMEXCPT (enable SSE) + movl %eax, %cr4 + movl 0x80C0, %eax // let's hope it's in the first 4G... + movl %eax, %cr3 + movl $0x0C0000080, %ecx // EFR MSR + rdmsr + orl $0x100, %eax // enable long mode + wrmsr + movl $0x0C0000011, %eax // clear EM, MP (enable SSE) and WP + movl %eax, %cr0 + lgdtl 0x80E0 + movl $0x80C8, %esp // we can't use "ljmp $8, $0x80A0", because we don't know cs + lret + .balign 32 + .code64 +_L80A0: + movl 0x80D0, %eax // load long mode segments + movw %ax, %ds + movw %ax, %es + movw %ax, %ss + movw %ax, %fs + movw %ax, %gs +// some linkers (GNU ld) generates bad relocation record for this +// jmp bootboot_startcode + movq 0x80D8, %rax + // in theory this could cause trouble, but it does not since all cores are executing the same + // code at this point, so it doesn't matter if one core is overwriting the same stack with the + // stack frame, because all are saving exactly the same stack frame to the same position + movl $0x8800, %esp + jmp *%rax + .balign 32 +_L80C0_cr3_value: + .long 0, 0 + .long 0x80A0 +_L80CC_cs_value: + .long 0 +_L80D0_ds_value: + .long 0, 0 +_L80D8_bootboot_startcore: + .long 0, 0 +_L80E0_gdt_value: + .long 0, 0, 0, 0 +ap_trampoline_end: diff --git a/x86_64-efi/tinf.h b/x86_64-efi/tinf.h new file mode 100644 index 0000000..106203a --- /dev/null +++ b/x86_64-efi/tinf.h @@ -0,0 +1,117 @@ +/* + * uzlib - tiny deflate/inflate library (deflate, gzip, zlib) + * + * Copyright (c) 2003 by Joergen Ibsen / Jibz + * All Rights Reserved + * http://www.ibsensoftware.com/ + * + * Copyright (c) 2014-2016 by Paul Sokolovsky + */ + +#ifndef TINF_H_INCLUDED +#define TINF_H_INCLUDED + +#include + +/* calling convention */ +#ifndef TINFCC + #ifdef __WATCOMC__ + #define TINFCC __cdecl + #else + #define TINFCC + #endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* ok status, more data produced */ +#define TINF_OK 0 +/* end of compressed stream reached */ +#define TINF_DONE 1 +#define TINF_DATA_ERROR (-3) +#define TINF_CHKSUM_ERROR (-4) +#define TINF_DICT_ERROR (-5) + +/* checksum types */ +#define TINF_CHKSUM_NONE 0 +#define TINF_CHKSUM_ADLER 1 +#define TINF_CHKSUM_CRC 2 + +/* data structures */ + +typedef struct { + unsigned short table[16]; /* table of code length counts */ + unsigned short trans[288]; /* code -> symbol translation table */ +} TINF_TREE; + +struct TINF_DATA; +typedef struct TINF_DATA { + const unsigned char *source; + /* If source above is NULL, this function will be used to read + next byte from source stream */ + unsigned char (*readSource)(struct TINF_DATA *data); + + unsigned int tag; + unsigned int bitcount; + + /* Buffer start */ + unsigned char *destStart; + /* Buffer total size */ + unsigned int destSize; + /* Current pointer in buffer */ + unsigned char *dest; + /* Remaining bytes in buffer */ + unsigned int destRemaining; + + /* Accumulating checksum */ + unsigned int checksum; + char checksum_type; + + int btype; + int bfinal; + unsigned int curlen; + int lzOff; + unsigned char *dict_ring; + unsigned int dict_size; + unsigned int dict_idx; + + TINF_TREE ltree; /* dynamic length/symbol tree */ + TINF_TREE dtree; /* dynamic distance tree */ +} TINF_DATA; + +#define TINF_PUT(d, c) \ + { \ + *d->dest++ = c; \ + if (d->dict_ring) { d->dict_ring[d->dict_idx++] = c; if (d->dict_idx == d->dict_size) d->dict_idx = 0; } \ + } + +unsigned char TINFCC uzlib_get_byte(TINF_DATA *d); + +/* Decompression API */ + +void TINFCC uzlib_init(void); +void TINFCC uzlib_uncompress_init(TINF_DATA *d, void *dict, unsigned int dictLen); +int TINFCC uzlib_uncompress(TINF_DATA *d); +int TINFCC uzlib_uncompress_chksum(TINF_DATA *d); + +int TINFCC uzlib_zlib_parse_header(TINF_DATA *d); +int TINFCC uzlib_gzip_parse_header(TINF_DATA *d); + +/* Compression API */ + +void TINFCC uzlib_compress(void *data, const uint8_t *src, unsigned slen); + +/* Checksum API */ + +/* prev_sum is previous value for incremental computation, 1 initially */ +uint32_t TINFCC uzlib_adler32(const void *data, unsigned int length, uint32_t prev_sum); +/* crc is previous value for incremental computation, 0xffffffff initially */ +uint32_t TINFCC uzlib_crc32(const void *data, unsigned int length, uint32_t crc); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* TINF_H_INCLUDED */ diff --git a/x86_64-efi/tinflate.c b/x86_64-efi/tinflate.c new file mode 100644 index 0000000..fc609fc --- /dev/null +++ b/x86_64-efi/tinflate.c @@ -0,0 +1,475 @@ +/* + * tinflate - tiny inflate + * + * Copyright (c) 2003 by Joergen Ibsen / Jibz + * All Rights Reserved + * http://www.ibsensoftware.com/ + * + * Copyright (c) 2014-2016 by Paul Sokolovsky + * + * This software is provided 'as-is', without any express + * or implied warranty. In no event will the authors be + * held liable for any damages arising from the use of + * this software. + * + * Permission is granted to anyone to use this software + * for any purpose, including commercial applications, + * and to alter it and redistribute it freely, subject to + * the following restrictions: + * + * 1. The origin of this software must not be + * misrepresented; you must not claim that you + * wrote the original software. If you use this + * software in a product, an acknowledgment in + * the product documentation would be appreciated + * but is not required. + * + * 2. Altered source versions must be plainly marked + * as such, and must not be misrepresented as + * being the original software. + * + * 3. This notice may not be removed or altered from + * any source distribution. + */ + +#include "tinf.h" + +uint32_t tinf_get_le_uint32(TINF_DATA *d); +uint32_t tinf_get_be_uint32(TINF_DATA *d); + +/* --------------------------------------------------- * + * -- uninitialized global data (static structures) -- * + * --------------------------------------------------- */ + +#ifdef RUNTIME_BITS_TABLES + +/* extra bits and base tables for length codes */ +unsigned char length_bits[30]; +unsigned short length_base[30]; + +/* extra bits and base tables for distance codes */ +unsigned char dist_bits[30]; +unsigned short dist_base[30]; + +#else + +const unsigned char length_bits[30] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 2, 2, 2, 2, + 3, 3, 3, 3, 4, 4, 4, 4, + 5, 5, 5, 5 +}; +const unsigned short length_base[30] = { + 3, 4, 5, 6, 7, 8, 9, 10, + 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, + 131, 163, 195, 227, 258 +}; + +const unsigned char dist_bits[30] = { + 0, 0, 0, 0, 1, 1, 2, 2, + 3, 3, 4, 4, 5, 5, 6, 6, + 7, 7, 8, 8, 9, 9, 10, 10, + 11, 11, 12, 12, 13, 13 +}; +const unsigned short dist_base[30] = { + 1, 2, 3, 4, 5, 7, 9, 13, + 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, + 4097, 6145, 8193, 12289, 16385, 24577 +}; + +#endif + +/* special ordering of code length codes */ +const unsigned char clcidx[] = { + 16, 17, 18, 0, 8, 7, 9, 6, + 10, 5, 11, 4, 12, 3, 13, 2, + 14, 1, 15 +}; + +/* ----------------------- * + * -- utility functions -- * + * ----------------------- */ + +#ifdef RUNTIME_BITS_TABLES +/* build extra bits and base tables */ +static void tinf_build_bits_base(unsigned char *bits, unsigned short *base, int delta, int first) +{ + int i, sum; + + /* build bits table */ + for (i = 0; i < delta; ++i) bits[i] = 0; + for (i = 0; i < 30 - delta; ++i) bits[i + delta] = i / delta; + + /* build base table */ + for (sum = first, i = 0; i < 30; ++i) + { + base[i] = sum; + sum += 1 << bits[i]; + } +} +#endif + +/* build the fixed huffman trees */ +static void tinf_build_fixed_trees(TINF_TREE *lt, TINF_TREE *dt) +{ + int i; + + /* build fixed length tree */ + for (i = 0; i < 7; ++i) lt->table[i] = 0; + + lt->table[7] = 24; + lt->table[8] = 152; + lt->table[9] = 112; + + for (i = 0; i < 24; ++i) lt->trans[i] = 256 + i; + for (i = 0; i < 144; ++i) lt->trans[24 + i] = i; + for (i = 0; i < 8; ++i) lt->trans[24 + 144 + i] = 280 + i; + for (i = 0; i < 112; ++i) lt->trans[24 + 144 + 8 + i] = 144 + i; + + /* build fixed distance tree */ + for (i = 0; i < 5; ++i) dt->table[i] = 0; + + dt->table[5] = 32; + + for (i = 0; i < 32; ++i) dt->trans[i] = i; +} + +/* given an array of code lengths, build a tree */ +static void tinf_build_tree(TINF_TREE *t, const unsigned char *lengths, unsigned int num) +{ + unsigned short offs[16]; + unsigned int i, sum; + + /* clear code length count table */ + for (i = 0; i < 16; ++i) t->table[i] = 0; + + /* scan symbol lengths, and sum code length counts */ + for (i = 0; i < num; ++i) t->table[lengths[i]]++; + + t->table[0] = 0; + + /* compute offset table for distribution sort */ + for (sum = 0, i = 0; i < 16; ++i) + { + offs[i] = sum; + sum += t->table[i]; + } + + /* create code->symbol translation table (symbols sorted by code) */ + for (i = 0; i < num; ++i) + { + if (lengths[i]) t->trans[offs[lengths[i]]++] = i; + } +} + +/* ---------------------- * + * -- decode functions -- * + * ---------------------- */ + +unsigned char uzlib_get_byte(TINF_DATA *d) +{ + if (d->source) { + return *d->source++; + } + return d->readSource(d); +} + +uint32_t tinf_get_le_uint32(TINF_DATA *d) +{ + uint32_t val = 0; + int i; + for (i = 4; i--;) { + val = val >> 8 | uzlib_get_byte(d) << 24; + } + return val; +} + +uint32_t tinf_get_be_uint32(TINF_DATA *d) +{ + uint32_t val = 0; + int i; + for (i = 4; i--;) { + val = val << 8 | uzlib_get_byte(d); + } + return val; +} + +/* get one bit from source stream */ +static int tinf_getbit(TINF_DATA *d) +{ + unsigned int bit; + + /* check if tag is empty */ + if (!d->bitcount--) + { + /* load next tag */ + d->tag = uzlib_get_byte(d); + d->bitcount = 7; + } + + /* shift bit out of tag */ + bit = d->tag & 0x01; + d->tag >>= 1; + + return bit; +} + +/* read a num bit value from a stream and add base */ +static unsigned int tinf_read_bits(TINF_DATA *d, int num, int base) +{ + unsigned int val = 0; + + /* read num bits */ + if (num) + { + unsigned int limit = 1 << (num); + unsigned int mask; + + for (mask = 1; mask < limit; mask *= 2) + if (tinf_getbit(d)) val += mask; + } + + return val + base; +} + +/* given a data stream and a tree, decode a symbol */ +static int tinf_decode_symbol(TINF_DATA *d, TINF_TREE *t) +{ + int sum = 0, cur = 0, len = 0; + + /* get more bits while code value is above sum */ + do { + + cur = 2*cur + tinf_getbit(d); + + ++len; + + sum += t->table[len]; + cur -= t->table[len]; + + } while (cur >= 0); + + return t->trans[sum + cur]; +} + +/* given a data stream, decode dynamic trees from it */ +static void tinf_decode_trees(TINF_DATA *d, TINF_TREE *lt, TINF_TREE *dt) +{ + unsigned char lengths[288+32]; + unsigned int hlit, hdist, hclen; + unsigned int i, num, length; + + /* get 5 bits HLIT (257-286) */ + hlit = tinf_read_bits(d, 5, 257); + + /* get 5 bits HDIST (1-32) */ + hdist = tinf_read_bits(d, 5, 1); + + /* get 4 bits HCLEN (4-19) */ + hclen = tinf_read_bits(d, 4, 4); + + for (i = 0; i < 19; ++i) lengths[i] = 0; + + /* read code lengths for code length alphabet */ + for (i = 0; i < hclen; ++i) + { + /* get 3 bits code length (0-7) */ + unsigned int clen = tinf_read_bits(d, 3, 0); + + lengths[clcidx[i]] = clen; + } + + /* build code length tree, temporarily use length tree */ + tinf_build_tree(lt, lengths, 19); + + /* decode code lengths for the dynamic trees */ + for (num = 0; num < hlit + hdist; ) + { + int sym = tinf_decode_symbol(d, lt); + + switch (sym) + { + case 16: + /* copy previous code length 3-6 times (read 2 bits) */ + { + unsigned char prev = lengths[num - 1]; + for (length = tinf_read_bits(d, 2, 3); length; --length) + { + lengths[num++] = prev; + } + } + break; + case 17: + /* repeat code length 0 for 3-10 times (read 3 bits) */ + for (length = tinf_read_bits(d, 3, 3); length; --length) + { + lengths[num++] = 0; + } + break; + case 18: + /* repeat code length 0 for 11-138 times (read 7 bits) */ + for (length = tinf_read_bits(d, 7, 11); length; --length) + { + lengths[num++] = 0; + } + break; + default: + /* values 0-15 represent the actual code lengths */ + lengths[num++] = sym; + break; + } + } + + /* build dynamic trees */ + tinf_build_tree(lt, lengths, hlit); + tinf_build_tree(dt, lengths + hlit, hdist); +} + +/* ----------------------------- * + * -- block inflate functions -- * + * ----------------------------- */ + +/* given a stream and two trees, inflate a block of data */ +static int tinf_inflate_block_data(TINF_DATA *d, TINF_TREE *lt, TINF_TREE *dt) +{ + if (d->curlen == 0) { + unsigned int offs; + int dist; + int sym = tinf_decode_symbol(d, lt); + //printf("huff sym: %02x\n", sym); + + /* literal byte */ + if (sym < 256) { + TINF_PUT(d, sym); + return TINF_OK; + } + + /* end of block */ + if (sym == 256) { + return TINF_DONE; + } + + /* substring from sliding dictionary */ + sym -= 257; + /* possibly get more bits from length code */ + d->curlen = tinf_read_bits(d, length_bits[sym], length_base[sym]); + + dist = tinf_decode_symbol(d, dt); + /* possibly get more bits from distance code */ + offs = tinf_read_bits(d, dist_bits[dist], dist_base[dist]); + d->lzOff = -offs; + } + + /* copy next byte from dict substring */ + d->dest[0] = d->dest[d->lzOff]; + d->dest++; + d->curlen--; + return TINF_OK; +} + +/* inflate an uncompressed block of data */ +static int tinf_inflate_uncompressed_block(TINF_DATA *d) +{ + if (d->curlen == 0) { + unsigned int length, invlength; + + /* get length */ + length = uzlib_get_byte(d) + 256 * uzlib_get_byte(d); + /* get one's complement of length */ + invlength = uzlib_get_byte(d) + 256 * uzlib_get_byte(d); + /* check length */ + if (length != (~invlength & 0x0000ffff)) return TINF_DATA_ERROR; + + /* increment length to properly return TINF_DONE below, without + producing data at the same time */ + d->curlen = length + 1; + + /* make sure we start next block on a byte boundary */ + d->bitcount = 0; + } + + if (--d->curlen == 0) { + return TINF_DONE; + } + + unsigned char c = uzlib_get_byte(d); + TINF_PUT(d, c); + return TINF_OK; +} + +/* ---------------------- * + * -- public functions -- * + * ---------------------- */ + +/* initialize global (static) data */ +void uzlib_init(void) +{ +#ifdef RUNTIME_BITS_TABLES + /* build extra bits and base tables */ + tinf_build_bits_base(length_bits, length_base, 4, 3); + tinf_build_bits_base(dist_bits, dist_base, 2, 1); + + /* fix a special case */ + length_bits[28] = 0; + length_base[28] = 258; +#endif +} + +/* inflate next byte of compressed stream */ +int uzlib_uncompress(TINF_DATA *d) +{ + do { + int res; + + /* start a new block */ + if (d->btype == -1) { +next_blk: + /* read final block flag */ + d->bfinal = tinf_getbit(d); + /* read block type (2 bits) */ + d->btype = tinf_read_bits(d, 2, 0); + + //printf("Started new block: type=%d final=%d\n", d->btype, d->bfinal); + + if (d->btype == 1) { + /* build fixed huffman trees */ + tinf_build_fixed_trees(&d->ltree, &d->dtree); + } else if (d->btype == 2) { + /* decode trees from stream */ + tinf_decode_trees(d, &d->ltree, &d->dtree); + } + } + + /* process current block */ + switch (d->btype) + { + case 0: + /* decompress uncompressed block */ + res = tinf_inflate_uncompressed_block(d); + break; + case 1: + case 2: + /* decompress block with fixed/dyanamic huffman trees */ + /* trees were decoded previously, so it's the same routine for both */ + res = tinf_inflate_block_data(d, &d->ltree, &d->dtree); + break; + default: + return TINF_DATA_ERROR; + } + + if (res == TINF_DONE && !d->bfinal) { + /* the block has ended (without producing more data), but we + can't return without data, so start procesing next block */ + goto next_blk; + } + + if (res != TINF_OK) { + return res; + } + + } while (--d->destSize); + + return TINF_OK; +}