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