]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Add priorities support
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 12 Jun 2010 15:38:48 +0000 (17:38 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 12 Jun 2010 15:38:48 +0000 (17:38 +0200)
include/grub/video.h
video/efi_gop.c
video/efi_uga.c
video/emu/sdl.c
video/i386/pc/vbe.c
video/i386/pc/vga.c
video/ieee1275.c
video/sm712.c

index faf2973eff335ae05409f5a396629a40886d9109..03de1c27b12c5f9d47d0f1be1473ccd82af5b859 100644 (file)
@@ -183,9 +183,19 @@ typedef enum grub_video_driver_id
     GRUB_VIDEO_DRIVER_EFI_UGA,
     GRUB_VIDEO_DRIVER_EFI_GOP,
     GRUB_VIDEO_DRIVER_SM712,
-    GRUB_VIDEO_DRIVER_VGA
+    GRUB_VIDEO_DRIVER_VGA,
+    GRUB_VIDEO_DRIVER_SDL
   } grub_video_driver_id_t;
 
+typedef enum grub_video_adapter_prio
+  {
+    GRUB_VIDEO_ADAPTER_PRIO_FALLBACK = 60,
+    GRUB_VIDEO_ADAPTER_PRIO_FIRMWARE_DIRTY = 70,
+    GRUB_VIDEO_ADAPTER_PRIO_FIRMWARE = 80,
+    GRUB_VIDEO_ADAPTER_PRIO_NATIVE = 100
+  } grub_video_adapter_prio_t;
+
+
 struct grub_video_adapter
 {
   /* The next video adapter.  */
@@ -195,6 +205,8 @@ struct grub_video_adapter
   const char *name;
   grub_video_driver_id_t id;
 
+  grub_video_adapter_prio_t prio;
+
   /* Initialize the video adapter.  */
   grub_err_t (*init) (void);
 
@@ -269,8 +281,11 @@ extern grub_video_adapter_t EXPORT_VAR(grub_video_adapter_list);
 static inline void
 grub_video_register (grub_video_adapter_t adapter)
 {
-  grub_list_push (GRUB_AS_LIST_P (&grub_video_adapter_list),
-                 GRUB_AS_LIST (adapter));
+  grub_video_adapter_t *p;
+  for (p = &grub_video_adapter_list; *p && (*p)->prio > adapter->prio; 
+       p = &((*p)->next));
+  adapter->next = *p;
+  *p = adapter;
 }
 #endif
 
index 86a2881f8f49816d16a3cef04e2f0cbf1a95b3ef..4e79b8521c3f99062506a589e5a86c2f9b9e9dfc 100644 (file)
@@ -355,6 +355,8 @@ static struct grub_video_adapter grub_video_gop_adapter =
     .name = "EFI GOP driver",
     .id = GRUB_VIDEO_DRIVER_EFI_GOP,
 
+    .prio = GRUB_VIDEO_ADAPTER_PRIO_FIRMWARE,
+
     .init = grub_video_gop_init,
     .fini = grub_video_gop_fini,
     .setup = grub_video_gop_setup,
index eb4e6b42e55559ed3c2ddd1ea89b5f68442d04d4..6352d4342fc7f6e3c79a27b698b362ed9ebf2d59 100644 (file)
@@ -302,6 +302,8 @@ static struct grub_video_adapter grub_video_uga_adapter =
     .name = "EFI UGA driver",
     .id = GRUB_VIDEO_DRIVER_EFI_UGA,
 
+    .prio = GRUB_VIDEO_ADAPTER_PRIO_FIRMWARE_DIRTY,
+
     .init = grub_video_uga_init,
     .fini = grub_video_uga_fini,
     .setup = grub_video_uga_setup,
index d261db6b0975e8c45599529474c2cb0750c38722..d66b8b0c0ff31fc585867f6b5abc372547d4b22f 100644 (file)
@@ -200,6 +200,9 @@ grub_video_sdl_set_active_render_target (struct grub_video_render_target *target
 static struct grub_video_adapter grub_video_sdl_adapter =
   {
     .name = "SDL Video Driver",
+    .id = GRUB_VIDEO_DRIVER_SDL,
+
+    .prio = GRUB_VIDEO_ADAPTER_PRIO_FIRMWARE,
 
     .init = grub_video_sdl_init,
     .fini = grub_video_sdl_fini,
index 72b8f183184cbaea233cd8267595e60ee5fd2a6a..0cc9f8000c52b80e63829880dffe486de5fc64a4 100644 (file)
@@ -783,6 +783,8 @@ static struct grub_video_adapter grub_video_vbe_adapter =
     .name = "VESA BIOS Extension Video Driver",
     .id = GRUB_VIDEO_DRIVER_VBE,
 
+    .prio = GRUB_VIDEO_ADAPTER_PRIO_FIRMWARE,
+
     .init = grub_video_vbe_init,
     .fini = grub_video_vbe_fini,
     .setup = grub_video_vbe_setup,
index 222a71272bad6a93fc82526fe52993d9f1ce7c68..a4fd44ecdec46d887b9161d46bd7cfecbb990bf3 100644 (file)
@@ -375,6 +375,8 @@ static struct grub_video_adapter grub_video_vga_adapter =
     .name = "VGA Video Driver",
     .id = GRUB_VIDEO_DRIVER_VGA,
 
+    .prio = GRUB_VIDEO_ADAPTER_PRIO_FALLBACK,
+
     .init = grub_video_vga_init,
     .fini = grub_video_vga_fini,
     .setup = grub_video_vga_setup,
index 5c6bc1594e9481f546b5c31872a95c26eeaa39ae..9c9477c2bb499ffac7005dcad9dc60e4cff52a4c 100644 (file)
@@ -254,6 +254,8 @@ static struct grub_video_adapter grub_video_ieee1275_adapter =
   {
     .name = "IEEE1275 video driver",
 
+    .prio = GRUB_VIDEO_ADAPTER_PRIO_FIRMWARE,
+
     .init = grub_video_ieee1275_init,
     .fini = grub_video_ieee1275_fini,
     .setup = grub_video_ieee1275_setup,
index 33861beef201a7e4f096fe49e4942dc0ea1ed4a3..98ce523c916c87f90b4e6669a176bd1f6d44a2ee 100644 (file)
@@ -193,6 +193,8 @@ static struct grub_video_adapter grub_video_sm712_adapter =
     .name = "SM712 Video Driver",
     .id = GRUB_VIDEO_DRIVER_SM712,
 
+    .prio = GRUB_VIDEO_ADAPTER_PRIO_NATIVE,
+
     .init = grub_video_sm712_video_init,
     .fini = grub_video_sm712_video_fini,
     .setup = grub_video_sm712_setup,