[tianocore-docs][SecurityAdvisory][Patch] Add Gitbook Action and sync with template
Michael D Kinney
Cc: Jian J Wang <jian.j.wang@...>
Cc: Laurie Jarlstrom <laurie.jarlstrom@...> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@...> --- .bookignore | 3 + .github/workflows/gitbook-action.yml | 39 +++++++++++++ .gitignore | 16 ++++++ README.md | 81 +++++++++++---------------- SUMMARY.md | 1 + _layouts/ebook/pdf_header.html | 1 - assets/Tianocore_logo2.png | Bin 7360 -> 0 bytes book.json | 16 +++--- styles/epub.css | 8 +++ styles/mobi.css | 8 +++ styles/pdf.css | 8 +++ styles/website.css | 8 +++ 12 files changed, 132 insertions(+), 57 deletions(-) create mode 100644 .bookignore create mode 100644 .github/workflows/gitbook-action.yml create mode 100644 .gitignore delete mode 100644 assets/Tianocore_logo2.png diff --git a/.bookignore b/.bookignore new file mode 100644 index 0000000..ed716f0 --- /dev/null +++ b/.bookignore @@ -0,0 +1,3 @@ +/.github +.gitignore +.bookignore diff --git a/.github/workflows/gitbook-action.yml b/.github/workflows/gitbook-action.yml new file mode 100644 index 0000000..917b0d7 --- /dev/null +++ b/.github/workflows/gitbook-action.yml @@ -0,0 +1,39 @@ +name: 'Gitbook Action Build' +on: + push: + branches: + - master + - release/* + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout action + uses: actions/checkout@v2 + - name: Get Branch + run: | + raw=$(git branch -r --contains ${{ github.ref }}) + branch=${raw/ origin\/} + pubdir=${branch/master/draft} + pubdir=${pubdir////-} + echo "ON_PUSH_BRANCH_NAME=$branch" >> $GITHUB_ENV + echo "ON_PUSH_PUBDIR=$pubdir" >> $GITHUB_ENV + - name: Gitbook Action + uses: zanderzhao/gitbook-action@....4 + with: + token: ${{secrets.GITBOOK_ACTION_PERSONAL_TOKEN}} + source_branch: ${{env.ON_PUSH_BRANCH_NAME}} + publish_branch: gh-pages + publish_dir: ${{env.ON_PUSH_PUBDIR}} + publish_remove_last_build: true + gitbook_pdf: true + gitbook_pdf_dir: / + gitbook_pdf_name: ${{ github.event.repository.name }}-${{env.ON_PUSH_PUBDIR}} + gitbook_epub: true + gitbook_epub_dir: / + gitbook_epub_name: ${{ github.event.repository.name }}-${{env.ON_PUSH_PUBDIR}} + gitbook_mobi: true + gitbook_mobi_dir: / + gitbook_mobi_name: ${{ github.event.repository.name }}-${{env.ON_PUSH_PUBDIR}} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e9c50d9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# Node rules: +## Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +## Dependency directory +## Commenting this out is preferred by some people, see +## https://docs.npmjs.com/misc/faq#should-i-check-my-node_modules-folder-into-git +/node_modules + +# Book build output +/_book + +# eBook build output +/book.epub +/book.mobi +/book.pdf \ No newline at end of file diff --git a/README.md b/README.md index 3b4b8f7..826ec88 100644 --- a/README.md +++ b/README.md @@ -27,65 +27,26 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> -<img src="media/TianocoreTitlePageLogo.jpg" width="300" /> -# Security Advisory {#security-advisory} +<img src="media/TianocoreTitlePageLogo.jpg" width="300" /> -<!--- ### {{ book.title }} ---> - -## Tianocore Security Advisory Briefings +{% if book.draft %} +** DRAFT FOR REVIEW ** +{% else %} ** {{ book.version }} ** +{% endif %} -**Date:** ** {{ gitbook.time|date('MM/DD/YYYY hh:mm:ss') }} ** +** {{ gitbook.time|date('MM/DD/YYYY hh:mm:ss') }} ** +{% if book.udkrelease %} +** {{ book.udkrelease }} ** +{% endif %} This document will list briefings on each security issue found and give a description, a recommendation on a solution, an acknowledgment that the solution is validated and references. -### Revision History - -| Revision | Revision History | Date | -| ---------- | ------------------ | --------------- | -| .002.0 | Initial release.<BR> Logs 1 - 19 | Jan 9, 2015 | -| | | | -| .003.0 | Logs for 20-26 | Nov 29, 2016 | -| | | | -| .003.1 | Logs for 21-26 <BR>- Fix more for DHCP issue, feedback from Phoenix.<BR>- Fix Smm Variable GetInfo function issue, discovered by release test.<BR>- Fix GIT hash info, which incorrect stated before. logs 21, 22, 23, 24, 25, 26 | Dec 19, 2016| -| | | | -| .004.0 | Log 27 - Update<BR>Update Gitbook Template | Jan 11, 2018 | -| .005.0 | Log 28 Update |July 10, 2018 | -| .006.0 | Log 29 Update | Sept 19, 2018 | -| .007.0 | Log 30 & 31 Update | Oct 12, 2018 | -| .008.0 | Log 32-40 Update | Mar 21, 2019 | -| .009.0 | Log 41 Update | May 10, 2019 | -| | | | - - - - - - - - - - - - - - -### Process -_(short form)_ - -1. Security Bugs reported through: [How to report a Security Issue](https://github.com/tianocore/tianocore.github.io/wiki/Reporting-Security-Issues) -2. The issue is evaluated -3. Determine if a Security issue -4. Determine Module -5. Fix and Validate issue -6. If Security, Update Security Advisory (This Document) - ### Acknowledgements Redistribution and use in source (original document form) and 'compiled' @@ -115,7 +76,31 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Copyright (c) 2017-2019, Intel Corporation. All rights reserved. +### Process +_(short form)_ +1. Security Bugs reported through: [How to report a Security Issue](https://github.com/tianocore/tianocore.github.io/wiki/Reporting-Security-Issues) +2. The issue is evaluated +3. Determine if a Security issue +4. Determine Module +5. Fix and Validate issue +6. If Security, Update Security Advisory (This Document) +### Revision History +| Revision | Revision History | Date | +| ---------- | ------------------ | --------------- | +| .002.0 | Initial release.<BR> Logs 1 - 19 | Jan 9, 2015 | +| | | | +| .003.0 | Logs for 20-26 | Nov 29, 2016 | +| | | | +| .003.1 | Logs for 21-26 <BR>- Fix more for DHCP issue, feedback from Phoenix.<BR>- Fix Smm Variable GetInfo function issue, discovered by release test.<BR>- Fix GIT hash info, which incorrect stated before. logs 21, 22, 23, 24, 25, 26 | Dec 19, 2016| +| | | | +| .004.0 | Log 27 - Update<BR>Update Gitbook Template | Jan 11, 2018 | +| .005.0 | Log 28 Update |July 10, 2018 | +| .006.0 | Log 29 Update | Sept 19, 2018 | +| .007.0 | Log 30 & 31 Update | Oct 12, 2018 | +| .008.0 | Log 32-40 Update | Mar 21, 2019 | +| .009.0 | Log 41 Update | May 10, 2019 | +| | | | diff --git a/SUMMARY.md b/SUMMARY.md index d866c55..da944a8 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -27,6 +27,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> + # Summary * [Security Advisory](README.md) diff --git a/_layouts/ebook/pdf_header.html b/_layouts/ebook/pdf_header.html index 98ea842..05c7450 100644 --- a/_layouts/ebook/pdf_header.html +++ b/_layouts/ebook/pdf_header.html @@ -8,7 +8,6 @@ {% else %} <div style="position:absolute;text-align:left">{{ book.title }}</div> {% endif %} - <br> <div style="text-align:right">{{ page.title }}</div> </p> </div> diff --git a/assets/Tianocore_logo2.png b/assets/Tianocore_logo2.png deleted file mode 100644 index 0ba21dc7a651ee64ee3449415aabb667022276b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7360 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 diff --git a/book.json b/book.json index fb1d404..4b0289a 100644 --- a/book.json +++ b/book.json @@ -1,9 +1,9 @@ { -"variables" : { -"title" : "Security Advisory", -"version" : "Version: .009.0" - }, - -"plugins": ["puml"], -"pluginsConfig": {} -} \ No newline at end of file + "variables" : { + "draft" : "yes", + "title" : "Security Advisory", + "version" : "Version: .009.0" + }, + "plugins": ["puml-aleung"], + "pluginsConfig": {} +} diff --git a/styles/epub.css b/styles/epub.css index be6b609..72075bb 100644 --- a/styles/epub.css +++ b/styles/epub.css @@ -1,3 +1,11 @@ +p { + font-family: sans, sans-serif, Arial; +} + +body { + font-family: sans, sans-serif, Arial; +} + h1 { color: #0860A8; font-weight: normal; diff --git a/styles/mobi.css b/styles/mobi.css index db1ca60..522c35c 100644 --- a/styles/mobi.css +++ b/styles/mobi.css @@ -1,3 +1,11 @@ +p { + font-family: sans, sans-serif, Arial; +} + +body { + font-family: sans, sans-serif, Arial; +} + h1 { color: #0860A8; font-weight: bold; diff --git a/styles/pdf.css b/styles/pdf.css index be6b609..72075bb 100644 --- a/styles/pdf.css +++ b/styles/pdf.css @@ -1,3 +1,11 @@ +p { + font-family: sans, sans-serif, Arial; +} + +body { + font-family: sans, sans-serif, Arial; +} + h1 { color: #0860A8; font-weight: normal; diff --git a/styles/website.css b/styles/website.css index be6b609..72075bb 100644 --- a/styles/website.css +++ b/styles/website.css @@ -1,3 +1,11 @@ +p { + font-family: sans, sans-serif, Arial; +} + +body { + font-family: sans, sans-serif, Arial; +} + h1 { color: #0860A8; font-weight: normal; -- 2.29.2.windows.2
|
|
[tianocore-docs][ATBB-Memory_Protection_in_UEFI_BIOS][Patch 2/2] Update to match template and enable GitBook action
Michael D Kinney
* Add layout directory to match template
* Update CSS styles to match template * Add GitBook Action Cc: Jiewen Yao <jiewen.yao@...> Cc: Vincent Zimmer <vincent.zimmer@...> Cc: Laurie Jarlstrom <laurie.jarlstrom@...> Cc: Kevin Shaw <kevin.w.shaw@...> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@...> --- .bookignore | 3 + .github/workflows/gitbook-action.yml | 39 +++++ .gitignore | 10 +- _layouts/ebook/page.html | 42 +++++ _layouts/ebook/pdf_footer.html | 17 ++ _layouts/ebook/pdf_header.html | 14 ++ _layouts/ebook/summary.html | 98 ++++++++++++ _layouts/layout.html | 27 ++++ _layouts/website/footer.html | 17 ++ _layouts/website/header.html | 31 ++++ _layouts/website/languages.html | 19 +++ _layouts/website/layout.html | 28 ++++ _layouts/website/page.html | 86 +++++++++++ _layouts/website/summary.html | 61 ++++++++ styles/epub.css | 221 ++------------------------ styles/mobi.css | 50 ++++++ styles/pdf.css | 221 +++----------------------- styles/website.css | 223 +++------------------------ 18 files changed, 591 insertions(+), 616 deletions(-) create mode 100644 .bookignore create mode 100644 .github/workflows/gitbook-action.yml create mode 100644 _layouts/ebook/page.html create mode 100644 _layouts/ebook/pdf_footer.html create mode 100644 _layouts/ebook/pdf_header.html create mode 100644 _layouts/ebook/summary.html create mode 100644 _layouts/layout.html create mode 100644 _layouts/website/footer.html create mode 100644 _layouts/website/header.html create mode 100644 _layouts/website/languages.html create mode 100644 _layouts/website/layout.html create mode 100644 _layouts/website/page.html create mode 100644 _layouts/website/summary.html create mode 100644 styles/mobi.css diff --git a/.bookignore b/.bookignore new file mode 100644 index 0000000..ed716f0 --- /dev/null +++ b/.bookignore @@ -0,0 +1,3 @@ +/.github +.gitignore +.bookignore diff --git a/.github/workflows/gitbook-action.yml b/.github/workflows/gitbook-action.yml new file mode 100644 index 0000000..917b0d7 --- /dev/null +++ b/.github/workflows/gitbook-action.yml @@ -0,0 +1,39 @@ +name: 'Gitbook Action Build' +on: + push: + branches: + - master + - release/* + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout action + uses: actions/checkout@v2 + - name: Get Branch + run: | + raw=$(git branch -r --contains ${{ github.ref }}) + branch=${raw/ origin\/} + pubdir=${branch/master/draft} + pubdir=${pubdir////-} + echo "ON_PUSH_BRANCH_NAME=$branch" >> $GITHUB_ENV + echo "ON_PUSH_PUBDIR=$pubdir" >> $GITHUB_ENV + - name: Gitbook Action + uses: zanderzhao/gitbook-action@....4 + with: + token: ${{secrets.GITBOOK_ACTION_PERSONAL_TOKEN}} + source_branch: ${{env.ON_PUSH_BRANCH_NAME}} + publish_branch: gh-pages + publish_dir: ${{env.ON_PUSH_PUBDIR}} + publish_remove_last_build: true + gitbook_pdf: true + gitbook_pdf_dir: / + gitbook_pdf_name: ${{ github.event.repository.name }}-${{env.ON_PUSH_PUBDIR}} + gitbook_epub: true + gitbook_epub_dir: / + gitbook_epub_name: ${{ github.event.repository.name }}-${{env.ON_PUSH_PUBDIR}} + gitbook_mobi: true + gitbook_mobi_dir: / + gitbook_mobi_name: ${{ github.event.repository.name }}-${{env.ON_PUSH_PUBDIR}} diff --git a/.gitignore b/.gitignore index 1a366fb..e9c50d9 100644 --- a/.gitignore +++ b/.gitignore @@ -5,12 +5,12 @@ ## Dependency directory ## Commenting this out is preferred by some people, see ## https://docs.npmjs.com/misc/faq#should-i-check-my-node_modules-folder-into-git -node_modules +/node_modules # Book build output -_book +/_book # eBook build output -*.epub -*.mobi \ No newline at end of file +/book.epub +/book.mobi +/book.pdf \ No newline at end of file diff --git a/_layouts/ebook/page.html b/_layouts/ebook/page.html new file mode 100644 index 0000000..9dec3b5 --- /dev/null +++ b/_layouts/ebook/page.html @@ -0,0 +1,42 @@ +{% extends "layout.html" %} + +{% block title %}{{ page.title }}{% endblock %} +{% block description %}{{ page.description }}{% endblock %} + +{% block style %} + {### Include theme css before plugins css ###} + {% if not fileExists(config.styles.print) %} + {% if options.format %} + <link rel="stylesheet" href="{{ (options.format + ".css")|resolveAsset }}"> + {% else %} + <link rel="stylesheet" href="{{ "ebook.css"|resolveAsset }}"> + {% endif %} + {% endif %} + + {{ super() }} + + {### Custom stylesheets for the book ###} + + {% for type, style in config.styles %} + {% if fileExists(style) and (type == "ebook" or type == "print" or type == options.format) %} + <link rel="stylesheet" href="{{ style|resolveFile }}"> + {% endif %} + {% endfor %} +{% endblock %} + +{% block body %} +<div class="page"> + {% block page %} + <h1 class="book-chapter book-chapter-{{ page.depth }}">{{ page.title }}</h1> + {% if options.format == "mobi" %} + <div> + {{ page.content|safe }} + </div> + {% else %} + <div class="section"> + {{ page.content|safe }} + </div> + {% endif %} + {% endblock %} +</div> +{% endblock %} diff --git a/_layouts/ebook/pdf_footer.html b/_layouts/ebook/pdf_footer.html new file mode 100644 index 0000000..709fa57 --- /dev/null +++ b/_layouts/ebook/pdf_footer.html @@ -0,0 +1,17 @@ +{% extends "./page.html" %} + +{% block body %} +<div class="pdf-footer"> + {% if book.draft %} + <p> + <div style="position:absolute;text-align:left">DRAFT FOR REVIEW [{{ gitbook.time|date('MM/DD/YYYY hh:mm:ss') }}]</div> + <div style="text-align:right">{{ page.num }}</div> + </p> + {% else %} + <p> + <div style="position:absolute;text-align:left">{{ book.version }}</div> + <div style="text-align:right">{{ page.num }}</div> + </p> + {% endif %} +</div> +{% endblock %} diff --git a/_layouts/ebook/pdf_header.html b/_layouts/ebook/pdf_header.html new file mode 100644 index 0000000..05c7450 --- /dev/null +++ b/_layouts/ebook/pdf_header.html @@ -0,0 +1,14 @@ +{% extends "./page.html" %} + +{% block body %} +<div class="pdf-header"> + <p> + {% if book.draft %} + <div style="position:absolute;text-align:left">{{ book.title }}[DRAFT]</div> + {% else %} + <div style="position:absolute;text-align:left">{{ book.title }}</div> + {% endif %} + <div style="text-align:right">{{ page.title }}</div> + </p> +</div> +{% endblock %} diff --git a/_layouts/ebook/summary.html b/_layouts/ebook/summary.html new file mode 100644 index 0000000..946e8cb --- /dev/null +++ b/_layouts/ebook/summary.html @@ -0,0 +1,98 @@ +{% extends "./page.html" %} + +{% block title %}{{ "SUMMARY"|t }}{% endblock %} + +{% macro articles(_articles) %} + {% for article in _articles %} + {% if options.format == "mobi" %} + <blockquote> + {% else %} + <li> + {% endif %} + <span class="inner"> + {% if article.path or article.url %} + {% if article.path %} + <a href="{{ article.path|contentURL }}{{ article.anchor }}">{{ article.title }}</a> + {% else %} + <a target="_blank" href="{{ article.url }}">{{ article.title }}</a> + {% endif %} + {% else %} + <span>{{ article.title }}</span> + {% endif %} + {% if 0 %} + <span class="page">{{ article.level }}</span> + {% endif %} + </span> + {% if article.articles.length > 0 %} + {% if options.format == "mobi" %} + <blockquote> + {{ articles(article.articles) }} + </blockquote> + {% else %} + <ol> + {{ articles(article.articles) }} + </ol> + {% endif %} + {% endif %} + {% if options.format == "mobi" %} + </blockquote> + {% else %} + </li> + {% endif %} + {% endfor %} +{% endmacro %} + +{% block page %} +{% if options.format == "mobi" %} +<div> +{% else %} +<div class="section toc"> +{% endif %} + <h1>{{ "SUMMARY"|t }}</h1> + {% if options.format == "mobi" %} + <blockquote> + {% else %} + <ol> + {% endif %} + {% for part in summary.parts %} + {% if part.title %} + {% if options.format == "mobi" %} + <blockquote> + <span>{{ part.title }}</span> + </blockquote> + {% else %} + <li class="part-title"> + <span>{{ part.title }}</span> + </li> + {% endif %} + {% endif %} + {{ articles(part.articles) }} + + {% if not loop.last and not options.format == "mobi" %} + <li class="divider"></li> + {% endif %} + {% endfor %} + + {% if glossary.path %} + {% if options.format == "mobi" %} + <blockquote> + <span class="inner"> + <a href="{{ ('/' + glossary.path)|contentURL }}">{{ "GLOSSARY"|t }}</a> + </span> + </blockquote> + {% else %} + <li> + <span class="inner"> + <a href="{{ ('/' + glossary.path)|contentURL }}">{{ "GLOSSARY"|t }}</a> + </span> + </li> + {% endif %} + {% endif %} + {% if options.format == "mobi" %} + </blockquote> + {% else %} + </ol> + {% endif %} +</div> +{% endblock %} + diff --git a/_layouts/layout.html b/_layouts/layout.html new file mode 100644 index 0000000..884574c --- /dev/null +++ b/_layouts/layout.html @@ -0,0 +1,27 @@ +<!DOCTYPE HTML> +<html lang="{{ config.language }}" {% if page.dir == "rtl" %}dir="rtl"{% endif %}> + <head> + <meta charset="UTF-8"> + <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> + <title>{% block title %}{{ config.title|d("GitBook", true) }}{% endblock %}</title> + <meta http-equiv="X-UA-Compatible" content="IE=edge" /> + <meta name="description" content="{% block description %}{% endblock %}"> + <meta name="generator" content="GitBook {{ gitbook.version }}"> + {% if config.author %}<meta name="author" content="{{ config.author }}">{% endif %} + {% if config.isbn %}<meta name="identifier" content="{{ config.isbn }}" scheme="ISBN">{% endif %} + {% block style %} + {% for resource in plugins.resources.css %} + {% if resource.url %} + <link rel="stylesheet" href="{{ resource.url }}"> + {% else %} + <link rel="stylesheet" href="{{ resource.path|resolveAsset }}"> + {% endif %} + {% endfor %} + {% endblock %} + {% block head %}{% endblock %} + </head> + <body> + {% block body %}{% endblock %} + {% block javascript %}{% endblock %} + </body> +</html> diff --git a/_layouts/website/footer.html b/_layouts/website/footer.html new file mode 100644 index 0000000..c37da01 --- /dev/null +++ b/_layouts/website/footer.html @@ -0,0 +1,17 @@ +{% block book_footer %} +<div> + <hr> + {% if book.draft %} + <h2> + <div style="position:absolute;text-align:left">{{ book.title }}</div> + <div style="position:absolute;width:100%;text-align:center">DRAFT [{{ gitbook.time|date('MM/DD/YYYY hh:mm:ss') }}]</div> + <div style="text-align:right">{{ book.version }}</div> + </h2> + {% else %} + <h2> + <div style="position:absolute;text-align:left">{{ book.title }}</div> + <div style="text-align:right">{{ book.version }}</div> + </h2> + {% endif %} +</div> +{% endblock %} diff --git a/_layouts/website/header.html b/_layouts/website/header.html new file mode 100644 index 0000000..2e5971c --- /dev/null +++ b/_layouts/website/header.html @@ -0,0 +1,31 @@ +{% block book_header %} +<div class="book-header" role="navigation"> + {% if glossary.path %} + <a href="{{ ('/' + glossary.path)|resolveFile }}" class="btn pull-left" aria-label="{{ "GLOSSARY_OPEN"|t }}"><i class="fa fa-sort-alpha-asc"></i></a> + {% endif %} + + <!-- Title --> + <h1> + <i class="fa fa-circle-o-notch fa-spin"></i> + <a href="{{ "/"|resolveFile }}" >{{ page.title }}</a> + </h1> +</div> +<div> + <!-- + <img style="float:left; align:middle; height:2em" src="media/TianocoreTitlePageLogo.jpg"/> + --> + {% if book.draft %} + <h2> + <div style="position:absolute;text-align:left">{{ book.title }}</div> + <div style="position:absolute;width:100%;text-align:center">DRAFT [{{ gitbook.time|date('MM/DD/YYYY hh:mm:ss') }}]</div> + <div style="text-align:right">{{ book.version }}</div> + </h2> + {% else %} + <h2> + <div style="position:absolute;text-align:left">{{ book.title }}</div> + <div style="text-align:right">{{ book.version }}</div> + </h2> + {% endif %} + <hr> +</div> +{% endblock %} diff --git a/_layouts/website/languages.html b/_layouts/website/languages.html new file mode 100644 index 0000000..a9d43be --- /dev/null +++ b/_layouts/website/languages.html @@ -0,0 +1,19 @@ +{% extends "./layout.html" %} + +{% block title %}{{ "LANGS_CHOOSE"|t }} · {{ super() }}{% endblock %} + +{% block body %} +<div class="book-langs-index" role="navigation"> + <div class="inner"> + <h3>{{ "LANGS_CHOOSE"|t }}</h3> + + <ul class="languages"> + {% for lang in languages.list %} + <li> + <a href="{{ (lang.id + "/README.md")|contentURL }}">{{ lang.title }}</a> + </li> + {% endfor %} + </ul> + </div> +</div> +{% endblock %} diff --git a/_layouts/website/layout.html b/_layouts/website/layout.html new file mode 100644 index 0000000..5fa7fe8 --- /dev/null +++ b/_layouts/website/layout.html @@ -0,0 +1,28 @@ +{% extends "layout.html" %} + +{% block head %} + {{ super() }} + <meta name="HandheldFriendly" content="true"/> + <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> + <meta name="apple-mobile-web-app-capable" content="yes"> + <meta name="apple-mobile-web-app-status-bar-style" content="black"> + <link rel="apple-touch-icon-precomposed" sizes="152x152" href="{{ "images/apple-touch-icon-precomposed-152.png"|resolveAsset }}"> + <link rel="shortcut icon" href="{{ "images/favicon.ico"|resolveAsset }}" type="image/x-icon"> +{% endblock %} + +{% block style %} + {### Include theme css before plugins css ###} + <link rel="stylesheet" href="{{ "style.css"|resolveAsset }}"> + + {{ super() }} + + {### Custom stylesheets for the book ###} + + {% for type, style in config.styles %} + {% if fileExists(style) and type == "website" %} + <link rel="stylesheet" href="{{ style|resolveFile }}"> + {% endif %} + {% endfor %} +{% endblock %} + +{% block body %}{% endblock %} diff --git a/_layouts/website/page.html b/_layouts/website/page.html new file mode 100644 index 0000000..d78a348 --- /dev/null +++ b/_layouts/website/page.html @@ -0,0 +1,86 @@ +{% extends "./layout.html" %} + +{% block title %}{{ page.title }} · {{ super() }}{% endblock %} + +{% block description %}{{ page.description }}{% endblock %} + +{% block head %} + {{ super() }} + {% if page.next and page.next.path %} + <link rel="next" href="{{ page.next.path|resolveFile }}" /> + {% endif %} + {% if page.previous and page.previous.path %} + <link rel="prev" href="{{ page.previous.path|resolveFile }}" /> + {% endif %} +{% endblock %} + +{% block javascript %} + <script src="{{ "gitbook.js"|resolveAsset }}"></script> + <script src="{{ "theme.js"|resolveAsset }}"></script> + {% for resource in plugins.resources.js %} + {% if resource.url %} + <script src="{{ resource.url }}"></script> + {% else %} + <script src="{{ resource.path|resolveAsset }}"></script> + {% endif %} + {% endfor %} +{% endblock %} + +{% block body %} +<div class="book"> + <div class="book-summary"> + {% block book_sidebar %} + {% block search_input %}{% endblock %} + {% block book_summary %} + <nav role="navigation"> + {% include "website/summary.html" %} + </nav> + {% endblock %} + {% endblock %} + </div> + + <div class="book-body"> + {% block book_body %} + <div class="body-inner"> + {% block book_inner %} + {% include "website/header.html" %} + + <div class="page-wrapper" tabindex="-1" role="main"> + <div class="page-inner"> + {% block search_results %} + <section class="normal markdown-section"> + {% block page %} + {{ page.content|safe }} + {% endblock %} + </section> + {% endblock %} + </div> + </div> + + {% include "website/footer.html" %} + {% endblock %} + </div> + + {% block book_navigation %} + {% if page.previous and page.previous.path %} + <a href="{{ page.previous.path|resolveFile }}{{ page.previous.anchor }}" class="navigation navigation-prev {% if not (page.next and page.next.path) %}navigation-unique{% endif %}" aria-label="Previous page: {{ page.previous.title }}"> + <i class="fa fa-angle-left"></i> + </a> + {% endif %} + {% if page.next and page.next.path %} + <a href="{{ page.next.path|resolveFile }}{{ page.next.anchor }}" class="navigation navigation-next {% if not (page.previous and page.previous.path) %}navigation-unique{% endif %}" aria-label="Next page: {{ page.next.title }}"> + <i class="fa fa-angle-right"></i> + </a> + {% endif %} + {% endblock %} + {% endblock %} + </div> + + <script> + var gitbook = gitbook || []; + gitbook.push(function() { + gitbook.page.hasChanged({{ template.getJSContext()|dump|safe }}); + }); + </script> +</div> +{% endblock %} diff --git a/_layouts/website/summary.html b/_layouts/website/summary.html new file mode 100644 index 0000000..e43c954 --- /dev/null +++ b/_layouts/website/summary.html @@ -0,0 +1,61 @@ +{% macro articles(_articles) %} + {% for article in _articles %} + <li class="chapter {% if article.path == file.path and not article.anchor %}active{% endif %}" data-level="{{ article.level }}" {% if article.path %}data-path="{{ article.path|resolveFile }}"{% endif %}> + {% if article.path and getPageByPath(article.path) %} + <a href="{{ article.path|resolveFile }}{{ article.anchor }}"> + {% elif article.url %} + <a target="_blank" href="{{ article.url }}"> + {% else %} + <span> + {% endif %} + {% if article.level != "0" and config.pluginsConfig['theme-default'].showLevel %} + <b>{{ article.level }}.</b> + {% endif %} + {{ article.title }} + {% if article.path or article.url %} + </a> + {% else %} + </span> + {% endif %} + + {% if article.articles.length > 0 %} + <ul class="articles"> + {{ articles(article.articles, file, config) }} + </ul> + {% endif %} + </li> + {% endfor %} +{% endmacro %} + +<ul class="summary"> + {% set _divider = false %} + {% if config.links.sidebar %} + {% for linkTitle, link in config.links.sidebar %} + {% set _divider = true %} + <li> + <a href="{{ link }}" target="_blank" class="custom-link">{{ linkTitle }}</a> + </li> + {% endfor %} + {% endif %} + + {% if _divider %} + <li class="divider"></li> + {% endif %} + + {% for part in summary.parts %} + {% if part.title %} + <li class="header">{{ part.title }}</li> + {% elif not loop.first %} + <li class="divider"></li> + {% endif %} + {{ articles(part.articles, file, config) }} + {% endfor %} + + <li class="divider"></li> + + <li> + <a href="https://www.gitbook.com" target="blank" class="gitbook-link"> + {{ "GITBOOK_LINK"|t }} + </a> + </li> +</ul> diff --git a/styles/epub.css b/styles/epub.css index b9729f1..56f8394 100644 --- a/styles/epub.css +++ b/styles/epub.css @@ -1,235 +1,48 @@ -/* CSS for pdf */ - -body { - background: #f1f1f1; - border-top: 10px solid #999999; - font-size: 12pt; -} - -#mainbody { - margin-left: auto; - margin-right: auto; - width: 60em; -} - -#topbar { - top: 0; - left: 0; - bottom: 0; - width: 60em; - background: url("../images/header-bg.jpg") no-repeat; - border-top: 10px solid #ff6600; - margin-top: -10px; - float: left; -} - -#topbar.front-page { - height: 13em; -} - -#topbar #logo { - position: relative; - top: 85px; - left: 20px; -} - -#topbar #small-logo { - position: relative; - left: 20px; - padding: 0.1em 0 0.1em 0; - height: 3em; -} - -#sidebar { - float: left; - z-index: 1; - top: 0; - left: 0; - bottom: 0; - padding: 2em 0.5em 0 0.5em; - width: 9em; -} - -div.main-page.content { - float: left; - width: 35em; -} - -div.main-page.news { - float: right; - width: 20em; -} - -div.main-page.news h2 { - border-top: 10px solid #365f91; - border-bottom: 1px solid #333333; - color: #333333; - padding: 0.5em; - margin: 0; -} - -div.main-page.news ul { - margin: 0; - list-style: none; - list-style-image: none; -} - -div.main-page.news ul li { - border-bottom: 1px solid #333333; - padding: 0.5em; - color: #777777; -} - -div.main-page.news ul li a { - font-weight: bold; -} - -div.news-page.news-item { - border-top: 1px solid #777777; - width: 100%; - padding: 0; - margin: 0; -} - -#content { - margin: 0px; - padding: 2em 1em; - font-family: Helvetica; - color: #40494d; - background-color: #fff; - width: 100%; - max-width: 60em; - display: block; - float: left; -} - -#content #buttons a { - background: #ff6600; - color: #333333; - font-family: "Helvetica"; - text-transform: uppercase; - font-size: 15px; - display: inline-block; - padding: 8px 25px; - margin: 10px 20px 10px 0; -} - -#footer { - background: #999999; - margin-bottom: 60px; - width: 100%; - float: left; - padding: 0.5em 1em; -} -#footer #footer-inner { - height: 2em; - background: url("../images/footer-icon.svg") no-repeat right center; -} -#footer #footer-inner a { - color: white; - font-size: 14px; -} -@media (min-width: 0em) and (max-width: 63.9375em) { - #footer #footer-inner { - padding: 10px 20px; - background-position: right 20px center; - } -} -@media (min-width: 64em) { - #page-wrapper #page #footer-inner { - -sgs-span-settings: ("span": 3, "location": 2, "grid": 20px 630px 20px 310px 20px, "gutter": 0.25, "style": "opposite", "start row": false, "end row": false, "fixed gutter": true, "split gutter": false, "gutter property": "padding", "options": (("both": null))); - width: 96%; - float: left; - margin-right: -100%; - margin-left: 2%; - clear: none; - padding-right: 0.25; - } -} -@media (min-width: 0em) and (max-width: 63.9375em) { - #page-wrapper #page #footer-inner { - -sgs-span-settings: ("span": 1, "location": 1, "grid": 1, "gutter": 0.25, "style": "opposite", "start row": true, "end row": true, "fixed gutter": false, "split gutter": false, "gutter property": "margin", "options": ((null: null))); - width: 100%; - float: right; - margin-left: 0; - margin-right: 0; - clear: none; - } -} - -ul { - font-family: sans-serif; - list-style-type: square; - padding: 0 0 0 0; - margin: 0.3em 0 0 1.5em; -} - -.site-menu { - color: #a0a0a0; -} - -a.site-menu:hover { - color: #4048c0; -} - -a { - color: #0860A8; - text-decoration: none; -} - -a:hover { - color: #0860A8; - text-decoration: underline; +p { + font-family: sans, sans-serif, Arial; } -p { - margin: .4em 0 .5em 0; - line-height: 1.5em; +body { + font-family: sans, sans-serif, Arial; } h1 { color: #0860A8; - font-family: "Helvetica"; font-weight: normal; font-size: 190%; text-transform: uppercase; - margin-top: 0; - margin-bottom: 0; } h2 { color: #0860A8; - font-family: "Helvetica"; font-size: 130% } h3 { color: #0860A8; font-weight: bold; - font-size: 90% + font-size: 100% } h4 { color: #0860A8; - font-weight: bold; font-size: 90% } -.t_projects th { - background-color: #DBEBFF; +h5 { + color: #0860A8; + font-weight: bold; + font-size: 90%; } -.t_projects table, th, td { - border: 1px solid #ccc; - font-size: 80%; +h6 { + font-weight: bold; + font-size: 90%; + text-align: center; } -.section.toc { - display: none; +img { + max-width: 100%; + height: auto; } - -/* TODO: Consider css for - * - * .posts .site .header .title .meta .footer .contact .rss .post - */ - \ No newline at end of file + diff --git a/styles/mobi.css b/styles/mobi.css new file mode 100644 index 0000000..efa36c5 --- /dev/null +++ b/styles/mobi.css @@ -0,0 +1,50 @@ +p { + font-family: sans, sans-serif, Arial; +} + +body { + font-family: sans, sans-serif, Arial; +} + +h1 { + color: #0860A8; + font-weight: bold; + font-size: 170%; + text-transform: uppercase; +} + +h2 { + color: #0860A8; + font-weight: bold; + font-size: 160% +} + +h3 { + color: #0860A8; + font-weight: bold; + font-size: 150% +} + +h4 { + color: #0860A8; + font-weight: bold; + font-size: 140% +} + +h5 { + color: #0860A8; + font-weight: bold; + font-size: 130%; +} + +h6 { + font-weight: bold; + font-size: 100%; + text-align: center; +} + +img { + max-width: 100%; + height: auto; +} + diff --git a/styles/pdf.css b/styles/pdf.css index 56f3448..56f8394 100644 --- a/styles/pdf.css +++ b/styles/pdf.css @@ -1,233 +1,48 @@ -/* CSS for pdf */ - -body { - background: #f1f1f1; - border-top: 10px solid #999999; - font-size: 12pt; -} - -#mainbody { - margin-left: auto; - margin-right: auto; - width: 60em; -} - -#topbar { - top: 0; - left: 0; - bottom: 0; - width: 60em; - background: url("../images/header-bg.jpg") no-repeat; - border-top: 10px solid #ff6600; - margin-top: -10px; - float: left; -} - -#topbar.front-page { - height: 13em; -} - -#topbar #logo { - position: relative; - top: 85px; - left: 20px; -} - -#topbar #small-logo { - position: relative; - left: 20px; - padding: 0.1em 0 0.1em 0; - height: 3em; -} - -#sidebar { - float: left; - z-index: 1; - top: 0; - left: 0; - bottom: 0; - padding: 2em 0.5em 0 0.5em; - width: 9em; -} - -div.main-page.content { - float: left; - width: 35em; -} - -div.main-page.news { - float: right; - width: 20em; -} - -div.main-page.news h2 { - border-top: 10px solid #365f91; - border-bottom: 1px solid #333333; - color: #333333; - padding: 0.5em; - margin: 0; -} - -div.main-page.news ul { - margin: 0; - list-style: none; - list-style-image: none; -} - -div.main-page.news ul li { - border-bottom: 1px solid #333333; - padding: 0.5em; - color: #777777; -} - -div.main-page.news ul li a { - font-weight: bold; -} - -div.news-page.news-item { - border-top: 1px solid #777777; - width: 100%; - padding: 0; - margin: 0; -} - -#content { - margin: 0px; - padding: 2em 1em; - font-family: Helvetica; - color: #40494d; - background-color: #fff; - width: 100%; - max-width: 60em; - display: block; - float: left; -} - -#content #buttons a { - background: #ff6600; - color: #333333; - font-family: "Helvetica"; - text-transform: uppercase; - font-size: 15px; - display: inline-block; - padding: 8px 25px; - margin: 10px 20px 10px 0; -} - -#footer { - background: #999999; - margin-bottom: 60px; - width: 100%; - float: left; - padding: 0.5em 1em; -} -#footer #footer-inner { - height: 2em; - background: url("../images/footer-icon.svg") no-repeat right center; -} -#footer #footer-inner a { - color: white; - font-size: 14px; -} -@media (min-width: 0em) and (max-width: 63.9375em) { - #footer #footer-inner { - padding: 10px 20px; - background-position: right 20px center; - } -} -@media (min-width: 64em) { - #page-wrapper #page #footer-inner { - -sgs-span-settings: ("span": 3, "location": 2, "grid": 20px 630px 20px 310px 20px, "gutter": 0.25, "style": "opposite", "start row": false, "end row": false, "fixed gutter": true, "split gutter": false, "gutter property": "padding", "options": (("both": null))); - width: 96%; - float: left; - margin-right: -100%; - margin-left: 2%; - clear: none; - padding-right: 0.25; - } -} -@media (min-width: 0em) and (max-width: 63.9375em) { - #page-wrapper #page #footer-inner { - -sgs-span-settings: ("span": 1, "location": 1, "grid": 1, "gutter": 0.25, "style": "opposite", "start row": true, "end row": true, "fixed gutter": false, "split gutter": false, "gutter property": "margin", "options": ((null: null))); - width: 100%; - float: right; - margin-left: 0; - margin-right: 0; - clear: none; - } -} - -ul { - font-family: sans-serif; - list-style-type: square; - padding: 0 0 0 0; - margin: 0.3em 0 0 1.5em; -} - -.site-menu { - color: #a0a0a0; -} - -a.site-menu:hover { - color: #4048c0; -} - -a { - color: #0860A8; - text-decoration: none; -} - -a:hover { - color: #0860A8; - text-decoration: underline; +p { + font-family: sans, sans-serif, Arial; } -p { - margin: .4em 0 .5em 0; - line-height: 1.5em; +body { + font-family: sans, sans-serif, Arial; } h1 { color: #0860A8; - font-family: "Helvetica"; font-weight: normal; font-size: 190%; text-transform: uppercase; - margin-top: 0; - margin-bottom: 0; } h2 { color: #0860A8; - font-family: "Helvetica"; font-size: 130% } h3 { color: #0860A8; font-weight: bold; - font-size: 90% + font-size: 100% } h4 { color: #0860A8; - font-weight: bold; font-size: 90% } - -.t_projects th { - background-color: #DBEBFF; +h5 { + color: #0860A8; + font-weight: bold; + font-size: 90%; } -.t_projects table, th, td { - border: 1px solid #ccc; - font-size: 80%; +h6 { + font-weight: bold; + font-size: 90%; + text-align: center; } - -/* TODO: Consider css for - * - * .posts .site .header .title .meta .footer .contact .rss .post - */ - \ No newline at end of file +img { + max-width: 100%; + height: auto; +} + diff --git a/styles/website.css b/styles/website.css index a0df36a..56f8394 100644 --- a/styles/website.css +++ b/styles/website.css @@ -1,233 +1,48 @@ -/* CSS for website */ -/* CSS for website */ - -body { - background: #f1f1f1; - border-top: 10px solid #999999; - font-size: 12pt; -} - -#mainbody { - margin-left: auto; - margin-right: auto; - width: 60em; -} - -#topbar { - top: 0; - left: 0; - bottom: 0; - width: 60em; - background: url("../images/header-bg.jpg") no-repeat; - border-top: 10px solid #ff6600; - margin-top: -10px; - float: left; -} - -#topbar.front-page { - height: 13em; -} - -#topbar #logo { - position: relative; - top: 85px; - left: 20px; -} - -#topbar #small-logo { - position: relative; - left: 20px; - padding: 0.1em 0 0.1em 0; - height: 3em; -} - -#sidebar { - float: left; - z-index: 1; - top: 0; - left: 0; - bottom: 0; - padding: 2em 0.5em 0 0.5em; - width: 9em; -} - -div.main-page.content { - float: left; - width: 35em; -} - -div.main-page.news { - float: right; - width: 20em; -} - -div.main-page.news h2 { - border-top: 10px solid #365f91; - border-bottom: 1px solid #333333; - color: #333333; - padding: 0.5em; - margin: 0; -} - -div.main-page.news ul { - margin: 0; - list-style: none; - list-style-image: none; -} - -div.main-page.news ul li { - border-bottom: 1px solid #333333; - padding: 0.5em; - color: #777777; -} - -div.main-page.news ul li a { - font-weight: bold; -} - -div.news-page.news-item { - border-top: 1px solid #777777; - width: 100%; - padding: 0; - margin: 0; -} - -#content { - margin: 0px; - padding: 2em 1em; - font-family: Helvetica; - color: #40494d; - background-color: #fff; - width: 100%; - max-width: 60em; - display: block; - float: left; -} - -#content #buttons a { - background: #ff6600; - color: #333333; - font-family: "Helvetica"; - text-transform: uppercase; - font-size: 15px; - display: inline-block; - padding: 8px 25px; - margin: 10px 20px 10px 0; -} - -#footer { - background: #999999; - margin-bottom: 60px; - width: 100%; - float: left; - padding: 0.5em 1em; -} -#footer #footer-inner { - height: 2em; - background: url("../images/footer-icon.svg") no-repeat right center; -} -#footer #footer-inner a { - color: white; - font-size: 14px; -} -@media (min-width: 0em) and (max-width: 63.9375em) { - #footer #footer-inner { - padding: 10px 20px; - background-position: right 20px center; - } -} -@media (min-width: 64em) { - #page-wrapper #page #footer-inner { - -sgs-span-settings: ("span": 3, "location": 2, "grid": 20px 630px 20px 310px 20px, "gutter": 0.25, "style": "opposite", "start row": false, "end row": false, "fixed gutter": true, "split gutter": false, "gutter property": "padding", "options": (("both": null))); - width: 96%; - float: left; - margin-right: -100%; - margin-left: 2%; - clear: none; - padding-right: 0.25; - } -} -@media (min-width: 0em) and (max-width: 63.9375em) { - #page-wrapper #page #footer-inner { - -sgs-span-settings: ("span": 1, "location": 1, "grid": 1, "gutter": 0.25, "style": "opposite", "start row": true, "end row": true, "fixed gutter": false, "split gutter": false, "gutter property": "margin", "options": ((null: null))); - width: 100%; - float: right; - margin-left: 0; - margin-right: 0; - clear: none; - } -} - -ul { - font-family: sans-serif; - list-style-type: square; - padding: 0 0 0 0; - margin: 0.3em 0 0 1.5em; -} - -.site-menu { - color: #a0a0a0; -} - -a.site-menu:hover { - color: #4048c0; -} - -a { - color: #0860A8; - text-decoration: none; -} - -a:hover { - color: #0860A8; - text-decoration: underline; +p { + font-family: sans, sans-serif, Arial; } -p { - margin: .4em 0 .5em 0; - line-height: 1.5em; +body { + font-family: sans, sans-serif, Arial; } h1 { color: #0860A8; - font-family: "Helvetica"; font-weight: normal; font-size: 190%; text-transform: uppercase; - margin-top: 0; - margin-bottom: 0; } h2 { color: #0860A8; - font-family: "Helvetica"; font-size: 130% } h3 { color: #0860A8; font-weight: bold; - font-size: 90% + font-size: 100% } + h4 { color: #0860A8; - font-weight: bold; font-size: 90% } - -.t_projects th { - background-color: #DBEBFF; +h5 { + color: #0860A8; + font-weight: bold; + font-size: 90%; } -.t_projects table, th, td { - border: 1px solid #ccc; - font-size: 80%; +h6 { + font-weight: bold; + font-size: 90%; + text-align: center; } - -/* TODO: Consider css for - * - * .posts .site .header .title .meta .footer .contact .rss .post - */ - +img { + max-width: 100%; + height: auto; +} + -- 2.29.2.windows.2
|
|
[tianocore-docs][ATBB-Memory_Protection_in_UEFI_BIOS][Patch 1/2] Clean up format and layout to match template
Michael D Kinney
* Move figures from assets directory to media directory
* Remove non ASCII characters * Add Figure to TOC * Add missing file headers Cc: Jiewen Yao <jiewen.yao@...> Cc: Vincent Zimmer <vincent.zimmer@...> Cc: Laurie Jarlstrom <laurie.jarlstrom@...> Cc: Kevin Shaw <kevin.w.shaw@...> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@...> --- README.md | 36 ++--- SUMMARY.md | 38 +++++ assets/Tianocore_logo2.png | Bin 7360 -> 0 bytes authors.md | 31 ++++ book.json | 9 ++ cover.jpg | Bin 0 -> 211343 bytes executive-summary.md | 31 ++++ glossary.md | 68 ++++++--- .../Fig1- SMRAM memory protection.jpg | Bin .../Fig2 - Mapping of Protection in SMM.jpg | Bin ...g3 - Page table enforced memory layout.jpg | Bin .../Fig4 - UEFI memory protection.jpg | Bin media/TianocoreTitlePageLogo.jpg | Bin 0 -> 44499 bytes memory-protection-in-SMM.md | 134 ++++++++++-------- memory-protection-in-uefi.md | 104 +++++++++----- references.md | 50 +++++-- 16 files changed, 359 insertions(+), 142 deletions(-) delete mode 100644 assets/Tianocore_logo2.png create mode 100644 book.json create mode 100644 cover.jpg rename {assets => media}/Fig1- SMRAM memory protection.jpg (100%) rename {assets => media}/Fig2 - Mapping of Protection in SMM.jpg (100%) rename {assets => media}/Fig3 - Page table enforced memory layout.jpg (100%) rename {assets => media}/Fig4 - UEFI memory protection.jpg (100%) create mode 100644 media/TianocoreTitlePageLogo.jpg diff --git a/README.md b/README.md index 6bc2a7b..f470c6e 100644 --- a/README.md +++ b/README.md @@ -29,30 +29,29 @@ --> - +<img src="media/TianocoreTitlePageLogo.jpg" width="300" /> -#####White Paper +### {{ book.title }} +{% if book.draft %} +** DRAFT FOR REVIEW ** +{% else %} +** {{ book.version }} ** +{% endif %} -# A Tour Beyond BIOS - Memory Protection in UEFI BIOS +** {{ gitbook.time|date('MM/DD/YYYY hh:mm:ss') }} ** +{% if book.udkrelease %} +** {{ book.udkrelease }} ** +{% endif %} - - _Jiewen Yao_, + _Jiewen Yao_, _Intel Corporation_ - - - - - _Vincent J. Zimmer _, + _Vincent J. Zimmer _, _Intel Corporation_ - - -##### March 2017 - -## Acknowledgements +### Acknowledgements Redistribution and use in source (original document form) and 'compiled' forms (converted to PDF, epub, HTML and other formats) with or without @@ -78,7 +77,12 @@ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -Copyright © 2007-2017, Intel Corporation. All rights reserved. +Copyright (c) 2007-2017, Intel Corporation. All rights reserved. + +### Revision History +| Revision | Revision History | Date | +| ---------- | ------------------ | ----------- | +| 1.0 | Initial release. | March 2017 | diff --git a/SUMMARY.md b/SUMMARY.md index dcce47b..b0250f0 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -1,3 +1,34 @@ +<!--- @file + Summary + + Copyright (c) 2008-2017, Intel Corporation. All rights reserved.<BR> + + Redistribution and use in source (original document form) and 'compiled' + forms (converted to PDF, epub, HTML and other formats) with or without + modification, are permitted provided that the following conditions are met: + + 1) Redistributions of source code (original document form) must retain the + above copyright notice, this list of conditions and the following + disclaimer as the first lines of this file unmodified. + + 2) Redistributions in compiled form (transformed to other DTDs, converted to + PDF, epub, HTML and other formats) must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS DOCUMENTATION IS PROVIDED BY TIANOCORE PROJECT "AS IS" AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL TIANOCORE PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--> + # Summary * [Introduction](README.md) @@ -8,3 +39,10 @@ * [References](references.md) * [Authors](authors.md) +--- + +* Figures + * [Figure 1 - SMRAM memory protection](memory-protection-in-SMM.md#figure-1---smram-memory-protection) + * [Figure 2 - Mapping of Protection in SMM](memory-protection-in-SMM.md#figure-2---mapping-of-protection-in-smm) + * [Figure 3 - Page table enforced memory layout](memory-protection-in-SMM.md#figure-3---page-table-enforced-memory-layout) + * [Figure 4 - UEFI memory protection](memory-protection-in-uefi.md#figure-4---uefi-memory-protection) diff --git a/assets/Tianocore_logo2.png b/assets/Tianocore_logo2.png deleted file mode 100644 index 0ba21dc7a651ee64ee3449415aabb667022276b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7360 zcmXw;bzBqBx4=<Ay1OMuhvZ-&F{HbZkVZ-vwILxA64EVWg!H7lrKCZ+b98qI%H#KY z@BMS{J?C@#+&te%ZA~QtTv}W-G&BMgWw0(9+B3jY+5r2-Q;65c^7<)y=BcYBk5)cP zzxO0yILK+pp`lg9;XPPkqM^|{setA5p%zD3c#ZUSu)fv#njJVC&c?>fCWIrdQ(9JL ze8x|a?Igg>$6|=trAX?w;)oYFR|@S&HqAfHdExkJ6C;e<m>f2Ri%XGhjpXAl(`S7F z(b+_VZo-%M?lZGK+-)yrEYB~`*L<m2J%Ozp9@>r#i`QKI-3eHQb$sYWok2m2aee=Z zwCq0L)>RxD^9f|*Z+#vprEi9)*QcmKl!*I{LcAdg4<vDY!tXB4;q_&y&P>ZZAMjB( zTG;}x%u4yb<Sx<T59xFkoI_n>`cO3F)-=0B`$A=bJ)|5|SBO~rqD|D<+o$5Pmj>`D z*L#iDbd8rpeQJzx4xe_B5(e@#QB()|=HlF2!cVH}Nh1$#%yaElW2ISkZ25UQ0Y4Dp zSzgD6e&X_(HN&hYZpg1OC<rmHW!b9|R_raqb-A&5hR+f}Q3QnbaP_vFLqRp!?NO7T z3C^{L<athjFc7-RfAW^lV(7-K+E?)eUO_?VV9Q>d+GiuZC2UeC_WyRy68^lTCwfmE zHa38w0srCG%tZm4yft;*euVvRozaup@x0Y8#l+bz>n1P|!bD}YSH--j1j?0?bC^8? z1BEEB_HtoQi95+t-@=pngd;>E^t@x}-%4wgBg<1n&q^&Or-Zo!3<D_yuD|ZnoYThw zK^miYT8Uw2PH}ycO8a{bN9k%^+T})C+goSc93NZES1Sl+1|EBmxDG=ekg?Gy5Nlv& zx(lJ#D&K*Klwz2prUc8*!3NL|zU64nN#s}zQ{98y;hsn{Y6V5u=KL`<$;~=vd7J*} zCbwU_tL{8_KchORwb@v89>>GnpVxwy{)#xx$f{W-?hM4Lo-?FYtC6icb~d(Qz!+CV z1m38%(H&hq3#B*m$WG?kum3R-G@8bB*X*-P)rZ7m#m@A56W3D_7W}1{dFf9M8=XOf z1x<zK>8=IvvONo8@-Txsy9`!_BZ~X0;));7J+Jf_m&jne1dd99sXn_>rA0#yxFbUt z8W_dBNv%FQI+AkIJuL<VTCqm#b7db}Zafl>S`>W@Z1*bS(x`eKx6Yu28Om^O1CyUT z%+nRw#5xsnj3dzSLc}P|da-{@Xp_%n`Gs6_n+TtXqjR&;;vZa!LS$VPU0&sgm9Ju( z5=A~=3rlXf9?oVQO7Y3)BjAmE1~Hw2HZ|!8*99Gtl7Zxe4+{g9KY~0n!j&y2v_BZM zHVZ%3u{=_N<DQj+icbBxkb+s??;B0TTO=*au?+lWw?0JssSzP}imfx*;2s@+&gn%1 zPjgRC7f>1R!5jL7wjVD?t%_8;?Fp_<3u(C<C@6}**P&L+EC%MW<yxDiyYdAk?_n<k zUFptk*2S9i7NNnolW?eaR^OB`+t<GuhSW$g(!r}bU*XRVrRGIGhy|l*i^A=*VN(_l zQxJy${57xTc<j<|EfYCL+yoYZtw7mFdxXy>UUwPfOVrf*+5Qqnf%TW7c%n%kvmg7A z%=&{$s5e7by=AFVqk(jH$=5sLZNh==fWh<9-ptJvs6mAz@d(G)QfXv8XY@4XG^I3R zUWHBbq9UGwM|@D{K4o(a*1hiveoV1dHHZWY;n<M&@pJ2bK|+>ut){}(O<oCDEGJfS z$Nh>nS9tbbg4_4~{c8D<3KUZKw`17x^)S~!ceK*x2$oA?kwA8QP>j*dbMOUaow(A; z`59~7(6pnpsIfQ_2C7L_hT}tVkz#{*R5AS}D7!l=E<2V+>3x`s&R7UW_2K{tMqN#} zN|TA=e%aZ6Ve!tC%dKj8Xk*j_$v&SBqk9&v9t&2uZ|IJa1=q+$NEP#Zdk$|Jy;lsc zX|r5Aam6u(L-AkPqyAm<k3S5$Z6sCs6s(^HD<==fUyyrz|A+%a_$(xCr))9$(vnF^ z;B2~bYqKRU=QrU_4NaA62RFCdb+s;d-KtJj_NhWw^EF&JiDbVzvI1+`xR~LLtD4g7 zYJ(S>@f2j|u~6@ds<@J*#IG5t`8QBM`BDiQ{T#9KZ}AFL_(S*8Nq;ivj+s^2l3~?p z*R^VxQK5GY`m!tEb63ux-p~Jj{b$FKf#Y$Nyh84lLU(l{psf~~z;^y#Pro90!*ZA= zQRy<hJ;!Rv%FqAAxM`G#{~BsfTfQP<*XIOOQ)r5l(b4EY#idLi=yu3T1)+1Bz1AfG z3L66&`j9O36{%_lbE98Z2j#ehzn`rlXUt7Z0Yy_Q)3Tc)F5r002%~8sZ&Q=?Ol}Wv zH<N#M)w~~ox24uj#gc0-b$HIv=V?ya<$Rhv$!zgvJK@2VkMc*48?&+5@!Owhg|A~g z7H@NDQDV{m24MHMjfN+BsL0EkX+IBtxWb@R1nC@LmhyfbUOncf;QsNRdPTU;rruIy z6ATQ(DybrBXLT{v!*PuyGrNC7<F`kDXI#MIa9BPSCGHyT6}_L*|2Y9aLAP@}4vu7@ zFlSrTijR8@qLF5d>n8=sH@auGnp2I<c4$SgcDpee$obh;r;>Tn&?F8zzFeI*Nbm(+ zT%4nzS6*Fdt{9O5^yuyG4PQ}7P9_7#&Qp!IcbN^9c?5GiEmN@uL%4NKw{F_s362%D z?nfrIu8-<7ea2;Ey@)N)(OU$xr6m1ku@{?lk3yWXRz%JjSIeA?N?dIf(^@r;^y^;h z45`YwXL)K0=%RApNV&Ib8nM34s0#>9!(z+URZu=pybd_8%{t-YWBTJ%_hE)oczwGY z2rH-EuwNMVcuZTk+1N6x<<k_~zcRbL&4&Xiq6T$H&-L$Pqj+^aee+DuEB|@A?Y(O9 zUp#}Xu<GepS%JSv=+xxXH5s=RgzI8HZTGz`IEU(?ufK7-cmwwbM0oWl`%}9MFMgtt z){+q?FL_W*YXQcR_v;^TSY!^KYlRRhu9psYj0bv-GyVuqvr}ksWO|8azr?b71ayM! zuMs=Dy)o;7?Oon}{WLM-^L{3>MwXhS$8*{g_QB=Ry3Qxcb^f2j^vd^CfWTg0_Mvl| z=>iapmPznX)E0yc7p(h(XxcN+wMT#)CQ>9i9}%29I|iFwZ3aL;tva22k*|pX)>?y# z3T=x_3p}r<wDIFOS(r6*ed1-c)HxlB1=$H{b*v)@7?YxmpSLztG2c}MZZ2bKfH9;0 z7FuqEVtIW3)}-*93WMQ%(aFq97Hh|?FKdBurQ19f5Q41(*yvf#5TtYzW|q!76&3}R z?I1m@E*f4e+`JL(siIhBWXdiOehj$eXG#td<b=D@e)SDCa+BAOJyCQjHwyFZ1}a8O zu5}VFHdNfy9(f*CXrrX6UJv=q2l5CE{*yU_ixpQfjN%|#?hq1|hfHHLy-U=)9g+Vs z(CfznYep4rHf-no6M5;g5)T-W{Y<6BA}+pWneATc3cLW!xXO6eR|dPs{+j&$;cO2I zG%3s6syFYkeIaoN$<4W$a6PGwo}FXu?@83|j{_$eng?B&Z}{V`Gk(*MSfhzd?;S-< zrcDofe3NS4GZynQ1MwWU7LrZ2J0L|b(4r(|)}$)CfAgk)8b_3UCcX@CdXUbNB)GPb ztPCD~EUN3pxUPFf|9U6pBCReUmPsJmeMUCo*9dbBil<)UtnIfZ2Ehkl+)k8WfW`>I zKJxn83BqPm`luWG0$b;Z4(CxzO7FrxEHcTeFA{QSt2nxBp0HyiuVR}u*enj>gy{Z~ zdX;V~mirE<2)_*iv4;*b!kr@&-^(kOAUeL~s(+F2SYImnh55`3Bb3Z+6Sh|VKqI>3 z^>X%;dpcfKiiAf3-S`^+DCQ#Wf@)@r(m9T(q&;m1^4DVrho8|wXm)g&$@{2vcBi6} z`7HoE+n$k};f~Jfm%`epmeOdZ!uknLCb4E{<Vnv9ovn0r#<YiJ$vV&up#&rT2Xf+U zU!;fTWMwao1cG&H$;Ym<32NXf^jv7ezZTcz%pzlLJc3;QPwTCy-1?IN+f7GT-l~0j zOg&hS=M-1*l&>@tBqX%*GaIq1Wh077-WvLD0GmyW+$bIS*zXlVmi5yM#4iTQw)Y+9 zbu7Xeaxsle3VzTrm59e&!L&eI<8uG{KC6JLukYXK%tRM6#s#A&Yok|>CazV?X>(uC z$fqN^u>^m7%!VWRdt%mlENEh_Fu_}ReQ81sD|ocq5=q1CAg^3*btq@Jxh5+L(q!cL zNi{uZ&myo?J6b}Q`XOG6sZs?|=MG*ee4a>50Afm<)Bol`!2YbXrNqdZ9?qk#Uopnx zOfSR2W9SyIhhXUvVQ4ixN?)+<`8X}P*LX_g)OehAI_7kQO=gy74<Z4PqweM}_iyJ` zSEnfHa!}M(&1y#qPDi+8FIC@LM>l*3#nFni{RmhK_`N6E9`SPZimI-+a4A34D4n>S zXo`|mg6hO*h)4YsHgmWc>*)*8kC`OWWPt8!0?1yln(f|(PLpwWGq{TNuBeuHR51Th z>ED1ydDmU{`B4h%d7=T?`5&1Xo)P_1PIbqhSxHKBS=EYsAC$Z<RJOaEsg8GF?5CLd z!Th0q$1)n4!=G{z4!Chanh>EEgIs~8Zx6BEurr;a6V^EPF@$g9ZbgZpUcb;cb3^8h zq<Hl{W_~+6{d97bzhE7Mh$c(sPnA}yNcAO*8En58f?UnTs~^4QueNr(*c8vJ1q;L! z9TYUig@1Z_rtEd;0A04;03i=fcQ*?~AWAQ`<5bx%2W%ql%s|!jal*zwk0x(jGP8Rs z+?5}k(qmDc&Q){SdtX7WF0*tlnD@dkUR8qg?euSQ%|D@zn_;Bh!Caes%WDrwv#;D& zuyGcHi?ZNKU9v6u8y8NGhHrle@om^jxPvV&Ydz-M9zpXOk-;%E+HkQZhRDk;8y23O z!M33{n>XDTqUjg;onelWq*O44#3}`jjamCShEGbrH?<`@3C9nmc%F=T*trtK*g=cU zO3+44?)D*j<2TFCXi?0hOOcCrta!5rBcBBqLmT|Hj>xN7&hepuam&X#_OJ&A9FIX< z(!2KeBt`Bq^oHg<K}FGIrNTwXk&3@sWzCs1gy~Ve3|KoH6Ctt|WqcM)Zb=%`lcX># zEdnW}Nlj)Op2o>KKis67=O^J7jM<$dp7RVP24P-+xkZ64=T~zDBG)p_!A0=!lV25O z(6)s-r_JlbSI;>h{z<f2{4m`)S*_m4)i7jv!c91PlVaGGSzXFmkm3c8qFzRE133Y0 z?5y6acWaL{twRp3`b#T0*S(H2A$oXHXEnhEXFTy*T#12(b98>*{!5fGMdIc5Cl0H( z6qinX<Q&8zTITZ|o*$2+Ec+_nwPv|78`(N~|07|+*i~~PpQeSb1;1N2duf_+35It~ z+A>kZ3U`y-*=r{fA>-MsE$j*21+wpdTe1RNU-I(m&h|KPwR$;}>sLvc#;r;1E1G}u zrL17Iy^glb-OZrvXT8dN8b8hQPdo93dTOgQ7jnK^v%mLKl*>CZ<~6K=nBYpsC0$bV z(dPw>$s%)iQu1Pn7oqO3(#L43qEmgKE<@H^0||ZuwP8<<xo|)a5g>o00;7J%cCBWZ zu6IfO_$zvIT+v>GAK{A0gXad@(F=-}SKmtfqkAaB1ILF@!gihH9t&~3N3E0>jZ`>@ zM3RI&%urJn1%W}AB{r!Q8gCn4<k{wkZ3-}mZI=taWhL)+QYq-6d$Q$zmFhNLaZ5=N z9ZF?W+CjqJ)BEOiW<2Yn=ftBjeFUFdd0#=$uYo^}e$JVq$)N8jCNrp$XV3#Kxhf^* z=Mx#=0alx&OgV#aWy-2ftyGP9n(Y@+#bD~^_YHl2y`uvH4~Z-24nwa_dMe;jPRX1< z3v#9}r6BRiirRC7Nlo=?fz6af67vCVQRp3B)@j{Jr6JU3DD2}n?>xDS@U3e_R-JKU z?)%t53}J)Vltip><pku@Eh4*EX{InR7P`3U=DIk5&Y=rp7bd?8$=SrW|E#otM6qI7 zS04OWtG}ffcF$n3qK@bs9r3~oi6v0fAhQLObD`(_!_%>rh-#AAMMjWVaO6#&g(SxI zMuKajCSELe5$O{zEyO$a4;WI!*M`>Pj{fx=s`i_H1GKIl&{Ej5?pIHtt(LZY+`eW$ zn6-iq_N`gUONR=uzyF8ty7<Q(xm2)jp>S`{Wwy(4$(*mb#M}IG*8g-;wj%bV=a!<K zqJvg>mzG+}UX>>5^S%rEPE$lCS3-0N7K+PxW&gx5ept+kzqeGsI`cG^^GhXx4$D{P zE3esbp-h6EI#-X0*mkhuo;<<ov969&dQ74udw3>TK@+~K+gniWZY-1gxh9J16UsXh zfOG7><^DVL0sOcf5fHxR{as<;6$}KBf0MY)wqRZx1EOt5#Op1(#pNK%1dU>Ydu$uB zBG23uBV|c0&u<%tT2hXnc=pN!-bPnVeYl^`F(%hDWH?-TZKPhh!Ku*y@)kIFshcXw z;J86l*;<cU-!T?<c1f{c)-GmQ!uRc-vD`R*dHq(DZGAg4Uv!<)B8ed6<MhQ{Ak5gJ z(%%M>4<qKl<DMkl2rr=9EF8eH>wTy;1MWXK;oSqM!T?({YQgmxc&B3Wzh%;x=63i< z$|*6zKL7e_@7SZ{6wT1dc~#>SE&O!$Fx99OhA~g=(okE=b-vSypRDei5c+|N`%k7R zVUC?4!E_L2?a|L+%4;A?1=x6L;Pwr~<xTu9)o`jwQGtYFUXQ?^*#7O>YP5I1(7=&> zf8D}vlvRBAsZ+_OFJPUWba}Yr7_<m>j$%(xQ8=hCS9}POLY5%kA&+^|VXhTDutUuY zH!MWc!8VNwEPw`Ng9k@5AABB6*+6_%CvNKILobJXI@NOY5`TyKEL~bmJT1}rOi?>r zvMQYcd~)I-^%1_AVRZ5S+KziAQB)RlBa?wA5_Rztu8AKi_WLXvVMA|K&4AzY8==N6 z0BwaET@Zh|$WEUC=)v=VEh?O|f%)h1M^gl0W-WCW7py4}a;gNn#Ty<9f-GvOt`W53 zGFCokbDgvO4BXH$b3ry|lAlm-uwihK+~Ti@^duY&9G#j#nnI<ykT*@};t>JQi0_5F zR(~$3Z!(-)oPu!eFWYGDdlc{{VfN4IvyVpH{eKJzm+`Tq4`=n<31;uit(43RC)GK) zf@K@Wx3dD%WBc_5*%pP2a!#+_CzUjFwB9$<G9%1AQ!o(|1x{bJgpaI(mhq$9Ua(jb z#aSui&Z=8T$c$zWM6XM41h9_=g-960r3hVdYvMEvYW(Rqs3Q}HQmMnb;>o%=F$P~K z+50O8Ry!Kc6hmtfqA#HkPCN;#EIsJ&{&SorfB$m&`gdSAdj3e&iKO&gp&MtZWo@$B zGEe>DTN3TAHX;M9lSlwcUfnI6%Y8PdlIYAnRk3|7uN9b>cs&QO{)q8~UTuce83OS# zJ#Ks>GXF+ASFd6%)|H8Aol=3#l!57vM6wzu;1q*6+)%Ik6et<bCDVfh(6d^0rFV!V z$S3y?eY+rB!iF_(brI8Ui@&-9fF$?Bv2AJ~1@r(5Rw7)97kWs=mBWgu%l#7?IG*rf z-)0jr+@2_#*bcGg5h6AV+({`)CJ=vJo3E)aYZ4XcgJb86w)~T|a{{8kP55z#aNr(M zFXUn5Jop#TAHz+56&!gj(q_fkkjjtLN?uJo0t}uUWhK)27)&_7+jd54%C^uo5oX?H z_Q;c=K1>*U(Uuj3NfeGJHsZ`;+l!~ndSdG-)_A8*=G>h{>zl0|<2ugBPdQt|lKu1P zgRyD*K54{*muQ;uJDfP>XVy=dVU+)<0+Q=>Gf+knBa2sPtrjx^Pmi+Yb7%V;<Hl!q zX8KE3anWF<p%_*km67WvxyFF_OxmMOigA>u|1SzfH@1u|AZ1zm80a@4c!1#GupS~K zadJ2mqfIQ1_*8f-MGC;>taD&dEv&-%%?tr<rcNY|u(kFLLKYD!CZ7FN3z^aO2RP>h z%WeV9T02;T3#5SVRMggICxeytmWA{h`Sf94__6=?i)8`8<@e?fQX<^697Q|hRe!1J z8r@6CRKAmWJa5H7yrL0rrto^j@BT5pQ=I~k^Dm<EK%(yJ2hnGdM)D-vEc>>~xYK*~ zK>~J)gc50oL{`q2y$BaNHE(j=cW~N8hkwT)a%RmJaJ<&mR*To%UCBL557l5v%A&gQ zpG*2y8)u-f<o8x2U(>eaC@P5P1$DA5>iDKS|D?LL@XIPjkhuWm5OkrCrtqvUWGhXA z27;boX8reDcqGB}^#0{Y0Y0L}=Jd0?#!TDgfhGly29`G`wy(s&Q6^X<T-O8jXaWfV z)}T@cQgNz(zn1Ri#9b?`-fj~{HD+Q!S}KWH^J@DLLOB#BeOR@T8Tjd>l)3JUt2j#! zb5!^Fk8=o`tk`Q$#yJP6KC5^4p(^Ug4YyT)2YS2?!Kq_jf+zF%bcWbus>8n+Wl&PM zPom6-V<)c*sXZ2cZ1gZR5i)$6K=b9zlzSA^xB3HV=s+MhyrQG@%&D^~kEysdOPEb9 z>X`(beGE4@1}ev+pM#?;xwdDc=!*M!LU?eqepwgF?ey+8){w-;Xv#x{%zv-%5kVW; z(1PWa{p$Ya<tR^X{&N)Qno89aY5ZA+@CuHaXtQAlau{{BU>X!9=a^*a0pbN`yCrM` zP26Y+6Q_4&A&>3mbv;d)OH62uj`m2wXMN&XT^R5&3tX%|;mI%@Vpg|9>bs75?>r7o zxe+Nxu@szS^bAuGUZ#a0c|ysxZ(x}`n<*PLax43AWAoF)v7wn1vhxK@h4YOkha_c1 zdB{ta9(t)2mOsT7i>Ozo(3prm)WDO&^&?=*bntm)ZHfBtXjnI7r`p4$&c$Zm=65U( zQiHTb&S_~u=w72g3(GB$0zcP^Q=_$+Fb~YUH^wyi_BeTo)Qol+_QV00B6{AB`rUo= z6D)b%E^d~%jHk5OV?ehRc2S|M{%+b+pB#?@fUe+p%{RcTpWcTg-3`2XQ6SGTb^`@5 z=#Bw32nU!1!y+R~FH^GL{ZV}nrt~#imku#$RXHx`^0zXXA;i-9)s4@~C@|n$_%`CH zMbhtz-ki2mx7+%E;|}zbC1DTqly75`KKd9Ue#BK~&&XAlSH&pS+_7Z{8>VROyLGg9 zDQE>+b)(K|RmP+Od5)zu>rcu-!0sIL9Skc@9@R8ajw)%!vBO{II)4<3V|828Rkc&A zpyQ}BeB!@UfTGa>_N63e{rWyshTRjQDjluR6qy31kSY*^7{@;S_Vs{x@brY_URnX3 z0F%#T&=}W`F}b8Drxc=tC$?nE5$dh6NE|vorttAe{C=`Q9zFmG4~OebNB;-nJW;Fq z?1fvrQnyhq-n;*DohMZ|qF=~||I%BNaqQ)Uk;gaM0ny6Yk53ZXlf<ndO8KrC2nfh5 z4tZinA##?zT=;ZBT>v`{_5T7X<sj*zoN*qAG+>(h{}q6QdxL1&fC9FgzKZ{2V?vfw z8$igga*2ne8NnT6d?{SFnfK!6;At{=fAPT%>7)#YOp**>SJgUq9!<QfY0?m9_i4Qi kBaZ*)dQTYVL&U@D+-qPxzyuxVi9({OC~AVs<==h&9|@OK%>V!Z diff --git a/authors.md b/authors.md index f120a97..b3987ff 100644 --- a/authors.md +++ b/authors.md @@ -1,3 +1,34 @@ +<!--- @file + Authors + + Copyright (c) 2008-2017, Intel Corporation. All rights reserved.<BR> + + Redistribution and use in source (original document form) and 'compiled' + forms (converted to PDF, epub, HTML and other formats) with or without + modification, are permitted provided that the following conditions are met: + + 1) Redistributions of source code (original document form) must retain the + above copyright notice, this list of conditions and the following + disclaimer as the first lines of this file unmodified. + + 2) Redistributions in compiled form (transformed to other DTDs, converted to + PDF, epub, HTML and other formats) must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS DOCUMENTATION IS PROVIDED BY TIANOCORE PROJECT "AS IS" AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL TIANOCORE PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--> + ## Authors Jiewen Yao [jiewen.yao@...](mailto:jiewen.yao@...) is EDK II BIOS architect, EDK II FSP package maintainer, EDK II TPM2 module maintainer, EDK II ACPI S3 module maintainer, with Software and Services Group at Intel Corporation. Jiewen is member of UEFI Security Sub-team and PI Security Sub-team in the UEFI Forum. diff --git a/book.json b/book.json new file mode 100644 index 0000000..b553eb5 --- /dev/null +++ b/book.json @@ -0,0 +1,9 @@ +{ + "variables" : { + "draft" : "yes", + "title" : "A Tour Beyond BIOS - Memory Protection in UEFI BIOS", + "version" : "Revision 1.0" + }, + "plugins": ["puml-aleung"], + "pluginsConfig": {} +} diff --git a/cover.jpg b/cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..24cb5a036ec8107ea3a7e37df38b045baca492de GIT binary patch literal 211343 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 G==m>^QGss& literal 0 HcmV?d00001 diff --git a/executive-summary.md b/executive-summary.md index da95613..19c0569 100644 --- a/executive-summary.md +++ b/executive-summary.md @@ -1,3 +1,34 @@ +<!--- @file + Executive Summary + + Copyright (c) 2008-2017, Intel Corporation. All rights reserved.<BR> + + Redistribution and use in source (original document form) and 'compiled' + forms (converted to PDF, epub, HTML and other formats) with or without + modification, are permitted provided that the following conditions are met: + + 1) Redistributions of source code (original document form) must retain the + above copyright notice, this list of conditions and the following + disclaimer as the first lines of this file unmodified. + + 2) Redistributions in compiled form (transformed to other DTDs, converted to + PDF, epub, HTML and other formats) must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS DOCUMENTATION IS PROVIDED BY TIANOCORE PROJECT "AS IS" AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL TIANOCORE PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--> + # Executive Summary ## Introduction **Data execution protection (DEP)** is intended to prevent an application or service from executing code from a non-executable memory region. This helps prevent certain exploits that store code via a buffer overflow. [[WindowsHeap][1]] shows 4 of 7 exploitation techniques that can be mitigated by DEP and ASLR (Address Space Layout Randomization). [[DEP][2]] also shows 14 of 19 exploits from popular exploit kits that fail with DEP enabled. Besides Windows, the Unix/Linux community also has similar non-executable protection [[PaX][3]]. diff --git a/glossary.md b/glossary.md index f1eb67c..81a3bbb 100644 --- a/glossary.md +++ b/glossary.md @@ -1,51 +1,81 @@ +<!--- @file + Glossary + + Copyright (c) 2008-2017, Intel Corporation. All rights reserved.<BR> + + Redistribution and use in source (original document form) and 'compiled' + forms (converted to PDF, epub, HTML and other formats) with or without + modification, are permitted provided that the following conditions are met: + + 1) Redistributions of source code (original document form) must retain the + above copyright notice, this list of conditions and the following + disclaimer as the first lines of this file unmodified. + + 2) Redistributions in compiled form (transformed to other DTDs, converted to + PDF, epub, HTML and other formats) must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS DOCUMENTATION IS PROVIDED BY TIANOCORE PROJECT "AS IS" AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL TIANOCORE PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--> + # Glossary -ASLR – Address Space Layout Randomization. +ASLR - Address Space Layout Randomization. BDA - BIOS Data Area. -CSM – Compatibility Support Module. +CSM - Compatibility Support Module. -DEP – Data Execution Protection. +DEP - Data Execution Protection. EBDA - Extended BIOS Data Area -HOB – Hand off block. See [[PI][1]]. +HOB - Hand off block. See [[PI][1]]. -MMIO – Memory Mapped I/O. +MMIO - Memory Mapped I/O. -NX – No Execution. See DEP. +NX - No Execution. See DEP. -PE/COFF – Portable Executable and Common Object File Format. The executable file format for UEFI. +PE/COFF - Portable Executable and Common Object File Format. The executable file format for UEFI. ROP - Return-oriented programming -RO – Read Only. +RO - Read Only. -RW – Read/Write. +RW - Read/Write. -PCD – Platform configuration database. See [[PI][1]]. +PCD - Platform configuration database. See [[PI][1]]. -PF – Page Fault Exception. +PF - Page Fault Exception. -PI – Platform Initialization. Volume 1-5 of the UEFI PI specifications. +PI - Platform Initialization. Volume 1-5 of the UEFI PI specifications. -SPI – Serial Peripheral Interface. +SPI - Serial Peripheral Interface. TSS - Task-state segment. See [[IA32 SDM][2]]. -UEFI – Unified Extensible Firmware Interface. Firmware interface between the platform and the operating system. Predominate interfaces are in the boot services (BS) or pre-OS. Few runtime (RT) services. +UEFI - Unified Extensible Firmware Interface. Firmware interface between the platform and the operating system. Predominate interfaces are in the boot services (BS) or pre-OS. Few runtime (RT) services. -VTd – Virtualization for Directed IO. See [[VTd][3]] +VTd - Virtualization for Directed IO. See [[VTd][3]] -WP – Write Protect. +WP - Write Protect. -XD – Execution Disable. See DEP. +XD - Execution Disable. See DEP. -XP – Execution Protected. See DEP. +XP - Execution Protected. See DEP. [1]: http://uefi.org "PI" - [2]: https://software.intel.com/en-us/articles/intel-sdm "IA32SDM" [3]: http://www.intel.com/content/www/us/en/embedded/technology/virtualization/vt-directed-io-spec.html "Vtd" diff --git a/assets/Fig1- SMRAM memory protection.jpg b/media/Fig1- SMRAM memory protection.jpg similarity index 100% rename from assets/Fig1- SMRAM memory protection.jpg rename to media/Fig1- SMRAM memory protection.jpg diff --git a/assets/Fig2 - Mapping of Protection in SMM.jpg b/media/Fig2 - Mapping of Protection in SMM.jpg similarity index 100% rename from assets/Fig2 - Mapping of Protection in SMM.jpg rename to media/Fig2 - Mapping of Protection in SMM.jpg diff --git a/assets/Fig3 - Page table enforced memory layout.jpg b/media/Fig3 - Page table enforced memory layout.jpg similarity index 100% rename from assets/Fig3 - Page table enforced memory layout.jpg rename to media/Fig3 - Page table enforced memory layout.jpg diff --git a/assets/Fig4 - UEFI memory protection.jpg b/media/Fig4 - UEFI memory protection.jpg similarity index 100% rename from assets/Fig4 - UEFI memory protection.jpg rename to media/Fig4 - UEFI memory protection.jpg diff --git a/media/TianocoreTitlePageLogo.jpg b/media/TianocoreTitlePageLogo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d84f1b7eb4a947cba4a05bc687fbac3af7d5ed39 GIT binary patch literal 44499 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 literal 0 HcmV?d00001 diff --git a/memory-protection-in-SMM.md b/memory-protection-in-SMM.md index ce89639..e9f21bb 100644 --- a/memory-protection-in-SMM.md +++ b/memory-protection-in-SMM.md @@ -1,13 +1,44 @@ +<!--- @file + Memory Protection in SMM + + Copyright (c) 2008-2017, Intel Corporation. All rights reserved.<BR> + + Redistribution and use in source (original document form) and 'compiled' + forms (converted to PDF, epub, HTML and other formats) with or without + modification, are permitted provided that the following conditions are met: + + 1) Redistributions of source code (original document form) must retain the + above copyright notice, this list of conditions and the following + disclaimer as the first lines of this file unmodified. + + 2) Redistributions in compiled form (transformed to other DTDs, converted to + PDF, epub, HTML and other formats) must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS DOCUMENTATION IS PROVIDED BY TIANOCORE PROJECT "AS IS" AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL TIANOCORE PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--> + # Memory Protection in SMM -The SMM is an isolated execution environment according to Intel® 64 and IA-32 Architectures Software Developer’s Manual [[IA32SDM][1]]. The UEFI Platform Initialization [[PI][2]] specification volume 4 defines the SMM infrastructure. Figure 1 shows the SMM memory protection. **RO** designates read-only memory. **XD **designates execution-disabled memory. +The SMM is an isolated execution environment according to Intel(R) 64 and IA-32 Architectures Software Developer's Manual [[IA32SDM][1]]. The UEFI Platform Initialization [[PI][2]] specification volume 4 defines the SMM infrastructure. Figure 1 shows the SMM memory protection. **RO** designates read-only memory. **XD **designates execution-disabled memory. - - -Figure 1 - SMRAM memory protection + + +###### Figure 1 - SMRAM memory protection ## Protection for PE image -In UEFI/PI firmware, the SMM image is a normal PE/COFF image loaded by the SmmCore. If a given section of the SMM image is page aligned, it may be protected according to the section attributes, such as read-only for the code and non-executable for data. See the top right of figure 1. +In UEFI/PI firmware, the SMM image is a normal PE/COFF image loaded by the SmmCore. If a given section of the SMM image is page aligned, it may be protected according to the section attributes, such as read-only for the code and non-executable for data. See the top right of Figure 1. In EDK II, the PiSmmCore (https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/PiSmmCore/MemoryAttributesTable.c) checks the PE image alignment and builds an `EDKII_PI_SMM_MEMORY_ATTRIBUTES_TABLE ` (https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Include/Guid/PiSmmMemoryAttributesTable.h) to record such information. If the PI SMM image is not page aligned, this table will not be published. If the `EDKII_PI_SMM_MEMORY_ATTRIBUTES_TABLE` is published, that means the `EfiRuntimeServicesCode` contains only code and it is ``EFI_MEMORY_RO``, and the `EfiRuntimeServicesData` contains only data and it is `EFI_MEMORY_XP`. @@ -15,8 +46,8 @@ Later the PiSmmCpu driver (https://github.com/tianocore/edk2/blob/master/UefiCpu There are several assumptions to support the PE image protection in SMM: -1. The PE code section and data sections are not merged. If those 2 sections are merged, a #PF exception might be generated because the CPU might try to write a RO data item in the data section or execute a non-executable (NX) instruction in code section. -2. The PE image can be protected if it is page aligned. There should not be any self-modified-code in the code region. If there is, a platform should not set this PE image to be page aligned. +1. The PE code section and data sections are not merged. If those 2 sections are merged, a #PF exception might be generated because the CPU might try to write a RO data item in the data section or execute a non-executable (NX) instruction in code section. +2. The PE image can be protected if it is page aligned. There should not be any self-modified-code in the code region. If there is, a platform should not set this PE image to be page aligned. A platform may disable the XD in the UEFI environment, but this does not impact the SMM environment. The SMM environment may choose to always enable the XD upon SMM entry, and restore the XD state at the SMM exit point. @@ -40,31 +71,31 @@ The IDT defines the entry point of the exception handler. If the IDT is updated, This work is done by `PatchGdtIdtMap()` at https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmFuncsArch.c. -However, the IA32 version GDT cannot be set to read-only if the stack guard feature is enabled. (https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/SmmFuncsArch.c) The reason is that the IA32 stack guard needs to use a "_task switch_" to switch the stack, and the task switch needs to write the GDT and Task-State Segment (TSS). The X64 version of the GDT does not have such a problem because the X64 stack guard uses “_interrupt stack table (IST)_” to switch the stack. For details of the stack switch and exceptions, please refer to [[IA32SDM][1]]. +However, the IA32 version GDT cannot be set to read-only if the stack guard feature is enabled. (https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/SmmFuncsArch.c) The reason is that the IA32 stack guard needs to use a "_task switch_" to switch the stack, and the task switch needs to write the GDT and Task-State Segment (TSS). The X64 version of the GDT does not have such a problem because the X64 stack guard uses "_interrupt stack table (IST)_" to switch the stack. For details of the stack switch and exceptions, please refer to [[IA32SDM][1]]. ### Page Table In an X86 CPU, we rely on the page table to set up the read-only or non-executable region. In order to prevent the page table itself from being updated, we may need to set the page table itself to be read-only. The work is done at https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c `SetPageTableAttributes()`. -However, setting a page table to be read-only may break the original dynamic paging feature in SMM. There is a (PCD) ```PcdCpuSmmStaticPageTable ``` to determine if the platform wants to enable the static page table or the dynamic page table. +However, setting a page table to be read-only may break the original dynamic paging feature in SMM. There is a (PCD) `PcdCpuSmmStaticPageTable` to determine if the platform wants to enable the static page table or the dynamic page table. -If ```PcdCpuSmmStaticPageTable``` is FALSE, the PiSmmCpu uses the original dynamic paging policy, namely the the PiSmmCpu only sets 4GiB paging by default. If the PiSmmCpu needs to access above 4GiB memory locations, a page fault exception (#PF) exception is triggered and an above-4GiB mapping is created in the page fault handler. +If `PcdCpuSmmStaticPageTable` is FALSE, the PiSmmCpu uses the original dynamic paging policy, namely the the PiSmmCpu only sets 4GiB paging by default. If the PiSmmCpu needs to access above 4GiB memory locations, a page fault exception (#PF) exception is triggered and an above-4GiB mapping is created in the page fault handler. -If ```PcdCpuSmmStaticPageTable``` is TRUE, the PiSmmCpu will try to set the read-only attribute for the page table. +If `PcdCpuSmmStaticPageTable` is TRUE, the PiSmmCpu will try to set the read-only attribute for the page table. Figure 2 shows the mapping of the protection. - + -Figure 2 Mapping of Protection in SMM +###### Figure 2 - Mapping of Protection in SMM ## Life cycle of the protection -In a normal boot, the page table based protection is configured by the PiSmmCpu driver just after the SmmReadyToLock event by ```PerformRemainingTasks()``` at https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.c. All read-only data must be ready before ```SmmReadyToLock```. +In a normal boot, the page table based protection is configured by the PiSmmCpu driver just after the SmmReadyToLock event by `PerformRemainingTasks()` at https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.c. All read-only data must be ready before `SmmReadyToLock`. -In an S3 resume, the protection is disabled during SMBASE relocation because the PiSmmCpu needs to set up the environment. The PiSmmCpu uses SmmS3Cr3, which is generated by ```InitSmmS3Cr3()``` at https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmProfileArch.c with 4G paging only. After the SMBASE relocation is done, all the protection takes effect up receipt of the next SMI by ```PerformPreTasks()``` at https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.c. +In an S3 resume, the protection is disabled during SMBASE relocation because the PiSmmCpu needs to set up the environment. The PiSmmCpu uses SmmS3Cr3, which is generated by `InitSmmS3Cr3()` at https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmProfileArch.c with 4G paging only. After the SMBASE relocation is done, all the protection takes effect up receipt of the next SMI by `PerformPreTasks()` at https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.c. -If there is an additional lock that needs to be set, it can be done in ```SmmCpuFeaturesCompleteSmmReadyToLock()``` API (defined in https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/Include/Library/SmmCpuFeaturesLib.h). +If there is an additional lock that needs to be set, it can be done in `SmmCpuFeaturesCompleteSmmReadyToLock()` API (defined in https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/Include/Library/SmmCpuFeaturesLib.h). ## SMRAM Size Overhead ### PE image @@ -80,29 +111,29 @@ In order to protect the page table itself, we must use the static page table ins The size of the dynamic paging is fixed. We need 6 fixed pages (24K) and 8 on-demand pages (32K). The total size of the page table is 56K in this case. The size of the static page table depends upon 2 things: 1) 1G paging capability, 2) max supported address bit. A rough estimation is below: -1. If 1G paging is supported, -* 32 bit addressing need (1+1+4) pages = 24K. (still use 2M paging for below 4G memory) -* 39 bit addressing need (1+1+4) pages = 24K. -* 48 bit addressing need (1+512) pages = 2M. +1. If 1G paging is supported, +* 32 bit addressing need (1+1+4) pages = 24K. (still use 2M paging for below 4G memory) +* 39 bit addressing need (1+1+4) pages = 24K. +* 48 bit addressing need (1+512) pages = 2M. * If 1G paging is not supported, 2M paging is used. -* 32 bit addressing need (1+1+4) pages = 24K. -* 39 bit addressing need (1+1+512) pages = 2M. -* 48 bit addressing need (1+512+512*512) pages = 1G. < - This seems ****not**** acceptable. +* 32 bit addressing need (1+1+4) pages = 24K. +* 39 bit addressing need (1+1+512) pages = 2M. +* 48 bit addressing need (1+512+512*512) pages = 1G. < - This seems ****not**** acceptable. -The maximum address bit is determined by the (CPU_HOB) if it is present, or the physical address bit returned by the CPUID instruction if the CPU_HOB is not present. (https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c, ```CalculateMaximumSupportAddress()```) A platform may set the CPU_HOB based upon the addressing capability of the memory controller or the CPU. +The maximum address bit is determined by the (CPU_HOB) if it is present, or the physical address bit returned by the CPUID instruction if the CPU_HOB is not present. (https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c, `CalculateMaximumSupportAddress()`) A platform may set the CPU_HOB based upon the addressing capability of the memory controller or the CPU. ## Performance Overhead -1. The SMRAM protection setup is a one-time activity. It happens just after the SmmReadyToLock event. We do not observe too much impact to the system firmware boot performance. The activity only takes some small number of milliseconds. +1. The SMRAM protection setup is a one-time activity. It happens just after the SmmReadyToLock event. We do not observe too much impact to the system firmware boot performance. The activity only takes some small number of milliseconds. -2. The SMRAM runtime protection is based upon the page table. No additional CPU instruction is needed. As such, there is zero SMM runtime performance impact to have this protection. +2. The SMRAM runtime protection is based upon the page table. No additional CPU instruction is needed. As such, there is zero SMM runtime performance impact to have this protection. ## Non SMRAM access in SMM Besides the SMRAM, the SMM memory protection also limits the access to the non-SMRAM region. First, the non-SMRAM region must be set to be non-executable because the SMM entities should not call any code outside SMRAM. Code outside of SMRAM might be controlled by malicious software. -This protection work is done by ```InitPaging()``` at https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfile.c +This protection work is done by `InitPaging()` at https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfile.c Second, because of the security concerns regarding SMM entities accessing VMM memory, [[WindowsWSMT][3]] [[Wsmt.docx][4]] and [[MicrosoftHV][5]] introduced the Windows SMM Security Mitigations Table (WSMT). A platform needs to report the WSMT table in order to declare that the SMI handler will validate the SMM communication buffer. @@ -113,13 +144,13 @@ A better way is to use an active check. The PiSmmCpu driver sets the non-fixed D As such, if a platform SMI handler does not include the check recommended in [[SecureSmmComm][6]], the system will get #PF exception within SMM on such an attack. -This protection work is done by ```SetUefiMemMapAttributes()``` at https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/SmmCpuMemoryManagement.c. +This protection work is done by `SetUefiMemMapAttributes()` at https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/SmmCpuMemoryManagement.c. Figure 3 shows final image layout. -  +  -Figure 3 Page table enforced memory layout +###### Figure 3 - Page table enforced memory layout The assumption for non-SMRAM access in SMM is described in [[SecureSmmComm][6]]. Besides that, this solution assumes that all DRAM regions are added to the Global Coherency Domain (GCD) management before EndOfDxe, so that the UEFI memory map can return all DRAM regions. If there are more regions added to the GCD after EndOfDxe, those regions are not set to not-present in the page table. @@ -128,52 +159,41 @@ NOTE: The SMM does not set the not-present bit for the GCD **EfiGcdMemoryTypeNon ## Limitation Setting up RO and NX attribute for SMRAM is a good enhancement to prevent a code overriding attack. However it has some limitations: -1. It cannot resist a Return-Oriented-Programming (ROP) attack. [[ROP][8]]. We might need ASLR to mitigate the ROP attack. [[ASLR][7]] With the code region randomized, an attacker cannot accurately predict the location of instructions in order to leverage gadgets. -2. Not all important data structure are set to Read-Only. This is the current SMM driver limitation. The SMM driver can be updated to allocate the important structures to be read-only instead of a read-write global variable. +1. It cannot resist a Return-Oriented-Programming (ROP) attack. [[ROP][8]]. We might need ASLR to mitigate the ROP attack. [[ASLR][7]] With the code region randomized, an attacker cannot accurately predict the location of instructions in order to leverage gadgets. +2. Not all important data structure are set to Read-Only. This is the current SMM driver limitation. The SMM driver can be updated to allocate the important structures to be read-only instead of a read-write global variable. To set not-present bit for non-fixed DRAM region in SmmReadyToLock is a good enhancement to enforce the protection policy. However, it cannot cover below cases: -1. Memory Hot Plug. Take a server platform as the example, A RAS server may hot plug more DRAM during OS runtime, and rely on SMM to initialize those DRAM. This SMM Memory Initialization module may need access the DRAM for the memory test. -2. Memory Mapped IO (MMIO). Ideally, not all MMIO regions are configured to be accessible to SMM. Some MMIO BARs are important such as VTd or SPI controller. VTd BAR is important because OS need setup VTd to configuration the DMA protection. SPI controller BAR is important because BIOS SMM handler need access it to program the flash device. It should be a platform policy to configure which one should be accessible. The SMI handler must consider the case that the MMIO BAR might be modified by the malicious software and check if the MMIO BAR is in the valid region. +1. Memory Hot Plug. Take a server platform as the example, A RAS server may hot plug more DRAM during OS runtime, and rely on SMM to initialize those DRAM. This SMM Memory Initialization module may need access the DRAM for the memory test. +2. Memory Mapped IO (MMIO). Ideally, not all MMIO regions are configured to be accessible to SMM. Some MMIO BARs are important such as VTd or SPI controller. VTd BAR is important because OS need setup VTd to configuration the DMA protection. SPI controller BAR is important because BIOS SMM handler need access it to program the flash device. It should be a platform policy to configure which one should be accessible. The SMI handler must consider the case that the MMIO BAR might be modified by the malicious software and check if the MMIO BAR is in the valid region. ## Compatibility Considerations -1. So far, we have not observed self-modified-code in SMM image or executable code in data section. As such, we believe the PE image protection is compatible. +1. So far, we have not observed self-modified-code in SMM image or executable code in data section. As such, we believe the PE image protection is compatible. -2. The protection for the SMM communication buffer may cause a #PF exception in SMM if the SMI handler does not perform the check recommended in [[SecureSmmComm][6]]. +2. The protection for the SMM communication buffer may cause a #PF exception in SMM if the SMI handler does not perform the check recommended in [[SecureSmmComm][6]]. -3. Some legacy Compatibility Support Module (CSM) drivers may need co-work with SMM module. Then the SMM driver need access the legacy region. As such these memory regions should be allocated as ReservedMemory, such as BIOS data area (BDA) or extended BIOS data area (EBDA). +3. Some legacy Compatibility Support Module (CSM) drivers may need co-work with SMM module. Then the SMM driver need access the legacy region. As such these memory regions should be allocated as ReservedMemory, such as BIOS data area (BDA) or extended BIOS data area (EBDA). ## Call for action In order to support SMM memory protection, the firmware need configure SMM driver to be page aligned: -1. Override link flags below to support SMM memory protection. - ```css +1. Override link flags below to support SMM memory protection. + ``` [BuildOptions.common.EDKII.DXE_SMM_DRIVER, - BuildOptions.common.EDKII.SMM_CORE] - MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096 - GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000 - ``` + BuildOptions.common.EDKII.SMM_CORE] + MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096 + GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000 + ``` -2. Evaluate if SMRAM size is big enough. +2. Evaluate if SMRAM size is big enough. #### Summary This section introduces the memory protection in SMM. [1]: https://software.intel.com/en-us/articles/intel-sdm "IA32SDM" [2]: http://uefi.org "PI Spec" - - - [3]: https://msdn.microsoft.com/en-us/library/windows/hardware/dn495660(v=vs.85).aspx#wsmt "WindowsWSMT" - [4]: http://download.microsoft.com/download/1/8/A/18A21244-EB67-4538-BAA2-1A54E0E490B6/WSMT.docx "WindowsWSMT docx" -[5]: https://msdn.microsoft.com/en-us/library/windows/hardware/dn614617 "MicrosoftHV" -[6]: https://github.com/tianocore-docs/Docs/raw/master/White_Papers/A_Tour_Beyond_BIOS_Secure_SMM_Communication.pdf "SecureSmmComm" - - +[5]: https://msdn.microsoft.com/en-us/library/windows/hardware/dn614617 "MicrosoftHV" +[6]: https://github.com/tianocore-docs/Docs/raw/master/White_Papers/A_Tour_Beyond_BIOS_Secure_SMM_Communication.pdf "SecureSmmComm" [7]: https://en.wikipedia.org/wiki/Address_space_layout_randomization "ASLR" - [8]: https://en.wikipedia.org/wiki/Return-oriented_programming "ROP" - - - - diff --git a/memory-protection-in-uefi.md b/memory-protection-in-uefi.md index 635e0f8..255663d 100644 --- a/memory-protection-in-uefi.md +++ b/memory-protection-in-uefi.md @@ -1,24 +1,55 @@ +<!--- @file + Memory Protection in UEFI + + Copyright (c) 2008-2017, Intel Corporation. All rights reserved.<BR> + + Redistribution and use in source (original document form) and 'compiled' + forms (converted to PDF, epub, HTML and other formats) with or without + modification, are permitted provided that the following conditions are met: + + 1) Redistributions of source code (original document form) must retain the + above copyright notice, this list of conditions and the following + disclaimer as the first lines of this file unmodified. + + 2) Redistributions in compiled form (transformed to other DTDs, converted to + PDF, epub, HTML and other formats) must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS DOCUMENTATION IS PROVIDED BY TIANOCORE PROJECT "AS IS" AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL TIANOCORE PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--> + # Memory Protection in UEFI In the white paper [[MemMap][1]], we discussed to how to report the runtime memory attribute by using `EFI_MEMORY_ATTRIBUTES_TABLE`, so that OS can apply the protection for the runtime code and data. This may bring some compatibility concerns if we choose to adopt the full DEP protection for the entire UEFI memory. In order to resolve the compatibility concerns, we can define a policy-based setting to enable partial NX and RO protection for the UEFI memory region. The detailed information will be discussed below. - - -Figure 4 - UEFI memory protection + + +###### Figure 4 - UEFI memory protection ## Protection for PE image The DXE core may apply a pre-defined policy to set up the NX attribute for the PE data region and the RO attribute for the PE code region. -1. The image is loaded by the UEFI boot service - `LoadImage()`. If an image is loaded in some other way, the DXE core does not have such knowledge and the DXE core cannot apply any protection. -2. The image section is page aligned. If an image is not page aligned, the DXE core cannot apply the page level protection. -3. The protection policy can be based upon a PCD ‘PcdImageProtectionPolicy`. (https://github.com/tianocore/edk2/blob/master/MdeModulePkg/MdeModulePkg.dec) Whenever a new image is loaded, the DxeCore checks the source of the image and then decides the policy of the protection. The policy could be to enable the protection if the sections are aligned, or disable the protection. The platform may choose the policy based upon the need. For example, if a platform thinks the image from the firmware volume should be capable of being protection, it can set protection for IMAGE_FROM_FV. But if a platform is not sure about a PCI option ROM or a file system on disk, it can set no-protection. +1. The image is loaded by the UEFI boot service - `LoadImage()`. If an image is loaded in some other way, the DXE core does not have such knowledge and the DXE core cannot apply any protection. +2. The image section is page aligned. If an image is not page aligned, the DXE core cannot apply the page level protection. +3. The protection policy can be based upon a PCD `PcdImageProtectionPolicy`. (https://github.com/tianocore/edk2/blob/master/MdeModulePkg/MdeModulePkg.dec) Whenever a new image is loaded, the DxeCore checks the source of the image and then decides the policy of the protection. The policy could be to enable the protection if the sections are aligned, or disable the protection. The platform may choose the policy based upon the need. For example, if a platform thinks the image from the firmware volume should be capable of being protection, it can set protection for IMAGE_FROM_FV. But if a platform is not sure about a PCI option ROM or a file system on disk, it can set no-protection. There are assumptions for the PE image protection in UEFI: -1. [Same as SMM] The PE code section and data sections are not merged. If those 2 sections are merged, a #PF exception might be generated because the CPU may try to write a RO data in data section or execute a NX instruction in the code section. -2. [Same as SMM] The PE image can be protected if it is page aligned. There should not be any self-modifying-code in the code region. If there is, a platform should not set this PE image to be page aligned. -3. A platform may not disable the XD in the DXE phase. If a platform disables the XD in the DXE phase, the X86 page table will become invalid because the XD bit in page table becomes a RESERVED bit. The consequence is that a #PF exception will be generated. If a platform wants to disable the XD bit, it must happen in the PEI phase. +1. [Same as SMM] The PE code section and data sections are not merged. If those 2 sections are merged, a #PF exception might be generated because the CPU may try to write a RO data in data section or execute a NX instruction in the code section. +2. [Same as SMM] The PE image can be protected if it is page aligned. There should not be any self-modifying-code in the code region. If there is, a platform should not set this PE image to be page aligned. +3. A platform may not disable the XD in the DXE phase. If a platform disables the XD in the DXE phase, the X86 page table will become invalid because the XD bit in page table becomes a RESERVED bit. The consequence is that a #PF exception will be generated. If a platform wants to disable the XD bit, it must happen in the PEI phase. In EDK II, the DXE core image services calls `ProtectUefiImage()` on image load and `UnprotectUefiImage()` on image unload. (https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/Dxe/Image/Image.c) Then `ProtectUefiImageCommon()` (https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c) calls `GetUefiImageProtectionPolicy()` to check the image source and protection policy and parses PE alignment. If all checks pass, `SetUefiImageProtectionAttributes()` calls `SetUefiImageMemoryAttributes()`. Finally, `gCpu->SetMemoryAttribute()` sets **EFI_MEMORY_XP** or **EFI_MEMORY_RO** for the new loaded image , or clears the protection for the old unloaded image. When the CPU driver gets the memory attribute setting request, it updates page table. @@ -26,22 +57,22 @@ The X86 CPU driver https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/CpuD The ARM CPU driver https://github.com/tianocore/edk2/blob/master/ArmPkg/Drivers/CpuDxe/CpuMmuCommon.c `CpuSetMemoryAttributes()` also has similar capability. -If an image is loaded before CPU_ARCH protocol is ready, the DXE core just skips the setting. Later these images protection will be set in CPU_ARCH callback function – `MemoryProtectionCpuArchProtocolNotify() `(https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c). +If an image is loaded before CPU_ARCH protocol is ready, the DXE core just skips the setting. Later these images protection will be set in CPU_ARCH callback function - `MemoryProtectionCpuArchProtocolNotify()`(https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c). In `ExitBootServices` event, `MemoryProtectionExitBootServicesCallback() `(https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c) is invoked to unprotect the runtime image, because the runtime image code relocation need write code segment at `SetVirtualAddressMap()`. ## Protection for stack and heap -[[UEFI][2]] specification allows ->"Stack may be marked as non-executable in identity mapped page tables." +[[UEFI][2]] specification allows +>"Stack may be marked as non-executable in identity mapped page tables." As such, we set up the NX stack (https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/DxeIplPeim/X64/VirtualMemory.c, `CreateIdentityMappingPageTables()`). -The heap protection is based upon the policy, because we already observed some unexpected usage in [[MemMap][1]] white paper. A platform needs to configure a PCD `PcdDxeNxMemoryProtectionPolicy` +The heap protection is based upon the policy, because we already observed some unexpected usage in [[MemMap][1]] white paper. A platform needs to configure a PCD `PcdDxeNxMemoryProtectionPolicy` (https://github.com/tianocore/edk2/blob/master/MdeModulePkg/MdeModulePkg.dec) to indicate which type of memory can be set to NX in the page table. The DxeCore `ApplyMemoryProtectionPolicy()` (https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c) consumes the PCD after the memory allocation service and sets NX attribute for the allocated memory by using CPU_ARCH protocol. -Before CPU_ARCH protocol is ready, the protection takes no effect. In CPU_ARCH callback function – `MemoryProtectionCpuArchProtocolNotify() `(https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c), the `InitializeDxeNxMemoryProtectionPolicy()` is called to get current memory map and setup the NX protection. +Before CPU_ARCH protocol is ready, the protection takes no effect. In CPU_ARCH callback function - `MemoryProtectionCpuArchProtocolNotify() `(https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c), the `InitializeDxeNxMemoryProtectionPolicy()` is called to get current memory map and setup the NX protection. In addition, we may use some special techniques, such as the guard page, to apply the protection for the allocated memory in order to detect a buffer overflow. This is discussed in [[SecurityEnhancement][3]] white paper. @@ -58,10 +89,10 @@ The UEFI firmware does not own page tables after `ExitBootServices()`, so the OS ## Size Overhead -1. Runtime memory overhead (visible to OS) -: The size overhead of the runtime PE image is the same as the overhead of the SMM PE image. If a platform has n runtime images, the average amount overhead is `6K * n`. -2. Boot time memory overhead (invisible to OS) -: The size of the overhead for the boot time PE image is the same as the overhead of the SMM PE image. If a platform has n boot time images, the average overhead is `6K * n`. +1. Runtime memory overhead (visible to OS) +: The size overhead of the runtime PE image is the same as the overhead of the SMM PE image. If a platform has n runtime images, the average amount overhead is `6K * n`. +2. Boot time memory overhead (invisible to OS) +: The size of the overhead for the boot time PE image is the same as the overhead of the SMM PE image. If a platform has n boot time images, the average overhead is `6K * n`. If the NX protection for data is enabled, the size of the page table is increased because we need set fine granularity page level protection. @@ -70,10 +101,10 @@ The size overhead of the boot time page table is also same as for the SMM static ## Limitation The protection in the UEFI is limited to the PE image and the stack at this moment because of the compatibility concerns. The limitations of the UEFI memory protection are: -1. Not all images are protected to be NX and RO. The protection is based upon the policy. -2. Not all heap regions are protected to be NX due to the compatibility concern. We observed that both Windows boot loader and Linux boot loader may use the LoaderData type for the code. The heap protection is based upon the policy. -3. [Same as SMM] The protection cannot resist ROP attack. -4. [Same as SMM] Not all important data structures are set to ReadOnly. +1. Not all images are protected to be NX and RO. The protection is based upon the policy. +2. Not all heap regions are protected to be NX due to the compatibility concern. We observed that both Windows boot loader and Linux boot loader may use the LoaderData type for the code. The heap protection is based upon the policy. +3. [Same as SMM] The protection cannot resist ROP attack. +4. [Same as SMM] Not all important data structures are set to ReadOnly. ## Compatibility Consideration A platform may need to evaluate and select the image protection policy based upon the capability of the platform image, Option ROM, and OS loader. For platform images, the Compatibility Support Module (CSM) and the EDK-I Compatibility Package (ECP) modules should be considered. If a platform observes the compatibility issues, it should choose 1) to disable the protection, or 2) to fix the compatibility issue and enable the protection. @@ -81,36 +112,31 @@ A platform may need to evaluate and select the image protection policy based upo ## Call for action In order to support UEFI memory protection, the firmware need configure UEFI driver to be page aligned: -1. Override link flags below to support UEFI runtime attribute table, so that OS can protect the runtime memory. -```css +1. Override link flags below to support UEFI runtime attribute table, so that OS can protect the runtime memory. +``` [BuildOptions.IA32.EDKII.DXE_RUNTIME_DRIVER, BuildOptions.X64.EDKII.DXE_RUNTIME_DRIVER] -MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096 +MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096 GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000 ``` -2. Override link flags below to support UEFI memory protection. -```css -[BuildOptions.common.EDKII.DXE_DRIVER, -BuildOptions.common.EDKII.DXE_CORE, +2. Override link flags below to support UEFI memory protection. +``` +[BuildOptions.common.EDKII.DXE_DRIVER, +BuildOptions.common.EDKII.DXE_CORE, BuildOptions.common.EDKII.UEFI_DRIVER, BuildOptions.common.EDKII.UEFI_APPLICATION] -MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096 +MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096 GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000 ``` -3. Evaluate if the UEFI memory size is big enough to hold the split page table. +3. Evaluate if the UEFI memory size is big enough to hold the split page table. -4. Evaluate if the DXE image can be protected. +4. Evaluate if the DXE image can be protected. -5. Set proper `gEfiMdeModulePkgTokenSpaceGuid.PcdImageProtectionPolicy`. - -6. Set proper `gEfiMdeModulePkgTokenSpaceGuid.PcdDxeNxMemoryProtectionPolicy`. +5. Set proper `gEfiMdeModulePkgTokenSpaceGuid.PcdImageProtectionPolicy`. +6. Set proper `gEfiMdeModulePkgTokenSpaceGuid.PcdDxeNxMemoryProtectionPolicy`. #### Summary This section introduces the memory protection in UEFI. [1]: https://github.com/tianocore-docs/Docs/raw/master/White_Papers/A_Tour_Beyond_BIOS_Memory_Map_And_Practices_in_UEFI_BIOS_V2.pdf "MemMap" - - [2]: http://uefi.org "UEFI" - - [3]: https://github.com/tianocore-docs/Docs/raw/master/White_Papers/A_Tour_Beyond_BIOS_Securiy_Enhancement_to_Mitigate_Buffer_Overflow_in_UEFI.pdf "Security Enhancment" \ No newline at end of file diff --git a/references.md b/references.md index 23894e0..c9ffab7 100644 --- a/references.md +++ b/references.md @@ -1,10 +1,41 @@ +<!--- @file + References + + Copyright (c) 2008-2017, Intel Corporation. All rights reserved.<BR> + + Redistribution and use in source (original document form) and 'compiled' + forms (converted to PDF, epub, HTML and other formats) with or without + modification, are permitted provided that the following conditions are met: + + 1) Redistributions of source code (original document form) must retain the + above copyright notice, this list of conditions and the following + disclaimer as the first lines of this file unmodified. + + 2) Redistributions in compiled form (transformed to other DTDs, converted to + PDF, epub, HTML and other formats) must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS DOCUMENTATION IS PROVIDED BY TIANOCORE PROJECT "AS IS" AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL TIANOCORE PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--> + # References [ASLR] Address Space Layout Randmization, https://en.wikipedia.org/wiki/Address_space_layout_randomization -[DEP] Exploit Mitigation Improvements in Windows 8, Ken Johnson, Ma, Miller, http://media.blackhat.com/bh-us-12/Briefings/M_Miller/BH_US_12_Miller_Exploit_Mitigation_Slides.pdf +[DEP] Exploit Mitigation Improvements in Windows 8, Ken Johnson, Ma, Miller, http://media.blackhat.com/bh-us-12/Briefings/M_Miller/BH_US_12_Miller_Exploit_Mitigation_Slides.pdf -[IA32SDM] Intel® 64 and IA-32 Architectures Software Developer’s Manual, www.intel.com https://software.intel.com/en-us/articles/intel-sdm +[IA32SDM] Intel(R) 64 and IA-32 Architectures Software Developer's Manual, www.intel.com https://software.intel.com/en-us/articles/intel-sdm [MemMap] A Tour Beyond BIOS Memory Map And Practices in UEFI BIOS, Jiewen Yao, Vincent Zimmer, 2016 https://github.com/tianocore-docs/Docs/raw/master/White_Papers/A_Tour_Beyond_BIOS_Memory_Map_And_Practices_in_UEFI_BIOS_V2.pdf @@ -12,25 +43,22 @@ [ROP] Return-oriented programming, https://en.wikipedia.org/wiki/Return-oriented_programming -[SecureSmmComm] A Tour Beyond BIOS Secure SMM Communication, Jiewen Yao, Vincent Zimmer, Star Zeng, 2016, https://github.com/tianocore-docs/Docs/raw/master/White_Papers/A_Tour_Beyond_BIOS_Secure_SMM_Communication.pdf +[SecureSmmComm] A Tour Beyond BIOS Secure SMM Communication, Jiewen Yao, Vincent Zimmer, Star Zeng, 2016, https://github.com/tianocore-docs/Docs/raw/master/White_Papers/A_Tour_Beyond_BIOS_Secure_SMM_Communication.pdf [SecurityEnhancement] A Tour Beyond BIOS Securiy Enhancement to Mitigate Buffer Overflow in UEFI, Jiewen Yao, Vincent Zimmer, 2016, https://github.com/tianocore-docs/Docs/raw/master/White_Papers/A_Tour_Beyond_BIOS_Securiy_Enhancement_to_Mitigate_Buffer_Overflow_in_UEFI.pdf [SecurityDesign] A Tour Beyond BIOS Security Design Guide in EDK II, Jiewen Yao, Vincent Zimmer, 2016, https://github.com/tianocore-docs/Docs/raw/master/White_Papers/A_Tour_Beyond_BIOS_Security_Design_Guide_in_EDK_II.pdf -[UEFI] Unified Extensible Firmware Interface (UEFI) Specification, Version 2.6 -www.uefi.org +[UEFI] Unified Extensible Firmware Interface (UEFI) Specification, Version 2.6 +www.uefi.org -[VTd] Intel® Virtualization Technology for Directed I/O: Spec, http://www.intel.com/content/www/us/en/embedded/technology/virtualization/vt-directed-io-spec.html +[VTd] Intel(R) Virtualization Technology for Directed I/O: Spec, http://www.intel.com/content/www/us/en/embedded/technology/virtualization/vt-directed-io-spec.html [WindowsHeap] Preventing the exploitation of user mode heap corruption vulnerabilities, 2009, https://blogs.technet.microsoft.com/srd/2009/08/04/preventing-the-exploitation-of-user-mode-heap-corruption-vulnerabilities/ [WindowsInternal] Windows Internals, 6th edition, Mark E. Russinovich, David A. Solomon, Alex Ionescu, 2012, Microsoft Press. ISBN-13: 978-0735648739/978-0735665873 [WindowsWSMT] Windows SMM Security Table, https://msdn.microsoft.com/en-us/library/windows/hardware/dn495660(v=vs.85).aspx#wsmt -http://download.microsoft.com/download/1/8/A/18A21244-EB67-4538-BAA2-1A54E0E490B6/WSMT.docx - -[MicrosoftHV] Microsoft Hypervisor Requirements, https://msdn.microsoft.com/en-us/library/windows/hardware/dn614617 - +http://download.microsoft.com/download/1/8/A/18A21244-EB67-4538-BAA2-1A54E0E490B6/WSMT.docx - +[MicrosoftHV] Microsoft Hypervisor Requirements, https://msdn.microsoft.com/en-us/library/windows/hardware/dn614617 -- 2.29.2.windows.2
|
|
[tianocore-docs][ATBB-Memory_Protection_in_UEFI_BIOS][Patch 0/2] Sync with template add Gitbook Action
Michael D Kinney
* Move figures from assets directory to media directory
* Remove non ASCII characters * Add Figure to TOC * Add missing file headers * Add layout directory to match template * Update CSS styles to match template * Add GitBook Action Cc: Jiewen Yao <jiewen.yao@...> Cc: Vincent Zimmer <vincent.zimmer@...> Cc: Laurie Jarlstrom <laurie.jarlstrom@...> Cc: Kevin Shaw <kevin.w.shaw@...> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@...> Michael D Kinney (2): Clean up format and layout to match template Update to match template and enable GitBook action .bookignore | 3 + .github/workflows/gitbook-action.yml | 39 +++ .gitignore | 10 +- README.md | 36 +-- SUMMARY.md | 38 +++ _layouts/ebook/page.html | 42 ++++ _layouts/ebook/pdf_footer.html | 17 ++ _layouts/ebook/pdf_header.html | 14 ++ _layouts/ebook/summary.html | 98 ++++++++ _layouts/layout.html | 27 +++ _layouts/website/footer.html | 17 ++ _layouts/website/header.html | 31 +++ _layouts/website/languages.html | 19 ++ _layouts/website/layout.html | 28 +++ _layouts/website/page.html | 86 +++++++ _layouts/website/summary.html | 61 +++++ assets/Tianocore_logo2.png | Bin 7360 -> 0 bytes authors.md | 31 +++ book.json | 9 + cover.jpg | Bin 0 -> 211343 bytes executive-summary.md | 31 +++ glossary.md | 68 ++++-- .../Fig1- SMRAM memory protection.jpg | Bin .../Fig2 - Mapping of Protection in SMM.jpg | Bin ...g3 - Page table enforced memory layout.jpg | Bin .../Fig4 - UEFI memory protection.jpg | Bin media/TianocoreTitlePageLogo.jpg | Bin 0 -> 44499 bytes memory-protection-in-SMM.md | 134 ++++++----- memory-protection-in-uefi.md | 104 +++++--- references.md | 50 +++- styles/epub.css | 221 ++--------------- styles/mobi.css | 50 ++++ styles/pdf.css | 221 ++--------------- styles/website.css | 223 ++---------------- 34 files changed, 950 insertions(+), 758 deletions(-) create mode 100644 .bookignore create mode 100644 .github/workflows/gitbook-action.yml create mode 100644 _layouts/ebook/page.html create mode 100644 _layouts/ebook/pdf_footer.html create mode 100644 _layouts/ebook/pdf_header.html create mode 100644 _layouts/ebook/summary.html create mode 100644 _layouts/layout.html create mode 100644 _layouts/website/footer.html create mode 100644 _layouts/website/header.html create mode 100644 _layouts/website/languages.html create mode 100644 _layouts/website/layout.html create mode 100644 _layouts/website/page.html create mode 100644 _layouts/website/summary.html delete mode 100644 assets/Tianocore_logo2.png create mode 100644 book.json create mode 100644 cover.jpg rename {assets => media}/Fig1- SMRAM memory protection.jpg (100%) rename {assets => media}/Fig2 - Mapping of Protection in SMM.jpg (100%) rename {assets => media}/Fig3 - Page table enforced memory layout.jpg (100%) rename {assets => media}/Fig4 - UEFI memory protection.jpg (100%) create mode 100644 media/TianocoreTitlePageLogo.jpg create mode 100644 styles/mobi.css -- 2.29.2.windows.2
|
|
Re: [PATCH v1 1/1] Adding changes for issue with Certificate Validation Bug 2433 - HTTPS Certificate Enrollment Issue
Michael D Kinney
edk2.diff.order and tianocore.template should not be part of the patch.
toggle quoted messageShow quoted text
The commit message does not follow the required format and is missing Signed-off-by. EDK II Dev Process: https://github.com/tianocore/tianocore.github.io/wiki/EDK-II-Development-Process EDK II Commit message format: https://github.com/tianocore/tianocore.github.io/wiki/Commit-Message-Format It would also help if you would join the EDK II mailing list on groups.io. https://edk2.groups.io/g/devel Thanks, Mike
-----Original Message-----
|
|
[PATCH v1 1/1] Adding changes for issue with Certificate Validation Bug 2433 - HTTPS Certificate Enrollment Issue
INDIA\sivaramann <emergingsiva@...>
---
NetworkPkg/HttpDxe/HttpsSupport.c | 16 +++++++++++----- edk2.diff.order | 8 ++++++++ tianocore.template | 3 +++ 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/NetworkPkg/HttpDxe/HttpsSupport.c b/NetworkPkg/HttpDxe/HttpsSu= pport.c index 7e0bf85c3c42..5bf2ecec4baa 100644 --- a/NetworkPkg/HttpDxe/HttpsSupport.c +++ b/NetworkPkg/HttpDxe/HttpsSupport.c @@ -380,6 +380,7 @@ TlsConfigCertificate ( EFI_SIGNATURE_DATA *Cert;=0D UINTN CertArraySizeInBytes;=0D UINTN CertCount;=0D + BOOLEAN CertValidFlag;=0D UINT32 ItemDataSize;=0D =0D CACert =3D NULL;=0D @@ -493,6 +494,7 @@ TlsConfigCertificate ( //=0D ItemDataSize =3D (UINT32) CACertSize;=0D CertList =3D (EFI_SIGNATURE_LIST *) CACert;=0D + CertValidFlag =3D 0;=0D while ((ItemDataSize > 0) && (ItemDataSize >=3D CertList->SignatureListS= ize)) {=0D Cert =3D (EFI_SIGNATURE_DATA *) ((UINT8 *) CertList + sizeof (EFI_SIGN= ATURE_LIST) + CertList->SignatureHeaderSize);=0D CertCount =3D (CertList->SignatureListSize - sizeof (EFI_SIGNATURE_LI= ST) - CertList->SignatureHeaderSize) / CertList->SignatureSize;=0D @@ -506,17 +508,21 @@ TlsConfigCertificate ( Cert->SignatureData,=0D CertList->SignatureSize -= sizeof (Cert->SignatureOwner)=0D );=0D - if (EFI_ERROR (Status)) {=0D - goto FreeCACert;=0D - }=0D + if (!EFI_ERROR (Status)) {=0D + CertValidFlag =3D 1;=0D + }=0D + else=0D + break;=0D =0D Cert =3D (EFI_SIGNATURE_DATA *) ((UINT8 *) Cert + CertList->Signatur= eSize);=0D }=0D =0D ItemDataSize -=3D CertList->SignatureListSize;=0D CertList =3D (EFI_SIGNATURE_LIST *) ((UINT8 *) CertList + CertList->Si= gnatureListSize);=0D - }=0D -=0D + =0D + }=0D + if(CertValidFlag =3D=3D 1)=0D + Status =3D EFI_SUCCESS;=0D FreeCACert:=0D FreePool (CACert);=0D return Status;=0D diff --git a/edk2.diff.order b/edk2.diff.order new file mode 100644 index 000000000000..1d578ac28cca --- /dev/null +++ b/edk2.diff.order @@ -0,0 +1,8 @@ +*.dec=0D +*.dsc.inc=0D +*.dsc=0D +*.fdf=0D +*.inf=0D +*.h=0D +*.vfr=0D +*.c=0D diff --git a/tianocore.template b/tianocore.template new file mode 100644 index 000000000000..cfc4bdddc4cc --- /dev/null +++ b/tianocore.template @@ -0,0 +1,3 @@ +[empty line]=0D +[empty line]=0D +Signed-off-by: Sivaraman <sivaramann@...>=0D --=20 2.28.0.windows.1
|
|
Re: [edk2-CCodingStandardsSpecification PATCH 1/1] Fix URLs on the Introduction page
Michael D Kinney
toggle quoted messageShow quoted text
-----Original Message-----
|
|
Re: [edk2-CCodingStandardsSpecification PATCH 1/1] Function example in Chapter 5 C Programming has extraneous semicolon
Michael D Kinney
toggle quoted messageShow quoted text
-----Original Message-----
|
|
Re: [edk2-CCodingStandardsSpecification PATCH 1/1] Update Chapter 5 Source Files examples to follow the coding standard
Michael D Kinney
toggle quoted messageShow quoted text
-----Original Message-----
|
|
Re: [PATCH v5 0/6] jansson edk2 port
Michael D Kinney
Abner,
toggle quoted messageShow quoted text
Feedback below. Mike
-----Original Message-----Why not? The package DEC file can list include paths. For example, the RedFishPkg DEC file currently has the following [Includes] section: [Includes] Include I could be updated to: [Includes] Include Library\JsonLib\jansson\src This would allow libs/modules that want to directly use the jansson services to use #include <janson.h> If you wanted to limit the use of <janson.h> to only libs/modules in the RedfishPkg, then you could use the private include feature: [Includes] Include [Includes.Common.Private] Library\JsonLib\jansson\src In fact, this exact pattern is used in the UnitTestFrameworkPkg to allow comonponents to use the standard includes from the cmocka submodule: [Includes] Library/CmockaLib/cmocka/include [Includes.Common.Private] PrivateInclude Library/CmockaLib/cmocka/include/cmockery Please evaluate this approach and see of the JassonJsoonMapping.h file can be removed. Thus we need an wrapper for these jansson applications. That JanssonJsonMapping.h defines the EDK2 style API for mapping
|
|
[PATCH v1 1/1] Silicon/Qemu/Sbsa: sbsa-wdt interrupt id update
Shashi Mallela
The previous value of interrupt id used was causing
conflict with a different device of sbsa-ref platform. This was preventing the watchdog interrupt from getting identified.Updated SBSA-wdt interrupt id in Gtdt table to rectify the issue. Cc: Leif Lindholm <leif@...> Cc: Ard Biesheuvel <ard.biesheuvel@...> Cc: Graeme Gregory <graeme@...> Signed-off-by: Shashi Mallela <shashi.mallela@...> --- Silicon/Qemu/SbsaQemu/AcpiTables/Gtdt.aslc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Silicon/Qemu/SbsaQemu/AcpiTables/Gtdt.aslc b/Silicon/Qemu/SbsaQemu/AcpiTables/Gtdt.aslc index a010b908c434..14733a37183d 100644 --- a/Silicon/Qemu/SbsaQemu/AcpiTables/Gtdt.aslc +++ b/Silicon/Qemu/SbsaQemu/AcpiTables/Gtdt.aslc @@ -36,7 +36,7 @@ #define SBSAQEMU_WDT_REFRESH_FRAME_BASE 0x50010000 #define SBSAQEMU_WDT_CONTROL_FRAME_BASE 0x50011000 -#define SBSAQEMU_WDT_IRQ 44 +#define SBSAQEMU_WDT_IRQ 48 #define GTDT_WDTIMER_EDGE_TRIGGERED EFI_ACPI_6_3_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_TIMER_INTERRUPT_MODE #define GTDT_WDTIMER_LEVEL_TRIGGERED 0 -- 2.27.0
|
|
[PATCH v1 0/1] sbsa-wdt interrupt id update
Shashi Mallela
This patch contains an update to interrupt id value of
sbsa wdt,since the previous value of interrupt id used was causing conflict with a different device of sbsa-ref platform.This was preventing the watchdog interrupt from getting identified. Shashi Mallela (1): Silicon/Qemu/Sbsa: sbsa-wdt interrupt id update Silicon/Qemu/SbsaQemu/AcpiTables/Gtdt.aslc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.27.0
|
|
Re: [RFC PATCH 0/5] support CPU hot-unplug
Igor Mammedov
On Thu, 10 Dec 2020 12:08:13 -0800
"Ankur Arora" <ankur.a.arora@...> wrote: On 2020-12-10 1:21 a.m., Laszlo Ersek wrote:Hi Ankur,Thanks for letting me know. I empathize with not wanting to context - Qemu marks the hot-unplug when QEMU_CPUHP_STAT_EJECTED is set and defers itI don't like implementing workarounds on hw side for guest software sake. (it's occasionally done but only if there is no way to fix guest side, for example closed sources OS. So there shall be very good reason to do so) AFAICS, both ought to work. But, assuming it works (I haven't tried it out yet)
|
|
Re: [edk2-platforms][PATCH 29/34] Platform/Ampere: Add LinuxBoot image
Leif Lindholm
Hi Nhi,
toggle quoted messageShow quoted text
Well, that simplifies things, so sure. Please hold back on the v2 until I either comment on somethign requring substantial changes or tell you I'm done with this set. It is a big one, so I probably won't finish today. When you do send a v2, please cc people on all the patches, not just the cover letter. Best Regards, Leif
On Fri, Dec 11, 2020 at 09:38:02 +0700, Nhi Pham wrote:
Hi Leif,
|
|
Re: [PATCH v2 0/4] Add extra pci roots support for Arm
Ni, Ray
toggle quoted messageShow quoted text
-----Original Message-----How is 0x3FFFFFF calculated? 0x3FFFFFF = 0x8000000 / 2 - 1, and 0x8000000 is the minimum value that's power of 2 and bigger than 0x6000000. Is my understanding correct? I don't understand why this calculation method is chosen. It seems a kernel bug to me. I thought Linux doesn't handle the pci resource assignment but just use what was assigned by firmware. Hotplug padding is supported through HotPlugInit protocol in edk2.
|
|
[PATCH V2] UefiCpuPkg/CpuFeature: reduce time complexty to calc CpuInfo.First
Ni, Ray
CpuInfo.First stores whether the current thread belongs to the first
package in the platform, first core in a package, first thread in a core. But the time complexity of original algorithm to calculate the CpuInfo.First is O (n) * O (p) * O (c). n: number of processors p: number of packages c: number of cores per package The patch trades time with space by storing the first package, first core per package, first thread per core in an array. The time complexity becomes O (n). Signed-off-by: Ray Ni <ray.ni@...> Cc: Eric Dong <eric.dong@...> Cc: Star Zeng <star.zeng@...> Cc: Yun Lou <yun.lou@...> Cc: Laszlo Ersek <lersek@...> --- .../CpuFeaturesInitialize.c | 96 +++++++++---------- 1 file changed, 47 insertions(+), 49 deletions(-) diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitializ= e.c b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c index d4a576385f..a1e972b1a2 100644 --- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c @@ -105,7 +105,10 @@ CpuInitDataInitialize ( EFI_CPU_PHYSICAL_LOCATION *Location;=0D UINT32 PackageIndex;=0D UINT32 CoreIndex;=0D - UINT32 First;=0D + UINTN Pages;=0D + UINT32 FirstPackage;=0D + UINT32 *FirstCore;=0D + UINT32 *FirstThread;=0D ACPI_CPU_DATA *AcpiCpuData;=0D CPU_STATUS_INFORMATION *CpuStatus;=0D UINT32 *ThreadCountPerPackage;=0D @@ -236,74 +239,69 @@ CpuInitDataInitialize ( =0D //=0D // Initialize CpuFeaturesData->InitOrder[].CpuInfo.First=0D + // Use AllocatePages () instead of AllocatePool () because pool cannot b= e freed in PEI phase but page can.=0D //=0D + Pages =3D EFI_SIZE_TO_PAGES (CpuStatus->PackageCount * sizeof (UINT3= 2) + CpuStatus->PackageCount * CpuStatus->MaxCoreCount * sizeof (UINT32));= =0D + FirstCore =3D AllocatePages (Pages);=0D + ASSERT (FirstCore !=3D NULL);=0D + FirstThread =3D FirstCore + CpuStatus->PackageCount;=0D =0D //=0D - // Set First.Package for each thread belonging to the first package.=0D + // Set FirstPackage, FirstCore[], FirstThread[] to maximum package ID, c= ore ID, thread ID.=0D //=0D - First =3D MAX_UINT32;=0D + FirstPackage =3D MAX_UINT32;=0D + SetMem32 (FirstCore, CpuStatus->PackageCount * sizeof (UINT32), MAX_UI= NT32);=0D + SetMem32 (FirstThread, CpuStatus->PackageCount * CpuStatus->MaxCoreCount= * sizeof (UINT32), MAX_UINT32);=0D +=0D for (ProcessorNumber =3D 0; ProcessorNumber < NumberOfCpus; ProcessorNum= ber++) {=0D Location =3D &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.Proc= essorInfo.Location;=0D - First =3D MIN (Location->Package, First);=0D +=0D + //=0D + // Save the minimum package ID in the platform.=0D + //=0D + FirstPackage =3D MIN (Location->Package, FirstPackage)= ;=0D + =0D + //=0D + // Save the minimum core ID per package.=0D + //=0D + FirstCore[Location->Package] =3D MIN (Location->Core, FirstCore[Locati= on->Package]);=0D + =0D + //=0D + // Save the minimum thread ID per core.=0D + //=0D + FirstThread[Location->Package * CpuStatus->MaxCoreCount + Location->Co= re] =3D MIN (=0D + Location->Thread,=0D + FirstThread[Location->Package * CpuStatus->MaxCoreCount + Location->= Core]=0D + );=0D }=0D +=0D + //=0D + // Update the First field.=0D + //=0D for (ProcessorNumber =3D 0; ProcessorNumber < NumberOfCpus; ProcessorNum= ber++) {=0D Location =3D &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.Proc= essorInfo.Location;=0D - if (Location->Package =3D=3D First) {=0D +=0D + if (Location->Package =3D=3D FirstPackage) {=0D CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Package = =3D 1;=0D }=0D - }=0D =0D - //=0D - // Set First.Die/Tile/Module for each thread assuming:=0D - // single Die under each package, single Tile under each Die, single Mo= dule under each Tile=0D - //=0D - for (ProcessorNumber =3D 0; ProcessorNumber < NumberOfCpus; ProcessorNum= ber++) {=0D + //=0D + // Set First.Die/Tile/Module for each thread assuming:=0D + // single Die under each package, single Tile under each Die, single = Module under each Tile=0D + //=0D CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Die =3D 1;=0D CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Tile =3D 1;= =0D CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Module =3D 1= ;=0D - }=0D =0D - for (PackageIndex =3D 0; PackageIndex < CpuStatus->PackageCount; Package= Index++) {=0D - //=0D - // Set First.Core for each thread in the first core of each package.=0D - //=0D - First =3D MAX_UINT32;=0D - for (ProcessorNumber =3D 0; ProcessorNumber < NumberOfCpus; ProcessorN= umber++) {=0D - Location =3D &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.Pr= ocessorInfo.Location;=0D - if (Location->Package =3D=3D PackageIndex) {=0D - First =3D MIN (Location->Core, First);=0D - }=0D + if (Location->Core =3D=3D FirstCore[Location->Package]) {=0D + CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Core =3D 1= ;=0D }=0D -=0D - for (ProcessorNumber =3D 0; ProcessorNumber < NumberOfCpus; ProcessorN= umber++) {=0D - Location =3D &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.Pr= ocessorInfo.Location;=0D - if (Location->Package =3D=3D PackageIndex && Location->Core =3D=3D F= irst) {=0D - CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Core =3D= 1;=0D - }=0D + if (Location->Thread =3D=3D FirstThread[Location->Package * CpuStatus-= MaxCoreCount + Location->Core]) {=0D+ CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Thread =3D= 1;=0D }=0D }=0D =0D - for (PackageIndex =3D 0; PackageIndex < CpuStatus->PackageCount; Package= Index++) {=0D - for (CoreIndex =3D 0; CoreIndex < CpuStatus->MaxCoreCount; CoreIndex++= ) {=0D - //=0D - // Set First.Thread for the first thread of each core.=0D - //=0D - First =3D MAX_UINT32;=0D - for (ProcessorNumber =3D 0; ProcessorNumber < NumberOfCpus; Processo= rNumber++) {=0D - Location =3D &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.= ProcessorInfo.Location;=0D - if (Location->Package =3D=3D PackageIndex && Location->Core =3D=3D= CoreIndex) {=0D - First =3D MIN (Location->Thread, First);=0D - }=0D - }=0D -=0D - for (ProcessorNumber =3D 0; ProcessorNumber < NumberOfCpus; Processo= rNumber++) {=0D - Location =3D &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.= ProcessorInfo.Location;=0D - if (Location->Package =3D=3D PackageIndex && Location->Core =3D=3D= CoreIndex && Location->Thread =3D=3D First) {=0D - CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Thread= =3D 1;=0D - }=0D - }=0D - }=0D - }=0D + FreePages (FirstCore, Pages);=0D }=0D =0D /**=0D --=20 2.27.0.windows.1
|
|
[PATCH v2 1/1] ArmPlatformPkg: Fix Ecc error 8005
PierreGondois
From: Pierre Gondois <Pierre.Gondois@...>
This patch fixes the following Ecc reported error: Variable name does not follow the rules: 1. First character should be upper case 2. Must contain lower case characters 3. No white space characters 4. Global variable name must start with a 'g' Indeed, according to the EDK II C Coding Standards Specification, s5.6.2.2 "Enumerated Types" and s4.3.4 Function and Data Names, elements of an enumerated type shoud be a mixed upper- and lower-case text. A max element is also added, as adviced by s5.6.2.2.3 of the same document. Reference: https://edk2-docs.gitbook.io/edk-ii-c-coding-standards-specification/ Signed-off-by: Pierre Gondois <Pierre.Gondois@...> --- The changes can be seen at: https://github.com/PierreARM/edk2/tree/pg/1537_Ecc_ArmPlatformPkg_v2 Notes: v2: -Rename enum ELcd... to Lcd... [asked by Ard] .../LcdGraphicsOutputBlt.c | 80 +++++++++---------- .../LcdGraphicsOutputDxe.c | 16 ++-- .../Include/Library/LcdPlatformLib.h | 19 ++--- 3 files changed, 58 insertions(+), 57 deletions(-) diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputBlt.c b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputBlt.c index 07d2cb0d5dec..f91f4706ecbc 100644 --- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputBlt.c +++ b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputBlt.c @@ -61,7 +61,7 @@ VideoCopyNoHorizontalOverlap ( switch (BitsPerPixel) { - case LCD_BITS_PER_PIXEL_24: + case LcdBitsPerPixel_24: WidthInBytes = Width * 4; @@ -79,9 +79,9 @@ VideoCopyNoHorizontalOverlap ( } break; - case LCD_BITS_PER_PIXEL_16_555: - case LCD_BITS_PER_PIXEL_16_565: - case LCD_BITS_PER_PIXEL_12_444: + case LcdBitsPerPixel_16_555: + case LcdBitsPerPixel_16_565: + case LcdBitsPerPixel_12_444: WidthInBytes = Width * 2; @@ -99,10 +99,10 @@ VideoCopyNoHorizontalOverlap ( } break; - case LCD_BITS_PER_PIXEL_8: - case LCD_BITS_PER_PIXEL_4: - case LCD_BITS_PER_PIXEL_2: - case LCD_BITS_PER_PIXEL_1: + case LcdBitsPerPixel_8: + case LcdBitsPerPixel_4: + case LcdBitsPerPixel_2: + case LcdBitsPerPixel_1: default: // Can't handle this case DEBUG((DEBUG_ERROR, "ArmVeGraphics_Blt: EfiBltVideoToVideo: INVALID Number of Bits Per Pixel: %d\n", BitsPerPixel)); @@ -149,7 +149,7 @@ VideoCopyHorizontalOverlap ( switch (BitsPerPixel) { - case LCD_BITS_PER_PIXEL_24: + case LcdBitsPerPixel_24: // Allocate a temporary buffer PixelBuffer32bit = (UINT32 *) AllocatePool((Height * Width) * sizeof(UINT32)); @@ -191,9 +191,9 @@ VideoCopyHorizontalOverlap ( break; - case LCD_BITS_PER_PIXEL_16_555: - case LCD_BITS_PER_PIXEL_16_565: - case LCD_BITS_PER_PIXEL_12_444: + case LcdBitsPerPixel_16_555: + case LcdBitsPerPixel_16_565: + case LcdBitsPerPixel_12_444: // Allocate a temporary buffer PixelBuffer16bit = (UINT16 *) AllocatePool((Height * Width) * sizeof(UINT16)); @@ -236,10 +236,10 @@ VideoCopyHorizontalOverlap ( break; - case LCD_BITS_PER_PIXEL_8: - case LCD_BITS_PER_PIXEL_4: - case LCD_BITS_PER_PIXEL_2: - case LCD_BITS_PER_PIXEL_1: + case LcdBitsPerPixel_8: + case LcdBitsPerPixel_4: + case LcdBitsPerPixel_2: + case LcdBitsPerPixel_1: default: // Can't handle this case DEBUG((DEBUG_ERROR, "ArmVeGraphics_Blt: EfiBltVideoToVideo: INVALID Number of Bits Per Pixel: %d\n", BitsPerPixel)); @@ -287,7 +287,7 @@ BltVideoFill ( LcdPlatformGetBpp (This->Mode->Mode,&BitsPerPixel); switch (BitsPerPixel) { - case LCD_BITS_PER_PIXEL_24: + case LcdBitsPerPixel_24: WidthInBytes = Width * 4; // Copy the SourcePixel into every pixel inside the target rectangle @@ -303,7 +303,7 @@ BltVideoFill ( } break; - case LCD_BITS_PER_PIXEL_16_555: + case LcdBitsPerPixel_16_555: // Convert the EFI pixel at the start of the BltBuffer(0,0) into a video display pixel Pixel16bit = (UINT16) ( ( (EfiSourcePixel->Red << 7) & PixelInformation->RedMask ) @@ -330,7 +330,7 @@ BltVideoFill ( } break; - case LCD_BITS_PER_PIXEL_16_565: + case LcdBitsPerPixel_16_565: // Convert the EFI pixel at the start of the BltBuffer(0,0) into a video display pixel Pixel16bit = (UINT16) ( ( (EfiSourcePixel->Red << 8) & PixelInformation->RedMask ) @@ -356,7 +356,7 @@ BltVideoFill ( } break; - case LCD_BITS_PER_PIXEL_12_444: + case LcdBitsPerPixel_12_444: // Convert the EFI pixel at the start of the BltBuffer(0,0) into a video display pixel Pixel16bit = (UINT16) ( ( (EfiSourcePixel->Red >> 4) & PixelInformation->RedMask ) @@ -382,10 +382,10 @@ BltVideoFill ( } break; - case LCD_BITS_PER_PIXEL_8: - case LCD_BITS_PER_PIXEL_4: - case LCD_BITS_PER_PIXEL_2: - case LCD_BITS_PER_PIXEL_1: + case LcdBitsPerPixel_8: + case LcdBitsPerPixel_4: + case LcdBitsPerPixel_2: + case LcdBitsPerPixel_1: default: // Can't handle this case DEBUG((DEBUG_ERROR, "LcdGraphicsBlt: EfiBltVideoFill: INVALID Number of Bits Per Pixel: %d\n", BitsPerPixel)); @@ -443,7 +443,7 @@ BltVideoToBltBuffer ( LcdPlatformGetBpp (This->Mode->Mode,&BitsPerPixel); switch (BitsPerPixel) { - case LCD_BITS_PER_PIXEL_24: + case LcdBitsPerPixel_24: WidthInBytes = Width * 4; // Access each line inside the Video Memory @@ -460,7 +460,7 @@ BltVideoToBltBuffer ( } break; - case LCD_BITS_PER_PIXEL_16_555: + case LcdBitsPerPixel_16_555: // Access each pixel inside the Video Memory for (SourceLine = SourceY, DestinationLine = DestinationY; SourceLine < SourceY + Height; @@ -487,7 +487,7 @@ BltVideoToBltBuffer ( } break; - case LCD_BITS_PER_PIXEL_16_565: + case LcdBitsPerPixel_16_565: // Access each pixel inside the Video Memory for (SourceLine = SourceY, DestinationLine = DestinationY; SourceLine < SourceY + Height; @@ -515,7 +515,7 @@ BltVideoToBltBuffer ( } break; - case LCD_BITS_PER_PIXEL_12_444: + case LcdBitsPerPixel_12_444: // Access each pixel inside the Video Memory for (SourceLine = SourceY, DestinationLine = DestinationY; SourceLine < SourceY + Height; @@ -542,10 +542,10 @@ BltVideoToBltBuffer ( } break; - case LCD_BITS_PER_PIXEL_8: - case LCD_BITS_PER_PIXEL_4: - case LCD_BITS_PER_PIXEL_2: - case LCD_BITS_PER_PIXEL_1: + case LcdBitsPerPixel_8: + case LcdBitsPerPixel_4: + case LcdBitsPerPixel_2: + case LcdBitsPerPixel_1: default: // Can't handle this case DEBUG((DEBUG_ERROR, "LcdGraphicsBlt: EfiBltVideoToBltBuffer: INVALID Number of Bits Per Pixel: %d\n", BitsPerPixel)); @@ -601,7 +601,7 @@ BltBufferToVideo ( LcdPlatformGetBpp (This->Mode->Mode,&BitsPerPixel); switch (BitsPerPixel) { - case LCD_BITS_PER_PIXEL_24: + case LcdBitsPerPixel_24: WidthInBytes = Width * 4; // Access each pixel inside the BltBuffer Memory @@ -618,7 +618,7 @@ BltBufferToVideo ( } break; - case LCD_BITS_PER_PIXEL_16_555: + case LcdBitsPerPixel_16_555: // Access each pixel inside the BltBuffer Memory for (SourceLine = SourceY, DestinationLine = DestinationY; SourceLine < SourceY + Height; @@ -645,7 +645,7 @@ BltBufferToVideo ( } break; - case LCD_BITS_PER_PIXEL_16_565: + case LcdBitsPerPixel_16_565: // Access each pixel inside the BltBuffer Memory for (SourceLine = SourceY, DestinationLine = DestinationY; SourceLine < SourceY + Height; @@ -672,7 +672,7 @@ BltBufferToVideo ( } break; - case LCD_BITS_PER_PIXEL_12_444: + case LcdBitsPerPixel_12_444: // Access each pixel inside the BltBuffer Memory for (SourceLine = SourceY, DestinationLine = DestinationY; SourceLine < SourceY + Height; @@ -699,10 +699,10 @@ BltBufferToVideo ( } break; - case LCD_BITS_PER_PIXEL_8: - case LCD_BITS_PER_PIXEL_4: - case LCD_BITS_PER_PIXEL_2: - case LCD_BITS_PER_PIXEL_1: + case LcdBitsPerPixel_8: + case LcdBitsPerPixel_4: + case LcdBitsPerPixel_2: + case LcdBitsPerPixel_1: default: // Can't handle this case DEBUG((DEBUG_ERROR, "LcdGraphicsBlt: EfiBltBufferToVideo: INVALID Number of Bits Per Pixel: %d\n", BitsPerPixel)); diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.c b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.c index bfd03d8f8425..ba83ecf700d6 100644 --- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.c +++ b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.c @@ -374,18 +374,18 @@ GetBytesPerPixel ( ) { switch (Bpp) { - case LCD_BITS_PER_PIXEL_24: + case LcdBitsPerPixel_24: return 4; - case LCD_BITS_PER_PIXEL_16_565: - case LCD_BITS_PER_PIXEL_16_555: - case LCD_BITS_PER_PIXEL_12_444: + case LcdBitsPerPixel_16_565: + case LcdBitsPerPixel_16_555: + case LcdBitsPerPixel_12_444: return 2; - case LCD_BITS_PER_PIXEL_8: - case LCD_BITS_PER_PIXEL_4: - case LCD_BITS_PER_PIXEL_2: - case LCD_BITS_PER_PIXEL_1: + case LcdBitsPerPixel_8: + case LcdBitsPerPixel_4: + case LcdBitsPerPixel_2: + case LcdBitsPerPixel_1: return 1; default: diff --git a/ArmPlatformPkg/Include/Library/LcdPlatformLib.h b/ArmPlatformPkg/Include/Library/LcdPlatformLib.h index ba24487073bb..7d67e848f3a0 100644 --- a/ArmPlatformPkg/Include/Library/LcdPlatformLib.h +++ b/ArmPlatformPkg/Include/Library/LcdPlatformLib.h @@ -1,6 +1,6 @@ /** @file - Copyright (c) 2011-2018, ARM Ltd. All rights reserved.<BR> + Copyright (c) 2011-2020, Arm Limited. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -197,14 +197,15 @@ Register **/ typedef enum { - LCD_BITS_PER_PIXEL_1 = 0, - LCD_BITS_PER_PIXEL_2, - LCD_BITS_PER_PIXEL_4, - LCD_BITS_PER_PIXEL_8, - LCD_BITS_PER_PIXEL_16_555, - LCD_BITS_PER_PIXEL_24, - LCD_BITS_PER_PIXEL_16_565, - LCD_BITS_PER_PIXEL_12_444 + LcdBitsPerPixel_1 = 0, + LcdBitsPerPixel_2, + LcdBitsPerPixel_4, + LcdBitsPerPixel_8, + LcdBitsPerPixel_16_555, + LcdBitsPerPixel_24, + LcdBitsPerPixel_16_565, + LcdBitsPerPixel_12_444, + LcdBitsPerPixel_Max } LCD_BPP; // Display timing settings. -- 2.17.1
|
|
Re: [PATCH] UefiCpuPkg/CpuFeature: reduce time complexty to calc CpuInfo.First
Ni, Ray
Yes. it could. I thought the for loop is more readable. Maybe it doesn't help a lot+ FirstPackage = MAX_UINT32;Could this code block be replaced by a SetMem32(xxx, xxx, MAX_UINT32) call? on the code readability. Let me send an updated version to use SetMem32.
|
|
[PATCH v2 edk2-platforms 2/2] Platform/ARM: Fix Ecc error 8005
PierreGondois
From: Pierre Gondois <Pierre.Gondois@...>
Following the Ecc reported error in the edk2 repository, an enum and its elements have been renamed in: ArmPlatformPkg/Include/Library/LcdPlatformLib.h The Ecc error reported in edk2 is: Variable name does not follow the rules: 1. First character should be upper case 2. Must contain lower case characters 3. No white space characters 4. Global variable name must start with a 'g' Indeed, according to the EDK II C Coding Standards Specification, s5.6.2.2 "Enumerated Types" and s4.3.4 Function and Data Names, elements of an enumerated type "shoud be a mixed upper- and lower-case text". Signed-off-by: Pierre Gondois <Pierre.Gondois@...> --- The changes can be seen at: https://github.com/PierreARM/edk2-platforms/tree/pg/1537_Ecc_ArmPlatformPkg_v2 Notes: v2: -Rename enum ELcd... to Lcd... [asked by Ard] .../Library/HdLcdArmJunoLib/HdLcdArmJuno.c | 4 +-- .../Library/HdLcdArmSgiLib/HdLcdArmSgi.c | 4 +-- .../Library/ArmMaliDpLib/ArmMaliDpLib.c | 4 +-- .../HdLcdArmVExpressLib/HdLcdArmVExpress.c | 4 +-- .../PL111LcdArmVExpress.c | 34 +++++++++---------- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Platform/ARM/JunoPkg/Library/HdLcdArmJunoLib/HdLcdArmJuno.c b/Platform/ARM/JunoPkg/Library/HdLcdArmJunoLib/HdLcdArmJuno.c index 4b961b7a9f7f..30558878f068 100644 --- a/Platform/ARM/JunoPkg/Library/HdLcdArmJunoLib/HdLcdArmJuno.c +++ b/Platform/ARM/JunoPkg/Library/HdLcdArmJunoLib/HdLcdArmJuno.c @@ -1,6 +1,6 @@ /** @file - Copyright (c) 2013-2018, ARM Ltd. All rights reserved. + Copyright (c) 2013 - 2020, Arm Limited. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent @@ -543,7 +543,7 @@ LcdPlatformGetBpp ( ASSERT (Bpp != NULL); - *Bpp = LCD_BITS_PER_PIXEL_24; + *Bpp = LcdBitsPerPixel_24; return EFI_SUCCESS; } diff --git a/Platform/ARM/SgiPkg/Library/HdLcdArmSgiLib/HdLcdArmSgi.c b/Platform/ARM/SgiPkg/Library/HdLcdArmSgiLib/HdLcdArmSgi.c index 6f747d2545db..561f3f6747e8 100644 --- a/Platform/ARM/SgiPkg/Library/HdLcdArmSgiLib/HdLcdArmSgi.c +++ b/Platform/ARM/SgiPkg/Library/HdLcdArmSgiLib/HdLcdArmSgi.c @@ -1,6 +1,6 @@ /** @file * -* Copyright (c) 2018, ARM Limited. All rights reserved. +* Copyright (c) 2018 - 2020, Arm Limited. All rights reserved.<BR> * * SPDX-License-Identifier: BSD-2-Clause-Patent * @@ -245,7 +245,7 @@ LcdPlatformGetBpp ( ASSERT (Bpp != NULL); - *Bpp = LCD_BITS_PER_PIXEL_24; + *Bpp = LcdBitsPerPixel_24; return EFI_SUCCESS; } diff --git a/Platform/ARM/VExpressPkg/Library/ArmMaliDpLib/ArmMaliDpLib.c b/Platform/ARM/VExpressPkg/Library/ArmMaliDpLib/ArmMaliDpLib.c index aa55bc2e5bee..a62dce1331d9 100644 --- a/Platform/ARM/VExpressPkg/Library/ArmMaliDpLib/ArmMaliDpLib.c +++ b/Platform/ARM/VExpressPkg/Library/ArmMaliDpLib/ArmMaliDpLib.c @@ -2,7 +2,7 @@ The file contains Arm Mali DP platform specific implementation. - Copyright (c) 2017-2018, Arm Limited. All rights reserved. + Copyright (c) 2017 - 2020, Arm Limited. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent @@ -375,7 +375,7 @@ LcdPlatformGetBpp ( return EFI_INVALID_PARAMETER; } - *Bpp = LCD_BITS_PER_PIXEL_24; + *Bpp = LcdBitsPerPixel_24; return EFI_SUCCESS; } diff --git a/Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c b/Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c index c4b163d35f18..919ef30019ec 100644 --- a/Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c +++ b/Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c @@ -1,6 +1,6 @@ /** @file - Copyright (c) 2012-2018, ARM Ltd. All rights reserved. + Copyright (c) 2012 - 2020, Arm Limited. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent @@ -361,7 +361,7 @@ LcdPlatformGetBpp ( return EFI_INVALID_PARAMETER; } - *Bpp = LCD_BITS_PER_PIXEL_24; + *Bpp = LcdBitsPerPixel_24; return EFI_SUCCESS; } diff --git a/Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c b/Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c index b7396a87bd05..87b82e9f97dc 100644 --- a/Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c +++ b/Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c @@ -1,6 +1,6 @@ /** @file - Copyright (c) 2011-2018, ARM Ltd. All rights reserved.<BR> + Copyright (c) 2011 - 2020, Arm Limited. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -33,97 +33,97 @@ typedef struct { **/ STATIC DISPLAY_MODE mDisplayModes[] = { { // Mode 0 : VGA : 640 x 480 x 24 bpp - VGA, LCD_BITS_PER_PIXEL_24, + VGA, LcdBitsPerPixel_24, VGA_OSC_FREQUENCY, {VGA_H_RES_PIXELS, VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH}, {VGA_V_RES_PIXELS, VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH} }, { // Mode 1 : SVGA : 800 x 600 x 24 bpp - SVGA, LCD_BITS_PER_PIXEL_24, + SVGA, LcdBitsPerPixel_24, SVGA_OSC_FREQUENCY, {SVGA_H_RES_PIXELS, SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH}, {SVGA_V_RES_PIXELS, SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH} }, { // Mode 2 : XGA : 1024 x 768 x 24 bpp - XGA, LCD_BITS_PER_PIXEL_24, + XGA, LcdBitsPerPixel_24, XGA_OSC_FREQUENCY, {XGA_H_RES_PIXELS, XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH}, {XGA_V_RES_PIXELS, XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH} }, { // Mode 3 : SXGA : 1280 x 1024 x 24 bpp - SXGA, LCD_BITS_PER_PIXEL_24, + SXGA, LcdBitsPerPixel_24, (SXGA_OSC_FREQUENCY/2), {SXGA_H_RES_PIXELS, SXGA_H_SYNC, SXGA_H_BACK_PORCH, SXGA_H_FRONT_PORCH}, {SXGA_V_RES_PIXELS, SXGA_V_SYNC, SXGA_V_BACK_PORCH, SXGA_V_FRONT_PORCH} }, { // Mode 4 : UXGA : 1600 x 1200 x 24 bpp - UXGA, LCD_BITS_PER_PIXEL_24, + UXGA, LcdBitsPerPixel_24, (UXGA_OSC_FREQUENCY/2), {UXGA_H_RES_PIXELS, UXGA_H_SYNC, UXGA_H_BACK_PORCH, UXGA_H_FRONT_PORCH}, {UXGA_V_RES_PIXELS, UXGA_V_SYNC, UXGA_V_BACK_PORCH, UXGA_V_FRONT_PORCH} }, { // Mode 5 : HD : 1920 x 1080 x 24 bpp - HD, LCD_BITS_PER_PIXEL_24, + HD, LcdBitsPerPixel_24, (HD_OSC_FREQUENCY/2), {HD_H_RES_PIXELS, HD_H_SYNC, HD_H_BACK_PORCH, HD_H_FRONT_PORCH}, {HD_V_RES_PIXELS, HD_V_SYNC, HD_V_BACK_PORCH, HD_V_FRONT_PORCH} }, { // Mode 6 : VGA : 640 x 480 x 16 bpp (565 Mode) - VGA, LCD_BITS_PER_PIXEL_16_565, + VGA, LcdBitsPerPixel_16_565, VGA_OSC_FREQUENCY, {VGA_H_RES_PIXELS, VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH}, {VGA_V_RES_PIXELS, VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH} }, { // Mode 7 : SVGA : 800 x 600 x 16 bpp (565 Mode) - SVGA, LCD_BITS_PER_PIXEL_16_565, + SVGA, LcdBitsPerPixel_16_565, SVGA_OSC_FREQUENCY, {SVGA_H_RES_PIXELS, SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH}, {SVGA_V_RES_PIXELS, SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH} }, { // Mode 8 : XGA : 1024 x 768 x 16 bpp (565 Mode) - XGA, LCD_BITS_PER_PIXEL_16_565, + XGA, LcdBitsPerPixel_16_565, XGA_OSC_FREQUENCY, {XGA_H_RES_PIXELS, XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH}, {XGA_V_RES_PIXELS, XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH} }, { // Mode 9 : VGA : 640 x 480 x 15 bpp - VGA, LCD_BITS_PER_PIXEL_16_555, + VGA, LcdBitsPerPixel_16_555, VGA_OSC_FREQUENCY, {VGA_H_RES_PIXELS, VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH}, {VGA_V_RES_PIXELS, VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH} }, { // Mode 10 : SVGA : 800 x 600 x 15 bpp - SVGA, LCD_BITS_PER_PIXEL_16_555, + SVGA, LcdBitsPerPixel_16_555, SVGA_OSC_FREQUENCY, {SVGA_H_RES_PIXELS, SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH}, {SVGA_V_RES_PIXELS, SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH} }, { // Mode 11 : XGA : 1024 x 768 x 15 bpp - XGA, LCD_BITS_PER_PIXEL_16_555, + XGA, LcdBitsPerPixel_16_555, XGA_OSC_FREQUENCY, {XGA_H_RES_PIXELS, XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH}, {XGA_V_RES_PIXELS, XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH} }, { // Mode 12 : XGA : 1024 x 768 x 15 bpp - All the timing info is derived from Linux Kernel Driver Settings - XGA, LCD_BITS_PER_PIXEL_16_555, + XGA, LcdBitsPerPixel_16_555, 63500000, {XGA_H_RES_PIXELS, XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH}, {XGA_V_RES_PIXELS, XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH} }, { // Mode 13 : VGA : 640 x 480 x 12 bpp (444 Mode) - VGA, LCD_BITS_PER_PIXEL_12_444, + VGA, LcdBitsPerPixel_12_444, VGA_OSC_FREQUENCY, {VGA_H_RES_PIXELS, VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH}, {VGA_V_RES_PIXELS, VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH} }, { // Mode 14 : SVGA : 800 x 600 x 12 bpp (444 Mode) - SVGA, LCD_BITS_PER_PIXEL_12_444, + SVGA, LcdBitsPerPixel_12_444, SVGA_OSC_FREQUENCY, {SVGA_H_RES_PIXELS, SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH}, {SVGA_V_RES_PIXELS, SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH} }, { // Mode 15 : XGA : 1024 x 768 x 12 bpp (444 Mode) - XGA, LCD_BITS_PER_PIXEL_12_444, + XGA, LcdBitsPerPixel_12_444, XGA_OSC_FREQUENCY, {XGA_H_RES_PIXELS, XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH}, {XGA_V_RES_PIXELS, XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH} -- 2.17.1
|
|
[PATCH v2 edk2-platforms 1/2] Platform/ARM/VExpressPkg: Remove LcdPlatformLib.h
PierreGondois
From: Pierre Gondois <Pierre.Gondois@...>
LcdPlatformLib.h was introduced by 8ad58788b5c3 as a duplicate of the edk2 original file at: edk2/ArmPlatformPkg/Include/Library/LcdPlatformLib.h The list of files in edk2-plarforms currently using LcdPlatformLib.h is the following: Platform/ARM/SgiPkg/Library/HdLcdArmSgiLib/HdLcdArmSgi.c:11 Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c Platform/ARM/VExpressPkg/Library/ArmMaliDpLib/ArmMaliDpLib.c Platform/ARM/JunoPkg/Library/HdLcdArmJunoLib/HdLcdArmJuno.c They are all using the SCAN_TIMINGS structure. However, this structure is only defined in the original file in the edk2 repository. Thus, the edk2-platforms is un-used and can be safely removed. The build system prefers the edk2 version of the file over its edk2-platforms copy due to the .dec files order in each .inf file where the the library is used. Signed-off-by: Pierre Gondois <Pierre.Gondois@...> --- The changes can be seen at: https://github.com/PierreARM/edk2-platforms/tree/pg/1537_Ecc_ArmPlatformPkg_v2 Notes: v2: -Remove reference to LcdPlatformLib.h in .dec file [asked by Ard] Platform/ARM/VExpressPkg/ArmVExpressPkg.dec | 3 +- .../Include/Library/LcdPlatformLib.h | 215 ------------------ 2 files changed, 1 insertion(+), 217 deletions(-) delete mode 100644 Platform/ARM/VExpressPkg/Include/Library/LcdPlatformLib.h diff --git a/Platform/ARM/VExpressPkg/ArmVExpressPkg.dec b/Platform/ARM/VExpressPkg/ArmVExpressPkg.dec index f78c5ce7c764..848510bff17e 100644 --- a/Platform/ARM/VExpressPkg/ArmVExpressPkg.dec +++ b/Platform/ARM/VExpressPkg/ArmVExpressPkg.dec @@ -1,7 +1,7 @@ #/** @file # Arm Versatile Express package. # -# Copyright (c) 2012-2018, ARM Limited. All rights reserved. +# Copyright (c) 2012-2020, Arm Limited. All rights reserved.<BR> # # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -27,7 +27,6 @@ [Includes.common] [LibraryClasses] ArmPlatformSysConfigLib|Include/Library/ArmPlatformSysConfigLib.h - LcdPlatformLib|Include/Library/LcdPlatformLib.h [Guids.common] gArmVExpressTokenSpaceGuid = { 0x9c0aaed4, 0x74c5, 0x4043, { 0xb4, 0x17, 0xa3, 0x22, 0x38, 0x14, 0xce, 0x76 } } diff --git a/Platform/ARM/VExpressPkg/Include/Library/LcdPlatformLib.h b/Platform/ARM/VExpressPkg/Include/Library/LcdPlatformLib.h deleted file mode 100644 index 5591147313ac..000000000000 --- a/Platform/ARM/VExpressPkg/Include/Library/LcdPlatformLib.h +++ /dev/null @@ -1,215 +0,0 @@ -/** @file - - Copyright (c) 2011, ARM Ltd. All rights reserved.<BR> - SPDX-License-Identifier: BSD-2-Clause-Patent - - **/ - -#ifndef __LCDPLATFORMLIB_H -#define __LCDPLATFORMLIB_H - -#include <Protocol/GraphicsOutput.h> - -#define LCD_VRAM_SIZE SIZE_8MB - -// -// Modes definitions -// -#define VGA 0 -#define SVGA 1 -#define XGA 2 -#define SXGA 3 -#define WSXGA 4 -#define UXGA 5 -#define HD 6 - -// -// VGA Mode: 640 x 480 -// -#define VGA_H_RES_PIXELS 640 -#define VGA_V_RES_PIXELS 480 -#define VGA_OSC_FREQUENCY 23750000 /* 0x016A6570 */ - -#define VGA_H_SYNC ( 80 - 1) -#define VGA_H_FRONT_PORCH ( 16 - 1) -#define VGA_H_BACK_PORCH ( 64 - 1) - -#define VGA_V_SYNC ( 4 - 1) -#define VGA_V_FRONT_PORCH ( 3 - 1) -#define VGA_V_BACK_PORCH ( 13 - 1) - -// -// SVGA Mode: 800 x 600 -// -#define SVGA_H_RES_PIXELS 800 -#define SVGA_V_RES_PIXELS 600 -#define SVGA_OSC_FREQUENCY 38250000 /* 0x0247A610 */ - -#define SVGA_H_SYNC ( 80 - 1) -#define SVGA_H_FRONT_PORCH ( 32 - 1) -#define SVGA_H_BACK_PORCH (112 - 1) - -#define SVGA_V_SYNC ( 4 - 1) -#define SVGA_V_FRONT_PORCH ( 3 - 1) -#define SVGA_V_BACK_PORCH ( 17 - 1) - -// -// XGA Mode: 1024 x 768 -// -#define XGA_H_RES_PIXELS 1024 -#define XGA_V_RES_PIXELS 768 -#define XGA_OSC_FREQUENCY 63500000 /* 0x03C8EEE0 */ - -#define XGA_H_SYNC (104 - 1) -#define XGA_H_FRONT_PORCH ( 48 - 1) -#define XGA_H_BACK_PORCH (152 - 1) - -#define XGA_V_SYNC ( 4 - 1) -#define XGA_V_FRONT_PORCH ( 3 - 1) -#define XGA_V_BACK_PORCH ( 23 - 1) - -// -// SXGA Mode: 1280 x 1024 -// -#define SXGA_H_RES_PIXELS 1280 -#define SXGA_V_RES_PIXELS 1024 -#define SXGA_OSC_FREQUENCY 109000000 /* 0x067F3540 */ - -#define SXGA_H_SYNC (136 - 1) -#define SXGA_H_FRONT_PORCH ( 80 - 1) -#define SXGA_H_BACK_PORCH (216 - 1) - -#define SXGA_V_SYNC ( 7 - 1) -#define SXGA_V_FRONT_PORCH ( 3 - 1) -#define SXGA_V_BACK_PORCH ( 29 - 1) - -// -// WSXGA+ Mode: 1680 x 1050 -// -#define WSXGA_H_RES_PIXELS 1680 -#define WSXGA_V_RES_PIXELS 1050 -#define WSXGA_OSC_FREQUENCY 147000000 /* 0x08C30AC0 */ - -#define WSXGA_H_SYNC (170 - 1) -#define WSXGA_H_FRONT_PORCH (104 - 1) -#define WSXGA_H_BACK_PORCH (274 - 1) - -#define WSXGA_V_SYNC ( 5 - 1) -#define WSXGA_V_FRONT_PORCH ( 4 - 1) -#define WSXGA_V_BACK_PORCH ( 41 - 1) - -// -// UXGA Mode: 1600 x 1200 -// -#define UXGA_H_RES_PIXELS 1600 -#define UXGA_V_RES_PIXELS 1200 -#define UXGA_OSC_FREQUENCY 161000000 /* 0x0998AA40 */ - -#define UXGA_H_SYNC (168 - 1) -#define UXGA_H_FRONT_PORCH (112 - 1) -#define UXGA_H_BACK_PORCH (280 - 1) - -#define UXGA_V_SYNC ( 4 - 1) -#define UXGA_V_FRONT_PORCH ( 3 - 1) -#define UXGA_V_BACK_PORCH ( 38 - 1) - -// -// HD Mode: 1920 x 1080 -// -#define HD_H_RES_PIXELS 1920 -#define HD_V_RES_PIXELS 1080 -#define HD_OSC_FREQUENCY 165000000 /* 0x09D5B340 */ - -#define HD_H_SYNC ( 79 - 1) -#define HD_H_FRONT_PORCH (128 - 1) -#define HD_H_BACK_PORCH (328 - 1) - -#define HD_V_SYNC ( 5 - 1) -#define HD_V_FRONT_PORCH ( 3 - 1) -#define HD_V_BACK_PORCH ( 32 - 1) - -// -// Colour Masks -// - -#define LCD_24BPP_RED_MASK 0x00FF0000 -#define LCD_24BPP_GREEN_MASK 0x0000FF00 -#define LCD_24BPP_BLUE_MASK 0x000000FF -#define LCD_24BPP_RESERVED_MASK 0xFF000000 - -#define LCD_16BPP_555_RED_MASK 0x00007C00 -#define LCD_16BPP_555_GREEN_MASK 0x000003E0 -#define LCD_16BPP_555_BLUE_MASK 0x0000001F -#define LCD_16BPP_555_RESERVED_MASK 0x00000000 - -#define LCD_16BPP_565_RED_MASK 0x0000F800 -#define LCD_16BPP_565_GREEN_MASK 0x000007E0 -#define LCD_16BPP_565_BLUE_MASK 0x0000001F -#define LCD_16BPP_565_RESERVED_MASK 0x00008000 - -#define LCD_12BPP_444_RED_MASK 0x00000F00 -#define LCD_12BPP_444_GREEN_MASK 0x000000F0 -#define LCD_12BPP_444_BLUE_MASK 0x0000000F -#define LCD_12BPP_444_RESERVED_MASK 0x0000F000 - - -// The enumeration indexes maps the PL111 LcdBpp values used in the LCD Control Register -typedef enum { - LCD_BITS_PER_PIXEL_1 = 0, - LCD_BITS_PER_PIXEL_2, - LCD_BITS_PER_PIXEL_4, - LCD_BITS_PER_PIXEL_8, - LCD_BITS_PER_PIXEL_16_555, - LCD_BITS_PER_PIXEL_24, - LCD_BITS_PER_PIXEL_16_565, - LCD_BITS_PER_PIXEL_12_444 -} LCD_BPP; - - -EFI_STATUS -LcdPlatformInitializeDisplay ( - IN EFI_HANDLE Handle - ); - -EFI_STATUS -LcdPlatformGetVram ( - OUT EFI_PHYSICAL_ADDRESS* VramBaseAddress, - OUT UINTN* VramSize - ); - -UINT32 -LcdPlatformGetMaxMode ( - VOID - ); - -EFI_STATUS -LcdPlatformSetMode ( - IN UINT32 ModeNumber - ); - -EFI_STATUS -LcdPlatformQueryMode ( - IN UINT32 ModeNumber, - OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info - ); - -EFI_STATUS -LcdPlatformGetTimings ( - IN UINT32 ModeNumber, - OUT UINT32* HRes, - OUT UINT32* HSync, - OUT UINT32* HBackPorch, - OUT UINT32* HFrontPorch, - OUT UINT32* VRes, - OUT UINT32* VSync, - OUT UINT32* VBackPorch, - OUT UINT32* VFrontPorch - ); - -EFI_STATUS -LcdPlatformGetBpp ( - IN UINT32 ModeNumber, - OUT LCD_BPP* Bpp - ); - -#endif -- 2.17.1
|
|