mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-12-15 22:42:08 +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
|
||||
and their usage steps.
|
||||
|
||||
Renesas boards
|
||||
--------------
|
||||
Renesas SoC based boards
|
||||
------------------------
|
||||
|
||||
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)
|
||||
- Blanche board
|
||||
- Gose board
|
||||
- Koelsch board
|
||||
- Lager board
|
||||
- Silk board
|
||||
- Porter board
|
||||
- Stout board
|
||||
* R-Car Gen3 (64-bit)
|
||||
- Condor board
|
||||
- Draak board
|
||||
- Eagle board
|
||||
- Ebisu board
|
||||
- Salvator-X and Salvator-XS boards
|
||||
- ULCB board
|
||||
* R-Car Gen4 (64-bit)
|
||||
- Falcon board
|
||||
- Spider board
|
||||
- Whitehawk board
|
||||
* RZ/A1 (32-bit)
|
||||
- GR-PEACH board
|
||||
* RZ/G
|
||||
- Beacon-rzg2 board
|
||||
- Hihope-rzg2 board
|
||||
- ek874 board
|
||||
* RZ/N1 (32-bit)
|
||||
- Schneider rzn1-snarc board
|
||||
* - Family
|
||||
- Board
|
||||
- SoC
|
||||
- Arch
|
||||
- defconfig
|
||||
|
||||
* - R2D
|
||||
- R2D-PLUS
|
||||
- SH7751
|
||||
- sh
|
||||
- r2dplus_defconfig
|
||||
|
||||
* - RZ/A1
|
||||
- GR-PEACH
|
||||
- R7S72100 (RZ/A1H)
|
||||
- arm
|
||||
- grpeach_defconfig
|
||||
|
||||
* - R-Car Gen2
|
||||
- Lager
|
||||
- R8A7790 (H2)
|
||||
- arm
|
||||
- lager_defconfig
|
||||
|
||||
* -
|
||||
- Stout
|
||||
- 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
|
||||
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
|
||||
delayed too much. To detect cyclic functions with a too long execution
|
||||
time, the Kconfig option `CONFIG_CYCLIC_MAX_CPU_TIME_US` is introduced,
|
||||
which configures the max allowed time for such a cyclic function. If it's
|
||||
execution time exceeds this time, this cyclic function will get removed
|
||||
from the cyclic list.
|
||||
delayed too much. To detect cyclic functions with an excessive execution
|
||||
time, the Kconfig option `CONFIG_CYCLIC_MAX_CPU_TIME_US` was introduced.
|
||||
It defines the maximum allowable execution time for such a cyclic function. The
|
||||
first time the execution of a cyclic function exceeds this interval, a warning
|
||||
will be displayed indicating the problem to the user.
|
||||
|
||||
Registering a cyclic function
|
||||
-----------------------------
|
||||
|
||||
@ -15,6 +15,9 @@ learn a bit about U-Boot:
|
||||
<https://www.youtube.com/watch?v=YlJBsVZJkDI>`__
|
||||
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.
|
||||
|
||||
.. _elinux_talks: https://elinux.org/Boot_Loaders#U-Boot
|
||||
|
||||
@ -23,4 +23,4 @@ sphinxcontrib-htmlhelp==2.0.0
|
||||
sphinxcontrib-jsmath==1.0.1
|
||||
sphinxcontrib-qthelp==1.0.3
|
||||
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 */
|
||||
#define EFICONFIG_AUTO_GENERATED_ENTRY_GUID \
|
||||
EFI_GUID(0x38c1acc1, 0x9fc0, 0x41f0, \
|
||||
0xb9, 0x01, 0xfa, 0x74, 0xd6, 0xd6, 0xe4, 0xde)
|
||||
EFI_GUID(0x8108ac4e, 0x9f11, 0x4d59, \
|
||||
0x85, 0x0e, 0xe2, 0x1a, 0x52, 0x2c, 0x59, 0xb2)
|
||||
|
||||
/* Use internal device tree when starting UEFI application */
|
||||
#define EFI_FDT_USE_INTERNAL NULL
|
||||
|
||||
@ -14,6 +14,12 @@
|
||||
#define HEIGHT 120
|
||||
#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 RED = { 0, 0, 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_pixel *bitmap;
|
||||
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,
|
||||
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)
|
||||
{
|
||||
efi_uintn_t *pos = context;
|
||||
struct pos *pos = context;
|
||||
efi_uintn_t dx, sx, width;
|
||||
|
||||
if (!pos)
|
||||
return;
|
||||
|
||||
/* Increment position */
|
||||
*pos += 5;
|
||||
if (*pos >= WIDTH + gop->mode->info->width)
|
||||
*pos = 0;
|
||||
pos->x += 5;
|
||||
if (pos->x >= WIDTH + gop->mode->info->width)
|
||||
pos->x = 0;
|
||||
|
||||
width = WIDTH;
|
||||
dx = *pos - WIDTH;
|
||||
dx = pos->x - WIDTH;
|
||||
sx = 0;
|
||||
if (*pos >= gop->mode->info->width) {
|
||||
width = WIDTH + gop->mode->info->width - *pos;
|
||||
} else if (*pos < WIDTH) {
|
||||
if (pos->x >= gop->mode->info->width) {
|
||||
width = WIDTH + gop->mode->info->width - pos->x;
|
||||
} else if (pos->x < WIDTH) {
|
||||
dx = 0;
|
||||
sx = WIDTH - *pos;
|
||||
width = *pos;
|
||||
sx = WIDTH - pos->x;
|
||||
width = pos->x;
|
||||
}
|
||||
|
||||
/* 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));
|
||||
|
||||
pos->redrawn = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -107,7 +115,7 @@ static int setup(const efi_handle_t handle,
|
||||
|
||||
/* Create event */
|
||||
ret = boottime->create_event(EVT_TIMER | EVT_NOTIFY_SIGNAL,
|
||||
TPL_CALLBACK, notify, (void *)&xpos,
|
||||
TPL_CALLBACK, notify, (void *)&pos,
|
||||
&event);
|
||||
if (ret != EFI_SUCCESS) {
|
||||
efi_st_error("could not create event\n");
|
||||
@ -247,6 +255,9 @@ static int execute(void)
|
||||
return EFI_ST_FAILURE;
|
||||
}
|
||||
|
||||
con_out->set_attribute(con_out, EFI_WHITE | EFI_BACKGROUND_BLUE);
|
||||
con_out->clear_screen(con_out);
|
||||
|
||||
/* Fill background */
|
||||
ret = gop->blt(gop, bitmap, EFI_BLT_VIDEO_FILL, 0, 0, 0, 0,
|
||||
info->width, info->height, 0);
|
||||
@ -281,21 +292,53 @@ static int execute(void)
|
||||
return EFI_ST_FAILURE;
|
||||
}
|
||||
|
||||
/* Set 250ms timer */
|
||||
xpos = WIDTH;
|
||||
/* Set 25ms timer */
|
||||
pos.x = WIDTH;
|
||||
pos.y = DEPTH;
|
||||
ret = boottime->set_timer(event, EFI_TIMER_PERIODIC, 250000);
|
||||
if (ret != EFI_SUCCESS) {
|
||||
efi_st_error("Could not set timer\n");
|
||||
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("Press any key to continue");
|
||||
efi_st_get_key();
|
||||
efi_st_printf("UP, DOWN to navigate, any other key to quit");
|
||||
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);
|
||||
efi_st_printf("\n");
|
||||
con_out->clear_screen(con_out);
|
||||
|
||||
return EFI_ST_SUCCESS;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user