vmwaremodes.c revision 16fd1166
116fd1166Smrg/*
216fd1166Smrg * Copyright 2007 by VMware, Inc.
316fd1166Smrg *
416fd1166Smrg * Permission is hereby granted, free of charge, to any person obtaining a
516fd1166Smrg * copy of this software and associated documentation files (the "Software"),
616fd1166Smrg * to deal in the Software without restriction, including without limitation
716fd1166Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
816fd1166Smrg * and/or sell copies of the Software, and to permit persons to whom the
916fd1166Smrg * Software is furnished to do so, subject to the following conditions:
1016fd1166Smrg *
1116fd1166Smrg * The above copyright notice and this permission notice shall be included in
1216fd1166Smrg * all copies or substantial portions of the Software.
1316fd1166Smrg *
1416fd1166Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1516fd1166Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1616fd1166Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
1716fd1166Smrg * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
1816fd1166Smrg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
1916fd1166Smrg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
2016fd1166Smrg * OTHER DEALINGS IN THE SOFTWARE.
2116fd1166Smrg *
2216fd1166Smrg * Except as contained in this notice, the name of the copyright holder(s)
2316fd1166Smrg * and author(s) shall not be used in advertising or otherwise to promote
2416fd1166Smrg * the sale, use or other dealings in this Software without prior written
2516fd1166Smrg * authorization from the copyright holder(s) and author(s).
2616fd1166Smrg */
2716fd1166Smrg
2816fd1166Smrg/*
2916fd1166Smrg * vmwaremodes.c --
3016fd1166Smrg *
3116fd1166Smrg *      Provide the supported modelines for the driver.
3216fd1166Smrg *
3316fd1166Smrg *      VMware does not have virtual monitor and there is no EDID to
3416fd1166Smrg *      automatically report the supported mode. The list of
3516fd1166Smrg *      supported modelines are manually added in the driver.
3616fd1166Smrg */
3716fd1166Smrg
3816fd1166Smrg#include "xf86.h"
3916fd1166Smrg
4016fd1166Smrg#ifndef M_T_DRIVER
4116fd1166Smrg# define M_T_DRIVER  0x40	/* Supplied by the driver (EDID, etc) */
4216fd1166Smrg#endif
4316fd1166Smrg
4416fd1166Smrg#define MODEPREFIX NULL, NULL, NULL, 0, M_T_DRIVER
4516fd1166Smrg#define MODESUFFIX 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,FALSE,FALSE,0,NULL,0,0.0,0.0
4616fd1166Smrg
4716fd1166Smrg/*
4816fd1166Smrg * Most of the modelines copied from DMTModes table of xf86EdidModes.c.
4916fd1166Smrg * For those modes not in DMTModes table are generated by gtf
5016fd1166Smrg */
5116fd1166Smrgstatic DisplayModeRec VMwareModes[] = {
5216fd1166Smrg   /* 4:3 modes */
5316fd1166Smrg   { MODEPREFIX,  5260,  320,  304,  336,  352, 0,  240,  241,  244,  249, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 320x240@60Hz,  GTF */
5416fd1166Smrg   { MODEPREFIX,  8660,  400,  392,  432,  464, 0,  300,  301,  304,  311, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 400x300@60Hz,  GTF */
5516fd1166Smrg   { MODEPREFIX, 14900,  512,  520,  568,  624, 0,  384,  385,  388,  398, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 512x384@60Hz,  GTF */
5616fd1166Smrg   { MODEPREFIX, 25175,  640,  656,  752,  800, 0,  480,  490,  492,  525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x480@60Hz,  DMT */
5716fd1166Smrg   { MODEPREFIX, 40000,  800,  840,  968, 1056, 0,  600,  601,  605,  628, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x600@60Hz,  DMT */
5816fd1166Smrg   { MODEPREFIX, 65000, 1024, 1048, 1184, 1344, 0,  768,  771,  777,  806, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 1024x768@60Hz, DMT */
5916fd1166Smrg   { MODEPREFIX, 81620, 1152, 1216, 1336, 1520, 0,  864,  865,  868,  895, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 1152x864@60Hz, GTF */
6016fd1166Smrg   { MODEPREFIX,108000, 1280, 1376, 1488, 1800, 0,  960,  961,  964, 1000, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 1280x960@60Hz, DMT */
6116fd1166Smrg   { MODEPREFIX,121750, 1400, 1488, 1632, 1864, 0, 1050, 1053, 1057, 1089, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1400x1050@60Hz,DMT */
6216fd1166Smrg   { MODEPREFIX,162000, 1600, 1664, 1856, 2160, 0, 1200, 1201, 1204, 1250, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 1600x1200@60Hz,DMT */
6316fd1166Smrg   { MODEPREFIX,234000, 1920, 2048, 2256, 2600, 0, 1440, 1441, 1444, 1500, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1920x1440@60Hz,DMT */
6416fd1166Smrg   { MODEPREFIX,266950, 2048, 2200, 2424, 2800, 0, 1536, 1537, 1540, 1589, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 2048x1536@60Hz,GTF */
6516fd1166Smrg   { MODEPREFIX,421560, 2560, 2768, 3048, 3536, 0, 1920, 1921, 1924, 1987, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 2560x1920@60Hz,GTF */
6616fd1166Smrg   /* 16:9 modes */
6716fd1166Smrg   { MODEPREFIX, 31730,  856,  872,  960, 1064, 0,  480,  481,  484,  497, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 856x480@60Hz,  GTF */
6816fd1166Smrg   { MODEPREFIX, 74480, 1280, 1336, 1472, 1664, 0,  720,  721,  724,  746, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1280x720@60Hz, GTF */
6916fd1166Smrg   { MODEPREFIX, 85860, 1368, 1440, 1584, 1800, 0,  768,  769,  772,  795, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1368x768@60Hz, GTF */
7016fd1166Smrg   { MODEPREFIX,172800, 1920, 2040, 2248, 2576, 0, 1080, 1081, 1084, 1118, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1920x1080@60Hz,GTF */
7116fd1166Smrg   /* 16:10 modes */
7216fd1166Smrg   { MODEPREFIX, 83500, 1280, 1352, 1480, 1680, 0,  800,  803,  809,  831, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1280x800@60Hz, DMT */
7316fd1166Smrg   { MODEPREFIX,106500, 1440, 1520, 1672, 1904, 0,  900,  903,  909,  934, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1440x900@60Hz, DMT */
7416fd1166Smrg   { MODEPREFIX,146250, 1680, 1784, 1960, 2240, 0, 1050, 1053, 1059, 1089, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1680x1050@60Hz,DMT */
7516fd1166Smrg   { MODEPREFIX,193250, 1920, 2056, 2256, 2592, 0, 1200, 1203, 1209, 1245, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1920x1200@60Hz,DMT */
7616fd1166Smrg   { MODEPREFIX,348500, 2560, 2752, 3032, 3504, 0, 1600, 1603, 1609, 1658, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 2560x1600@60Hz,DMT */
7716fd1166Smrg   /* DVD modes */
7816fd1166Smrg   { MODEPREFIX, 26720,  720,  736,  808,  896, 0,  480,  481,  484,  497, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 720x480@60Hz,  GTF */
7916fd1166Smrg   { MODEPREFIX, 32670,  720,  744,  816,  912, 0,  576,  577,  580,  597, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 720x576@60Hz,  GTF */
8016fd1166Smrg   /* Odd modes */
8116fd1166Smrg   { MODEPREFIX,  4190,  320,  304,  328,  336, 0,  200,  201,  204,  208, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 320x200@60Hz,  GTF */
8216fd1166Smrg   { MODEPREFIX, 19520,  640,  648,  712,  784, 0,  400,  401,  404,  415, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 640x400@60Hz,  GTF */
8316fd1166Smrg   { MODEPREFIX, 29580,  800,  816,  896,  992, 0,  480,  481,  484,  497, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x480@60Hz,  GTF */
8416fd1166Smrg   { MODEPREFIX, 79500, 1280, 1344, 1472, 1664, 0,  768,  771,  778,  798, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1280x768@60Hz, DMT */
8516fd1166Smrg   { MODEPREFIX,108000, 1280, 1328, 1440, 1688, 0, 1024, 1025, 1028, 1066, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 1280x1024@60Hz,DMT */
8616fd1166Smrg};
8716fd1166Smrg
8816fd1166Smrg
8916fd1166Smrg/*
9016fd1166Smrg *-----------------------------------------------------------------------------
9116fd1166Smrg *
9216fd1166Smrg * vmwareGetSupportedModelines --
9316fd1166Smrg *
9416fd1166Smrg *    Get the supported modelines.
9516fd1166Smrg *
9616fd1166Smrg * Results:
9716fd1166Smrg *    The supported modelines.
9816fd1166Smrg *
9916fd1166Smrg * Side effects:
10016fd1166Smrg *    None.
10116fd1166Smrg *
10216fd1166Smrg *-----------------------------------------------------------------------------
10316fd1166Smrg */
10416fd1166Smrg
10516fd1166Smrgvoid
10616fd1166SmrgvmwareGetSupportedModelines(DisplayModePtr *monitorModes)
10716fd1166Smrg{
10816fd1166Smrg    DisplayModePtr modes = NULL, mode = NULL;
10916fd1166Smrg    int i = 0;
11016fd1166Smrg
11116fd1166Smrg    if (monitorModes == NULL || *monitorModes == NULL) {
11216fd1166Smrg       return;
11316fd1166Smrg    }
11416fd1166Smrg
11516fd1166Smrg#ifdef HAVE_XORG_SERVER_1_2_0
11616fd1166Smrg    for (i = 0; i < sizeof(VMwareModes)/sizeof(DisplayModeRec); i++) {
11716fd1166Smrg       mode = xf86DuplicateMode(&(VMwareModes[i]));
11816fd1166Smrg       modes = xf86ModesAdd(modes, mode);
11916fd1166Smrg    }
12016fd1166Smrg
12116fd1166Smrg    *monitorModes = xf86ModesAdd(*monitorModes, modes);
12216fd1166Smrg#endif
12316fd1166Smrg}
124