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 23UINTN 24EFIAPI 25GasketSecWriteStdErr ( 26 IN UINT8 *Buffer, 27 IN UINTN NumberOfBytes 28 ); 29 30EFI_STATUS 31EFIAPI 32GasketSecConfigStdIn ( 33 VOID 34 ); 35 36UINTN 37EFIAPI 38GasketSecWriteStdOut ( 39 IN UINT8 *Buffer, 40 IN UINTN NumberOfBytes 41 ); 42 43UINTN 44EFIAPI 45GasketSecReadStdIn ( 46 IN UINT8 *Buffer, 47 IN UINTN NumberOfBytes 48 ); 49 50BOOLEAN 51EFIAPI 52GasketSecPollStdIn ( 53 VOID 54 ); 55 56VOID * 57EFIAPI 58GasketSecMalloc ( 59 IN UINTN Size 60 ); 61 62VOID * 63EFIAPI 64GasketSecValloc ( 65 IN UINTN Size 66 ); 67 68BOOLEAN 69EFIAPI 70GasketSecFree ( 71 IN VOID *Ptr 72 ); 73 74 75RETURN_STATUS 76EFIAPI 77GasketSecPeCoffGetEntryPoint ( 78 IN VOID *Pe32Data, 79 IN OUT VOID **EntryPoint 80 ); 81 82VOID 83EFIAPI 84GasketSecPeCoffRelocateImageExtraAction ( 85 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext 86 ); 87 88VOID 89EFIAPI 90GasketSecPeCoffUnloadImageExtraAction ( 91 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext 92 ); 93 94VOID 95EFIAPI 96GasketSecSetTimer ( 97 IN UINT64 PeriodMs, 98 IN EMU_SET_TIMER_CALLBACK CallBack 99 ); 100 101VOID 102EFIAPI 103GasketSecEnableInterrupt ( 104 VOID 105 ); 106 107VOID 108EFIAPI 109GasketSecDisableInterrupt ( 110 VOID 111 ); 112 113UINT64 114EFIAPI 115GasketQueryPerformanceFrequency ( 116 VOID 117 ); 118 119UINT64 120EFIAPI 121GasketQueryPerformanceCounter ( 122 VOID 123 ); 124 125 126VOID 127EFIAPI 128GasketSecSleep ( 129 IN UINT64 Nanoseconds 130 ); 131 132VOID 133EFIAPI 134GasketSecCpuSleep ( 135 VOID 136 ); 137 138VOID 139EFIAPI 140GasketSecExit ( 141 UINTN Status 142 ); 143 144VOID 145EFIAPI 146GasketSecGetTime ( 147 OUT EFI_TIME *Time, 148 OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL 149 ); 150 151VOID 152EFIAPI 153GasketSecSetTime ( 154 IN EFI_TIME *Time 155 ); 156 157EFI_STATUS 158EFIAPI 159GasketSecGetNextProtocol ( 160 IN BOOLEAN EmuBusDriver, 161 OUT EMU_IO_THUNK_PROTOCOL **Instance OPTIONAL 162 ); 163 164 165// PPIs produced by SEC 166 167 168EFI_STATUS 169EFIAPI 170GasketSecUnixPeiAutoScan ( 171 IN UINTN Index, 172 OUT EFI_PHYSICAL_ADDRESS *MemoryBase, 173 OUT UINT64 *MemorySize 174 ); 175 176VOID * 177EFIAPI 178GasketSecEmuThunkAddress ( 179 VOID 180 ); 181 182 183EFI_STATUS 184EFIAPI 185GasketSecUnixUnixFwhAddress ( 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 196typedef 197void 198(EFIAPI *CALL_BACK) ( 199 UINT64 Delta 200 ); 201 202UINTN 203ReverseGasketUint64 ( 204 CALL_BACK CallBack, 205 UINT64 a 206 ); 207 208UINTN 209ReverseGasketUint64Uint64 ( 210 VOID *CallBack, 211 VOID *Context, 212 VOID *Key 213 ); 214 215// 216// Gasket functions for EFI_EMU_UGA_IO_PROTOCOL 217// 218 219 220EFI_STATUS 221EFIAPI 222GasketX11Size ( 223 EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo, 224 UINT32 Width, 225 UINT32 Height 226 ); 227 228EFI_STATUS 229EFIAPI 230GasketX11CheckKey ( 231 EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo 232 ); 233 234EFI_STATUS 235EFIAPI 236GasketX11GetKey ( 237 EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo, 238 EFI_KEY_DATA *key 239 ); 240 241EFI_STATUS 242EFIAPI 243GasketX11KeySetState ( 244 EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo, 245 EFI_KEY_TOGGLE_STATE *KeyToggleState 246 ); 247 248EFI_STATUS 249EFIAPI 250GasketX11RegisterKeyNotify ( 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 258EFI_STATUS 259EFIAPI 260GasketX11Blt ( 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 267EFI_STATUS 268EFIAPI 269GasketX11CheckPointer ( 270 EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo 271 ); 272 273EFI_STATUS 274EFIAPI 275GasketX11GetPointerState ( 276 EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo, 277 EFI_SIMPLE_POINTER_STATE *state 278 ); 279 280EFI_STATUS 281EFIAPI 282GasketX11GraphicsWindowOpen ( 283 IN EMU_IO_THUNK_PROTOCOL *This 284 ); 285 286EFI_STATUS 287EFIAPI 288GasketX11GraphicsWindowClose ( 289 IN EMU_IO_THUNK_PROTOCOL *This 290 ); 291 292// Pthreads 293 294UINTN 295EFIAPI 296GasketPthreadMutexLock ( 297 IN VOID *Mutex 298 ); 299 300 301 302UINTN 303EFIAPI 304GasketPthreadMutexUnLock ( 305 IN VOID *Mutex 306 ); 307 308 309UINTN 310EFIAPI 311GasketPthreadMutexTryLock ( 312 IN VOID *Mutex 313 ); 314 315 316VOID * 317EFIAPI 318GasketPthreadMutexInit ( 319 IN VOID 320 ); 321 322 323UINTN 324EFIAPI 325GasketPthreadMutexDestroy ( 326 IN VOID *Mutex 327 ); 328 329 330UINTN 331EFIAPI 332GasketPthreadCreate ( 333 IN VOID *Thread, 334 IN VOID *Attribute, 335 IN THREAD_THUNK_THREAD_ENTRY Start, 336 IN VOID *Context 337 ); 338 339VOID 340EFIAPI 341GasketPthreadExit ( 342 IN VOID *ValuePtr 343 ); 344 345 346UINTN 347EFIAPI 348GasketPthreadSelf ( 349 VOID 350 ); 351 352EFI_STATUS 353EFIAPI 354GasketPthreadOpen ( 355 IN EMU_IO_THUNK_PROTOCOL *This 356 ); 357 358EFI_STATUS 359EFIAPI 360GasketPthreadClose ( 361 IN EMU_IO_THUNK_PROTOCOL *This 362 ); 363 364 365// PosixFileSystem 366 367EFI_STATUS 368EFIAPI 369GasketPosixOpenVolume ( 370 IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, 371 OUT EFI_FILE_PROTOCOL **Root 372 ); 373 374EFI_STATUS 375EFIAPI 376GasketPosixFileOpen ( 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 384EFI_STATUS 385EFIAPI 386GasketPosixFileCLose ( 387 IN EFI_FILE_PROTOCOL *This 388 ); 389 390EFI_STATUS 391EFIAPI 392GasketPosixFileDelete ( 393 IN EFI_FILE_PROTOCOL *This 394 ); 395 396EFI_STATUS 397EFIAPI 398GasketPosixFileRead ( 399 IN EFI_FILE_PROTOCOL *This, 400 IN OUT UINTN *BufferSize, 401 OUT VOID *Buffer 402 ); 403 404EFI_STATUS 405EFIAPI 406GasketPosixFileWrite ( 407 IN EFI_FILE_PROTOCOL *This, 408 IN OUT UINTN *BufferSize, 409 IN VOID *Buffer 410 ); 411 412EFI_STATUS 413EFIAPI 414GasketPosixFileSetPossition ( 415 IN EFI_FILE_PROTOCOL *This, 416 IN UINT64 Position 417 ); 418 419EFI_STATUS 420EFIAPI 421GasketPosixFileGetPossition ( 422 IN EFI_FILE_PROTOCOL *This, 423 OUT UINT64 *Position 424 ); 425 426EFI_STATUS 427EFIAPI 428GasketPosixFileGetInfo ( 429 IN EFI_FILE_PROTOCOL *This, 430 IN EFI_GUID *InformationType, 431 IN OUT UINTN *BufferSize, 432 OUT VOID *Buffer 433 ); 434 435EFI_STATUS 436EFIAPI 437GasketPosixFileSetInfo ( 438 IN EFI_FILE_PROTOCOL *This, 439 IN EFI_GUID *InformationType, 440 IN UINTN BufferSize, 441 IN VOID *Buffer 442 ); 443 444EFI_STATUS 445EFIAPI 446GasketPosixFileFlush ( 447 IN EFI_FILE_PROTOCOL *This 448 ); 449 450EFI_STATUS 451EFIAPI 452GasketPosixFileSystmeThunkOpen ( 453 IN EMU_IO_THUNK_PROTOCOL *This 454 ); 455 456EFI_STATUS 457EFIAPI 458GasketPosixFileSystmeThunkClose ( 459 IN EMU_IO_THUNK_PROTOCOL *This 460 ); 461 462EFI_STATUS 463EFIAPI 464GasketEmuBlockIoReset ( 465 IN EMU_BLOCK_IO_PROTOCOL *This, 466 IN BOOLEAN ExtendedVerification 467 ); 468 469EFI_STATUS 470EFIAPI 471GasketEmuBlockIoReadBlocks ( 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 480EFI_STATUS 481EFIAPI 482GasketEmuBlockIoWriteBlocks ( 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 491EFI_STATUS 492EFIAPI 493GasketEmuBlockIoFlushBlocks ( 494 IN EMU_BLOCK_IO_PROTOCOL *This, 495 IN OUT EFI_BLOCK_IO2_TOKEN *Token 496 ); 497 498EFI_STATUS 499EFIAPI 500GasketEmuBlockIoCreateMapping ( 501 IN EMU_BLOCK_IO_PROTOCOL *This, 502 IN EFI_BLOCK_IO_MEDIA *Media 503 ); 504 505EFI_STATUS 506EFIAPI 507GasketBlockIoThunkOpen ( 508 IN EMU_IO_THUNK_PROTOCOL *This 509 ); 510 511EFI_STATUS 512EFIAPI 513GasketBlockIoThunkClose ( 514 IN EMU_IO_THUNK_PROTOCOL *This 515 ); 516 517EFI_STATUS 518EFIAPI 519GasketSnpThunkOpen ( 520 IN EMU_IO_THUNK_PROTOCOL *This 521 ); 522 523EFI_STATUS 524EFIAPI 525GasketSnpThunkClose ( 526 IN EMU_IO_THUNK_PROTOCOL *This 527 ); 528 529EFI_STATUS 530EFIAPI 531GasketSnpCreateMapping ( 532 IN EMU_SNP_PROTOCOL *This, 533 IN EFI_SIMPLE_NETWORK_MODE *Media 534 ); 535 536EFI_STATUS 537EFIAPI 538GasketSnpStart ( 539 IN EMU_SNP_PROTOCOL *This 540 ); 541 542EFI_STATUS 543EFIAPI 544GasketSnpStop ( 545 IN EMU_SNP_PROTOCOL *This 546 ); 547 548EFI_STATUS 549EFIAPI 550GasketSnpInitialize ( 551 IN EMU_SNP_PROTOCOL *This, 552 IN UINTN ExtraRxBufferSize OPTIONAL, 553 IN UINTN ExtraTxBufferSize OPTIONAL 554 ); 555 556EFI_STATUS 557EFIAPI 558GasketSnpReset ( 559 IN EMU_SNP_PROTOCOL *This, 560 IN BOOLEAN ExtendedVerification 561 ); 562 563EFI_STATUS 564EFIAPI 565GasketSnpShutdown ( 566 IN EMU_SNP_PROTOCOL *This 567 ); 568 569EFI_STATUS 570EFIAPI 571GasketSnpReceiveFilters ( 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 580EFI_STATUS 581EFIAPI 582GasketSnpStationAddress ( 583 IN EMU_SNP_PROTOCOL *This, 584 IN BOOLEAN Reset, 585 IN EFI_MAC_ADDRESS *New OPTIONAL 586 ); 587 588EFI_STATUS 589EFIAPI 590GasketSnpStatistics ( 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 597EFI_STATUS 598EFIAPI 599GasketSnpMCastIpToMac ( 600 IN EMU_SNP_PROTOCOL *This, 601 IN BOOLEAN IPv6, 602 IN EFI_IP_ADDRESS *IP, 603 OUT EFI_MAC_ADDRESS *MAC 604 ); 605 606EFI_STATUS 607EFIAPI 608GasketSnpNvData ( 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 616EFI_STATUS 617EFIAPI 618GasketSnpGetStatus ( 619 IN EMU_SNP_PROTOCOL *This, 620 OUT UINT32 *InterruptStatus OPTIONAL, 621 OUT VOID **TxBuf OPTIONAL 622 ); 623 624EFI_STATUS 625EFIAPI 626GasketSnpTransmit ( 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 636EFI_STATUS 637EFIAPI 638GasketSnpReceive ( 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