vgabios: Add support for VBE get/set dac palette format (func 08).
[seabios.git] / vgasrc / bochsvga.c
index e6ab7941d63695ce177b6307536a8d3f7904ee2e..0a36afc5f3a11389807bf93b0f2a5d00ceff16d4 100644 (file)
@@ -180,6 +180,27 @@ bochsvga_set_displaystart(struct vgamode_s *vmode_g, int val)
     return 0;
 }
 
+int
+bochsvga_get_dacformat(struct vgamode_s *vmode_g)
+{
+    u16 en = dispi_read(VBE_DISPI_INDEX_ENABLE);
+    return (en & VBE_DISPI_8BIT_DAC) ? 8 : 6;
+}
+
+int
+bochsvga_set_dacformat(struct vgamode_s *vmode_g, int val)
+{
+    u16 en = dispi_read(VBE_DISPI_INDEX_ENABLE);
+    if (val == 6)
+        en &= ~VBE_DISPI_8BIT_DAC;
+    else if (val == 8)
+        en |= VBE_DISPI_8BIT_DAC;
+    else
+        return -1;
+    dispi_write(VBE_DISPI_INDEX_ENABLE, en);
+    return 0;
+}
+
 
 /****************************************************************
  * Mode setting
@@ -258,6 +279,9 @@ bochsvga_init(void)
 
     dispi_write(VBE_DISPI_INDEX_ID, VBE_DISPI_ID5);
 
+    if (GET_GLOBAL(HaveRunInit))
+        return 0;
+
     u32 lfb_addr = VBE_DISPI_LFB_PHYSICAL_ADDRESS;
     int bdf = GET_GLOBAL(VgaBDF);
     if (CONFIG_VGA_PCI && bdf >= 0) {