Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / arch / i386 / boot / video.S
index 0587477..668b996 100644 (file)
@@ -97,6 +97,7 @@
 #define PARAM_VESAPM_OFF       0x30
 #define PARAM_LFB_PAGES                0x32
 #define PARAM_VESA_ATTRIB      0x34
+#define PARAM_CAPABILITIES     0x36
 
 /* Define DO_STORE according to CONFIG_VIDEO_RETAIN */
 #ifdef CONFIG_VIDEO_RETAIN
@@ -126,8 +127,12 @@ video:     pushw   %ds             # We use different segments
        call    mode_set                        # Set the mode
        jc      vid1
 
+#if 0
        leaw    badmdt, %si                     # Invalid mode ID
        call    prtstr
+#else
+       jmp     vid1
+#endif /* CONFIG_VIDEO_IGNORE_BAD_MODE */
 vid2:  call    mode_menu
 vid1:
 #ifdef CONFIG_VIDEO_RETAIN
@@ -233,6 +238,10 @@ mopar_gr:
        movw    18(%di), %ax
        movl    %eax, %fs:(PARAM_LFB_SIZE)
 
+# store mode capabilities
+       movl 10(%di), %eax
+       movl %eax, %fs:(PARAM_CAPABILITIES)
+
 # switching the DAC to 8-bit is for <= 8 bpp only
        movw    %fs:(PARAM_LFB_DEPTH), %ax
        cmpw    $8, %ax
@@ -1924,6 +1933,7 @@ skip10:   movb    %ah, %al
        ret
 
 store_edid:
+#ifdef CONFIG_FB_FIRMWARE_EDID
        pushw   %es                             # just save all registers
        pushw   %ax
        pushw   %bx
@@ -1942,18 +1952,29 @@ store_edid:
        stosl
 
        movw    $0x4f15, %ax                    # do VBE/DDC
-       movw    $0x01, %bx
+       movw    $0x00, %bx                      # INSTALLATION CHECK / CAPABILITIES
        movw    $0x00, %cx
-       movw    $0x01, %dx
+       movw    $0x00, %dx
+       movw    $0x140, %di
+       int             $0x10
+       cmpb    $0x01, %ah
+       je              no_edid
+
+       movw    $0x4f15, %ax                    # do VBE/DDC
+       movw    $0x01, %bx                      # READ_EDID
+       movw    $0x00, %cx
+       movw    $0x00, %dx
        movw    $0x140, %di
        int     $0x10
 
+no_edid:
        popw    %di                             # restore all registers
        popw    %dx
        popw    %cx
        popw    %bx
        popw    %ax
        popw    %es
+#endif
        ret
 
 # VIDEO_SELECT-only variables