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