gop: Readd preset mode storage

This commit is contained in:
mintsuki 2023-07-29 03:12:31 -05:00
parent 418f8d7280
commit 474fc105a5

View File

@ -171,8 +171,19 @@ static struct fb_info *get_mode_list(size_t *count, EFI_GRAPHICS_OUTPUT_PROTOCOL
return ret; return ret;
} }
#define MAX_PRESET_MODES 128
no_unwind static int preset_modes[MAX_PRESET_MODES];
no_unwind static bool preset_modes_initialised = false;
void init_gop(struct fb_info **ret, size_t *_fbs_count, void init_gop(struct fb_info **ret, size_t *_fbs_count,
uint64_t target_width, uint64_t target_height, uint16_t target_bpp) { uint64_t target_width, uint64_t target_height, uint16_t target_bpp) {
if (preset_modes_initialised == false) {
for (size_t i = 0; i < MAX_PRESET_MODES; i++) {
preset_modes[i] = -1;
}
preset_modes_initialised = true;
}
EFI_STATUS status; EFI_STATUS status;
EFI_HANDLE tmp_handles[1]; EFI_HANDLE tmp_handles[1];
@ -216,7 +227,7 @@ void init_gop(struct fb_info **ret, size_t *_fbs_count,
}; };
size_t fbs_count = 0; size_t fbs_count = 0;
for (size_t i = 0; i < handles_count; i++) { for (size_t i = 0; i < handles_count && i < MAX_PRESET_MODES; i++) {
struct fb_info *fb = &(*ret)[fbs_count]; struct fb_info *fb = &(*ret)[fbs_count];
uint64_t _target_width = target_width; uint64_t _target_width = target_width;
@ -249,7 +260,9 @@ void init_gop(struct fb_info **ret, size_t *_fbs_count,
continue; continue;
} }
int preset_mode = gop->Mode->Mode; if (preset_modes[i] == -1) {
preset_modes[i] = gop->Mode->Mode;
}
fb->edid = get_edid_info(handles[i]); fb->edid = get_edid_info(handles[i]);
@ -293,7 +306,7 @@ fallback:
if (current_fallback == 1) { if (current_fallback == 1) {
current_fallback++; current_fallback++;
if (try_mode(fb, gop, preset_mode, 0, 0, 0, *ret, fbs_count)) { if (try_mode(fb, gop, preset_modes[i], 0, 0, 0, *ret, fbs_count)) {
goto success; goto success;
} }
} }