mirror of
https://github.com/justinian/j6-uefi-headers.git
synced 2025-12-09 16:14:31 -08:00
Initial import
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
include/uefi/protos/*
|
||||||
354
LICENSE.md
Normal file
354
LICENSE.md
Normal file
@@ -0,0 +1,354 @@
|
|||||||
|
# License
|
||||||
|
|
||||||
|
j6-uefi-headers is (c) 2020 Justin C Miller, and distributed under the terms of
|
||||||
|
the Mozilla Public License 2.0.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Mozilla Public License Version 2.0
|
||||||
|
|
||||||
|
### 1. Definitions
|
||||||
|
|
||||||
|
#### 1.1. "Contributor"
|
||||||
|
|
||||||
|
means each individual or legal entity that creates, contributes to the creation
|
||||||
|
of, or owns Covered Software.
|
||||||
|
|
||||||
|
#### 1.2. "Contributor Version"
|
||||||
|
|
||||||
|
means the combination of the Contributions of others (if any) used by a
|
||||||
|
Contributor and that particular Contributor's Contribution.
|
||||||
|
|
||||||
|
#### 1.3. "Contribution
|
||||||
|
|
||||||
|
means Covered Software of a particular Contributor.
|
||||||
|
|
||||||
|
#### 1.4. "Covered Software"
|
||||||
|
|
||||||
|
means Source Code Form to which the initial Contributor has attached the notice
|
||||||
|
in Exhibit A, the Executable Form of such Source Code Form, and Modifications
|
||||||
|
of such Source Code Form, in each case including portions thereof.
|
||||||
|
|
||||||
|
#### 1.5. "Incompatible With Secondary Licenses"
|
||||||
|
|
||||||
|
means
|
||||||
|
|
||||||
|
* **(a)** that the initial Contributor has attached the notice described in
|
||||||
|
Exhibit B to the Covered Software; or
|
||||||
|
* **(b)** that the Covered Software was made available under the terms of
|
||||||
|
version 1.1 or earlier of the License, but not also under the terms of a
|
||||||
|
Secondary License.
|
||||||
|
|
||||||
|
#### 1.6. "Executable Form"
|
||||||
|
|
||||||
|
means any form of the work other than Source Code Form.
|
||||||
|
|
||||||
|
#### 1.7. "Larger Work"
|
||||||
|
|
||||||
|
means a work that combines Covered Software with other material, in a separate
|
||||||
|
file or files, that is not Covered Software.
|
||||||
|
|
||||||
|
#### 1.8. "License"
|
||||||
|
|
||||||
|
means this document.
|
||||||
|
|
||||||
|
#### 1.9. "Licensable"
|
||||||
|
|
||||||
|
means having the right to grant, to the maximum extent possible, whether at the
|
||||||
|
time of the initial grant or subsequently, any and all of the rights conveyed
|
||||||
|
by this License.
|
||||||
|
|
||||||
|
#### 1.10. "Modifications"
|
||||||
|
|
||||||
|
means any of the following:
|
||||||
|
|
||||||
|
* **(a)** any file in Source Code Form that results from an addition to,
|
||||||
|
deletion from, or modification of the contents of Covered Software; or
|
||||||
|
* **(b)** any new file in Source Code Form that contains any Covered Software.
|
||||||
|
|
||||||
|
#### 1.11. "Patent Claims" of a Contributor
|
||||||
|
|
||||||
|
means any patent claim(s), including without limitation, method, process, and
|
||||||
|
apparatus claims, in any patent Licensable by such Contributor that would be
|
||||||
|
infringed, but for the grant of the License, by the making, using, selling,
|
||||||
|
offering for sale, having made, import, or transfer of either its Contributions
|
||||||
|
or its Contributor Version.
|
||||||
|
|
||||||
|
#### 1.12. "Secondary License"
|
||||||
|
|
||||||
|
means either the GNU General Public License, Version 2.0, the GNU Lesser
|
||||||
|
General Public License, Version 2.1, the GNU Affero General Public License,
|
||||||
|
Version 3.0, or any later versions of those licenses.
|
||||||
|
|
||||||
|
#### 1.13. "Source Code Form"
|
||||||
|
|
||||||
|
means the form of the work preferred for making modifications.
|
||||||
|
|
||||||
|
#### 1.14. "You" (or "Your")
|
||||||
|
|
||||||
|
means an individual or a legal entity exercising rights under this License. For
|
||||||
|
legal entities, "You" includes any entity that controls, is controlled by, or
|
||||||
|
is under common control with You. For purposes of this definition, "control"
|
||||||
|
means **(a)** the power, direct or indirect, to cause the direction or
|
||||||
|
management of such entity, whether by contract or otherwise, or **(b)**
|
||||||
|
ownership of more than fifty percent (50%) of the outstanding shares or
|
||||||
|
beneficial ownership of such entity.
|
||||||
|
|
||||||
|
|
||||||
|
### 2. License Grants and Conditions
|
||||||
|
|
||||||
|
#### 2.1. Grants
|
||||||
|
|
||||||
|
Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive
|
||||||
|
license:
|
||||||
|
|
||||||
|
* **(a)** under intellectual property rights (other than patent or trademark)
|
||||||
|
Licensable by such Contributor to use, reproduce, make available, modify,
|
||||||
|
display, perform, distribute, and otherwise exploit its Contributions, either
|
||||||
|
on an unmodified basis, with Modifications, or as part of a Larger Work; and
|
||||||
|
* **(b)** under Patent Claims of such Contributor to make, use, sell, offer for
|
||||||
|
sale, have made, import, and otherwise transfer either its Contributions or
|
||||||
|
its Contributor Version.
|
||||||
|
|
||||||
|
#### 2.2. Effective Date
|
||||||
|
|
||||||
|
The licenses granted in Section 2.1 with respect to any Contribution become
|
||||||
|
effective for each Contribution on the date the Contributor first distributes
|
||||||
|
such Contribution.
|
||||||
|
|
||||||
|
#### 2.3. Limitations on Grant Scope
|
||||||
|
|
||||||
|
The licenses granted in this Section 2 are the only rights granted under this
|
||||||
|
License. No additional rights or licenses will be implied from the distribution
|
||||||
|
or licensing of Covered Software under this License. Notwithstanding Section
|
||||||
|
2.1(b) above, no patent license is granted by a Contributor:
|
||||||
|
|
||||||
|
* **(a)** for any code that a Contributor has removed from Covered Software; or
|
||||||
|
* **(b)** for infringements caused by: **(i)** Your and any other third party's
|
||||||
|
modifications of Covered Software, or **(ii)** the combination of its
|
||||||
|
Contributions with other software (except as part of its Contributor
|
||||||
|
Version); or
|
||||||
|
* **(c)** under Patent Claims infringed by Covered Software in the absence of
|
||||||
|
its Contributions.
|
||||||
|
|
||||||
|
This License does not grant any rights in the trademarks, service marks, or
|
||||||
|
logos of any Contributor (except as may be necessary to comply with the notice
|
||||||
|
requirements in Section 3.4).
|
||||||
|
|
||||||
|
#### 2.4. Subsequent Licenses
|
||||||
|
|
||||||
|
No Contributor makes additional grants as a result of Your choice to distribute
|
||||||
|
the Covered Software under a subsequent version of this License (see Section
|
||||||
|
10.2) or under the terms of a Secondary License (if permitted under the terms
|
||||||
|
of Section 3.3).
|
||||||
|
|
||||||
|
#### 2.5. Representation
|
||||||
|
|
||||||
|
Each Contributor represents that the Contributor believes its Contributions are
|
||||||
|
its original creation(s) or it has sufficient rights to grant the rights to its
|
||||||
|
Contributions conveyed by this License.
|
||||||
|
|
||||||
|
#### 2.6. Fair Use
|
||||||
|
|
||||||
|
This License is not intended to limit any rights You have under applicable
|
||||||
|
copyright doctrines of fair use, fair dealing, or other equivalents.
|
||||||
|
|
||||||
|
#### 2.7. Conditions
|
||||||
|
|
||||||
|
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in
|
||||||
|
Section 2.1.
|
||||||
|
|
||||||
|
|
||||||
|
### 3. Responsibilities
|
||||||
|
|
||||||
|
#### 3.1. Distribution of Source Form
|
||||||
|
|
||||||
|
All distribution of Covered Software in Source Code Form, including any
|
||||||
|
Modifications that You create or to which You contribute, must be under the
|
||||||
|
terms of this License. You must inform recipients that the Source Code Form of
|
||||||
|
the Covered Software is governed by the terms of this License, and how they can
|
||||||
|
obtain a copy of this License. You may not attempt to alter or restrict the
|
||||||
|
recipients' rights in the Source Code Form.
|
||||||
|
|
||||||
|
#### 3.2. Distribution of Executable Form
|
||||||
|
|
||||||
|
If You distribute Covered Software in Executable Form then:
|
||||||
|
|
||||||
|
* **(a)** such Covered Software must also be made available in Source Code
|
||||||
|
Form, as described in Section 3.1, and You must inform recipients of the
|
||||||
|
Executable Form how they can obtain a copy of such Source Code Form by
|
||||||
|
reasonable means in a timely manner, at a charge no more than the cost of
|
||||||
|
distribution to the recipient; and
|
||||||
|
* **(b)** You may distribute such Executable Form under the terms of this
|
||||||
|
License, or sublicense it under different terms, provided that the license
|
||||||
|
for the Executable Form does not attempt to limit or alter the recipients'
|
||||||
|
rights in the Source Code Form under this License.
|
||||||
|
|
||||||
|
#### 3.3. Distribution of a Larger Work
|
||||||
|
|
||||||
|
You may create and distribute a Larger Work under terms of Your choice,
|
||||||
|
provided that You also comply with the requirements of this License for the
|
||||||
|
Covered Software. If the Larger Work is a combination of Covered Software with
|
||||||
|
a work governed by one or more Secondary Licenses, and the Covered Software is
|
||||||
|
not Incompatible With Secondary Licenses, this License permits You to
|
||||||
|
additionally distribute such Covered Software under the terms of such Secondary
|
||||||
|
License(s), so that the recipient of the Larger Work may, at their option,
|
||||||
|
further distribute the Covered Software under the terms of either this License
|
||||||
|
or such Secondary License(s).
|
||||||
|
|
||||||
|
#### 3.4. Notices
|
||||||
|
|
||||||
|
You may not remove or alter the substance of any license notices (including
|
||||||
|
copyright notices, patent notices, disclaimers of warranty, or limitations of
|
||||||
|
liability) contained within the Source Code Form of the Covered Software,
|
||||||
|
except that You may alter any license notices to the extent required to remedy
|
||||||
|
known factual inaccuracies.
|
||||||
|
|
||||||
|
#### 3.5. Application of Additional Terms
|
||||||
|
|
||||||
|
You may choose to offer, and to charge a fee for, warranty, support, indemnity
|
||||||
|
or liability obligations to one or more recipients of Covered Software.
|
||||||
|
However, You may do so only on Your own behalf, and not on behalf of any
|
||||||
|
Contributor. You must make it absolutely clear that any such warranty, support,
|
||||||
|
indemnity, or liability obligation is offered by You alone, and You hereby
|
||||||
|
agree to indemnify every Contributor for any liability incurred by such
|
||||||
|
Contributor as a result of warranty, support, indemnity or liability terms You
|
||||||
|
offer. You may include additional disclaimers of warranty and limitations of
|
||||||
|
liability specific to any jurisdiction.
|
||||||
|
|
||||||
|
|
||||||
|
### 4. Inability to Comply Due to Statute or Regulation
|
||||||
|
|
||||||
|
If it is impossible for You to comply with any of the terms of this License
|
||||||
|
with respect to some or all of the Covered Software due to statute, judicial
|
||||||
|
order, or regulation then You must: **(a)** comply with the terms of this
|
||||||
|
License to the maximum extent possible; and **(b)** describe the limitations
|
||||||
|
and the code they affect. Such description must be placed in a text file
|
||||||
|
included with all distributions of the Covered Software under this License.
|
||||||
|
Except to the extent prohibited by statute or regulation, such description must
|
||||||
|
be sufficiently detailed for a recipient of ordinary skill to be able to
|
||||||
|
understand it.
|
||||||
|
|
||||||
|
|
||||||
|
### 5. Termination
|
||||||
|
|
||||||
|
**5.1.** The rights granted under this License will terminate automatically if
|
||||||
|
You fail to comply with any of its terms. However, if You become compliant,
|
||||||
|
then the rights granted under this License from a particular Contributor are
|
||||||
|
reinstated **(a)** provisionally, unless and until such Contributor explicitly
|
||||||
|
and finally terminates Your grants, and **(b)** on an ongoing basis, if such
|
||||||
|
Contributor fails to notify You of the non-compliance by some reasonable means
|
||||||
|
prior to 60 days after You have come back into compliance. Moreover, Your
|
||||||
|
grants from a particular Contributor are reinstated on an ongoing basis if such
|
||||||
|
Contributor notifies You of the non-compliance by some reasonable means, this
|
||||||
|
is the first time You have received notice of non-compliance with this License
|
||||||
|
from such Contributor, and You become compliant prior to 30 days after Your
|
||||||
|
receipt of the notice.
|
||||||
|
|
||||||
|
**5.2.** If You initiate litigation against any entity by asserting a patent
|
||||||
|
infringement claim (excluding declaratory judgment actions, counter-claims, and
|
||||||
|
cross-claims) alleging that a Contributor Version directly or indirectly
|
||||||
|
infringes any patent, then the rights granted to You by any and all
|
||||||
|
Contributors for the Covered Software under Section 2.1 of this License shall
|
||||||
|
terminate.
|
||||||
|
|
||||||
|
**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all end
|
||||||
|
user license agreements (excluding distributors and resellers) which have been
|
||||||
|
validly granted by You or Your distributors under this License prior to
|
||||||
|
termination shall survive termination.
|
||||||
|
|
||||||
|
|
||||||
|
### 6. Disclaimer of Warranty
|
||||||
|
|
||||||
|
> Covered Software is provided under this License on an "as is" basis, without
|
||||||
|
> warranty of any kind, either expressed, implied, or statutory, including,
|
||||||
|
> without limitation, warranties that the Covered Software is free of defects,
|
||||||
|
> merchantable, fit for a particular purpose or non-infringing. The entire risk
|
||||||
|
> as to the quality and performance of the Covered Software is with You.
|
||||||
|
> Should any Covered Software prove defective in any respect, You (not any
|
||||||
|
> Contributor) assume the cost of any necessary servicing, repair, or
|
||||||
|
> correction. This disclaimer of warranty constitutes an essential part of this
|
||||||
|
> License. No use of any Covered Software is authorized under this License
|
||||||
|
> except under this disclaimer.
|
||||||
|
|
||||||
|
### 7. Limitation of Liability
|
||||||
|
|
||||||
|
> Under no circumstances and under no legal theory, whether tort (including
|
||||||
|
> negligence), contract, or otherwise, shall any Contributor, or anyone who
|
||||||
|
> distributes Covered Software as permitted above, be liable to You for any
|
||||||
|
> direct, indirect, special, incidental, or consequential damages of any
|
||||||
|
> character including, without limitation, damages for lost profits, loss of
|
||||||
|
> goodwill, work stoppage, computer failure or malfunction, or any and all
|
||||||
|
> other commercial damages or losses, even if such party shall have been
|
||||||
|
> informed of the possibility of such damages. This limitation of liability
|
||||||
|
> shall not apply to liability for death or personal injury resulting from such
|
||||||
|
> party's negligence to the extent applicable law prohibits such limitation.
|
||||||
|
> Some jurisdictions do not allow the exclusion or limitation of incidental or
|
||||||
|
> consequential damages, so this exclusion and limitation may not apply to You.
|
||||||
|
|
||||||
|
|
||||||
|
### 8. Litigation
|
||||||
|
|
||||||
|
Any litigation relating to this License may be brought only in the courts of a
|
||||||
|
jurisdiction where the defendant maintains its principal place of business and
|
||||||
|
such litigation shall be governed by laws of that jurisdiction, without
|
||||||
|
reference to its conflict-of-law provisions. Nothing in this Section shall
|
||||||
|
prevent a party's ability to bring cross-claims or counter-claims.
|
||||||
|
|
||||||
|
|
||||||
|
### 9. Miscellaneous
|
||||||
|
|
||||||
|
This License represents the complete agreement concerning the subject matter
|
||||||
|
hereof. If any provision of this License is held to be unenforceable, such
|
||||||
|
provision shall be reformed only to the extent necessary to make it
|
||||||
|
enforceable. Any law or regulation which provides that the language of a
|
||||||
|
contract shall be construed against the drafter shall not be used to construe
|
||||||
|
this License against a Contributor.
|
||||||
|
|
||||||
|
|
||||||
|
### 10. Versions of the License
|
||||||
|
|
||||||
|
#### 10.1. New Versions
|
||||||
|
|
||||||
|
Mozilla Foundation is the license steward. Except as provided in Section 10.3,
|
||||||
|
no one other than the license steward has the right to modify or publish new
|
||||||
|
versions of this License. Each version will be given a distinguishing version
|
||||||
|
number.
|
||||||
|
|
||||||
|
#### 10.2. Effect of New Versions
|
||||||
|
|
||||||
|
You may distribute the Covered Software under the terms of the version of the
|
||||||
|
License under which You originally received the Covered Software, or under the
|
||||||
|
terms of any subsequent version published by the license steward.
|
||||||
|
|
||||||
|
#### 10.3. Modified Versions
|
||||||
|
|
||||||
|
If you create software not governed by this License, and you want to create a
|
||||||
|
new license for such software, you may create and use a modified version of
|
||||||
|
this License if you rename the license and remove any references to the name of
|
||||||
|
the license steward (except to note that such modified license differs from
|
||||||
|
this License).
|
||||||
|
|
||||||
|
#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses
|
||||||
|
|
||||||
|
If You choose to distribute Source Code Form that is Incompatible With
|
||||||
|
Secondary Licenses under the terms of this version of the License, the notice
|
||||||
|
described in Exhibit B of this License must be attached.
|
||||||
|
|
||||||
|
### Exhibit A - Source Code Form License Notice
|
||||||
|
|
||||||
|
This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||||
|
You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
If it is not possible or desirable to put the notice in a particular file, then
|
||||||
|
You may include the notice in a location (such as a LICENSE file in a relevant
|
||||||
|
directory) where a recipient would be likely to look for such a notice.
|
||||||
|
|
||||||
|
You may add additional accurate notices of copyright ownership.
|
||||||
|
|
||||||
|
### Exhibit B - "Incompatible With Secondary Licenses" Notice
|
||||||
|
|
||||||
|
This Source Code Form is "Incompatible With Secondary Licenses", as defined
|
||||||
|
by the Mozilla Public License, v. 2.0.
|
||||||
|
|
||||||
20
README.md
Normal file
20
README.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# j6 UEFI headers
|
||||||
|
|
||||||
|
This is a set of headers for interacting with UEFI as a C++ EFI application. I
|
||||||
|
found the EDK2 headers seemed to be missing some definitions (or perhaps I just
|
||||||
|
hadn't found the right headers to include), and the GNU-EFI ones to be specific
|
||||||
|
to using GNU-EFI and tended to break when using clang to natively build an EFI
|
||||||
|
application.
|
||||||
|
|
||||||
|
I also hate the style of the standard headers, they should probably
|
||||||
|
come with a trigger warning for anyone who had to spend time doing Win32 COM
|
||||||
|
programming. So I've created my headers in a modern C++ style that is ABI
|
||||||
|
compatible, but doesn't attempt to be API compatible with other UEFI headers.
|
||||||
|
|
||||||
|
The UEFI protocol definition headers aren't directly included in the git repo,
|
||||||
|
but are generated from the `protos.yaml` file via the `generate_protos.py`
|
||||||
|
script. I've started with just the protocols I'm actually using in the [jsix][]
|
||||||
|
bootloader, but new protocols should be fairly simple to add. I'll happily
|
||||||
|
accept pull requests if you find this code useful.
|
||||||
|
|
||||||
|
[jsix]: https://github.com/justinian/jsix
|
||||||
80
generate_protos.py
Executable file
80
generate_protos.py
Executable file
@@ -0,0 +1,80 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||||
|
# You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
import os
|
||||||
|
import os.path
|
||||||
|
from jinja2 import Template
|
||||||
|
|
||||||
|
template = Template('''#pragma once
|
||||||
|
#ifndef _uefi_protos_{{ name }}_h_
|
||||||
|
#define _uefi_protos_{{ name }}_h_
|
||||||
|
|
||||||
|
// This file was auto generated by the j6-uefi-headers project. Please see
|
||||||
|
// https://github.com/justinian/j6-uefi-headers for more information.
|
||||||
|
|
||||||
|
#include <uefi/guid.h>
|
||||||
|
{%- for header in headers %}
|
||||||
|
#include <{{ header }}>
|
||||||
|
{%- endfor %}
|
||||||
|
|
||||||
|
namespace uefi {
|
||||||
|
namespace protos {
|
||||||
|
struct {{ name }};
|
||||||
|
|
||||||
|
namespace {{ name }}_impl {
|
||||||
|
{%- for method in methods %}
|
||||||
|
using {{ method.name }} = uefi::status (*)(
|
||||||
|
{%- if not method.get("skip_this", false) -%}uefi::protos::{{ name }} *{%- endif -%}
|
||||||
|
{%- if not method.get("skip_this", false) and method.args %}, {% endif -%}
|
||||||
|
{{ method.args|join(', ', attribute='type') }});
|
||||||
|
{%- endfor %}
|
||||||
|
} // namespace {{ name }}_impl
|
||||||
|
|
||||||
|
struct {{ name }}
|
||||||
|
{
|
||||||
|
static constexpr uefi::guid guid{ {{ guid }} };
|
||||||
|
{% for method in methods %}
|
||||||
|
inline uefi::status {{ method.name }}(
|
||||||
|
{%- for arg in method.args -%}
|
||||||
|
{% if not loop.first %}, {% endif -%}
|
||||||
|
{{ arg.type }} {{ arg.name }}
|
||||||
|
{%- endfor %}) {
|
||||||
|
return _{{ method.name }}(
|
||||||
|
{%- if not method.get("skip_this", false) -%}this{%- endif -%}
|
||||||
|
{%- if not method.get("skip_this", false) and method.args %}, {% endif -%}
|
||||||
|
{{ method.args|join(', ', attribute='name') }});
|
||||||
|
}
|
||||||
|
{% endfor %}
|
||||||
|
{%- for datum in pre_data %}
|
||||||
|
{{ datum.type }} {{ datum.name }};
|
||||||
|
{%- endfor %}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
{%- for method in methods %}
|
||||||
|
{{ name }}_impl::{{ method.name }} _{{ method.name }};
|
||||||
|
{%- endfor %}
|
||||||
|
|
||||||
|
public:
|
||||||
|
{%- for datum in post_data %}
|
||||||
|
{{ datum.type }} {{ datum.name }};
|
||||||
|
{%- endfor %}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace protos
|
||||||
|
} // namespace uefi
|
||||||
|
|
||||||
|
#endif // _uefi_protos_{{ name }}_h_
|
||||||
|
|
||||||
|
''')
|
||||||
|
|
||||||
|
protos_dir = os.path.join("include", "uefi", "protos")
|
||||||
|
os.makedirs(protos_dir, exist_ok=True)
|
||||||
|
|
||||||
|
import yaml
|
||||||
|
protos = yaml.load(open("protos.yaml"))
|
||||||
|
for proto in protos:
|
||||||
|
with open(os.path.join(protos_dir, proto["name"] + ".h"), 'w') as header:
|
||||||
|
header.write(template.render(proto))
|
||||||
89
include/uefi/boot_services.h
Normal file
89
include/uefi/boot_services.h
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
#pragma once
|
||||||
|
#ifndef _uefi_boot_services_h_
|
||||||
|
#define _uefi_boot_services_h_
|
||||||
|
|
||||||
|
// This Source Code Form is part of the j6-uefi-headers project and is subject
|
||||||
|
// to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was
|
||||||
|
// not distributed with this file, You can obtain one at
|
||||||
|
// http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <uefi/tables.h>
|
||||||
|
|
||||||
|
namespace uefi {
|
||||||
|
|
||||||
|
struct boot_services {
|
||||||
|
static constexpr uint64_t signature = 0x56524553544f4f42ull;
|
||||||
|
|
||||||
|
table_header header;
|
||||||
|
|
||||||
|
// Task Priority Level management
|
||||||
|
void *raise_tpl;
|
||||||
|
void *restore_tpl;
|
||||||
|
|
||||||
|
// Memory Services
|
||||||
|
void *allocate_pages;
|
||||||
|
void *free_pages;
|
||||||
|
void *get_memory_map;
|
||||||
|
void *allocate_pool;
|
||||||
|
void *free_pool;
|
||||||
|
|
||||||
|
// Event & Timer Services
|
||||||
|
void *create_event;
|
||||||
|
void *set_timer;
|
||||||
|
void *wait_for_event;
|
||||||
|
void *signal_event;
|
||||||
|
void *close_event;
|
||||||
|
void *check_event;
|
||||||
|
|
||||||
|
// Protocol Handler Services
|
||||||
|
void *install_protocol_interface;
|
||||||
|
void *reinstall_protocol_interface;
|
||||||
|
void *uninstall_protocol_interface;
|
||||||
|
void *handle_protocol;
|
||||||
|
void *_reserved;
|
||||||
|
void *register_protocol_notify;
|
||||||
|
void *locate_handle;
|
||||||
|
void *locate_device_path;
|
||||||
|
void *install_configuration_table;
|
||||||
|
|
||||||
|
// Image Services
|
||||||
|
void *load_image;
|
||||||
|
void *start_image;
|
||||||
|
void *exit;
|
||||||
|
void *unload_image;
|
||||||
|
void *exit_boot_services;
|
||||||
|
|
||||||
|
// Miscellaneous Services
|
||||||
|
void *get_next_monotonic_count;
|
||||||
|
void *stall;
|
||||||
|
void *set_watchdog_timer;
|
||||||
|
|
||||||
|
// DriverSupport Services
|
||||||
|
void *connect_controller;
|
||||||
|
void *disconnect_controller;
|
||||||
|
|
||||||
|
// Open and Close Protocol Services
|
||||||
|
void *open_protocol;
|
||||||
|
void *close_protocol;
|
||||||
|
void *open_protocol_information;
|
||||||
|
|
||||||
|
// Library Services
|
||||||
|
void *protocols_per_handle;
|
||||||
|
void *locate_handle_buffer;
|
||||||
|
void *locate_protocol;
|
||||||
|
void *install_multiple_protocol_interfaces;
|
||||||
|
void *uninstall_multiple_protocol_interfaces;
|
||||||
|
|
||||||
|
// 32-bit CRC Services
|
||||||
|
void *calculate_crc32;
|
||||||
|
|
||||||
|
// Miscellaneous Services
|
||||||
|
void *copy_mem;
|
||||||
|
void *set_mem;
|
||||||
|
void *create_event_ex;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace uefi
|
||||||
|
|
||||||
|
#endif
|
||||||
39
include/uefi/errors.inc
Normal file
39
include/uefi/errors.inc
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
STATUS_WARNING( warn_unknown_glyph, 1)
|
||||||
|
STATUS_WARNING( warn_delete_failure, 2)
|
||||||
|
STATUS_WARNING( warn_write_failure, 3)
|
||||||
|
STATUS_WARNING( warn_buffer_too_small,4)
|
||||||
|
STATUS_WARNING( warn_stale_data, 5)
|
||||||
|
STATUS_WARNING( warn_file_system, 6)
|
||||||
|
|
||||||
|
STATUS_ERROR( load_error, 1)
|
||||||
|
STATUS_ERROR( invalid_parameter, 2)
|
||||||
|
STATUS_ERROR( unsupported, 3)
|
||||||
|
STATUS_ERROR( bad_buffer_size, 4)
|
||||||
|
STATUS_ERROR( buffer_too_small, 5)
|
||||||
|
STATUS_ERROR( not_ready, 6)
|
||||||
|
STATUS_ERROR( device_error, 7)
|
||||||
|
STATUS_ERROR( write_protected, 8)
|
||||||
|
STATUS_ERROR( out_of_resources, 9)
|
||||||
|
STATUS_ERROR( volume_corrupted, 10)
|
||||||
|
STATUS_ERROR( volume_full, 11)
|
||||||
|
STATUS_ERROR( no_media, 12)
|
||||||
|
STATUS_ERROR( media_changed, 13)
|
||||||
|
STATUS_ERROR( not_found, 14)
|
||||||
|
STATUS_ERROR( access_denied, 15)
|
||||||
|
STATUS_ERROR( no_response, 16)
|
||||||
|
STATUS_ERROR( no_mapping, 17)
|
||||||
|
STATUS_ERROR( timeout, 18)
|
||||||
|
STATUS_ERROR( not_started, 19)
|
||||||
|
STATUS_ERROR( already_started, 20)
|
||||||
|
STATUS_ERROR( aborted, 21)
|
||||||
|
STATUS_ERROR( icmp_error, 22)
|
||||||
|
STATUS_ERROR( tftp_error, 23)
|
||||||
|
STATUS_ERROR( protocol_error, 24)
|
||||||
|
STATUS_ERROR( incompatible_version, 25)
|
||||||
|
STATUS_ERROR( security_violation, 26)
|
||||||
|
STATUS_ERROR( crc_error, 27)
|
||||||
|
STATUS_ERROR( end_of_media, 28)
|
||||||
|
STATUS_ERROR( end_of_file, 31)
|
||||||
|
STATUS_ERROR( invalid_language, 32)
|
||||||
|
STATUS_ERROR( compromised_data, 33)
|
||||||
|
STATUS_ERROR( http_error, 35)
|
||||||
92
include/uefi/graphics.h
Normal file
92
include/uefi/graphics.h
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
#pragma once
|
||||||
|
#ifndef _uefi_graphics_h_
|
||||||
|
#define _uefi_graphics_h_
|
||||||
|
|
||||||
|
// This Source Code Form is part of the j6-uefi-headers project and is subject
|
||||||
|
// to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was
|
||||||
|
// not distributed with this file, You can obtain one at
|
||||||
|
// http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <uefi/types.h>
|
||||||
|
|
||||||
|
namespace uefi {
|
||||||
|
|
||||||
|
struct text_output_mode
|
||||||
|
{
|
||||||
|
int32_t max_mode;
|
||||||
|
int32_t mode;
|
||||||
|
int32_t attribute;
|
||||||
|
int32_t cursor_column;
|
||||||
|
int32_t cursor_row;
|
||||||
|
bool cursor_visible;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct pixel_bitmask
|
||||||
|
{
|
||||||
|
uint32_t red_mask;
|
||||||
|
uint32_t green_mask;
|
||||||
|
uint32_t blue_mask;
|
||||||
|
uint32_t reserved_mask;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class pixel_format
|
||||||
|
{
|
||||||
|
rgb8,
|
||||||
|
bgr8,
|
||||||
|
bitmask,
|
||||||
|
blt_only
|
||||||
|
};
|
||||||
|
|
||||||
|
struct graphics_output_mode_info
|
||||||
|
{
|
||||||
|
uint32_t version;
|
||||||
|
uint32_t horizontal_resolution;
|
||||||
|
uint32_t vertical_resolution;
|
||||||
|
pixel_format pixel_format;
|
||||||
|
pixel_bitmask pixel_information;
|
||||||
|
uint32_t pixels_per_scanline;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct graphics_output_mode
|
||||||
|
{
|
||||||
|
uint32_t max_mode;
|
||||||
|
uint32_t mode;
|
||||||
|
graphics_output_mode_info *info;
|
||||||
|
uint64_t size_of_info;
|
||||||
|
uintptr_t frame_buffer_base;
|
||||||
|
uint64_t frame_buffer_size;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class attribute : uint64_t
|
||||||
|
{
|
||||||
|
black,
|
||||||
|
blue,
|
||||||
|
green,
|
||||||
|
cyan,
|
||||||
|
red,
|
||||||
|
magenta,
|
||||||
|
brown,
|
||||||
|
light_gray,
|
||||||
|
dark_gray,
|
||||||
|
light_blue,
|
||||||
|
light_green,
|
||||||
|
light_cyan,
|
||||||
|
light_red,
|
||||||
|
light_magenta,
|
||||||
|
yellow,
|
||||||
|
white,
|
||||||
|
|
||||||
|
background_black = 0x00,
|
||||||
|
background_blue = 0x10,
|
||||||
|
background_green = 0x20,
|
||||||
|
background_cyan = 0x30,
|
||||||
|
background_red = 0x40,
|
||||||
|
background_magenta = 0x50,
|
||||||
|
background_brown = 0x60,
|
||||||
|
background_light_gray = 0x70,
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace uefi
|
||||||
|
|
||||||
|
#endif
|
||||||
29
include/uefi/guid.h
Normal file
29
include/uefi/guid.h
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#pragma once
|
||||||
|
#ifndef _uefi_guid_h_
|
||||||
|
#define _uefi_guid_h_
|
||||||
|
|
||||||
|
// This Source Code Form is part of the j6-uefi-headers project and is subject
|
||||||
|
// to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was
|
||||||
|
// not distributed with this file, You can obtain one at
|
||||||
|
// http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
namespace uefi {
|
||||||
|
|
||||||
|
struct guid
|
||||||
|
{
|
||||||
|
uint32_t data1;
|
||||||
|
uint16_t data2;
|
||||||
|
uint16_t data3;
|
||||||
|
uint8_t data4[8];
|
||||||
|
|
||||||
|
inline bool operator==(const guid &other) const {
|
||||||
|
return reinterpret_cast<const uint64_t*>(this)[0] == reinterpret_cast<const uint64_t*>(&other)[0]
|
||||||
|
&& reinterpret_cast<const uint64_t*>(this)[1] == reinterpret_cast<const uint64_t*>(&other)[1];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace uefi
|
||||||
|
|
||||||
|
#endif
|
||||||
69
include/uefi/tables.h
Normal file
69
include/uefi/tables.h
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
#pragma once
|
||||||
|
#ifndef _uefi_tables_h_
|
||||||
|
#define _uefi_tables_h_
|
||||||
|
|
||||||
|
// This Source Code Form is part of the j6-uefi-headers project and is subject
|
||||||
|
// to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was
|
||||||
|
// not distributed with this file, You can obtain one at
|
||||||
|
// http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <uefi/guid.h>
|
||||||
|
#include <uefi/types.h>
|
||||||
|
|
||||||
|
namespace uefi {
|
||||||
|
|
||||||
|
struct runtime_services;
|
||||||
|
struct boot_services;
|
||||||
|
namespace protos {
|
||||||
|
struct simple_text_input;
|
||||||
|
struct simple_text_output;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct table_header
|
||||||
|
{
|
||||||
|
uint64_t signature;
|
||||||
|
uint32_t revision;
|
||||||
|
uint32_t header_size;
|
||||||
|
uint32_t crc32;
|
||||||
|
uint32_t reserved;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct configuration_table
|
||||||
|
{
|
||||||
|
guid vendor_guid;
|
||||||
|
void *vendor_table;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct system_table
|
||||||
|
{
|
||||||
|
table_header header;
|
||||||
|
|
||||||
|
char16_t *firmware_vendor;
|
||||||
|
uint32_t firmware_revision;
|
||||||
|
|
||||||
|
handle console_in_handle;
|
||||||
|
protos::simple_text_input *con_in;
|
||||||
|
handle console_out_handle;
|
||||||
|
protos::simple_text_output *con_out;
|
||||||
|
handle standard_error_handle;
|
||||||
|
protos::simple_text_output *std_err;
|
||||||
|
|
||||||
|
runtime_services *runtime_services;
|
||||||
|
boot_services *boot_services;
|
||||||
|
|
||||||
|
unsigned int number_of_table_entries;
|
||||||
|
configuration_table *configuration_table;
|
||||||
|
};
|
||||||
|
|
||||||
|
constexpr uint32_t make_system_table_revision(int major, int minor) {
|
||||||
|
return (major << 16) | minor;
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr uint64_t system_table_signature = 0x5453595320494249ull;
|
||||||
|
constexpr uint32_t system_table_revision = make_system_table_revision(2, 70);
|
||||||
|
constexpr uint32_t specification_revision = system_table_revision;
|
||||||
|
|
||||||
|
} // namespace uefi
|
||||||
|
|
||||||
|
#endif
|
||||||
34
include/uefi/types.h
Normal file
34
include/uefi/types.h
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
#pragma once
|
||||||
|
#ifndef _uefi_types_h_
|
||||||
|
#define _uefi_types_h_
|
||||||
|
|
||||||
|
// This Source Code Form is part of the j6-uefi-headers project and is subject
|
||||||
|
// to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was
|
||||||
|
// not distributed with this file, You can obtain one at
|
||||||
|
// http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
namespace uefi {
|
||||||
|
|
||||||
|
using handle = void *;
|
||||||
|
|
||||||
|
constexpr uint64_t error_bit = 0x8000000000000000ull;
|
||||||
|
constexpr uint64_t make_error(uint64_t e) { return e|error_bit; }
|
||||||
|
|
||||||
|
enum class status : uint64_t
|
||||||
|
{
|
||||||
|
success = 0,
|
||||||
|
|
||||||
|
#define STATUS_WARNING(name, num) name = num,
|
||||||
|
#define STATUS_ERROR(name, num) name = make_error(num),
|
||||||
|
#include "uefi/errors.inc"
|
||||||
|
#undef STATUS_WARNING
|
||||||
|
#undef STATUS_ERROR
|
||||||
|
};
|
||||||
|
|
||||||
|
inline bool is_error(status s) { return static_cast<uint64_t>(s) & error_bit; }
|
||||||
|
|
||||||
|
} // namespace uefi
|
||||||
|
|
||||||
|
#endif
|
||||||
103
protos.yaml
Normal file
103
protos.yaml
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
- name: loaded_image
|
||||||
|
guid: "0x5b1b31a1,0x9562,0x11d2,{0x8e,0x3f,0x00,0xa0,0xc9,0x69,0x72,0x3b}"
|
||||||
|
pre_data:
|
||||||
|
- name: revision
|
||||||
|
type: uint32_t
|
||||||
|
- name: parent_handle
|
||||||
|
type: uefi::handle
|
||||||
|
- name: system_table
|
||||||
|
type: uefi::system_table *
|
||||||
|
- name: device_handle
|
||||||
|
type: uefi::handle
|
||||||
|
- name: file_path
|
||||||
|
type: uefi::protos::device_path *
|
||||||
|
- name: reserved
|
||||||
|
type: void *
|
||||||
|
- name: load_options_size
|
||||||
|
type: uint32_t
|
||||||
|
- name: load_options
|
||||||
|
type: void *
|
||||||
|
- name: image_base
|
||||||
|
type: void *
|
||||||
|
- name: image_size
|
||||||
|
type: uint64_t
|
||||||
|
- name: image_code_type
|
||||||
|
type: uefi::memory_type
|
||||||
|
- name: image_data_type
|
||||||
|
type: uefi::memory_type
|
||||||
|
methods:
|
||||||
|
- name: unload
|
||||||
|
skip_this: true
|
||||||
|
args:
|
||||||
|
- name: image_handle
|
||||||
|
type: uefi::handle
|
||||||
|
|
||||||
|
- name: simple_text_output
|
||||||
|
guid: "0x387477c2,0x69c7,0x11d2,{0x8e,0x39,0x00,0xa0,0xc9,0x69,0x72,0x3b}"
|
||||||
|
headers:
|
||||||
|
- uefi/graphics.h
|
||||||
|
methods:
|
||||||
|
- name: reset
|
||||||
|
args:
|
||||||
|
- name: extended_verification
|
||||||
|
type: bool
|
||||||
|
- name: output_string
|
||||||
|
args:
|
||||||
|
- name: string
|
||||||
|
type: const wchar_t *
|
||||||
|
- name: test_string
|
||||||
|
args:
|
||||||
|
- name: string
|
||||||
|
type: const wchar_t *
|
||||||
|
- name: query_mode
|
||||||
|
args:
|
||||||
|
- name: mode_number
|
||||||
|
type: uint64_t
|
||||||
|
- name: columns
|
||||||
|
type: uint64_t *
|
||||||
|
- name: rows
|
||||||
|
type: uint64_t *
|
||||||
|
- name: set_mode
|
||||||
|
args:
|
||||||
|
- name: mode_number
|
||||||
|
type: uint64_t
|
||||||
|
- name: set_attribute
|
||||||
|
args:
|
||||||
|
- name: attribute
|
||||||
|
type: uefi::attribute
|
||||||
|
- name: clear_screen
|
||||||
|
- name: set_cursor_position
|
||||||
|
args:
|
||||||
|
- name: column
|
||||||
|
type: uint64_t
|
||||||
|
- name: row
|
||||||
|
type: uint64_t
|
||||||
|
- name: enable_cursor
|
||||||
|
args:
|
||||||
|
- name: visible
|
||||||
|
type: bool
|
||||||
|
post_data:
|
||||||
|
- name: mode
|
||||||
|
type: uefi::text_output_mode *
|
||||||
|
|
||||||
|
- name: graphics_output
|
||||||
|
guid: "0x9042a9de,0x23dc,0x4a38,{0x96,0xfb,0x7a,0xde,0xd0,0x80,0x51,0x6a}"
|
||||||
|
headers:
|
||||||
|
- uefi/graphics.h
|
||||||
|
methods:
|
||||||
|
- name: query_mode
|
||||||
|
args:
|
||||||
|
- name: mode_number
|
||||||
|
type: uint32_t
|
||||||
|
- name: size_of_info
|
||||||
|
type: uint64_t *
|
||||||
|
- name: info
|
||||||
|
type: uefi::graphics_output_mode_info **
|
||||||
|
- name: set_mode
|
||||||
|
args:
|
||||||
|
- name: mode_number
|
||||||
|
type: uint32_t
|
||||||
|
- name: blt
|
||||||
|
post_data:
|
||||||
|
- name: mode
|
||||||
|
type: uefi::graphics_output_mode *
|
||||||
Reference in New Issue
Block a user