LibXenon
Bare-metal Xbox 360 homebrew library
Loading...
Searching...
No Matches
xenos.c
Go to the documentation of this file.
1#include <xenos/xenos.h>
2
3#include <xenos/xenos_edid.h>
7#include <xb360/xb360.h>
8#include <pci/io.h>
9#include <stdio.h>
10#include <stdlib.h>
11#include <time/time.h>
12#include <string.h>
13#include <assert.h>
14#include <xetypes.h>
16
17#define require(x, label) if (!(x)) { printf("%s:%d [%s]\n", __FILE__, __LINE__, #x); goto label; }
18
19#define FB_BASE 0x1e000000
20
21u32 xenos_id = 0; // 5841=slim, 5831=jasper, 5821=zephyr/falcon?, 5811=xenon?
23static struct edid * xenos_edid = NULL;
24
25
27{
28 write32n(0xec800000 + reg, val);
29// printf("set reg %4x %08x, read %08x\n", reg, val, read32n(0x200ec800000 + reg));
30}
31
33{
34 return read32n(0xec800000 + reg);
35}
36
37static void xenos_ana_write(int addr, uint32_t reg)
38{
39 xenos_write32(0x7950, addr);
40 xenos_read32(0x7950);
41 xenos_write32(0x7954, reg);
42 uint32_t cycle = 0;
43 while (xenos_read32(0x7950) == addr && cycle < 1000) {
44 if (!(cycle % 250)) printf(".");
45 cycle++;
46 }
47 if (cycle == 1000)
48 printf("\nxenos_ana_write - addr: 0x%X reg: 0x%X - FAILED!\n");
49}
50
51static int isCoronaOrWinchester()
52{
54 if (type >= REV_CORONA)
55 return 1;
56 return 0;
57}
58
59static struct mode_s * xenos_current_mode = NULL;
60
61void xenos_init_ana_new(uint32_t *mode_ana, int hdmi)
62{
63 uint32_t tmp;
64 int i;
65
66 require(!xenon_smc_ana_read(0xfe, &tmp), ana_error);
67
68 require(!xenon_smc_ana_read(0xD9, &tmp), ana_error);
69 tmp &= ~(1<<18);
70 require(!xenon_smc_ana_write(0xD9, tmp), ana_error);
71
73
75 {
76 // pll stuff
77 // all reads from the video_mode are 4 byte ints
78 xenon_smc_ana_write(0xCD, 0x62);
79
80 xenon_smc_ana_write(0xD0, mode_ana[0xD0]&~0x04000000);
81
82 xenon_smc_ana_write(0xD1, mode_ana[0xD1]);
83
84 u32 rd;
85 uint32_t r9, r11, r4, r30;
86
87 xenon_smc_ana_read(0xD2,&rd);
88 r9 = rd & 0xFFFF0000;
89 r11 = mode_ana[0xD2]& 0x0000FFFF;
90 r4 = r11 | r9;
91 xenon_smc_ana_write(0xD2, r4);
92
93 xenon_smc_ana_write(0xCF, 0x854ACC0);
94 udelay(1000);
95 xenon_smc_ana_read(0xCD,&rd);
96 xenon_smc_ana_write(0xCD, rd | 0x10);
97 udelay(1000);
98 xenon_smc_ana_read(0xCD,&rd);
99 xenon_smc_ana_write(0xCD, rd & ~0x40);
100 udelay(1000);
101 xenon_smc_ana_write(0xD3, 0x1B0A659D);
102 udelay(1000);
103 xenon_smc_ana_write(0xD3, 0x1B02659D);
104
105 xenon_smc_ana_read(0xCF,&rd);
106
107 r30 = rd | 0x40000000;
108 xenon_smc_ana_write(0xCF, r30);
109 udelay(1000);
110 xenon_smc_ana_write(0xCF, r30 & 0xBFFFFFFF);
111 xenon_smc_ana_write(0xCF, r30 & 0xF7FFFFFF);
112
113 if(mode_ana[0xD0]&0x04000000)
114 {
115 xenon_smc_ana_read(0xD0,&rd);
116 xenon_smc_ana_write(0xD0, rd | 0x04000000);
117 }
118
119 // dac stuff
121 xenon_smc_ana_write(0xD7, 0xFF);
122 xenon_smc_ana_write(0xF0, 0x291028E);
123 xenon_smc_ana_write(0xF1, 0x28E0285);
124 xenon_smc_ana_read(0xF0,&rd);
125 xenon_smc_ana_write(0xF0, rd | 0x80000000);
126 xenon_smc_ana_read(0xF0,&rd);
127 xenon_smc_ana_write(0xF0, rd & 0x7FFFFFFF);
128 xenon_smc_ana_read(0xD8,&rd);
129 xenon_smc_ana_write(0xD8, rd | 0x60);
130 xenon_smc_ana_read(0xD7,&rd);
131 xenon_smc_ana_write(0xD7, rd | 0x80);
132 udelay(1000);
133 xenon_smc_ana_read(0xD8,&rd);
134 xenon_smc_ana_write(0xD8, rd | 0x80);
135 xenon_smc_ana_write(0xD8, 0x1F);
136 }
137
138 int addr_0[] = {0xD5, 0xD0, 0xD1, 0xD6, 0xD8, 0xD, 0xC};
139
140 for (i = 1; i < 7; ++i)
141 {
142 require(!xenon_smc_ana_write(addr_0[i], mode_ana[addr_0[i]]), ana_error);
143 if (addr_0[i] == 0xd6){
144 udelay(1000);
145
146 if (hdmi){
147 xenon_smc_ana_write(0x000,0x00000181);
148 udelay(5000);
149 xenon_smc_ana_write(0x000,0x00000081);
150 }
151 }
152 }
153
154 require(!xenon_smc_ana_write(0, 0x60), ana_error);
155
156 uint32_t old;
157 xenos_write32(0x7938, (old = xenos_read32(0x7938)) & ~1);
158 xenos_write32(0x7910, 1);
159 xenos_write32(0x7900, 1);
160
161 // fixed stuff
162
163 int fixed_addr[] = {2, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76};
164 int fixed_val[] = {0, 0x2540F38, 0xE600002, 0x2540409,2, 0x2540000, 0x3310002,0,0,0,0,0,0,0,0,0,0};
165
166 for (i = 0; i < 0x11; ++i)
167 xenos_ana_write(fixed_addr[i], fixed_val[i]);
168
169 // levels stuff
170
171 for (i = 0x26; i <= 0x34; ++i)
172 xenos_ana_write(i, mode_ana[i]);
173
174 for (i = 0x35; i <= 0x43; ++i)
175 xenos_ana_write(i, mode_ana[i]);
176
177 for (i = 0x44; i <= 0x52; ++i)
178 xenos_ana_write(i, mode_ana[i]);
179
180 for (i = 0x53; i <= 0x54; ++i)
181 xenos_ana_write(i, mode_ana[i]);
182
183 for (i = 0x55; i <= 0x57; ++i)
184 xenos_ana_write(i, mode_ana[i]);
185
186 // digital video stuff
187
188 int addr_1[] = {3, 6, 7, 8, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17};
189
190 for (i = 0; i < sizeof(addr_1)/sizeof(int); ++i)
191 xenos_ana_write(addr_1[i], mode_ana[addr_1[i]]);
192
193 xenos_write32(0x7938, old);
194
195 xenon_smc_ana_write(0, mode_ana[0]);
196
197 return;
198
199ana_error:
200 printf("error reading/writing ana\n");
201}
202
203
204
206{
207 xenos_write32(0xe0, 0x10000000);
208 xenos_write32(0xec, 0xffffffff);
209
210 xenos_write32(0x1724, 0);
211 int i;
212 for (i = 0; i < 8; ++i)
213 {
214 int addr[] = {0x8000, 0x8c60, 0x8008, 0x8004, 0x800c, 0x8010, 0x8014, 0x880c, 0x8800, 0x8434, 0x8820, 0x8804, 0x8824, 0x8828, 0x882c, 0x8420, 0x841c, 0x841c, 0x8418, 0x8414, 0x8c78, 0x8c7c, 0x8c80};
215 int j;
216 for (j = 0; j < 23; ++j)
217 xenos_write32(addr[j] + i * 0x1000, 0);
218 }
219}
220
222{
223 if (xenos_id>=0x5841){
224 uint32_t v,v2;
225
226 v = xenos_read32(0x0218) & 0xFE7FFFFF;
227 xenos_write32(0x0218,v);
228 xenos_read32(0x0218);
229
230 v2 = 0xa058a34;
231
232 xenos_write32(0x244,v2);
233
234 v &= 0xFFFFF803;
235 v |= 0x388;
236 xenos_write32(0x0218,v);
237 xenos_read32(0x0218);
238 udelay(1000);
239
240 v2 |= 1;
241 xenos_write32(0x244,v2);
242 xenos_read32(0x244);
243 udelay(1000);
244
245 v |= 0x1000000;
246 xenos_write32(0x0218,v);
247 xenos_read32(0x0218);
248
249 xenos_write32(0x0218,xenos_read32(0x0218) & 0xFFFFFFFE);
250 }else{
251 uint32_t v;
252 xenos_write32(0x0244, 0x20000000); //
253 v = 0x200c0011;
254 xenos_write32(0x0244, v);
255 udelay(1000);
256 v &=~ 0x20000000;
257 xenos_write32(0x0244, v);
258 udelay(1000);
259
260 assert(xenos_read32(0x0244) == 0xc0011);
261
262 xenos_write32(0x0218, 0);
263 }
264
265 xenos_write32(0x3c04, 0xe);
266 xenos_write32(0x00f4, 4);
267
268 if (xenos_id>=0x5841){
269 xenos_write32(0x0204, 0x947FF386);
270 xenos_write32(0x0208, 0x3FC7C2);
271 }else{
272 int gpu_clock = xenos_read32(0x0210);
273 int mem_clock = xenos_read32(0x284);
274 int edram_clock = xenos_read32(0x244);
275 int fsb_clock = xenos_read32(0x248);
276 assert(gpu_clock == 9);
277 printf("GPU Clock at %d MHz\n", 50 * ((gpu_clock & 0xfff)+1) / (((gpu_clock >> 12) & 0x3f)+1));
278 printf("MEM Clock at %d MHz\n", 50 * ((mem_clock & 0xfff)+1) / (((mem_clock >> 12) & 0x3f)+1));
279 printf("EDRAM Clock at %d MHz\n", 100 * ((edram_clock & 0xfff)+1) / (((edram_clock >> 12) & 0x3f)+1));
280 printf("FSB Clock at %d MHz\n", 100 * ((fsb_clock & 0xfff)+1) / (((fsb_clock >> 12) & 0x3f)+1));
281
282 xenos_write32(0x0204, (xenos_id<0x5821)?0x4000300:0x4400380);
283 xenos_write32(0x0208, 0x180002);
284 }
285
286 xenos_write32(0x01a8, 0);
287 xenos_write32(0x0e6c, 0x0c0f0000);
288 xenos_write32(0x3400, 0x40401);
289 udelay(1000);
290 xenos_write32(0x3400, 0x40400);
291 xenos_write32(0x3300, 0x3a22);
292 xenos_write32(0x340c, 0x1003f1f);
293 xenos_write32(0x00f4, 0x1e);
294
295
296 xenos_write32(0x2800, 0);
297 xenos_write32(0x2804, 0x20000000);
298 xenos_write32(0x2808, 0x20000000);
299 xenos_write32(0x280c, 0);
300 xenos_write32(0x2810, 0x20000000);
301 xenos_write32(0x2814, 0);
302
303 udelay(1000);
304 xenos_write32(0x6548, 0);
305
306 // resetgui
307 // initcp
308
309 xenos_write32(0x04f0, (xenos_read32(0x04f0) &~ 0xf0000) | 0x40100);
310}
311
312static void xenos_ana_stop_display(void)
313{
314 uint32_t tmp;
315 xenon_smc_ana_read(0, &tmp);
316 tmp &= ~0x1e;
317 xenon_smc_ana_write(0, tmp);
318}
319
321{
322 xenos_ana_stop_display();
323 uint32_t v;
324 xenos_write32(0x6028, v = (xenos_read32(0x6028) | 0x01000000));
325 while (!(xenos_read32(0x281c) & 2));
327 xenon_smc_ana_write(0xd7, 0xff);
328 xenos_write32(0x6028, v & ~0x301);
329 xenos_write32(0x7900, 0);
330 xenon_smc_ana_read(0xd9, &v);
331 xenon_smc_ana_write(0xd9, v | 0x40000);
332 xenon_smc_i2c_write(0x108,0x36);
333}
334
335void xenos_set_mode_f1(struct mode_s *mode)
336{
341
342 int interlace_factor = mode->is_progressive ? 1 : 2;
343
347 xenos_write32(D1CRTC_H_SYNC_B_CNTL, (mode->vsync_offset << 16) | (mode->active_height * interlace_factor + mode->vsync_offset));
349 xenos_write32(0x6018, 0x60000);
352 xenos_write32(0x601c, 0);
353
358
360}
361
362void xenos_set_mode_f2(struct mode_s *mode)
363{
364 int interlace_factor = mode->is_progressive ? 1 : 2;
365
367 xenos_write32(D1GRPH_PITCH, mode->width); /* pitch */
369 xenos_write32(D1GRPH_LUT_SEL, 0); /* lut override */
375 xenos_write32(D1GRPH_Y_END, mode->active_height * interlace_factor);
380
381 /* scaler update */
384 xenos_write32(0x2840, FB_BASE);
385 xenos_write32(0x2844, mode->width);
386 xenos_write32(0x2848, 0x80000);
387
388 xenos_write32(AVIVO_D1MODE_VIEWPORT_START , 0); /* viewport */
389 xenos_write32(AVIVO_D1MODE_VIEWPORT_SIZE, (mode->width << 16) | (mode->active_height * interlace_factor));
390 xenos_write32(0x65e8, (mode->width >> 2) - 1);
392 xenos_write32(0x6550, 0xff);
393 xenos_write32(0x6524, 0x300);
394 xenos_write32(0x65d0, 0x100);
396
398 xenos_write32(AVIVO_D1MODE_VIEWPORT_SIZE, (mode->width << 16) | (mode->height * interlace_factor));
399 xenos_write32(0x65e8, (mode->width / 4) - 1);
404 xenos_write32(D1GRPH_Y_END, mode->height * interlace_factor);
409 xenos_write32(0x65a0, 0);
410 xenos_write32(0x65b4, 0x01000000);
411 xenos_write32(0x65c4, 0x01000000);
412 xenos_write32(0x65b0, 0);
413 xenos_write32(0x65c0, 0x01000000);
414 xenos_write32(0x65b8, 0x00060000);
415 xenos_write32(0x65c8, 0x00040000);
416 xenos_write32(0x65dc, 0);
418
424 while (!(xenos_read32(DC_LUT_AUTOFILL) & 2));
425}
426
427void xenos_set_mode(struct mode_s *mode)
428{
429 xenos_write32(0x7938, xenos_read32(0x7938) | 1);
430 xenos_write32(0x06ac, 1);
431
432 printf(" . ana disable\n");
434 xenos_write32(0x04a0, 0x100);
435 printf(" . ana enable\n");
436 xenos_init_ana_new(mode->ana,mode->hdmi);
437 xenos_write32(0x7900, 1);
438
439 printf(" . f1\n");
440 xenos_set_mode_f1(mode);
441 printf(" . f2\n");
442 xenos_set_mode_f2(mode);
443
444 xenos_write32(0x6028, 0x10001);
445
446 if (!mode->composite_sync)
447 {
451 } else
452 {
456 }
457 xenos_write32(0x793c, 0);
458 xenos_write32(0x7938, 0x700);
459
460
464
465 xenos_write32(D1CRTC_TRIGA_CNTL, 0x000000ec);
467 xenos_write32(D1CRTC_TRIGB_CNTL, 0x00d4014a);
469
470
471 if (!mode->rgb)
472 {
486 xenos_write32(0x63b4, 0x00000000);
487 } else
488 {
502 xenos_write32(0x63b4, 0x00000000);
503 }
504
505 if (mode->hdmi) xenon_smc_ana_write(0,0x2c1);
506
507 xenos_current_mode = mode;
508}
509
511{
512 struct edid * monitor_edid = xenos_get_edid();
513 // fix some non standart mode (vga + yuv or hdmi/dvi + yuv )
514 if(monitor_edid) {
515 // HDMI or DVI
516 if(monitor_edid->input&DRM_EDID_INPUT_DIGITAL)
518 // VGA
519 else
521 }
522 return mode;
523}
524
526{
527 int mode;
528 int avpack = xenon_smc_read_avpack();
529 //mode = VIDEO_MODE_VGA_1024x768;
530
532 {
533 case AVREGION_NTSCJ:
534 case AVREGION_NTSCM:
535 mode = VIDEO_MODE_NTSC;
536 break;
537 case AVREGION_PAL50:
538 mode = VIDEO_MODE_PAL50;
539 break;
540 case AVREGION_PAL60:
541 mode = VIDEO_MODE_PAL60;
542 break;
543 default:
544 mode = VIDEO_MODE_PAL60;
545 break;
546 }
547
548 printf("AVPACK detected: %02x\n", avpack);
549
550 switch (avpack)
551 {
552 case 0x13: // HDMI_AUDIO
553 case 0x14: // HDMI_AUDIO - GHETTO MOD
554 case 0x1C: // HDMI_AUDIO - GHETTO MOD
555 case 0x1E: // HDMI
556 case 0x1F: // HDMI
558 break;
559 case 0x43: // COMPOSITE - TV MODE
560 case 0x47: // SCART
561 case 0x54: // COMPOSITE + S-VIDEO
562 case 0x57: // NORMAL COMPOSITE
563 break;
564 case 0x0C: // COMPONENT
565 case 0x0F: // COMPONENT
566 case 0x4F: // COMPOSITE - HD MODE
567 mode = VIDEO_MODE_YUV_720P;
568 break;
569 case 0x5B: // VGA
570 case 0x59: // also vga
571 case 0x1B: // this fixes a generic vga adapter, was under HDMI
573 break;
574 default:
575 break;
576 }
577
578 switch (avpack)
579 {
580 case 0x43: // COMPOSITE - TV MODE
581 case 0x47: // SCART
582 case 0x54: // COMPOSITE + S-VIDEO
583 case 0x57: // NORMAL COMPOSITE
584 case 0x0C: // COMPONENT
585 case 0x0F: // COMPONENT
586 case 0x4F: // COMPOSITE - HD MODE
587 break;
588 default:
589 mode = xenos_hdmi_vga_mode_fix(mode);
590 break;
591 }
592
593 if (xenos_is_corona)
595 else
597}
598
599void xenos_init(int videoMode)
600{
602 printf("Xenos GPU ID=%04x\n", (unsigned int)xenos_id);
603
604 xenos_is_corona = isCoronaOrWinchester();
605 if (xenos_is_corona)
606 printf("Detected Corona motherboard!\n");
607
610
611 xenon_gpio_set(0, 0x2300);
612 xenon_gpio_set_oe(0, 0x2300);
613
614 if (videoMode <= VIDEO_MODE_AUTO || videoMode >= VIDEO_MODE_COUNT){
617 }
618 else if (xenos_is_corona)
620 else
621 xenos_set_mode(&xenos_modes[videoMode]);
622
623 xenon_smc_ana_write(0xdf, 0);
625
626 if (xenos_current_mode->hdmi){
627 xenos_edid=xenos_get_edid();
629 if(xenos_is_hdmi) printf("Detected HDMI monitor!\n");
630 }
631
632 printf("Video Mode: %s\n", xenos_current_mode->name);
633}
634
636{
637 if(xenos_current_mode)
638 return xenos_current_mode->overscan;
639 else{
640 printf("Xenos not initialized\n");
641 exit(-1);
642 }
643}
644
646{
647 return xenos_current_mode != NULL;
648}
#define NULL
Definition: def.h:47
static uint32_t val
Definition: io.h:17
u32 uint32_t
Definition: libfdt_env.h:11
u8 input
Definition: xenos_edid.h:179
uint32_t * ana
void udelay(int u)
Definition: time.c:12
unsigned int xenon_get_XenosID()
Definition: xb360.c:475
int xenon_get_console_type()
Definition: xb360.c:480
#define REV_CORONA
Definition: xb360.h:96
void xenon_config_init(void)
Definition: xenon_config.c:22
int xenon_config_get_avregion(void)
Definition: xenon_config.c:46
#define AVREGION_PAL50
Definition: xenon_config.h:49
#define AVREGION_PAL60
Definition: xenon_config.h:50
#define AVREGION_NTSCM
Definition: xenon_config.h:47
#define AVREGION_NTSCJ
Definition: xenon_config.h:48
void xenon_gpio_set_oe(uint32_t clear, uint32_t set)
Definition: xenon_gpio.c:15
void xenon_gpio_set(uint32_t clear, uint32_t set)
Definition: xenon_gpio.c:20
int xenon_smc_read_avpack(void)
Definition: xenon_smc.c:298
int xenon_smc_i2c_write(uint16_t addr, uint8_t val)
Definition: xenon_smc.c:192
int xenon_smc_ana_write(uint8_t addr, uint32_t val)
Definition: xenon_smc.c:120
int xenon_smc_ana_read(uint8_t addr, uint32_t *val)
Definition: xenon_smc.c:149
void xenos_set_mode_f2(struct mode_s *mode)
Definition: xenos.c:362
#define FB_BASE
Definition: xenos.c:19
#define require(x, label)
Definition: xenos.c:17
uint32_t xenos_read32(int reg)
Definition: xenos.c:32
int xenos_is_initialized()
Definition: xenos.c:645
u32 xenos_id
Definition: xenos.c:21
void xenos_autoset_mode(void)
Definition: xenos.c:525
int xenos_is_corona
Definition: xenos.c:22
int xenos_is_overscan()
Definition: xenos.c:635
void xenos_init_ana_new(uint32_t *mode_ana, int hdmi)
Definition: xenos.c:61
int xenos_is_hdmi
Definition: xenos.c:22
int xenos_hdmi_vga_mode_fix(int mode)
Definition: xenos.c:510
void xenos_set_mode_f1(struct mode_s *mode)
Definition: xenos.c:335
void xenos_init(int videoMode)
Definition: xenos.c:599
void xenos_init_phase1(void)
Definition: xenos.c:221
void xenos_set_mode(struct mode_s *mode)
Definition: xenos.c:427
void xenos_write32(int reg, uint32_t val)
Definition: xenos.c:26
void xenos_ana_preinit(void)
Definition: xenos.c:320
void xenos_init_phase0(void)
Definition: xenos.c:205
#define D1COLOR_MATRIX_COEF_3_2
Definition: xenos.h:71
#define D1COLOR_MATRIX_COEF_2_2
Definition: xenos.h:67
#define D1GRPH_SURFACE_OFFSET_X
Definition: xenos.h:30
#define D1GRPH_COLOR_MATRIX_TRANSFORMATION_CNTL
Definition: xenos.h:61
#define D1COLOR_MATRIX_COEF_2_4
Definition: xenos.h:69
#define D1GRPH_PRIMARY_SURFACE_ADDRESS
Definition: xenos.h:36
#define D1GRPH_ENABLE
Definition: xenos.h:37
#define AVIVO_D1CRTC_V_BLANK_START_END
Definition: xenos.h:54
#define D1CRTC_H_TOTAL
Definition: xenos.h:15
#define D1COLOR_MATRIX_COEF_1_3
Definition: xenos.h:64
#define DC_LUT_RW_MODE
Definition: xenos.h:48
#define AVIVO_D1MODE_DESKTOP_HEIGHT
Definition: xenos.h:60
#define DC_LUT_WRITE_EN_MASK
Definition: xenos.h:49
#define D1CRTC_H_SYNC_B
Definition: xenos.h:16
#define D1GRPH_SURFACE_OFFSET_Y
Definition: xenos.h:31
#define AVIVO_D1MODE_VIEWPORT_START
Definition: xenos.h:41
#define D1COLOR_MATRIX_COEF_1_1
Definition: xenos.h:62
#define D1GRPH_LUT_SEL
Definition: xenos.h:29
#define D1CRTC_DOUBLE_BUFFER_CONTROL
Definition: xenos.h:13
#define AVIVO_D1MODE_DATA_FORMAT
Definition: xenos.h:43
#define D1CRTC_MVP_BLACK_KEYER
Definition: xenos.h:56
#define D1GRPH_X_END
Definition: xenos.h:34
#define AVIVO_D1SCL_UPDATE
Definition: xenos.h:39
#define DC_LUT_RW_INDEX
Definition: xenos.h:47
#define D1CRTC_V_SYNC_B
Definition: xenos.h:20
#define D1COLOR_MATRIX_COEF_3_3
Definition: xenos.h:72
#define D1COLOR_MATRIX_COEF_3_4
Definition: xenos.h:73
#define DC_LUT_AUTOFILL
Definition: xenos.h:50
#define AVIVO_D1MODE_VIEWPORT_SIZE
Definition: xenos.h:42
#define D1CRTC_MVP_SLAVE_STATUS
Definition: xenos.h:25
#define D1CRTC_MVP_INBAND_CNTL_INSERT
Definition: xenos.h:23
#define D1CRTC_MVP_INBAND_CNTL_CAP
Definition: xenos.h:22
#define D1CRTC_MVP_INBAND_CNTL_INSERT_TIMER
Definition: xenos.h:55
#define D1COLOR_MATRIX_COEF_1_4
Definition: xenos.h:65
#define D1GRPH_Y_END
Definition: xenos.h:35
#define D1GRPH_CONTROL
Definition: xenos.h:28
#define D1CRTC_TRIGB_CNTL
Definition: xenos.h:59
#define D1CRTC_V_TOTAL
Definition: xenos.h:14
#define D1CRTC_H_BLANK_START_END
Definition: xenos.h:17
#define AVIVO_D1SCL_SCALER_TAP_CONTROL
Definition: xenos.h:45
#define D1CRTC_H_SYNC_B_CNTL
Definition: xenos.h:18
#define D1CRTC_MVP_CONTROL2
Definition: xenos.h:52
#define AVIVO_D1SCL_SCALER_ENABLE
Definition: xenos.h:40
#define D1GRPH_PITCH
Definition: xenos.h:27
#define D1COLOR_MATRIX_COEF_2_1
Definition: xenos.h:66
#define D1CRTC_H_SYNC_A
Definition: xenos.h:19
#define D1COLOR_MATRIX_COEF_1_2
Definition: xenos.h:63
#define D1CRTC_TRIGA_MANUAL_TRIG
Definition: xenos.h:58
#define DC_LUTA_CONTROL
Definition: xenos.h:46
#define D1GRPH_UPDATE
Definition: xenos.h:26
#define D1GRPH_Y_START
Definition: xenos.h:33
#define D1COLOR_MATRIX_COEF_2_3
Definition: xenos.h:68
#define D1CRTC_TRIGA_CNTL
Definition: xenos.h:57
#define D1GRPH_X_START
Definition: xenos.h:32
#define D1COLOR_MATRIX_COEF_3_1
Definition: xenos.h:70
#define D1CRTC_MVP_FIFO_CONTROL
Definition: xenos.h:53
#define D1CRTC_MVP_CONTROL1
Definition: xenos.h:51
#define D1GRPH_FLIP_CONTROL
Definition: xenos.h:44
#define D1CRTC_H_SYNC_A_CNTL
Definition: xenos.h:21
#define D1CRTC_UPDATE_LOCK
Definition: xenos.h:11
#define D1CRTC_MVP_FIFO_STATUS
Definition: xenos.h:24
#define DCP_LB_DATA_GAP_BETWEEN_CHUNK
Definition: xenos.h:12
BOOL xenos_detect_hdmi_monitor(struct edid *edid)
Definition: xenos_edid.c:264
struct edid * xenos_get_edid()
Definition: xenos_edid.c:209
u8 type
Definition: xenos_edid.h:1
#define DRM_EDID_INPUT_DIGITAL
Definition: xenos_edid.h:157
u8 j
Definition: xenos_edid.h:10
#define VIDEO_MODE_VGA_1024x768
#define VIDEO_MODE_PAL50
#define VIDEO_MODE_NTSC
#define VIDEO_MODE_HDMI_720P
#define VIDEO_MODE_PAL60
#define VIDEO_MODE_COUNT
#define VIDEO_MODE_YUV_720P
struct mode_s xenos_modes_corona[]
struct mode_s xenos_modes[]
uint32_t u32
32bit unsigned integer
Definition: xetypes.h:14