123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 |
- From aecef39cda6a70c99bf0caff0452e47ad43a68d8 Mon Sep 17 00:00:00 2001
- From: Paul Kocialkowski <contact@paulk.fr>
- Date: Sun, 10 Jul 2016 23:43:16 +0200
- Subject: [PATCH 7/7] firmware: Pass VbDisplayInfo information structure to
- VbExDisplayScreen
- This provides VbExDisplayScreen with an information structure
- (VbDisplayInfo) that contains various context information for display.
- Change-Id: Id9e07bb418f64e9286f07da11314cd63f925e301
- Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
- ---
- firmware/include/vboot_api.h | 12 +++++++++-
- firmware/lib/include/vboot_display.h | 2 +-
- firmware/lib/vboot_api_kernel.c | 44 ++++++++++++++++++++++++------------
- firmware/lib/vboot_display.c | 15 ++++++------
- firmware/stub/vboot_api_stub.c | 3 ++-
- tests/vboot_api_devmode_tests.c | 3 ++-
- tests/vboot_api_kernel2_tests.c | 2 +-
- tests/vboot_api_kernel3_tests.c | 2 +-
- 8 files changed, 55 insertions(+), 28 deletions(-)
- diff --git a/firmware/include/vboot_api.h b/firmware/include/vboot_api.h
- index 950c1e2..ba53101 100644
- --- a/firmware/include/vboot_api.h
- +++ b/firmware/include/vboot_api.h
- @@ -697,6 +697,15 @@ enum VbScreenType_t {
- VB_SCREEN_OS_BROKEN = 0x208,
- };
-
- +/* Information on display context */
- +typedef struct VbDisplayInfo {
- + uint32_t allow_usb;
- + uint32_t allow_legacy;
- + uint32_t use_usb;
- + uint32_t use_legacy;
- + uint32_t signed_only;
- +} VbDisplayInfo;
- +
- /**
- * Initialize and clear the display. Set width and height to the screen
- * dimensions in pixels.
- @@ -725,7 +734,8 @@ VbError_t VbExDisplaySetDimension(uint32_t width, uint32_t height);
- * to be simple ASCII text such as "NO GOOD" or "INSERT"; these screens should
- * only be seen during development.
- */
- -VbError_t VbExDisplayScreen(uint32_t screen_type, uint32_t locale);
- +VbError_t VbExDisplayScreen(uint32_t screen_type, uint32_t locale,
- + VbDisplayInfo *info);
-
- /**
- * Write an image to the display, with the upper left corner at the specified
- diff --git a/firmware/lib/include/vboot_display.h b/firmware/lib/include/vboot_display.h
- index 0ab93f0..0574580 100644
- --- a/firmware/lib/include/vboot_display.h
- +++ b/firmware/lib/include/vboot_display.h
- @@ -15,7 +15,7 @@
- VbError_t VbDisplayScreenFromGBB(VbCommonParams *cparams, uint32_t screen,
- VbNvContext *vncptr, uint32_t locale);
- VbError_t VbDisplayScreen(VbCommonParams *cparams, uint32_t screen, int force,
- - VbNvContext *vncptr);
- + VbNvContext *vncptr, VbDisplayInfo *info);
- VbError_t VbDisplayDebugInfo(VbCommonParams *cparams, VbNvContext *vncptr);
- VbError_t VbCheckDisplayKey(VbCommonParams *cparams, uint32_t key,
- VbNvContext *vncptr);
- diff --git a/firmware/lib/vboot_api_kernel.c b/firmware/lib/vboot_api_kernel.c
- index e03e042..7dcc754 100644
- --- a/firmware/lib/vboot_api_kernel.c
- +++ b/firmware/lib/vboot_api_kernel.c
- @@ -300,11 +300,13 @@ VbError_t VbBootDeveloper(VbCommonParams *cparams, LoadKernelParams *p)
- VbSharedDataHeader *shared =
- (VbSharedDataHeader *)cparams->shared_data_blob;
-
- + VbDisplayInfo info;
- uint32_t allow_usb = 0;
- uint32_t allow_legacy = 0;
- uint32_t disable_dev_boot = 0;
- uint32_t use_usb = 0;
- uint32_t use_legacy = 0;
- + uint32_t signed_only = 0;
- uint32_t default_boot = 0;
- uint32_t ctrl_d_pressed = 0;
- uint32_t hold = 0;
- @@ -350,10 +352,22 @@ VbError_t VbBootDeveloper(VbCommonParams *cparams, LoadKernelParams *p)
- }
- }
-
- + VbNvGet(&vnc, VBNV_DEV_BOOT_SIGNED_ONLY, &signed_only);
- +
- + if (fwmp.flags & FWMP_DEV_ENABLE_OFFICIAL_ONLY)
- + signed_only = 1;
- +
- + info.allow_usb = allow_usb;
- + info.allow_legacy = allow_legacy;
- + info.use_usb = use_usb;
- + info.use_legacy = use_legacy;
- + info.signed_only = signed_only;
- +
- /* If dev mode is disabled, only allow TONORM */
- while (disable_dev_boot) {
- VBDEBUG(("%s() - dev_disable_boot is set.\n", __func__));
- - VbDisplayScreen(cparams, VB_SCREEN_DEVELOPER_TO_NORM, 0, &vnc);
- + VbDisplayScreen(cparams, VB_SCREEN_DEVELOPER_TO_NORM, 0, &vnc,
- + NULL);
- VbExDisplayDebugInfo(dev_disable_msg);
-
- /* Ignore space in VbUserConfirms()... */
- @@ -363,7 +377,7 @@ VbError_t VbBootDeveloper(VbCommonParams *cparams, LoadKernelParams *p)
- VbNvSet(&vnc, VBNV_DISABLE_DEV_REQUEST, 1);
- VbDisplayScreen(cparams,
- VB_SCREEN_TO_NORM_CONFIRMED,
- - 0, &vnc);
- + 0, &vnc, NULL);
- VbExSleepMs(5000);
- return VBERROR_REBOOT_REQUIRED;
- case -1:
- @@ -377,7 +391,7 @@ VbError_t VbBootDeveloper(VbCommonParams *cparams, LoadKernelParams *p)
-
- developer_mode_screen:
- /* Show the dev mode warning screen */
- - VbDisplayScreen(cparams, VB_SCREEN_DEVELOPER_WARNING, 0, &vnc);
- + VbDisplayScreen(cparams, VB_SCREEN_DEVELOPER_WARNING, 0, &vnc, &info);
-
- /* Get audio/delay context */
- audio = VbAudioOpen(cparams);
- @@ -425,7 +439,7 @@ developer_mode_screen:
- }
- VbDisplayScreen(cparams,
- VB_SCREEN_DEVELOPER_TO_NORM,
- - 0, &vnc);
- + 0, &vnc, NULL);
- /* Ignore space in VbUserConfirms()... */
- switch (VbUserConfirms(cparams, 0)) {
- case 1:
- @@ -436,7 +450,7 @@ developer_mode_screen:
- VbDisplayScreen(
- cparams,
- VB_SCREEN_TO_NORM_CONFIRMED,
- - 0, &vnc);
- + 0, &vnc, NULL);
- VbExSleepMs(5000);
- return VBERROR_REBOOT_REQUIRED;
- case -1:
- @@ -450,7 +464,7 @@ developer_mode_screen:
- VbDisplayScreen(
- cparams,
- VB_SCREEN_DEVELOPER_WARNING,
- - 0, &vnc);
- + 0, &vnc, &info);
- /* Start new countdown */
- audio = VbAudioOpen(cparams);
- }
- @@ -512,7 +526,7 @@ developer_mode_screen:
- "USB booting is disabled\n"));
-
- VbDisplayScreen(cparams, VB_SCREEN_BLANK, 1,
- - &vnc);
- + &vnc, NULL);
-
- VbExDisplayDebugInfo(
- "WARNING: Booting from external media "
- @@ -533,7 +547,7 @@ developer_mode_screen:
- * key press.
- */
- VbDisplayScreen(cparams, VB_SCREEN_BLANK, 0,
- - &vnc);
- + &vnc, NULL);
- if (VBERROR_SUCCESS == VbTryUsb(cparams, p)) {
- VbAudioClose(audio);
- return VBERROR_SUCCESS;
- @@ -542,7 +556,7 @@ developer_mode_screen:
- VbDisplayScreen(
- cparams,
- VB_SCREEN_DEVELOPER_WARNING,
- - 0, &vnc);
- + 0, &vnc, &info);
- }
- }
- break;
- @@ -608,7 +622,7 @@ VbError_t VbBootRecovery(VbCommonParams *cparams, LoadKernelParams *p)
- shared->recovery_reason));
- VbSetRecoverySubcode(shared->recovery_reason);
- VbNvCommit();
- - VbDisplayScreen(cparams, VB_SCREEN_OS_BROKEN, 0, &vnc);
- + VbDisplayScreen(cparams, VB_SCREEN_OS_BROKEN, 0, &vnc, NULL);
- VBDEBUG(("VbBootRecovery() waiting for manual recovery\n"));
- while (1) {
- if (VbWantShutdown(cparams->gbb->flags))
- @@ -637,7 +651,7 @@ VbError_t VbBootRecovery(VbCommonParams *cparams, LoadKernelParams *p)
- VbDisplayScreen(cparams, VBERROR_NO_DISK_FOUND == retval ?
- VB_SCREEN_RECOVERY_INSERT :
- VB_SCREEN_RECOVERY_NO_GOOD,
- - 0, &vnc);
- + 0, &vnc, NULL);
-
- /*
- * Scan keyboard more frequently than media, since x86
- @@ -677,7 +691,7 @@ VbError_t VbBootRecovery(VbCommonParams *cparams, LoadKernelParams *p)
- /* Ask the user to confirm entering dev-mode */
- VbDisplayScreen(cparams,
- VB_SCREEN_RECOVERY_TO_DEV,
- - 0, &vnc);
- + 0, &vnc, NULL);
- /* SPACE means no... */
- uint32_t vbc_flags =
- VB_CONFIRM_SPACE_MEANS_NO |
- @@ -839,7 +853,7 @@ static VbError_t EcUpdateImage(int devidx, VbCommonParams *cparams,
- return VBERROR_VGA_OPROM_MISMATCH;
- }
-
- - VbDisplayScreen(cparams, VB_SCREEN_WAIT, 0, &vnc);
- + VbDisplayScreen(cparams, VB_SCREEN_WAIT, 0, &vnc, NULL);
- }
-
- rv = VbExEcUpdateImage(devidx, select, expected, expected_size);
- @@ -1250,13 +1264,13 @@ VbError_t VbSelectAndLoadKernel(VbCommonParams *cparams,
- p.boot_flags |= BOOT_FLAG_RECOVERY;
- retval = VbBootRecovery(cparams, &p);
- VbExEcEnteringMode(0, VB_EC_RECOVERY);
- - VbDisplayScreen(cparams, VB_SCREEN_BLANK, 0, &vnc);
- + VbDisplayScreen(cparams, VB_SCREEN_BLANK, 0, &vnc, NULL);
-
- } else if (p.boot_flags & BOOT_FLAG_DEVELOPER) {
- /* Developer boot */
- retval = VbBootDeveloper(cparams, &p);
- VbExEcEnteringMode(0, VB_EC_DEVELOPER);
- - VbDisplayScreen(cparams, VB_SCREEN_BLANK, 0, &vnc);
- + VbDisplayScreen(cparams, VB_SCREEN_BLANK, 0, &vnc, NULL);
-
- } else {
- /* Normal boot */
- diff --git a/firmware/lib/vboot_display.c b/firmware/lib/vboot_display.c
- index 6d8ed92..84b7961 100644
- --- a/firmware/lib/vboot_display.c
- +++ b/firmware/lib/vboot_display.c
- @@ -321,7 +321,7 @@ VbError_t VbDisplayScreenFromGBB(VbCommonParams *cparams, uint32_t screen,
- */
- static VbError_t VbDisplayScreenLegacy(VbCommonParams *cparams, uint32_t screen,
- int force, VbNvContext *vncptr,
- - uint32_t locale)
- + uint32_t locale, VbDisplayInfo *info)
- {
- VbError_t retval;
-
- @@ -336,7 +336,7 @@ static VbError_t VbDisplayScreenLegacy(VbCommonParams *cparams, uint32_t screen,
- VbExDisplayBacklight(VB_SCREEN_BLANK == screen ? 0 : 1);
-
- /* Display default first */
- - if (VBERROR_SUCCESS == VbExDisplayScreen(screen, locale))
- + if (VBERROR_SUCCESS == VbExDisplayScreen(screen, locale, info))
- return VBERROR_SUCCESS;
-
- /* If default doesn't have anything to show, fall back to GBB bitmaps */
- @@ -344,7 +344,7 @@ static VbError_t VbDisplayScreenLegacy(VbCommonParams *cparams, uint32_t screen,
- }
-
- VbError_t VbDisplayScreen(VbCommonParams *cparams, uint32_t screen,
- - int force, VbNvContext *vncptr)
- + int force, VbNvContext *vncptr, VbDisplayInfo *info)
- {
- uint32_t locale;
- VbError_t rv;
- @@ -357,7 +357,7 @@ VbError_t VbDisplayScreen(VbCommonParams *cparams, uint32_t screen,
- VbNvGet(vncptr, VBNV_LOCALIZATION_INDEX, &locale);
-
- rv = VbDisplayScreenLegacy(cparams, screen, force, vncptr,
- - locale);
- + locale, info);
-
- if (rv == VBERROR_SUCCESS)
- /* Keep track of the currently displayed screen */
- @@ -560,7 +560,7 @@ VbError_t VbDisplayDebugInfo(VbCommonParams *cparams, VbNvContext *vncptr)
- uint32_t i;
-
- /* Blank screen */
- - VbDisplayScreen(cparams, VB_SCREEN_BLANK, 1, vncptr);
- + VbDisplayScreen(cparams, VB_SCREEN_BLANK, 1, vncptr, NULL);
-
- /* Add hardware ID */
- VbRegionReadHWID(cparams, hwid, sizeof(hwid));
- @@ -725,13 +725,14 @@ VbError_t VbCheckDisplayKey(VbCommonParams *cparams, uint32_t key,
- #endif
-
- /* Force redraw of current screen */
- - return VbDisplayScreen(cparams, disp_current_screen, 1, vncptr);
- + return VbDisplayScreen(cparams, disp_current_screen, 1, vncptr,
- + NULL);
- }
-
- if (0 == memcmp(MagicBuffer, MAGIC_WORD, MAGIC_WORD_LEN)) {
- if (VBEASTEREGG)
- (void)VbDisplayScreen(cparams, disp_current_screen,
- - 1, vncptr);
- + 1, vncptr, NULL);
- }
-
- return VBERROR_SUCCESS;
- diff --git a/firmware/stub/vboot_api_stub.c b/firmware/stub/vboot_api_stub.c
- index 717c0f8..c086195 100644
- --- a/firmware/stub/vboot_api_stub.c
- +++ b/firmware/stub/vboot_api_stub.c
- @@ -41,7 +41,8 @@ VbError_t VbExDisplaySetDimension(uint32_t width, uint32_t height)
- return VBERROR_SUCCESS;
- }
-
- -VbError_t VbExDisplayScreen(uint32_t screen_type, uint32_t locale)
- +VbError_t VbExDisplayScreen(uint32_t screen_type, uint32_t locale,
- + VbDisplayInfo *info)
- {
- return VBERROR_SUCCESS;
- }
- diff --git a/tests/vboot_api_devmode_tests.c b/tests/vboot_api_devmode_tests.c
- index abd8e85..6e8afbd 100644
- --- a/tests/vboot_api_devmode_tests.c
- +++ b/tests/vboot_api_devmode_tests.c
- @@ -265,7 +265,8 @@ VbError_t VbExBeep(uint32_t msec, uint32_t frequency) {
- return beep_return;
- }
-
- -VbError_t VbExDisplayScreen(uint32_t screen_type, uint32_t locale) {
- +VbError_t VbExDisplayScreen(uint32_t screen_type, uint32_t locale,
- + VbDisplayInfo *info) {
- switch(screen_type) {
- case VB_SCREEN_BLANK:
- VBDEBUG(("VbExDisplayScreen(BLANK)\n"));
- diff --git a/tests/vboot_api_kernel2_tests.c b/tests/vboot_api_kernel2_tests.c
- index 433933b..d44fc1e 100644
- --- a/tests/vboot_api_kernel2_tests.c
- +++ b/tests/vboot_api_kernel2_tests.c
- @@ -185,7 +185,7 @@ uint32_t VbTryLoadKernel(VbCommonParams *cparams, LoadKernelParams *p,
- }
-
- VbError_t VbDisplayScreen(VbCommonParams *cparams, uint32_t screen, int force,
- - VbNvContext *vncptr)
- + VbNvContext *vncptr, VbDisplayInfo *info)
- {
- if (screens_count < ARRAY_SIZE(screens_displayed))
- screens_displayed[screens_count++] = screen;
- diff --git a/tests/vboot_api_kernel3_tests.c b/tests/vboot_api_kernel3_tests.c
- index 3eddb73..0403c71 100644
- --- a/tests/vboot_api_kernel3_tests.c
- +++ b/tests/vboot_api_kernel3_tests.c
- @@ -195,7 +195,7 @@ VbError_t VbExEcUpdateImage(int devidx, enum VbSelectFirmware_t select,
- }
-
- VbError_t VbDisplayScreen(VbCommonParams *cparams, uint32_t screen, int force,
- - VbNvContext *vncptr)
- + VbNvContext *vncptr, VbDisplayInfo *info)
- {
- if (screens_count < ARRAY_SIZE(screens_displayed))
- screens_displayed[screens_count++] = screen;
- --
- 2.10.2
|