summaryrefslogtreecommitdiff
path: root/include/console.h
blob: f56b1231a9fdd71a9d0fb4ba2646acfb53cc779d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// SPDX-License-Identifier: BSD-2-Clause-Patent

#ifndef SHIM_CONSOLE_H
#define SHIM_CONSOLE_H

#define Print(fmt, ...) \
	({"Do not directly call Print() use console_print() instead" = 1;});

#define PrintAt(fmt, ...) \
	({"Do not directly call PrintAt() use console_print_at() instead" = 1;});

#if !defined(EFI_WARN_UNKNOWN_GLYPH) && defined(EFI_WARN_UNKOWN_GLYPH)
#define EFI_WARN_UNKNOWN_GLYPH EFI_WARN_UNKOWN_GLYPH
#elif !defined(EFI_WARN_UNKNOWN_GLYPH)
#define EFI_WARN_UNKNOWN_GLYPH EFIWARN(1)
#endif

EFI_STATUS
console_get_keystroke(EFI_INPUT_KEY *key);
UINTN EFIAPI
console_print(const CHAR16 *fmt, ...);
UINTN EFIAPI
console_print_at(UINTN col, UINTN row, const CHAR16 *fmt, ...);
void
console_print_box_at(CHAR16 *str_arr[], int highlight,
		     int start_col, int start_row,
		     int size_cols, int size_rows,
		     int offset, int lines);
void
console_print_box(CHAR16 *str_arr[], int highlight);
int
console_yes_no(CHAR16 *str_arr[]);
int
console_select(CHAR16 *title[], CHAR16* selectors[], unsigned int start);
void
console_errorbox(CHAR16 *err);
void
console_error(CHAR16 *err, EFI_STATUS);
void
console_alertbox(CHAR16 **title);
void
console_notify(CHAR16 *string);
void
console_save_and_set_mode(SIMPLE_TEXT_OUTPUT_MODE * SavedMode);
void
console_restore_mode(SIMPLE_TEXT_OUTPUT_MODE * SavedMode);
int
console_countdown(CHAR16* title, const CHAR16* message, int timeout);
void
console_reset(void);
void
console_mode_handle(void);
#define NOSEL 0x7fffffff

typedef struct _EFI_CONSOLE_CONTROL_PROTOCOL   EFI_CONSOLE_CONTROL_PROTOCOL;

typedef enum {
  EfiConsoleControlScreenText,
  EfiConsoleControlScreenGraphics,
  EfiConsoleControlScreenMaxValue
} EFI_CONSOLE_CONTROL_SCREEN_MODE;

typedef
EFI_STATUS
(EFIAPI *EFI_CONSOLE_CONTROL_PROTOCOL_GET_MODE) (
  IN  EFI_CONSOLE_CONTROL_PROTOCOL      *This,
  OUT EFI_CONSOLE_CONTROL_SCREEN_MODE   *Mode,
  OUT BOOLEAN                           *GopUgaExists,  OPTIONAL
  OUT BOOLEAN                           *StdInLocked    OPTIONAL
  );

typedef
EFI_STATUS
(EFIAPI *EFI_CONSOLE_CONTROL_PROTOCOL_SET_MODE) (
  IN  EFI_CONSOLE_CONTROL_PROTOCOL      *This,
  IN  EFI_CONSOLE_CONTROL_SCREEN_MODE   Mode
  );

typedef
EFI_STATUS
(EFIAPI *EFI_CONSOLE_CONTROL_PROTOCOL_LOCK_STD_IN) (
  IN  EFI_CONSOLE_CONTROL_PROTOCOL      *This,
  IN CHAR16                             *Password
  );

struct _EFI_CONSOLE_CONTROL_PROTOCOL {
  EFI_CONSOLE_CONTROL_PROTOCOL_GET_MODE           GetMode;
  EFI_CONSOLE_CONTROL_PROTOCOL_SET_MODE           SetMode;
  EFI_CONSOLE_CONTROL_PROTOCOL_LOCK_STD_IN        LockStdIn;
};

extern VOID console_fini(VOID);
extern VOID setup_verbosity(VOID);
extern UINT32 verbose;
#ifndef SHIM_UNIT_TEST
#define dprint_(fmt, ...) ({							\
		UINTN __dprint_ret = 0;						\
		if (verbose)							\
			__dprint_ret = console_print((fmt), ##__VA_ARGS__);	\
		__dprint_ret;							\
	})
#define dprint(fmt, ...)                                              \
	dprint_(L"%a:%d:%a() " fmt, __FILE__, __LINE__ - 1, __func__, \
	        ##__VA_ARGS__)
#else
#define dprint_(...)
#define dprint(fmt, ...)
#endif

extern EFI_STATUS EFIAPI vdprint_(const CHAR16 *fmt, const char *file, int line,
                                  const char *func, ms_va_list args);
#define vdprint(fmt, ...) \
	vdprint_(fmt, __FILE__, __LINE__ - 1, __func__, ##__VA_ARGS__)

extern EFI_STATUS print_crypto_errors(EFI_STATUS rc, char *file, const char *func, int line);
#define crypterr(rc) print_crypto_errors((rc), __FILE__, __func__, __LINE__)

extern VOID msleep(unsigned long msecs);

/* This is used in various things to determine if we should print to the
 * console */
extern UINT8 in_protocol;

#endif /* SHIM_CONSOLE_H */