Jakub Czapiga has submitted this change. ( https://review.coreboot.org/c/coreboot/+/73099 )
Change subject: vga: Change the arguments of vga_write_text to support extended ASCII ......................................................................
vga: Change the arguments of vga_write_text to support extended ASCII
VGA defined the extended ASCII set based on CP437, but the function vga_write_text() accepts a signed char array.
This will cause unnecessary confusion that if we want to print u with umlaut (code=129 in CP437), we need to explicitly cast it to -127 in signed char.
Since we still want to leverage the built-in string utilities which only accepts const char*, we still need to cast it to signed char while processing, and cast it back to unsigned once we write into the frame buffer.
BRANCH=brya BUG=b:264666392 TEST=emerge-brya coreboot chromeos-bootimage
Signed-off-by: Hsuan Ting Chen roccochen@chromium.org Change-Id: If555bbc05f40ce3f02339c0468afff6dda8b7ded Reviewed-on: https://review.coreboot.org/c/coreboot/+/73099 Tested-by: build bot (Jenkins) no-reply@coreboot.org Reviewed-by: Tarun Tuli taruntuli@google.com --- M src/drivers/pc80/vga/vga.c M src/include/pc80/vga.h M src/soc/intel/alderlake/romstage/ux.c 3 files changed, 38 insertions(+), 3 deletions(-)
Approvals: build bot (Jenkins): Verified Tarun Tuli: Looks good to me, approved
diff --git a/src/drivers/pc80/vga/vga.c b/src/drivers/pc80/vga/vga.c index a9befca..7f8ce69 100644 --- a/src/drivers/pc80/vga/vga.c +++ b/src/drivers/pc80/vga/vga.c @@ -283,8 +283,10 @@ }
void -vga_write_text(enum VGA_TEXT_ALIGNMENT alignment, unsigned int line, const char *string) +vga_write_text(enum VGA_TEXT_ALIGNMENT alignment, unsigned int line, + const unsigned char *ustring) { + const char *string = (const char *)ustring; char str[VGA_COLUMNS * VGA_LINES] = {0}; memcpy(str, string, strnlen(string, sizeof(str) - 1));
diff --git a/src/include/pc80/vga.h b/src/include/pc80/vga.h index ec012f5..7a97afe 100644 --- a/src/include/pc80/vga.h +++ b/src/include/pc80/vga.h @@ -33,6 +33,7 @@ * vga_write_text() writes a line of text aligned left/center/right * horizontally on the screen (i.e. enum VGA_TEXT_ALIGNMENT) */ -void vga_write_text(enum VGA_TEXT_ALIGNMENT alignment, unsigned int line, const char *string); +void vga_write_text(enum VGA_TEXT_ALIGNMENT alignment, unsigned int line, + const unsigned char *ustring);
#endif /* VGA_H */ diff --git a/src/soc/intel/alderlake/romstage/ux.c b/src/soc/intel/alderlake/romstage/ux.c index 5dba194..23fd0fe 100644 --- a/src/soc/intel/alderlake/romstage/ux.c +++ b/src/soc/intel/alderlake/romstage/ux.c @@ -14,6 +14,9 @@
printk(BIOS_INFO, "Informing user on-display of %s.\n", name); vga_write_text(VGA_TEXT_CENTER, VGA_TEXT_HORIZONTAL_MIDDLE, - "Your device is finishing an update. This may take 1-2 minutes.\nPlease do not turn off your device."); + (const unsigned char *) + "Your device is finishing an update. " + "This may take 1-2 minutes.\n" + "Please do not turn off your device."); return true; }