Home | History | Annotate | Download | only in LegacyBiosThunk
      1 /*++
      2 
      3 Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
      4 This program and the accompanying materials
      5 are licensed and made available under the terms and conditions of the BSD License
      6 which accompanies this distribution.  The full text of the license may be found at
      7 http://opensource.org/licenses/bsd-license.php
      8 
      9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     11 
     12 Module Name:
     13 
     14   LegacyBiosThunk.h
     15 
     16 Abstract:
     17 
     18   The EFI Legacy BIOS Thunk Protocol is used to abstract Thunk16 call.
     19 
     20   Note: The names for EFI_IA32_REGISTER_SET elements were picked to follow
     21   well known naming conventions.
     22 
     23   Thunk - A thunk is a transition from one processor mode to another. A Thunk
     24           is a transition from native EFI mode to 16-bit mode. A reverse thunk
     25           would be a transition from 16-bit mode to native EFI mode.
     26 
     27 
     28   Note: Note: Note: Note: Note: Note: Note:
     29 
     30   You most likely should not use this protocol! Find the EFI way to solve the
     31   problem to make your code portable
     32 
     33   Note: Note: Note: Note: Note: Note: Note:
     34 
     35 Revision History
     36 
     37 --*/
     38 
     39 #ifndef _EFI_LEGACY_BIOS_THUNK_H_
     40 #define _EFI_LEGACY_BIOS_THUNK_H_
     41 
     42 #include EFI_PROTOCOL_DEFINITION (LegacyBios)
     43 
     44 #define EFI_LEGACY_BIOS_THUNK_PROTOCOL_GUID \
     45   { \
     46     0x4c51a7ba, 0x7195, 0x442d, {0x87, 0x92, 0xbe, 0xea, 0x6e, 0x2f, 0xf6, 0xec} \
     47   }
     48 
     49 EFI_FORWARD_DECLARATION (EFI_LEGACY_BIOS_THUNK_PROTOCOL);
     50 
     51 typedef
     52 BOOLEAN
     53 (EFIAPI *EFI_LEGACY_BIOS_THUNK_INT86) (
     54   IN EFI_LEGACY_BIOS_THUNK_PROTOCOL   * This,
     55   IN  UINT8                           BiosInt,
     56   IN OUT  EFI_IA32_REGISTER_SET       * Regs
     57   )
     58 /*++
     59 
     60   Routine Description:
     61     Thunk to 16-bit real mode and execute a software interrupt with a vector
     62     of BiosInt. Regs will contain the 16-bit register context on entry and
     63     exit.
     64 
     65   Arguments:
     66     This    - Protocol instance pointer.
     67     BiosInt - Processor interrupt vector to invoke
     68     Reg     - Register contexted passed into (and returned) from thunk to
     69               16-bit mode
     70 
     71   Returns:
     72     FALSE   - Thunk completed, and there were no BIOS errors in the target code.
     73               See Regs for status.
     74     TRUE    - There was a BIOS erro in the target code.
     75 
     76 --*/
     77 ;
     78 
     79 typedef
     80 BOOLEAN
     81 (EFIAPI *EFI_LEGACY_BIOS_THUNK_FARCALL86) (
     82   IN EFI_LEGACY_BIOS_THUNK_PROTOCOL   * This,
     83   IN  UINT16                          Segment,
     84   IN  UINT16                          Offset,
     85   IN  EFI_IA32_REGISTER_SET           * Regs,
     86   IN  VOID                            *Stack,
     87   IN  UINTN                           StackSize
     88   )
     89 /*++
     90 
     91   Routine Description:
     92     Thunk to 16-bit real mode and call Segment:Offset. Regs will contain the
     93     16-bit register context on entry and exit. Arguments can be passed on
     94     the Stack argument
     95 
     96   Arguments:
     97     This      - Protocol instance pointer.
     98     Segment   - Segemnt of 16-bit mode call
     99     Offset    - Offset of 16-bit mdoe call
    100     Reg       - Register contexted passed into (and returned) from thunk to
    101                 16-bit mode
    102     Stack     - Caller allocated stack used to pass arguments
    103     StackSize - Size of Stack in bytes
    104 
    105   Returns:
    106     FALSE     - Thunk completed, and there were no BIOS errors in the target code.
    107                 See Regs for status.
    108     TRUE      - There was a BIOS erro in the target code.
    109 
    110 --*/
    111 ;
    112 
    113 struct _EFI_LEGACY_BIOS_THUNK_PROTOCOL {
    114   EFI_LEGACY_BIOS_THUNK_INT86                 Int86;
    115   EFI_LEGACY_BIOS_THUNK_FARCALL86             FarCall86;
    116 };
    117 
    118 extern EFI_GUID gEfiLegacyBiosThunkProtocolGuid;
    119 
    120 #endif
    121