Page MenuHomeFreeBSD

D31814.diff
No OneTemporary

D31814.diff

diff --git a/stand/common/gfx_fb.c b/stand/common/gfx_fb.c
--- a/stand/common/gfx_fb.c
+++ b/stand/common/gfx_fb.c
@@ -751,14 +751,16 @@
#if defined(EFI)
EFI_STATUS status;
EFI_GRAPHICS_OUTPUT *gop = gfx_state.tg_private;
- extern int boot_services_gone;
EFI_TPL tpl;
/*
- * We assume Blt() does work, if not, we will need to build
- * exception list case by case.
+ * We assume Blt() does work, if not, we will need to build exception
+ * list case by case. We only have boot services during part of our
+ * exectution. Once terminate boot services, these operations cannot be
+ * done as they are provided by protocols that disappear when exit
+ * boot services.
*/
- if (gop != NULL && boot_services_gone == 0) {
+ if (gop != NULL && boot_services_active) {
tpl = BS->RaiseTPL(TPL_NOTIFY);
switch (BltOperation) {
case GfxFbBltVideoFill:
diff --git a/stand/efi/include/efi.h b/stand/efi/include/efi.h
--- a/stand/efi/include/efi.h
+++ b/stand/efi/include/efi.h
@@ -60,11 +60,13 @@
#include "efitcp.h"
#include "efipoint.h"
#include "efiuga.h"
+#include <sys/types.h>
/*
* Global variables
*/
extern EFI_LOADED_IMAGE *boot_img;
+extern bool boot_services_active;
/*
* FreeBSD UUID
diff --git a/stand/efi/libefi/efi_console.c b/stand/efi/libefi/efi_console.c
--- a/stand/efi/libefi/efi_console.c
+++ b/stand/efi/libefi/efi_console.c
@@ -37,14 +37,15 @@
#include <framebuffer.h>
#include "bootstrap.h"
-extern int boot_services_gone;
extern EFI_GUID gop_guid;
+
+bool boot_services_active = true; /* boot services active first thing in main */
+
static EFI_GUID simple_input_ex_guid = EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID;
static SIMPLE_TEXT_OUTPUT_INTERFACE *conout;
static SIMPLE_INPUT_INTERFACE *conin;
static EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *coninex;
static bool efi_started;
-
static int mode; /* Does ConOut have serial console? */
static uint32_t utf8_left;
@@ -177,7 +178,7 @@
teken_gfx_t *state = arg;
UINTN col, row;
- if (boot_services_gone)
+ if (!boot_services_active)
return;
row = p->tp_row;
@@ -238,7 +239,7 @@
EFI_STATUS status;
int idx;
- if (boot_services_gone)
+ if (!boot_services_active)
return;
idx = p->tp_col + p->tp_row * state->tg_tp.tp_col;
@@ -258,7 +259,7 @@
teken_gfx_t *state = arg;
teken_pos_t p;
- if (boot_services_gone)
+ if (!boot_services_active)
return;
if (state->tg_cursor_visible)
@@ -313,7 +314,7 @@
int nrow, ncol, x, y; /* Has to be signed - >= 0 comparison */
bool scroll = false;
- if (boot_services_gone)
+ if (!boot_services_active)
return;
/*
@@ -369,7 +370,7 @@
{
teken_gfx_t *state = arg;
- if (boot_services_gone)
+ if (!boot_services_active)
return;
switch (cmd) {
@@ -739,6 +740,8 @@
static void
efi_term_emu(int c)
{
+ if (!boot_services_active)
+ return;
#ifdef TERM_EMU
static int ansi_col[] = {
0, 4, 2, 6, 1, 5, 3, 7
@@ -746,9 +749,6 @@
int t, i;
EFI_STATUS status;
- if (boot_services_gone)
- return;
-
switch (esc) {
case 0:
switch (c) {
@@ -858,8 +858,7 @@
break;
}
#else
- if (!boot_services_gone)
- efi_cons_rawputchar(c);
+ efi_cons_rawputchar(c);
#endif
}
diff --git a/stand/efi/loader/bootinfo.c b/stand/efi/loader/bootinfo.c
--- a/stand/efi/loader/bootinfo.c
+++ b/stand/efi/loader/bootinfo.c
@@ -63,8 +63,6 @@
int bi_load(char *args, vm_offset_t *modulep, vm_offset_t *kernendp,
bool exit_bs);
-int boot_services_gone;
-
static int
bi_getboothowto(char *kargs)
{
@@ -397,7 +395,7 @@
break;
status = BS->ExitBootServices(IH, efi_mapkey);
if (!EFI_ERROR(status)) {
- boot_services_gone = 1;
+ boot_services_active = false;
break;
}
}
diff --git a/stand/efi/loader/copy.c b/stand/efi/loader/copy.c
--- a/stand/efi/loader/copy.c
+++ b/stand/efi/loader/copy.c
@@ -42,8 +42,6 @@
#define M(x) ((x) * 1024 * 1024)
#define G(x) (1UL * (x) * 1024 * 1024 * 1024)
-extern int boot_services_gone;
-
#if defined(__i386__) || defined(__amd64__)
#include <machine/cpufunc.h>
#include <machine/specialreg.h>
@@ -370,7 +368,7 @@
if (end + staging_slop <= staging_end)
return (true);
- if (boot_services_gone) {
+ if (!boot_services_active) {
if (end <= staging_end)
return (true);
panic("efi_check_space: cannot expand staging area "

File Metadata

Mime Type
text/plain
Expires
Mon, Dec 2, 11:39 PM (21 h, 43 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14994628
Default Alt Text
D31814.diff (4 KB)

Event Timeline