Home | History | Annotate | Download | only in Host
      1 /** @file
      2 
      3   Copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR>
      4   Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
      5 
      6   This program and the accompanying materials
      7   are licensed and made available under the terms and conditions of the BSD License
      8   which accompanies this 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,
     12   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 
     16 #ifndef _GASKET_H_
     17 #define _GASKET_H_
     18 
     19 //
     20 // EMU_THUNK_PROTOCOL gaskets (EFIAPI to UNIX ABI)
     21 //
     22 
     23 UINTN
     24 EFIAPI
     25 GasketSecWriteStdErr (
     26   IN UINT8     *Buffer,
     27   IN UINTN     NumberOfBytes
     28   );
     29 
     30 EFI_STATUS
     31 EFIAPI
     32 GasketSecConfigStdIn (
     33   VOID
     34   );
     35 
     36 UINTN
     37 EFIAPI
     38 GasketSecWriteStdOut (
     39   IN UINT8     *Buffer,
     40   IN UINTN     NumberOfBytes
     41   );
     42 
     43 UINTN
     44 EFIAPI
     45 GasketSecReadStdIn (
     46   IN UINT8     *Buffer,
     47   IN UINTN     NumberOfBytes
     48   );
     49 
     50 BOOLEAN
     51 EFIAPI
     52 GasketSecPollStdIn (
     53   VOID
     54   );
     55 
     56 VOID *
     57 EFIAPI
     58 GasketSecMalloc (
     59   IN  UINTN Size
     60   );
     61 
     62 VOID *
     63 EFIAPI
     64 GasketSecValloc (
     65   IN  UINTN Size
     66   );
     67 
     68 BOOLEAN
     69 EFIAPI
     70 GasketSecFree (
     71   IN  VOID *Ptr
     72   );
     73 
     74 
     75 RETURN_STATUS
     76 EFIAPI
     77 GasketSecPeCoffGetEntryPoint (
     78   IN     VOID  *Pe32Data,
     79   IN OUT VOID  **EntryPoint
     80   );
     81 
     82 VOID
     83 EFIAPI
     84 GasketSecPeCoffRelocateImageExtraAction (
     85   IN OUT PE_COFF_LOADER_IMAGE_CONTEXT  *ImageContext
     86   );
     87 
     88 VOID
     89 EFIAPI
     90 GasketSecPeCoffUnloadImageExtraAction (
     91   IN OUT PE_COFF_LOADER_IMAGE_CONTEXT  *ImageContext
     92   );
     93 
     94 VOID
     95 EFIAPI
     96 GasketSecSetTimer (
     97   IN  UINT64                  PeriodMs,
     98   IN  EMU_SET_TIMER_CALLBACK  CallBack
     99   );
    100 
    101 VOID
    102 EFIAPI
    103 GasketSecEnableInterrupt (
    104   VOID
    105   );
    106 
    107 VOID
    108 EFIAPI
    109 GasketSecDisableInterrupt (
    110   VOID
    111   );
    112 
    113 UINT64
    114 EFIAPI
    115 GasketQueryPerformanceFrequency (
    116   VOID
    117   );
    118 
    119 UINT64
    120 EFIAPI
    121 GasketQueryPerformanceCounter (
    122   VOID
    123   );
    124 
    125 
    126 VOID
    127 EFIAPI
    128 GasketSecSleep (
    129   IN  UINT64 Nanoseconds
    130   );
    131 
    132 VOID
    133 EFIAPI
    134 GasketSecCpuSleep (
    135   VOID
    136   );
    137 
    138 VOID
    139 EFIAPI
    140 GasketSecExit (
    141   UINTN   Status
    142   );
    143 
    144 VOID
    145 EFIAPI
    146 GasketSecGetTime (
    147   OUT  EFI_TIME               *Time,
    148   OUT EFI_TIME_CAPABILITIES   *Capabilities OPTIONAL
    149   );
    150 
    151 VOID
    152 EFIAPI
    153 GasketSecSetTime (
    154   IN  EFI_TIME               *Time
    155   );
    156 
    157 EFI_STATUS
    158 EFIAPI
    159 GasketSecGetNextProtocol (
    160   IN  BOOLEAN                 EmuBusDriver,
    161   OUT EMU_IO_THUNK_PROTOCOL   **Instance  OPTIONAL
    162   );
    163 
    164 
    165 // PPIs produced by SEC
    166 
    167 
    168 EFI_STATUS
    169 EFIAPI
    170 GasketSecUnixPeiAutoScan (
    171   IN  UINTN                 Index,
    172   OUT EFI_PHYSICAL_ADDRESS  *MemoryBase,
    173   OUT UINT64                *MemorySize
    174   );
    175 
    176 VOID *
    177 EFIAPI
    178 GasketSecEmuThunkAddress (
    179   VOID
    180   );
    181 
    182 
    183 EFI_STATUS
    184 EFIAPI
    185 GasketSecUnixUnixFwhAddress (
    186   IN OUT UINT64                *FwhSize,
    187   IN OUT EFI_PHYSICAL_ADDRESS  *FwhBase
    188   );
    189 
    190 
    191 
    192 //
    193 // Reverse (UNIX to EFIAPI) gaskets
    194 //
    195 
    196 typedef
    197 void
    198 (EFIAPI *CALL_BACK) (
    199   UINT64 Delta
    200   );
    201 
    202 UINTN
    203 ReverseGasketUint64 (
    204   CALL_BACK CallBack,
    205   UINT64 a
    206   );
    207 
    208 UINTN
    209 ReverseGasketUint64Uint64 (
    210   VOID      *CallBack,
    211   VOID      *Context,
    212   VOID      *Key
    213   );
    214 
    215 //
    216 // Gasket functions for EFI_EMU_UGA_IO_PROTOCOL
    217 //
    218 
    219 
    220 EFI_STATUS
    221 EFIAPI
    222 GasketX11Size (
    223   EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo,
    224   UINT32 Width,
    225   UINT32 Height
    226   );
    227 
    228 EFI_STATUS
    229 EFIAPI
    230 GasketX11CheckKey (
    231   EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo
    232   );
    233 
    234 EFI_STATUS
    235 EFIAPI
    236 GasketX11GetKey (
    237   EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo,
    238   EFI_KEY_DATA                 *key
    239   );
    240 
    241 EFI_STATUS
    242 EFIAPI
    243 GasketX11KeySetState (
    244   EMU_GRAPHICS_WINDOW_PROTOCOL  *GraphicsWindowsIo,
    245   EFI_KEY_TOGGLE_STATE          *KeyToggleState
    246   );
    247 
    248 EFI_STATUS
    249 EFIAPI
    250 GasketX11RegisterKeyNotify (
    251   IN EMU_GRAPHICS_WINDOW_PROTOCOL                         *GraphicsWindowsIo,
    252   IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK     MakeCallBack,
    253   IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK     BreakCallBack,
    254   IN VOID                                                 *Context
    255   );
    256 
    257 
    258 EFI_STATUS
    259 EFIAPI
    260 GasketX11Blt (
    261   IN  EMU_GRAPHICS_WINDOW_PROTOCOL            *GraphicsWindows,
    262   IN  EFI_UGA_PIXEL                           *BltBuffer OPTIONAL,
    263   IN  EFI_UGA_BLT_OPERATION                   BltOperation,
    264   IN  EMU_GRAPHICS_WINDOWS__BLT_ARGS          *Args
    265   );
    266 
    267 EFI_STATUS
    268 EFIAPI
    269 GasketX11CheckPointer (
    270   EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo
    271   );
    272 
    273 EFI_STATUS
    274 EFIAPI
    275 GasketX11GetPointerState (
    276   EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo,
    277   EFI_SIMPLE_POINTER_STATE *state
    278   );
    279 
    280 EFI_STATUS
    281 EFIAPI
    282 GasketX11GraphicsWindowOpen (
    283   IN  EMU_IO_THUNK_PROTOCOL   *This
    284   );
    285 
    286 EFI_STATUS
    287 EFIAPI
    288 GasketX11GraphicsWindowClose (
    289   IN  EMU_IO_THUNK_PROTOCOL   *This
    290   );
    291 
    292 // Pthreads
    293 
    294 UINTN
    295 EFIAPI
    296 GasketPthreadMutexLock (
    297   IN VOID *Mutex
    298   );
    299 
    300 
    301 
    302 UINTN
    303 EFIAPI
    304 GasketPthreadMutexUnLock (
    305   IN VOID *Mutex
    306   );
    307 
    308 
    309 UINTN
    310 EFIAPI
    311 GasketPthreadMutexTryLock (
    312   IN VOID *Mutex
    313   );
    314 
    315 
    316 VOID *
    317 EFIAPI
    318 GasketPthreadMutexInit (
    319   IN VOID
    320   );
    321 
    322 
    323 UINTN
    324 EFIAPI
    325 GasketPthreadMutexDestroy (
    326   IN VOID *Mutex
    327   );
    328 
    329 
    330 UINTN
    331 EFIAPI
    332 GasketPthreadCreate (
    333   IN  VOID                      *Thread,
    334   IN  VOID                      *Attribute,
    335   IN  THREAD_THUNK_THREAD_ENTRY Start,
    336   IN  VOID                      *Context
    337   );
    338 
    339 VOID
    340 EFIAPI
    341 GasketPthreadExit (
    342   IN VOID *ValuePtr
    343   );
    344 
    345 
    346 UINTN
    347 EFIAPI
    348 GasketPthreadSelf (
    349   VOID
    350   );
    351 
    352 EFI_STATUS
    353 EFIAPI
    354 GasketPthreadOpen (
    355   IN  EMU_IO_THUNK_PROTOCOL   *This
    356   );
    357 
    358 EFI_STATUS
    359 EFIAPI
    360 GasketPthreadClose (
    361   IN  EMU_IO_THUNK_PROTOCOL   *This
    362   );
    363 
    364 
    365 // PosixFileSystem
    366 
    367 EFI_STATUS
    368 EFIAPI
    369 GasketPosixOpenVolume (
    370   IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL    *This,
    371   OUT EFI_FILE_PROTOCOL                 **Root
    372   );
    373 
    374 EFI_STATUS
    375 EFIAPI
    376 GasketPosixFileOpen (
    377   IN EFI_FILE_PROTOCOL        *This,
    378   OUT EFI_FILE_PROTOCOL       **NewHandle,
    379   IN CHAR16                   *FileName,
    380   IN UINT64                   OpenMode,
    381   IN UINT64                   Attributes
    382   );
    383 
    384 EFI_STATUS
    385 EFIAPI
    386 GasketPosixFileCLose (
    387   IN EFI_FILE_PROTOCOL  *This
    388   );
    389 
    390 EFI_STATUS
    391 EFIAPI
    392 GasketPosixFileDelete (
    393   IN EFI_FILE_PROTOCOL  *This
    394   );
    395 
    396 EFI_STATUS
    397 EFIAPI
    398 GasketPosixFileRead (
    399   IN EFI_FILE_PROTOCOL        *This,
    400   IN OUT UINTN                *BufferSize,
    401   OUT VOID                    *Buffer
    402   );
    403 
    404 EFI_STATUS
    405 EFIAPI
    406 GasketPosixFileWrite (
    407   IN EFI_FILE_PROTOCOL        *This,
    408   IN OUT UINTN                *BufferSize,
    409   IN VOID                     *Buffer
    410   );
    411 
    412 EFI_STATUS
    413 EFIAPI
    414 GasketPosixFileSetPossition (
    415   IN EFI_FILE_PROTOCOL        *This,
    416   IN UINT64                   Position
    417   );
    418 
    419 EFI_STATUS
    420 EFIAPI
    421 GasketPosixFileGetPossition (
    422   IN EFI_FILE_PROTOCOL        *This,
    423   OUT UINT64                  *Position
    424   );
    425 
    426 EFI_STATUS
    427 EFIAPI
    428 GasketPosixFileGetInfo (
    429   IN EFI_FILE_PROTOCOL        *This,
    430   IN EFI_GUID                 *InformationType,
    431   IN OUT UINTN                *BufferSize,
    432   OUT VOID                    *Buffer
    433   );
    434 
    435 EFI_STATUS
    436 EFIAPI
    437 GasketPosixFileSetInfo (
    438   IN EFI_FILE_PROTOCOL        *This,
    439   IN EFI_GUID                 *InformationType,
    440   IN UINTN                    BufferSize,
    441   IN VOID                     *Buffer
    442   );
    443 
    444 EFI_STATUS
    445 EFIAPI
    446 GasketPosixFileFlush (
    447   IN EFI_FILE_PROTOCOL  *This
    448   );
    449 
    450 EFI_STATUS
    451 EFIAPI
    452 GasketPosixFileSystmeThunkOpen (
    453   IN  EMU_IO_THUNK_PROTOCOL   *This
    454   );
    455 
    456 EFI_STATUS
    457 EFIAPI
    458 GasketPosixFileSystmeThunkClose (
    459   IN  EMU_IO_THUNK_PROTOCOL   *This
    460   );
    461 
    462 EFI_STATUS
    463 EFIAPI
    464 GasketEmuBlockIoReset (
    465   IN EMU_BLOCK_IO_PROTOCOL    *This,
    466   IN BOOLEAN                  ExtendedVerification
    467   );
    468 
    469 EFI_STATUS
    470 EFIAPI
    471 GasketEmuBlockIoReadBlocks (
    472   IN     EMU_BLOCK_IO_PROTOCOL  *This,
    473   IN     UINT32                 MediaId,
    474   IN     EFI_LBA                LBA,
    475   IN OUT EFI_BLOCK_IO2_TOKEN    *Token,
    476   IN     UINTN                  BufferSize,
    477      OUT VOID                   *Buffer
    478   );
    479 
    480 EFI_STATUS
    481 EFIAPI
    482 GasketEmuBlockIoWriteBlocks (
    483   IN     EMU_BLOCK_IO_PROTOCOL  *This,
    484   IN     UINT32                 MediaId,
    485   IN     EFI_LBA                LBA,
    486   IN OUT EFI_BLOCK_IO2_TOKEN    *Token,
    487   IN     UINTN                  BufferSize,
    488   IN     VOID                   *Buffer
    489   );
    490 
    491 EFI_STATUS
    492 EFIAPI
    493 GasketEmuBlockIoFlushBlocks (
    494   IN     EMU_BLOCK_IO_PROTOCOL    *This,
    495   IN OUT EFI_BLOCK_IO2_TOKEN      *Token
    496   );
    497 
    498 EFI_STATUS
    499 EFIAPI
    500 GasketEmuBlockIoCreateMapping (
    501   IN     EMU_BLOCK_IO_PROTOCOL    *This,
    502   IN     EFI_BLOCK_IO_MEDIA       *Media
    503   );
    504 
    505 EFI_STATUS
    506 EFIAPI
    507 GasketBlockIoThunkOpen (
    508   IN  EMU_IO_THUNK_PROTOCOL   *This
    509   );
    510 
    511 EFI_STATUS
    512 EFIAPI
    513 GasketBlockIoThunkClose (
    514   IN  EMU_IO_THUNK_PROTOCOL   *This
    515   );
    516 
    517 EFI_STATUS
    518 EFIAPI
    519 GasketSnpThunkOpen (
    520   IN  EMU_IO_THUNK_PROTOCOL   *This
    521   );
    522 
    523 EFI_STATUS
    524 EFIAPI
    525 GasketSnpThunkClose (
    526   IN  EMU_IO_THUNK_PROTOCOL   *This
    527   );
    528 
    529 EFI_STATUS
    530 EFIAPI
    531 GasketSnpCreateMapping (
    532   IN     EMU_SNP_PROTOCOL         *This,
    533   IN     EFI_SIMPLE_NETWORK_MODE  *Media
    534   );
    535 
    536 EFI_STATUS
    537 EFIAPI
    538 GasketSnpStart (
    539   IN EMU_SNP_PROTOCOL  *This
    540   );
    541 
    542 EFI_STATUS
    543 EFIAPI
    544 GasketSnpStop (
    545   IN EMU_SNP_PROTOCOL  *This
    546   );
    547 
    548 EFI_STATUS
    549 EFIAPI
    550 GasketSnpInitialize (
    551   IN EMU_SNP_PROTOCOL                    *This,
    552   IN UINTN                               ExtraRxBufferSize  OPTIONAL,
    553   IN UINTN                               ExtraTxBufferSize  OPTIONAL
    554   );
    555 
    556 EFI_STATUS
    557 EFIAPI
    558 GasketSnpReset (
    559   IN EMU_SNP_PROTOCOL   *This,
    560   IN BOOLEAN            ExtendedVerification
    561   );
    562 
    563 EFI_STATUS
    564 EFIAPI
    565 GasketSnpShutdown (
    566   IN EMU_SNP_PROTOCOL  *This
    567   );
    568 
    569 EFI_STATUS
    570 EFIAPI
    571 GasketSnpReceiveFilters (
    572   IN EMU_SNP_PROTOCOL                             *This,
    573   IN UINT32                                       Enable,
    574   IN UINT32                                       Disable,
    575   IN BOOLEAN                                      ResetMCastFilter,
    576   IN UINTN                                        MCastFilterCnt     OPTIONAL,
    577   IN EFI_MAC_ADDRESS                              *MCastFilter OPTIONAL
    578   );
    579 
    580 EFI_STATUS
    581 EFIAPI
    582 GasketSnpStationAddress (
    583   IN EMU_SNP_PROTOCOL            *This,
    584   IN BOOLEAN                     Reset,
    585   IN EFI_MAC_ADDRESS             *New OPTIONAL
    586   );
    587 
    588 EFI_STATUS
    589 EFIAPI
    590 GasketSnpStatistics (
    591   IN EMU_SNP_PROTOCOL                     *This,
    592   IN BOOLEAN                              Reset,
    593   IN OUT UINTN                            *StatisticsSize   OPTIONAL,
    594   OUT EFI_NETWORK_STATISTICS              *StatisticsTable  OPTIONAL
    595   );
    596 
    597 EFI_STATUS
    598 EFIAPI
    599 GasketSnpMCastIpToMac (
    600   IN EMU_SNP_PROTOCOL                     *This,
    601   IN BOOLEAN                              IPv6,
    602   IN EFI_IP_ADDRESS                       *IP,
    603   OUT EFI_MAC_ADDRESS                     *MAC
    604   );
    605 
    606 EFI_STATUS
    607 EFIAPI
    608 GasketSnpNvData (
    609   IN EMU_SNP_PROTOCOL                     *This,
    610   IN BOOLEAN                              ReadWrite,
    611   IN UINTN                                Offset,
    612   IN UINTN                                BufferSize,
    613   IN OUT VOID                             *Buffer
    614   );
    615 
    616 EFI_STATUS
    617 EFIAPI
    618 GasketSnpGetStatus (
    619   IN EMU_SNP_PROTOCOL                     *This,
    620   OUT UINT32                              *InterruptStatus OPTIONAL,
    621   OUT VOID                                **TxBuf OPTIONAL
    622   );
    623 
    624 EFI_STATUS
    625 EFIAPI
    626 GasketSnpTransmit (
    627   IN EMU_SNP_PROTOCOL                     *This,
    628   IN UINTN                                HeaderSize,
    629   IN UINTN                                BufferSize,
    630   IN VOID                                 *Buffer,
    631   IN EFI_MAC_ADDRESS                      *SrcAddr  OPTIONAL,
    632   IN EFI_MAC_ADDRESS                      *DestAddr OPTIONAL,
    633   IN UINT16                               *Protocol OPTIONAL
    634   );
    635 
    636 EFI_STATUS
    637 EFIAPI
    638 GasketSnpReceive (
    639   IN EMU_SNP_PROTOCOL                     *This,
    640   OUT UINTN                               *HeaderSize OPTIONAL,
    641   IN OUT UINTN                            *BufferSize,
    642   OUT VOID                                *Buffer,
    643   OUT EFI_MAC_ADDRESS                     *SrcAddr    OPTIONAL,
    644   OUT EFI_MAC_ADDRESS                     *DestAddr   OPTIONAL,
    645   OUT UINT16                              *Protocol   OPTIONAL
    646   );
    647 
    648 
    649 #endif
    650 
    651 
    652