mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-12-16 23:11:30 +01:00
Pull request efi-2024-01-rc1
Documentation: * Bump urllib3 version * Migrate Renesas board docs to rst * Link an introduction video UEFI * Use same GUID as EDK II for auto-created boot options * Clean up BitBlt test -----BEGIN PGP SIGNATURE----- iQJWBAABCABAFiEEK7wKXt3/btL6/yA+hO4vgnE3U0sFAmUpWAsiHGhlaW5yaWNo LnNjaHVjaGFyZHRAY2Fub25pY2FsLmNvbQAKCRCE7i+CcTdTS8+uD/9VGzgUXq9d SJLXOXYDEO70lu72OTFPWOVjkHx/p8AM+xvQDMbm7WvJnMcjJh7xqp/kSrhEhj0p NQ9eUDcrtNM0f5xaab15NePGLkXDwdLXtlw/hBPfwI1i9YJeqbrKhDfVfb1cZUsd 9TxJXk3PNw0Z/DMRc9vW8Y+tF1uSUZlwn9XXwDay9By7x2vN+u83mQXgVb9MgqPG dzWYce2eP11ieY5NQ6C3ojsDLT0XauV30EDGg1bBLh5rJvs0pjrw62bJzezqlvFI aEh5aRJA3gSIqp+fbithIOpo8oJx6vi8+EGaCtntpyygP2J1P2XxtIr4bTCVnUZn CNZqiqbHzC9/I6n4BSzy9xezhbDgmpRLuG0OYvTHgaHAJdTklEFg7vDzZTbqLEBg 75vq4E3FnV3Frmv1nzTESnwvqd38k0nwHrtfnF9GqNu8SyanlF+v3BNvZnI5QjzO JIsRWyhncj1+cONULVLtoQgTD9+sPatfDQsWhkj1m55OtZ/QwCVIHTl8hhXpex2w wh1REzH4WQkWMHOm4I/0V/YnNU+vlU6Pk07WBo6Wf9WaN6LTfH2QqJl4A1TNvYb6 64MUKXkdztuT/LnFD64Ji8qzf8X2aab+hKGcrJ58XvjrI4Us6obqyoyAXN+Ui2oa PiADhUXm9VKxPP+k+tF/VVBJ8ZZ4LPlqHA== =vtF1 -----END PGP SIGNATURE----- Merge tag 'efi-2024-01-rc1' of https://source.denx.de/u-boot/custodians/u-boot-efi Pull request efi-2024-01-rc1 Documentation: * Bump urllib3 version * Migrate Renesas board docs to rst * Link an introduction video UEFI * Use same GUID as EDK II for auto-created boot options * Clean up BitBlt test
This commit is contained in:
commit
d5d24e2e0a
@ -1,99 +0,0 @@
|
|||||||
Summary
|
|
||||||
=======
|
|
||||||
|
|
||||||
This README is about U-Boot support for Renesas's ARM Cortex-A9 based RMOBILE[1]
|
|
||||||
and Cortex-A9/A53/A57 based R-Car[2] family of SoCs. Renesas's RMOBILE/R-Car SoC
|
|
||||||
family contains an ARM Cortex-A9/A53/A57.
|
|
||||||
|
|
||||||
Currently the following boards are supported:
|
|
||||||
|
|
||||||
| SoC | Board | defconfig
|
|
||||||
|===============+========================================+===================
|
|
||||||
| R8A73A0 | KMC KZM-A9-GT [3] | kzm9g_config
|
|
||||||
| R8A7734 | Atmark-Techno Armadillo-800-EVA [4] | armadillo-800eva_config
|
|
||||||
|===============+========================================+===================
|
|
||||||
| R8A7790 H2 | Renesas Electronics Lager | lager_defconfig
|
|
||||||
| | Renesas Electronics Stout | stout_defconfig
|
|
||||||
|---------------+----------------------------------------+-------------------
|
|
||||||
| R8A7791 M2-W | Renesas Electronics Koelsch | koelsch_defconfig
|
|
||||||
| | Renesas Electronics Porter | porter_defconfig
|
|
||||||
|---------------+----------------------------------------+-------------------
|
|
||||||
| R8A7792 V2H | Renesas Electronics Blanche | blanche_defconfig
|
|
||||||
|---------------+----------------------------------------+-------------------
|
|
||||||
| R8A7793 M2-N | Renesas Electronics Gose | gose_defconfig
|
|
||||||
|---------------+----------------------------------------+-------------------
|
|
||||||
| R8A7794 E2 | Renesas Electronics Alt | alt_defconfig
|
|
||||||
| | Renesas Electronics Silk | silk_defconfig
|
|
||||||
|===============+========================================+===================
|
|
||||||
| R8A7795 H3 | Renesas Electronics Salvator-XS ES2.0+ | r8a7795_salvator-x_defconfig
|
|
||||||
| R8A7795 H3 | Renesas Electronics ULCB ES2.0+ | r8a7795_ulcb
|
|
||||||
|---------------+----------------------------------------+-------------------
|
|
||||||
| R8A7796 M3-W | Renesas Electronics Salvator-X | r8a7796_salvator-x_defconfig
|
|
||||||
| R8A7796 M3-W | Renesas Electronics ULCB | r8a7796_ulcb
|
|
||||||
|---------------+----------------------------------------+-------------------
|
|
||||||
| R8A77965 M3-N | Renesas Electronics Salvator-XS | r8a77965_salvator-x_defconfig
|
|
||||||
| R8A77965 M3-N | Renesas Electronics ULCB | r8a77965_ulcb
|
|
||||||
|---------------+----------------------------------------+-------------------
|
|
||||||
| R8A77970 V3M | Renesas Electronics Eagle | r8a77970_eagle_defconfig
|
|
||||||
| R8A77970 V3M | Renesas Electronics V3MSK | r8a77970_v3msk_defconfig
|
|
||||||
|---------------+----------------------------------------+-------------------
|
|
||||||
| R8A77995 D3 | Renesas Electronics Draak | r8a77995_draak_defconfig
|
|
||||||
'===============+========================================+===================
|
|
||||||
|
|
||||||
Toolchain
|
|
||||||
=========
|
|
||||||
|
|
||||||
Either ARMv7 toolchain for 32bit Cortex-A9 systems or ARMv8 (aarch64)
|
|
||||||
toolchain for 64bit Cortex-A53/A57 systems. Currently we compile the
|
|
||||||
32bit systems with -march=armv5 to allow more compilers to work. (For
|
|
||||||
U-Boot code this has no performance impact.)
|
|
||||||
|
|
||||||
Currently, ELDK[5], Linaro[6], CodeSourcery[7] and Emdebian[8] supports
|
|
||||||
ARMv7. Modern distributions also contain ARMv7 and ARMv8 crosstoolchains
|
|
||||||
in their package feeds.
|
|
||||||
|
|
||||||
Build
|
|
||||||
=====
|
|
||||||
|
|
||||||
Locate defconfig in the table above. Then apply standard build procedure:
|
|
||||||
|
|
||||||
make <board>_defconfig
|
|
||||||
make
|
|
||||||
|
|
||||||
Note: Armadillo-800-EVA's U-Boot supports booting from SDcard only.
|
|
||||||
Please see "B.2 Appendix B Boot Specifications" in hardware manual.
|
|
||||||
|
|
||||||
Links
|
|
||||||
=====
|
|
||||||
|
|
||||||
[1] Renesas RMOBILE:
|
|
||||||
|
|
||||||
http://am.renesas.com/products/soc/assp/mobile/r_mobile/index.jsp
|
|
||||||
|
|
||||||
[2] Renesas R-Car:
|
|
||||||
|
|
||||||
http://am.renesas.com/products/soc/assp/automotive/index.jsp
|
|
||||||
|
|
||||||
[3] KZM-A9-GT
|
|
||||||
|
|
||||||
http://www.kmckk.co.jp/kzma9-gt/index.html
|
|
||||||
|
|
||||||
[4] Armadillo-800-EVA
|
|
||||||
|
|
||||||
http://armadillo.atmark-techno.com/armadillo-800-EVA
|
|
||||||
|
|
||||||
[5] ELDK
|
|
||||||
|
|
||||||
http://www.denx.de/wiki/view/ELDK-5/WebHome#Section_1.6.
|
|
||||||
|
|
||||||
[6] Linaro
|
|
||||||
|
|
||||||
http://www.linaro.org/downloads/
|
|
||||||
|
|
||||||
[7] CodeSourcey
|
|
||||||
|
|
||||||
http://www.mentor.com/embedded-software/codesourcery
|
|
||||||
|
|
||||||
[8] Emdebian
|
|
||||||
|
|
||||||
http://www.emdebian.org/crosstools.html
|
|
||||||
@ -9,37 +9,230 @@ About this
|
|||||||
This document describes the information about Renesas supported boards
|
This document describes the information about Renesas supported boards
|
||||||
and their usage steps.
|
and their usage steps.
|
||||||
|
|
||||||
Renesas boards
|
Renesas SoC based boards
|
||||||
--------------
|
------------------------
|
||||||
|
|
||||||
Renesas is a SoC solutions provider for automotive and industrial applications.
|
Renesas is a SoC solutions provider for automotive and industrial applications.
|
||||||
|
|
||||||
U-Boot supports several Renesas SoC families:
|
.. list-table:: Supported Renesas SoC based boards
|
||||||
|
:widths: 10, 25, 15, 10, 25
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
* R-Car Gen2 (32-bit)
|
* - Family
|
||||||
- Blanche board
|
- Board
|
||||||
- Gose board
|
- SoC
|
||||||
- Koelsch board
|
- Arch
|
||||||
- Lager board
|
- defconfig
|
||||||
- Silk board
|
|
||||||
- Porter board
|
* - R2D
|
||||||
- Stout board
|
- R2D-PLUS
|
||||||
* R-Car Gen3 (64-bit)
|
- SH7751
|
||||||
- Condor board
|
- sh
|
||||||
- Draak board
|
- r2dplus_defconfig
|
||||||
- Eagle board
|
|
||||||
- Ebisu board
|
* - RZ/A1
|
||||||
- Salvator-X and Salvator-XS boards
|
- GR-PEACH
|
||||||
- ULCB board
|
- R7S72100 (RZ/A1H)
|
||||||
* R-Car Gen4 (64-bit)
|
- arm
|
||||||
- Falcon board
|
- grpeach_defconfig
|
||||||
- Spider board
|
|
||||||
- Whitehawk board
|
* - R-Car Gen2
|
||||||
* RZ/A1 (32-bit)
|
- Lager
|
||||||
- GR-PEACH board
|
- R8A7790 (H2)
|
||||||
* RZ/G
|
- arm
|
||||||
- Beacon-rzg2 board
|
- lager_defconfig
|
||||||
- Hihope-rzg2 board
|
|
||||||
- ek874 board
|
* -
|
||||||
* RZ/N1 (32-bit)
|
- Stout
|
||||||
- Schneider rzn1-snarc board
|
- R8A7790 (H2)
|
||||||
|
- arm
|
||||||
|
- stout_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- Koelsch
|
||||||
|
- R8A7791 (M2-W)
|
||||||
|
- arm
|
||||||
|
- koelsch_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- Porter
|
||||||
|
- R8A7791 (M2-W)
|
||||||
|
- arm
|
||||||
|
- porter_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- Blanche
|
||||||
|
- R8A7792 (V2H)
|
||||||
|
- arm
|
||||||
|
- blanche_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- Gose
|
||||||
|
- R8A7793 (M2-N)
|
||||||
|
- arm
|
||||||
|
- gose_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- Alt
|
||||||
|
- R8A7794 (E2)
|
||||||
|
- arm
|
||||||
|
- alt_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- Silk
|
||||||
|
- R8A7794 (E2)
|
||||||
|
- arm
|
||||||
|
- silk_defconfig
|
||||||
|
|
||||||
|
* - R-Car Gen3
|
||||||
|
- Salvator-X(S)
|
||||||
|
- R8A77951 (H3)
|
||||||
|
- arm64
|
||||||
|
- rcar3_salvator-x_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- ULCB
|
||||||
|
- R8A77951 (H3)
|
||||||
|
- arm64
|
||||||
|
- rcar3_ulcb_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- Salvator-X(S)
|
||||||
|
- R8A77960 (M3-W)
|
||||||
|
- arm64
|
||||||
|
- rcar3_salvator-x_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- ULCB
|
||||||
|
- R8A77960 (M3-W)
|
||||||
|
- arm64
|
||||||
|
- rcar3_ulcb_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- Salvator-X(S)
|
||||||
|
- R8A77965 (M3-N)
|
||||||
|
- arm64
|
||||||
|
- rcar3_salvator-x_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- ULCB
|
||||||
|
- R8A77965 (M3-N)
|
||||||
|
- arm64
|
||||||
|
- rcar3_ulcb_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- Eagle
|
||||||
|
- R8A77970 (V3M)
|
||||||
|
- arm64
|
||||||
|
- r8a77970_eagle_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- V3MSK
|
||||||
|
- R8A77970 (V3M)
|
||||||
|
- arm64
|
||||||
|
- r8a77970_v3msk_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- Condor
|
||||||
|
- R8A77980 (V3H)
|
||||||
|
- arm64
|
||||||
|
- r8a77980_condor_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- V3HSK
|
||||||
|
- R8A77980 (V3H)
|
||||||
|
- arm64
|
||||||
|
- r8a77980_v3hsk_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- Ebisu
|
||||||
|
- R8A77990 (E3)
|
||||||
|
- arm64
|
||||||
|
- r8a77990_ebisu_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- Draak
|
||||||
|
- R8A77995 (D3)
|
||||||
|
- arm64
|
||||||
|
- r8a77995_draak_defconfig
|
||||||
|
|
||||||
|
* - R-Car Gen4
|
||||||
|
- Falcon
|
||||||
|
- R8A779A0 (V3U)
|
||||||
|
- arm64
|
||||||
|
- r8a779a0_falcon_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- Spider
|
||||||
|
- R8A779F0 (S4)
|
||||||
|
- arm64
|
||||||
|
- r8a779f0_spider_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- White Hawk
|
||||||
|
- R8A779G0 (V4H)
|
||||||
|
- arm64
|
||||||
|
- r8a779g0_whitehawk_defconfig
|
||||||
|
|
||||||
|
* - RZ/G2 Family
|
||||||
|
- Beacon EmbeddedWorks RZ/G2M SoM
|
||||||
|
- R8A774A1 (RZ/G2M)
|
||||||
|
- arm64
|
||||||
|
- rzg2_beacon_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- HopeRun HiHope RZ/G2M
|
||||||
|
- R8A774A1 (RZ/G2M)
|
||||||
|
- arm64
|
||||||
|
- hihope_rzg2_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- Beacon EmbeddedWorks RZ/G2N SoM
|
||||||
|
- R8A774B1 (RZ/G2N)
|
||||||
|
- arm64
|
||||||
|
- rzg2_beacon_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- HopeRun HiHope RZ/G2N
|
||||||
|
- R8A774B1 (RZ/G2N)
|
||||||
|
- arm64
|
||||||
|
- hihope_rzg2_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- Silicon Linux RZ/G2E evaluation kit (EK874)
|
||||||
|
- R8A774C0 (RZ/G2E)
|
||||||
|
- arm64
|
||||||
|
- silinux_ek874_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- Beacon EmbeddedWorks RZ/G2H SoM
|
||||||
|
- R8A774E1 (RZ/G2H)
|
||||||
|
- arm64
|
||||||
|
- rzg2_beacon_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- HopeRun HiHope RZ/G2H
|
||||||
|
- R8A774E1 (RZ/G2H)
|
||||||
|
- arm64
|
||||||
|
- hihope_rzg2_defconfig
|
||||||
|
|
||||||
|
* - :doc:`RZ/N1 Family <rzn1>`
|
||||||
|
- Schneider RZ/N1D board
|
||||||
|
- R9A06G032 (RZ/N1D)
|
||||||
|
- arm64
|
||||||
|
- rzn1_snarc_defconfig
|
||||||
|
|
||||||
|
* -
|
||||||
|
- Schneider RZ/N1S board
|
||||||
|
- R9A06G033 (RZ/N1S)
|
||||||
|
- arm64
|
||||||
|
- rzn1_snarc_defconfig
|
||||||
|
|
||||||
|
Build
|
||||||
|
-----
|
||||||
|
|
||||||
|
Locate the appropriate defconfig in the table above. Then apply standard build
|
||||||
|
procedure::
|
||||||
|
|
||||||
|
make <board_defconfig>
|
||||||
|
make
|
||||||
|
|||||||
@ -8,11 +8,11 @@ execute code, e.g. every 100ms. Examples for such functions might be LED
|
|||||||
blinking etc. The functions that are hooked into this cyclic list should
|
blinking etc. The functions that are hooked into this cyclic list should
|
||||||
be small timewise as otherwise the execution of the other code that relies
|
be small timewise as otherwise the execution of the other code that relies
|
||||||
on a high frequent polling (e.g. UART rx char ready check) might be
|
on a high frequent polling (e.g. UART rx char ready check) might be
|
||||||
delayed too much. To detect cyclic functions with a too long execution
|
delayed too much. To detect cyclic functions with an excessive execution
|
||||||
time, the Kconfig option `CONFIG_CYCLIC_MAX_CPU_TIME_US` is introduced,
|
time, the Kconfig option `CONFIG_CYCLIC_MAX_CPU_TIME_US` was introduced.
|
||||||
which configures the max allowed time for such a cyclic function. If it's
|
It defines the maximum allowable execution time for such a cyclic function. The
|
||||||
execution time exceeds this time, this cyclic function will get removed
|
first time the execution of a cyclic function exceeds this interval, a warning
|
||||||
from the cyclic list.
|
will be displayed indicating the problem to the user.
|
||||||
|
|
||||||
Registering a cyclic function
|
Registering a cyclic function
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|||||||
@ -15,6 +15,9 @@ learn a bit about U-Boot:
|
|||||||
<https://www.youtube.com/watch?v=YlJBsVZJkDI>`__
|
<https://www.youtube.com/watch?v=YlJBsVZJkDI>`__
|
||||||
from Embedded Linux Conference 2023.
|
from Embedded Linux Conference 2023.
|
||||||
|
|
||||||
|
* `Introduction to U-Boot for beginners
|
||||||
|
<https://www.youtube.com/watch?v=rVaiLgXccSE>`__
|
||||||
|
|
||||||
See elinux_talks_ for a more comprehensive list.
|
See elinux_talks_ for a more comprehensive list.
|
||||||
|
|
||||||
.. _elinux_talks: https://elinux.org/Boot_Loaders#U-Boot
|
.. _elinux_talks: https://elinux.org/Boot_Loaders#U-Boot
|
||||||
|
|||||||
@ -23,4 +23,4 @@ sphinxcontrib-htmlhelp==2.0.0
|
|||||||
sphinxcontrib-jsmath==1.0.1
|
sphinxcontrib-jsmath==1.0.1
|
||||||
sphinxcontrib-qthelp==1.0.3
|
sphinxcontrib-qthelp==1.0.3
|
||||||
sphinxcontrib-serializinghtml==1.1.5
|
sphinxcontrib-serializinghtml==1.1.5
|
||||||
urllib3==1.26.9
|
urllib3==2.0.6
|
||||||
|
|||||||
@ -149,8 +149,8 @@ static inline efi_status_t efi_launch_capsules(void)
|
|||||||
|
|
||||||
/* GUID for the auto generated boot menu entry */
|
/* GUID for the auto generated boot menu entry */
|
||||||
#define EFICONFIG_AUTO_GENERATED_ENTRY_GUID \
|
#define EFICONFIG_AUTO_GENERATED_ENTRY_GUID \
|
||||||
EFI_GUID(0x38c1acc1, 0x9fc0, 0x41f0, \
|
EFI_GUID(0x8108ac4e, 0x9f11, 0x4d59, \
|
||||||
0xb9, 0x01, 0xfa, 0x74, 0xd6, 0xd6, 0xe4, 0xde)
|
0x85, 0x0e, 0xe2, 0x1a, 0x52, 0x2c, 0x59, 0xb2)
|
||||||
|
|
||||||
/* Use internal device tree when starting UEFI application */
|
/* Use internal device tree when starting UEFI application */
|
||||||
#define EFI_FDT_USE_INTERNAL NULL
|
#define EFI_FDT_USE_INTERNAL NULL
|
||||||
|
|||||||
@ -14,6 +14,12 @@
|
|||||||
#define HEIGHT 120
|
#define HEIGHT 120
|
||||||
#define DEPTH 60
|
#define DEPTH 60
|
||||||
|
|
||||||
|
struct pos {
|
||||||
|
efi_uintn_t x;
|
||||||
|
efi_uintn_t y;
|
||||||
|
int redrawn;
|
||||||
|
};
|
||||||
|
|
||||||
static const struct efi_gop_pixel BLACK = { 0, 0, 0, 0};
|
static const struct efi_gop_pixel BLACK = { 0, 0, 0, 0};
|
||||||
static const struct efi_gop_pixel RED = { 0, 0, 255, 0};
|
static const struct efi_gop_pixel RED = { 0, 0, 255, 0};
|
||||||
static const struct efi_gop_pixel ORANGE = { 0, 128, 255, 0};
|
static const struct efi_gop_pixel ORANGE = { 0, 128, 255, 0};
|
||||||
@ -27,7 +33,7 @@ static efi_guid_t efi_gop_guid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
|
|||||||
static struct efi_gop *gop;
|
static struct efi_gop *gop;
|
||||||
static struct efi_gop_pixel *bitmap;
|
static struct efi_gop_pixel *bitmap;
|
||||||
static struct efi_event *event;
|
static struct efi_event *event;
|
||||||
static efi_uintn_t xpos;
|
static struct pos pos;
|
||||||
|
|
||||||
static void ellipse(efi_uintn_t x, efi_uintn_t y,
|
static void ellipse(efi_uintn_t x, efi_uintn_t y,
|
||||||
efi_uintn_t x0, efi_uintn_t y0,
|
efi_uintn_t x0, efi_uintn_t y0,
|
||||||
@ -62,31 +68,33 @@ static void rectangle(efi_uintn_t x, efi_uintn_t y,
|
|||||||
*/
|
*/
|
||||||
static void EFIAPI notify(struct efi_event *event, void *context)
|
static void EFIAPI notify(struct efi_event *event, void *context)
|
||||||
{
|
{
|
||||||
efi_uintn_t *pos = context;
|
struct pos *pos = context;
|
||||||
efi_uintn_t dx, sx, width;
|
efi_uintn_t dx, sx, width;
|
||||||
|
|
||||||
if (!pos)
|
if (!pos)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Increment position */
|
/* Increment position */
|
||||||
*pos += 5;
|
pos->x += 5;
|
||||||
if (*pos >= WIDTH + gop->mode->info->width)
|
if (pos->x >= WIDTH + gop->mode->info->width)
|
||||||
*pos = 0;
|
pos->x = 0;
|
||||||
|
|
||||||
width = WIDTH;
|
width = WIDTH;
|
||||||
dx = *pos - WIDTH;
|
dx = pos->x - WIDTH;
|
||||||
sx = 0;
|
sx = 0;
|
||||||
if (*pos >= gop->mode->info->width) {
|
if (pos->x >= gop->mode->info->width) {
|
||||||
width = WIDTH + gop->mode->info->width - *pos;
|
width = WIDTH + gop->mode->info->width - pos->x;
|
||||||
} else if (*pos < WIDTH) {
|
} else if (pos->x < WIDTH) {
|
||||||
dx = 0;
|
dx = 0;
|
||||||
sx = WIDTH - *pos;
|
sx = WIDTH - pos->x;
|
||||||
width = *pos;
|
width = pos->x;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy image to video */
|
/* Copy image to video */
|
||||||
gop->blt(gop, bitmap, EFI_BLT_BUFFER_TO_VIDEO, sx, 0, dx, DEPTH,
|
gop->blt(gop, bitmap, EFI_BLT_BUFFER_TO_VIDEO, sx, 0, dx, pos->y,
|
||||||
width, HEIGHT, WIDTH * sizeof(struct efi_gop_pixel));
|
width, HEIGHT, WIDTH * sizeof(struct efi_gop_pixel));
|
||||||
|
|
||||||
|
pos->redrawn = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -107,7 +115,7 @@ static int setup(const efi_handle_t handle,
|
|||||||
|
|
||||||
/* Create event */
|
/* Create event */
|
||||||
ret = boottime->create_event(EVT_TIMER | EVT_NOTIFY_SIGNAL,
|
ret = boottime->create_event(EVT_TIMER | EVT_NOTIFY_SIGNAL,
|
||||||
TPL_CALLBACK, notify, (void *)&xpos,
|
TPL_CALLBACK, notify, (void *)&pos,
|
||||||
&event);
|
&event);
|
||||||
if (ret != EFI_SUCCESS) {
|
if (ret != EFI_SUCCESS) {
|
||||||
efi_st_error("could not create event\n");
|
efi_st_error("could not create event\n");
|
||||||
@ -247,6 +255,9 @@ static int execute(void)
|
|||||||
return EFI_ST_FAILURE;
|
return EFI_ST_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
con_out->set_attribute(con_out, EFI_WHITE | EFI_BACKGROUND_BLUE);
|
||||||
|
con_out->clear_screen(con_out);
|
||||||
|
|
||||||
/* Fill background */
|
/* Fill background */
|
||||||
ret = gop->blt(gop, bitmap, EFI_BLT_VIDEO_FILL, 0, 0, 0, 0,
|
ret = gop->blt(gop, bitmap, EFI_BLT_VIDEO_FILL, 0, 0, 0, 0,
|
||||||
info->width, info->height, 0);
|
info->width, info->height, 0);
|
||||||
@ -281,21 +292,53 @@ static int execute(void)
|
|||||||
return EFI_ST_FAILURE;
|
return EFI_ST_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set 250ms timer */
|
/* Set 25ms timer */
|
||||||
xpos = WIDTH;
|
pos.x = WIDTH;
|
||||||
|
pos.y = DEPTH;
|
||||||
ret = boottime->set_timer(event, EFI_TIMER_PERIODIC, 250000);
|
ret = boottime->set_timer(event, EFI_TIMER_PERIODIC, 250000);
|
||||||
if (ret != EFI_SUCCESS) {
|
if (ret != EFI_SUCCESS) {
|
||||||
efi_st_error("Could not set timer\n");
|
efi_st_error("Could not set timer\n");
|
||||||
return EFI_ST_FAILURE;
|
return EFI_ST_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
con_out->set_cursor_position(con_out, 0, 0);
|
|
||||||
con_out->set_attribute(con_out, EFI_WHITE | EFI_BACKGROUND_BLUE);
|
|
||||||
efi_st_printf("The submarine should have three yellow port holes.\n");
|
efi_st_printf("The submarine should have three yellow port holes.\n");
|
||||||
efi_st_printf("Press any key to continue");
|
efi_st_printf("UP, DOWN to navigate, any other key to quit");
|
||||||
efi_st_get_key();
|
for (;;) {
|
||||||
|
struct efi_input_key input_key;
|
||||||
|
|
||||||
|
ret = boottime->check_event(con_in->wait_for_key);
|
||||||
|
if (ret == EFI_NOT_READY)
|
||||||
|
continue;
|
||||||
|
if (ret != EFI_SUCCESS) {
|
||||||
|
efi_st_error("CheckEvent failed %x\n",
|
||||||
|
(unsigned int)ret);
|
||||||
|
return EFI_ST_FAILURE;
|
||||||
|
}
|
||||||
|
ret = con_in->read_key_stroke(con_in, &input_key);
|
||||||
|
if (ret != EFI_SUCCESS) {
|
||||||
|
efi_st_error("Key not available %x\n",
|
||||||
|
(unsigned int)ret);
|
||||||
|
return EFI_ST_FAILURE;
|
||||||
|
}
|
||||||
|
switch (input_key.scan_code) {
|
||||||
|
case 0x01: /* UP */
|
||||||
|
if (pos.redrawn && pos.y >= 5) {
|
||||||
|
pos.y -= 5;
|
||||||
|
pos.redrawn = 0;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case 0x02: /* DOWN */
|
||||||
|
if (pos.redrawn &&
|
||||||
|
pos.y + HEIGHT + 5 < gop->mode->info->height) {
|
||||||
|
pos.y += 5;
|
||||||
|
pos.redrawn = 0;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
con_out->set_attribute(con_out, EFI_LIGHTGRAY);
|
con_out->set_attribute(con_out, EFI_LIGHTGRAY);
|
||||||
efi_st_printf("\n");
|
con_out->clear_screen(con_out);
|
||||||
|
|
||||||
return EFI_ST_SUCCESS;
|
return EFI_ST_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user