/** @file
  API between 16-bit Legacy BIOS and EFI

  We need to figure out what the 16-bit code is going to use to
  represent these data structures. Is a pointer SEG:OFF or 32-bit...

  Copyright (c) 2006, Intel Corporation                                                         
  All rights reserved. This program and the accompanying materials                          
  are licensed and made available under the terms and conditions of the BSD License         
  which accompanies this distribution.  The full text of the license may be found at        
  http://opensource.org/licenses/bsd-license.php                                            

  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.    

  Module Name:  Legacy16.h

  @par Revision Reference:
  These definitions are from Compatibility Support Module Spec Version 0.96.

**/

#ifndef LEGACY_16_H_
#define LEGACY_16_H_

#define EFI_TO_LEGACY_MAJOR_VERSION 0x02
#define EFI_TO_LEGACY_MINOR_VERSION 0x00

#pragma pack(1)
//
// EFI Legacy to Legacy16 data
// EFI_COMPATIBILITY16_TABLE has been moved to LegacyBios protocol defn file.
//
typedef struct {
  //
  // Memory map used to start up Legacy16 code
  //
  UINT32  BiosLessThan1MB;
  UINT32  HiPmmMemory;
  UINT32  HiPmmMemorySizeInBytes;

  UINT16  ReverseThunkCallSegment;
  UINT16  ReverseThunkCallOffset;
  UINT32  NumberE820Entries;
  UINT32  OsMemoryAbove1Mb;
  UINT32  ThunkStart;
  UINT32  ThunkSizeInBytes;
  UINT32  LowPmmMemory;
  UINT32  LowPmmMemorySizeInBytes;
} EFI_TO_COMPATIBILITY16_INIT_TABLE;

#pragma pack()
//
// Legacy16 Call types
//
typedef enum {
  Legacy16InitializeYourself    = 0x0000,
  Legacy16UpdateBbs             = 0x0001,
  Legacy16PrepareToBoot         = 0x0002,
  Legacy16Boot                  = 0x0003,
  Legacy16RetrieveLastBootDevice= 0x0004,
  Legacy16DispatchOprom         = 0x0005,
  Legacy16GetTableAddress       = 0x0006,
  Legacy16SetKeyboardLeds       = 0x0007,
  Legacy16InstallPciHandler     = 0x0008,
} EFI_COMPATIBILITY_FUNCTIONS;

#define F0000Region 0x01
#define E0000Region 0x02
//
// Legacy16 call prototypes
//  Input:  AX = EFI_COMPATIBILITY16_FUNCTIONS for all functions.
//  Output: AX = Return status for all functions. It follows EFI error
//               codes.
//
//  Legacy16InitializeYourself
//    Description: This is the first call to 16-bit code. It allows the
//                 16-bit to perform any internal initialization.
//    Input:  ES:BX pointer to EFI_TO_COMPATIBILITY16_INIT_TABLE
//    Output:
//  Legacy16UpdateBbs
//    Description: The 16-bit code updates the BBS table for non-compliant
//                 devices.
//    Input:  ES:BX pointer to EFI_TO_COMPATIBILITY16_BOOT_TABLE
//    Output:
//  Legacy16PrepareToBoot
//    Description: This is the last call to 16-bit code where 0xE0000 -0xFFFFF
//                 is read/write. 16-bit code does any final clean up.
//    Input:  ES:BX pointer to EFI_TO_COMPATIBILITY16_BOOT_TABLE
//    Output:
//  Legacy16Boot
//    Description: Do INT19.
//    Input:
//    Output:
//  Legacy16RetrieveLastBootDevice
//    Description: Return the priority number of the device that booted.
//    Input:
//    Output: BX = priority number of the last attempted boot device.
//  Legacy16DispatchOprom
//    Description: Pass control to the specified OPROM. Allows the 16-bit
//                 code to rehook INT 13,18 and/or 19 from non-BBS
//                 compliant devices.
//    Input:  ES:DI = Segment:Offset of PnPInstallationCheck
//            SI = OPROM segment. Offset assumed to be 3.
//            BH = PCI bus number.
//            BL = PCI device * 8 | PCI function.
//    Output: BX = Number of BBS non-compliant drives detected. Return
//                 zero for BBS compliant devices.
//  Legacy16GetTableAddress
//    Description: Allocate an area in the 0xE0000-0xFFFFF region.
//    Input:  BX = Allocation region.
//                 0x0 = Any region
//                 Bit 0 = 0xF0000 region
//                 Bit 1 = 0xE0000 region
//                 Multiple bits can be set.
//            CX = Length in bytes requested
//            DX = Required address alignment
//                 Bit mapped. First non-zero bit from right to left is
//                 alignment.
//    Output: DS:BX is assigned region.
//            AX = EFI_OUT_OF_RESOURCES if request cannot be granted.
//  Legacy16SetKeyboardLeds
//    Description: Perform any special action when keyboard LEDS change.
//                 Other code performs the LED change and updates standard
//                 BDA locations. This is for non-standard operations.
//    Input:  CL = LED status. 1 = set.
//                 Bit 0 = Scroll lock
//                 Bit 1 = Num lock
//                 Bit 2 = Caps lock
//    Output:
//  Legacy16InstallPciHandler
//    Description: Provides 16-bit code a hook to establish an interrupt
//                 handler for any PCI device requiring a PCI interrupt
//                 but having no OPROM. This is called before interrupt
//                 is assigned. 8259 will be disabled(even if sharded)
//                 and PCI Interrupt Line unprogrammed. Other code will
//                 program 8259 and PCI Interrupt Line.
//    Input:  ES:BX Pointer to EFI_LEGACY_INSTALL_PCI_HANDLER strcture
//    Output:
//
typedef UINT8 SERIAL_MODE;
typedef UINT8 PARALLEL_MODE;

#pragma pack(1)

#define DEVICE_SERIAL_MODE_NORMAL               0x00
#define DEVICE_SERIAL_MODE_IRDA                 0x01
#define DEVICE_SERIAL_MODE_ASK_IR               0x02
#define DEVICE_SERIAL_MODE_DUPLEX_HALF          0x00
#define DEVICE_SERIAL_MODE_DUPLEX_FULL          0x10

#define DEVICE_PARALLEL_MODE_MODE_OUTPUT_ONLY   0x00
#define DEVICE_PARALLEL_MODE_MODE_BIDIRECTIONAL 0x01
#define DEVICE_PARALLEL_MODE_MODE_EPP           0x02
#define DEVICE_PARALLEL_MODE_MODE_ECP           0x03

typedef struct {
  UINT16      Address;
  UINT8       Irq;
  SERIAL_MODE Mode;
} DEVICE_PRODUCER_SERIAL;

typedef struct {
  UINT16        Address;
  UINT8         Irq;
  UINT8         Dma;
  PARALLEL_MODE Mode;
} DEVICE_PRODUCER_PARALLEL;

typedef struct {
  UINT16  Address;
  UINT8   Irq;
  UINT8   Dma;
  UINT8   NumberOfFloppy;
} DEVICE_PRODUCER_FLOPPY;

typedef struct {
  UINT32  A20Kybd : 1;
  UINT32  A20Port90 : 1;
  UINT32  Reserved : 30;
} LEGACY_DEVICE_FLAGS;

typedef struct {
  DEVICE_PRODUCER_SERIAL    Serial[4];
  DEVICE_PRODUCER_PARALLEL  Parallel[3];
  DEVICE_PRODUCER_FLOPPY    Floppy;
  UINT8                     MousePresent;
  LEGACY_DEVICE_FLAGS       Flags;
} DEVICE_PRODUCER_DATA_HEADER;
//
// SMM Table definitions
// SMM table has a header that provides the number of entries. Following
// the header is a variable length amount of data.
//

#define STANDARD_IO      0x00
#define STANDARD_MEMORY  0x01

#define PORT_SIZE_8   0x00
#define PORT_SIZE_16  0x01
#define PORT_SIZE_32  0x02
#define PORT_SIZE_64  0x03

#define DATA_SIZE_8   0x00
#define DATA_SIZE_16  0x01
#define DATA_SIZE_32  0x02
#define DATA_SIZE_64  0x03

typedef struct {
  UINT16  Type : 3;
  UINT16  PortGranularity : 3;
  UINT16  DataGranularity : 3;
  UINT16  Reserved : 7;
} SMM_ATTRIBUTES;

#define INT15_D042        0x0000
#define GET_USB_BOOT_INFO 0x0001
#define DMI_PNP_50_57     0x0002

#define STANDARD_OWNER    0x0
#define OEM_OWNER         0x1

typedef struct {
  UINT16  Function : 15;
  UINT16  Owner : 1;
} SMM_FUNCTION;

typedef struct {
  SMM_ATTRIBUTES  SmmAttributes;
  SMM_FUNCTION    SmmFunction;
  //
  // Data size depends upon SmmAttributes and ranges from 2 bytes to
  // 16 bytes
  //
  // bugbug how to do variable length Data
  //
  UINT8           SmmPort;
  UINT8           SmmData;
} SMM_ENTRY;

typedef struct {
  UINT16    NumSmmEntries;
  SMM_ENTRY SmmEntry;
} SMM_TABLE;

//
// If MAX_IDE_CONTROLLER changes value 16-bit legacy code needs to change
//
#define MAX_IDE_CONTROLLER  8

typedef struct {
  UINT16                      MajorVersion;
  UINT16                      MinorVersion;

  UINT32                      AcpiTable;   // 4 GB range
  UINT32                      SmbiosTable; // 4 GB range
  UINT32                      SmbiosTableLength;

  //
  // Legacy SIO state
  //
  DEVICE_PRODUCER_DATA_HEADER SioData;

  UINT16                      DevicePathType;
  UINT16                      PciIrqMask;
  UINT32                      NumberE820Entries;
  //
  // Controller & Drive Identify[2] per controller information
  //
  HDD_INFO                    HddInfo[MAX_IDE_CONTROLLER];
  UINT32                      NumberBbsEntries;
  UINT32                      BbsTable;
  UINT32                      SmmTable;
  UINT32                      OsMemoryAbove1Mb;
  UINT32                      UnconventionalDeviceTable;
} EFI_TO_COMPATIBILITY16_BOOT_TABLE;

typedef struct {
  UINT8   PciBus;
  UINT8   PciDeviceFun;
  UINT8   PciSegment;
  UINT8   PciClass;
  UINT8   PciSubclass;
  UINT8   PciInterface;
  UINT8   PrimaryIrq;
  UINT8   PrimaryReserved;
  UINT16  PrimaryControl;
  UINT16  PrimaryBase;
  UINT16  PrimaryBusMaster;
  UINT8   SecondaryIrq;
  UINT8   SecondaryReserved;
  UINT16  SecondaryControl;
  UINT16  SecondaryBase;
  UINT16  SecondaryBusMaster;
} EFI_LEGACY_INSTALL_PCI_HANDLER;

typedef struct {
  UINT16  PnPInstallationCheckSegment;
  UINT16  PnPInstallationCheckOffset;
  UINT16  OpromSegment;
  UINT8   PciBus;
  UINT8   PciDeviceFunction;
  UINT8   NumberBbsEntries;
  VOID    *BbsTablePointer;

} EFI_DISPATCH_OPROM_TABLE;

#pragma pack()

#endif
