├── img
└── debugging.png
├── src
├── gnu-efi
│ ├── .gitignore
│ ├── lib
│ │ ├── aarch64
│ │ │ ├── efi_stub.S
│ │ │ ├── initplat.c
│ │ │ ├── setjmp.S
│ │ │ └── math.c
│ │ ├── x86_64
│ │ │ ├── initplat.c
│ │ │ ├── setjmp.S
│ │ │ └── callwrap.c
│ │ ├── ia64
│ │ │ ├── initplat.c
│ │ │ ├── palproc.h
│ │ │ └── math.c
│ │ ├── debug.c
│ │ ├── runtime
│ │ │ ├── rtdata.c
│ │ │ ├── rtlock.c
│ │ │ ├── rtstr.c
│ │ │ ├── efirtlib.c
│ │ │ └── vm.c
│ │ ├── lib.h
│ │ ├── lock.c
│ │ ├── console.c
│ │ ├── error.c
│ │ ├── Makefile.orig
│ │ ├── Makefile
│ │ ├── hw.c
│ │ ├── event.c
│ │ └── smbios.c
│ ├── inc
│ │ ├── protocol
│ │ │ ├── readme.txt
│ │ │ ├── make.inf
│ │ │ ├── intload.h
│ │ │ ├── adapterdebug.h
│ │ │ ├── eficonsplit.h
│ │ │ ├── makefile.hdr
│ │ │ ├── vgaclass.h
│ │ │ └── legacyboot.h
│ │ ├── efisetjmp.h
│ │ ├── aarch64
│ │ │ ├── efilibplat.h
│ │ │ └── efisetjmp_arch.h
│ │ ├── x86_64
│ │ │ ├── efilibplat.h
│ │ │ └── efisetjmp_arch.h
│ │ ├── make.inf
│ │ ├── eficompiler.h
│ │ ├── efistdarg.h
│ │ ├── inc.mak
│ │ ├── Makefile
│ │ ├── romload.h
│ │ ├── ia64
│ │ │ ├── efisetjmp_arch.h
│ │ │ └── efilibplat.h
│ │ ├── efi.h
│ │ ├── efipart.h
│ │ ├── makefile.hdr
│ │ ├── efiui.h
│ │ ├── efigpt.h
│ │ ├── efishellparm.h
│ │ ├── efierr.h
│ │ ├── efirtlib.h
│ │ ├── efishellintf.h
│ │ ├── efi_nii.h
│ │ ├── efidebug.h
│ │ ├── efifs.h
│ │ ├── libsmbios.h
│ │ ├── efipoint.h
│ │ └── efiser.h
│ ├── apps
│ │ ├── tpause.c
│ │ ├── t2.c
│ │ ├── t5.c
│ │ ├── t8.c
│ │ ├── setjmp.c
│ │ ├── t4.c
│ │ ├── t.c
│ │ ├── t7.c
│ │ ├── printenv.c
│ │ ├── drv0.h
│ │ ├── trivial.S
│ │ ├── t6.c
│ │ ├── drv0_use.c
│ │ ├── debughook.c
│ │ ├── t3.c
│ │ ├── modelist.c
│ │ ├── Makefile
│ │ └── route80h.c
│ ├── README.elilo
│ ├── README.git
│ ├── gnuefi
│ │ ├── elf_arm_efi.lds
│ │ ├── elf_aarch64_efi.lds
│ │ ├── elf_x86_64_fbsd_efi.lds
│ │ ├── elf_x86_64_efi.lds
│ │ ├── elf_ia64_efi.lds
│ │ ├── elf_ia32_efi.lds
│ │ ├── elf_ia32_fbsd_efi.lds
│ │ ├── crt0-efi-x86_64.S
│ │ ├── crt0-efi-ia32.S
│ │ ├── Makefile
│ │ ├── crt0-efi-ia64.S
│ │ ├── reloc_arm.c
│ │ ├── reloc_aarch64.c
│ │ ├── reloc_x86_64.c
│ │ └── reloc_ia32.c
│ ├── README.efilib
│ └── Make.rules
├── gnu-efi-vcxproj
│ └── gnu-efi.vcxproj.user
├── Bootp
│ ├── App.config
│ ├── Tftp
│ │ ├── TftpMode.cs
│ │ ├── TftpPacketType.cs
│ │ ├── TftpError.cs
│ │ ├── TftpPacketOptions.cs
│ │ ├── TftpPacketReader.cs
│ │ └── TftpPacketWriter.cs
│ ├── Bootp.csproj.user
│ ├── Dhcp
│ │ ├── DhcpMessageType.cs
│ │ ├── DhcpClientSystemArchitecture.cs
│ │ ├── DhcpPacketOptionId.cs
│ │ ├── DhcpPacketReader.cs
│ │ ├── DhcpPacketWriter.cs
│ │ └── DhcpPacketOptions.cs
│ ├── BootpServer.cs
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── Program.cs
│ ├── Helpers.cs
│ └── Bootp.csproj
├── helloworld
│ ├── main.c
│ ├── helloworld.vcxproj.filters
│ └── helloworld.vcxproj.user
└── bootp.sln
└── README.md
/img/debugging.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vurdalakov/bootp/HEAD/img/debugging.png
--------------------------------------------------------------------------------
/src/gnu-efi/.gitignore:
--------------------------------------------------------------------------------
1 | *.efi
2 | *.efi.debug
3 | *.o
4 | *.a
5 | *.tar.*
6 | *.tar
7 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/aarch64/efi_stub.S:
--------------------------------------------------------------------------------
1 | /* This stub is a stub to make the build happy */
2 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/protocol/readme.txt:
--------------------------------------------------------------------------------
1 | The protocol directory contains non Architectural
2 | Protocols that span the FW, Platform, or application
3 | space.
--------------------------------------------------------------------------------
/src/gnu-efi/inc/protocol/make.inf:
--------------------------------------------------------------------------------
1 | #
2 | #
3 | #
4 |
5 | [sources]
6 | efivar.h
7 | legacyboot.h
8 | VgaClass.h
9 | intload.h
10 |
11 | [ia32sources]
12 |
13 | [ia64sources]
14 |
--------------------------------------------------------------------------------
/src/gnu-efi-vcxproj/gnu-efi.vcxproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/Bootp/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/Bootp/Tftp/TftpMode.cs:
--------------------------------------------------------------------------------
1 | namespace dhcp
2 | {
3 | public enum TftpMode
4 | {
5 | Unknown = 0,
6 | Netascii = 1,
7 | Octet = 2,
8 | Mail = 3,
9 | Binary = 4
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/gnu-efi/apps/tpause.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | EFI_STATUS
5 | efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
6 | {
7 | Print(L"Press `q' to quit, any other key to continue:\n");
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/src/Bootp/Bootp.csproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ShowAllFiles
5 |
6 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/efisetjmp.h:
--------------------------------------------------------------------------------
1 | #ifndef GNU_EFI_SETJMP_H
2 | #define GNU_EFI_SETJMP_H
3 |
4 | #include "efisetjmp_arch.h"
5 |
6 | extern UINTN setjmp(jmp_buf *env);
7 | extern VOID longjmp(jmp_buf *env, UINTN value);
8 |
9 | #endif /* GNU_EFI_SETJMP_H */
10 |
--------------------------------------------------------------------------------
/src/Bootp/Tftp/TftpPacketType.cs:
--------------------------------------------------------------------------------
1 | namespace dhcp
2 | {
3 | using System;
4 |
5 | public enum TftpPacketType : UInt16
6 | {
7 | ReadRequest = 1,
8 | WriteRequest = 2,
9 | Data = 3,
10 | Acknowledgment = 4,
11 | Error = 5,
12 | OptionAcknowledgment = 6
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/Bootp/Dhcp/DhcpMessageType.cs:
--------------------------------------------------------------------------------
1 | namespace dhcp
2 | {
3 | using System;
4 |
5 | public enum DhcpMessageType : Byte
6 | {
7 | DhcpDiscover = 1,
8 | DhcpOffer = 2,
9 | DhcpRequest = 3,
10 | DhcpDecline = 4,
11 | DhcpAcknowledge = 5,
12 | DhcpNak = 6,
13 | DhcpRelease = 7,
14 | DhcpInform = 8
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/gnu-efi/apps/t2.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | EFI_STATUS
5 | efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
6 | {
7 | SIMPLE_TEXT_OUTPUT_INTERFACE *conout;
8 |
9 | InitializeLib(image, systab);
10 | conout = systab->ConOut;
11 | uefi_call_wrapper(conout->OutputString, 2, conout, L"Hello World!\n\r");
12 |
13 | return EFI_SUCCESS;
14 | }
15 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/aarch64/efilibplat.h:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1998 Intel Corporation
4 |
5 | Module Name:
6 |
7 | efilibplat.h
8 |
9 | Abstract:
10 |
11 | EFI to compile bindings
12 |
13 |
14 |
15 |
16 | Revision History
17 |
18 | --*/
19 |
20 | VOID
21 | InitializeLibPlatform (
22 | IN EFI_HANDLE ImageHandle,
23 | IN EFI_SYSTEM_TABLE *SystemTable
24 | );
25 |
26 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/x86_64/efilibplat.h:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1998 Intel Corporation
4 |
5 | Module Name:
6 |
7 | efilibplat.h
8 |
9 | Abstract:
10 |
11 | EFI to compile bindings
12 |
13 |
14 |
15 |
16 | Revision History
17 |
18 | --*/
19 |
20 | VOID
21 | InitializeLibPlatform (
22 | IN EFI_HANDLE ImageHandle,
23 | IN EFI_SYSTEM_TABLE *SystemTable
24 | );
25 |
26 |
27 |
--------------------------------------------------------------------------------
/src/Bootp/Tftp/TftpError.cs:
--------------------------------------------------------------------------------
1 | namespace dhcp
2 | {
3 | using System;
4 |
5 | public enum TftpError
6 | {
7 | NotDefined = 0,
8 | FileNotFound = 1,
9 | AccessViolation = 2,
10 | DiskFull = 3,
11 | IllegalOperation = 4,
12 | UnknownTransferId = 5,
13 | FileAlreadyExists = 6,
14 | NoSuchUser = 7,
15 | OptionNegotiationFailed = 8
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/x86_64/initplat.c:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1998 Intel Corporation
4 |
5 | Module Name:
6 |
7 | initplat.c
8 |
9 | Abstract:
10 |
11 |
12 |
13 |
14 | Revision History
15 |
16 | --*/
17 |
18 | #include "lib.h"
19 |
20 | VOID
21 | InitializeLibPlatform (
22 | IN EFI_HANDLE ImageHandle EFI_UNUSED,
23 | IN EFI_SYSTEM_TABLE *SystemTable EFI_UNUSED
24 | )
25 | {
26 | }
27 |
28 |
--------------------------------------------------------------------------------
/src/gnu-efi/apps/t5.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | EFI_STATUS
5 | efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
6 | {
7 | InitializeLib(image, systab);
8 | Print(L"HelloLib application started\n");
9 | Print(L"\n\n\nHit any key to exit this image\n");
10 | WaitForSingleEvent(ST->ConIn->WaitForKey, 0);
11 | uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, L"\n\n");
12 | return EFI_SUCCESS;
13 | }
14 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/x86_64/efisetjmp_arch.h:
--------------------------------------------------------------------------------
1 | #ifndef GNU_EFI_X86_64_SETJMP_H
2 | #define GNU_EFI_X86_64_SETJMP_H
3 |
4 | #define JMPBUF_ALIGN 8
5 |
6 | typedef struct {
7 | UINT64 Rbx;
8 | UINT64 Rsp;
9 | UINT64 Rbp;
10 |
11 | UINT64 Rdi;
12 | UINT64 Rsi;
13 | UINT64 R12;
14 | UINT64 R13;
15 | UINT64 R14;
16 | UINT64 R15;
17 | UINT64 Rip;
18 | UINT64 MxCsr;
19 | UINT8 XmmBuffer[160]; // XMM6 - XMM15
20 | } ALIGN(JMPBUF_ALIGN) jmp_buf;
21 |
22 | #endif /* GNU_EFI_X86_64_SETJMP_H */
23 |
--------------------------------------------------------------------------------
/src/gnu-efi/apps/t8.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | EFI_STATUS
5 | efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
6 | {
7 | INTN Argc, i;
8 | CHAR16 **Argv;
9 |
10 | InitializeLib(ImageHandle, SystemTable);
11 | Argc = GetShellArgcArgv(ImageHandle, &Argv);
12 |
13 | Print(L"Hello World, started with Argc=%d\n", Argc);
14 | for (i = 0 ; i < Argc ; ++i)
15 | Print(L" Argv[%d] = '%s'\n", i, Argv[i]);
16 |
17 | Print(L"Bye.\n");
18 | return EFI_SUCCESS;
19 | }
20 |
--------------------------------------------------------------------------------
/src/Bootp/Dhcp/DhcpClientSystemArchitecture.cs:
--------------------------------------------------------------------------------
1 | namespace dhcp
2 | {
3 | using System;
4 |
5 | public enum DhcpClientSystemArchitecture : UInt16
6 | {
7 | ia86Pc = 0, // legacy BIOS
8 | NecPc98 = 1,
9 | ia64pc = 2,
10 | DecAlpha = 3,
11 | x86 = 4,
12 | IntelLeanClient = 5,
13 | EfiIa32 = 6, // EFI x86
14 | EfiBc = 7, // EFI x64
15 | EfiXscale = 8,
16 | Efix8664 = 9 // EFI x64
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/make.inf:
--------------------------------------------------------------------------------
1 | #
2 | #
3 | #
4 |
5 | [sources]
6 | efi.h
7 | efiapi.h
8 | eficon.h
9 | efidebug.h
10 | efidef.h
11 | efidevp.h
12 | efierr.h
13 | efifs.h
14 | efilib.h
15 | efipart.h
16 | efipciio.h
17 | efiprot.h
18 | efipxebc.h
19 | efistdarg.h
20 | efinet.h
21 | efiip.h
22 | efiudp.h
23 | efitcp.h
24 |
25 | [ia32sources]
26 | efibind.h
27 | pe.h
28 | efilibplat.h
29 |
30 | [ia64sources]
31 | efibind.h
32 | pe.h
33 | efilibplat.h
34 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/protocol/intload.h:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1999 Intel Corporation
4 |
5 | Module Name:
6 |
7 | intload
8 |
9 | Abstract:
10 |
11 | EFI support for loading internally linked in apps
12 |
13 |
14 |
15 | Revision History
16 |
17 | --*/
18 |
19 | #ifndef _INTERNAL_LOAD_INCLUDE_
20 | #define _INTERNAL_LOAD_INCLUDE_
21 |
22 | // {D65A6B8C-71E5-4df0-A909-F0D2992B5AA9}
23 | #define INTERNAL_SHELL_GUID \
24 | { 0xd65a6b8c, 0x71e5, 0x4df0, {0xa9, 0x09, 0xf0, 0xd2, 0x99, 0x2b, 0x5a, 0xa9} }
25 |
26 |
27 | #endif
28 |
--------------------------------------------------------------------------------
/src/Bootp/Dhcp/DhcpPacketOptionId.cs:
--------------------------------------------------------------------------------
1 | namespace dhcp
2 | {
3 | using System;
4 |
5 | public enum DhcpPacketOptionId : Byte
6 | {
7 | Pad = 0,
8 | DhcpMessageType = 53,
9 | ServerIdentifier = 54,
10 | ParameterRequestList = 55,
11 | MaximumDhcpMessageSize = 57,
12 | VendorClassIdentifier = 60,
13 | ClientIdentifier = 61,
14 | ClientSystemArchitecture = 93,
15 | ClientNetworkDeviceInterface = 94,
16 | ClientIdentifierUuid = 97,
17 | End = 255
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/gnu-efi/apps/setjmp.c:
--------------------------------------------------------------------------------
1 |
2 | #include
3 | #include
4 |
5 | EFI_STATUS
6 | efi_main(
7 | EFI_HANDLE image_handle,
8 | EFI_SYSTEM_TABLE *systab
9 | )
10 | {
11 | jmp_buf env;
12 | int rc;
13 |
14 | InitializeLib(image_handle, systab);
15 | rc = setjmp(&env);
16 | Print(L"setjmp() = %d\n", rc);
17 |
18 | if (rc == 3) {
19 | Print(L"3 worked\n");
20 | longjmp(&env, 0);
21 | return 0;
22 | }
23 |
24 | if (rc == 1) {
25 | Print(L"0 got to be one yay\n");
26 | return 0;
27 | }
28 |
29 | longjmp(&env, 3);
30 | return 0;
31 | }
32 |
--------------------------------------------------------------------------------
/src/gnu-efi/apps/t4.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | EFI_STATUS
5 | efi_main (EFI_HANDLE *image, EFI_SYSTEM_TABLE *systab)
6 | {
7 | UINTN index;
8 |
9 | InitializeLib(image, systab);
10 | uefi_call_wrapper(systab->ConOut->OutputString, 2, systab->ConOut, L"Hello application started\r\n");
11 | uefi_call_wrapper(systab->ConOut->OutputString, 2, systab->ConOut, L"\r\n\r\n\r\nHit any key to exit\r\n");
12 | uefi_call_wrapper(systab->BootServices->WaitForEvent, 3, 1, &systab->ConIn->WaitForKey, &index);
13 | return EFI_SUCCESS;
14 | }
15 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/ia64/initplat.c:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1999 Intel Corporation
4 |
5 | Module Name:
6 |
7 | initplat.c
8 |
9 | Abstract:
10 |
11 | Functions to make SAL and PAL proc calls
12 |
13 | Revision History
14 |
15 | --*/
16 | #include "lib.h"
17 |
18 | //#include "palproc.h"
19 |
20 | VOID
21 | InitializeLibPlatform (
22 | IN EFI_HANDLE ImageHandle EFI_UNUSED,
23 | IN EFI_SYSTEM_TABLE *SystemTable EFI_UNUSED
24 | )
25 | {
26 | PLABEL SalPlabel;
27 | UINT64 PalEntry;
28 |
29 | LibInitSalAndPalProc (&SalPlabel, &PalEntry);
30 | }
31 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/eficompiler.h:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 2016 Pete Batard
4 |
5 | Module Name:
6 |
7 | eficompiler.h
8 |
9 | Abstract:
10 |
11 | Compiler specific adjustments
12 |
13 | --*/
14 |
15 | #ifdef _MSC_EXTENSIONS
16 | #define EFI_UNUSED
17 | #else
18 | #define EFI_UNUSED __attribute__((__unused__))
19 | #endif
20 |
21 | #ifdef _MSC_EXTENSIONS
22 | #define ALIGN(x) __declspec(align(x))
23 | #else
24 | #define ALIGN(x) __attribute__((__aligned__(x)))
25 | #endif
26 |
27 | /* Also add a catch-all on __attribute__() for MS compilers */
28 | #ifdef _MSC_EXTENSIONS
29 | #define __attribute__(x)
30 | #endif
31 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/debug.c:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1998 Intel Corporation
4 |
5 | Module Name:
6 |
7 | debug.c
8 |
9 | Abstract:
10 |
11 | Debug library functions
12 |
13 |
14 |
15 | Revision History
16 |
17 | --*/
18 |
19 | #include "lib.h"
20 |
21 |
22 |
23 | //
24 | // Declare runtime functions
25 | //
26 |
27 | //
28 | //
29 | //
30 |
31 | INTN
32 | DbgAssert (
33 | IN CHAR8 *FileName,
34 | IN INTN LineNo,
35 | IN CHAR8 *Description
36 | )
37 | {
38 | DbgPrint (D_ERROR, (CHAR8 *)"%EASSERT FAILED: %a(%d): %a%N\n", FileName, LineNo, Description);
39 |
40 | BREAKPOINT();
41 | return 0;
42 | }
43 |
44 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/aarch64/efisetjmp_arch.h:
--------------------------------------------------------------------------------
1 | #ifndef GNU_EFI_AARCH64_SETJMP_H
2 | #define GNU_EFI_AARCH64_SETJMP_H
3 |
4 | #define JMPBUF_ALIGN 8
5 |
6 | typedef struct {
7 | /* GP regs */
8 | UINT64 X19;
9 | UINT64 X20;
10 | UINT64 X21;
11 | UINT64 X22;
12 | UINT64 X23;
13 | UINT64 X24;
14 | UINT64 X25;
15 | UINT64 X26;
16 | UINT64 X27;
17 | UINT64 X28;
18 | UINT64 FP;
19 | UINT64 LR;
20 | UINT64 IP0;
21 |
22 | /* FP regs */
23 | UINT64 D8;
24 | UINT64 D9;
25 | UINT64 D10;
26 | UINT64 D11;
27 | UINT64 D12;
28 | UINT64 D13;
29 | UINT64 D14;
30 | UINT64 D15;
31 | } ALIGN(JMPBUF_ALIGN) jmp_buf;
32 |
33 | #endif /* GNU_EFI_AARCH64_SETJMP_H */
34 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/efistdarg.h:
--------------------------------------------------------------------------------
1 | #ifndef _EFISTDARG_H_
2 | #define _EFISTDARG_H_
3 |
4 | /*++
5 |
6 | Copyright (c) 1998 Intel Corporation
7 |
8 | Module Name:
9 |
10 | devpath.h
11 |
12 | Abstract:
13 |
14 | Defines for parsing the EFI Device Path structures
15 |
16 |
17 |
18 | Revision History
19 |
20 | --*/
21 |
22 | #ifndef GNU_EFI_USE_EXTERNAL_STDARG
23 | typedef __builtin_va_list va_list;
24 |
25 | # define va_start(v,l) __builtin_va_start(v,l)
26 | # define va_end(v) __builtin_va_end(v)
27 | # define va_arg(v,l) __builtin_va_arg(v,l)
28 | # define va_copy(d,s) __builtin_va_copy(d,s)
29 | #else
30 | # include
31 | #endif
32 |
33 | #endif
34 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/protocol/adapterdebug.h:
--------------------------------------------------------------------------------
1 | #ifndef _ADAPTER_DEBUG_H
2 | #define _ADAPTER_DEBUG_H
3 |
4 | /*++
5 |
6 | Copyright (c) 1999 Intel Corporation
7 |
8 | Module Name:
9 |
10 | AdapterDebug.h
11 |
12 | Abstract:
13 |
14 | Protocol to debug the EDD 3.0 enablement of BIOS option ROMs
15 |
16 |
17 |
18 | Revision History
19 |
20 | --*/
21 |
22 | // {82F86881-282B-11d4-BC7D-0080C73C8881}
23 | #define ADAPTER_DEBUG_PROTOCOL \
24 | { 0x82f86881, 0x282b, 0x11d4, {0xbc, 0x7d, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} }
25 |
26 | //
27 | // This protocol points to the BIOS_LEGACY_DRIVE data structure
28 | // see edd.h for more details
29 | //
30 |
31 | #endif
32 |
33 |
--------------------------------------------------------------------------------
/src/gnu-efi/apps/t.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | static CHAR16 *
5 | a2u (char *str)
6 | {
7 | static CHAR16 mem[2048];
8 | int i;
9 |
10 | for (i = 0; str[i]; ++i)
11 | mem[i] = (CHAR16) str[i];
12 | mem[i] = 0;
13 | return mem;
14 | }
15 |
16 | EFI_STATUS
17 | efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *systab)
18 | {
19 | SIMPLE_TEXT_OUTPUT_INTERFACE *conout;
20 |
21 | InitializeLib(image_handle, systab);
22 | conout = systab->ConOut;
23 | uefi_call_wrapper(conout->OutputString, 2, conout, (CHAR16 *)L"Hello World!\n\r");
24 | uefi_call_wrapper(conout->OutputString, 2, conout, a2u("Hello World!\n\r"));
25 |
26 | return EFI_SUCCESS;
27 | }
28 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/protocol/eficonsplit.h:
--------------------------------------------------------------------------------
1 | #ifndef _EFI_CONFORK_H
2 | #define _EFI_CONFORK_H
3 | /*++
4 |
5 | Copyright (c) 1999 Intel Corporation
6 |
7 | Module Name:
8 |
9 | Abstract:
10 |
11 |
12 |
13 | Revision History
14 |
15 | --*/
16 |
17 |
18 |
19 | //
20 | // ConOut Forker Protocol
21 | //
22 |
23 | #define TEXT_OUT_SPLITER_PROTOCOL \
24 | { 0x56d830a0, 0x7e7a, 0x11d3, {0xbb, 0xa0, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
25 |
26 | #define ERROR_OUT_SPLITER_PROTOCOL \
27 | { 0xf0ba9039, 0x68f1, 0x425e, {0xaa, 0x7f, 0xd9, 0xaa, 0xf9, 0x1b, 0x82, 0xa1}}
28 |
29 | #define TEXT_IN_SPLITER_PROTOCOL \
30 | { 0xf9a3c550, 0x7fb5, 0x11d3, {0xbb, 0xa0, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
31 |
32 | #endif
33 |
--------------------------------------------------------------------------------
/src/gnu-efi/README.elilo:
--------------------------------------------------------------------------------
1 |
2 | IMPORTANT information related to the gnu-efi package
3 | ----------------------------------------------------
4 | June 2001
5 |
6 | As of version 3.0, the gnu-efi package is now split in two different packages:
7 |
8 | -> gnu-efi-X.y: contains the EFI library, include files and crt0.
9 |
10 | -> elilo-X.y : contains the ELILO bootloader.
11 |
12 | Note that X.y don't need to match for both packages. However elilo-3.x
13 | requires at least gnu-efi-3.0. EFI support for x86_64 is provided in
14 | gnu-efi-3.0d.
15 |
16 | Both packages can be downloaded from:
17 |
18 | http://www.sf.net/projects/gnu-efi
19 | http://www.sf.net/projects/elilo
20 |
--------------------------------------------------------------------------------
/src/Bootp/BootpServer.cs:
--------------------------------------------------------------------------------
1 | namespace dhcp
2 | {
3 | using System;
4 | using System.Net;
5 |
6 | public class BootpServer
7 | {
8 | public void Start(IPAddress localIpAddress, String tftpRootDirectory, String uefi32FileName, String uefi64FileName)
9 | {
10 | var server = new DhcpServer(localIpAddress, 67);
11 | server.Start();
12 |
13 | var proxy = new DhcpServer(localIpAddress, 4011);
14 | proxy.Uefi32FileName = uefi32FileName;
15 | proxy.Uefi64FileName = uefi64FileName;
16 | proxy.Start();
17 |
18 | var tftpServer = new TftpServer(localIpAddress, tftpRootDirectory);
19 | tftpServer.Start();
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/gnu-efi/apps/t7.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | EFI_STATUS
5 | efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
6 | {
7 | EFI_INPUT_KEY efi_input_key;
8 | EFI_STATUS efi_status;
9 |
10 | InitializeLib(image, systab);
11 |
12 | Print(L"HelloLib application started\n");
13 |
14 | Print(L"\n\n\nHit any key to exit this image\n");
15 | WaitForSingleEvent(ST->ConIn->WaitForKey, 0);
16 |
17 | uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, L"\n\n");
18 |
19 | efi_status = uefi_call_wrapper(ST->ConIn->ReadKeyStroke, 2, ST->ConIn, &efi_input_key);
20 |
21 | Print(L"ScanCode: %xh UnicodeChar: %xh CallRtStatus: %x\n",
22 | efi_input_key.ScanCode, efi_input_key.UnicodeChar, efi_status);
23 |
24 | return EFI_SUCCESS;
25 | }
26 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/protocol/makefile.hdr:
--------------------------------------------------------------------------------
1 |
2 | #
3 | # This is a machine generated file - DO NOT EDIT
4 | # Generated by genmake.exe
5 | # Generated from make.inf
6 | # Copyright (c) 1998 Intel Corporation
7 | #
8 |
9 | INC_DEPS = $(INC_DEPS) \
10 | $(SDK_INSTALL_DIR)\include\efi\protocol\efivar.h \
11 | $(SDK_INSTALL_DIR)\include\efi\protocol\legacyboot.h \
12 | $(SDK_INSTALL_DIR)\include\efi\protocol\vgaclass.h \
13 | $(SDK_INSTALL_DIR)\include\efi\protocol\efidbg.h \
14 |
15 |
16 | !IF "$(PROCESSOR)" == "Ia32"
17 | INC_DEPS = $(INC_DEPS) \
18 |
19 |
20 | !ENDIF
21 |
22 |
23 | !IF "$(PROCESSOR)" == "Ia64"
24 | INC_DEPS = $(INC_DEPS) \
25 | $(SDK_INSTALL_DIR)\include\efi\protocol\$(PROCESSOR)\eficontext.h \
26 |
27 |
28 | !ENDIF
29 |
30 |
--------------------------------------------------------------------------------
/src/gnu-efi/README.git:
--------------------------------------------------------------------------------
1 | README.git
2 |
3 | Generating releases from git a very simple process;
4 |
5 | 1) Edit the file "Makefile". Changing the "VERSION" line to the new version.
6 | 2) Do a "git commit" just for the version number change.
7 | 3) Then do a "make test-archive".
8 | That will make a file in the current directory gnu-efi-$VERSION.tar.bz2 ,
9 | with its top level directory gnu-efi-$VERSION/ and the source tree under that.
10 |
11 | Once you've tested that and you're sure it's what you want to release,
12 | 4) Do "make archive", which will tag a release in git and generate a
13 | final tarball from it.
14 |
15 | You then push to the archive, being sure to include the tag:
16 | 5) "git push origin master:master --tags"
17 |
18 | And upload the archive wherever it's supposed to go.
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/inc.mak:
--------------------------------------------------------------------------------
1 |
2 |
3 | INC_DEPS = $(INC_DEPS) \
4 | efi.h \
5 | efiapi.h \
6 | efibind.h \
7 | eficon.h \
8 | efidebug.h \
9 | efidef.h \
10 | efidevp.h \
11 | efierr.h \
12 | efifs.h \
13 | efilib.h \
14 | efipart.h \
15 | efipciio.h \
16 | efiprot.h \
17 | efipxe.h \
18 | efivar.h \
19 | pe.h \
20 | efiip.h \
21 | efiudp.h \
22 | efitcp.h \
23 | stdarg.h
24 |
--------------------------------------------------------------------------------
/src/helloworld/main.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | EFI_STATUS efi_main(EFI_HANDLE imageHandle, EFI_SYSTEM_TABLE* systemTable)
5 | {
6 | // initialize GNU EFI library
7 |
8 | InitializeLib(imageHandle, systemTable);
9 |
10 | // do something
11 |
12 | Print(L"Hello world!\n");
13 | Print(L"Firmware vendor: %s\n", systemTable->FirmwareVendor);
14 |
15 | // show prompt
16 |
17 | Print(L"\nPress any key to reboot...\n");
18 |
19 | // wait any key
20 |
21 | ST->ConIn->Reset(ST->ConIn, FALSE);
22 |
23 | UINTN keyEvent;
24 | BS->WaitForEvent(1, &ST->ConIn->WaitForKey, &keyEvent);
25 |
26 | EFI_INPUT_KEY key;
27 | ST->ConIn->ReadKeyStroke(ST->ConIn, &key);
28 |
29 | // reboot device
30 |
31 | ST->RuntimeServices->ResetSystem(EfiResetCold, EFI_SUCCESS, 0, NULL);
32 |
33 | return EFI_SUCCESS;
34 | }
35 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/Makefile:
--------------------------------------------------------------------------------
1 | SRCDIR = .
2 |
3 | VPATH = $(SRCDIR)
4 |
5 | include $(SRCDIR)/../Make.defaults
6 |
7 | TOPDIR = $(SRCDIR)/..
8 |
9 | CDIR=$(TOPDIR)/..
10 |
11 | all:
12 |
13 | clean:
14 |
15 | install:
16 | mkdir -p $(INSTALLROOT)$(PREFIX)/include/efi
17 | mkdir -p $(INSTALLROOT)$(PREFIX)/include/efi/protocol
18 | mkdir -p $(INSTALLROOT)$(PREFIX)/include/efi/$(ARCH)
19 | $(INSTALL) -m 644 $(SRCDIR)/*.h $(INSTALLROOT)$(PREFIX)/include/efi
20 | $(INSTALL) -m 644 $(SRCDIR)/protocol/*.h $(INSTALLROOT)$(PREFIX)/include/efi/protocol
21 | $(INSTALL) -m 644 $(SRCDIR)/$(ARCH)/*.h $(INSTALLROOT)$(PREFIX)/include/efi/$(ARCH)
22 | ifeq ($(ARCH),ia64)
23 | mkdir -p $(INSTALLROOT)$(PREFIX)/include/efi/protocol/ia64
24 | $(INSTALL) -m 644 $(SRCDIR)/protocol/ia64/*.h $(INSTALLROOT)$(PREFIX)/include/efi/protocol/ia64
25 | endif
26 |
27 | include $(SRCDIR)/../Make.rules
28 |
--------------------------------------------------------------------------------
/src/gnu-efi/apps/printenv.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | EFI_STATUS
5 | efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
6 | {
7 | EFI_STATUS status;
8 | CHAR16 name[256], *val, fmt[20];
9 | EFI_GUID vendor;
10 | UINTN size;
11 |
12 | InitializeLib(image, systab);
13 |
14 | name[0] = 0;
15 | vendor = NullGuid;
16 |
17 | Print(L"GUID Variable Name Value\n");
18 | Print(L"=================================== ==================== ========\n");
19 |
20 | StrCpy(fmt, L"%.-35g %.-20s %s\n");
21 | while (1) {
22 | size = sizeof(name);
23 | status = uefi_call_wrapper(RT->GetNextVariableName, 3, &size, name, &vendor);
24 | if (status != EFI_SUCCESS)
25 | break;
26 |
27 | val = LibGetVariable(name, &vendor);
28 | Print(fmt, &vendor, name, val);
29 | FreePool(val);
30 | }
31 | return EFI_SUCCESS;
32 | }
33 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/romload.h:
--------------------------------------------------------------------------------
1 | #ifndef _EFI_ROMLOAD_H
2 | #define _EFI_ROMLOAD_H
3 |
4 | #define ROM_SIGNATURE 0xaa55
5 | #define PCIDS_SIGNATURE "PCIR"
6 | #pragma pack(push)
7 | #pragma pack(1)
8 | typedef struct
9 | {
10 | UINT8 Pcids_Sig[4];
11 | UINT16 VendId;
12 | UINT16 DevId;
13 | UINT16 Vpd_Off;
14 | UINT16 Size;
15 | UINT8 Rev;
16 | UINT8 Class_Code[3];
17 | UINT16 Image_Len;
18 | UINT16 Rev_Lvl;
19 | UINT8 Code_Type;
20 | UINT8 Indi;
21 | UINT16 Rsvd;
22 | }PciDataStructure;
23 | typedef struct
24 | {
25 | UINT16 Size;
26 | UINT32 Header_Sig;
27 | UINT16 SubSystem;
28 | UINT16 MachineType;
29 | UINT8 Resvd[10];
30 | UINT16 EfiOffset;
31 | }ArchData;
32 | typedef struct
33 | {
34 | UINT16 Rom_Sig;
35 | ArchData Arch_Data;
36 | UINT16 Pcids_Off;
37 | UINT8 resvd[38];
38 | }RomHeader;
39 | #pragma pack(pop)
40 |
41 | #endif
42 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/x86_64/setjmp.S:
--------------------------------------------------------------------------------
1 | .text
2 | .globl setjmp
3 | #ifndef __MINGW32__
4 | .type setjmp, @function
5 | #else
6 | .def setjmp; .scl 2; .type 32; .endef
7 | #endif
8 | setjmp:
9 | pop %rsi
10 | movq %rbx,0x00(%rdi)
11 | movq %rsp,0x08(%rdi)
12 | push %rsi
13 | movq %rbp,0x10(%rdi)
14 | movq %r12,0x18(%rdi)
15 | movq %r13,0x20(%rdi)
16 | movq %r14,0x28(%rdi)
17 | movq %r15,0x30(%rdi)
18 | movq %rsi,0x38(%rdi)
19 | xor %rax,%rax
20 | ret
21 |
22 | .globl longjmp
23 | #ifndef __MINGW32__
24 | .type longjmp, @function
25 | #else
26 | .def longjmp; .scl 2; .type 32; .endef
27 | #endif
28 | longjmp:
29 | movl %esi, %eax
30 | movq 0x00(%rdi), %rbx
31 | movq 0x08(%rdi), %rsp
32 | movq 0x10(%rdi), %rbp
33 | movq 0x18(%rdi), %r12
34 | movq 0x20(%rdi), %r13
35 | movq 0x28(%rdi), %r14
36 | movq 0x30(%rdi), %r15
37 | xor %rdx,%rdx
38 | mov $1,%rcx
39 | cmp %rax,%rdx
40 | cmove %rcx,%rax
41 | jmp *0x38(%rdi)
42 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/ia64/efisetjmp_arch.h:
--------------------------------------------------------------------------------
1 | #ifndef GNU_EFI_IA64_SETJMP_H
2 | #define GNU_EFI_IA64_SETJMP_H
3 |
4 | #define JMPBUF_ALIGN 0x10
5 |
6 | typedef struct {
7 | UINT64 F2[2];
8 | UINT64 F3[2];
9 | UINT64 F4[2];
10 | UINT64 F5[2];
11 | UINT64 F16[2];
12 | UINT64 F17[2];
13 | UINT64 F18[2];
14 | UINT64 F19[2];
15 | UINT64 F20[2];
16 | UINT64 F21[2];
17 | UINT64 F22[2];
18 | UINT64 F23[2];
19 | UINT64 F24[2];
20 | UINT64 F25[2];
21 | UINT64 F26[2];
22 | UINT64 F27[2];
23 | UINT64 F28[2];
24 | UINT64 F29[2];
25 | UINT64 F30[2];
26 | UINT64 F31[2];
27 | UINT64 R4;
28 | UINT64 R5;
29 | UINT64 R6;
30 | UINT64 R7;
31 | UINT64 SP;
32 | UINT64 BR0;
33 | UINT64 BR1;
34 | UINT64 BR2;
35 | UINT64 BR3;
36 | UINT64 BR4;
37 | UINT64 BR5;
38 | UINT64 InitialUNAT;
39 | UINT64 AfterSpillUNAT;
40 | UINT64 PFS;
41 | UINT64 BSP;
42 | UINT64 Predicates;
43 | UINT64 LoopCount;
44 | UINT64 FPSR;
45 | } ALIGN(JMPBUF_ALIGN) jmp_buf;
46 |
47 | #endif /* GNU_EFI_IA64_SETJMP_H */
48 |
--------------------------------------------------------------------------------
/src/gnu-efi/apps/drv0.h:
--------------------------------------------------------------------------------
1 | #ifndef _GNU_EFI_APPS_DRV0_H_
2 | #define _GNU_EFI_APPS_DRV0_H_
3 |
4 | #ifdef __cplusplus
5 | extern "C" {
6 | #endif
7 |
8 | /* UEFI naming conventions */
9 | #define GNU_EFI_APPS_DRV0_PROTOCOL_GUID \
10 | { 0xe4dcafd0, 0x586c, 0x4b3d, {0x86, 0xe7, 0x28, 0xde, 0x7f, 0xcc, 0x04, 0xb8} }
11 |
12 | INTERFACE_DECL(_GNU_EFI_APPS_DRV0_PROTOCOL);
13 |
14 | typedef
15 | EFI_STATUS
16 | (EFIAPI *GNU_EFI_APPS_DRV0_SAY_HELLO) (
17 | IN struct _GNU_EFI_APPS_DRV0_PROTOCOL *This,
18 | IN const CHAR16 *HelloWho
19 | );
20 |
21 | typedef
22 | EFI_STATUS
23 | (EFIAPI *GNU_EFI_APPS_DRV0_GET_NUMBER_OF_HELLO) (
24 | IN struct _GNU_EFI_APPS_DRV0_PROTOCOL *This,
25 | OUT UINTN *NumberOfHello
26 | );
27 |
28 | typedef struct _GNU_EFI_APPS_DRV0_PROTOCOL {
29 | GNU_EFI_APPS_DRV0_SAY_HELLO SayHello;
30 | GNU_EFI_APPS_DRV0_GET_NUMBER_OF_HELLO GetNumberOfHello;
31 | } GNU_EFI_APPS_DRV0_PROTOCOL;
32 |
33 | #ifdef __cplusplus
34 | }
35 | #endif
36 |
37 | #endif
38 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # BOOTP Server
2 |
3 | A simple BOOTP (PXE) server to support and simplify UEFI application development. It includes proxy DHCP and TFTP servers written in C#.
4 |
5 | Allows to run UEFI apps on remote PC over network (PXE) directly from Visual Studio.
6 |
7 | ### Download
8 |
9 | [Version 1.00 (13 KB, requires .NET Framework 4 or higher)](http://cdn.vurdalakov.net/files/bootp/bootp_1_00.zip)
10 |
11 | ### Usage
12 |
13 | #### Run from command line:
14 |
15 | ```
16 | bootp
17 | ```
18 |
19 | #### Run from Visual Studio:
20 |
21 | 
22 |
23 | ### Sample application
24 |
25 | Solution includes a simple UEFI `helloworld` C++ application to demonstrate usage of `BOOTP Server` from Visual Studio.
26 |
27 | It can be compiled on Windows using Visual Studio 2015 for `x86_32`, `x86_64` or `ARM` targets.
28 |
--------------------------------------------------------------------------------
/src/helloworld/helloworld.vcxproj.filters:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
7 |
8 |
9 | {93995380-89BD-4b04-88EB-625FBE52EBFB}
10 | h;hh;hpp;hxx;hm;inl;inc;xsd
11 |
12 |
13 | {b1c3b304-e868-4b07-988c-36ad7bc57300}
14 |
15 |
16 |
17 |
18 | Source Files
19 |
20 |
21 |
22 |
23 | Resource Files
24 |
25 |
26 |
--------------------------------------------------------------------------------
/src/gnu-efi/apps/trivial.S:
--------------------------------------------------------------------------------
1 | .text
2 | .align 4
3 |
4 | .globl _start
5 | _start:
6 | #if 0
7 | pushl %ebp
8 | movl %esp,%ebp
9 | pushl %ebx # save ebx
10 | movl 12(%ebp),%eax # eax <- systab
11 | movl 24(%eax),%ebx # ebx <- systab->FirmwareVendor
12 | pushl %ebx
13 | movl 44(%eax),%ebx # ebx <- systab->ConOut
14 | pushl %ebx
15 | movl 4(%ebx),%eax # eax <- conout->OutputString
16 | call *%eax
17 | movl -4(%ebp),%ebx # restore ebx
18 | leave
19 | ret
20 |
21 | #else
22 |
23 | pushl %ebp
24 | movl %esp,%ebp
25 | pushl %ebx
26 | call 0f
27 | 0: popl %eax
28 | addl $hello-0b,%eax
29 | pushl %eax
30 | movl 12(%ebp),%eax # eax <- systab
31 | movl 44(%eax),%ebx # ebx <- systab->ConOut
32 | pushl %ebx
33 | movl 4(%ebx),%eax # eax <- conout->OutputString
34 | call *%eax
35 | movl -4(%ebp),%ebx
36 | leave
37 | ret
38 |
39 | .section .rodata
40 | .align 2
41 | hello: .byte 'h',0,'e',0,'l',0,'l',0,'o',0,'\n',0,'\r',0,0,0
42 |
43 | #endif
44 |
--------------------------------------------------------------------------------
/src/gnu-efi/apps/t6.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | typedef EFI_STATUS (*foo_t)(EFI_HANDLE, EFI_GUID *, VOID **);
5 | typedef struct {
6 | unsigned long addr;
7 | unsigned long gp;
8 | } fdesc_t;
9 |
10 | EFI_LOADED_IMAGE my_loaded;
11 |
12 | EFI_STATUS
13 | efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
14 | {
15 | EFI_LOADED_IMAGE *loaded_image = NULL;
16 | #if 0
17 | EFI_DEVICE_PATH *dev_path;
18 | #endif
19 | EFI_STATUS status;
20 |
21 | InitializeLib(image, systab);
22 | status = uefi_call_wrapper(systab->BootServices->HandleProtocol,
23 | 3,
24 | image,
25 | &LoadedImageProtocol,
26 | (void **) &loaded_image);
27 | if (EFI_ERROR(status)) {
28 | Print(L"handleprotocol: %r\n", status);
29 | }
30 |
31 | #if 0
32 | BS->HandleProtocol(loaded_image->DeviceHandle, &DevicePathProtocol, (void **) &dev_path);
33 |
34 | Print(L"Image device : %s\n", DevicePathToStr(dev_path));
35 | Print(L"Image file : %s\n", DevicePathToStr(loaded_image->FilePath));
36 | #endif
37 | Print(L"Image base : %lx\n", loaded_image->ImageBase);
38 | Print(L"Image size : %lx\n", loaded_image->ImageSize);
39 | Print(L"Load options size : %lx\n", loaded_image->LoadOptionsSize);
40 | Print(L"Load options : %s\n", loaded_image->LoadOptions);
41 |
42 | return EFI_SUCCESS;
43 | }
44 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/runtime/rtdata.c:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1998 Intel Corporation
4 |
5 | Module Name:
6 |
7 | data.c
8 |
9 | Abstract:
10 |
11 | EFI library global data
12 |
13 |
14 |
15 | Revision History
16 |
17 | --*/
18 |
19 | #include "lib.h"
20 |
21 |
22 | //
23 | // These globals are runtime globals
24 | //
25 | // N.B. The Microsoft C compiler will only put the data in the
26 | // right data section if it is explicitly initialized..
27 | //
28 |
29 | #ifndef __GNUC__
30 | #pragma BEGIN_RUNTIME_DATA()
31 | #endif
32 |
33 | //
34 | // RT - pointer to the runtime table
35 | //
36 |
37 | EFI_RUNTIME_SERVICES *RT;
38 |
39 | //
40 | // LibStandalone - TRUE if lib is linked in as part of the firmware.
41 | // N.B. The EFI fw sets this value directly
42 | //
43 |
44 | BOOLEAN LibFwInstance;
45 |
46 | //
47 | // EFIDebug - Debug mask
48 | //
49 |
50 | UINTN EFIDebug = EFI_DBUG_MASK;
51 |
52 | //
53 | // LibRuntimeDebugOut - Runtime Debug Output device
54 | //
55 |
56 | SIMPLE_TEXT_OUTPUT_INTERFACE *LibRuntimeDebugOut;
57 |
58 | //
59 | // LibRuntimeRaiseTPL, LibRuntimeRestoreTPL - pointers to Runtime functions from the
60 | // Boot Services Table
61 | //
62 |
63 | EFI_RAISE_TPL LibRuntimeRaiseTPL = NULL;
64 | EFI_RESTORE_TPL LibRuntimeRestoreTPL = NULL;
65 |
66 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/efi.h:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1998 Intel Corporation
4 |
5 | Module Name:
6 |
7 | efi.h
8 |
9 | Abstract:
10 |
11 | Public EFI header files
12 |
13 |
14 |
15 | Revision History
16 |
17 | --*/
18 |
19 |
20 | // Add a predefined macro to detect usage of the library
21 | #ifndef _GNU_EFI
22 | #define _GNU_EFI
23 | #endif
24 |
25 | //
26 | // Build flags on input
27 | // EFI32
28 | // EFI_DEBUG - Enable debugging code
29 | // EFI_NT_EMULATOR - Building for running under NT
30 | //
31 |
32 |
33 | #ifndef _EFI_INCLUDE_
34 | #define _EFI_INCLUDE_
35 |
36 | #define EFI_FIRMWARE_VENDOR L"INTEL"
37 | #define EFI_FIRMWARE_MAJOR_REVISION 12
38 | #define EFI_FIRMWARE_MINOR_REVISION 33
39 | #define EFI_FIRMWARE_REVISION ((EFI_FIRMWARE_MAJOR_REVISION <<16) | (EFI_FIRMWARE_MINOR_REVISION))
40 |
41 | #include "efibind.h"
42 | #include "eficompiler.h"
43 | #include "efidef.h"
44 | #include "efidevp.h"
45 | #include "efipciio.h"
46 | #include "efiprot.h"
47 | #include "eficon.h"
48 | #include "efiser.h"
49 | #include "efi_nii.h"
50 | #include "efipxebc.h"
51 | #include "efinet.h"
52 | #include "efiapi.h"
53 | #include "efifs.h"
54 | #include "efierr.h"
55 | #include "efiui.h"
56 | #include "efiip.h"
57 | #include "efiudp.h"
58 | #include "efitcp.h"
59 | #include "efipoint.h"
60 | #include "efisetjmp.h"
61 |
62 | #endif
63 |
--------------------------------------------------------------------------------
/src/gnu-efi/gnuefi/elf_arm_efi.lds:
--------------------------------------------------------------------------------
1 | OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
2 | OUTPUT_ARCH(arm)
3 | ENTRY(_start)
4 | SECTIONS
5 | {
6 | .text 0x0 : {
7 | _text = .;
8 | *(.text.head)
9 | *(.text)
10 | *(.text.*)
11 | *(.gnu.linkonce.t.*)
12 | *(.srodata)
13 | *(.rodata*)
14 | . = ALIGN(16);
15 | }
16 | _etext = .;
17 | _text_size = . - _text;
18 | .dynamic : { *(.dynamic) }
19 | .data :
20 | {
21 | _data = .;
22 | *(.sdata)
23 | *(.data)
24 | *(.data1)
25 | *(.data.*)
26 | *(.got.plt)
27 | *(.got)
28 |
29 | /* the EFI loader doesn't seem to like a .bss section, so we stick
30 | it all into .data: */
31 | . = ALIGN(16);
32 | _bss = .;
33 | *(.sbss)
34 | *(.scommon)
35 | *(.dynbss)
36 | *(.bss)
37 | *(.bss.*)
38 | *(COMMON)
39 | . = ALIGN(16);
40 | _bss_end = .;
41 | }
42 |
43 | .rel.dyn : { *(.rel.dyn) }
44 | .rel.plt : { *(.rel.plt) }
45 | .rel.got : { *(.rel.got) }
46 | .rel.data : { *(.rel.data) *(.rel.data*) }
47 | _edata = .;
48 | _data_size = . - _etext;
49 |
50 | . = ALIGN(4096);
51 | .dynsym : { *(.dynsym) }
52 | . = ALIGN(4096);
53 | .dynstr : { *(.dynstr) }
54 | . = ALIGN(4096);
55 | .note.gnu.build-id : { *(.note.gnu.build-id) }
56 | /DISCARD/ :
57 | {
58 | *(.rel.reloc)
59 | *(.eh_frame)
60 | *(.note.GNU-stack)
61 | }
62 | .comment 0 : { *(.comment) }
63 | }
64 |
--------------------------------------------------------------------------------
/src/gnu-efi/gnuefi/elf_aarch64_efi.lds:
--------------------------------------------------------------------------------
1 | OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64")
2 | OUTPUT_ARCH(aarch64)
3 | ENTRY(_start)
4 | SECTIONS
5 | {
6 | .text 0x0 : {
7 | _text = .;
8 | *(.text.head)
9 | *(.text)
10 | *(.text.*)
11 | *(.gnu.linkonce.t.*)
12 | *(.srodata)
13 | *(.rodata*)
14 | . = ALIGN(16);
15 | }
16 | _etext = .;
17 | _text_size = . - _text;
18 | .dynamic : { *(.dynamic) }
19 | .data :
20 | {
21 | _data = .;
22 | *(.sdata)
23 | *(.data)
24 | *(.data1)
25 | *(.data.*)
26 | *(.got.plt)
27 | *(.got)
28 |
29 | /* the EFI loader doesn't seem to like a .bss section, so we stick
30 | it all into .data: */
31 | . = ALIGN(16);
32 | _bss = .;
33 | *(.sbss)
34 | *(.scommon)
35 | *(.dynbss)
36 | *(.bss)
37 | *(COMMON)
38 | . = ALIGN(16);
39 | _bss_end = .;
40 | }
41 |
42 | .rela.dyn : { *(.rela.dyn) }
43 | .rela.plt : { *(.rela.plt) }
44 | .rela.got : { *(.rela.got) }
45 | .rela.data : { *(.rela.data) *(.rela.data*) }
46 | _edata = .;
47 | _data_size = . - _etext;
48 |
49 | . = ALIGN(4096);
50 | .dynsym : { *(.dynsym) }
51 | . = ALIGN(4096);
52 | .dynstr : { *(.dynstr) }
53 | . = ALIGN(4096);
54 | .note.gnu.build-id : { *(.note.gnu.build-id) }
55 | /DISCARD/ :
56 | {
57 | *(.rel.reloc)
58 | *(.eh_frame)
59 | *(.note.GNU-stack)
60 | }
61 | .comment 0 : { *(.comment) }
62 | }
63 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/efipart.h:
--------------------------------------------------------------------------------
1 | #ifndef _EFI_PART_H
2 | #define _EFI_PART_H
3 |
4 | /*++
5 |
6 | Copyright (c) 1998 Intel Corporation
7 |
8 | Module Name:
9 |
10 | efipart.h
11 |
12 | Abstract:
13 | Info about disk partitions and Master Boot Records
14 |
15 |
16 |
17 |
18 | Revision History
19 |
20 | --*/
21 |
22 | //
23 | //
24 | //
25 |
26 | #define EFI_PARTITION 0xef
27 | #define MBR_SIZE 512
28 |
29 | #pragma pack(1)
30 |
31 | typedef struct {
32 | UINT8 BootIndicator;
33 | UINT8 StartHead;
34 | UINT8 StartSector;
35 | UINT8 StartTrack;
36 | UINT8 OSIndicator;
37 | UINT8 EndHead;
38 | UINT8 EndSector;
39 | UINT8 EndTrack;
40 | UINT8 StartingLBA[4];
41 | UINT8 SizeInLBA[4];
42 | } MBR_PARTITION_RECORD;
43 |
44 | #define EXTRACT_UINT32(D) (UINT32)(D[0] | (D[1] << 8) | (D[2] << 16) | (D[3] << 24))
45 |
46 | #define MBR_SIGNATURE 0xaa55
47 | #define MIN_MBR_DEVICE_SIZE 0x80000
48 | #define MBR_ERRATA_PAD 0x40000 // 128 MB
49 |
50 | #define MAX_MBR_PARTITIONS 4
51 | typedef struct {
52 | UINT8 BootStrapCode[440];
53 | UINT8 UniqueMbrSignature[4];
54 | UINT8 Unknown[2];
55 | MBR_PARTITION_RECORD Partition[MAX_MBR_PARTITIONS];
56 | UINT16 Signature;
57 | } MASTER_BOOT_RECORD;
58 | #pragma pack()
59 |
60 |
61 | #endif
62 |
--------------------------------------------------------------------------------
/src/Bootp/Tftp/TftpPacketOptions.cs:
--------------------------------------------------------------------------------
1 | namespace dhcp
2 | {
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Linq;
6 |
7 | public class TftpPacketOptions
8 | {
9 | private Dictionary _options = new Dictionary();
10 |
11 | public String[] GetNames()
12 | {
13 | return _options.Keys.ToArray();
14 | }
15 |
16 | public Boolean Exists(String name)
17 | {
18 | return _options.ContainsKey(name.ToLower());
19 | }
20 |
21 | public void Add(String name, String value)
22 | {
23 | _options[name.ToLower()] = value;
24 | }
25 |
26 | public void Add(String name, Int32 value)
27 | {
28 | Add(name, value.ToString());
29 | }
30 |
31 | public String GetString(String name, String defaultValue = null)
32 | {
33 | name = name.ToLower();
34 | return _options.ContainsKey(name) ? _options[name] : defaultValue;
35 | }
36 |
37 | public Int32 GetNumber(String name, Int32 defaultValue = -1)
38 | {
39 | var octets = GetString(name);
40 | if (null == octets)
41 | {
42 | return defaultValue;
43 | }
44 |
45 | Int32 value = 0;
46 | return Int32.TryParse(octets, out value) ? value : defaultValue;
47 | }
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/ia64/efilibplat.h:
--------------------------------------------------------------------------------
1 | #ifndef _EFI_LIB_PLAT_H
2 | #define _EFI_LIB_PLAT_H
3 | /*++
4 |
5 | Copyright (c) 1998 Intel Corporation
6 |
7 | Module Name:
8 |
9 | efilibplat.h
10 |
11 | Abstract:
12 |
13 | EFI to compile bindings
14 |
15 |
16 |
17 | Revision History
18 |
19 | --*/
20 |
21 | #include "salproc.h"
22 |
23 |
24 | VOID
25 | InitializeLibPlatform (
26 | IN EFI_HANDLE ImageHandle,
27 | IN EFI_SYSTEM_TABLE *SystemTable
28 | );
29 |
30 | VOID
31 | LibInitSalAndPalProc(
32 | OUT PLABEL *SalPlabel,
33 | OUT UINT64 *PalEntry
34 | );
35 |
36 | EFI_STATUS
37 | LibGetSalIoPortMapping (
38 | OUT UINT64 *IoPortMapping
39 | );
40 |
41 | EFI_STATUS
42 | LibGetSalIpiBlock (
43 | OUT UINT64 *IpiBlock
44 | );
45 |
46 | EFI_STATUS
47 | LibGetSalWakeupVector (
48 | OUT UINT64 *WakeVector
49 | );
50 |
51 | VOID *
52 | LibSearchSalSystemTable (
53 | IN UINT8 EntryType
54 | );
55 |
56 |
57 | VOID
58 | LibSalProc (
59 | IN UINT64 Arg1,
60 | IN UINT64 Arg2,
61 | IN UINT64 Arg3,
62 | IN UINT64 Arg4,
63 | IN UINT64 Arg5,
64 | IN UINT64 Arg6,
65 | IN UINT64 Arg7,
66 | IN UINT64 Arg8,
67 | OUT rArg *Results OPTIONAL
68 | );
69 |
70 | VOID
71 | LibPalProc (
72 | IN UINT64 Arg1,
73 | IN UINT64 Arg2,
74 | IN UINT64 Arg3,
75 | IN UINT64 Arg4,
76 | OUT rArg *Results OPTIONAL
77 | );
78 |
79 | #endif
80 |
81 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/ia64/palproc.h:
--------------------------------------------------------------------------------
1 | //
2 | //
3 | // Copyright (c) 1996-99 Intel Corp.
4 | //
5 | //
6 | //Module Name:
7 | //
8 | // palproc.h
9 | //
10 | //Abstract:
11 | //
12 | // This module contains generic macros for an IA64 assembly writer.
13 | //
14 | //
15 | //Revision History
16 | //
17 |
18 | #ifndef _PALPROC_H
19 | #define _PALPROC_H
20 |
21 | #define PROCEDURE_ENTRY(name) .##text; \
22 | .##type name, @function; \
23 | .##global name; \
24 | .##proc name; \
25 | name:
26 |
27 | #define PROCEDURE_EXIT(name) .##endp name
28 |
29 | // Note: use of NESTED_SETUP requires number of locals (l) >= 3
30 |
31 | #define NESTED_SETUP(i,l,o,r) \
32 | alloc loc1=ar##.##pfs,i,l,o,r ;\
33 | mov loc0=b0
34 |
35 | #define NESTED_RETURN \
36 | mov b0=loc0 ;\
37 | mov ar##.##pfs=loc1 ;;\
38 | br##.##ret##.##dpnt b0;;
39 |
40 |
41 | // defines needed in palproc.s
42 |
43 | #define PAL_MC_CLEAR_LOG 0x0015
44 | #define PAL_MC_DRAIN 0x0016
45 | #define PAL_MC_EXPECTED 0x0017
46 | #define PAL_MC_DYNAMIC_STATE 0x0018
47 | #define PAL_MC_ERROR_INFO 0x0019
48 | #define PAL_MC_RESUME 0x001a
49 | #define PAL_MC_REGISTER_MEM 0x001b
50 |
51 | #endif // _PALPROC_H
52 |
--------------------------------------------------------------------------------
/src/Bootp/Tftp/TftpPacketReader.cs:
--------------------------------------------------------------------------------
1 | namespace dhcp
2 | {
3 | using System;
4 | using System.IO;
5 | using System.Net;
6 | using System.Text;
7 |
8 | public class TftpPacketReader : IDisposable
9 | {
10 | private Byte[] _data;
11 | private int _pos;
12 |
13 | public TftpPacketReader(Byte[] data)
14 | {
15 | _data = data;
16 | _pos = 0;
17 | }
18 |
19 | public void Dispose()
20 | {
21 | }
22 |
23 | public Boolean EndOfStream()
24 | {
25 | return _pos >= _data.Length;
26 | }
27 |
28 | public UInt16 ReadUInt16()
29 | {
30 | var number = (UInt16)(_data[_pos] << 8);
31 | _pos++;
32 | number |= _data[_pos];
33 | _pos++;
34 | return number;
35 | }
36 |
37 | public String ReadString()
38 | {
39 | var i = _pos;
40 | while ((i < _data.Length) && (0 != _data[i]))
41 | {
42 | i++;
43 | }
44 |
45 | i -= _pos;
46 | var str = Encoding.ASCII.GetString(_data, _pos, i);
47 | _pos += i + 1;
48 | return str;
49 | }
50 |
51 | public Byte[] ReadToEnd()
52 | {
53 | var length = _data.Length - _pos;
54 | var array = new Byte[length];
55 | Array.Copy(_data, _pos, array, 0, length);
56 | return array;
57 | }
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/src/gnu-efi/gnuefi/elf_x86_64_fbsd_efi.lds:
--------------------------------------------------------------------------------
1 | /* Same as elf_x86_64_efi.lds, except for OUTPUT_FORMAT below - KEEP IN SYNC */
2 | OUTPUT_FORMAT("elf64-x86-64-freebsd", "elf64-x86-64-freebsd", "elf64-x86-64-freebsd")
3 | OUTPUT_ARCH(i386:x86-64)
4 | ENTRY(_start)
5 | SECTIONS
6 | {
7 | . = 0;
8 | ImageBase = .;
9 | .hash : { *(.hash) } /* this MUST come first! */
10 | . = ALIGN(4096);
11 | .eh_frame :
12 | {
13 | *(.eh_frame)
14 | }
15 | . = ALIGN(4096);
16 | .text :
17 | {
18 | _text = .;
19 | *(.text)
20 | . = ALIGN(16);
21 | }
22 | _etext = .;
23 | _text_size = . - _text;
24 | .reloc :
25 | {
26 | *(.reloc)
27 | }
28 | . = ALIGN(4096);
29 | .data :
30 | {
31 | _data = .;
32 | *(.rodata*)
33 | *(.got.plt)
34 | *(.got)
35 | *(.data*)
36 | *(.sdata)
37 | /* the EFI loader doesn't seem to like a .bss section, so we stick
38 | it all into .data: */
39 | *(.sbss)
40 | *(.scommon)
41 | *(.dynbss)
42 | *(.bss)
43 | *(COMMON)
44 | *(.rel.local)
45 | }
46 | .note.gnu.build-id : { *(.note.gnu.build-id) }
47 |
48 | . = ALIGN(4096);
49 | .dynamic : { *(.dynamic) }
50 | . = ALIGN(4096);
51 | .rela :
52 | {
53 | *(.rela.data*)
54 | *(.rela.got)
55 | *(.rela.stab)
56 | }
57 | _edata = .;
58 | _data_size = . - _etext;
59 | . = ALIGN(4096);
60 | .dynsym : { *(.dynsym) }
61 | . = ALIGN(4096);
62 | .dynstr : { *(.dynstr) }
63 | . = ALIGN(4096);
64 | .ignored.reloc :
65 | {
66 | *(.rela.reloc)
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/aarch64/initplat.c:
--------------------------------------------------------------------------------
1 | /*
2 | * Copright (C) 2014 Linaro Ltd.
3 | * Author: Ard Biesheuvel
4 | *
5 | * Redistribution and use in source and binary forms, with or without
6 | * modification, are permitted provided that the following conditions
7 | * are met:
8 | * 1. Redistributions of source code must retain the above copyright
9 | * notice and this list of conditions, without modification.
10 | * 2. The name of the author may not be used to endorse or promote products
11 | * derived from this software without specific prior written permission.
12 | *
13 | * Alternatively, this software may be distributed under the terms of the
14 | * GNU General Public License as published by the Free Software Foundation;
15 | * either version 2 of the License, or (at your option) any later version.
16 | */
17 |
18 | #include "lib.h"
19 |
20 | VOID
21 | InitializeLibPlatform (
22 | IN EFI_HANDLE ImageHandle EFI_UNUSED,
23 | IN EFI_SYSTEM_TABLE *SystemTable EFI_UNUSED
24 | )
25 | {
26 | }
27 |
28 | /*
29 | * Calls to these functions may be emitted implicitly by GCC even when
30 | * -ffreestanding is in effect.
31 | */
32 | void *memset(void *s, int c, __SIZE_TYPE__ n)
33 | {
34 | unsigned char *p = s;
35 |
36 | while (n--)
37 | *p++ = c;
38 |
39 | return s;
40 | }
41 |
42 | void *memcpy(void *dest, const void *src, __SIZE_TYPE__ n)
43 | {
44 | unsigned char *p = dest, *q = src;
45 |
46 | while (n--)
47 | *p++ = *q++;
48 |
49 | return dest;
50 | }
51 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/ia64/math.c:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1998 Intel Corporation
4 |
5 | Module Name:
6 |
7 | math.c
8 |
9 | Abstract:
10 |
11 |
12 |
13 |
14 | Revision History
15 |
16 | --*/
17 |
18 | #include "lib.h"
19 |
20 |
21 | //
22 | // Declare runtime functions
23 | //
24 |
25 | #ifdef RUNTIME_CODE
26 | #ifndef __GNUC__
27 | #pragma RUNTIME_CODE(LShiftU64)
28 | #pragma RUNTIME_CODE(RShiftU64)
29 | #pragma RUNTIME_CODE(MultU64x32)
30 | #pragma RUNTIME_CODE(DivU64x32)
31 | #endif
32 | #endif
33 |
34 | //
35 | //
36 | //
37 |
38 |
39 |
40 |
41 | UINT64
42 | LShiftU64 (
43 | IN UINT64 Operand,
44 | IN UINTN Count
45 | )
46 | // Left shift 64bit by 32bit and get a 64bit result
47 | {
48 | return Operand << Count;
49 | }
50 |
51 | UINT64
52 | RShiftU64 (
53 | IN UINT64 Operand,
54 | IN UINTN Count
55 | )
56 | // Right shift 64bit by 32bit and get a 64bit result
57 | {
58 | return Operand >> Count;
59 | }
60 |
61 |
62 | UINT64
63 | MultU64x32 (
64 | IN UINT64 Multiplicand,
65 | IN UINTN Multiplier
66 | )
67 | // Multiple 64bit by 32bit and get a 64bit result
68 | {
69 | return Multiplicand * Multiplier;
70 | }
71 |
72 | UINT64
73 | DivU64x32 (
74 | IN UINT64 Dividend,
75 | IN UINTN Divisor,
76 | OUT UINTN *Remainder OPTIONAL
77 | )
78 | // divide 64bit by 32bit and get a 64bit result
79 | // N.B. only works for 31bit divisors!!
80 | {
81 | ASSERT (Divisor != 0);
82 |
83 | if (Remainder) {
84 | *Remainder = Dividend % Divisor;
85 | }
86 |
87 | return Dividend / Divisor;
88 | }
89 |
--------------------------------------------------------------------------------
/src/Bootp/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("BOOTP Server")]
9 | [assembly: AssemblyDescription("A simple BOOTP server to support and simplify UEFI application development")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Vurdalakov")]
12 | [assembly: AssemblyProduct("BOOTP Server")]
13 | [assembly: AssemblyCopyright("Copyright © 2016 Vurdalakov")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("b6dd317f-149a-4b7b-b61e-61adf70153d8")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.*")]
36 |
--------------------------------------------------------------------------------
/src/gnu-efi/gnuefi/elf_x86_64_efi.lds:
--------------------------------------------------------------------------------
1 | /* Same as elf_x86_64_fbsd_efi.lds, except for OUTPUT_FORMAT below - KEEP IN SYNC */
2 | OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
3 | OUTPUT_ARCH(i386:x86-64)
4 | ENTRY(_start)
5 | SECTIONS
6 | {
7 | . = 0;
8 | ImageBase = .;
9 | .hash : { *(.hash) } /* this MUST come first! */
10 | . = ALIGN(4096);
11 | .eh_frame :
12 | {
13 | *(.eh_frame)
14 | }
15 | . = ALIGN(4096);
16 | .text :
17 | {
18 | _text = .;
19 | *(.text)
20 | *(.text.*)
21 | *(.gnu.linkonce.t.*)
22 | . = ALIGN(16);
23 | }
24 | _etext = .;
25 | _text_size = . - _text;
26 | . = ALIGN(4096);
27 | .reloc :
28 | {
29 | *(.reloc)
30 | }
31 | . = ALIGN(4096);
32 | .data :
33 | {
34 | _data = .;
35 | *(.rodata*)
36 | *(.got.plt)
37 | *(.got)
38 | *(.data*)
39 | *(.sdata)
40 | /* the EFI loader doesn't seem to like a .bss section, so we stick
41 | it all into .data: */
42 | *(.sbss)
43 | *(.scommon)
44 | *(.dynbss)
45 | *(.bss)
46 | *(COMMON)
47 | *(.rel.local)
48 | }
49 | .note.gnu.build-id : { *(.note.gnu.build-id) }
50 |
51 | _edata = .;
52 | _data_size = . - _etext;
53 | . = ALIGN(4096);
54 | .dynamic : { *(.dynamic) }
55 | . = ALIGN(4096);
56 | .rela :
57 | {
58 | *(.rela.data*)
59 | *(.rela.got)
60 | *(.rela.stab)
61 | }
62 | . = ALIGN(4096);
63 | .dynsym : { *(.dynsym) }
64 | . = ALIGN(4096);
65 | .dynstr : { *(.dynstr) }
66 | . = ALIGN(4096);
67 | .ignored.reloc :
68 | {
69 | *(.rela.reloc)
70 | *(.eh_frame)
71 | *(.note.GNU-stack)
72 | }
73 | .comment 0 : { *(.comment) }
74 | }
75 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/makefile.hdr:
--------------------------------------------------------------------------------
1 |
2 | #
3 | # This is a machine generated file - DO NOT EDIT
4 | # Generated by genmake.exe
5 | # Generated from make.inf
6 | # Copyright (c) 1998 Intel Corporation
7 | #
8 |
9 | INC_DEPS = $(INC_DEPS) \
10 | $(SDK_INSTALL_DIR)\include\efi\efi.h \
11 | $(SDK_INSTALL_DIR)\include\efi\efiapi.h \
12 | $(SDK_INSTALL_DIR)\include\efi\eficon.h \
13 | $(SDK_INSTALL_DIR)\include\efi\efidebug.h \
14 | $(SDK_INSTALL_DIR)\include\efi\efidef.h \
15 | $(SDK_INSTALL_DIR)\include\efi\efidevp.h \
16 | $(SDK_INSTALL_DIR)\include\efi\efierr.h \
17 | $(SDK_INSTALL_DIR)\include\efi\efifs.h \
18 | $(SDK_INSTALL_DIR)\include\efi\efilib.h \
19 | $(SDK_INSTALL_DIR)\include\efi\efipart.h \
20 | $(SDK_INSTALL_DIR)\include\efi\efipciio.h \
21 | $(SDK_INSTALL_DIR)\include\efi\efiprot.h \
22 | $(SDK_INSTALL_DIR)\include\efi\efipxebc.h \
23 | $(SDK_INSTALL_DIR)\include\efi\efistdarg.h \
24 | $(SDK_INSTALL_DIR)\include\efi\efinet.h \
25 | $(SDK_INSTALL_DIR)\include\efi\efiip.h \
26 | $(SDK_INSTALL_DIR)\include\efi\efiudp.h \
27 | $(SDK_INSTALL_DIR)\include\efi\efitcp.h \
28 |
29 |
30 | !IF "$(PROCESSOR)" == "Ia32"
31 | INC_DEPS = $(INC_DEPS) \
32 | $(SDK_INSTALL_DIR)\include\efi\Ia32\efibind.h \
33 | $(SDK_INSTALL_DIR)\include\efi\Ia32\pe.h \
34 | $(SDK_INSTALL_DIR)\include\efi\Ia32\efilibplat.h \
35 |
36 |
37 | !ENDIF
38 |
39 |
40 | !IF "$(PROCESSOR)" == "Ia64"
41 | INC_DEPS = $(INC_DEPS) \
42 | $(SDK_INSTALL_DIR)\include\efi\Ia64\efibind.h \
43 | $(SDK_INSTALL_DIR)\include\efi\Ia64\pe.h \
44 | $(SDK_INSTALL_DIR)\include\efi\Ia64\efilibplat.h \
45 |
46 |
47 | !ENDIF
48 |
49 |
--------------------------------------------------------------------------------
/src/gnu-efi/README.efilib:
--------------------------------------------------------------------------------
1 |
2 | The files in the "lib" and "inc" subdirectories are using the EFI Application
3 | Toolkit distributed by Intel at http://developer.intel.com/technology/efi
4 |
5 | This code is covered by the following agreement:
6 |
7 | Copyright (c) 1998-2000 Intel Corporation
8 |
9 | Redistribution and use in source and binary forms, with or without modification, are permitted
10 | provided that the following conditions are met:
11 |
12 | Redistributions of source code must retain the above copyright notice, this list of conditions and
13 | the following disclaimer.
14 |
15 | Redistributions in binary form must reproduce the above copyright notice, this list of conditions
16 | and the following disclaimer in the documentation and/or other materials provided with the
17 | distribution.
18 |
19 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
20 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
21 | FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL BE
22 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 | POSSIBILITY OF SUCH DAMAGE. THE EFI SPECIFICATION AND ALL OTHER INFORMATION
29 | ON THIS WEB SITE ARE PROVIDED "AS IS" WITH NO WARRANTIES, AND ARE SUBJECT
30 | TO CHANGE WITHOUT NOTICE.
31 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/aarch64/setjmp.S:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.
3 | * This program and the accompanying materials are licensed and made
4 | available
5 | * under the terms and conditions of the BSD License which accompanies
6 | this
7 | * distribution. The full text of the license may be found at
8 | * http://opensource.org/licenses/bsd-license.php.
9 | *
10 | * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
11 | BASIS,
12 | * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
13 | * IMPLIED.
14 | */
15 | .text
16 | .p2align 3
17 |
18 | #define GPR_LAYOUT \
19 | REG_PAIR (x19, x20, 0); \
20 | REG_PAIR (x21, x22, 16); \
21 | REG_PAIR (x23, x24, 32); \
22 | REG_PAIR (x25, x26, 48); \
23 | REG_PAIR (x27, x28, 64); \
24 | REG_PAIR (x29, x30, 80); \
25 | REG_ONE (x16, 96)
26 |
27 | #define FPR_LAYOUT \
28 | REG_PAIR(d8, d9, 112); \
29 | REG_PAIR(d10, d11, 128); \
30 | REG_PAIR(d12, d13, 144); \
31 | REG_PAIR(d14, d15, 160);
32 |
33 | #define REG_PAIR(REG1, REG2, OFFS) stp REG1, REG2, [x0, OFFS]
34 | #define REG_ONE(REG1, OFFS) str REG1, [x0, OFFS]
35 |
36 | .globl setjmp
37 | .type setjmp, @function
38 | setjmp:
39 | mov x16, sp
40 | GPR_LAYOUT
41 | FPR_LAYOUT
42 | mov w0, #0
43 | ret
44 |
45 | #undef REG_PAIR
46 | #undef REG_ONE
47 |
48 | #define REG_PAIR(REG1, REG2, OFFS) ldp REG1, REG2, [x0, OFFS]
49 | #define REG_ONE(REG1, OFFS) ldr REG1, [x0, OFFS]
50 |
51 | .globl longjmp
52 | .type longjmp, @function
53 | longjmp:
54 | GPR_LAYOUT
55 | FPR_LAYOUT
56 | mov sp, x16
57 | cmp w1, #0
58 | mov w0, #1
59 | csel w0, w1, w0, ne
60 | br x30
61 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/efiui.h:
--------------------------------------------------------------------------------
1 | #ifndef _EFI_UI_H
2 | #define _EFI_UI_H
3 |
4 | /*++
5 |
6 | Copyright (c) 200 Intel Corporation
7 |
8 | Module Name:
9 |
10 | EfiUi.h
11 |
12 | Abstract:
13 | Protocol used to build User Interface (UI) stuff.
14 |
15 | This protocol is just data. It is a multi dimentional array.
16 | For each string there is an array of UI_STRING_ENTRY. Each string
17 | is for a different language translation of the same string. The list
18 | is terminated by a NULL UiString. There can be any number of
19 | UI_STRING_ENTRY arrays. A NULL array terminates the list. A NULL array
20 | entry contains all zeros.
21 |
22 | Thus the shortest possible EFI_UI_PROTOCOL has three UI_STRING_ENTRY.
23 | The String, it's NULL terminator, and the NULL terminator for the entire
24 | thing.
25 |
26 |
27 | Revision History
28 |
29 | --*/
30 |
31 | #define EFI_UI_INTERFACE_PROTOCOL_GUID \
32 | { 0x32dd7981, 0x2d27, 0x11d4, {0xbc, 0x8b, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} }
33 | #define EFI_UI_PROTOCOL EFI_UI_INTERFACE_PROTOCOL_GUID
34 |
35 |
36 | typedef enum {
37 | UiDeviceString,
38 | UiVendorString,
39 | UiMaxString
40 | } UI_STRING_TYPE;
41 |
42 | typedef struct {
43 | ISO_639_2 *LangCode;
44 | CHAR16 *UiString;
45 | } UI_STRING_ENTRY;
46 |
47 | #define EFI_UI_INTERFACE_PROTOCOL_VERSION 0x00010000
48 | #define EFI_UI_VERSION EFI_UI_INTERFACE_PROTOCOL_VERSION
49 |
50 | typedef struct _EFI_UI_INTERFACE_PROTOCOL {
51 | UINT32 Version;
52 | UI_STRING_ENTRY *Entry;
53 | } EFI_UI_INTERFACE_PROTOCOL;
54 |
55 | typedef struct _EFI_UI_INTERFACE_PROTOCOL _UI_INTERFACE;
56 | typedef EFI_UI_INTERFACE_PROTOCOL UI_INTERFACE;
57 |
58 | #endif
59 |
--------------------------------------------------------------------------------
/src/gnu-efi/gnuefi/elf_ia64_efi.lds:
--------------------------------------------------------------------------------
1 | OUTPUT_FORMAT("elf64-ia64-little")
2 | OUTPUT_ARCH(ia64)
3 | ENTRY(_start_plabel)
4 | SECTIONS
5 | {
6 | . = 0;
7 | ImageBase = .;
8 | .hash : { *(.hash) } /* this MUST come first! */
9 | . = ALIGN(4096);
10 | .text :
11 | {
12 | _text = .;
13 | *(.text)
14 | *(.text.*)
15 | *(.gnu.linkonce.t.*)
16 | . = ALIGN(16);
17 | }
18 | _etext = .;
19 | _text_size = . - _text;
20 | . = ALIGN(4096);
21 | __gp = ALIGN (8) + 0x200000;
22 | .sdata :
23 | {
24 | _data = .;
25 | *(.got.plt)
26 | *(.got)
27 | *(.srodata)
28 | *(.sdata)
29 | *(.sbss)
30 | *(.scommon)
31 | }
32 | . = ALIGN(4096);
33 | .data :
34 | {
35 | *(.rodata*)
36 | *(.ctors)
37 | *(.data*)
38 | *(.gnu.linkonce.d*)
39 | *(.plabel) /* data whose relocs we want to ignore */
40 | /* the EFI loader doesn't seem to like a .bss section, so we stick
41 | it all into .data: */
42 | *(.dynbss)
43 | *(.bss)
44 | *(COMMON)
45 | }
46 | .note.gnu.build-id : { *(.note.gnu.build-id) }
47 |
48 | . = ALIGN(4096);
49 | .dynamic : { *(.dynamic) }
50 | . = ALIGN(4096);
51 | .rela :
52 | {
53 | *(.rela.text)
54 | *(.rela.data*)
55 | *(.rela.sdata)
56 | *(.rela.got)
57 | *(.rela.gnu.linkonce.d*)
58 | *(.rela.stab)
59 | *(.rela.ctors)
60 | }
61 | _edata = .;
62 | _data_size = . - _etext;
63 | . = ALIGN(4096);
64 | .reloc : /* This is the PECOFF .reloc section! */
65 | {
66 | *(.reloc)
67 | }
68 | . = ALIGN(4096);
69 | .dynsym : { *(.dynsym) }
70 | . = ALIGN(4096);
71 | .dynstr : { *(.dynstr) }
72 | /DISCARD/ :
73 | {
74 | *(.rela.plabel)
75 | *(.rela.reloc)
76 | *(.IA_64.unwind*)
77 | *(.IA64.unwind*)
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/src/gnu-efi/gnuefi/elf_ia32_efi.lds:
--------------------------------------------------------------------------------
1 | OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
2 | OUTPUT_ARCH(i386)
3 | ENTRY(_start)
4 | SECTIONS
5 | {
6 | . = 0;
7 | ImageBase = .;
8 | .hash : { *(.hash) } /* this MUST come first! */
9 | . = ALIGN(4096);
10 | .text :
11 | {
12 | _text = .;
13 | *(.text)
14 | *(.text.*)
15 | *(.gnu.linkonce.t.*)
16 | . = ALIGN(16);
17 | }
18 | _etext = .;
19 | _text_size = . - _text;
20 | . = ALIGN(4096);
21 | .sdata :
22 | {
23 | _data = .;
24 | *(.got.plt)
25 | *(.got)
26 | *(.srodata)
27 | *(.sdata)
28 | *(.sbss)
29 | *(.scommon)
30 | }
31 | . = ALIGN(4096);
32 | .data :
33 | {
34 | *(.rodata*)
35 | *(.data)
36 | *(.data1)
37 | *(.data.*)
38 | *(.sdata)
39 | *(.got.plt)
40 | *(.got)
41 | /* the EFI loader doesn't seem to like a .bss section, so we stick
42 | it all into .data: */
43 | *(.sbss)
44 | *(.scommon)
45 | *(.dynbss)
46 | *(.bss)
47 | *(COMMON)
48 | }
49 | .note.gnu.build-id : { *(.note.gnu.build-id) }
50 |
51 | . = ALIGN(4096);
52 | .dynamic : { *(.dynamic) }
53 | . = ALIGN(4096);
54 | .rel :
55 | {
56 | *(.rel.data)
57 | *(.rel.data.*)
58 | *(.rel.got)
59 | *(.rel.stab)
60 | *(.data.rel.ro.local)
61 | *(.data.rel.local)
62 | *(.data.rel.ro)
63 | *(.data.rel*)
64 | }
65 | _edata = .;
66 | _data_size = . - _etext;
67 | . = ALIGN(4096);
68 | .reloc : /* This is the PECOFF .reloc section! */
69 | {
70 | *(.reloc)
71 | }
72 | . = ALIGN(4096);
73 | .dynsym : { *(.dynsym) }
74 | . = ALIGN(4096);
75 | .dynstr : { *(.dynstr) }
76 | . = ALIGN(4096);
77 | /DISCARD/ :
78 | {
79 | *(.rel.reloc)
80 | *(.eh_frame)
81 | *(.note.GNU-stack)
82 | }
83 | .comment 0 : { *(.comment) }
84 | }
85 |
--------------------------------------------------------------------------------
/src/gnu-efi/gnuefi/elf_ia32_fbsd_efi.lds:
--------------------------------------------------------------------------------
1 | OUTPUT_FORMAT("elf32-i386-freebsd", "elf32-i386-freebsd", "elf32-i386-freebsd")
2 | OUTPUT_ARCH(i386)
3 | ENTRY(_start)
4 | SECTIONS
5 | {
6 | . = 0;
7 | ImageBase = .;
8 | .hash : { *(.hash) } /* this MUST come first! */
9 | . = ALIGN(4096);
10 | .text :
11 | {
12 | _text = .;
13 | *(.text)
14 | *(.text.*)
15 | *(.gnu.linkonce.t.*)
16 | . = ALIGN(16);
17 | }
18 | _etext = .;
19 | _text_size = . - _text;
20 | . = ALIGN(4096);
21 | .sdata :
22 | {
23 | _data = .;
24 | *(.got.plt)
25 | *(.got)
26 | *(.srodata)
27 | *(.sdata)
28 | *(.sbss)
29 | *(.scommon)
30 | }
31 | . = ALIGN(4096);
32 | .data :
33 | {
34 | *(.rodata*)
35 | *(.data)
36 | *(.data1)
37 | *(.data.*)
38 | *(.sdata)
39 | *(.got.plt)
40 | *(.got)
41 | /* the EFI loader doesn't seem to like a .bss section, so we stick
42 | it all into .data: */
43 | *(.sbss)
44 | *(.scommon)
45 | *(.dynbss)
46 | *(.bss)
47 | *(COMMON)
48 | }
49 | .note.gnu.build-id : { *(.note.gnu.build-id) }
50 |
51 | . = ALIGN(4096);
52 | .dynamic : { *(.dynamic) }
53 | . = ALIGN(4096);
54 | .rel :
55 | {
56 | *(.rel.data)
57 | *(.rel.data.*)
58 | *(.rel.got)
59 | *(.rel.stab)
60 | *(.data.rel.ro.local)
61 | *(.data.rel.local)
62 | *(.data.rel.ro)
63 | *(.data.rel*)
64 | }
65 | _edata = .;
66 | _data_size = . - _etext;
67 | . = ALIGN(4096);
68 | .reloc : /* This is the PECOFF .reloc section! */
69 | {
70 | *(.reloc)
71 | }
72 | . = ALIGN(4096);
73 | .dynsym : { *(.dynsym) }
74 | . = ALIGN(4096);
75 | .dynstr : { *(.dynstr) }
76 | . = ALIGN(4096);
77 | /DISCARD/ :
78 | {
79 | *(.rel.reloc)
80 | *(.eh_frame)
81 | *(.note.GNU-stack)
82 | }
83 | .comment 0 : { *(.comment) }
84 | }
85 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/aarch64/math.c:
--------------------------------------------------------------------------------
1 | /*
2 | * Copright (C) 2014 Linaro Ltd.
3 | * Author: Ard Biesheuvel
4 | *
5 | * Redistribution and use in source and binary forms, with or without
6 | * modification, are permitted provided that the following conditions
7 | * are met:
8 | * 1. Redistributions of source code must retain the above copyright
9 | * notice and this list of conditions, without modification.
10 | * 2. The name of the author may not be used to endorse or promote products
11 | * derived from this software without specific prior written permission.
12 | *
13 | * Alternatively, this software may be distributed under the terms of the
14 | * GNU General Public License as published by the Free Software Foundation;
15 | * either version 2 of the License, or (at your option) any later version.
16 | */
17 |
18 | #include "lib.h"
19 |
20 | UINT64
21 | LShiftU64 (
22 | IN UINT64 Operand,
23 | IN UINTN Count
24 | )
25 | // Left shift 64bit by 32bit and get a 64bit result
26 | {
27 | return Operand << Count;
28 | }
29 |
30 | UINT64
31 | RShiftU64 (
32 | IN UINT64 Operand,
33 | IN UINTN Count
34 | )
35 | // Right shift 64bit by 32bit and get a 64bit result
36 | {
37 | return Operand >> Count;
38 | }
39 |
40 |
41 | UINT64
42 | MultU64x32 (
43 | IN UINT64 Multiplicand,
44 | IN UINTN Multiplier
45 | )
46 | // Multiple 64bit by 32bit and get a 64bit result
47 | {
48 | return Multiplicand * Multiplier;
49 | }
50 |
51 | UINT64
52 | DivU64x32 (
53 | IN UINT64 Dividend,
54 | IN UINTN Divisor,
55 | OUT UINTN *Remainder OPTIONAL
56 | )
57 | // divide 64bit by 32bit and get a 64bit result
58 | // N.B. only works for 31bit divisors!!
59 | {
60 | if (Remainder)
61 | *Remainder = Dividend % Divisor;
62 | return Dividend / Divisor;
63 | }
64 |
--------------------------------------------------------------------------------
/src/Bootp/Tftp/TftpPacketWriter.cs:
--------------------------------------------------------------------------------
1 | namespace dhcp
2 | {
3 | using System;
4 | using System.IO;
5 | using System.Net;
6 | using System.Text;
7 |
8 | public class TftpPacketWriter : IDisposable
9 | {
10 | public MemoryStream _memoryStream;
11 | public BinaryWriter _binaryWriter;
12 |
13 | public TftpPacketWriter(int capacity)
14 | {
15 | _memoryStream = new MemoryStream(capacity);
16 | _binaryWriter = new BinaryWriter(_memoryStream);
17 | }
18 | public TftpPacketWriter(Byte[] buffer)
19 | {
20 | _memoryStream = new MemoryStream(buffer, true);
21 | _binaryWriter = new BinaryWriter(_memoryStream);
22 | }
23 |
24 | public void Dispose()
25 | {
26 | _memoryStream.Flush();
27 |
28 | _binaryWriter.Dispose();
29 | _binaryWriter = null;
30 |
31 | _memoryStream.Dispose();
32 | _memoryStream = null;
33 | }
34 |
35 | public Byte[] ToArray()
36 | {
37 | return _memoryStream.ToArray();
38 | }
39 |
40 | public void WriteByte(Byte value)
41 | {
42 | _binaryWriter.Write(value);
43 | }
44 |
45 | public void WriteUInt16(UInt16 value)
46 | {
47 | WriteByte((Byte)((value >> 8) & 0xFF));
48 | WriteByte((Byte)(value & 0xFF));
49 | }
50 |
51 | public void WriteString(String value)
52 | {
53 | var bytes = Encoding.ASCII.GetBytes(value);
54 | WriteBytes(bytes);
55 |
56 | WriteByte(0);
57 | }
58 |
59 | public void WriteString(UInt32 value)
60 | {
61 | WriteString(value.ToString());
62 | }
63 |
64 | public void WriteBytes(Byte[] value)
65 | {
66 | _binaryWriter.Write(value);
67 | }
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/src/Bootp/Program.cs:
--------------------------------------------------------------------------------
1 | namespace dhcp
2 | {
3 | using System;
4 | using System.IO;
5 |
6 | class Program
7 | {
8 | static void Main(string[] args)
9 | {
10 | Console.WriteLine("BOOTP Server {0} | https://github.com/vurdalakov/bootp", Helpers.GetApplicationVersion());
11 | Console.WriteLine();
12 |
13 | if (args.Length != 1)
14 | {
15 | Console.WriteLine("Usage: bootp.exe ");
16 | return;
17 | }
18 |
19 | var fileName = args[0];
20 | fileName = '.' == fileName[0] ? Helpers.GetPathRelativeToExecutableDirectory(fileName) : fileName;
21 | var tftpRootDirectory = Path.GetDirectoryName(fileName);
22 | fileName = '/' + Path.GetFileName(fileName);
23 |
24 | var localIpAddresses = Helpers.GetLocalIpAddresses();
25 | if (0 == localIpAddresses.Length)
26 | {
27 | Console.WriteLine("No active network interface found.");
28 | return;
29 | }
30 |
31 | var localIpAddress = localIpAddresses[0];
32 |
33 | Console.WriteLine("Local IP address: {0}", localIpAddress);
34 | Console.WriteLine("Default gateway: {0}", Helpers.GetGatewayAddresses(localIpAddress)[0]);
35 | Console.WriteLine("TFTP root folder: {0}", tftpRootDirectory);
36 | Console.WriteLine("UEFI app file name: {0}", fileName);
37 | Console.WriteLine();
38 |
39 | Console.WriteLine("BOOTP server is starting.");
40 | var bootpServer = new BootpServer();
41 | bootpServer.Start(localIpAddress, tftpRootDirectory, fileName, fileName);
42 | Console.WriteLine("BOOTP server is running.");
43 |
44 | Console.WriteLine();
45 | Console.WriteLine("Press any key to exit...");
46 | Console.ReadKey();Console.Write("\r");
47 | }
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/x86_64/callwrap.c:
--------------------------------------------------------------------------------
1 | /*
2 | * Convert SysV calling convention to EFI x86_64 calling convention
3 | *
4 | * Copyright (C) 2007-2010 Intel Corp
5 | * Bibo Mao
6 | * Chandramouli Narayanan
7 | * Huang Ying
8 | *
9 | * All rights reserved.
10 | *
11 | * Redistribution and use in source and binary forms, with or without
12 | * modification, are permitted provided that the following conditions
13 | * are met:
14 | *
15 | * - Redistributions of source code must retain the above copyright
16 | * notice, this list of conditions and the following disclaimer.
17 | * - Redistributions in binary form must reproduce the above
18 | * copyright notice, this list of conditions and the following
19 | * disclaimer in the documentation and/or other materials
20 | * provided with the distribution.
21 | * - Neither the name of Hewlett-Packard Co. nor the names of its
22 | * contributors may be used to endorse or promote products derived
23 | * from this software without specific prior written permission.
24 | *
25 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
26 | * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
27 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
28 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
29 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
30 | * BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
31 | * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
34 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
35 | * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
36 | * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
37 | * SUCH DAMAGE.
38 | */
39 |
40 | /* uefi_call_wrapper() is a macro in efibind.h */
41 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/lib.h:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1998 Intel Corporation
4 |
5 | Module Name:
6 |
7 | lib.h
8 |
9 | Abstract:
10 |
11 | EFI library header files
12 |
13 |
14 |
15 | Revision History
16 |
17 | --*/
18 |
19 |
20 | #include "efi.h"
21 | #include "efilib.h"
22 | #include "efirtlib.h"
23 |
24 | //
25 | // Include non architectural protocols
26 | //
27 | #include "efivar.h"
28 | #include "legacyboot.h"
29 | #include "intload.h"
30 | #include "vgaclass.h"
31 | #include "eficonsplit.h"
32 | #include "adapterdebug.h"
33 | #include "intload.h"
34 |
35 | #include "efigpt.h"
36 | #include "libsmbios.h"
37 |
38 | //
39 | // Prototypes
40 | //
41 |
42 | VOID
43 | InitializeGuid (
44 | VOID
45 | );
46 |
47 | INTN EFIAPI
48 | LibStubStriCmp (
49 | IN EFI_UNICODE_COLLATION_INTERFACE *This,
50 | IN CHAR16 *S1,
51 | IN CHAR16 *S2
52 | );
53 |
54 | BOOLEAN EFIAPI
55 | LibStubMetaiMatch (
56 | IN EFI_UNICODE_COLLATION_INTERFACE *This,
57 | IN CHAR16 *String,
58 | IN CHAR16 *Pattern
59 | );
60 |
61 | VOID EFIAPI
62 | LibStubStrLwrUpr (
63 | IN EFI_UNICODE_COLLATION_INTERFACE *This,
64 | IN CHAR16 *Str
65 | );
66 |
67 | BOOLEAN
68 | LibMatchDevicePaths (
69 | IN EFI_DEVICE_PATH *Multi,
70 | IN EFI_DEVICE_PATH *Single
71 | );
72 |
73 | EFI_DEVICE_PATH *
74 | LibDuplicateDevicePathInstance (
75 | IN EFI_DEVICE_PATH *DevPath
76 | );
77 |
78 |
79 | //
80 | // Globals
81 | //
82 | extern BOOLEAN LibInitialized;
83 | extern BOOLEAN LibFwInstance;
84 | extern SIMPLE_TEXT_OUTPUT_INTERFACE *LibRuntimeDebugOut;
85 | extern EFI_UNICODE_COLLATION_INTERFACE *UnicodeInterface;
86 | extern EFI_UNICODE_COLLATION_INTERFACE LibStubUnicodeInterface;
87 | extern EFI_RAISE_TPL LibRuntimeRaiseTPL;
88 | extern EFI_RESTORE_TPL LibRuntimeRestoreTPL;
89 |
--------------------------------------------------------------------------------
/src/Bootp/Dhcp/DhcpPacketReader.cs:
--------------------------------------------------------------------------------
1 | namespace dhcp
2 | {
3 | using System;
4 | using System.IO;
5 | using System.Net;
6 | using System.Text;
7 |
8 | public class DhcpPacketReader : IDisposable
9 | {
10 | private MemoryStream _memoryStream;
11 | private BinaryReader _binaryReader;
12 |
13 | public DhcpPacketReader(Byte[] data)
14 | {
15 | _memoryStream = new MemoryStream(data, false);
16 | _binaryReader = new BinaryReader(_memoryStream);
17 | }
18 |
19 | public void Dispose()
20 | {
21 | _memoryStream.Flush();
22 |
23 | _binaryReader.Dispose();
24 | _binaryReader = null;
25 |
26 | _memoryStream.Dispose();
27 | _memoryStream = null;
28 | }
29 |
30 | public Byte ReadByte()
31 | {
32 | return _binaryReader.ReadByte();
33 | }
34 |
35 | public UInt16 ReadUInt16()
36 | {
37 | var number = _binaryReader.ReadUInt16();
38 | return (UInt16)IPAddress.NetworkToHostOrder((short)number);
39 | }
40 |
41 | public UInt32 ReadUInt32()
42 | {
43 | var number = _binaryReader.ReadUInt32();
44 | return (UInt32)IPAddress.NetworkToHostOrder((int)number);
45 | }
46 |
47 | public String ReadString(int fieldLength)
48 | {
49 | var bytes = ReadBytes(fieldLength);
50 |
51 | int length = 0;
52 | while ((length < fieldLength) && (bytes[length] > 0))
53 | {
54 | length++;
55 | }
56 |
57 | return 0 == length ? "" : Encoding.ASCII.GetString(bytes, 0, length);
58 | }
59 |
60 | public IPAddress ReadIpAddress()
61 | {
62 | var number = _binaryReader.ReadBytes(4);
63 | return new IPAddress(number);
64 | }
65 |
66 | public Byte[] ReadBytes(int count)
67 | {
68 | return _binaryReader.ReadBytes(count);
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/runtime/rtlock.c:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1998 Intel Corporation
4 |
5 | Module Name:
6 |
7 | lock.c
8 |
9 | Abstract:
10 |
11 | Implements FLOCK
12 |
13 |
14 |
15 | Revision History
16 |
17 | --*/
18 |
19 |
20 | #include "lib.h"
21 |
22 |
23 |
24 | #ifndef __GNUC__
25 | #pragma RUNTIME_CODE(RtAcquireLock)
26 | #endif
27 | VOID
28 | RtAcquireLock (
29 | IN FLOCK *Lock
30 | )
31 | /*++
32 |
33 | Routine Description:
34 |
35 | Raising to the task priority level of the mutual exclusion
36 | lock, and then acquires ownership of the lock.
37 |
38 | Arguments:
39 |
40 | Lock - The lock to acquire
41 |
42 | Returns:
43 |
44 | Lock owned
45 |
46 | --*/
47 | {
48 | if (BS) {
49 | if (BS->RaiseTPL != NULL) {
50 | Lock->OwnerTpl = uefi_call_wrapper(BS->RaiseTPL, 1, Lock->Tpl);
51 | }
52 | }
53 | else {
54 | if (LibRuntimeRaiseTPL != NULL) {
55 | Lock->OwnerTpl = LibRuntimeRaiseTPL(Lock->Tpl);
56 | }
57 | }
58 | Lock->Lock += 1;
59 | ASSERT (Lock->Lock == 1);
60 | }
61 |
62 |
63 | #ifndef __GNUC__
64 | #pragma RUNTIME_CODE(RtAcquireLock)
65 | #endif
66 | VOID
67 | RtReleaseLock (
68 | IN FLOCK *Lock
69 | )
70 | /*++
71 |
72 | Routine Description:
73 |
74 | Releases ownership of the mutual exclusion lock, and
75 | restores the previous task priority level.
76 |
77 | Arguments:
78 |
79 | Lock - The lock to release
80 |
81 | Returns:
82 |
83 | Lock unowned
84 |
85 | --*/
86 | {
87 | EFI_TPL Tpl;
88 |
89 | Tpl = Lock->OwnerTpl;
90 | ASSERT(Lock->Lock == 1);
91 | Lock->Lock -= 1;
92 | if (BS) {
93 | if (BS->RestoreTPL != NULL) {
94 | uefi_call_wrapper(BS->RestoreTPL, 1, Tpl);
95 | }
96 | }
97 | else {
98 | if (LibRuntimeRestoreTPL != NULL) {
99 | LibRuntimeRestoreTPL(Tpl);
100 | }
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/lock.c:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1998 Intel Corporation
4 |
5 | Module Name:
6 |
7 | lock.c
8 |
9 | Abstract:
10 |
11 | Implements FLOCK
12 |
13 |
14 |
15 | Revision History
16 |
17 | --*/
18 |
19 |
20 | #include "lib.h"
21 |
22 |
23 | VOID
24 | InitializeLock (
25 | IN OUT FLOCK *Lock,
26 | IN EFI_TPL Priority
27 | )
28 | /*++
29 |
30 | Routine Description:
31 |
32 | Initialize a basic mutual exclusion lock. Each lock
33 | provides mutual exclusion access at it's task priority
34 | level. Since there is no-premption (at any TPL) or
35 | multiprocessor support, acquiring the lock only consists
36 | of raising to the locks TPL.
37 |
38 | Note on a debug build the lock is acquired and released
39 | to help ensure proper usage.
40 |
41 | Arguments:
42 |
43 | Lock - The FLOCK structure to initialize
44 |
45 | Priority - The task priority level of the lock
46 |
47 |
48 | Returns:
49 |
50 | An initialized F Lock structure.
51 |
52 | --*/
53 | {
54 | Lock->Tpl = Priority;
55 | Lock->OwnerTpl = 0;
56 | Lock->Lock = 0;
57 | }
58 |
59 |
60 | VOID
61 | AcquireLock (
62 | IN FLOCK *Lock
63 | )
64 | /*++
65 |
66 | Routine Description:
67 |
68 | Raising to the task priority level of the mutual exclusion
69 | lock, and then acquires ownership of the lock.
70 |
71 | Arguments:
72 |
73 | Lock - The lock to acquire
74 |
75 | Returns:
76 |
77 | Lock owned
78 |
79 | --*/
80 | {
81 | RtAcquireLock (Lock);
82 | }
83 |
84 |
85 | VOID
86 | ReleaseLock (
87 | IN FLOCK *Lock
88 | )
89 | /*++
90 |
91 | Routine Description:
92 |
93 | Releases ownership of the mutual exclusion lock, and
94 | restores the previous task priority level.
95 |
96 | Arguments:
97 |
98 | Lock - The lock to release
99 |
100 | Returns:
101 |
102 | Lock unowned
103 |
104 | --*/
105 | {
106 | RtReleaseLock (Lock);
107 | }
108 |
--------------------------------------------------------------------------------
/src/Bootp/Dhcp/DhcpPacketWriter.cs:
--------------------------------------------------------------------------------
1 | namespace dhcp
2 | {
3 | using System;
4 | using System.IO;
5 | using System.Net;
6 | using System.Text;
7 |
8 | public class DhcpPacketWriter : IDisposable
9 | {
10 | public MemoryStream _memoryStream;
11 | public BinaryWriter _binaryWriter;
12 |
13 | public DhcpPacketWriter()
14 | {
15 | _memoryStream = new MemoryStream(1024);
16 | _binaryWriter = new BinaryWriter(_memoryStream);
17 | }
18 |
19 | public void Dispose()
20 | {
21 | _memoryStream.Flush();
22 |
23 | _binaryWriter.Dispose();
24 | _binaryWriter = null;
25 |
26 | _memoryStream.Dispose();
27 | _memoryStream = null;
28 | }
29 |
30 | public Byte[] ToArray()
31 | {
32 | return _memoryStream.ToArray();
33 | }
34 |
35 | public void WriteByte(Byte value)
36 | {
37 | _binaryWriter.Write(value);
38 | }
39 |
40 | public void WriteUInt16(UInt16 value)
41 | {
42 | value = (UInt16)IPAddress.HostToNetworkOrder((short)value);
43 | _binaryWriter.Write(value);
44 | }
45 |
46 | public void WriteUInt32(UInt32 value)
47 | {
48 | value = (UInt32)IPAddress.HostToNetworkOrder((int)value);
49 | _binaryWriter.Write(value);
50 | }
51 |
52 | public void WriteString(String value, int fieldLength)
53 | {
54 | var bytes = Encoding.ASCII.GetBytes(value);
55 | var length = Math.Min(bytes.Length, fieldLength - 1);
56 | _binaryWriter.Write(bytes, 0, length);
57 |
58 | bytes = new Byte[fieldLength - length];
59 | WriteBytes(bytes);
60 | }
61 |
62 | public void WriteIpAddress(IPAddress value)
63 | {
64 | var bytes = value.GetAddressBytes();
65 | WriteBytes(bytes);
66 | }
67 |
68 | public void WriteBytes(Byte[] value)
69 | {
70 | _binaryWriter.Write(value);
71 | }
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/efigpt.h:
--------------------------------------------------------------------------------
1 | #ifndef _EFI_GPT_H
2 | #define _EFI_GPT_H
3 | /*++
4 |
5 | Copyright (c) 1998 Intel Corporation
6 |
7 | Module Name:
8 |
9 | EfiGpt.h
10 |
11 | Abstract:
12 | Include file for EFI partitioning scheme
13 |
14 |
15 |
16 | Revision History
17 |
18 | --*/
19 |
20 | #define PRIMARY_PART_HEADER_LBA 1
21 |
22 | typedef struct {
23 | EFI_TABLE_HEADER Header;
24 | EFI_LBA MyLBA;
25 | EFI_LBA AlternateLBA;
26 | EFI_LBA FirstUsableLBA;
27 | EFI_LBA LastUsableLBA;
28 | EFI_GUID DiskGUID;
29 | EFI_LBA PartitionEntryLBA;
30 | UINT32 NumberOfPartitionEntries;
31 | UINT32 SizeOfPartitionEntry;
32 | UINT32 PartitionEntryArrayCRC32;
33 | } EFI_PARTITION_TABLE_HEADER;
34 |
35 | #define EFI_PTAB_HEADER_ID "EFI PART"
36 |
37 | typedef struct {
38 | EFI_GUID PartitionTypeGUID;
39 | EFI_GUID UniquePartitionGUID;
40 | EFI_LBA StartingLBA;
41 | EFI_LBA EndingLBA;
42 | UINT64 Attributes;
43 | CHAR16 PartitionName[36];
44 | } EFI_PARTITION_ENTRY;
45 |
46 | //
47 | // EFI Partition Attributes
48 | //
49 | #define EFI_PART_USED_BY_EFI 0x0000000000000001
50 | #define EFI_PART_REQUIRED_TO_FUNCTION 0x0000000000000002
51 | #define EFI_PART_USED_BY_OS 0x0000000000000004
52 | #define EFI_PART_REQUIRED_BY_OS 0x0000000000000008
53 | #define EFI_PART_BACKUP_REQUIRED 0x0000000000000010
54 | #define EFI_PART_USER_DATA 0x0000000000000020
55 | #define EFI_PART_CRITICAL_USER_DATA 0x0000000000000040
56 | #define EFI_PART_REDUNDANT_PARTITION 0x0000000000000080
57 |
58 | #define EFI_PART_TYPE_UNUSED_GUID \
59 | { 0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} }
60 |
61 | #define EFI_PART_TYPE_EFI_SYSTEM_PART_GUID \
62 | { 0xc12a7328, 0xf81f, 0x11d2, {0xba, 0x4b, 0x00, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b} }
63 |
64 | #define EFI_PART_TYPE_LEGACY_MBR_GUID \
65 | { 0x024dee41, 0x33e7, 0x11d3, {0x9d, 0x69, 0x00, 0x08, 0xc7, 0x81, 0xf3, 0x9f} }
66 |
67 | #endif
68 |
69 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/efishellparm.h:
--------------------------------------------------------------------------------
1 | /** @file
2 | EFI_SHELL_PARAMETERS_PROTOCOL as defined in the UEFI Shell 2.0 specification.
3 |
4 | Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
5 | This program and the accompanying materials
6 | are licensed and made available under the terms and conditions of the BSD License
7 | which accompanies this distribution. The full text of the license may be found at
8 | http://opensource.org/licenses/bsd-license.php
9 |
10 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 |
13 | **/
14 | /*
15 | * This is based on ShellPkg/Include/Protocol/EfiShellParameters.h from EDK II.
16 | */
17 |
18 | #ifndef __EFI_SHELL_PARAMETERS_PROTOCOL__
19 | #define __EFI_SHELL_PARAMETERS_PROTOCOL__
20 |
21 |
22 | // EDK2's ShellBase.h
23 | typedef VOID *SHELL_FILE_HANDLE;
24 |
25 | #define EFI_SHELL_PARAMETERS_PROTOCOL_GUID \
26 | { \
27 | 0x752f3136, 0x4e16, 0x4fdc, { 0xa2, 0x2a, 0xe5, 0xf4, 0x68, 0x12, 0xf4, 0xca } \
28 | }
29 |
30 | typedef struct _EFI_SHELL_PARAMETERS_PROTOCOL {
31 | ///
32 | /// Points to an Argc-element array of points to NULL-terminated strings containing
33 | /// the command-line parameters. The first entry in the array is always the full file
34 | /// path of the executable. Any quotation marks that were used to preserve
35 | /// whitespace have been removed.
36 | ///
37 | CHAR16 **Argv;
38 |
39 | ///
40 | /// The number of elements in the Argv array.
41 | ///
42 | UINTN Argc;
43 |
44 | ///
45 | /// The file handle for the standard input for this executable. This may be different
46 | /// from the ConInHandle in EFI_SYSTEM_TABLE.
47 | ///
48 | SHELL_FILE_HANDLE StdIn;
49 |
50 | ///
51 | /// The file handle for the standard output for this executable. This may be different
52 | /// from the ConOutHandle in EFI_SYSTEM_TABLE.
53 | ///
54 | SHELL_FILE_HANDLE StdOut;
55 |
56 | ///
57 | /// The file handle for the standard error output for this executable. This may be
58 | /// different from the StdErrHandle in EFI_SYSTEM_TABLE.
59 | ///
60 | SHELL_FILE_HANDLE StdErr;
61 | } EFI_SHELL_PARAMETERS_PROTOCOL;
62 |
63 | #endif
64 |
--------------------------------------------------------------------------------
/src/gnu-efi/apps/drv0_use.c:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2013 David Decotigny
3 | *
4 | * See drv0.c for an example session.
5 | */
6 |
7 | #include
8 | #include
9 | #include "drv0.h"
10 |
11 |
12 | static EFI_GUID GnuEfiAppsDrv0ProtocolGuid
13 | = GNU_EFI_APPS_DRV0_PROTOCOL_GUID;
14 |
15 |
16 | static
17 | EFI_STATUS
18 | PlayWithGnuEfiAppsDrv0Protocol(IN EFI_HANDLE DrvHandle) {
19 | EFI_STATUS Status;
20 | GNU_EFI_APPS_DRV0_PROTOCOL *drv = NULL;
21 | UINTN NumberOfHello = 0;
22 |
23 | Status = uefi_call_wrapper(BS->OpenProtocol, 6,
24 | DrvHandle,
25 | &GnuEfiAppsDrv0ProtocolGuid,
26 | NULL,
27 | DrvHandle,
28 | NULL,
29 | EFI_OPEN_PROTOCOL_GET_PROTOCOL);
30 | if (EFI_ERROR(Status)) {
31 | Print(L"Cannot open proto: %d\n", Status);
32 | return Status;
33 | }
34 |
35 | Status = uefi_call_wrapper(drv->SayHello, 2, drv, L"Sample UEFI Driver");
36 | if (EFI_ERROR(Status)) {
37 | Print(L"Cannot call SayHello: %d\n", Status);
38 | }
39 |
40 | Status = uefi_call_wrapper(drv->GetNumberOfHello, 2, drv, &NumberOfHello);
41 | if (EFI_ERROR(Status)) {
42 | Print(L"Cannot call GetNumberOfHello: %d\n", Status);
43 | } else {
44 | Print(L"Hello was called %d time(s).\n", NumberOfHello);
45 | }
46 |
47 | return EFI_SUCCESS;
48 | }
49 |
50 |
51 | EFI_STATUS
52 | efi_main (EFI_HANDLE Image, EFI_SYSTEM_TABLE *SysTab)
53 | {
54 | EFI_STATUS Status;
55 | EFI_HANDLE *Handles = NULL;
56 | UINTN i, NoHandles = 0;
57 |
58 | InitializeLib(Image, SysTab);
59 |
60 | Status = LibLocateHandle(ByProtocol, &GnuEfiAppsDrv0ProtocolGuid,
61 | NULL, &NoHandles, &Handles);
62 | if (EFI_ERROR(Status)) {
63 | Print(L"Error looking up handles for proto: %d\n", Status);
64 | return Status;
65 | }
66 |
67 | for (i = 0 ; i < NoHandles ; ++i)
68 | {
69 | Print(L"Playing with driver instance %d...\n", i);
70 | Status = PlayWithGnuEfiAppsDrv0Protocol(Handles[i]);
71 | if (EFI_ERROR(Status))
72 | Print(L"Error playing with instance %d, skipping\n", i);
73 | }
74 |
75 | if (Handles)
76 | FreePool(Handles);
77 |
78 | return EFI_SUCCESS;
79 | }
80 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/protocol/vgaclass.h:
--------------------------------------------------------------------------------
1 | #ifndef _VGA_CLASS_H
2 | #define _VGA_CLASS_H
3 |
4 | /*++
5 |
6 | Copyright (c) 1999 Intel Corporation
7 |
8 | Module Name:
9 |
10 | VgaClass.h
11 |
12 | Abstract:
13 |
14 | Vga Mini port binding to Vga Class protocol
15 |
16 |
17 |
18 | Revision History
19 |
20 | --*/
21 |
22 | //
23 | // VGA Device Structure
24 | //
25 |
26 | // {0E3D6310-6FE4-11d3-BB81-0080C73C8881}
27 | #define VGA_CLASS_DRIVER_PROTOCOL \
28 | { 0xe3d6310, 0x6fe4, 0x11d3, {0xbb, 0x81, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} }
29 |
30 | typedef
31 | EFI_STATUS
32 | (* INIT_VGA_CARD) (
33 | IN UINTN VgaMode,
34 | IN VOID *Context
35 | );
36 |
37 | typedef struct {
38 | UINTN MaxColumns;
39 | UINTN MaxRows;
40 | } MAX_CONSOLE_GEOMETRY;
41 |
42 | #define VGA_CON_OUT_DEV_SIGNATURE EFI_SIGNATURE_32('c','v','g','a')
43 | typedef struct {
44 | UINTN Signature;
45 |
46 | EFI_HANDLE Handle;
47 | SIMPLE_TEXT_OUTPUT_INTERFACE ConOut;
48 | SIMPLE_TEXT_OUTPUT_MODE ConOutMode;
49 | EFI_DEVICE_PATH *DevicePath;
50 |
51 | UINT8 *Buffer;
52 | EFI_DEVICE_IO_INTERFACE *DeviceIo;
53 |
54 | //
55 | // Video Card Context
56 | //
57 | INIT_VGA_CARD InitVgaCard;
58 | VOID *VgaCardContext;
59 | MAX_CONSOLE_GEOMETRY *Geometry;
60 | //
61 | // Video buffer normally 0xb8000
62 | //
63 | UINT64 VideoBuffer;
64 |
65 | //
66 | // Clear Screen & Default Attribute
67 | //
68 | UINT32 Attribute;
69 |
70 | //
71 | // -1 means search for active VGA device
72 | //
73 | EFI_PCI_ADDRESS_UNION Pci;
74 | } VGA_CON_OUT_DEV;
75 |
76 | #define VGA_CON_OUT_DEV_FROM_THIS(a) CR(a, VGA_CON_OUT_DEV, ConOut, VGA_CON_OUT_DEV_SIGNATURE)
77 |
78 | //
79 | // Vga Class Driver Protocol.
80 | // GUID defined in EFI Lib
81 | //
82 |
83 | typedef
84 | EFI_STATUS
85 | (EFIAPI *INSTALL_VGA_DRIVER) (
86 | IN VGA_CON_OUT_DEV *ConOutDev
87 | );
88 |
89 | typedef struct {
90 | UINT32 Version;
91 | INSTALL_VGA_DRIVER InstallGenericVgaDriver;
92 | } INSTALL_VGA_DRIVER_INTERFACE;
93 |
94 | #endif
95 |
96 |
--------------------------------------------------------------------------------
/src/gnu-efi/apps/debughook.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | EFI_STATUS
5 | GetVariableAttr(CHAR16 *var, UINT8 **data, UINTN *len, EFI_GUID owner,
6 | UINT32 *attributes)
7 | {
8 | EFI_STATUS efi_status;
9 |
10 | *len = 0;
11 |
12 | efi_status = uefi_call_wrapper(RT->GetVariable, 5, var, &owner,
13 | NULL, len, NULL);
14 | if (efi_status != EFI_BUFFER_TOO_SMALL)
15 | return efi_status;
16 |
17 | *data = AllocateZeroPool(*len);
18 | if (!*data)
19 | return EFI_OUT_OF_RESOURCES;
20 |
21 | efi_status = uefi_call_wrapper(RT->GetVariable, 5, var, &owner,
22 | attributes, len, *data);
23 |
24 | if (efi_status != EFI_SUCCESS) {
25 | FreePool(*data);
26 | *data = NULL;
27 | }
28 | return efi_status;
29 | }
30 |
31 | EFI_STATUS
32 | GetVariable(CHAR16 *var, UINT8 **data, UINTN *len, EFI_GUID owner)
33 | {
34 | return GetVariableAttr(var, data, len, owner, NULL);
35 | }
36 |
37 | EFI_GUID DUMMY_GUID =
38 | {0x55aad538, 0x8f82, 0x4e2a, {0xa4,0xf0,0xbe, 0x59, 0x13, 0xb6, 0x5f, 0x1e}};
39 |
40 | static void
41 | __attribute__((__optimize__("0")))
42 | DebugHook(void)
43 | {
44 | EFI_GUID guid = DUMMY_GUID;
45 | UINT8 *data = NULL;
46 | UINTN dataSize = 0;
47 | EFI_STATUS efi_status;
48 | register volatile UINTN x = 0;
49 | extern char _text, _data;
50 |
51 | if (x)
52 | return;
53 |
54 | efi_status = GetVariable(L"DUMMY_DEBUG", &data, &dataSize, guid);
55 | if (EFI_ERROR(efi_status)) {
56 | return;
57 | }
58 |
59 | Print(L"add-symbol-file /usr/lib/debug/boot/efi/debughook.debug "
60 | L"0x%08x -s .data 0x%08x\n", &_text, &_data);
61 |
62 | Print(L"Pausing for debugger attachment.\n");
63 | Print(L"To disable this, remove the EFI variable DUMMY_DEBUG-%g .\n",
64 | &guid);
65 | x = 1;
66 | while (x++) {
67 | /* Make this so it can't /totally/ DoS us. */
68 | #if defined(__x86_64__) || defined(__i386__) || defined(__i686__)
69 | if (x > 4294967294)
70 | break;
71 | __asm__ __volatile__("pause");
72 | #elif defined(__aarch64__)
73 | if (x > 1000)
74 | break;
75 | __asm__ __volatile__("wfi");
76 | #else
77 | if (x > 12000)
78 | break;
79 | uefi_call_wrapper(BS->Stall, 1, 5000);
80 | #endif
81 | }
82 | x = 1;
83 | }
84 |
85 |
86 | EFI_STATUS
87 | efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
88 | {
89 | InitializeLib(image, systab);
90 | DebugHook();
91 | return EFI_SUCCESS;
92 | }
93 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/efierr.h:
--------------------------------------------------------------------------------
1 | #ifndef _EFI_ERR_H
2 | #define _EFI_ERR_H
3 |
4 | /*++
5 |
6 | Copyright (c) 1998 Intel Corporation
7 |
8 | Module Name:
9 |
10 | efierr.h
11 |
12 | Abstract:
13 |
14 | EFI error codes
15 |
16 |
17 |
18 |
19 | Revision History
20 |
21 | --*/
22 |
23 |
24 | #define EFIWARN(a) (a)
25 | #define EFI_ERROR(a) (((INTN) a) < 0)
26 |
27 |
28 | #define EFI_SUCCESS 0
29 | #define EFI_LOAD_ERROR EFIERR(1)
30 | #define EFI_INVALID_PARAMETER EFIERR(2)
31 | #define EFI_UNSUPPORTED EFIERR(3)
32 | #define EFI_BAD_BUFFER_SIZE EFIERR(4)
33 | #define EFI_BUFFER_TOO_SMALL EFIERR(5)
34 | #define EFI_NOT_READY EFIERR(6)
35 | #define EFI_DEVICE_ERROR EFIERR(7)
36 | #define EFI_WRITE_PROTECTED EFIERR(8)
37 | #define EFI_OUT_OF_RESOURCES EFIERR(9)
38 | #define EFI_VOLUME_CORRUPTED EFIERR(10)
39 | #define EFI_VOLUME_FULL EFIERR(11)
40 | #define EFI_NO_MEDIA EFIERR(12)
41 | #define EFI_MEDIA_CHANGED EFIERR(13)
42 | #define EFI_NOT_FOUND EFIERR(14)
43 | #define EFI_ACCESS_DENIED EFIERR(15)
44 | #define EFI_NO_RESPONSE EFIERR(16)
45 | #define EFI_NO_MAPPING EFIERR(17)
46 | #define EFI_TIMEOUT EFIERR(18)
47 | #define EFI_NOT_STARTED EFIERR(19)
48 | #define EFI_ALREADY_STARTED EFIERR(20)
49 | #define EFI_ABORTED EFIERR(21)
50 | #define EFI_ICMP_ERROR EFIERR(22)
51 | #define EFI_TFTP_ERROR EFIERR(23)
52 | #define EFI_PROTOCOL_ERROR EFIERR(24)
53 | #define EFI_INCOMPATIBLE_VERSION EFIERR(25)
54 | #define EFI_SECURITY_VIOLATION EFIERR(26)
55 | #define EFI_CRC_ERROR EFIERR(27)
56 | #define EFI_END_OF_MEDIA EFIERR(28)
57 | #define EFI_END_OF_FILE EFIERR(31)
58 | #define EFI_INVALID_LANGUAGE EFIERR(32)
59 | #define EFI_COMPROMISED_DATA EFIERR(33)
60 |
61 | #define EFI_WARN_UNKOWN_GLYPH EFIWARN(1)
62 | #define EFI_WARN_DELETE_FAILURE EFIWARN(2)
63 | #define EFI_WARN_WRITE_FAILURE EFIWARN(3)
64 | #define EFI_WARN_BUFFER_TOO_SMALL EFIWARN(4)
65 |
66 | #endif
67 |
68 |
--------------------------------------------------------------------------------
/src/gnu-efi/Make.rules:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright (C) 1999-2007 Hewlett-Packard Co.
3 | # Contributed by David Mosberger
4 | # Contributed by Stephane Eranian
5 | #
6 | # All rights reserved.
7 | #
8 | # Redistribution and use in source and binary forms, with or without
9 | # modification, are permitted provided that the following conditions
10 | # are met:
11 | #
12 | # * Redistributions of source code must retain the above copyright
13 | # notice, this list of conditions and the following disclaimer.
14 | # * Redistributions in binary form must reproduce the above
15 | # copyright notice, this list of conditions and the following
16 | # disclaimer in the documentation and/or other materials
17 | # provided with the distribution.
18 | # * Neither the name of Hewlett-Packard Co. nor the names of its
19 | # contributors may be used to endorse or promote products derived
20 | # from this software without specific prior written permission.
21 | #
22 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
23 | # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
24 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26 | # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
27 | # BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
28 | # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30 | # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31 | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
32 | # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
33 | # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 | # SUCH DAMAGE.
35 | #
36 |
37 | %.efi: %.so
38 | $(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \
39 | -j .rela -j .rel.* -j .rela.* -j .rel* -j .rela* \
40 | -j .reloc $(FORMAT) $*.so $@
41 |
42 | %.efi.debug: %.so
43 | $(OBJCOPY) -j .debug_info -j .debug_abbrev -j .debug_aranges \
44 | -j .debug_line -j .debug_str -j .debug_ranges \
45 | -j .note.gnu.build-id \
46 | $(FORMAT) $*.so $@
47 |
48 | %.so: %.o
49 | $(LD) $(LDFLAGS) $^ -o $@ $(LOADLIBES)
50 |
51 | %.o: %.c
52 | $(CC) $(INCDIR) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
53 |
54 | %.S: %.c
55 | $(CC) $(INCDIR) $(CFLAGS) $(CPPFLAGS) -S $< -o $@
56 |
57 | %.E: %.c
58 | $(CC) $(INCDIR) $(CFLAGS) $(CPPFLAGS) -E $< -o $@
59 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/efirtlib.h:
--------------------------------------------------------------------------------
1 | #ifndef _EFI_RT_LIB_INCLUDE_
2 | #define _EFI_RT_LIB_INCLUDE_
3 | /*++
4 |
5 | Copyright (c) 1998 Intel Corporation
6 |
7 | Module Name:
8 |
9 | efilib.h
10 |
11 | Abstract:
12 |
13 | EFI Runtime library functions
14 |
15 |
16 |
17 | Revision History
18 |
19 | --*/
20 |
21 | #include "efidebug.h"
22 | #include "efipart.h"
23 | #include "efilibplat.h"
24 |
25 |
26 | VOID
27 | RUNTIMEFUNCTION
28 | RtZeroMem (
29 | IN VOID *Buffer,
30 | IN UINTN Size
31 | );
32 |
33 | VOID
34 | RUNTIMEFUNCTION
35 | RtSetMem (
36 | IN VOID *Buffer,
37 | IN UINTN Size,
38 | IN UINT8 Value
39 | );
40 |
41 | VOID
42 | RUNTIMEFUNCTION
43 | RtCopyMem (
44 | IN VOID *Dest,
45 | IN CONST VOID *Src,
46 | IN UINTN len
47 | );
48 |
49 | INTN
50 | RUNTIMEFUNCTION
51 | RtCompareMem (
52 | IN CONST VOID *Dest,
53 | IN CONST VOID *Src,
54 | IN UINTN len
55 | );
56 |
57 | INTN
58 | RUNTIMEFUNCTION
59 | RtStrCmp (
60 | IN CONST CHAR16 *s1,
61 | IN CONST CHAR16 *s2
62 | );
63 |
64 |
65 | VOID
66 | RUNTIMEFUNCTION
67 | RtStrCpy (
68 | IN CHAR16 *Dest,
69 | IN CONST CHAR16 *Src
70 | );
71 |
72 | VOID
73 | RUNTIMEFUNCTION
74 | RtStrCat (
75 | IN CHAR16 *Dest,
76 | IN CONST CHAR16 *Src
77 | );
78 |
79 | UINTN
80 | RUNTIMEFUNCTION
81 | RtStrLen (
82 | IN CONST CHAR16 *s1
83 | );
84 |
85 | UINTN
86 | RUNTIMEFUNCTION
87 | RtStrSize (
88 | IN CONST CHAR16 *s1
89 | );
90 |
91 | INTN
92 | RUNTIMEFUNCTION
93 | RtCompareGuid (
94 | IN EFI_GUID *Guid1,
95 | IN EFI_GUID *Guid2
96 | );
97 |
98 | UINT8
99 | RUNTIMEFUNCTION
100 | RtDecimaltoBCD(
101 | IN UINT8 BcdValue
102 | );
103 |
104 | UINT8
105 | RUNTIMEFUNCTION
106 | RtBCDtoDecimal(
107 | IN UINT8 BcdValue
108 | );
109 |
110 | //
111 | // Virtual mapping transition support. (Only used during
112 | // the virtual address change transisition)
113 | //
114 |
115 | VOID
116 | RUNTIMEFUNCTION
117 | RtLibEnableVirtualMappings (
118 | VOID
119 | );
120 |
121 | VOID
122 | RUNTIMEFUNCTION
123 | RtConvertList (
124 | IN UINTN DebugDisposition,
125 | IN OUT LIST_ENTRY *ListHead
126 | );
127 |
128 | VOID
129 | RUNTIMEFUNCTION
130 | RtAcquireLock (
131 | IN FLOCK *Lock
132 | );
133 |
134 | VOID
135 | RUNTIMEFUNCTION
136 | RtReleaseLock (
137 | IN FLOCK *Lock
138 | );
139 |
140 |
141 | #endif
142 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/console.c:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1998 Intel Corporation
4 |
5 | Module Name:
6 |
7 | console.c
8 |
9 | Abstract:
10 |
11 |
12 |
13 |
14 | Revision History
15 |
16 | --*/
17 |
18 | #include "lib.h"
19 |
20 |
21 |
22 | VOID
23 | Output (
24 | IN CHAR16 *Str
25 | )
26 | // Write a string to the console at the current cursor location
27 | {
28 | uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, Str);
29 | }
30 |
31 |
32 | VOID
33 | Input (
34 | IN CHAR16 *Prompt OPTIONAL,
35 | OUT CHAR16 *InStr,
36 | IN UINTN StrLen
37 | )
38 | // Input a string at the current cursor location, for StrLen
39 | {
40 | IInput (
41 | ST->ConOut,
42 | ST->ConIn,
43 | Prompt,
44 | InStr,
45 | StrLen
46 | );
47 | }
48 |
49 | VOID
50 | IInput (
51 | IN SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut,
52 | IN SIMPLE_INPUT_INTERFACE *ConIn,
53 | IN CHAR16 *Prompt OPTIONAL,
54 | OUT CHAR16 *InStr,
55 | IN UINTN StrLen
56 | )
57 | // Input a string at the current cursor location, for StrLen
58 | {
59 | EFI_INPUT_KEY Key;
60 | EFI_STATUS Status;
61 | UINTN Len;
62 |
63 | if (Prompt) {
64 | ConOut->OutputString (ConOut, Prompt);
65 | }
66 |
67 | Len = 0;
68 | for (; ;) {
69 | WaitForSingleEvent (ConIn->WaitForKey, 0);
70 |
71 | Status = uefi_call_wrapper(ConIn->ReadKeyStroke, 2, ConIn, &Key);
72 | if (EFI_ERROR(Status)) {
73 | DEBUG((D_ERROR, "Input: error return from ReadKey %x\n", Status));
74 | break;
75 | }
76 |
77 | if (Key.UnicodeChar == '\n' ||
78 | Key.UnicodeChar == '\r') {
79 | break;
80 | }
81 |
82 | if (Key.UnicodeChar == '\b') {
83 | if (Len) {
84 | uefi_call_wrapper(ConOut->OutputString, 2, ConOut, L"\b \b");
85 | Len -= 1;
86 | }
87 | continue;
88 | }
89 |
90 | if (Key.UnicodeChar >= ' ') {
91 | if (Len < StrLen-1) {
92 | InStr[Len] = Key.UnicodeChar;
93 |
94 | InStr[Len+1] = 0;
95 | uefi_call_wrapper(ConOut->OutputString, 2, ConOut, &InStr[Len]);
96 |
97 | Len += 1;
98 | }
99 | continue;
100 | }
101 | }
102 |
103 | InStr[Len] = 0;
104 | }
105 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/runtime/rtstr.c:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1998 Intel Corporation
4 |
5 | Module Name:
6 |
7 | str.c
8 |
9 | Abstract:
10 |
11 | String runtime functions
12 |
13 |
14 | Revision History
15 |
16 | --*/
17 |
18 | #include "lib.h"
19 |
20 | #ifndef __GNUC__
21 | #pragma RUNTIME_CODE(RtAcquireLock)
22 | #endif
23 | INTN
24 | RUNTIMEFUNCTION
25 | RtStrCmp (
26 | IN CONST CHAR16 *s1,
27 | IN CONST CHAR16 *s2
28 | )
29 | // compare strings
30 | {
31 | while (*s1) {
32 | if (*s1 != *s2) {
33 | break;
34 | }
35 |
36 | s1 += 1;
37 | s2 += 1;
38 | }
39 |
40 | return *s1 - *s2;
41 | }
42 |
43 | #ifndef __GNUC__
44 | #pragma RUNTIME_CODE(RtStrCpy)
45 | #endif
46 | VOID
47 | RUNTIMEFUNCTION
48 | RtStrCpy (
49 | IN CHAR16 *Dest,
50 | IN CONST CHAR16 *Src
51 | )
52 | // copy strings
53 | {
54 | while (*Src) {
55 | *(Dest++) = *(Src++);
56 | }
57 | *Dest = 0;
58 | }
59 |
60 | #ifndef __GNUC__
61 | #pragma RUNTIME_CODE(RtStrCat)
62 | #endif
63 | VOID
64 | RUNTIMEFUNCTION
65 | RtStrCat (
66 | IN CHAR16 *Dest,
67 | IN CONST CHAR16 *Src
68 | )
69 | {
70 | RtStrCpy(Dest+StrLen(Dest), Src);
71 | }
72 |
73 | #ifndef __GNUC__
74 | #pragma RUNTIME_CODE(RtStrLen)
75 | #endif
76 | UINTN
77 | RUNTIMEFUNCTION
78 | RtStrLen (
79 | IN CONST CHAR16 *s1
80 | )
81 | // string length
82 | {
83 | UINTN len;
84 |
85 | for (len=0; *s1; s1+=1, len+=1) ;
86 | return len;
87 | }
88 |
89 | #ifndef __GNUC__
90 | #pragma RUNTIME_CODE(RtStrSize)
91 | #endif
92 | UINTN
93 | RUNTIMEFUNCTION
94 | RtStrSize (
95 | IN CONST CHAR16 *s1
96 | )
97 | // string size
98 | {
99 | UINTN len;
100 |
101 | for (len=0; *s1; s1+=1, len+=1) ;
102 | return (len + 1) * sizeof(CHAR16);
103 | }
104 |
105 | #ifndef __GNUC__
106 | #pragma RUNTIME_CODE(RtBCDtoDecimal)
107 | #endif
108 | UINT8
109 | RUNTIMEFUNCTION
110 | RtBCDtoDecimal(
111 | IN UINT8 BcdValue
112 | )
113 | {
114 | UINTN High, Low;
115 |
116 | High = BcdValue >> 4;
117 | Low = BcdValue - (High << 4);
118 |
119 | return ((UINT8)(Low + (High * 10)));
120 | }
121 |
122 |
123 | #ifndef __GNUC__
124 | #pragma RUNTIME_CODE(RtDecimaltoBCD)
125 | #endif
126 | UINT8
127 | RUNTIMEFUNCTION
128 | RtDecimaltoBCD (
129 | IN UINT8 DecValue
130 | )
131 | {
132 | UINTN High, Low;
133 |
134 | High = DecValue / 10;
135 | Low = DecValue - (High * 10);
136 |
137 | return ((UINT8)(Low + (High << 4)));
138 | }
139 |
140 |
141 |
--------------------------------------------------------------------------------
/src/gnu-efi/gnuefi/crt0-efi-x86_64.S:
--------------------------------------------------------------------------------
1 | /* crt0-efi-x86_64.S - x86_64 EFI startup code.
2 | Copyright (C) 1999 Hewlett-Packard Co.
3 | Contributed by David Mosberger .
4 | Copyright (C) 2005 Intel Co.
5 | Contributed by Fenghua Yu .
6 |
7 | All rights reserved.
8 |
9 | Redistribution and use in source and binary forms, with or without
10 | modification, are permitted provided that the following conditions
11 | are met:
12 |
13 | * Redistributions of source code must retain the above copyright
14 | notice, this list of conditions and the following disclaimer.
15 | * Redistributions in binary form must reproduce the above
16 | copyright notice, this list of conditions and the following
17 | disclaimer in the documentation and/or other materials
18 | provided with the distribution.
19 | * Neither the name of Hewlett-Packard Co. nor the names of its
20 | contributors may be used to endorse or promote products derived
21 | from this software without specific prior written permission.
22 |
23 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
24 | CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
25 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
26 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
28 | BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
29 | OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
30 | PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
31 | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
33 | TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
34 | THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 | SUCH DAMAGE.
36 | */
37 | .text
38 | .align 4
39 |
40 | .globl _start
41 | _start:
42 | subq $8, %rsp
43 | pushq %rcx
44 | pushq %rdx
45 |
46 | 0:
47 | lea ImageBase(%rip), %rdi
48 | lea _DYNAMIC(%rip), %rsi
49 |
50 | popq %rcx
51 | popq %rdx
52 | pushq %rcx
53 | pushq %rdx
54 | call _relocate
55 |
56 | popq %rdi
57 | popq %rsi
58 |
59 | call efi_main
60 | addq $8, %rsp
61 |
62 | .exit:
63 | ret
64 |
65 | // hand-craft a dummy .reloc section so EFI knows it's a relocatable executable:
66 |
67 | .data
68 | dummy: .long 0
69 |
70 | #define IMAGE_REL_ABSOLUTE 0
71 | .section .reloc, "a"
72 | label1:
73 | .long dummy-label1 // Page RVA
74 | .long 10 // Block Size (2*4+2)
75 | .word (IMAGE_REL_ABSOLUTE<<12) + 0 // reloc for dummy
76 |
77 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/runtime/efirtlib.c:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1999 Intel Corporation
4 |
5 | Module Name:
6 |
7 | EfiRtLib.h
8 |
9 | Abstract:
10 |
11 | EFI Runtime library functions
12 |
13 |
14 |
15 | Revision History
16 |
17 | --*/
18 |
19 | #include "efi.h"
20 | #include "efilib.h"
21 | #include "efirtlib.h"
22 |
23 | #ifndef __GNUC__
24 | #pragma RUNTIME_CODE(RtZeroMem)
25 | #endif
26 | VOID
27 | RUNTIMEFUNCTION
28 | RtZeroMem (
29 | IN VOID *Buffer,
30 | IN UINTN Size
31 | )
32 | {
33 | INT8 *pt;
34 |
35 | pt = Buffer;
36 | while (Size--) {
37 | *(pt++) = 0;
38 | }
39 | }
40 |
41 | #ifndef __GNUC__
42 | #pragma RUNTIME_CODE(RtSetMem)
43 | #endif
44 | VOID
45 | RUNTIMEFUNCTION
46 | RtSetMem (
47 | IN VOID *Buffer,
48 | IN UINTN Size,
49 | IN UINT8 Value
50 | )
51 | {
52 | INT8 *pt;
53 |
54 | pt = Buffer;
55 | while (Size--) {
56 | *(pt++) = Value;
57 | }
58 | }
59 |
60 | #ifndef __GNUC__
61 | #pragma RUNTIME_CODE(RtCopyMem)
62 | #endif
63 | VOID
64 | RUNTIMEFUNCTION
65 | RtCopyMem (
66 | IN VOID *Dest,
67 | IN CONST VOID *Src,
68 | IN UINTN len
69 | )
70 | {
71 | CHAR8 *d;
72 | CONST CHAR8 *s = Src;
73 | d = Dest;
74 | while (len--) {
75 | *(d++) = *(s++);
76 | }
77 | }
78 |
79 | #ifndef __GNUC__
80 | #pragma RUNTIME_CODE(RtCompareMem)
81 | #endif
82 | INTN
83 | RUNTIMEFUNCTION
84 | RtCompareMem (
85 | IN CONST VOID *Dest,
86 | IN CONST VOID *Src,
87 | IN UINTN len
88 | )
89 | {
90 | CONST CHAR8 *d = Dest, *s = Src;
91 | while (len--) {
92 | if (*d != *s) {
93 | return *d - *s;
94 | }
95 |
96 | d += 1;
97 | s += 1;
98 | }
99 |
100 | return 0;
101 | }
102 |
103 | #ifndef __GNUC__
104 | #pragma RUNTIME_CODE(RtCompareGuid)
105 | #endif
106 | INTN
107 | RUNTIMEFUNCTION
108 | RtCompareGuid (
109 | IN EFI_GUID *Guid1,
110 | IN EFI_GUID *Guid2
111 | )
112 | /*++
113 |
114 | Routine Description:
115 |
116 | Compares to GUIDs
117 |
118 | Arguments:
119 |
120 | Guid1 - guid to compare
121 | Guid2 - guid to compare
122 |
123 | Returns:
124 | = 0 if Guid1 == Guid2
125 |
126 | --*/
127 | {
128 | INT32 *g1, *g2, r;
129 |
130 | //
131 | // Compare 32 bits at a time
132 | //
133 |
134 | g1 = (INT32 *) Guid1;
135 | g2 = (INT32 *) Guid2;
136 |
137 | r = g1[0] - g2[0];
138 | r |= g1[1] - g2[1];
139 | r |= g1[2] - g2[2];
140 | r |= g1[3] - g2[3];
141 |
142 | return r;
143 | }
144 |
145 |
146 |
--------------------------------------------------------------------------------
/src/helloworld/helloworld.vcxproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | $(OutDir)..\..\$(Configuration)\Bootp.exe
5 | $(TargetPath)
6 | WindowsLocalDebugger
7 | $(OutDir)
8 |
9 |
10 | $(OutDir)..\..\$(Configuration)\Bootp.exe
11 | $(TargetPath)
12 | WindowsLocalDebugger
13 | $(OutDir)
14 |
15 |
16 | $(SystemRoot)\System32\wscript
17 | //d debug.vbs "$(TargetPath)" "$(PlatformShortName)"
18 | WindowsLocalDebugger
19 | $(ProjectDir)
20 |
21 |
22 | $(OutDir)..\..\$(Configuration)\Bootp.exe
23 | $(TargetPath)
24 | WindowsLocalDebugger
25 | $(OutDir)
26 |
27 |
28 | $(OutDir)..\..\$(Configuration)\Bootp.exe
29 | $(TargetPath)
30 | WindowsLocalDebugger
31 | $(OutDir)
32 |
33 |
34 | $(SystemRoot)\System32\wscript
35 | //d debug.vbs "$(TargetPath)" "$(PlatformShortName)"
36 | WindowsLocalDebugger
37 | $(ProjectDir)
38 |
39 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/error.c:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1998 Intel Corporation
4 |
5 | Module Name:
6 |
7 | error.c
8 |
9 | Abstract:
10 |
11 |
12 |
13 |
14 | Revision History
15 |
16 | --*/
17 |
18 | #include "lib.h"
19 |
20 |
21 | struct {
22 | EFI_STATUS Code;
23 | WCHAR *Desc;
24 | } ErrorCodeTable[] = {
25 | { EFI_SUCCESS, L"Success"},
26 | { EFI_LOAD_ERROR, L"Load Error"},
27 | { EFI_INVALID_PARAMETER, L"Invalid Parameter"},
28 | { EFI_UNSUPPORTED, L"Unsupported"},
29 | { EFI_BAD_BUFFER_SIZE, L"Bad Buffer Size"},
30 | { EFI_BUFFER_TOO_SMALL, L"Buffer Too Small"},
31 | { EFI_NOT_READY, L"Not Ready"},
32 | { EFI_DEVICE_ERROR, L"Device Error"},
33 | { EFI_WRITE_PROTECTED, L"Write Protected"},
34 | { EFI_OUT_OF_RESOURCES, L"Out of Resources"},
35 | { EFI_VOLUME_CORRUPTED, L"Volume Corrupt"},
36 | { EFI_VOLUME_FULL, L"Volume Full"},
37 | { EFI_NO_MEDIA, L"No Media"},
38 | { EFI_MEDIA_CHANGED, L"Media changed"},
39 | { EFI_NOT_FOUND, L"Not Found"},
40 | { EFI_ACCESS_DENIED, L"Access Denied"},
41 | { EFI_NO_RESPONSE, L"No Response"},
42 | { EFI_NO_MAPPING, L"No mapping"},
43 | { EFI_TIMEOUT, L"Time out"},
44 | { EFI_NOT_STARTED, L"Not started"},
45 | { EFI_ALREADY_STARTED, L"Already started"},
46 | { EFI_ABORTED, L"Aborted"},
47 | { EFI_ICMP_ERROR, L"ICMP Error"},
48 | { EFI_TFTP_ERROR, L"TFTP Error"},
49 | { EFI_PROTOCOL_ERROR, L"Protocol Error"},
50 | { EFI_INCOMPATIBLE_VERSION, L"Incompatible Version"},
51 | { EFI_SECURITY_VIOLATION, L"Security Policy Violation"},
52 | { EFI_CRC_ERROR, L"CRC Error"},
53 | { EFI_END_OF_MEDIA, L"End of Media"},
54 | { EFI_END_OF_FILE, L"End of File"},
55 | { EFI_INVALID_LANGUAGE, L"Invalid Languages"},
56 | { EFI_COMPROMISED_DATA, L"Compromised Data"},
57 |
58 | // warnings
59 | { EFI_WARN_UNKOWN_GLYPH, L"Warning Unknown Glyph"},
60 | { EFI_WARN_DELETE_FAILURE, L"Warning Delete Failure"},
61 | { EFI_WARN_WRITE_FAILURE, L"Warning Write Failure"},
62 | { EFI_WARN_BUFFER_TOO_SMALL, L"Warning Buffer Too Small"},
63 | { 0, NULL}
64 | } ;
65 |
66 |
67 | VOID
68 | StatusToString (
69 | OUT CHAR16 *Buffer,
70 | IN EFI_STATUS Status
71 | )
72 | {
73 | UINTN Index;
74 |
75 | for (Index = 0; ErrorCodeTable[Index].Desc; Index +=1) {
76 | if (ErrorCodeTable[Index].Code == Status) {
77 | StrCpy (Buffer, ErrorCodeTable[Index].Desc);
78 | return;
79 | }
80 | }
81 |
82 | SPrint (Buffer, 0, L"%X", Status);
83 | }
84 |
--------------------------------------------------------------------------------
/src/gnu-efi/gnuefi/crt0-efi-ia32.S:
--------------------------------------------------------------------------------
1 | /* crt0-efi-ia32.S - x86 EFI startup code.
2 | Copyright (C) 1999 Hewlett-Packard Co.
3 | Contributed by David Mosberger .
4 |
5 | All rights reserved.
6 |
7 | Redistribution and use in source and binary forms, with or without
8 | modification, are permitted provided that the following conditions
9 | are met:
10 |
11 | * Redistributions of source code must retain the above copyright
12 | notice, this list of conditions and the following disclaimer.
13 | * Redistributions in binary form must reproduce the above
14 | copyright notice, this list of conditions and the following
15 | disclaimer in the documentation and/or other materials
16 | provided with the distribution.
17 | * Neither the name of Hewlett-Packard Co. nor the names of its
18 | contributors may be used to endorse or promote products derived
19 | from this software without specific prior written permission.
20 |
21 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
22 | CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
23 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
24 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
26 | BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
27 | OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
28 | PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29 | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
31 | TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
32 | THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 | SUCH DAMAGE.
34 | */
35 |
36 | .text
37 | .align 4
38 |
39 | .globl _start
40 | _start:
41 | pushl %ebp
42 | movl %esp,%ebp
43 |
44 | pushl 12(%ebp) # copy "image" argument
45 | pushl 8(%ebp) # copy "systab" argument
46 |
47 | call 0f
48 | 0: popl %eax
49 | movl %eax,%ebx
50 |
51 | addl $ImageBase-0b,%eax # %eax = ldbase
52 | addl $_DYNAMIC-0b,%ebx # %ebx = _DYNAMIC
53 |
54 | pushl %ebx # pass _DYNAMIC as second argument
55 | pushl %eax # pass ldbase as first argument
56 | call _relocate
57 | popl %ebx
58 | popl %ebx
59 | testl %eax,%eax
60 | jne .exit
61 |
62 | call efi_main # call app with "image" and "systab" argument
63 |
64 | .exit: leave
65 | ret
66 |
67 | // hand-craft a dummy .reloc section so EFI knows it's a relocatable executable:
68 |
69 | .data
70 | dummy: .long 0
71 |
72 | #define IMAGE_REL_ABSOLUTE 0
73 | .section .reloc
74 | .long dummy // Page RVA
75 | .long 10 // Block Size (2*4+2)
76 | .word (IMAGE_REL_ABSOLUTE<<12) + 0 // reloc for dummy
77 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/efishellintf.h:
--------------------------------------------------------------------------------
1 | /** @file
2 | SHELL_INTERFACE_PROTOCOL from EDK shell (no spec).
3 |
4 | Shell Interface - additional information (over image_info) provided
5 | to an application started by the shell.
6 |
7 | ConIo provides a file-style interface to the console.
8 |
9 | The shell interface's and data (including ConIo) are only valid during
10 | the applications Entry Point. Once the application returns from it's
11 | entry point the data is freed by the invoking shell.
12 |
13 | Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
14 | This program and the accompanying materials
15 | are licensed and made available under the terms and conditions of the BSD License
16 | which accompanies this distribution. The full text of the license may be found at
17 | http://opensource.org/licenses/bsd-license.php
18 |
19 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
20 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
21 |
22 | **/
23 | /*
24 | * This is based on ShellPkg/Include/Protocol/EfiShellInterface.h from EDK II.
25 | */
26 |
27 | #ifndef _SHELLINTERFACE_H_
28 | #define _SHELLINTERFACE_H_
29 |
30 |
31 | #define SHELL_INTERFACE_PROTOCOL_GUID \
32 | { \
33 | 0x47c7b223, 0xc42a, 0x11d2, {0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} \
34 | }
35 |
36 | ///
37 | /// Bit definitions for EFI_SHELL_ARG_INFO
38 | ///
39 | typedef enum {
40 | ARG_NO_ATTRIB = 0x0,
41 | ARG_IS_QUOTED = 1<<0,
42 | ARG_PARTIALLY_QUOTED = 1<<1,
43 | ARG_FIRST_HALF_QUOTED = 1<<2,
44 | ARG_FIRST_CHAR_IS_ESC = 1<<3
45 | } EFI_SHELL_ARG_INFO_TYPES;
46 |
47 | ///
48 | /// Attributes for an argument.
49 | ///
50 | typedef struct _EFI_SHELL_ARG_INFO {
51 | UINT32 Attributes;
52 | } EFI_SHELL_ARG_INFO;
53 |
54 | ///
55 | /// This protocol provides access to additional information about a shell application.
56 | ///
57 | typedef struct {
58 | ///
59 | /// Handle back to original image handle & image information.
60 | ///
61 | EFI_HANDLE ImageHandle;
62 | EFI_LOADED_IMAGE *Info;
63 |
64 | ///
65 | /// Parsed arg list converted more C-like format.
66 | ///
67 | CHAR16 **Argv;
68 | UINTN Argc;
69 |
70 | ///
71 | /// Storage for file redirection args after parsing.
72 | ///
73 | CHAR16 **RedirArgv;
74 | UINTN RedirArgc;
75 |
76 | ///
77 | /// A file style handle for console io.
78 | ///
79 | EFI_FILE *StdIn;
80 | EFI_FILE *StdOut;
81 | EFI_FILE *StdErr;
82 |
83 | ///
84 | /// List of attributes for each argument.
85 | ///
86 | EFI_SHELL_ARG_INFO *ArgInfo;
87 |
88 | ///
89 | /// Whether we are echoing.
90 | ///
91 | BOOLEAN EchoOn;
92 | } EFI_SHELL_INTERFACE;
93 |
94 | #endif
95 |
--------------------------------------------------------------------------------
/src/gnu-efi/gnuefi/Makefile:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright (C) 1999-2001 Hewlett-Packard Co.
3 | # Contributed by David Mosberger
4 | # Contributed by Stephane Eranian
5 | #
6 | # All rights reserved.
7 | #
8 | # Redistribution and use in source and binary forms, with or without
9 | # modification, are permitted provided that the following conditions
10 | # are met:
11 | #
12 | # * Redistributions of source code must retain the above copyright
13 | # notice, this list of conditions and the following disclaimer.
14 | # * Redistributions in binary form must reproduce the above
15 | # copyright notice, this list of conditions and the following
16 | # disclaimer in the documentation and/or other materials
17 | # provided with the distribution.
18 | # * Neither the name of Hewlett-Packard Co. nor the names of its
19 | # contributors may be used to endorse or promote products derived
20 | # from this software without specific prior written permission.
21 | #
22 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
23 | # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
24 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26 | # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
27 | # BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
28 | # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30 | # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31 | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
32 | # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
33 | # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 | # SUCH DAMAGE.
35 | #
36 |
37 | SRCDIR = .
38 |
39 | VPATH = $(SRCDIR)
40 |
41 | include $(SRCDIR)/../Make.defaults
42 |
43 | TOPDIR = $(SRCDIR)/..
44 |
45 | CDIR=$(TOPDIR)/..
46 | FILES = reloc_$(ARCH)
47 |
48 | OBJS = $(FILES:%=%.o)
49 |
50 | # on aarch64, avoid jump tables before all relocations have been processed
51 | reloc_aarch64.o: CFLAGS += -fno-jump-tables
52 |
53 | TARGETS = crt0-efi-$(ARCH).o libgnuefi.a
54 |
55 | all: $(TARGETS)
56 |
57 | libgnuefi.a: $(patsubst %,libgnuefi.a(%),$(OBJS))
58 |
59 | clean:
60 | rm -f $(TARGETS) *~ *.o $(OBJS)
61 |
62 | install:
63 | mkdir -p $(INSTALLROOT)$(LIBDIR)
64 | $(INSTALL) -m 644 $(TARGETS) $(INSTALLROOT)$(LIBDIR)
65 | ifneq (,$(findstring FreeBSD,$(OS)))
66 | ifeq ($(ARCH),x86_64)
67 | $(INSTALL) -m 644 $(SRCDIR)/elf_$(ARCH)_fbsd_efi.lds $(INSTALLROOT)$(LIBDIR)
68 | else
69 | $(INSTALL) -m 644 $(SRCDIR)/elf_$(ARCH)_efi.lds $(INSTALLROOT)$(LIBDIR)
70 | endif
71 | else
72 | $(INSTALL) -m 644 $(SRCDIR)/elf_$(ARCH)_efi.lds $(INSTALLROOT)$(LIBDIR)
73 | endif
74 |
75 | include $(SRCDIR)/../Make.rules
76 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/runtime/vm.c:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1998 Intel Corporation
4 |
5 | Module Name:
6 |
7 | vm.c
8 |
9 | Abstract:
10 |
11 | EFI Hell to remap runtime address into the new virual address space
12 | that was registered by the OS for RT calls.
13 |
14 | So the code image needs to be relocated. All pointers need to be
15 | manually fixed up since the address map changes.
16 |
17 | GOOD LUCK NOT HAVING BUGS IN YOUR CODE! PLEASE TEST A LOT. MAKE SURE
18 | EXIT BOOTSERVICES OVER WRITES ALL BOOTSERVICE MEMORY & DATA SPACES WHEN
19 | YOU TEST.
20 |
21 | Revision History
22 |
23 | --*/
24 |
25 | #include "lib.h"
26 |
27 | #ifndef __GNUC__
28 | #pragma RUNTIME_CODE(RtLibEnableVirtualMappings)
29 | #endif
30 | VOID
31 | RUNTIMEFUNCTION
32 | RtLibEnableVirtualMappings (
33 | VOID
34 | )
35 | {
36 | EFI_CONVERT_POINTER ConvertPointer;
37 |
38 | //
39 | // If this copy of the lib is linked into the firmware, then
40 | // do not update the pointers yet.
41 | //
42 |
43 | if (!LibFwInstance) {
44 |
45 | //
46 | // Different components are updating to the new virtual
47 | // mappings at differnt times. The only function that
48 | // is safe to call at this notification is ConvertAddress
49 | //
50 |
51 | ConvertPointer = RT->ConvertPointer;
52 |
53 | //
54 | // Fix any pointers that the lib created, that may be needed
55 | // during runtime.
56 | //
57 |
58 | ConvertPointer (EFI_INTERNAL_PTR, (VOID **)&RT);
59 | ConvertPointer (EFI_OPTIONAL_PTR, (VOID **)&LibRuntimeDebugOut);
60 |
61 | ConvertPointer (EFI_INTERNAL_PTR, (VOID **)&LibRuntimeRaiseTPL);
62 | ConvertPointer (EFI_INTERNAL_PTR, (VOID **)&LibRuntimeRestoreTPL);
63 |
64 | // that was it :^)
65 | }
66 | }
67 |
68 |
69 | #ifndef __GNUC__
70 | #pragma RUNTIME_CODE(RtConvertList)
71 | #endif
72 | VOID
73 | RUNTIMEFUNCTION
74 | RtConvertList (
75 | IN UINTN DebugDisposition,
76 | IN OUT LIST_ENTRY *ListHead
77 | )
78 | {
79 | LIST_ENTRY *Link;
80 | LIST_ENTRY *NextLink;
81 | EFI_CONVERT_POINTER ConvertPointer;
82 |
83 | ConvertPointer = RT->ConvertPointer;
84 |
85 | //
86 | // Convert all the Flink & Blink pointers in the list
87 | //
88 |
89 | Link = ListHead;
90 | do {
91 | NextLink = Link->Flink;
92 |
93 | ConvertPointer (
94 | Link->Flink == ListHead ? DebugDisposition : 0,
95 | (VOID **)&Link->Flink
96 | );
97 |
98 | ConvertPointer (
99 | Link->Blink == ListHead ? DebugDisposition : 0,
100 | (VOID **)&Link->Blink
101 | );
102 |
103 | Link = NextLink;
104 | } while (Link != ListHead);
105 | }
106 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/efi_nii.h:
--------------------------------------------------------------------------------
1 | #ifndef _EFI_NII_H
2 | #define _EFI_NII_H
3 |
4 | /*++
5 | Copyright (c) 2000 Intel Corporation
6 |
7 | Module name:
8 | efi_nii.h
9 |
10 | Abstract:
11 |
12 | Revision history:
13 | 2000-Feb-18 M(f)J GUID updated.
14 | Structure order changed for machine word alignment.
15 | Added StringId[4] to structure.
16 |
17 | 2000-Feb-14 M(f)J Genesis.
18 | --*/
19 |
20 | #define EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_GUID \
21 | { 0xE18541CD, 0xF755, 0x4f73, {0x92, 0x8D, 0x64, 0x3C, 0x8A, 0x79, 0xB2, 0x29} }
22 |
23 | #define EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_REVISION 0x00010000
24 | #define EFI_NETWORK_INTERFACE_IDENTIFIER_INTERFACE_REVISION EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_REVISION
25 |
26 | typedef enum {
27 | EfiNetworkInterfaceUndi = 1
28 | } EFI_NETWORK_INTERFACE_TYPE;
29 |
30 | typedef struct _EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL {
31 |
32 | UINT64 Revision;
33 | // Revision of the network interface identifier protocol interface.
34 |
35 | UINT64 ID;
36 | // Address of the first byte of the identifying structure for this
37 | // network interface. This is set to zero if there is no structure.
38 | //
39 | // For PXE/UNDI this is the first byte of the !PXE structure.
40 |
41 | UINT64 ImageAddr;
42 | // Address of the UNrelocated driver/ROM image. This is set
43 | // to zero if there is no driver/ROM image.
44 | //
45 | // For 16-bit UNDI, this is the first byte of the option ROM in
46 | // upper memory.
47 | //
48 | // For 32/64-bit S/W UNDI, this is the first byte of the EFI ROM
49 | // image.
50 | //
51 | // For H/W UNDI, this is set to zero.
52 |
53 | UINT32 ImageSize;
54 | // Size of the UNrelocated driver/ROM image of this network interface.
55 | // This is set to zero if there is no driver/ROM image.
56 |
57 | CHAR8 StringId[4];
58 | // 4 char ASCII string to go in class identifier (option 60) in DHCP
59 | // and Boot Server discover packets.
60 | // For EfiNetworkInterfaceUndi this field is "UNDI".
61 | // For EfiNetworkInterfaceSnp this field is "SNPN".
62 |
63 | UINT8 Type;
64 | UINT8 MajorVer;
65 | UINT8 MinorVer;
66 | // Information to be placed into the PXE DHCP and Discover packets.
67 | // This is the network interface type and version number that will
68 | // be placed into DHCP option 94 (client network interface identifier).
69 | BOOLEAN Ipv6Supported;
70 | UINT8 IfNum; // interface number to be used with pxeid structure
71 | } EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL, EFI_NETWORK_INTERFACE_IDENTIFIER_INTERFACE;
72 |
73 | // Note: Because it conflicted with the EDK2 struct name, the
74 | // 'EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL' GUID definition,
75 | // from older versions of gnu-efi, is now obsoleted.
76 | // Use 'EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_GUID' instead.
77 |
78 | #endif // _EFI_NII_H
79 |
--------------------------------------------------------------------------------
/src/gnu-efi/apps/t3.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | EFI_STATUS
5 | efi_main(
6 | EFI_HANDLE image_handle,
7 | EFI_SYSTEM_TABLE *systab
8 | )
9 | {
10 | EFI_GUID loaded_image_protocol = LOADED_IMAGE_PROTOCOL;
11 | EFI_STATUS efi_status;
12 | EFI_LOADED_IMAGE *li;
13 | UINTN pat = PoolAllocationType;
14 | VOID *void_li_p;
15 |
16 | InitializeLib(image_handle, systab);
17 | PoolAllocationType = 2; /* klooj */
18 |
19 | Print(L"Hello World! (0xd=0x%x, 13=%d)\n", 13, 13);
20 |
21 | Print(L"before InitializeLib(): PoolAllocationType=%d\n",
22 | pat);
23 |
24 | Print(L" after InitializeLib(): PoolAllocationType=%d\n",
25 | PoolAllocationType);
26 |
27 | /*
28 | * Locate loaded_image_handle instance.
29 | */
30 |
31 | Print(L"BS->HandleProtocol() ");
32 |
33 | efi_status = uefi_call_wrapper(
34 | BS->HandleProtocol,
35 | 3,
36 | image_handle,
37 | &loaded_image_protocol,
38 | &void_li_p);
39 | li = void_li_p;
40 |
41 | Print(L"%xh (%r)\n", efi_status, efi_status);
42 |
43 | if (efi_status != EFI_SUCCESS) {
44 | return efi_status;
45 | }
46 |
47 | Print(L" li: %xh\n", li);
48 |
49 | if (!li) {
50 | return EFI_UNSUPPORTED;
51 | }
52 |
53 | Print(L" li->Revision: %xh\n", li->Revision);
54 | Print(L" li->ParentHandle: %xh\n", li->ParentHandle);
55 | Print(L" li->SystemTable: %xh\n", li->SystemTable);
56 | Print(L" li->DeviceHandle: %xh\n", li->DeviceHandle);
57 | Print(L" li->FilePath: %xh\n", li->FilePath);
58 | Print(L" li->Reserved: %xh\n", li->Reserved);
59 | Print(L" li->LoadOptionsSize: %xh\n", li->LoadOptionsSize);
60 | Print(L" li->LoadOptions: %xh\n", li->LoadOptions);
61 | Print(L" li->ImageBase: %xh\n", li->ImageBase);
62 | Print(L" li->ImageSize: %xh\n", li->ImageSize);
63 | Print(L" li->ImageCodeType: %xh\n", li->ImageCodeType);
64 | Print(L" li->ImageDataType: %xh\n", li->ImageDataType);
65 | Print(L" li->Unload: %xh\n", li->Unload);
66 |
67 | #if 0
68 | typedef struct {
69 | UINT32 Revision;
70 | EFI_HANDLE ParentHandle;
71 | struct _EFI_SYSTEM_TABLE *SystemTable;
72 |
73 | // Source location of image
74 | EFI_HANDLE DeviceHandle;
75 | EFI_DEVICE_PATH *FilePath;
76 | VOID *Reserved;
77 |
78 | // Images load options
79 | UINT32 LoadOptionsSize;
80 | VOID *LoadOptions;
81 |
82 | // Location of where image was loaded
83 | VOID *ImageBase;
84 | UINT64 ImageSize;
85 | EFI_MEMORY_TYPE ImageCodeType;
86 | EFI_MEMORY_TYPE ImageDataType;
87 |
88 | // If the driver image supports a dynamic unload request
89 | EFI_IMAGE_UNLOAD Unload;
90 |
91 | } EFI_LOADED_IMAGE;
92 | #endif
93 |
94 | return EFI_SUCCESS;
95 | }
96 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/efidebug.h:
--------------------------------------------------------------------------------
1 | #ifndef _EFI_DEBUG_H
2 | #define _EFI_DEBUG_H
3 |
4 | /*++
5 |
6 | Copyright (c) 1998 Intel Corporation
7 |
8 | Module Name:
9 |
10 | efidebug.h
11 |
12 | Abstract:
13 |
14 | EFI library debug functions
15 |
16 |
17 |
18 | Revision History
19 |
20 | --*/
21 |
22 | extern UINTN EFIDebug;
23 |
24 | #if EFI_DEBUG
25 |
26 | #define DBGASSERT(a) DbgAssert(__FILE__, __LINE__, #a)
27 | #define DEBUG(a) DbgPrint a
28 |
29 | #else
30 |
31 | #define DBGASSERT(a)
32 | #define DEBUG(a)
33 |
34 | #endif
35 |
36 | #if EFI_DEBUG_CLEAR_MEMORY
37 |
38 | #define DBGSETMEM(a,l) SetMem(a,l,(CHAR8)BAD_POINTER)
39 |
40 | #else
41 |
42 | #define DBGSETMEM(a,l)
43 |
44 | #endif
45 |
46 | #define D_INIT 0x00000001 // Initialization style messages
47 | #define D_WARN 0x00000002 // Warnings
48 | #define D_LOAD 0x00000004 // Load events
49 | #define D_FS 0x00000008 // EFI File system
50 | #define D_POOL 0x00000010 // Alloc & Free's
51 | #define D_PAGE 0x00000020 // Alloc & Free's
52 | #define D_INFO 0x00000040 // Verbose
53 | #define D_VAR 0x00000100 // Variable
54 | #define D_PARSE 0x00000200 // Command parsing
55 | #define D_BM 0x00000400 // Boot manager
56 | #define D_BLKIO 0x00001000 // BlkIo Driver
57 | #define D_BLKIO_ULTRA 0x00002000 // BlkIo Driver
58 | #define D_NET 0x00004000 // SNI Driver
59 | #define D_NET_ULTRA 0x00008000 // SNI Driver
60 | #define D_TXTIN 0x00010000 // Simple Input Driver
61 | #define D_TXTOUT 0x00020000 // Simple Text Output Driver
62 | #define D_ERROR_ATA 0x00040000 // ATA error messages
63 | #define D_ERROR 0x80000000 // Error
64 |
65 | #define D_RESERVED 0x7fffC880 // Bits not reserved above
66 |
67 | //
68 | // Current Debug level of the system, value of EFIDebug
69 | //
70 | //#define EFI_DBUG_MASK (D_ERROR | D_WARN | D_LOAD | D_BLKIO | D_INIT)
71 | #define EFI_DBUG_MASK (D_ERROR)
72 |
73 | //
74 | //
75 | //
76 |
77 | #if EFI_DEBUG
78 |
79 | #define ASSERT(a) if(!(a)) DBGASSERT(a)
80 | #define ASSERT_LOCKED(l) if(!(l)->Lock) DBGASSERT(l not locked)
81 | #define ASSERT_STRUCT(p,t) DBGASSERT(t not structure), p
82 |
83 | #else
84 |
85 | #define ASSERT(a)
86 | #define ASSERT_LOCKED(l)
87 | #define ASSERT_STRUCT(p,t)
88 |
89 | #endif
90 |
91 | //
92 | // Prototypes
93 | //
94 |
95 | INTN
96 | DbgAssert (
97 | CHAR8 *file,
98 | INTN lineno,
99 | CHAR8 *string
100 | );
101 |
102 | INTN
103 | DbgPrint (
104 | INTN mask,
105 | CHAR8 *format,
106 | ...
107 | );
108 |
109 | #endif
110 |
111 |
--------------------------------------------------------------------------------
/src/gnu-efi/apps/modelist.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | extern EFI_GUID GraphicsOutputProtocol;
5 |
6 | static int memcmp(const void *s1, const void *s2, UINTN n)
7 | {
8 | const unsigned char *c1 = s1, *c2 = s2;
9 | int d = 0;
10 |
11 | if (!s1 && !s2)
12 | return 0;
13 | if (s1 && !s2)
14 | return 1;
15 | if (!s1 && s2)
16 | return -1;
17 |
18 | while (n--) {
19 | d = (int)*c1++ - (int)*c2++;
20 | if (d)
21 | break;
22 | }
23 | return d;
24 | }
25 |
26 | static void
27 | print_modes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
28 | {
29 | int i, imax;
30 | EFI_STATUS rc;
31 |
32 | imax = gop->Mode->MaxMode;
33 |
34 | Print(L"GOP reports MaxMode %d\n", imax);
35 | for (i = 0; i < imax; i++) {
36 | EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *info;
37 | UINTN SizeOfInfo;
38 | rc = uefi_call_wrapper(gop->QueryMode, 4, gop, i, &SizeOfInfo,
39 | &info);
40 | if (EFI_ERROR(rc) && rc == EFI_NOT_STARTED) {
41 | rc = uefi_call_wrapper(gop->SetMode, 2, gop,
42 | gop->Mode->Mode);
43 | rc = uefi_call_wrapper(gop->QueryMode, 4, gop, i,
44 | &SizeOfInfo, &info);
45 | }
46 |
47 | if (EFI_ERROR(rc)) {
48 | CHAR16 Buffer[64];
49 | StatusToString(Buffer, rc);
50 | Print(L"%d: Bad response from QueryMode: %s (%d)\n",
51 | i, Buffer, rc);
52 | continue;
53 | }
54 | Print(L"%c%d: %dx%d ", memcmp(info,gop->Mode->Info,sizeof(*info)) == 0 ? '*' : ' ', i,
55 | info->HorizontalResolution,
56 | info->VerticalResolution);
57 | switch(info->PixelFormat) {
58 | case PixelRedGreenBlueReserved8BitPerColor:
59 | Print(L"RGBR");
60 | break;
61 | case PixelBlueGreenRedReserved8BitPerColor:
62 | Print(L"BGRR");
63 | break;
64 | case PixelBitMask:
65 | Print(L"R:%08x G:%08x B:%08x X:%08x",
66 | info->PixelInformation.RedMask,
67 | info->PixelInformation.GreenMask,
68 | info->PixelInformation.BlueMask,
69 | info->PixelInformation.ReservedMask);
70 | break;
71 | case PixelBltOnly:
72 | Print(L"(blt only)");
73 | break;
74 | default:
75 | Print(L"(Invalid pixel format)");
76 | break;
77 | }
78 | Print(L" pitch %d\n", info->PixelsPerScanLine);
79 | }
80 | }
81 |
82 | static EFI_STATUS
83 | SetWatchdog(UINTN seconds)
84 | {
85 | EFI_STATUS rc;
86 | rc = uefi_call_wrapper(BS->SetWatchdogTimer, 4, seconds, 0x1ffff,
87 | 0, NULL);
88 | if (EFI_ERROR(rc)) {
89 | CHAR16 Buffer[64];
90 | StatusToString(Buffer, rc);
91 | Print(L"Bad response from QueryMode: %s (%d)\n", Buffer, rc);
92 | }
93 | return rc;
94 | }
95 |
96 | EFI_STATUS
97 | efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *systab)
98 | {
99 | EFI_STATUS rc;
100 | EFI_GRAPHICS_OUTPUT_PROTOCOL *gop;
101 |
102 | InitializeLib(image_handle, systab);
103 |
104 | SetWatchdog(10);
105 |
106 | rc = LibLocateProtocol(&GraphicsOutputProtocol, (void **)&gop);
107 | if (EFI_ERROR(rc))
108 | return rc;
109 |
110 | print_modes(gop);
111 |
112 | SetWatchdog(0);
113 | return EFI_SUCCESS;
114 | }
115 |
--------------------------------------------------------------------------------
/src/gnu-efi/gnuefi/crt0-efi-ia64.S:
--------------------------------------------------------------------------------
1 | /* crt0-efi-ia64.S - IA-64 EFI startup code.
2 | Copyright (C) 1999 Hewlett-Packard Co.
3 | Contributed by David Mosberger .
4 |
5 | All rights reserved.
6 |
7 | Redistribution and use in source and binary forms, with or without
8 | modification, are permitted provided that the following conditions
9 | are met:
10 |
11 | * Redistributions of source code must retain the above copyright
12 | notice, this list of conditions and the following disclaimer.
13 | * Redistributions in binary form must reproduce the above
14 | copyright notice, this list of conditions and the following
15 | disclaimer in the documentation and/or other materials
16 | provided with the distribution.
17 | * Neither the name of Hewlett-Packard Co. nor the names of its
18 | contributors may be used to endorse or promote products derived
19 | from this software without specific prior written permission.
20 |
21 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
22 | CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
23 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
24 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
26 | BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
27 | OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
28 | PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29 | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
31 | TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
32 | THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 | SUCH DAMAGE.
34 | */
35 | .text
36 | .psr abi64
37 | .psr lsb
38 | .lsb
39 |
40 | .proc _start
41 | _start:
42 | alloc loc0=ar.pfs,2,2,2,0
43 | mov loc1=rp
44 | movl out0=@gprel(ImageBase) // out0 <- ImageBase (ldbase)
45 | ;;
46 | add out0=out0,gp
47 | movl out1=@gprel(_DYNAMIC) // out1 <- _DYNAMIC
48 | ;; // avoid WAW on CFM
49 | add out1=out1,gp
50 | br.call.sptk.few rp=_relocate
51 | .Lret0:
52 | cmp.ne p6,p0=r0,r8 // r8 == EFI_SUCCESS?
53 | (p6) br.cond.sptk.few .exit // no ->
54 |
55 | .Lret1:
56 |
57 | mov out0=in0 // image handle
58 | mov out1=in1 // systab
59 | br.call.sptk.few rp=efi_main
60 | .Lret2:
61 | .exit:
62 | mov ar.pfs=loc0
63 | mov rp=loc1
64 | ;;
65 | br.ret.sptk.few rp
66 |
67 | .endp _start
68 |
69 |
70 | // PE32+ wants a PLABEL, not the code address of the entry point:
71 |
72 | .align 16
73 | .global _start_plabel
74 | .section .plabel, "a"
75 | _start_plabel:
76 | data8 _start
77 | data8 __gp
78 |
79 | // hand-craft a .reloc section for the plabel:
80 |
81 | #define IMAGE_REL_BASED_DIR64 10
82 |
83 | .section .reloc, "a"
84 | data4 _start_plabel // Page RVA
85 | data4 12 // Block Size (2*4+2*2)
86 | data2 (IMAGE_REL_BASED_DIR64<<12) + 0 // reloc for plabel's entry point
87 | data2 (IMAGE_REL_BASED_DIR64<<12) + 8 // reloc for plabel's global pointer
88 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/protocol/legacyboot.h:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1999 Intel Corporation
4 |
5 | Module Name:
6 |
7 | legacyboot
8 |
9 | Abstract:
10 |
11 | EFI support for legacy boot
12 |
13 |
14 |
15 | Revision History
16 |
17 | --*/
18 |
19 | #ifndef _LEGACY_BOOT_INCLUDE_
20 | #define _LEGACY_BOOT_INCLUDE_
21 |
22 | #define LEGACY_BOOT_PROTOCOL \
23 | { 0x376e5eb2, 0x30e4, 0x11d3, { 0xba, 0xe5, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } }
24 |
25 | #pragma pack(1)
26 |
27 | //
28 | // BBS 1.01 (See Appendix A) IPL and BCV Table Entry Data structure.
29 | // Seg:Off pointers have been converted to EFI pointers in this data structure
30 | // This is the structure that also maps to the EFI device path for the boot selection
31 | //
32 | typedef struct {
33 | UINT16 DeviceType;
34 | UINT16 StatusFlag;
35 | UINT32 Reserved;
36 | VOID *BootHandler; // Not an EFI entry point
37 | CHAR8 *DescString;
38 | } BBS_TABLE_ENTRY;
39 | #pragma pack()
40 |
41 | typedef
42 | EFI_STATUS
43 | (EFIAPI *LEGACY_BOOT_CALL) (
44 | IN EFI_DEVICE_PATH *DevicePath
45 | );
46 |
47 |
48 | //
49 | // BBS support functions
50 | // PnP Call numbers and BiosSelector hidden in implementation
51 | //
52 |
53 | typedef enum {
54 | IplRelative,
55 | BcvRelative
56 | } BBS_TYPE;
57 |
58 | INTERFACE_DECL(_LEGACY_BOOT_INTERFACE);
59 |
60 | //
61 | // == PnP Function 0x60 then BbsVersion == 0x0101 if this call fails then BbsVersion == 0x0000
62 | //
63 |
64 | //
65 | // == PnP Function 0x61
66 | //
67 | typedef
68 | EFI_STATUS
69 | (EFIAPI *GET_DEVICE_COUNT) (
70 | IN struct _LEGACY_BOOT_INTERFACE *This,
71 | IN BBS_TYPE *TableType,
72 | OUT UINTN *DeviceCount,
73 | OUT UINTN *MaxCount
74 | );
75 |
76 | //
77 | // == PnP Function 0x62
78 | //
79 | typedef
80 | EFI_STATUS
81 | (EFIAPI *GET_PRIORITY_AND_TABLE) (
82 | IN struct _LEGACY_BOOT_INTERFACE *This,
83 | IN BBS_TYPE *TableType,
84 | IN OUT UINTN *PrioritySize, // MaxCount * sizeof(UINT8)
85 | OUT UINTN *Priority,
86 | IN OUT UINTN *TableSize, // MaxCount * sizeof(BBS_TABLE_ENTRY)
87 | OUT BBS_TABLE_ENTRY *TableEntrySize
88 | );
89 |
90 | //
91 | // == PnP Function 0x63
92 | //
93 | typedef
94 | EFI_STATUS
95 | (EFIAPI *SET_PRIORITY) (
96 | IN struct _LEGACY_BOOT_INTERFACE *This,
97 | IN BBS_TYPE *TableType,
98 | IN OUT UINTN *PrioritySize,
99 | OUT UINTN *Priority
100 | );
101 |
102 | typedef struct _LEGACY_BOOT_INTERFACE {
103 | LEGACY_BOOT_CALL BootIt;
104 |
105 | //
106 | // New functions to allow BBS booting to be configured from EFI
107 | //
108 | UINTN BbsVersion; // Currently 0x0101
109 | GET_DEVICE_COUNT GetDeviceCount;
110 | GET_PRIORITY_AND_TABLE GetPriorityAndTable;
111 | SET_PRIORITY SetPriority;
112 | } LEGACY_BOOT_INTERFACE;
113 |
114 | EFI_STATUS
115 | PlInitializeLegacyBoot (
116 | VOID
117 | );
118 |
119 | #endif
120 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/efifs.h:
--------------------------------------------------------------------------------
1 | #ifndef _EFI_FS_H
2 | #define _EFI_FS_H
3 |
4 | /*++
5 |
6 | Copyright (c) 1998 Intel Corporation
7 |
8 | Module Name:
9 |
10 | efifs.h
11 |
12 | Abstract:
13 |
14 | EFI File System structures
15 |
16 |
17 |
18 | Revision History
19 |
20 | --*/
21 |
22 |
23 | //
24 | // EFI Partition header (normaly starts in LBA 1)
25 | //
26 |
27 | #define EFI_PARTITION_SIGNATURE 0x5053595320494249
28 | #define EFI_PARTITION_REVISION 0x00010001
29 | #define MIN_EFI_PARTITION_BLOCK_SIZE 512
30 | #define EFI_PARTITION_LBA 1
31 |
32 | typedef struct _EFI_PARTITION_HEADER {
33 | EFI_TABLE_HEADER Hdr;
34 | UINT32 DirectoryAllocationNumber;
35 | UINT32 BlockSize;
36 | EFI_LBA FirstUsableLba;
37 | EFI_LBA LastUsableLba;
38 | EFI_LBA UnusableSpace;
39 | EFI_LBA FreeSpace;
40 | EFI_LBA RootFile;
41 | EFI_LBA SecutiryFile;
42 | } EFI_PARTITION_HEADER;
43 |
44 |
45 | //
46 | // File header
47 | //
48 |
49 | #define EFI_FILE_HEADER_SIGNATURE 0x454c494620494249
50 | #define EFI_FILE_HEADER_REVISION 0x00010000
51 | #define EFI_FILE_STRING_SIZE 260
52 |
53 | typedef struct _EFI_FILE_HEADER {
54 | EFI_TABLE_HEADER Hdr;
55 | UINT32 Class;
56 | UINT32 LBALOffset;
57 | EFI_LBA Parent;
58 | UINT64 FileSize;
59 | UINT64 FileAttributes;
60 | EFI_TIME FileCreateTime;
61 | EFI_TIME FileModificationTime;
62 | EFI_GUID VendorGuid;
63 | CHAR16 FileString[EFI_FILE_STRING_SIZE];
64 | } EFI_FILE_HEADER;
65 |
66 |
67 | //
68 | // Return the file's first LBAL which is in the same
69 | // logical block as the file header
70 | //
71 |
72 | #define EFI_FILE_LBAL(a) ((EFI_LBAL *) (((CHAR8 *) (a)) + (a)->LBALOffset))
73 |
74 | #define EFI_FILE_CLASS_FREE_SPACE 1
75 | #define EFI_FILE_CLASS_EMPTY 2
76 | #define EFI_FILE_CLASS_NORMAL 3
77 |
78 |
79 | //
80 | // Logical Block Address List - the fundemental block
81 | // description structure
82 | //
83 |
84 | #define EFI_LBAL_SIGNATURE 0x4c41424c20494249
85 | #define EFI_LBAL_REVISION 0x00010000
86 |
87 | typedef struct _EFI_LBAL {
88 | EFI_TABLE_HEADER Hdr;
89 | UINT32 Class;
90 | EFI_LBA Parent;
91 | EFI_LBA Next;
92 | UINT32 ArraySize;
93 | UINT32 ArrayCount;
94 | } EFI_LBAL;
95 |
96 | // Array size
97 | #define EFI_LBAL_ARRAY_SIZE(lbal,offs,blks) \
98 | (((blks) - (offs) - (lbal)->Hdr.HeaderSize) / sizeof(EFI_RL))
99 |
100 | //
101 | // Logical Block run-length
102 | //
103 |
104 | typedef struct {
105 | EFI_LBA Start;
106 | UINT64 Length;
107 | } EFI_RL;
108 |
109 | //
110 | // Return the run-length structure from an LBAL header
111 | //
112 |
113 | #define EFI_LBAL_RL(a) ((EFI_RL*) (((CHAR8 *) (a)) + (a)->Hdr.HeaderSize))
114 |
115 | #endif
116 |
117 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/Makefile.orig:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright (C) 1999-2001 Hewlett-Packard Co.
3 | # Contributed by David Mosberger
4 | # Contributed by Stephane Eranian
5 | #
6 | # All rights reserved.
7 | #
8 | # Redistribution and use in source and binary forms, with or without
9 | # modification, are permitted provided that the following conditions
10 | # are met:
11 | #
12 | # * Redistributions of source code must retain the above copyright
13 | # notice, this list of conditions and the following disclaimer.
14 | # * Redistributions in binary form must reproduce the above
15 | # copyright notice, this list of conditions and the following
16 | # disclaimer in the documentation and/or other materials
17 | # provided with the distribution.
18 | # * Neither the name of Hewlett-Packard Co. nor the names of its
19 | # contributors may be used to endorse or promote products derived
20 | # from this software without specific prior written permission.
21 | #
22 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
23 | # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
24 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26 | # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
27 | # BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
28 | # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30 | # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31 | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
32 | # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
33 | # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 | # SUCH DAMAGE.
35 | #
36 |
37 | SRCDIR = .
38 |
39 | VPATH = $(SRCDIR)
40 |
41 | include $(SRCDIR)/../Make.defaults
42 |
43 | TOPDIR = $(SRCDIR)/..
44 |
45 | CDIR = $(TOPDIR)/..
46 | FILES = boxdraw smbios console crc data debug dpath \
47 | error event guid hand hw init lock \
48 | misc print sread str cmdline \
49 | runtime/rtlock runtime/efirtlib runtime/rtstr runtime/vm runtime/rtdata \
50 | $(ARCH)/initplat $(ARCH)/math
51 |
52 | ifeq ($(ARCH),ia64)
53 | FILES += $(ARCH)/salpal $(ARCH)/palproc
54 | endif
55 |
56 | ifeq ($(ARCH),x86_64)
57 | FILES += $(ARCH)/callwrap $(ARCH)/efi_stub
58 | endif
59 |
60 | ifeq ($(ARCH),arm)
61 | FILES += $(ARCH)/lib1funcs $(ARCH)/div64
62 | endif
63 |
64 | OBJS = $(FILES:%=%.o)
65 |
66 | SUBDIRS = ia32 x86_64 ia64 aarch64 arm runtime
67 |
68 | LIBDIRINSTALL = $(INSTALLROOT)$(LIBDIR)
69 |
70 | all: libsubdirs libefi.a
71 |
72 | .PHONY: libsubdirs
73 | libsubdirs:
74 | for sdir in $(SUBDIRS); do mkdir -p $$sdir; done
75 |
76 | libefi.a: $(patsubst %,libefi.a(%),$(OBJS))
77 |
78 | clean:
79 | rm -f libefi.a *~ $(OBJS) */*.o
80 |
81 | $(LIBDIRINSTALL):
82 | mkdir -p $@
83 |
84 | $(LIBDIRINSTALL)/libefi.a: libefi.a | $(LIBDIRINSTALL)
85 | $(INSTALL) -m 644 $< $(dir $@)
86 |
87 | install: $(LIBDIRINSTALL)/libefi.a
88 |
89 | include $(SRCDIR)/../Make.rules
90 |
91 | .PHONY: libsubdirs
92 |
--------------------------------------------------------------------------------
/src/gnu-efi/gnuefi/reloc_arm.c:
--------------------------------------------------------------------------------
1 | /* reloc_arm.c - position independent x86 ELF shared object relocator
2 | Copyright (C) 2014 Linaro Ltd.
3 | Copyright (C) 1999 Hewlett-Packard Co.
4 | Contributed by David Mosberger .
5 |
6 | All rights reserved.
7 |
8 | Redistribution and use in source and binary forms, with or without
9 | modification, are permitted provided that the following conditions
10 | are met:
11 |
12 | * Redistributions of source code must retain the above copyright
13 | notice, this list of conditions and the following disclaimer.
14 | * Redistributions in binary form must reproduce the above
15 | copyright notice, this list of conditions and the following
16 | disclaimer in the documentation and/or other materials
17 | provided with the distribution.
18 | * Neither the name of Hewlett-Packard Co. nor the names of its
19 | contributors may be used to endorse or promote products derived
20 | from this software without specific prior written permission.
21 |
22 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
23 | CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
24 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
27 | BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
28 | OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29 | PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30 | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
32 | TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
33 | THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 | SUCH DAMAGE.
35 | */
36 |
37 | #include
38 | #include
39 |
40 | #include
41 |
42 | EFI_STATUS _relocate (long ldbase, Elf32_Dyn *dyn,
43 | EFI_HANDLE image EFI_UNUSED,
44 | EFI_SYSTEM_TABLE *systab EFI_UNUSED)
45 | {
46 | long relsz = 0, relent = 0;
47 | Elf32_Rel *rel = 0;
48 | unsigned long *addr;
49 | int i;
50 |
51 | for (i = 0; dyn[i].d_tag != DT_NULL; ++i) {
52 | switch (dyn[i].d_tag) {
53 | case DT_REL:
54 | rel = (Elf32_Rel*)
55 | ((unsigned long)dyn[i].d_un.d_ptr
56 | + ldbase);
57 | break;
58 |
59 | case DT_RELSZ:
60 | relsz = dyn[i].d_un.d_val;
61 | break;
62 |
63 | case DT_RELENT:
64 | relent = dyn[i].d_un.d_val;
65 | break;
66 |
67 | default:
68 | break;
69 | }
70 | }
71 |
72 | if (!rel && relent == 0)
73 | return EFI_SUCCESS;
74 |
75 | if (!rel || relent == 0)
76 | return EFI_LOAD_ERROR;
77 |
78 | while (relsz > 0) {
79 | /* apply the relocs */
80 | switch (ELF32_R_TYPE (rel->r_info)) {
81 | case R_ARM_NONE:
82 | break;
83 |
84 | case R_ARM_RELATIVE:
85 | addr = (unsigned long *)
86 | (ldbase + rel->r_offset);
87 | *addr += ldbase;
88 | break;
89 |
90 | default:
91 | break;
92 | }
93 | rel = (Elf32_Rel*) ((char *) rel + relent);
94 | relsz -= relent;
95 | }
96 | return EFI_SUCCESS;
97 | }
98 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/Makefile:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright (C) 1999-2001 Hewlett-Packard Co.
3 | # Contributed by David Mosberger
4 | # Contributed by Stephane Eranian
5 | #
6 | # All rights reserved.
7 | #
8 | # Redistribution and use in source and binary forms, with or without
9 | # modification, are permitted provided that the following conditions
10 | # are met:
11 | #
12 | # * Redistributions of source code must retain the above copyright
13 | # notice, this list of conditions and the following disclaimer.
14 | # * Redistributions in binary form must reproduce the above
15 | # copyright notice, this list of conditions and the following
16 | # disclaimer in the documentation and/or other materials
17 | # provided with the distribution.
18 | # * Neither the name of Hewlett-Packard Co. nor the names of its
19 | # contributors may be used to endorse or promote products derived
20 | # from this software without specific prior written permission.
21 | #
22 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
23 | # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
24 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26 | # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
27 | # BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
28 | # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30 | # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31 | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
32 | # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
33 | # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 | # SUCH DAMAGE.
35 | #
36 |
37 | SRCDIR = .
38 |
39 | VPATH = $(SRCDIR)
40 |
41 | include $(SRCDIR)/../Make.defaults
42 |
43 | TOPDIR = $(SRCDIR)/..
44 |
45 | CDIR = $(TOPDIR)/..
46 | FILES = boxdraw smbios console crc data debug dpath \
47 | error event guid hand hw init lock \
48 | misc print sread str cmdline \
49 | runtime/rtlock runtime/efirtlib runtime/rtstr runtime/vm runtime/rtdata \
50 | $(ARCH)/initplat $(ARCH)/math $(ARCH)/setjmp
51 |
52 | ifeq ($(ARCH),ia64)
53 | FILES += $(ARCH)/salpal $(ARCH)/palproc
54 | endif
55 |
56 | ifeq ($(ARCH),x86_64)
57 | FILES += $(ARCH)/callwrap $(ARCH)/efi_stub
58 | endif
59 |
60 | ifeq ($(ARCH),arm)
61 | FILES += $(ARCH)/uldiv $(ARCH)/ldivmod $(ARCH)/div $(ARCH)/llsl $(ARCH)/llsr \
62 | $(ARCH)/mullu
63 | endif
64 |
65 | OBJS = $(FILES:%=%.o)
66 |
67 | SUBDIRS = ia32 x86_64 ia64 aarch64 arm runtime
68 |
69 | LIBDIRINSTALL = $(INSTALLROOT)$(LIBDIR)
70 |
71 | all: libsubdirs libefi.a
72 |
73 | .PHONY: libsubdirs
74 | libsubdirs:
75 | for sdir in $(SUBDIRS); do mkdir -p $$sdir; done
76 |
77 | libefi.a: $(patsubst %,libefi.a(%),$(OBJS))
78 |
79 | clean:
80 | rm -f libefi.a *~ $(OBJS) */*.o
81 |
82 | $(LIBDIRINSTALL):
83 | mkdir -p $@
84 |
85 | $(LIBDIRINSTALL)/libefi.a: libefi.a | $(LIBDIRINSTALL)
86 | $(INSTALL) -m 644 $< $(dir $@)
87 |
88 | install: $(LIBDIRINSTALL)/libefi.a
89 |
90 | include $(SRCDIR)/../Make.rules
91 |
92 | .PHONY: libsubdirs
93 |
--------------------------------------------------------------------------------
/src/gnu-efi/gnuefi/reloc_aarch64.c:
--------------------------------------------------------------------------------
1 | /* reloc_aarch64.c - position independent x86 ELF shared object relocator
2 | Copyright (C) 2014 Linaro Ltd.
3 | Copyright (C) 1999 Hewlett-Packard Co.
4 | Contributed by David Mosberger .
5 |
6 | All rights reserved.
7 |
8 | Redistribution and use in source and binary forms, with or without
9 | modification, are permitted provided that the following conditions
10 | are met:
11 |
12 | * Redistributions of source code must retain the above copyright
13 | notice, this list of conditions and the following disclaimer.
14 | * Redistributions in binary form must reproduce the above
15 | copyright notice, this list of conditions and the following
16 | disclaimer in the documentation and/or other materials
17 | provided with the distribution.
18 | * Neither the name of Hewlett-Packard Co. nor the names of its
19 | contributors may be used to endorse or promote products derived
20 | from this software without specific prior written permission.
21 |
22 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
23 | CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
24 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
27 | BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
28 | OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29 | PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30 | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
32 | TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
33 | THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 | SUCH DAMAGE.
35 | */
36 |
37 | #include
38 | #include
39 |
40 | #include
41 |
42 | EFI_STATUS _relocate (long ldbase, Elf64_Dyn *dyn,
43 | EFI_HANDLE image EFI_UNUSED,
44 | EFI_SYSTEM_TABLE *systab EFI_UNUSED)
45 | {
46 | long relsz = 0, relent = 0;
47 | Elf64_Rela *rel = 0;
48 | unsigned long *addr;
49 | int i;
50 |
51 | for (i = 0; dyn[i].d_tag != DT_NULL; ++i) {
52 | switch (dyn[i].d_tag) {
53 | case DT_RELA:
54 | rel = (Elf64_Rela*)
55 | ((unsigned long)dyn[i].d_un.d_ptr
56 | + ldbase);
57 | break;
58 |
59 | case DT_RELASZ:
60 | relsz = dyn[i].d_un.d_val;
61 | break;
62 |
63 | case DT_RELAENT:
64 | relent = dyn[i].d_un.d_val;
65 | break;
66 |
67 | default:
68 | break;
69 | }
70 | }
71 |
72 | if (!rel && relent == 0)
73 | return EFI_SUCCESS;
74 |
75 | if (!rel || relent == 0)
76 | return EFI_LOAD_ERROR;
77 |
78 | while (relsz > 0) {
79 | /* apply the relocs */
80 | switch (ELF64_R_TYPE (rel->r_info)) {
81 | case R_AARCH64_NONE:
82 | break;
83 |
84 | case R_AARCH64_RELATIVE:
85 | addr = (unsigned long *)
86 | (ldbase + rel->r_offset);
87 | *addr = ldbase + rel->r_addend;
88 | break;
89 |
90 | default:
91 | break;
92 | }
93 | rel = (Elf64_Rela*) ((char *) rel + relent);
94 | relsz -= relent;
95 | }
96 | return EFI_SUCCESS;
97 | }
98 |
--------------------------------------------------------------------------------
/src/gnu-efi/gnuefi/reloc_x86_64.c:
--------------------------------------------------------------------------------
1 | /* reloc_x86_64.c - position independent x86_64 ELF shared object relocator
2 | Copyright (C) 1999 Hewlett-Packard Co.
3 | Contributed by David Mosberger .
4 | Copyright (C) 2005 Intel Co.
5 | Contributed by Fenghua Yu .
6 |
7 | All rights reserved.
8 |
9 | Redistribution and use in source and binary forms, with or without
10 | modification, are permitted provided that the following conditions
11 | are met:
12 |
13 | * Redistributions of source code must retain the above copyright
14 | notice, this list of conditions and the following disclaimer.
15 | * Redistributions in binary form must reproduce the above
16 | copyright notice, this list of conditions and the following
17 | disclaimer in the documentation and/or other materials
18 | provided with the distribution.
19 | * Neither the name of Hewlett-Packard Co. nor the names of its
20 | contributors may be used to endorse or promote products derived
21 | from this software without specific prior written permission.
22 |
23 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
24 | CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
25 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
26 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
28 | BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
29 | OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
30 | PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
31 | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
33 | TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
34 | THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 | SUCH DAMAGE.
36 | */
37 |
38 | #include
39 | #include
40 |
41 | #include
42 |
43 | EFI_STATUS _relocate (long ldbase, Elf64_Dyn *dyn,
44 | EFI_HANDLE image EFI_UNUSED,
45 | EFI_SYSTEM_TABLE *systab EFI_UNUSED)
46 | {
47 | long relsz = 0, relent = 0;
48 | Elf64_Rel *rel = 0;
49 | unsigned long *addr;
50 | int i;
51 |
52 | for (i = 0; dyn[i].d_tag != DT_NULL; ++i) {
53 | switch (dyn[i].d_tag) {
54 | case DT_RELA:
55 | rel = (Elf64_Rel*)
56 | ((unsigned long)dyn[i].d_un.d_ptr
57 | + ldbase);
58 | break;
59 |
60 | case DT_RELASZ:
61 | relsz = dyn[i].d_un.d_val;
62 | break;
63 |
64 | case DT_RELAENT:
65 | relent = dyn[i].d_un.d_val;
66 | break;
67 |
68 | default:
69 | break;
70 | }
71 | }
72 |
73 | if (!rel && relent == 0)
74 | return EFI_SUCCESS;
75 |
76 | if (!rel || relent == 0)
77 | return EFI_LOAD_ERROR;
78 |
79 | while (relsz > 0) {
80 | /* apply the relocs */
81 | switch (ELF64_R_TYPE (rel->r_info)) {
82 | case R_X86_64_NONE:
83 | break;
84 |
85 | case R_X86_64_RELATIVE:
86 | addr = (unsigned long *)
87 | (ldbase + rel->r_offset);
88 | *addr += ldbase;
89 | break;
90 |
91 | default:
92 | break;
93 | }
94 | rel = (Elf64_Rel*) ((char *) rel + relent);
95 | relsz -= relent;
96 | }
97 | return EFI_SUCCESS;
98 | }
99 |
--------------------------------------------------------------------------------
/src/gnu-efi/gnuefi/reloc_ia32.c:
--------------------------------------------------------------------------------
1 | /* reloc_ia32.c - position independent x86 ELF shared object relocator
2 | Copyright (C) 1999 Hewlett-Packard Co.
3 | Contributed by David Mosberger .
4 |
5 | All rights reserved.
6 |
7 | Redistribution and use in source and binary forms, with or without
8 | modification, are permitted provided that the following conditions
9 | are met:
10 |
11 | * Redistributions of source code must retain the above copyright
12 | notice, this list of conditions and the following disclaimer.
13 | * Redistributions in binary form must reproduce the above
14 | copyright notice, this list of conditions and the following
15 | disclaimer in the documentation and/or other materials
16 | provided with the distribution.
17 | * Neither the name of Hewlett-Packard Co. nor the names of its
18 | contributors may be used to endorse or promote products derived
19 | from this software without specific prior written permission.
20 |
21 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
22 | CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
23 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
24 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
26 | BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
27 | OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
28 | PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29 | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
31 | TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
32 | THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 | SUCH DAMAGE.
34 | */
35 |
36 | #include
37 | #include
38 |
39 | #include
40 |
41 | EFI_STATUS _relocate (long ldbase, Elf32_Dyn *dyn,
42 | EFI_HANDLE image EFI_UNUSED,
43 | EFI_SYSTEM_TABLE *systab EFI_UNUSED)
44 | {
45 | long relsz = 0, relent = 0;
46 | Elf32_Rel *rel = 0;
47 | unsigned long *addr;
48 | int i;
49 |
50 | for (i = 0; dyn[i].d_tag != DT_NULL; ++i) {
51 | switch (dyn[i].d_tag) {
52 | case DT_REL:
53 | rel = (Elf32_Rel*)
54 | ((unsigned long)dyn[i].d_un.d_ptr
55 | + ldbase);
56 | break;
57 |
58 | case DT_RELSZ:
59 | relsz = dyn[i].d_un.d_val;
60 | break;
61 |
62 | case DT_RELENT:
63 | relent = dyn[i].d_un.d_val;
64 | break;
65 |
66 | case DT_RELA:
67 | break;
68 |
69 | default:
70 | break;
71 | }
72 | }
73 |
74 | if (!rel && relent == 0)
75 | return EFI_SUCCESS;
76 |
77 | if (!rel || relent == 0)
78 | return EFI_LOAD_ERROR;
79 |
80 | while (relsz > 0) {
81 | /* apply the relocs */
82 | switch (ELF32_R_TYPE (rel->r_info)) {
83 | case R_386_NONE:
84 | break;
85 |
86 | case R_386_RELATIVE:
87 | addr = (unsigned long *)
88 | (ldbase + rel->r_offset);
89 | *addr += ldbase;
90 | break;
91 |
92 | default:
93 | break;
94 | }
95 | rel = (Elf32_Rel*) ((char *) rel + relent);
96 | relsz -= relent;
97 | }
98 | return EFI_SUCCESS;
99 | }
100 |
--------------------------------------------------------------------------------
/src/gnu-efi/apps/Makefile:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright (C) 1999-2001 Hewlett-Packard Co.
3 | # Contributed by David Mosberger
4 | # Contributed by Stephane Eranian
5 | #
6 | # All rights reserved.
7 | #
8 | # Redistribution and use in source and binary forms, with or without
9 | # modification, are permitted provided that the following conditions
10 | # are met:
11 | #
12 | # * Redistributions of source code must retain the above copyright
13 | # notice, this list of conditions and the following disclaimer.
14 | # * Redistributions in binary form must reproduce the above
15 | # copyright notice, this list of conditions and the following
16 | # disclaimer in the documentation and/or other materials
17 | # provided with the distribution.
18 | # * Neither the name of Hewlett-Packard Co. nor the names of its
19 | # contributors may be used to endorse or promote products derived
20 | # from this software without specific prior written permission.
21 | #
22 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
23 | # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
24 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26 | # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
27 | # BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
28 | # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30 | # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31 | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
32 | # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
33 | # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 | # SUCH DAMAGE.
35 | #
36 |
37 | SRCDIR = .
38 |
39 | VPATH = $(SRCDIR)
40 |
41 | include $(SRCDIR)/../Make.defaults
42 |
43 | TOPDIR = $(SRCDIR)/..
44 |
45 | CDIR=$(TOPDIR)/..
46 | LINUX_HEADERS = /usr/src/sys/build
47 | CPPFLAGS += -D__KERNEL__ -I$(LINUX_HEADERS)/include
48 | CRTOBJS = ../gnuefi/crt0-efi-$(ARCH).o
49 |
50 | LDSCRIPT = $(TOPDIR)/gnuefi/elf_$(ARCH)_efi.lds
51 | ifneq (,$(findstring FreeBSD,$(OS)))
52 | LDSCRIPT = $(TOPDIR)/gnuefi/elf_$(ARCH)_fbsd_efi.lds
53 | endif
54 |
55 | LDFLAGS += -shared -Bsymbolic -L../lib -L../gnuefi $(CRTOBJS)
56 |
57 | LOADLIBES += -lefi -lgnuefi
58 | LOADLIBES += $(LIBGCC)
59 | LOADLIBES += -T $(LDSCRIPT)
60 |
61 | TARGET_APPS = t.efi t2.efi t3.efi t4.efi t5.efi t6.efi \
62 | printenv.efi t7.efi t8.efi tcc.efi modelist.efi \
63 | route80h.efi drv0_use.efi AllocPages.efi \
64 | FreePages.efi setjmp.efi debughook.efi debughook.efi.debug
65 | TARGET_BSDRIVERS = drv0.efi
66 | TARGET_RTDRIVERS =
67 |
68 | ifneq ($(HAVE_EFI_OBJCOPY),)
69 |
70 | FORMAT := --target efi-app-$(ARCH)
71 | $(TARGET_BSDRIVERS): FORMAT=--target efi-bsdrv-$(ARCH)
72 | $(TARGET_RTDRIVERS): FORMAT=--target efi-rtdrv-$(ARCH)
73 |
74 | else
75 |
76 | SUBSYSTEM := 0xa
77 | $(TARGET_BSDRIVERS): SUBSYSTEM = 0xb
78 | $(TARGET_RTDRIVERS): SUBSYSTEM = 0xc
79 |
80 | FORMAT := -O binary
81 | LDFLAGS += --defsym=EFI_SUBSYSTEM=$(SUBSYSTEM)
82 |
83 | endif
84 |
85 | TARGETS = $(TARGET_APPS) $(TARGET_BSDRIVERS) $(TARGET_RTDRIVERS)
86 |
87 | all: $(TARGETS)
88 |
89 | clean:
90 | rm -f $(TARGETS) *~ *.o *.so
91 |
92 | .PHONY: install
93 |
94 | include $(SRCDIR)/../Make.rules
95 |
--------------------------------------------------------------------------------
/src/Bootp/Helpers.cs:
--------------------------------------------------------------------------------
1 | namespace dhcp
2 | {
3 | using System;
4 | using System.Collections.Generic;
5 | using System.IO;
6 | using System.Net;
7 | using System.Net.NetworkInformation;
8 | using System.Net.Sockets;
9 | using System.Reflection;
10 |
11 | public static class Helpers
12 | {
13 | public static IPAddress[] GetLocalIpAddresses(Boolean getIp6Adresses = false)
14 | {
15 | var localIpAddresses = new List();
16 |
17 | var networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
18 | if (networkInterfaces.Length > 0)
19 | {
20 | foreach (var networkInterface in networkInterfaces)
21 | {
22 | if (networkInterface.OperationalStatus != OperationalStatus.Up)
23 | {
24 | continue;
25 | }
26 |
27 | var properties = networkInterface.GetIPProperties();
28 |
29 | if (0 == properties.GatewayAddresses.Count)
30 | {
31 | continue;
32 | }
33 |
34 | foreach (var address in properties.UnicastAddresses)
35 | {
36 | var ipAddress = address.Address;
37 | if ((!getIp6Adresses && (AddressFamily.InterNetwork == ipAddress.AddressFamily)) || (getIp6Adresses && (AddressFamily.InterNetworkV6 == ipAddress.AddressFamily)))
38 | {
39 | localIpAddresses.Add(ipAddress);
40 | }
41 | }
42 | }
43 | }
44 |
45 | return localIpAddresses.ToArray();
46 | }
47 |
48 | public static IPAddress[] GetGatewayAddresses(IPAddress localIpAddress)
49 | {
50 | var gatewayAddresses = new List();
51 |
52 | var networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
53 | if (networkInterfaces.Length > 0)
54 | {
55 | foreach (var networkInterface in networkInterfaces)
56 | {
57 | var properties = networkInterface.GetIPProperties();
58 |
59 | foreach (var address in properties.UnicastAddresses)
60 | {
61 | if (address.Address.Equals(localIpAddress))
62 | {
63 | foreach (var gatewayAddress in properties.GatewayAddresses)
64 | {
65 | gatewayAddresses.Add(gatewayAddress.Address);
66 | }
67 | }
68 | }
69 | }
70 | }
71 |
72 | return gatewayAddresses.ToArray();
73 | }
74 |
75 | public static String GetExecutableDirectory()
76 | {
77 | return AppDomain.CurrentDomain.BaseDirectory;
78 | }
79 |
80 | public static String GetPathRelativeToExecutableDirectory(String relativeDirectory)
81 | {
82 | return Path.GetFullPath(Path.Combine(Helpers.GetExecutableDirectory(), relativeDirectory));
83 | }
84 |
85 | public static String GetApplicationVersion()
86 | {
87 | var parts = Assembly.GetExecutingAssembly().FullName.Split(',');
88 | return parts[1].Split('=')[1];
89 | }
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/libsmbios.h:
--------------------------------------------------------------------------------
1 | #ifndef _LIB_SMBIOS_H
2 | #define _LIB_SMBIOS_H
3 | /*++
4 |
5 | Copyright (c) 2000 Intel Corporation
6 |
7 | Module Name:
8 |
9 | LibSmbios.h
10 |
11 | Abstract:
12 |
13 | Lib include for SMBIOS services. Used to get system serial number and GUID
14 |
15 | Revision History
16 |
17 | --*/
18 |
19 | //
20 | // Define SMBIOS tables.
21 | //
22 | #pragma pack(1)
23 | typedef struct {
24 | UINT8 AnchorString[4];
25 | UINT8 EntryPointStructureChecksum;
26 | UINT8 EntryPointLength;
27 | UINT8 MajorVersion;
28 | UINT8 MinorVersion;
29 | UINT16 MaxStructureSize;
30 | UINT8 EntryPointRevision;
31 | UINT8 FormattedArea[5];
32 | UINT8 IntermediateAnchorString[5];
33 | UINT8 IntermediateChecksum;
34 | UINT16 TableLength;
35 | UINT32 TableAddress;
36 | UINT16 NumberOfSmbiosStructures;
37 | UINT8 SmbiosBcdRevision;
38 | } SMBIOS_STRUCTURE_TABLE;
39 |
40 | //
41 | // Please note that SMBIOS structures can be odd byte aligned since the
42 | // unformated section of each record is a set of arbitrary size strings.
43 | //
44 |
45 | typedef struct {
46 | UINT8 Type;
47 | UINT8 Length;
48 | UINT8 Handle[2];
49 | } SMBIOS_HEADER;
50 |
51 | typedef UINT8 SMBIOS_STRING;
52 |
53 | typedef struct {
54 | SMBIOS_HEADER Hdr;
55 | SMBIOS_STRING Vendor;
56 | SMBIOS_STRING BiosVersion;
57 | UINT8 BiosSegment[2];
58 | SMBIOS_STRING BiosReleaseDate;
59 | UINT8 BiosSize;
60 | UINT8 BiosCharacteristics[8];
61 | } SMBIOS_TYPE0;
62 |
63 | typedef struct {
64 | SMBIOS_HEADER Hdr;
65 | SMBIOS_STRING Manufacturer;
66 | SMBIOS_STRING ProductName;
67 | SMBIOS_STRING Version;
68 | SMBIOS_STRING SerialNumber;
69 |
70 | //
71 | // always byte copy this data to prevent alignment faults!
72 | //
73 | EFI_GUID Uuid;
74 |
75 | UINT8 WakeUpType;
76 | } SMBIOS_TYPE1;
77 |
78 | typedef struct {
79 | SMBIOS_HEADER Hdr;
80 | SMBIOS_STRING Manufacturer;
81 | SMBIOS_STRING ProductName;
82 | SMBIOS_STRING Version;
83 | SMBIOS_STRING SerialNumber;
84 | } SMBIOS_TYPE2;
85 |
86 | typedef struct {
87 | SMBIOS_HEADER Hdr;
88 | SMBIOS_STRING Manufacturer;
89 | UINT8 Type;
90 | SMBIOS_STRING Version;
91 | SMBIOS_STRING SerialNumber;
92 | SMBIOS_STRING AssetTag;
93 | UINT8 BootupState;
94 | UINT8 PowerSupplyState;
95 | UINT8 ThermalState;
96 | UINT8 SecurityStatus;
97 | UINT8 OemDefined[4];
98 | } SMBIOS_TYPE3;
99 |
100 | typedef struct {
101 | SMBIOS_HEADER Hdr;
102 | UINT8 Socket;
103 | UINT8 ProcessorType;
104 | UINT8 ProcessorFamily;
105 | SMBIOS_STRING ProcessorManufacture;
106 | UINT8 ProcessorId[8];
107 | SMBIOS_STRING ProcessorVersion;
108 | UINT8 Voltage;
109 | UINT8 ExternalClock[2];
110 | UINT8 MaxSpeed[2];
111 | UINT8 CurrentSpeed[2];
112 | UINT8 Status;
113 | UINT8 ProcessorUpgrade;
114 | UINT8 L1CacheHandle[2];
115 | UINT8 L2CacheHandle[2];
116 | UINT8 L3CacheHandle[2];
117 | } SMBIOS_TYPE4;
118 |
119 | typedef union {
120 | SMBIOS_HEADER *Hdr;
121 | SMBIOS_TYPE0 *Type0;
122 | SMBIOS_TYPE1 *Type1;
123 | SMBIOS_TYPE2 *Type2;
124 | SMBIOS_TYPE3 *Type3;
125 | SMBIOS_TYPE4 *Type4;
126 | UINT8 *Raw;
127 | } SMBIOS_STRUCTURE_POINTER;
128 | #pragma pack()
129 |
130 |
131 | #endif
132 |
133 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/efipoint.h:
--------------------------------------------------------------------------------
1 | /* Copyright (C) 2014 by John Cronin
2 | *
3 | * Permission is hereby granted, free of charge, to any person obtaining a copy
4 | * of this software and associated documentation files (the "Software"), to deal
5 | * in the Software without restriction, including without limitation the rights
6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | * copies of the Software, and to permit persons to whom the Software is
8 | * furnished to do so, subject to the following conditions:
9 |
10 | * The above copyright notice and this permission notice shall be included in
11 | * all copies or substantial portions of the Software.
12 |
13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | * THE SOFTWARE.
20 | */
21 |
22 | #ifndef _EFI_POINT_H
23 | #define _EFI_POINT_H
24 |
25 | #define EFI_SIMPLE_POINTER_PROTOCOL_GUID \
26 | { 0x31878c87, 0xb75, 0x11d5, { 0x9a, 0x4f, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
27 |
28 | INTERFACE_DECL(_EFI_SIMPLE_POINTER);
29 |
30 | typedef struct {
31 | INT32 RelativeMovementX;
32 | INT32 RelativeMovementY;
33 | INT32 RelativeMovementZ;
34 | BOOLEAN LeftButton;
35 | BOOLEAN RightButton;
36 | } EFI_SIMPLE_POINTER_STATE;
37 |
38 | typedef struct {
39 | UINT64 ResolutionX;
40 | UINT64 ResolutionY;
41 | UINT64 ResolutionZ;
42 | BOOLEAN LeftButton;
43 | BOOLEAN RightButton;
44 | } EFI_SIMPLE_POINTER_MODE;
45 |
46 | typedef
47 | EFI_STATUS
48 | (EFIAPI *EFI_SIMPLE_POINTER_RESET) (
49 | IN struct _EFI_SIMPLE_POINTER *This,
50 | IN BOOLEAN ExtendedVerification
51 | );
52 |
53 | typedef
54 | EFI_STATUS
55 | (EFIAPI *EFI_SIMPLE_POINTER_GET_STATE) (
56 | IN struct _EFI_SIMPLE_POINTER *This,
57 | IN OUT EFI_SIMPLE_POINTER_STATE *State
58 | );
59 |
60 | typedef struct _EFI_SIMPLE_POINTER {
61 | EFI_SIMPLE_POINTER_RESET Reset;
62 | EFI_SIMPLE_POINTER_GET_STATE GetState;
63 | EFI_EVENT WaitForInput;
64 | EFI_SIMPLE_POINTER_MODE *Mode;
65 | } EFI_SIMPLE_POINTER_PROTOCOL;
66 |
67 | #define EFI_ABSOLUTE_POINTER_PROTOCOL_GUID \
68 | { 0x8D59D32B, 0xC655, 0x4AE9, { 0x9B, 0x15, 0xF2, 0x59, 0x04, 0x99, 0x2A, 0x43 } }
69 |
70 | INTERFACE_DECL(_EFI_ABSOLUTE_POINTER_PROTOCOL);
71 |
72 | typedef struct {
73 | UINT64 AbsoluteMinX;
74 | UINT64 AbsoluteMinY;
75 | UINT64 AbsoluteMinZ;
76 | UINT64 AbsoluteMaxX;
77 | UINT64 AbsoluteMaxY;
78 | UINT64 AbsoluteMaxZ;
79 | UINT32 Attributes;
80 | } EFI_ABSOLUTE_POINTER_MODE;
81 |
82 | typedef struct {
83 | UINT64 CurrentX;
84 | UINT64 CurrentY;
85 | UINT64 CurrentZ;
86 | UINT32 ActiveButtons;
87 | } EFI_ABSOLUTE_POINTER_STATE;
88 |
89 | #define EFI_ABSP_SupportsAltActive 0x00000001
90 | #define EFI_ABSP_SupportsPressureAsZ 0x00000002
91 | #define EFI_ABSP_TouchActive 0x00000001
92 | #define EFI_ABS_AltActive 0x00000002
93 |
94 | typedef
95 | EFI_STATUS
96 | (EFIAPI *EFI_ABSOLUTE_POINTER_RESET) (
97 | IN struct _EFI_ABSOLUTE_POINTER_PROTOCOL *This,
98 | IN BOOLEAN ExtendedVerification
99 | );
100 |
101 | typedef
102 | EFI_STATUS
103 | (EFIAPI *EFI_ABSOLUTE_POINTER_GET_STATE) (
104 | IN struct _EFI_ABSOLUTE_POINTER_PROTOCOL *This,
105 | IN OUT EFI_ABSOLUTE_POINTER_STATE *State
106 | );
107 |
108 | typedef struct _EFI_ABSOLUTE_POINTER_PROTOCOL {
109 | EFI_ABSOLUTE_POINTER_RESET Reset;
110 | EFI_ABSOLUTE_POINTER_GET_STATE GetState;
111 | EFI_EVENT WaitForInput;
112 | EFI_ABSOLUTE_POINTER_MODE *Mode;
113 | } EFI_ABSOLUTE_POINTER_PROTOCOL;
114 |
115 | #endif
116 |
--------------------------------------------------------------------------------
/src/Bootp/Bootp.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {B6DD317F-149A-4B7B-B61E-61ADF70153D8}
8 | Exe
9 | Properties
10 | Bootp
11 | Bootp
12 | v4.5
13 | 512
14 |
15 |
16 | $(SolutionDir)..\obj\
17 | $(SolutionDir)..\bin\
18 |
19 |
20 | AnyCPU
21 | true
22 | full
23 | false
24 | ..\..\bin\Debug\
25 | DEBUG;TRACE
26 | prompt
27 | 4
28 |
29 |
30 | AnyCPU
31 | pdbonly
32 | true
33 | ..\..\bin\Release\
34 | TRACE
35 | prompt
36 | 4
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
82 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/hw.c:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1998 Intel Corporation
4 |
5 | Module Name:
6 |
7 | hw.c
8 |
9 | Abstract:
10 |
11 | Debug library functions for Hardware IO access
12 |
13 |
14 |
15 | Revision History
16 |
17 | --*/
18 |
19 | #include "lib.h"
20 |
21 |
22 | EFI_STATUS
23 | InitializeGlobalIoDevice (
24 | IN EFI_DEVICE_PATH *DevicePath,
25 | IN EFI_GUID *Protocol,
26 | IN CHAR8 *ErrorStr EFI_UNUSED,
27 | OUT EFI_DEVICE_IO_INTERFACE **GlobalIoFncs
28 | )
29 | /*++
30 |
31 | Routine Description:
32 |
33 | Check to see if DevicePath exists for a given Protocol. Return Error if it
34 | exists. Return GlobalIoFuncs set match the DevicePath
35 |
36 | Arguments:
37 |
38 | DevicePath - to operate on
39 | Protocol - to check the DevicePath against
40 | ErrorStr - ASCII string to display on error
41 | GlobalIoFncs - Returned with DeviceIoProtocol for the DevicePath
42 |
43 | Returns:
44 |
45 | Pass or Fail based on wether GlobalIoFncs where found
46 |
47 | --*/
48 | {
49 | EFI_STATUS Status;
50 | EFI_HANDLE Handle;
51 |
52 | //
53 | // Check to see if this device path already has Protocol on it.
54 | // if so we are loading recursivly and should exit with an error
55 | //
56 | Status = uefi_call_wrapper(BS->LocateDevicePath, 3, Protocol, &DevicePath, &Handle);
57 | if (!EFI_ERROR(Status)) {
58 | DEBUG ((D_INIT, "Device Already Loaded for %a device\n", ErrorStr));
59 | return EFI_LOAD_ERROR;
60 | }
61 |
62 | Status = uefi_call_wrapper(BS->LocateDevicePath, 3, &DeviceIoProtocol, &DevicePath, &Handle);
63 | if (!EFI_ERROR(Status)) {
64 | Status = uefi_call_wrapper(BS->HandleProtocol, 3, Handle, &DeviceIoProtocol, (VOID*)GlobalIoFncs);
65 | }
66 |
67 | ASSERT (!EFI_ERROR(Status));
68 | return Status;
69 | }
70 |
71 | UINT32
72 | ReadPort (
73 | IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs,
74 | IN EFI_IO_WIDTH Width,
75 | IN UINTN Port
76 | )
77 | {
78 | UINT32 Data;
79 | EFI_STATUS Status EFI_UNUSED;
80 |
81 | Status = uefi_call_wrapper(GlobalIoFncs->Io.Read, 5, GlobalIoFncs, Width, (UINT64)Port, 1, &Data);
82 | ASSERT(!EFI_ERROR(Status));
83 | return Data;
84 | }
85 |
86 | UINT32
87 | WritePort (
88 | IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs,
89 | IN EFI_IO_WIDTH Width,
90 | IN UINTN Port,
91 | IN UINTN Data
92 | )
93 | {
94 | EFI_STATUS Status EFI_UNUSED;
95 |
96 | Status = uefi_call_wrapper(GlobalIoFncs->Io.Write, 5, GlobalIoFncs, Width, (UINT64)Port, 1, &Data);
97 | ASSERT(!EFI_ERROR(Status));
98 | return (UINT32)Data;
99 | }
100 |
101 | UINT32
102 | ReadPciConfig (
103 | IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs,
104 | IN EFI_IO_WIDTH Width,
105 | IN UINTN Address
106 | )
107 | {
108 | UINT32 Data;
109 | EFI_STATUS Status EFI_UNUSED;
110 |
111 | Status = uefi_call_wrapper(GlobalIoFncs->Pci.Read, 5, GlobalIoFncs, Width, (UINT64)Address, 1, &Data);
112 | ASSERT(!EFI_ERROR(Status));
113 | return Data;
114 | }
115 |
116 | UINT32
117 | WritePciConfig (
118 | IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs,
119 | IN EFI_IO_WIDTH Width,
120 | IN UINTN Address,
121 | IN UINTN Data
122 | )
123 | {
124 | EFI_STATUS Status EFI_UNUSED;
125 |
126 | Status = uefi_call_wrapper(GlobalIoFncs->Pci.Write, 5, GlobalIoFncs, Width, (UINT64)Address, 1, &Data);
127 | ASSERT(!EFI_ERROR(Status));
128 | return (UINT32)Data;
129 | }
130 |
131 |
132 |
133 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/event.c:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 1998 Intel Corporation
4 |
5 | Module Name:
6 |
7 | event.c
8 |
9 | Abstract:
10 |
11 |
12 |
13 |
14 | Revision History
15 |
16 | --*/
17 |
18 | #include "lib.h"
19 |
20 |
21 | EFI_EVENT
22 | LibCreateProtocolNotifyEvent (
23 | IN EFI_GUID *ProtocolGuid,
24 | IN EFI_TPL NotifyTpl,
25 | IN EFI_EVENT_NOTIFY NotifyFunction,
26 | IN VOID *NotifyContext,
27 | OUT VOID *Registration
28 | )
29 | {
30 | EFI_STATUS Status;
31 | EFI_EVENT Event;
32 |
33 | //
34 | // Create the event
35 | //
36 |
37 | Status = uefi_call_wrapper(
38 | BS->CreateEvent,
39 | 5,
40 | EVT_NOTIFY_SIGNAL,
41 | NotifyTpl,
42 | NotifyFunction,
43 | NotifyContext,
44 | &Event
45 | );
46 | if ( EFI_ERROR( Status ) ) return NULL ;
47 | ASSERT (!EFI_ERROR(Status));
48 |
49 | //
50 | // Register for protocol notifactions on this event
51 | //
52 |
53 | Status = uefi_call_wrapper(
54 | BS->RegisterProtocolNotify,
55 | 3,
56 | ProtocolGuid,
57 | Event,
58 | Registration
59 | );
60 | if ( EFI_ERROR( Status ) ) return NULL ;
61 | ASSERT (!EFI_ERROR(Status));
62 |
63 | //
64 | // Kick the event so we will perform an initial pass of
65 | // current installed drivers
66 | //
67 |
68 | uefi_call_wrapper(BS->SignalEvent, 1, Event);
69 | return Event;
70 | }
71 |
72 |
73 | EFI_STATUS
74 | WaitForSingleEvent (
75 | IN EFI_EVENT Event,
76 | IN UINT64 Timeout OPTIONAL
77 | )
78 | {
79 | EFI_STATUS Status;
80 | UINTN Index;
81 | EFI_EVENT TimerEvent;
82 | EFI_EVENT WaitList[2];
83 |
84 | if (Timeout) {
85 | //
86 | // Create a timer event
87 | //
88 |
89 | Status = uefi_call_wrapper(BS->CreateEvent, 5, EVT_TIMER, 0, NULL, NULL, &TimerEvent);
90 | if (!EFI_ERROR(Status)) {
91 |
92 | //
93 | // Set the timer event
94 | //
95 |
96 | uefi_call_wrapper(BS->SetTimer, 3, TimerEvent, TimerRelative, Timeout);
97 |
98 | //
99 | // Wait for the original event or the timer
100 | //
101 |
102 | WaitList[0] = Event;
103 | WaitList[1] = TimerEvent;
104 | Status = uefi_call_wrapper(BS->WaitForEvent, 3, 2, WaitList, &Index);
105 | uefi_call_wrapper(BS->CloseEvent, 1, TimerEvent);
106 |
107 | //
108 | // If the timer expired, change the return to timed out
109 | //
110 |
111 | if (!EFI_ERROR(Status) && Index == 1) {
112 | Status = EFI_TIMEOUT;
113 | }
114 | }
115 |
116 | } else {
117 |
118 | //
119 | // No timeout... just wait on the event
120 | //
121 |
122 | Status = uefi_call_wrapper(BS->WaitForEvent, 3, 1, &Event, &Index);
123 | ASSERT (!EFI_ERROR(Status));
124 | ASSERT (Index == 0);
125 | }
126 |
127 | return Status;
128 | }
129 |
130 | VOID
131 | WaitForEventWithTimeout (
132 | IN EFI_EVENT Event,
133 | IN UINTN Timeout,
134 | IN UINTN Row,
135 | IN UINTN Column,
136 | IN CHAR16 *String,
137 | IN EFI_INPUT_KEY TimeoutKey,
138 | OUT EFI_INPUT_KEY *Key
139 | )
140 | {
141 | EFI_STATUS Status;
142 |
143 | do {
144 | PrintAt (Column, Row, String, Timeout);
145 | Status = WaitForSingleEvent (Event, 10000000);
146 | if (Status == EFI_SUCCESS) {
147 | if (!EFI_ERROR(uefi_call_wrapper(ST->ConIn->ReadKeyStroke, 2, ST->ConIn, Key))) {
148 | return;
149 | }
150 | }
151 | } while (Timeout > 0);
152 | CopyMem(Key, &TimeoutKey, sizeof(EFI_INPUT_KEY));
153 | }
154 |
155 |
--------------------------------------------------------------------------------
/src/gnu-efi/apps/route80h.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | /* this example program changes the Reserved Page Route (RPR) bit on ICH10's General
5 | * Control And Status Register (GCS) from LPC to PCI. In practical terms, it routes
6 | * outb to port 80h to the PCI bus. */
7 |
8 | #define GCS_OFFSET_ADDR 0x3410
9 | #define GCS_RPR_SHIFT 2
10 | #define GCS_RPR_PCI 1
11 | #define GCS_RPR_LPC 0
12 |
13 | #define VENDOR_ID_INTEL 0x8086
14 | #define DEVICE_ID_LPCIF 0x3a16
15 | #define DEVICE_ID_COUGARPOINT_LPCIF 0x1c56
16 |
17 | static EFI_HANDLE ImageHandle;
18 |
19 | typedef struct {
20 | uint16_t vendor_id; /* 00-01 */
21 | uint16_t device_id; /* 02-03 */
22 | char pad[0xEB]; /* 04-EF */
23 | uint32_t rcba; /* F0-F3 */
24 | uint32_t reserved[3]; /* F4-FF */
25 | } lpcif_t;
26 |
27 | static inline void set_bit(volatile uint32_t *flag, int bit, int value)
28 | {
29 | uint32_t val = *flag;
30 | Print(L"current value is 0x%2x\n", val);
31 |
32 | if (value) {
33 | val |= (1 << bit);
34 | } else {
35 | val &= ~(1 << bit);
36 | }
37 | Print(L"setting value to 0x%2x\n", val);
38 | *flag = val;
39 | val = *flag;
40 | Print(L"new value is 0x%2x\n", val);
41 | }
42 |
43 | static inline int configspace_matches_ids(void *config, uint32_t vendor_id,
44 | uint32_t device_id)
45 | {
46 | uint32_t *cfg = config;
47 | if (cfg[0] == vendor_id && cfg[1] == device_id)
48 | return 1;
49 | return 0;
50 | }
51 |
52 | static int is_device(EFI_PCI_IO *pciio, uint16_t vendor_id, uint16_t device_id)
53 | {
54 | lpcif_t lpcif;
55 | EFI_STATUS rc;
56 |
57 | rc = uefi_call_wrapper(pciio->Pci.Read, 5, pciio, EfiPciIoWidthUint16, 0, 2, &lpcif);
58 | if (EFI_ERROR(rc))
59 | return 0;
60 |
61 | if (vendor_id == lpcif.vendor_id && device_id == lpcif.device_id)
62 | return 1;
63 | return 0;
64 | }
65 |
66 | static EFI_STATUS find_pci_device(uint16_t vendor_id, uint16_t device_id,
67 | EFI_PCI_IO **pciio)
68 | {
69 | EFI_STATUS rc;
70 | EFI_HANDLE *Handles;
71 | UINTN NoHandles, i;
72 |
73 | if (!pciio)
74 | return EFI_INVALID_PARAMETER;
75 |
76 | rc = LibLocateHandle(ByProtocol, &PciIoProtocol, NULL, &NoHandles,
77 | &Handles);
78 | if (EFI_ERROR(rc))
79 | return rc;
80 |
81 | for (i = 0; i < NoHandles; i++) {
82 | void *pciio_tmp = NULL;
83 | rc = uefi_call_wrapper(BS->OpenProtocol, 6, Handles[i],
84 | &PciIoProtocol, &pciio_tmp, ImageHandle,
85 | NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);
86 | if (EFI_ERROR(rc))
87 | continue;
88 | *pciio = pciio_tmp;
89 | if (!is_device(*pciio, vendor_id, device_id)) {
90 | *pciio = NULL;
91 | continue;
92 | }
93 |
94 | return EFI_SUCCESS;
95 | }
96 | return EFI_NOT_FOUND;
97 | }
98 |
99 | EFI_STATUS
100 | efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *systab)
101 | {
102 | InitializeLib(image_handle, systab);
103 | EFI_PCI_IO *pciio = NULL;
104 | lpcif_t lpcif;
105 | EFI_STATUS rc;
106 | struct {
107 | uint16_t vendor;
108 | uint16_t device;
109 | } devices[] = {
110 | { VENDOR_ID_INTEL, DEVICE_ID_LPCIF },
111 | { VENDOR_ID_INTEL, DEVICE_ID_COUGARPOINT_LPCIF },
112 | { 0, 0 }
113 | };
114 | int i;
115 |
116 | ImageHandle = image_handle;
117 | for (i = 0; devices[i].vendor != 0; i++) {
118 | rc = find_pci_device(devices[i].vendor, devices[i].device, &pciio);
119 | if (EFI_ERROR(rc))
120 | continue;
121 | }
122 |
123 | if (rc == EFI_NOT_FOUND) {
124 | Print(L"Device not found.\n");
125 | return rc;
126 | } else if (EFI_ERROR(rc)) {
127 | return rc;
128 | }
129 |
130 | rc = uefi_call_wrapper(pciio->Pci.Read, 5, pciio, EfiPciIoWidthUint32,
131 | EFI_FIELD_OFFSET(lpcif_t, rcba), 1, &lpcif.rcba);
132 | if (EFI_ERROR(rc))
133 | return rc;
134 | if (!(lpcif.rcba & 1)) {
135 | Print(L"rcrb is not mapped, cannot route port 80h\n");
136 | return EFI_UNSUPPORTED;
137 | }
138 | lpcif.rcba &= ~1UL;
139 |
140 | Print(L"rcba: 0x%8x\n", lpcif.rcba, lpcif.rcba);
141 | set_bit((uint32_t *)(uint64_t)(lpcif.rcba + GCS_OFFSET_ADDR),
142 | GCS_RPR_SHIFT, GCS_RPR_PCI);
143 |
144 | return EFI_SUCCESS;
145 | }
146 |
--------------------------------------------------------------------------------
/src/bootp.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 14
4 | VisualStudioVersion = 14.0.25420.1
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bootp", "Bootp\Bootp.csproj", "{B6DD317F-149A-4B7B-B61E-61ADF70153D8}"
7 | EndProject
8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "helloworld", "helloworld\helloworld.vcxproj", "{DFA0BA98-D0BA-4176-9A34-B5BA6355B1DE}"
9 | ProjectSection(ProjectDependencies) = postProject
10 | {3135D563-9596-4584-9ED6-616ADEC52974} = {3135D563-9596-4584-9ED6-616ADEC52974}
11 | {B6DD317F-149A-4B7B-B61E-61ADF70153D8} = {B6DD317F-149A-4B7B-B61E-61ADF70153D8}
12 | EndProjectSection
13 | EndProject
14 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gnu-efi", "gnu-efi-vcxproj\gnu-efi.vcxproj", "{3135D563-9596-4584-9ED6-616ADEC52974}"
15 | EndProject
16 | Global
17 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
18 | Debug|ARM = Debug|ARM
19 | Debug|x64 = Debug|x64
20 | Debug|x86 = Debug|x86
21 | Release|ARM = Release|ARM
22 | Release|x64 = Release|x64
23 | Release|x86 = Release|x86
24 | EndGlobalSection
25 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
26 | {B6DD317F-149A-4B7B-B61E-61ADF70153D8}.Debug|ARM.ActiveCfg = Debug|Any CPU
27 | {B6DD317F-149A-4B7B-B61E-61ADF70153D8}.Debug|ARM.Build.0 = Debug|Any CPU
28 | {B6DD317F-149A-4B7B-B61E-61ADF70153D8}.Debug|x64.ActiveCfg = Debug|Any CPU
29 | {B6DD317F-149A-4B7B-B61E-61ADF70153D8}.Debug|x64.Build.0 = Debug|Any CPU
30 | {B6DD317F-149A-4B7B-B61E-61ADF70153D8}.Debug|x86.ActiveCfg = Debug|Any CPU
31 | {B6DD317F-149A-4B7B-B61E-61ADF70153D8}.Debug|x86.Build.0 = Debug|Any CPU
32 | {B6DD317F-149A-4B7B-B61E-61ADF70153D8}.Release|ARM.ActiveCfg = Release|Any CPU
33 | {B6DD317F-149A-4B7B-B61E-61ADF70153D8}.Release|ARM.Build.0 = Release|Any CPU
34 | {B6DD317F-149A-4B7B-B61E-61ADF70153D8}.Release|x64.ActiveCfg = Release|Any CPU
35 | {B6DD317F-149A-4B7B-B61E-61ADF70153D8}.Release|x64.Build.0 = Release|Any CPU
36 | {B6DD317F-149A-4B7B-B61E-61ADF70153D8}.Release|x86.ActiveCfg = Release|Any CPU
37 | {B6DD317F-149A-4B7B-B61E-61ADF70153D8}.Release|x86.Build.0 = Release|Any CPU
38 | {DFA0BA98-D0BA-4176-9A34-B5BA6355B1DE}.Debug|ARM.ActiveCfg = Debug|ARM
39 | {DFA0BA98-D0BA-4176-9A34-B5BA6355B1DE}.Debug|ARM.Build.0 = Debug|ARM
40 | {DFA0BA98-D0BA-4176-9A34-B5BA6355B1DE}.Debug|x64.ActiveCfg = Debug|x64
41 | {DFA0BA98-D0BA-4176-9A34-B5BA6355B1DE}.Debug|x64.Build.0 = Debug|x64
42 | {DFA0BA98-D0BA-4176-9A34-B5BA6355B1DE}.Debug|x86.ActiveCfg = Debug|Win32
43 | {DFA0BA98-D0BA-4176-9A34-B5BA6355B1DE}.Debug|x86.Build.0 = Debug|Win32
44 | {DFA0BA98-D0BA-4176-9A34-B5BA6355B1DE}.Release|ARM.ActiveCfg = Release|ARM
45 | {DFA0BA98-D0BA-4176-9A34-B5BA6355B1DE}.Release|ARM.Build.0 = Release|ARM
46 | {DFA0BA98-D0BA-4176-9A34-B5BA6355B1DE}.Release|x64.ActiveCfg = Release|x64
47 | {DFA0BA98-D0BA-4176-9A34-B5BA6355B1DE}.Release|x64.Build.0 = Release|x64
48 | {DFA0BA98-D0BA-4176-9A34-B5BA6355B1DE}.Release|x86.ActiveCfg = Release|Win32
49 | {DFA0BA98-D0BA-4176-9A34-B5BA6355B1DE}.Release|x86.Build.0 = Release|Win32
50 | {3135D563-9596-4584-9ED6-616ADEC52974}.Debug|ARM.ActiveCfg = Debug|ARM
51 | {3135D563-9596-4584-9ED6-616ADEC52974}.Debug|ARM.Build.0 = Debug|ARM
52 | {3135D563-9596-4584-9ED6-616ADEC52974}.Debug|x64.ActiveCfg = Debug|x64
53 | {3135D563-9596-4584-9ED6-616ADEC52974}.Debug|x64.Build.0 = Debug|x64
54 | {3135D563-9596-4584-9ED6-616ADEC52974}.Debug|x86.ActiveCfg = Debug|Win32
55 | {3135D563-9596-4584-9ED6-616ADEC52974}.Debug|x86.Build.0 = Debug|Win32
56 | {3135D563-9596-4584-9ED6-616ADEC52974}.Release|ARM.ActiveCfg = Release|ARM
57 | {3135D563-9596-4584-9ED6-616ADEC52974}.Release|ARM.Build.0 = Release|ARM
58 | {3135D563-9596-4584-9ED6-616ADEC52974}.Release|x64.ActiveCfg = Release|x64
59 | {3135D563-9596-4584-9ED6-616ADEC52974}.Release|x64.Build.0 = Release|x64
60 | {3135D563-9596-4584-9ED6-616ADEC52974}.Release|x86.ActiveCfg = Release|Win32
61 | {3135D563-9596-4584-9ED6-616ADEC52974}.Release|x86.Build.0 = Release|Win32
62 | EndGlobalSection
63 | GlobalSection(SolutionProperties) = preSolution
64 | HideSolutionNode = FALSE
65 | EndGlobalSection
66 | EndGlobal
67 |
--------------------------------------------------------------------------------
/src/gnu-efi/inc/efiser.h:
--------------------------------------------------------------------------------
1 | #ifndef _EFI_SER_H
2 | #define _EFI_SER_H
3 |
4 | /*++
5 |
6 | Copyright (c) 1998 Intel Corporation
7 |
8 | Module Name:
9 |
10 | efiser.h
11 |
12 | Abstract:
13 |
14 | EFI serial protocol
15 |
16 | Revision History
17 |
18 | --*/
19 |
20 | //
21 | // Serial protocol
22 | //
23 |
24 | #define EFI_SERIAL_IO_PROTOCOL_GUID \
25 | { 0xBB25CF6F, 0xF1D4, 0x11D2, {0x9A, 0x0C, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0xFD} }
26 | #define SERIAL_IO_PROTOCOL EFI_SERIAL_IO_PROTOCOL_GUID
27 |
28 | INTERFACE_DECL(_EFI_SERIAL_IO_PROTOCOL);
29 |
30 | typedef enum {
31 | DefaultParity,
32 | NoParity,
33 | EvenParity,
34 | OddParity,
35 | MarkParity,
36 | SpaceParity
37 | } EFI_PARITY_TYPE;
38 |
39 | typedef enum {
40 | DefaultStopBits,
41 | OneStopBit, // 1 stop bit
42 | OneFiveStopBits, // 1.5 stop bits
43 | TwoStopBits // 2 stop bits
44 | } EFI_STOP_BITS_TYPE;
45 |
46 | #define EFI_SERIAL_CLEAR_TO_SEND 0x0010 // RO
47 | #define EFI_SERIAL_DATA_SET_READY 0x0020 // RO
48 | #define EFI_SERIAL_RING_INDICATE 0x0040 // RO
49 | #define EFI_SERIAL_CARRIER_DETECT 0x0080 // RO
50 | #define EFI_SERIAL_REQUEST_TO_SEND 0x0002 // WO
51 | #define EFI_SERIAL_DATA_TERMINAL_READY 0x0001 // WO
52 | #define EFI_SERIAL_INPUT_BUFFER_EMPTY 0x0100 // RO
53 | #define EFI_SERIAL_OUTPUT_BUFFER_EMPTY 0x0200 // RO
54 | #define EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE 0x1000 // RW
55 | #define EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE 0x2000 // RW
56 | #define EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE 0x4000 // RW
57 |
58 | typedef
59 | EFI_STATUS
60 | (EFIAPI *EFI_SERIAL_RESET) (
61 | IN struct _EFI_SERIAL_IO_PROTOCOL *This
62 | );
63 |
64 | typedef
65 | EFI_STATUS
66 | (EFIAPI *EFI_SERIAL_SET_ATTRIBUTES) (
67 | IN struct _EFI_SERIAL_IO_PROTOCOL *This,
68 | IN UINT64 BaudRate,
69 | IN UINT32 ReceiveFifoDepth,
70 | IN UINT32 Timeout,
71 | IN EFI_PARITY_TYPE Parity,
72 | IN UINT8 DataBits,
73 | IN EFI_STOP_BITS_TYPE StopBits
74 | );
75 |
76 | typedef
77 | EFI_STATUS
78 | (EFIAPI *EFI_SERIAL_SET_CONTROL_BITS) (
79 | IN struct _EFI_SERIAL_IO_PROTOCOL *This,
80 | IN UINT32 Control
81 | );
82 |
83 | typedef
84 | EFI_STATUS
85 | (EFIAPI *EFI_SERIAL_GET_CONTROL_BITS) (
86 | IN struct _EFI_SERIAL_IO_PROTOCOL *This,
87 | OUT UINT32 *Control
88 | );
89 |
90 | typedef
91 | EFI_STATUS
92 | (EFIAPI *EFI_SERIAL_WRITE) (
93 | IN struct _EFI_SERIAL_IO_PROTOCOL *This,
94 | IN OUT UINTN *BufferSize,
95 | IN VOID *Buffer
96 | );
97 |
98 | typedef
99 | EFI_STATUS
100 | (EFIAPI *EFI_SERIAL_READ) (
101 | IN struct _EFI_SERIAL_IO_PROTOCOL *This,
102 | IN OUT UINTN *BufferSize,
103 | OUT VOID *Buffer
104 | );
105 |
106 | typedef struct {
107 | UINT32 ControlMask;
108 |
109 | // current Attributes
110 | UINT32 Timeout;
111 | UINT64 BaudRate;
112 | UINT32 ReceiveFifoDepth;
113 | UINT32 DataBits;
114 | UINT32 Parity;
115 | UINT32 StopBits;
116 | } SERIAL_IO_MODE;
117 |
118 | #define SERIAL_IO_INTERFACE_REVISION 0x00010000
119 |
120 | typedef struct _EFI_SERIAL_IO_PROTOCOL {
121 | UINT32 Revision;
122 | EFI_SERIAL_RESET Reset;
123 | EFI_SERIAL_SET_ATTRIBUTES SetAttributes;
124 | EFI_SERIAL_SET_CONTROL_BITS SetControl;
125 | EFI_SERIAL_GET_CONTROL_BITS GetControl;
126 | EFI_SERIAL_WRITE Write;
127 | EFI_SERIAL_READ Read;
128 |
129 | SERIAL_IO_MODE *Mode;
130 | } EFI_SERIAL_IO_PROTOCOL;
131 |
132 | typedef struct _EFI_SERIAL_IO_PROTOCOL _SERIAL_IO_INTERFACE;
133 | typedef EFI_SERIAL_IO_PROTOCOL SERIAL_IO_INTERFACE;
134 |
135 | #endif
136 |
137 |
--------------------------------------------------------------------------------
/src/gnu-efi/lib/smbios.c:
--------------------------------------------------------------------------------
1 | /*++
2 |
3 | Copyright (c) 2000 Intel Corporation
4 |
5 | Module Name:
6 |
7 | Smbios.c
8 |
9 | Abstract:
10 |
11 | Lib fucntions for SMBIOS. Used to get system serial number and GUID
12 |
13 | Revision History
14 |
15 | --*/
16 |
17 | #include "lib.h"
18 |
19 | /*
20 | * We convert 32 bit values to pointers. In 64 bit mode the compiler will issue a
21 | * warning stating that the value is too small for the pointer:
22 | * "warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]"
23 | * we can safely ignore them here.
24 | */
25 | #ifdef __GNUC__
26 | #pragma GCC diagnostic ignored "-Wint-to-pointer-cast"
27 | #endif
28 |
29 | EFI_STATUS
30 | LibGetSmbiosSystemGuidAndSerialNumber (
31 | IN EFI_GUID *SystemGuid,
32 | OUT CHAR8 **SystemSerialNumber
33 | )
34 | {
35 | EFI_STATUS Status;
36 | SMBIOS_STRUCTURE_TABLE *SmbiosTable;
37 | SMBIOS_STRUCTURE_POINTER Smbios;
38 | SMBIOS_STRUCTURE_POINTER SmbiosEnd;
39 | UINT16 Index;
40 |
41 | Status = LibGetSystemConfigurationTable(&SMBIOSTableGuid, (VOID**)&SmbiosTable);
42 | if (EFI_ERROR(Status)) {
43 | return EFI_NOT_FOUND;
44 | }
45 |
46 | Smbios.Hdr = (SMBIOS_HEADER *)SmbiosTable->TableAddress;
47 | SmbiosEnd.Raw = (UINT8 *)(SmbiosTable->TableAddress + SmbiosTable->TableLength);
48 | for (Index = 0; Index < SmbiosTable->TableLength ; Index++) {
49 | if (Smbios.Hdr->Type == 1) {
50 | if (Smbios.Hdr->Length < 0x19) {
51 | //
52 | // Older version did not support Guid and Serial number
53 | //
54 | continue;
55 | }
56 |
57 | //
58 | // SMBIOS tables are byte packed so we need to do a byte copy to
59 | // prevend alignment faults on IA-64.
60 |
61 | CopyMem (SystemGuid, &Smbios.Type1->Uuid, sizeof(EFI_GUID));
62 | *SystemSerialNumber = LibGetSmbiosString(&Smbios, Smbios.Type1->SerialNumber);
63 | return EFI_SUCCESS;
64 | }
65 |
66 | //
67 | // Make Smbios point to the next record
68 | //
69 | LibGetSmbiosString (&Smbios, -1);
70 |
71 | if (Smbios.Raw >= SmbiosEnd.Raw) {
72 | //
73 | // SMBIOS 2.1 incorrectly stated the length of SmbiosTable as 0x1e.
74 | // given this we must double check against the lenght of
75 | /// the structure. My home PC has this bug.ruthard
76 | //
77 | return EFI_SUCCESS;
78 | }
79 | }
80 |
81 | return EFI_SUCCESS;
82 | }
83 |
84 | CHAR8*
85 | LibGetSmbiosString (
86 | IN SMBIOS_STRUCTURE_POINTER *Smbios,
87 | IN UINT16 StringNumber
88 | )
89 | /*++
90 |
91 | Return SMBIOS string given the string number.
92 |
93 | Arguments:
94 | Smbios - Pointer to SMBIOS structure
95 | StringNumber - String number to return. -1 is used to skip all strings and
96 | point to the next SMBIOS structure.
97 |
98 | Returns:
99 | Pointer to string, or pointer to next SMBIOS strcuture if StringNumber == -1
100 | --*/
101 | {
102 | UINT16 Index;
103 | CHAR8 *String;
104 |
105 | //
106 | // Skip over formatted section
107 | //
108 | String = (CHAR8 *)(Smbios->Raw + Smbios->Hdr->Length);
109 |
110 | //
111 | // Look through unformated section
112 | //
113 | for (Index = 1; Index <= StringNumber; Index++) {
114 | if (StringNumber == Index) {
115 | return String;
116 | }
117 |
118 | //
119 | // Skip string
120 | //
121 | for (; *String != 0; String++);
122 | String++;
123 |
124 | if (*String == 0) {
125 | //
126 | // If double NULL then we are done.
127 | // Retrun pointer to next structure in Smbios.
128 | // if you pass in a -1 you will always get here
129 | //
130 | Smbios->Raw = (UINT8 *)++String;
131 | return NULL;
132 | }
133 | }
134 | return NULL;
135 | }
136 |
--------------------------------------------------------------------------------
/src/Bootp/Dhcp/DhcpPacketOptions.cs:
--------------------------------------------------------------------------------
1 | namespace dhcp
2 | {
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Linq;
6 | using System.Net;
7 | using System.Text;
8 |
9 | public class DhcpPacketOptions
10 | {
11 | private Dictionary _options = new Dictionary();
12 |
13 | public DhcpPacketOptions()
14 | {
15 | }
16 |
17 | public DhcpPacketOptionId[] GetIds()
18 | {
19 | return _options.Keys.ToArray();
20 | }
21 |
22 | public void Clear()
23 | {
24 | _options.Clear();
25 | }
26 |
27 | public Boolean Exists(DhcpPacketOptionId id)
28 | {
29 | return _options.ContainsKey(id);
30 | }
31 |
32 | public Boolean Remove(DhcpPacketOptionId id)
33 | {
34 | return _options.Remove(id);
35 | }
36 |
37 | #region Get
38 |
39 | public Byte GetByte(DhcpPacketOptionId id, Byte defaultValue = 0)
40 | {
41 | return _options.ContainsKey(id) ? _options[id].Data[0] : defaultValue;
42 | }
43 |
44 | public UInt16 GetUInt16(DhcpPacketOptionId id, UInt16 defaultValue = 0)
45 | {
46 | var number = _options.ContainsKey(id) ? BitConverter.ToUInt16(_options[id].Data, 0) : defaultValue;
47 | return (UInt16)IPAddress.NetworkToHostOrder((short)number);
48 | }
49 |
50 | public UInt32 GetUInt32(DhcpPacketOptionId id, UInt32 defaultValue = 0)
51 | {
52 | var number = _options.ContainsKey(id) ? BitConverter.ToUInt32(_options[id].Data, 0) : defaultValue;
53 | return (UInt32)IPAddress.NetworkToHostOrder((int)number);
54 | }
55 |
56 | public String GetString(DhcpPacketOptionId id, String defaultValue = null)
57 | {
58 | return _options.ContainsKey(id) ? Encoding.ASCII.GetString(_options[id].Data, 0, _options[id].Data.Length) : defaultValue;
59 | }
60 |
61 | public IPAddress GetIpAAddress(DhcpPacketOptionId id, IPAddress defaultValue = null)
62 | {
63 | return _options.ContainsKey(id) ? new IPAddress(_options[id].Data) : defaultValue;
64 | }
65 |
66 | public Byte[] GetBytes(DhcpPacketOptionId id)
67 | {
68 | return _options.ContainsKey(id) ? _options[id].Data : null;
69 | }
70 |
71 | #endregion
72 |
73 | #region Set
74 |
75 | public void SetByte(DhcpPacketOptionId id, Byte value)
76 | {
77 | SetBytes(id, new Byte[] { value });
78 | }
79 |
80 | public void SetUInt16(DhcpPacketOptionId id, UInt16 value)
81 | {
82 | value = (UInt16)IPAddress.HostToNetworkOrder((short)value);
83 | SetBytes(id, BitConverter.GetBytes(value));
84 | }
85 |
86 | public void SetUInt32(DhcpPacketOptionId id, UInt32 value)
87 | {
88 | value = (UInt32)IPAddress.HostToNetworkOrder((int)value);
89 | SetBytes(id, BitConverter.GetBytes(value));
90 | }
91 |
92 | public void SetString(DhcpPacketOptionId id, String value)
93 | {
94 | var bytes = Encoding.ASCII.GetBytes(value);
95 | SetBytes(id, bytes);
96 | }
97 |
98 | public void SetIpAAddress(DhcpPacketOptionId id, IPAddress value)
99 | {
100 | var bytes = value.GetAddressBytes();
101 | SetBytes(id, bytes);
102 | }
103 |
104 | public void SetBytes(DhcpPacketOptionId id, Byte[] value)
105 | {
106 | var option = new DhcpPacketOption(id, value);
107 | _options[id] = option;
108 | }
109 |
110 | #endregion
111 |
112 | #region DhcpPacketOption
113 |
114 | public class DhcpPacketOption
115 | {
116 | public DhcpPacketOptionId Id { get; private set; }
117 | public Byte Length { get { return (Byte)Data.Length; } }
118 | public Byte[] Data { get; private set; }
119 |
120 | public DhcpPacketOption(DhcpPacketOptionId id, Byte[] data)
121 | {
122 | Id = id;
123 | Data = data;
124 | }
125 | }
126 |
127 | #endregion
128 | }
129 | }
130 |
--------------------------------------------------------------------------------