#include "vesamode.h"
#ident "$Id$"

/* Known standard VESA modes. */
struct vesa_mode_t known_vesa_modes[] = {
	/* VESA 1.0/1.1 ? */
	{0x100,	640, 400, 256,	"640x400x256"},
	{0x101,	640, 480, 256,	"640x480x256"},
	{0x102,	800, 600, 16,	"800x600x16"},
	{0x103,	800, 600, 256,	"800x600x256"},
	{0x104,	1024, 768, 16,	"1024x768x16"},
	{0x105,	1024, 768, 256,	"1024x768x256"},
	{0x106,	1280, 1024, 16,	"1280x1024x16"},
	{0x107,	1280, 1024, 256,"1280x1024x256"},
	{0x108,	80, 60, 16,	"80x60 (text)"},
	{0x109,	132, 25, 16,	"132x25 (text)"},
	{0x10a,	132, 43, 16,	"132x43 (text)"},
	{0x10b,	132, 50, 16,	"132x50 (text)"},
	{0x10c,	132, 60, 16,	"132x60 (text)"},
	/* VESA 1.2+ */
	{0x10d,	320, 200, 32768,	"320x200x32k"},
	{0x10e,	320, 200, 65536,	"320x200x64k"},
	{0x10f,	320, 200, 16777216,	"320x200x16m"},
	{0x110,	640, 480, 32768,	"640x480x32k"},
	{0x111,	640, 480, 65536,	"640x480x64k"},
	{0x112,	640, 480, 16777216,	"640x480x16m"},
	{0x113,	800, 600, 32768,	"800x600x32k"},
	{0x114,	800, 600, 65536,	"800x600x64k"},
	{0x115,	800, 600, 16777216,	"800x600x16m"},
	{0x116,	1024, 768, 32768,	"1024x768x32k"},
	{0x117,	1024, 768, 65536,	"1024x768x64k"},
	{0x118,	1024, 768, 16777216,	"1024x768x16m"},
	{0x119,	1280, 1024, 32768,	"1280x1024x32k"},
	{0x11a,	1280, 1024, 65536,	"1280x1024x64k"},
	{0x11b,	1280, 1024, 16777216,	"1280x1024x16m"},
	/* VESA 2.0+ */
	{0x120,	1600, 1200, 256,	"1600x1200x256"},
	{0x121,	1600, 1200, 32768,	"1600x1200x32k"},
	{0x122,	1600, 1200, 65536,	"1600x1200x64k"},
	{    0,    0,    0, 0,		""},
};

struct vesa_timing_t known_vesa_timings[] = {
	/* Source: VESA Monitor Timing Specifications 1.0 rev 0.8 */
	{ 640,  350, 85,  31.500, { 640, 32,  64,  96,  350,32, 3, 60},
	  hsync_pos, vsync_neg, 37.861,  85.080},

	{ 640,  400, 85,  31.500, { 640, 32,  64,  96,  400, 1, 3, 41},
	  hsync_neg, vsync_pos, 37.861,  85.080},

	{ 720,  400, 85,  35.500, { 720, 36, 72,  108,  400, 1, 3, 42},
	  hsync_neg, vsync_pos, 37.861,  85.080},

	{ 640,  480, 60,  25.175, { 640,  8,  96,  40,  480, 2, 2, 25},
	 hsync_neg, vsync_neg,  31.469,  59.940},
	{ 640,  480, 72,  31.500, { 640, 16,  40, 120,  480, 1, 3, 20},
	 hsync_neg, vsync_neg,  37.861,  72.809},
	{ 640,  480, 75,  31.500, { 640, 16,  64, 120,  480, 1, 3, 16},
	 hsync_neg, vsync_neg,  37.500,  75.000},
	{ 640,  480, 85,  36.000, { 640, 56,  56,  80,  480, 1, 3, 25},
	 hsync_neg, vsync_neg,  43.269,  85.008},

	{ 800,  600, 56,  36.000, { 800, 24,  72, 128,  600, 1, 2, 22},
	 hsync_pos, vsync_pos,  35.156,  56.250},
	{ 800,  600, 60,  40.000, { 800, 40, 128,  88,  600, 1, 4, 23},
	 hsync_pos, vsync_pos,  37.879,  60.317},
	{ 800,  600, 72,  50.000, { 800, 56, 120,  64,  600,37, 6, 23},
	 hsync_pos, vsync_pos,  48.077,  72.188},
	{ 800,  600, 75,  49.500, { 800, 16,  80, 160,  600, 1, 3, 21},
	 hsync_pos, vsync_pos,  46.875,  75.000},
	{ 800,  600, 85,  56.250, { 800, 32,  64, 152,  600, 1, 3, 27},
	 hsync_pos, vsync_pos,  53.674,  85.061},

	{1024,  768, 43,  44.900, {1024,  8, 176,  56,  768, 0, 4, 20},
	 hsync_pos, vsync_pos,  35.522,  86.957},
	{1024,  768, 60,  65.000, {1024, 24, 136, 160,  768, 3, 6, 29},
	 hsync_neg, vsync_neg,  48.363,  60.004},
	{1024,  768, 70,  75.000, {1024, 24, 136, 144,  768, 3, 6, 29},
	 hsync_neg, vsync_neg,  56.476,  70.069},
	{1024,  768, 75,  78.750, {1024, 16,  96, 176,  768, 1, 3, 28},
	 hsync_pos, vsync_pos,  60.023,  75.029},
	{1024,  768, 85,  94.500, {1024, 48,  96, 208,  768, 1, 3, 36},
	 hsync_pos, vsync_pos,  68.677,  84.997},

	{1152,  864, 70,  94.200, {1152, 32,  96, 192,  864, 1, 3, 46},
	 hsync_pos, vsync_pos,   0.000,   0.000},
	{1152,  864, 75, 108.000, {1152, 64, 128, 256,  864, 1, 3, 32},
	 hsync_pos, vsync_pos,  67.500,  75.000},
	{1152,  864, 85, 121.500, {1152, 64, 128, 224,  864, 1, 3, 43},
	 hsync_pos, vsync_pos,   0.000,   0.000},

	{1280,  960, 60, 108.000, {1280, 96, 112, 312,  960, 1, 3, 36},
	 hsync_pos, vsync_pos,  60.000,  60.000},
	{1280,  960, 85, 148.500, {1280, 64, 160, 224,  960, 1, 3, 47},
	 hsync_pos, vsync_pos,  85.398,  85.002},

	{1280, 1024, 60, 108.000, {1280, 48, 112, 248, 1024, 1, 3, 38},
	 hsync_pos, vsync_pos,  63.981,  60.020},
	{1280, 1024, 75, 135.000, {1280, 16, 144, 248, 1024, 1, 3, 38},
	 hsync_pos, vsync_pos,  79.976,  75.025},
	{1280, 1024, 85, 157.500, {1280, 64, 160, 224, 1024, 1, 3, 44},
	 hsync_pos, vsync_pos,  91.146,  85.024},

	{1600, 1200, 60, 162.000, {1600, 64, 192, 304, 1200, 1, 3, 46},
	 hsync_pos, vsync_pos,  75.000,  60.000},
	{1600, 1200, 65, 175.500, {1600, 64, 192, 304, 1200, 1, 3, 46},
	 hsync_pos, vsync_pos,  81.250,  65.000},
	{1600, 1200, 70, 189.000, {1600, 64, 192, 304, 1200, 1, 3, 46},
	 hsync_pos, vsync_pos,  87.500,  70.000},
	{1600, 1200, 75, 202.500, {1600, 64, 192, 304, 1200, 1, 3, 46},
	 hsync_pos, vsync_pos,  93.750,  75.000},
	{1600, 1200, 85, 229.500, {1600, 64, 192, 304, 1200, 1, 3, 46},
	 hsync_pos, vsync_pos, 106.250,  85.000},

	{1792, 1344, 60, 204.750, {1792,128, 200, 328, 1344, 1, 3, 46},
	 hsync_neg, vsync_pos,  83.640,  60.000},
	{1792, 1344, 75, 261.000, {1792, 96, 216, 352, 1344, 1, 3, 69},
	 hsync_neg, vsync_pos, 106.270,  74.997},

	{1856, 1392, 60, 218.250, {1856, 96, 224, 352, 1392, 1, 3, 43},
	 hsync_neg, vsync_pos,  86.333,  59.995},
	{1856, 1392, 75, 288.000, {1856,128, 224, 352, 1392, 1, 3,104},
	 hsync_neg, vsync_pos, 112.500,  75.000},

	{1920, 1440, 60, 234.000, {1920,128, 208, 344, 1440, 1, 3, 56},
	 hsync_neg, vsync_pos,  90.000,  60.000},
	{1920, 1440, 75, 297.000, {1920,144, 224, 352, 1440, 1, 3, 56},
	 hsync_neg, vsync_pos, 112.500,  75.000},

	{   0,    0,  0,   0.000, {   0,  0,   0,   0,    0, 0, 0,  0},
	 000000000, 000000000,   0.000,   0.000},
};