Hi I hereby propose to update 915resolution in our stable pool. It includes support for some new chipsets, which makes it more valuable for etch. The full debdiff is attached. Cheers Steffen
diff -Nru /tmp/N4v6Yvdi0d/915resolution-0.5.2/915resolution.c /tmp/UThDkggXop/915resolution-0.5.3/915resolution.c --- /tmp/N4v6Yvdi0d/915resolution-0.5.2/915resolution.c 2006-02-02 14:28:34.000000000 +0000 +++ /tmp/UThDkggXop/915resolution-0.5.3/915resolution.c 2007-04-15 10:46:56.000000000 +0000 @@ -41,7 +41,7 @@ #define MODE_TABLE_OFFSET_845G 617 -#define VERSION "0.5.2" +#define VERSION "0.5.3" #define ATI_SIGNATURE1 "ATI MOBILITY RADEON" #define ATI_SIGNATURE2 "ATI Technologies Inc" @@ -55,10 +55,14 @@ typedef unsigned int cardinal; typedef enum { - CT_UNKWN, CT_845G, CT_855GM, CT_865G, CT_915G, CT_915GM, CT_945G, CT_945GM + CT_UNKWN, CT_830, CT_845G, CT_855GM, CT_865G, CT_915G, CT_915GM, CT_945G, CT_945GM, + CT_946GZ, CT_G965, CT_Q965 } chipset_type; -char * chipset_type_names[] = {"UNKNOWN", "845G", "855GM", "865G", "915G", "915GM", "945G", "945GM"}; +char * chipset_type_names[] = { + "UNKNOWN", "830", "845G", "855GM", "865G", "915G", "915GM", "945G", "945GM", + "946GZ", "G965", "Q965" +}; typedef enum { BT_UNKWN, BT_1, BT_2, BT_3 @@ -104,7 +108,9 @@ } __attribute__((packed)) vbios_modeline_type2; typedef struct { - byte unknown[6]; + byte xchars; + byte ychars; + byte unknown[4]; vbios_modeline_type2 modelines[]; } __attribute__((packed)) vbios_resolution_type2; @@ -140,8 +146,6 @@ typedef struct { - boolean file; - cardinal chipset_id; chipset_type chipset; bios_type bios; @@ -177,6 +181,10 @@ chipset_type type; switch (id) { + case 0x35758086: + type = CT_830; + break; + case 0x25608086: type = CT_845G; break; @@ -205,6 +213,18 @@ type = CT_945GM; break; + case 0x29708086: + type = CT_946GZ; + break; + + case 0x29a08086: + type = CT_G965; + break; + + case 0x29908086: + type = CT_Q965; + break; + default: type = CT_UNKWN; break; @@ -467,45 +487,39 @@ void unlock_vbios(vbios_map * map) { - if (!map->file) { - assert(!map->unlocked); + assert(!map->unlocked); - map->unlocked = TRUE; + map->unlocked = TRUE; + + switch (map->chipset) { + case CT_UNKWN: + break; + case CT_830: + case CT_855GM: + outl(0x8000005a, 0xcf8); + map->b1 = inb(0xcfe); - switch (map->chipset) { - case CT_UNKWN: - break; - case CT_855GM: - outl(0x8000005a, 0xcf8); - map->b1 = inb(0xcfe); - - outl(0x8000005a, 0xcf8); - outb(0x33, 0xcfe); - break; - case CT_845G: - case CT_865G: - case CT_915G: - case CT_915GM: - case CT_945G: - case CT_945GM: - outl(0x80000090, 0xcf8); - map->b1 = inb(0xcfd); - map->b2 = inb(0xcfe); - - outl(0x80000090, 0xcf8); - outb(0x33, 0xcfd); - outb(0x33, 0xcfe); - break; - } - } - -#if DEBUG - { - cardinal t = inl(0xcfc); - printf("unlock PAM: (0x%08x)\n", t); + outl(0x8000005a, 0xcf8); + outb(0x33, 0xcfe); + break; + case CT_845G: + case CT_865G: + case CT_915G: + case CT_915GM: + case CT_945G: + case CT_945GM: + case CT_946GZ: + case CT_G965: + case CT_Q965: + outl(0x80000090, 0xcf8); + map->b1 = inb(0xcfd); + map->b2 = inb(0xcfe); + + outl(0x80000090, 0xcf8); + outb(0x33, 0xcfd); + outb(0x33, 0xcfe); + break; } -#endif - #if DEBUG { @@ -513,41 +527,35 @@ printf("unlock PAM: (0x%08x)\n", t); } #endif - } void relock_vbios(vbios_map * map) { - if (!map->file) { - assert(map->unlocked); - map->unlocked = FALSE; - - switch (map->chipset) { - case CT_UNKWN: - break; - case CT_855GM: - outl(0x8000005a, 0xcf8); - outb(map->b1, 0xcfe); - break; - case CT_845G: - case CT_865G: - case CT_915G: - case CT_915GM: - case CT_945G: - case CT_945GM: - outl(0x80000090, 0xcf8); - outb(map->b1, 0xcfd); - outb(map->b2, 0xcfe); - break; - } - } - -#if DEBUG - { - cardinal t = inl(0xcfc); - printf("relock PAM: (0x%08x)\n", t); + assert(map->unlocked); + map->unlocked = FALSE; + + switch (map->chipset) { + case CT_UNKWN: + break; + case CT_830: + case CT_855GM: + outl(0x8000005a, 0xcf8); + outb(map->b1, 0xcfe); + break; + case CT_845G: + case CT_865G: + case CT_915G: + case CT_915GM: + case CT_945G: + case CT_945GM: + case CT_946GZ: + case CT_G965: + case CT_Q965: + outl(0x80000090, 0xcf8); + outb(map->b1, 0xcfd); + outb(map->b2, 0xcfe); + break; } -#endif #if DEBUG { @@ -611,7 +619,29 @@ } } +static void gtf_timings(int x, int y, int freq, + unsigned long *clock, + word *hsyncstart, word *hsyncend, word *hblank, + word *vsyncstart, word *vsyncend, word *vblank) +{ + int hbl, vbl, vfreq; + + vbl = y + (y+1)/(20000.0/(11*freq) - 1) + 1.5; + vfreq = vbl * freq; + hbl = 16 * (int)(x * (30.0 - 300000.0 / vfreq) / + (70.0 + 300000.0 / vfreq) / 16.0 + 0.5); + + *vsyncstart = y; + *vsyncend = y + 3; + *vblank = vbl - 1; + *hsyncstart = x + hbl / 2 - (x + hbl + 50) / 100 * 8 - 1; + *hsyncend = x + hbl / 2 - 1; + *hblank = x + hbl - 1; + *clock = (x + hbl) * vfreq / 1000; +} + void set_mode(vbios_map * map, cardinal mode, cardinal x, cardinal y, cardinal bp, cardinal htotal, cardinal vtotal) { + int xprev, yprev; cardinal i, j; for (i=0; i < map->mode_table_size; i++) { @@ -641,29 +671,32 @@ { vbios_resolution_type2 * res = map_type2_resolution(map, map->mode_table[i].resolution); + res->xchars = x / 8; + res->ychars = y / 16 - 1; + xprev = res->modelines[0].x1; + yprev = res->modelines[0].y1; + for(j=0; j < 3; j++) { vbios_modeline_type2 * modeline = &res->modelines[j]; - if (modeline->x1 == res->modelines[0].x1) { + if (modeline->x1 == xprev && modeline->y1 == yprev) { modeline->x1 = modeline->x2 = x-1; modeline->y1 = modeline->y2 = y-1; - if (htotal) - modeline->htotal = htotal; - if (vtotal) - modeline->vtotal = vtotal; - - /* WARNING: I don't know at all what are the formulas - to calculate these values ! - The following lines are only an example. - */ - modeline->clock = freqs[j] * x; - - modeline->hsyncstart = x+10; - modeline->hsyncend = x+20; - - modeline->vsyncstart = y+10; - modeline->vsyncend = y+20; + gtf_timings(x, y, freqs[j], &modeline->clock, + &modeline->hsyncstart, &modeline->hsyncend, + &modeline->hblank, &modeline->vsyncstart, + &modeline->vsyncend, &modeline->vblank); + + if (htotal) + modeline->htotal = htotal; + else + modeline->htotal = modeline->hblank; + + if (vtotal) + modeline->vtotal = vtotal; + else + modeline->vtotal = modeline->vblank; } } } @@ -672,34 +705,31 @@ { vbios_resolution_type3 * res = map_type3_resolution(map, map->mode_table[i].resolution); + xprev = res->modelines[0].x1; + yprev = res->modelines[0].y1; + for (j=0; j < 3; j++) { vbios_modeline_type3 * modeline = &res->modelines[j]; - if (modeline->x1 == res->modelines[0].x1) { + if (modeline->x1 == xprev && modeline->y1 == yprev) { modeline->x1 = modeline->x2 = x-1; modeline->y1 = modeline->y2 = y-1; - if (htotal) - modeline->htotal = htotal; - - if (vtotal) - modeline->vtotal = vtotal; + gtf_timings(x, y, freqs[j], &modeline->clock, + &modeline->hsyncstart, &modeline->hsyncend, + &modeline->hblank, &modeline->vsyncstart, + &modeline->vsyncend, &modeline->vblank); + if (htotal) + modeline->htotal = htotal; + else + modeline->htotal = modeline->hblank; + if (vtotal) + modeline->vtotal = vtotal; + else + modeline->vtotal = modeline->vblank; - /* WARNING: I don't know at all what are the formulas - to calculate these values ! - The following lines are only an example. - */ - - modeline->clock = freqs[i] * x; - - modeline->hsyncstart = x+10; - modeline->hsyncend = x+20; - - modeline->vsyncstart = y+10; - modeline->vsyncend = y+20; - - modeline->timing_h = 0x2ff; - modeline->timing_v = 0x4ff; + modeline->timing_h = y-1; + modeline->timing_v = x-1; } } } @@ -773,6 +803,15 @@ else if (!strcmp(argv[index], "945GM")) { *forced_chipset = CT_945GM; } + else if (!strcmp(argv[index], "946GZ")) { + *forced_chipset = CT_946GZ; + } + else if (!strcmp(argv[index], "G965")) { + *forced_chipset = CT_G965; + } + else if (!strcmp(argv[index], "Q965")) { + *forced_chipset = CT_Q965; + } else { *forced_chipset = CT_UNKWN; } @@ -871,9 +910,13 @@ } if (mode!=0 && x!=0 && y!=0) { - unlock_vbios(map); + if (!filename) + unlock_vbios(map); + set_mode(map, mode, x, y, bp, htotal, vtotal); - relock_vbios(map); + + if (!filename) + relock_vbios(map); printf("Patch mode %02x to resolution %dx%d complete\n", mode, x, y); diff -Nru /tmp/N4v6Yvdi0d/915resolution-0.5.2/changes.log /tmp/UThDkggXop/915resolution-0.5.3/changes.log --- /tmp/N4v6Yvdi0d/915resolution-0.5.2/changes.log 2006-02-02 14:18:19.000000000 +0000 +++ /tmp/UThDkggXop/915resolution-0.5.3/changes.log 2007-04-15 10:48:55.000000000 +0000 @@ -1,3 +1,7 @@ +Version 0.5.3 Apr 15, 2007 + - Added support for 830, 946GZ, G965, Q965 + - Fixed bug when mapping to file + - Added correct timing routines Version 0.5.2 Feb 2, 2006 - Added htotal/vtotal feature for BIOS type 1 (865G) from Sergey Saukh (thelich at yandex.ru) diff -Nru /tmp/N4v6Yvdi0d/915resolution-0.5.2/debian/README.Debian /tmp/UThDkggXop/915resolution-0.5.3/debian/README.Debian --- /tmp/N4v6Yvdi0d/915resolution-0.5.2/debian/README.Debian 2007-11-07 08:26:08.000000000 +0000 +++ /tmp/UThDkggXop/915resolution-0.5.3/debian/README.Debian 2007-11-07 08:26:09.000000000 +0000 @@ -9,7 +9,7 @@ 2. You will get a mode list such as: -Intel 800/900 Series VBIOS Hack : version 0.4.7 +Intel 800/900 Series VBIOS Hack : version 0.5.2 Chipset: 915GM BIOS: TYPE 1 @@ -47,8 +47,8 @@ 4. Reboot or run "/etc/init.d/915resolution start" by hand. -5. To use specified resolution, you need to modify your X configuration - file (If you use Xorg, it's /etc/X11/xorg.conf) +5. To use specified resolution, you need to modify your Xorg + configuration file (/etc/X11/xorg.conf) For example: SubSection "Display" Depth 24 @@ -61,10 +61,10 @@ 915resolution with suspend/resume function: If you are planning to use the suspend/resume mechanism and you are using a -video mode that requires to run 915resolution, it's quite possible that your +video mode that requires 915resolution, it's quite possible that your video card requires you to run 915resolution also on resume. If you use the hibernate package there is an option to call 915resolution on resume. -If you want to use it just activate it in the file "etc/hibernate/common.conf" . +If you want to use it just activate it in the file "/etc/hibernate/common.conf" . There is an uncommented line called "# Runi915resolution yes" . diff -Nru /tmp/N4v6Yvdi0d/915resolution-0.5.2/debian/changelog /tmp/UThDkggXop/915resolution-0.5.3/debian/changelog --- /tmp/N4v6Yvdi0d/915resolution-0.5.2/debian/changelog 2007-11-07 08:26:08.000000000 +0000 +++ /tmp/UThDkggXop/915resolution-0.5.3/debian/changelog 2007-11-07 08:26:09.000000000 +0000 @@ -1,3 +1,35 @@ +915resolution (0.5.3-0.0.edu.etch.1) terra; urgency=low + + * Backport for Debian-Edu/Skolelinux terra (etch) + + -- Steffen Joeris <white@debian.org> Tue, 23 Oct 2007 10:53:17 +0000 + +915resolution (0.5.3-1) unstable; urgency=low + + * New upstream version + * Update the 01-add-chipsets.dpatch (Closes: #430741) + + Thanks to Kyle McMartin + + -- Steffen Joeris <white@debian.org> Sun, 01 Jul 2007 19:37:58 +0200 + +915resolution (0.5.2-11) unstable; urgency=low + + * Slightly improving README.Debian by adding the changes suggested + by Pete Boyd (Closes: #412182) + * Address the issue that this package becomes obsolete with the newer + xorg (Closes: #420283) + + -- Steffen Joeris <white@debian.org> Wed, 16 May 2007 15:56:42 +1000 + +915resolution (0.5.2-10) unstable; urgency=low + + * Remove bashism from init script when trying to see if the system + is compatible with 915resolution + * Change my maintainer address + + -- Steffen Joeris <white@debian.org> Sat, 10 Feb 2007 20:43:44 +1100 + 915resolution (0.5.2-9) unstable; urgency=medium * Fix bad typo in init script (Closes: #401820) diff -Nru /tmp/N4v6Yvdi0d/915resolution-0.5.2/debian/control /tmp/UThDkggXop/915resolution-0.5.3/debian/control --- /tmp/N4v6Yvdi0d/915resolution-0.5.2/debian/control 2007-11-07 08:26:08.000000000 +0000 +++ /tmp/UThDkggXop/915resolution-0.5.3/debian/control 2007-11-07 08:26:09.000000000 +0000 @@ -1,7 +1,7 @@ Source: 915resolution Section: x11 Priority: extra -Maintainer: Steffen Joeris <steffen.joeris@skolelinux.de> +Maintainer: Steffen Joeris <white@debian.org> Build-Depends: debhelper (>= 5), dpatch Standards-Version: 3.7.2 @@ -26,4 +26,8 @@ and before X is launched, see /usr/share/doc/915resolution/README.Debian for information about configuring the provided initscript. . + The 915resolution package becomes obsolete with the newer xorg, + especially if you have the xserver-xorg-video-intel package installed. + Newer xorg brings modesetting support by default. + . Homepage: http://www.geocities.com/stomljen/ diff -Nru /tmp/N4v6Yvdi0d/915resolution-0.5.2/debian/init /tmp/UThDkggXop/915resolution-0.5.3/debian/init --- /tmp/N4v6Yvdi0d/915resolution-0.5.2/debian/init 2007-11-07 08:26:08.000000000 +0000 +++ /tmp/UThDkggXop/915resolution-0.5.3/debian/init 2007-11-07 08:26:09.000000000 +0000 @@ -31,7 +31,7 @@ exit 0 } -$PROG -l &>/dev/null || wrong_chipset +$PROG -l >/dev/null 2>&1 || wrong_chipset if [ "$MODE" = auto -a \! -x "$VBETOOL" ] || [ "$MODE" != auto -a \( -z "$MODE" -o -z "$XRESO" -o -z "$YRESO" \) ] ; then echo "*** Your 915resolution hasn't been configured! ***" diff -Nru /tmp/N4v6Yvdi0d/915resolution-0.5.2/debian/patches/01-add-chipsets.dpatch /tmp/UThDkggXop/915resolution-0.5.3/debian/patches/01-add-chipsets.dpatch --- /tmp/N4v6Yvdi0d/915resolution-0.5.2/debian/patches/01-add-chipsets.dpatch 2007-11-07 08:26:08.000000000 +0000 +++ /tmp/UThDkggXop/915resolution-0.5.3/debian/patches/01-add-chipsets.dpatch 2007-11-07 08:26:09.000000000 +0000 @@ -1,81 +1,88 @@ #! /bin/sh /usr/share/dpatch/dpatch-run -## 01-add-chipsets.dpatch +## 01-new-chipsets.dpatch ## ## All lines beginning with `## DP:' are a description of the patch. -## DP: Add support for some chipsets to 915resolution +## DP: Add support for some chipsets @DPATCH@ -diff -urN 915resolution-0.5.2.old/915resolution.c 915resolution-0.5.2/915resolution.c ---- 915resolution-0.5.2.old/915resolution.c 2006-09-28 13:08:29.000000000 +0200 -+++ 915resolution-0.5.2/915resolution.c 2006-09-28 13:16:49.000000000 +0200 -@@ -55,10 +55,14 @@ - typedef unsigned int cardinal; +diff -urNad 915resolution-0.5.3~/915resolution.c 915resolution-0.5.3/915resolution.c +--- 915resolution-0.5.3~/915resolution.c 2007-06-26 13:42:25.000000000 +0000 ++++ 915resolution-0.5.3/915resolution.c 2007-06-26 13:46:02.000000000 +0000 +@@ -56,12 +56,12 @@ typedef enum { -- CT_UNKWN, CT_845G, CT_855GM, CT_865G, CT_915G, CT_915GM, CT_945G, CT_945GM -+ CT_UNKWN, CT_845G, CT_855GM, CT_865G, CT_915G, CT_915GM, CT_945G, CT_945GM, -+ CT_946GZ, CT_965Q, CT_965G + CT_UNKWN, CT_830, CT_845G, CT_855GM, CT_865G, CT_915G, CT_915GM, CT_945G, CT_945GM, +- CT_946GZ, CT_G965, CT_Q965 ++ CT_946GZ, CT_G965, CT_Q965, CT_965GM, CT_G33, CT_Q33, CT_Q35 } chipset_type; --char * chipset_type_names[] = {"UNKNOWN", "845G", "855GM", "865G", "915G", "915GM", "945G", "945GM"}; -+char * chipset_type_names[] = { -+ "UNKNOWN", "845G", "855GM", "865G", "915G", "915GM", "945G", "945GM", -+ "946GZ", "965Q", "965G" -+}; + char * chipset_type_names[] = { + "UNKNOWN", "830", "845G", "855GM", "865G", "915G", "915GM", "945G", "945GM", +- "946GZ", "G965", "Q965" ++ "946GZ", "G965", "Q965", "965GM", "G33", "Q33", "Q35" + }; typedef enum { - BT_UNKWN, BT_1, BT_2, BT_3 -@@ -205,6 +209,18 @@ - type = CT_945GM; +@@ -225,6 +225,22 @@ + type = CT_Q965; break; -+ case 0x29708086: -+ type = CT_946GZ; ++ case 0x2a008086: ++ type = CT_965GM; + break; + -+ case 0x29908086: -+ type = CT_965Q; ++ case 0x29c08086: ++ type = CT_G33; + break; + -+ case 0x29a08086: -+ type = CT_965G; ++ case 0x29b08086: ++ type = CT_Q35; + break; -+ ++ ++ case 0x29d08086: ++ type = CT_Q33; ++ break; ++ default: type = CT_UNKWN; break; -@@ -488,6 +504,9 @@ - case CT_915GM: - case CT_945G: - case CT_945GM: -+ case CT_946GZ: -+ case CT_965Q: -+ case CT_965G: - outl(0x80000090, 0xcf8); - map->b1 = inb(0xcfd); - map->b2 = inb(0xcfe); -@@ -535,6 +554,9 @@ - case CT_915GM: - case CT_945G: - case CT_945GM: -+ case CT_946GZ: -+ case CT_965Q: -+ case CT_965G: - outl(0x80000090, 0xcf8); - outb(map->b1, 0xcfd); - outb(map->b2, 0xcfe); -@@ -773,6 +795,15 @@ - else if (!strcmp(argv[index], "945GM")) { - *forced_chipset = CT_945GM; +@@ -511,6 +527,10 @@ + case CT_946GZ: + case CT_G965: + case CT_Q965: ++ case CT_965GM: ++ case CT_G33: ++ case CT_Q35: ++ case CT_Q33: + outl(0x80000090, 0xcf8); + map->b1 = inb(0xcfd); + map->b2 = inb(0xcfe); +@@ -551,6 +571,10 @@ + case CT_946GZ: + case CT_G965: + case CT_Q965: ++ case CT_965GM: ++ case CT_G33: ++ case CT_Q35: ++ case CT_Q33: + outl(0x80000090, 0xcf8); + outb(map->b1, 0xcfd); + outb(map->b2, 0xcfe); +@@ -812,6 +836,18 @@ + else if (!strcmp(argv[index], "Q965")) { + *forced_chipset = CT_Q965; } -+ else if (!strcmp(argv[index], "946GZ")) { -+ *forced_chipset = CT_946GZ; ++ else if (!strcmp(argv[index], "965GM")) { ++ *forced_chipset = CT_965GM; ++ } ++ else if (!strcmp(argv[index], "G33")) { ++ *forced_chipset = CT_G33; + } -+ else if (!strcmp(argv[index], "965Q")) { -+ *forced_chipset = CT_965Q; ++ else if (!strcmp(argv[index], "Q35")) { ++ *forced_chipset = CT_Q35; + } -+ else if (!strcmp(argv[index], "965G")) { -+ *forced_chipset = CT_965G; ++ else if (!strcmp(argv[index], "Q33")) { ++ *forced_chipset = CT_Q33; + } else { *forced_chipset = CT_UNKWN; diff -Nru /tmp/N4v6Yvdi0d/915resolution-0.5.2/debian/rules /tmp/UThDkggXop/915resolution-0.5.3/debian/rules --- /tmp/N4v6Yvdi0d/915resolution-0.5.2/debian/rules 2007-11-07 08:26:08.000000000 +0000 +++ /tmp/UThDkggXop/915resolution-0.5.3/debian/rules 2007-11-07 08:26:09.000000000 +0000 @@ -16,7 +16,7 @@ dh_testdir dh_testroot rm -f build-stamp - -$(MAKE) clean + $(MAKE) clean dh_clean install: build
Attachment:
signature.asc
Description: This is a digitally signed message part.