X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fi386%2Fboot%2Fvideo.S;h=668b99600e2a1b68f1e7c1272240f5610f3af7b6;hb=43bc926fffd92024b46cafaf7350d669ba9ca884;hp=a6e043c46e666e8605afa31156e07bbb40a33923;hpb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;p=linux-2.6.git diff --git a/arch/i386/boot/video.S b/arch/i386/boot/video.S index a6e043c46..668b99600 100644 --- a/arch/i386/boot/video.S +++ b/arch/i386/boot/video.S @@ -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,36 +1933,48 @@ skip10: movb %ah, %al ret store_edid: - pushw %es # just save all registers - pushw %ax +#ifdef CONFIG_FB_FIRMWARE_EDID + pushw %es # just save all registers + pushw %ax pushw %bx pushw %cx pushw %dx pushw %di - pushw %fs + pushw %fs popw %es movl $0x13131313, %eax # memset block with 0x13 movw $32, %cx - movw $0x440, %di + movw $0x140, %di cld - rep - stosl + rep + stosl - movw $0x4f15, %ax # do VBE/DDC - movw $0x01, %bx + movw $0x4f15, %ax # do VBE/DDC + movw $0x00, %bx # INSTALLATION CHECK / CAPABILITIES movw $0x00, %cx - movw $0x01, %dx - movw $0x440, %di - int $0x10 + 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 - popw %di # restore all registers +no_edid: + popw %di # restore all registers popw %dx popw %cx popw %bx popw %ax - popw %es + popw %es +#endif ret # VIDEO_SELECT-only variables