1 | //␊ |
2 | // ati.h␊ |
3 | // Chameleon␊ |
4 | //␊ |
5 | // Created by Chris Morton on 1/30/13.␊ |
6 | //␊ |
7 | //␊ |
8 | ␊ |
9 | #ifndef Chameleon_ati_h␊ |
10 | #define Chameleon_ati_h␊ |
11 | ␊ |
12 | #include "boot.h"␊ |
13 | #include "bootstruct.h"␊ |
14 | #include "pci.h"␊ |
15 | #include "platform.h"␊ |
16 | #include "device_inject.h"␊ |
17 | #include "ati_reg.h"␊ |
18 | ␊ |
19 | ␊ |
20 | ␊ |
21 | /* DEFINES */␊ |
22 | #define OFFSET_TO_GET_ATOMBIOS_STRINGS_START 0x6e␊ |
23 | ␊ |
24 | #define Reg32(reg)␉␉␉␉(*(volatile uint32_t *)(card->mmio + reg))␊ |
25 | #define RegRead32(reg)␉␉␉(Reg32(reg))␊ |
26 | #define RegWrite32(reg, value)␉(Reg32(reg) = value)␊ |
27 | ␊ |
28 | /* Flags */␊ |
29 | #define MKFLAG(n)␉␉␉(1 << n)␊ |
30 | #define FLAGTRUE␉␉␉MKFLAG(0)␊ |
31 | #define EVERGREEN␉␉␉MKFLAG(1)␊ |
32 | ␊ |
33 | #define DATVAL(x)␉␉␉{kPtr, sizeof(x), (uint8_t *)x}␊ |
34 | #define STRVAL(x)␉␉␉{kStr, sizeof(x), (uint8_t *)x}␊ |
35 | #define BYTVAL(x)␉␉␉{kCst, 1, (uint8_t *)x}␊ |
36 | #define WRDVAL(x)␉␉␉{kCst, 2, (uint8_t *)x}␊ |
37 | #define DWRVAL(x)␉␉␉{kCst, 4, (uint8_t *)x}␊ |
38 | #define QWRVAL(x)␉␉␉{kCst, 8, (uint8_t *)x}␊ |
39 | #define NULVAL␉␉␉␉{kNul, 0, (uint8_t *)NULL}␊ |
40 | ␊ |
41 | ␊ |
42 | /*Typedefs ENUMS*/␊ |
43 | typedef enum {␊ |
44 | ␉kNul,␊ |
45 | ␉kStr,␊ |
46 | ␉kPtr,␊ |
47 | ␉kCst␊ |
48 | } type_t;␊ |
49 | ␊ |
50 | typedef enum {␊ |
51 | ␉CHIP_FAMILY_UNKNOW,␊ |
52 | ␉/* Old */␊ |
53 | ␉CHIP_FAMILY_R420,␊ |
54 | ␉CHIP_FAMILY_RV410,␊ |
55 | ␉CHIP_FAMILY_RV515,␊ |
56 | ␉CHIP_FAMILY_R520,␊ |
57 | ␉CHIP_FAMILY_RV530,␊ |
58 | ␉CHIP_FAMILY_RV560,␊ |
59 | ␉CHIP_FAMILY_RV570,␊ |
60 | ␉CHIP_FAMILY_R580,␊ |
61 | ␉/* IGP */␊ |
62 | ␉CHIP_FAMILY_RS600,␊ |
63 | ␉CHIP_FAMILY_RS690,␊ |
64 | ␉CHIP_FAMILY_RS740,␊ |
65 | ␉CHIP_FAMILY_RS780,␊ |
66 | ␉CHIP_FAMILY_RS880,␊ |
67 | ␉/* R600 */␊ |
68 | ␉CHIP_FAMILY_R600,␊ |
69 | ␉CHIP_FAMILY_RV610,␊ |
70 | ␉CHIP_FAMILY_RV620,␊ |
71 | ␉CHIP_FAMILY_RV630,␊ |
72 | ␉CHIP_FAMILY_RV635,␊ |
73 | ␉CHIP_FAMILY_RV670,␊ |
74 | ␉/* R700 */␊ |
75 | ␉CHIP_FAMILY_RV710,␊ |
76 | ␉CHIP_FAMILY_RV730,␊ |
77 | ␉CHIP_FAMILY_RV740,␊ |
78 | ␉CHIP_FAMILY_RV770,␊ |
79 | ␉CHIP_FAMILY_RV772,␊ |
80 | ␉CHIP_FAMILY_RV790,␊ |
81 | ␉/* Evergreen */␊ |
82 | ␉CHIP_FAMILY_CEDAR,␊ |
83 | ␉CHIP_FAMILY_CYPRESS,␊ |
84 | ␉CHIP_FAMILY_HEMLOCK,␊ |
85 | ␉CHIP_FAMILY_JUNIPER,␊ |
86 | ␉CHIP_FAMILY_REDWOOD,␊ |
87 | ␉CHIP_FAMILY_BROADWAY,␊ |
88 | //␉CHIP_FAMILY_MADISON,␊ |
89 | //␉CHIP_FAMILY_PARK,␊ |
90 | ␉/* Northern Islands */␊ |
91 | //␉CHIP_FAMILY_ANTILLES,␊ |
92 | ␉CHIP_FAMILY_BARTS,␊ |
93 | ␉CHIP_FAMILY_CAICOS,␊ |
94 | ␉CHIP_FAMILY_CAYMAN,␊ |
95 | ␉CHIP_FAMILY_TURKS,␊ |
96 | ␉/* Southern Islands */␊ |
97 | ␉CHIP_FAMILY_TAHITI,␊ |
98 | ␉CHIP_FAMILY_PITCAIRN,␊ |
99 | ␉CHIP_FAMILY_VERDE,␊ |
100 | ␉CHIP_FAMILY_THAMES,␊ |
101 | ␉CHIP_FAMILY_LOMBOK,␊ |
102 | //␉CHIP_FAMILY_NEWZEALAND,␊ |
103 | ␉CHIP_FAMILY_SUMO,␊ |
104 | ␉CHIP_FAMILY_MANHATTAN,␊ |
105 | ␉CHIP_FAMILY_VANCOUVER,␊ |
106 | ␉CHIP_FAMILY_WRESTLER,␊ |
107 | ␉CHIP_FAMILY_TRINITY,␊ |
108 | ␉CHIP_FAMILY_LAST␊ |
109 | } ati_chip_family_t;␊ |
110 | ␊ |
111 | typedef enum {␊ |
112 | ␉kNull,␊ |
113 | ␉/* OLDController */␊ |
114 | ␉kWormy,␊ |
115 | ␉kAlopias,␊ |
116 | ␉kCaretta,␊ |
117 | ␉kKakapo,␊ |
118 | ␉kKipunji,␊ |
119 | ␉kPeregrine,␊ |
120 | ␉kRaven,␊ |
121 | ␉kSphyrna,␊ |
122 | ␉/* AMD2400Controller */␊ |
123 | ␉kIago,␊ |
124 | ␉/* AMD2600Controller */␊ |
125 | ␉kHypoprion,␊ |
126 | ␉kLamna,␊ |
127 | ␉/* AMD3800Controller */␊ |
128 | ␉kMegalodon,␊ |
129 | ␉kTriakis,␊ |
130 | ␉/* AMD4600Controller */␊ |
131 | ␉kFlicker,␊ |
132 | ␉kGliff,␊ |
133 | ␉kShrike,␊ |
134 | ␉/* AMD4800Controller */␊ |
135 | ␉kCardinal,␊ |
136 | ␉kMotmot,␊ |
137 | ␉kQuail,␊ |
138 | ␉/* AMD5000Controller */␊ |
139 | ␉kDouc,␊ |
140 | ␉kLangur,␊ |
141 | ␉kUakari,␊ |
142 | ␉kZonalis,␊ |
143 | ␉kAlouatta,␊ |
144 | ␉kHoolock,␊ |
145 | ␉kVervet,␊ |
146 | ␉kBaboon,␊ |
147 | ␉kEulemur,␊ |
148 | ␉kGalago,␊ |
149 | ␉kColobus,␊ |
150 | ␉kMangabey,␊ |
151 | ␉kNomascus,␊ |
152 | ␉kOrangutan,␊ |
153 | ␉/* AMD6000Controller */␊ |
154 | ␉kPithecia,␊ |
155 | ␉kBulrushes,␊ |
156 | ␉kCattail,␊ |
157 | ␉kHydrilla,␊ |
158 | ␉kDuckweed,␊ |
159 | ␉kFanwort,␊ |
160 | ␉kElodea,␊ |
161 | ␉kKudzu,␊ |
162 | ␉kGibba,␊ |
163 | ␉kLotus,␊ |
164 | ␉kIpomoea,␊ |
165 | ␉kMuskgrass,␊ |
166 | ␉kJuncus,␊ |
167 | ␉kOsmunda,␊ |
168 | ␉kPondweed,␊ |
169 | ␉kSpikerush,␊ |
170 | ␉kTypha,␊ |
171 | ␉/* AMD7000Controller */␊ |
172 | ␉kAji, // TESTING␊ |
173 | ␉kBuri, // TESTING␊ |
174 | ␉kChutoro, // TESTING␊ |
175 | ␉kDashimaki, // TESTING␊ |
176 | ␉kEbi, // TESTING␊ |
177 | ␉kGari, // TESTING␊ |
178 | ␉kFutomaki, // TESTING␊ |
179 | ␉kHamachi, // TESTING␊ |
180 | ␉kOPM, // TESTING␊ |
181 | ␉kIkura, // TESTING␊ |
182 | ␉kIkuraS, // TESTING␊ |
183 | ␉kCfgEnd␊ |
184 | } ati_config_name_t;␊ |
185 | ␊ |
186 | /* Typedefs STRUCTS */␊ |
187 | typedef struct {␊ |
188 | ␉type_t␉␉␉␉␉type;␊ |
189 | ␉uint32_t␉␉␉␉size;␊ |
190 | ␉uint8_t␉␉␉␉␉*data;␊ |
191 | } value_t;␊ |
192 | ␊ |
193 | //card to #ports␊ |
194 | typedef struct {␊ |
195 | ␉const char␉␉*name;␊ |
196 | ␉uint8_t␉␉␉ports;␊ |
197 | } card_config_t;␊ |
198 | ␊ |
199 | //radeon card (includes teh AtiConfig)␊ |
200 | typedef struct {␊ |
201 | ␉uint16_t␉␉␉device_id;␊ |
202 | ␉uint32_t␉␉␉subsys_id;␊ |
203 | ␉ati_chip_family_t␉␉chip_family;␊ |
204 | ␉const char␉␉␉*model_name;␊ |
205 | ␉ati_config_name_t␉␉cfg_name;␊ |
206 | } radeon_card_info_t;␊ |
207 | ␊ |
208 | // dev_tree representation␊ |
209 | typedef struct {␊ |
210 | ␉uint32_t␉␉␉␉flags;␊ |
211 | ␉bool␉␉␉␉␉all_ports;␊ |
212 | ␉char␉␉␉␉␉*name;␊ |
213 | ␉bool␉␉␉␉␉(*get_value)(value_t *val);␊ |
214 | ␉value_t␉␉␉␉␉default_val;␊ |
215 | } dev_prop_t;␊ |
216 | ␊ |
217 | typedef struct {␊ |
218 | ␉struct DevPropDevice␉␉*device;␊ |
219 | ␉radeon_card_info_t␉␉*info;␊ |
220 | ␉pci_dt_t␉␉␉*pci_dev;␊ |
221 | ␉uint8_t␉␉␉␉*fb;␊ |
222 | ␉uint8_t␉␉␉␉*mmio;␊ |
223 | ␉uint8_t␉␉␉␉*io;␊ |
224 | ␉uint8_t␉␉␉␉*rom;␊ |
225 | ␉uint64_t␉␉␉rom_size;␊ |
226 | ␉uint64_t␉␉␉vram_size;␊ |
227 | ␉const char␉␉␉*cfg_name;␊ |
228 | ␉uint8_t␉␉␉␉ports;␊ |
229 | ␉uint32_t␉␉␉flags;␊ |
230 | ␉bool␉␉␉␉posted;␊ |
231 | } card_t;␊ |
232 | ␊ |
233 | ␊ |
234 | ␊ |
235 | /* functions */␊ |
236 | bool get_bootdisplay_val(value_t *val);␊ |
237 | bool get_vrammemory_val(value_t *val);␊ |
238 | bool get_name_val(value_t *val);␊ |
239 | bool get_nameparent_val(value_t *val);␊ |
240 | bool get_model_val(value_t *val);␊ |
241 | bool get_conntype_val(value_t *val);␊ |
242 | bool get_vrammemsize_val(value_t *val);␊ |
243 | bool get_binimage_val(value_t *val);␊ |
244 | bool get_romrevision_val(value_t *val);␊ |
245 | bool get_deviceid_val(value_t *val);␊ |
246 | bool get_mclk_val(value_t *val);␊ |
247 | bool get_sclk_val(value_t *val);␊ |
248 | bool get_refclk_val(value_t *val);␊ |
249 | bool get_platforminfo_val(value_t *val);␊ |
250 | bool get_vramtotalsize_val(value_t *val);␊ |
251 | bool get_hdmiaudio(value_t * val);␊ |
252 | ␊ |
253 | /* vals */␊ |
254 | static value_t aty_name;␊ |
255 | static value_t aty_nameparent;␊ |
256 | card_t *card;␊ |
257 | ␊ |
258 | #endif␊ |
259 | |