1 /** @file 2 Command structures for the QEMU FwCfg table loader interface. 3 4 Copyright (C) 2014, Red Hat, Inc. 5 6 This program and the accompanying materials are licensed and made available 7 under the terms and conditions of the BSD License which accompanies this 8 distribution. The full text of the license may be found at 9 http://opensource.org/licenses/bsd-license.php 10 11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT 12 WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 14 **/ 15 16 #ifndef __QEMU_LOADER_H__ 17 #define __QEMU_LOADER_H__ 18 19 #include <Include/Base.h> 20 #include <Library/QemuFwCfgLib.h> 21 22 // 23 // The types and the documentation reflects the SeaBIOS interface. 24 // 25 #define QEMU_LOADER_FNAME_SIZE QEMU_FW_CFG_FNAME_SIZE 26 27 typedef enum { 28 QemuLoaderCmdAllocate = 1, 29 QemuLoaderCmdAddPointer, 30 QemuLoaderCmdAddChecksum 31 } QEMU_LOADER_COMMAND_TYPE; 32 33 typedef enum { 34 QemuLoaderAllocHigh = 1, 35 QemuLoaderAllocFSeg 36 } QEMU_LOADER_ALLOC_ZONE; 37 38 #pragma pack (1) 39 // 40 // QemuLoaderCmdAllocate: download the fw_cfg file named File, to a buffer 41 // allocated in the zone specified by Zone, aligned at a multiple of Alignment. 42 // 43 typedef struct { 44 UINT8 File[QEMU_LOADER_FNAME_SIZE]; // NUL-terminated 45 UINT32 Alignment; // power of two 46 UINT8 Zone; // QEMU_LOADER_ALLOC_ZONE values 47 } QEMU_LOADER_ALLOCATE; 48 49 // 50 // QemuLoaderCmdAddPointer: the bytes at 51 // [PointerOffset..PointerOffset+PointerSize) in the file PointerFile contain a 52 // relative pointer (an offset) into PointeeFile. Increment the relative 53 // pointer's value by the base address of where PointeeFile's contents have 54 // been placed (when QemuLoaderCmdAllocate has been executed for PointeeFile). 55 // 56 typedef struct { 57 UINT8 PointerFile[QEMU_LOADER_FNAME_SIZE]; // NUL-terminated 58 UINT8 PointeeFile[QEMU_LOADER_FNAME_SIZE]; // NUL-terminated 59 UINT32 PointerOffset; 60 UINT8 PointerSize; // one of 1, 2, 4, 8 61 } QEMU_LOADER_ADD_POINTER; 62 63 // 64 // QemuLoaderCmdAddChecksum: calculate the UINT8 checksum (as per 65 // CalculateChecksum8()) of the range [Start..Start+Length) in File. Store the 66 // UINT8 result at ResultOffset in the same File. 67 // 68 typedef struct { 69 UINT8 File[QEMU_LOADER_FNAME_SIZE]; // NUL-terminated 70 UINT32 ResultOffset; 71 UINT32 Start; 72 UINT32 Length; 73 } QEMU_LOADER_ADD_CHECKSUM; 74 75 typedef struct { 76 UINT32 Type; // QEMU_LOADER_COMMAND_TYPE values 77 union { 78 QEMU_LOADER_ALLOCATE Allocate; 79 QEMU_LOADER_ADD_POINTER AddPointer; 80 QEMU_LOADER_ADD_CHECKSUM AddChecksum; 81 UINT8 Padding[124]; 82 } Command; 83 } QEMU_LOADER_ENTRY; 84 #pragma pack () 85 86 #endif 87