1 | ␊ |
2 | /* Copied from 915 resolution created by steve tomljenovic␊ |
3 | *␊ |
4 | * This code is based on the techniques used in :␊ |
5 | *␊ |
6 | * - 855patch. Many thanks to Christian Zietz (czietz gmx net)␊ |
7 | * for demonstrating how to shadow the VBIOS into system RAM␊ |
8 | * and then modify it.␊ |
9 | *␊ |
10 | * - 1280patch by Andrew Tipton (andrewtipton null li).␊ |
11 | *␊ |
12 | * - 855resolution by Alain Poirier␊ |
13 | *␊ |
14 | * This source code is into the public domain.␊ |
15 | */␊ |
16 | #ifndef __915_RESOLUTION_H␊ |
17 | #define __915_RESOLUTION_H␊ |
18 | ␊ |
19 | #define NEW(a) ((a *)(malloc(sizeof(a))))␊ |
20 | #define FREE(a) (free(a))␊ |
21 | ␊ |
22 | #define VBIOS_START 0xc0000␊ |
23 | #define VBIOS_SIZE 0x10000␊ |
24 | ␊ |
25 | #define FALSE 0␊ |
26 | #define TRUE 1␊ |
27 | ␊ |
28 | #define MODE_TABLE_OFFSET_845G 617␊ |
29 | ␊ |
30 | ␊ |
31 | #define ATI_SIGNATURE1 "ATI MOBILITY RADEON"␊ |
32 | #define ATI_SIGNATURE2 "ATI Technologies Inc"␊ |
33 | #define NVIDIA_SIGNATURE "NVIDIA Corp"␊ |
34 | #define INTEL_SIGNATURE "Intel Corp"␊ |
35 | ␊ |
36 | ␊ |
37 | ␊ |
38 | ␊ |
39 | typedef enum {␊ |
40 | ␉CT_UNKWN, CT_830, CT_845G, CT_855GM, CT_865G, CT_915G, CT_915GM, CT_945G, CT_945GM, CT_945GME,␊ |
41 | ␉CT_946GZ, CT_G965, CT_Q965, CT_965GM, CT_500␊ |
42 | } chipset_type;␊ |
43 | ␊ |
44 | ␊ |
45 | typedef enum {␊ |
46 | ␉BT_UNKWN, BT_1, BT_2, BT_3␊ |
47 | } bios_type;␊ |
48 | ␊ |
49 | ␊ |
50 | typedef struct {␊ |
51 | ␉UInt8 mode;␊ |
52 | ␉UInt8 bits_per_pixel;␊ |
53 | ␉UInt16 resolution;␊ |
54 | ␉UInt8 unknown;␊ |
55 | } __attribute__((packed)) vbios_mode;␊ |
56 | ␊ |
57 | typedef struct {␊ |
58 | ␉UInt8 unknow1[2];␊ |
59 | ␉UInt8 x1;␊ |
60 | ␉UInt8 x_total;␊ |
61 | ␉UInt8 x2;␊ |
62 | ␉UInt8 y1;␊ |
63 | ␉UInt8 y_total;␊ |
64 | ␉UInt8 y2;␊ |
65 | } __attribute__((packed)) vbios_resolution_type1;␊ |
66 | ␊ |
67 | typedef struct {␊ |
68 | ␉unsigned long clock;␊ |
69 | ␉␊ |
70 | ␉UInt16 x1;␊ |
71 | ␉UInt16 htotal;␊ |
72 | ␉UInt16 x2;␊ |
73 | ␉UInt16 hblank;␊ |
74 | ␉UInt16 hsyncstart;␊ |
75 | ␉UInt16 hsyncend;␊ |
76 | ␉UInt16 y1;␊ |
77 | UInt16 vtotal;␊ |
78 | UInt16 y2;␊ |
79 | ␉UInt16 vblank;␊ |
80 | ␉UInt16 vsyncstart;␊ |
81 | ␉UInt16 vsyncend;␊ |
82 | } __attribute__((packed)) vbios_modeline_type2;␊ |
83 | ␊ |
84 | typedef struct {␊ |
85 | ␉UInt8 xchars;␊ |
86 | ␉UInt8 ychars;␊ |
87 | ␉UInt8 unknown[4];␊ |
88 | ␉␊ |
89 | ␉vbios_modeline_type2 modelines[];␊ |
90 | } __attribute__((packed)) vbios_resolution_type2;␊ |
91 | ␊ |
92 | typedef struct {␊ |
93 | ␉unsigned long clock;␊ |
94 | ␉␊ |
95 | ␉UInt16 x1;␊ |
96 | ␉UInt16 htotal;␊ |
97 | ␉UInt16 x2;␊ |
98 | ␉UInt16 hblank;␊ |
99 | ␉UInt16 hsyncstart;␊ |
100 | ␉UInt16 hsyncend;␊ |
101 | ␉␊ |
102 | ␉UInt16 y1;␊ |
103 | ␉UInt16 vtotal;␊ |
104 | ␉UInt16 y2;␊ |
105 | ␉UInt16 vblank;␊ |
106 | ␉UInt16 vsyncstart;␊ |
107 | ␉UInt16 vsyncend;␊ |
108 | ␉␊ |
109 | ␉UInt16 timing_h;␊ |
110 | ␉UInt16 timing_v;␊ |
111 | ␉␊ |
112 | ␉UInt8 unknown[6];␊ |
113 | } __attribute__((packed)) vbios_modeline_type3;␊ |
114 | ␊ |
115 | typedef struct {␊ |
116 | ␉unsigned char unknown[6];␊ |
117 | ␉␊ |
118 | vbios_modeline_type3 modelines[];␊ |
119 | } __attribute__((packed)) vbios_resolution_type3;␊ |
120 | ␊ |
121 | typedef struct {␊ |
122 | ␉UInt32 chipset_id;␊ |
123 | ␉chipset_type chipset;␊ |
124 | ␉bios_type bios;␊ |
125 | ␉␊ |
126 | ␉UInt32 bios_fd;␊ |
127 | ␉char* bios_ptr;␊ |
128 | ␉␊ |
129 | ␉vbios_mode * mode_table;␊ |
130 | ␉UInt32 mode_table_size;␊ |
131 | ␉UInt8 b1, b2;␊ |
132 | ␉␊ |
133 | ␉UInt8 unlocked;␊ |
134 | } vbios_map;␊ |
135 | ␊ |
136 | ␊ |
137 | ␊ |
138 | void display_map_info(vbios_map*);␊ |
139 | vbios_map * open_vbios(chipset_type);␊ |
140 | void close_vbios (vbios_map*);␊ |
141 | void unlock_vbios(vbios_map*);␊ |
142 | void relock_vbios(vbios_map*);␊ |
143 | void set_mode(vbios_map*, UInt32, UInt32, UInt32, UInt32, UInt32);␊ |
144 | void list_modes(vbios_map *map, UInt32 raw);␊ |
145 | ␊ |
146 | #endif␊ |
147 | |