Home | History | Annotate | Download | only in AcpiPlatformDxe
      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