1 | /* $Id: fsw_efi.h 76553 2019-01-01 01:45:53Z vboxsync $ */
|
---|
2 | /** @file
|
---|
3 | * fsw_efi.h - EFI host environment header.
|
---|
4 | */
|
---|
5 |
|
---|
6 | /*
|
---|
7 | * Copyright (C) 2010-2019 Oracle Corporation
|
---|
8 | *
|
---|
9 | * This file is part of VirtualBox Open Source Edition (OSE), as
|
---|
10 | * available from http://www.virtualbox.org. This file is free software;
|
---|
11 | * you can redistribute it and/or modify it under the terms of the GNU
|
---|
12 | * General Public License (GPL) as published by the Free Software
|
---|
13 | * Foundation, in version 2 as it comes in the "COPYING" file of the
|
---|
14 | * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
|
---|
15 | * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
|
---|
16 | *
|
---|
17 | * The contents of this file may alternatively be used under the terms
|
---|
18 | * of the Common Development and Distribution License Version 1.0
|
---|
19 | * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
|
---|
20 | * VirtualBox OSE distribution, in which case the provisions of the
|
---|
21 | * CDDL are applicable instead of those of the GPL.
|
---|
22 | *
|
---|
23 | * You may elect to license modified versions of this file under the
|
---|
24 | * terms and conditions of either the GPL or the CDDL or both.
|
---|
25 | * ---------------------------------------------------------------------------
|
---|
26 | * This code is based on:
|
---|
27 | *
|
---|
28 | * Copyright (c) 2006 Christoph Pfisterer
|
---|
29 | *
|
---|
30 | * Redistribution and use in source and binary forms, with or without
|
---|
31 | * modification, are permitted provided that the following conditions are
|
---|
32 | * met:
|
---|
33 | *
|
---|
34 | * * Redistributions of source code must retain the above copyright
|
---|
35 | * notice, this list of conditions and the following disclaimer.
|
---|
36 | *
|
---|
37 | * * Redistributions in binary form must reproduce the above copyright
|
---|
38 | * notice, this list of conditions and the following disclaimer in the
|
---|
39 | * documentation and/or other materials provided with the
|
---|
40 | * distribution.
|
---|
41 | *
|
---|
42 | * * Neither the name of Christoph Pfisterer nor the names of the
|
---|
43 | * contributors may be used to endorse or promote products derived
|
---|
44 | * from this software without specific prior written permission.
|
---|
45 | *
|
---|
46 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
---|
47 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
---|
48 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
---|
49 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
---|
50 | * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
---|
51 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
---|
52 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
---|
53 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
---|
54 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
---|
55 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
---|
56 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
---|
57 | */
|
---|
58 |
|
---|
59 | #ifndef _FSW_EFI_H_
|
---|
60 | #define _FSW_EFI_H_
|
---|
61 |
|
---|
62 | #include "fsw_core.h"
|
---|
63 |
|
---|
64 |
|
---|
65 | /**
|
---|
66 | * EFI Host: Private per-volume structure.
|
---|
67 | */
|
---|
68 |
|
---|
69 | typedef struct {
|
---|
70 | UINT64 Signature; //!< Used to identify this structure
|
---|
71 |
|
---|
72 | EFI_FILE_IO_INTERFACE FileSystem; //!< Published EFI protocol interface structure
|
---|
73 |
|
---|
74 | EFI_HANDLE Handle; //!< The device handle the protocol is attached to
|
---|
75 | EFI_DISK_IO *DiskIo; //!< The Disk I/O protocol we use for disk access
|
---|
76 | UINT32 MediaId; //!< The media ID from the Block I/O protocol
|
---|
77 | EFI_STATUS LastIOStatus; //!< Last status from Disk I/O
|
---|
78 |
|
---|
79 | struct fsw_volume *vol; //!< FSW volume structure
|
---|
80 |
|
---|
81 | } FSW_VOLUME_DATA;
|
---|
82 |
|
---|
83 | /** Signature for the volume structure. */
|
---|
84 | #define FSW_VOLUME_DATA_SIGNATURE EFI_SIGNATURE_32 ('f', 's', 'w', 'V')
|
---|
85 | /** Access macro for the volume structure. */
|
---|
86 | #define FSW_VOLUME_FROM_FILE_SYSTEM(a) CR (a, FSW_VOLUME_DATA, FileSystem, FSW_VOLUME_DATA_SIGNATURE)
|
---|
87 |
|
---|
88 | /**
|
---|
89 | * EFI Host: Private structure for a EFI_FILE interface.
|
---|
90 | */
|
---|
91 |
|
---|
92 | typedef struct {
|
---|
93 | UINT64 Signature; //!< Used to identify this structure
|
---|
94 |
|
---|
95 | EFI_FILE FileHandle; //!< Published EFI protocol interface structure
|
---|
96 |
|
---|
97 | UINTN Type; //!< File type used for dispatching
|
---|
98 | struct fsw_shandle shand; //!< FSW handle for this file
|
---|
99 |
|
---|
100 | } FSW_FILE_DATA;
|
---|
101 |
|
---|
102 | /** File type: regular file. */
|
---|
103 | #define FSW_EFI_FILE_TYPE_FILE (0)
|
---|
104 | /** File type: directory. */
|
---|
105 | #define FSW_EFI_FILE_TYPE_DIR (1)
|
---|
106 |
|
---|
107 | /** Signature for the file handle structure. */
|
---|
108 | #define FSW_FILE_DATA_SIGNATURE EFI_SIGNATURE_32 ('f', 's', 'w', 'F')
|
---|
109 | /** Access macro for the file handle structure. */
|
---|
110 | #define FSW_FILE_FROM_FILE_HANDLE(a) CR (a, FSW_FILE_DATA, FileHandle, FSW_FILE_DATA_SIGNATURE)
|
---|
111 |
|
---|
112 |
|
---|
113 | //
|
---|
114 | // Library functions
|
---|
115 | //
|
---|
116 |
|
---|
117 | VOID fsw_efi_decode_time(OUT EFI_TIME *EfiTime, IN UINT32 UnixTime);
|
---|
118 |
|
---|
119 | UINTN fsw_efi_strsize(struct fsw_string *s);
|
---|
120 | VOID fsw_efi_strcpy(CHAR16 *Dest, struct fsw_string *src);
|
---|
121 |
|
---|
122 |
|
---|
123 | #endif
|
---|