1 /* this file was automatically generated from vesa.txt */ 2 3 #include <u.h> 4 #include <libc.h> 5 #include <bio.h> 6 #include "pci.h" 7 #include "vga.h" 8 9 /* 10 * VESA Monitor Timing Standard mode definitions as per 11 * VESA and Industry Standards and Guidelines for Computer 12 * Display Monitor Timing, Version 1.0, Revision 0.8, 17 September 1998. 13 * 14 * See /public/doc/vesa/dmtv1r08.pdf. 15 * 16 * This might go back into vgadb at some point. It's here mainly 17 * so that people don't change it, and so that we can run without vgadb. 18 */ 19 20 static Mode vesa640x480x60 = { 21 .name = "640x480@60Hz", 22 .x = 640, 23 .y = 480, 24 25 .ht = 800, 26 .shb = 648, 27 .ehb = 648+144, 28 .shs = 656, 29 .ehs = 656+96, 30 31 .vt = 525, 32 .vrs = 490, 33 .vre = 490+2, 34 .vbs = 488, 35 .vbe = 488+29, 36 37 .frequency = 25175000, 38 39 .hsync = '-', 40 .vsync = '-', 41 .interlace = '\0', 42 }; 43 44 static Mode vesa640x480x72 = { 45 .name = "640x480@72Hz", 46 .x = 640, 47 .y = 480, 48 49 .ht = 832, 50 .shb = 648, 51 .ehb = 648+176, 52 .shs = 664, 53 .ehs = 664+40, 54 55 .vt = 520, 56 .vrs = 489, 57 .vre = 489+3, 58 .vbs = 488, 59 .vbe = 488+24, 60 61 .frequency = 31500000, 62 63 .hsync = '-', 64 .vsync = '-', 65 .interlace = '\0', 66 }; 67 68 static Mode vesa640x480x75 = { 69 .name = "640x480@75Hz", 70 .x = 640, 71 .y = 480, 72 73 .ht = 840, 74 .shb = 640, 75 .ehb = 640+200, 76 .shs = 656, 77 .ehs = 656+64, 78 79 .vt = 500, 80 .vrs = 481, 81 .vre = 481+3, 82 .vbs = 480, 83 .vbe = 480+20, 84 85 .frequency = 31500000, 86 87 .hsync = '-', 88 .vsync = '-', 89 .interlace = '\0', 90 }; 91 92 static Mode vesa640x480x85 = { 93 .name = "640x480@85Hz", 94 .x = 640, 95 .y = 480, 96 97 .ht = 832, 98 .shb = 640, 99 .ehb = 640+192, 100 .shs = 696, 101 .ehs = 696+56, 102 103 .vt = 509, 104 .vrs = 481, 105 .vre = 481+3, 106 .vbs = 480, 107 .vbe = 480+29, 108 109 .frequency = 36000000, 110 111 .hsync = '-', 112 .vsync = '-', 113 .interlace = '\0', 114 }; 115 116 static Mode vesa800x600x56 = { 117 .name = "800x600@56Hz", 118 .x = 800, 119 .y = 600, 120 121 .ht = 1024, 122 .shb = 800, 123 .ehb = 800+224, 124 .shs = 824, 125 .ehs = 824+72, 126 127 .vt = 625, 128 .vrs = 601, 129 .vre = 601+2, 130 .vbs = 600, 131 .vbe = 600+25, 132 133 .frequency = 36000000, 134 135 .hsync = '+', 136 .vsync = '+', 137 .interlace = '\0', 138 }; 139 140 static Mode vesa800x600x60 = { 141 .name = "800x600@60Hz", 142 .x = 800, 143 .y = 600, 144 145 .ht = 1056, 146 .shb = 800, 147 .ehb = 800+256, 148 .shs = 840, 149 .ehs = 840+128, 150 151 .vt = 628, 152 .vrs = 601, 153 .vre = 601+4, 154 .vbs = 600, 155 .vbe = 600+28, 156 157 .frequency = 40000000, 158 159 .hsync = '+', 160 .vsync = '+', 161 .interlace = '\0', 162 }; 163 164 static Mode vesa800x600x72 = { 165 .name = "800x600@72Hz", 166 .x = 800, 167 .y = 600, 168 169 .ht = 1040, 170 .shb = 800, 171 .ehb = 800+240, 172 .shs = 856, 173 .ehs = 856+120, 174 175 .vt = 666, 176 .vrs = 637, 177 .vre = 637+6, 178 .vbs = 600, 179 .vbe = 600+66, 180 181 .frequency = 50000000, 182 183 .hsync = '+', 184 .vsync = '+', 185 .interlace = '\0', 186 }; 187 188 static Mode vesa800x600x75 = { 189 .name = "800x600@75Hz", 190 .x = 800, 191 .y = 600, 192 193 .ht = 1056, 194 .shb = 800, 195 .ehb = 800+256, 196 .shs = 816, 197 .ehs = 816+80, 198 199 .vt = 625, 200 .vrs = 601, 201 .vre = 601+3, 202 .vbs = 600, 203 .vbe = 600+25, 204 205 .frequency = 49500000, 206 207 .hsync = '+', 208 .vsync = '+', 209 .interlace = '\0', 210 }; 211 212 static Mode vesa800x600x85 = { 213 .name = "800x600@85Hz", 214 .x = 800, 215 .y = 600, 216 217 .ht = 1048, 218 .shb = 800, 219 .ehb = 800+248, 220 .shs = 832, 221 .ehs = 832+64, 222 223 .vt = 631, 224 .vrs = 601, 225 .vre = 601+3, 226 .vbs = 600, 227 .vbe = 600+31, 228 229 .frequency = 56250000, 230 231 .hsync = '+', 232 .vsync = '+', 233 .interlace = '\0', 234 }; 235 236 static Mode vesa1024x768x60 = { 237 .name = "1024x768@60Hz", 238 .x = 1024, 239 .y = 768, 240 241 .ht = 1344, 242 .shb = 1024, 243 .ehb = 1024+320, 244 .shs = 1048, 245 .ehs = 1048+136, 246 247 .vt = 806, 248 .vrs = 771, 249 .vre = 771+6, 250 .vbs = 768, 251 .vbe = 768+38, 252 253 .frequency = 65000000, 254 255 .hsync = '-', 256 .vsync = '-', 257 .interlace = '\0', 258 }; 259 260 static Mode vesa1024x768x70 = { 261 .name = "1024x768@70Hz", 262 .x = 1024, 263 .y = 768, 264 265 .ht = 1328, 266 .shb = 1024, 267 .ehb = 1024+304, 268 .shs = 1048, 269 .ehs = 1048+136, 270 271 .vt = 806, 272 .vrs = 771, 273 .vre = 771+6, 274 .vbs = 768, 275 .vbe = 768+38, 276 277 .frequency = 75000000, 278 279 .hsync = '-', 280 .vsync = '-', 281 .interlace = '\0', 282 }; 283 284 static Mode vesa1024x768x75 = { 285 .name = "1024x768@75Hz", 286 .x = 1024, 287 .y = 768, 288 289 .ht = 1312, 290 .shb = 1024, 291 .ehb = 1024+288, 292 .shs = 1040, 293 .ehs = 1040+96, 294 295 .vt = 800, 296 .vrs = 769, 297 .vre = 769+3, 298 .vbs = 768, 299 .vbe = 768+32, 300 301 .frequency = 78750000, 302 303 .hsync = '+', 304 .vsync = '+', 305 .interlace = '\0', 306 }; 307 308 static Mode vesa1024x768x85 = { 309 .name = "1024x768@85Hz", 310 .x = 1024, 311 .y = 768, 312 313 .ht = 1376, 314 .shb = 1024, 315 .ehb = 1024+352, 316 .shs = 1072, 317 .ehs = 1072+96, 318 319 .vt = 808, 320 .vrs = 769, 321 .vre = 769+3, 322 .vbs = 768, 323 .vbe = 768+40, 324 325 .frequency = 94500000, 326 327 .hsync = '+', 328 .vsync = '+', 329 .interlace = '\0', 330 }; 331 332 static Mode vesa1152x864x75 = { 333 .name = "1152x864@75Hz", 334 .x = 1152, 335 .y = 864, 336 337 .ht = 1600, 338 .shb = 1152, 339 .ehb = 1152+448, 340 .shs = 1216, 341 .ehs = 1216+128, 342 343 .vt = 900, 344 .vrs = 865, 345 .vre = 865+3, 346 .vbs = 864, 347 .vbe = 864+36, 348 349 .frequency = 108000000, 350 351 .hsync = '+', 352 .vsync = '+', 353 .interlace = '\0', 354 }; 355 356 static Mode vesa1280x960x60 = { 357 .name = "1280x960@60Hz", 358 .x = 1280, 359 .y = 960, 360 361 .ht = 1800, 362 .shb = 1280, 363 .ehb = 1280+520, 364 .shs = 1376, 365 .ehs = 1376+112, 366 367 .vt = 1000, 368 .vrs = 961, 369 .vre = 961+3, 370 .vbs = 960, 371 .vbe = 960+40, 372 373 .frequency = 108000000, 374 375 .hsync = '+', 376 .vsync = '+', 377 .interlace = '\0', 378 }; 379 380 static Mode vesa1280x960x85 = { 381 .name = "1280x960@85Hz", 382 .x = 1280, 383 .y = 960, 384 385 .ht = 1728, 386 .shb = 1280, 387 .ehb = 1280+448, 388 .shs = 1344, 389 .ehs = 1344+160, 390 391 .vt = 1011, 392 .vrs = 961, 393 .vre = 961+3, 394 .vbs = 960, 395 .vbe = 960+51, 396 397 .frequency = 148500000, 398 399 .hsync = '+', 400 .vsync = '+', 401 .interlace = '\0', 402 }; 403 404 static Mode vesa1280x1024x60 = { 405 .name = "1280x1024@60Hz", 406 .x = 1280, 407 .y = 1024, 408 409 .ht = 1688, 410 .shb = 1280, 411 .ehb = 1280+408, 412 .shs = 1328, 413 .ehs = 1328+112, 414 415 .vt = 1066, 416 .vrs = 1025, 417 .vre = 1025+3, 418 .vbs = 1024, 419 .vbe = 1024+42, 420 421 .frequency = 108000000, 422 423 .hsync = '+', 424 .vsync = '+', 425 .interlace = '\0', 426 }; 427 428 static Mode vesa1280x1024x75 = { 429 .name = "1280x1024@75Hz", 430 .x = 1280, 431 .y = 1024, 432 433 .ht = 1688, 434 .shb = 1280, 435 .ehb = 1280+408, 436 .shs = 1296, 437 .ehs = 1296+144, 438 439 .vt = 1066, 440 .vrs = 1025, 441 .vre = 1025+3, 442 .vbs = 1024, 443 .vbe = 1024+42, 444 445 .frequency = 135000000, 446 447 .hsync = '+', 448 .vsync = '+', 449 .interlace = '\0', 450 }; 451 452 static Mode vesa1280x1024x85 = { 453 .name = "1280x1024@85Hz", 454 .x = 1280, 455 .y = 1024, 456 457 .ht = 1728, 458 .shb = 1280, 459 .ehb = 1280+448, 460 .shs = 1344, 461 .ehs = 1344+160, 462 463 .vt = 1072, 464 .vrs = 1025, 465 .vre = 1025+3, 466 .vbs = 1024, 467 .vbe = 1024+48, 468 469 .frequency = 157500000, 470 471 .hsync = '+', 472 .vsync = '+', 473 .interlace = '\0', 474 }; 475 476 static Mode vesa1600x1200x60 = { 477 .name = "1600x1200@60Hz", 478 .x = 1600, 479 .y = 1200, 480 481 .ht = 2160, 482 .shb = 1600, 483 .ehb = 1600+560, 484 .shs = 1664, 485 .ehs = 1664+192, 486 487 .vt = 1250, 488 .vrs = 1201, 489 .vre = 1201+3, 490 .vbs = 1200, 491 .vbe = 1200+50, 492 493 .frequency = 162000000, 494 495 .hsync = '+', 496 .vsync = '+', 497 .interlace = '\0', 498 }; 499 500 static Mode vesa1600x1200x65 = { 501 .name = "1600x1200@65Hz", 502 .x = 1600, 503 .y = 1200, 504 505 .ht = 2160, 506 .shb = 1600, 507 .ehb = 1600+560, 508 .shs = 1664, 509 .ehs = 1664+192, 510 511 .vt = 1250, 512 .vrs = 1201, 513 .vre = 1201+3, 514 .vbs = 1200, 515 .vbe = 1200+50, 516 517 .frequency = 175500000, 518 519 .hsync = '+', 520 .vsync = '+', 521 .interlace = '\0', 522 }; 523 524 static Mode vesa1600x1200x70 = { 525 .name = "1600x1200@70Hz", 526 .x = 1600, 527 .y = 1200, 528 529 .ht = 2160, 530 .shb = 1600, 531 .ehb = 1600+560, 532 .shs = 1664, 533 .ehs = 1664+192, 534 535 .vt = 1250, 536 .vrs = 1201, 537 .vre = 1201+3, 538 .vbs = 1200, 539 .vbe = 1200+50, 540 541 .frequency = 189000000, 542 543 .hsync = '+', 544 .vsync = '+', 545 .interlace = '\0', 546 }; 547 548 static Mode vesa1600x1200x75 = { 549 .name = "1600x1200@75Hz", 550 .x = 1600, 551 .y = 1200, 552 553 .ht = 2160, 554 .shb = 1600, 555 .ehb = 1600+560, 556 .shs = 1664, 557 .ehs = 1664+192, 558 559 .vt = 1250, 560 .vrs = 1201, 561 .vre = 1201+3, 562 .vbs = 1200, 563 .vbe = 1200+50, 564 565 .frequency = 202500000, 566 567 .hsync = '+', 568 .vsync = '+', 569 .interlace = '\0', 570 }; 571 572 static Mode vesa1600x1200x85 = { 573 .name = "1600x1200@85Hz", 574 .x = 1600, 575 .y = 1200, 576 577 .ht = 2160, 578 .shb = 1600, 579 .ehb = 1600+560, 580 .shs = 1664, 581 .ehs = 1664+192, 582 583 .vt = 1250, 584 .vrs = 1201, 585 .vre = 1201+3, 586 .vbs = 1200, 587 .vbe = 1200+50, 588 589 .frequency = 229500000, 590 591 .hsync = '+', 592 .vsync = '+', 593 .interlace = '\0', 594 }; 595 596 static Mode vesa1792x1344x60 = { 597 .name = "1792x1344@60Hz", 598 .x = 1792, 599 .y = 1344, 600 601 .ht = 2448, 602 .shb = 1792, 603 .ehb = 1792+656, 604 .shs = 1920, 605 .ehs = 1920+200, 606 607 .vt = 1394, 608 .vrs = 1345, 609 .vre = 1345+3, 610 .vbs = 1344, 611 .vbe = 1344+50, 612 613 .frequency = 204750000, 614 615 .hsync = '-', 616 .vsync = '+', 617 .interlace = '\0', 618 }; 619 620 static Mode vesa1792x1344x75 = { 621 .name = "1792x1344@75Hz", 622 .x = 1792, 623 .y = 1344, 624 625 .ht = 2456, 626 .shb = 1792, 627 .ehb = 1792+664, 628 .shs = 1888, 629 .ehs = 1888+216, 630 631 .vt = 1417, 632 .vrs = 1345, 633 .vre = 1345+3, 634 .vbs = 1344, 635 .vbe = 1344+73, 636 637 .frequency = 261000000, 638 639 .hsync = '-', 640 .vsync = '+', 641 .interlace = '\0', 642 }; 643 644 static Mode vesa1856x1392x60 = { 645 .name = "1856x1392@60Hz", 646 .x = 1856, 647 .y = 1392, 648 649 .ht = 2528, 650 .shb = 1856, 651 .ehb = 1856+672, 652 .shs = 1952, 653 .ehs = 1952+224, 654 655 .vt = 1439, 656 .vrs = 1393, 657 .vre = 1393+3, 658 .vbs = 1392, 659 .vbe = 1392+47, 660 661 .frequency = 218250000, 662 663 .hsync = '-', 664 .vsync = '+', 665 .interlace = '\0', 666 }; 667 668 static Mode vesa1856x1392x75 = { 669 .name = "1856x1392@75Hz", 670 .x = 1856, 671 .y = 1392, 672 673 .ht = 2560, 674 .shb = 1856, 675 .ehb = 1856+704, 676 .shs = 1984, 677 .ehs = 1984+224, 678 679 .vt = 1500, 680 .vrs = 1393, 681 .vre = 1393+3, 682 .vbs = 1392, 683 .vbe = 1392+108, 684 685 .frequency = 288000000, 686 687 .hsync = '-', 688 .vsync = '+', 689 .interlace = '\0', 690 }; 691 692 static Mode vesa1920x1440x60 = { 693 .name = "1920x1440@60Hz", 694 .x = 1920, 695 .y = 1440, 696 697 .ht = 2600, 698 .shb = 1920, 699 .ehb = 1920+680, 700 .shs = 2048, 701 .ehs = 2048+208, 702 703 .vt = 1500, 704 .vrs = 1441, 705 .vre = 1441+3, 706 .vbs = 1440, 707 .vbe = 1440+60, 708 709 .frequency = 234000000, 710 711 .hsync = '-', 712 .vsync = '+', 713 .interlace = '\0', 714 }; 715 716 static Mode vesa1920x1440x75 = { 717 .name = "1920x1440@75Hz", 718 .x = 1920, 719 .y = 1440, 720 721 .ht = 2640, 722 .shb = 1920, 723 .ehb = 1920+720, 724 .shs = 2064, 725 .ehs = 2064+224, 726 727 .vt = 1500, 728 .vrs = 1441, 729 .vre = 1441+3, 730 .vbs = 1440, 731 .vbe = 1440+60, 732 733 .frequency = 297000000, 734 735 .hsync = '-', 736 .vsync = '+', 737 .interlace = '\0', 738 }; 739 740 Mode *vesamodes[] = { 741 &vesa640x480x60, 742 &vesa640x480x72, 743 &vesa640x480x75, 744 &vesa640x480x85, 745 &vesa800x600x56, 746 &vesa800x600x60, 747 &vesa800x600x72, 748 &vesa800x600x75, 749 &vesa800x600x85, 750 &vesa1024x768x60, 751 &vesa1024x768x70, 752 &vesa1024x768x75, 753 &vesa1024x768x85, 754 &vesa1152x864x75, 755 &vesa1280x960x60, 756 &vesa1280x960x85, 757 &vesa1280x1024x60, 758 &vesa1280x1024x75, 759 &vesa1280x1024x85, 760 &vesa1600x1200x60, 761 &vesa1600x1200x65, 762 &vesa1600x1200x70, 763 &vesa1600x1200x75, 764 &vesa1600x1200x85, 765 &vesa1792x1344x60, 766 &vesa1792x1344x75, 767 &vesa1856x1392x60, 768 &vesa1856x1392x75, 769 &vesa1920x1440x60, 770 &vesa1920x1440x75, 771 0 772 }; 773