Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Copyright 2007  Luc Verhaegen <lverhaegen@novell.com>
  3.  * Copyright 2007  Matthias Hopf <mhopf@novell.com>
  4.  * Copyright 2007  Egbert Eich   <eich@novell.com>
  5.  * Copyright 2007  Advanced Micro Devices, Inc.
  6.  *
  7.  * Permission is hereby granted, free of charge, to any person obtaining a
  8.  * copy of this software and associated documentation files (the "Software"),
  9.  * to deal in the Software without restriction, including without limitation
  10.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  11.  * and/or sell copies of the Software, and to permit persons to whom the
  12.  * Software is furnished to do so, subject to the following conditions:
  13.  *
  14.  * The above copyright notice and this permission notice shall be included in
  15.  * all copies or substantial portions of the Software.
  16.  *
  17.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  18.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  19.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  20.  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
  21.  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  22.  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  23.  * OTHER DEALINGS IN THE SOFTWARE.
  24.  */
  25.  
  26. #ifdef HAVE_CONFIG_H
  27. #include "config.h"
  28. #endif
  29.  
  30. #include "xf86.h"
  31. #include "rhd.h"
  32. #ifdef ATOM_BIOS
  33. #include "rhd_atombios.h"
  34. #endif
  35. #include "rhd_connector.h"
  36. #include "rhd_output.h"
  37. #include "rhd_card.h"
  38.  
  39. SymTabRec RHDChipsets[] = {
  40.     /* R500 */
  41.     { RHD_RV505, "RV505" },
  42.     { RHD_RV515, "RV515" },
  43.     { RHD_RV516, "RV516" },
  44.     { RHD_R520,  "R520" },
  45.     { RHD_RV530, "RV530" },
  46.     { RHD_RV535, "RV535" },
  47.     { RHD_RV550, "RV550" },
  48.     { RHD_RV560, "RV560" },
  49.     { RHD_RV570, "RV570" },
  50.     { RHD_R580,  "R580" },
  51.     /* R500 Mobility */
  52.     { RHD_M52,   "M52" },
  53.     { RHD_M54,   "M54" },
  54.     { RHD_M56,   "M56" },
  55.     { RHD_M58,   "M58" },
  56.     { RHD_M62,   "M62" },
  57.     { RHD_M64,   "M64" },
  58.     { RHD_M66,   "M66" },
  59.     { RHD_M68,   "M68" },
  60.     { RHD_M71,   "M71" },
  61.     /* R500 integrated */
  62.     { RHD_RS600, "RS600" },
  63.     { RHD_RS690, "RS690" },
  64.     { RHD_RS740, "RS740" },
  65.     /* R600 */
  66.     { RHD_R600,  "R600" },
  67.     { RHD_RV610, "RV610" },
  68.     { RHD_RV630, "RV630" },
  69.     /* R600 Mobility */
  70.     { RHD_M72,   "M72" },
  71.     { RHD_M74,   "M74" },
  72.     { RHD_M76,   "M76" },
  73.     /* RV670 came into existence after RV6x0 and M7x */
  74.     { RHD_RV670, "RV670" },
  75.     { RHD_M88,   "M88" },
  76.     { RHD_R680,  "R680"  },
  77.     { RHD_RV620, "RV620" },
  78.     { RHD_M82,   "M82"   },
  79.     { RHD_RV635, "RV635" },
  80.     { RHD_M86,   "M86"   },
  81.     { RHD_RS780, "RS780" },
  82.     { RHD_RV770, "RV770" },
  83.     { RHD_RV730, "RV730" },
  84.     { RHD_RV710, "RV710" },
  85.     { -1,      NULL }
  86. };
  87.  
  88. # define RHD_DEVICE_MATCH(d, i) { (d),(i) }
  89. # define PCI_ID_LIST PciChipset_t RHDPCIchipsets[]
  90. # define LIST_END { 0,  0}
  91.  
  92. const PCI_ID_LIST = {
  93.     RHD_DEVICE_MATCH(  0x7100, RHD_R520  ), /* Radeon X1800 */
  94.     RHD_DEVICE_MATCH(  0x7101, RHD_M58   ), /* Mobility Radeon X1800 XT */
  95.     RHD_DEVICE_MATCH(  0x7102, RHD_M58   ), /* Mobility Radeon X1800 */
  96.     RHD_DEVICE_MATCH(  0x7103, RHD_M58   ), /* Mobility FireGL V7200 */
  97.     RHD_DEVICE_MATCH(  0x7104, RHD_R520  ), /* FireGL V7200 */
  98.     RHD_DEVICE_MATCH(  0x7105, RHD_R520  ), /* FireGL V5300 */
  99.     RHD_DEVICE_MATCH(  0x7106, RHD_M58   ), /* Mobility FireGL V7100 */
  100.     RHD_DEVICE_MATCH(  0x7108, RHD_R520  ), /* Radeon X1800 */
  101.     RHD_DEVICE_MATCH(  0x7109, RHD_R520  ), /* Radeon X1800 */
  102.     RHD_DEVICE_MATCH(  0x710A, RHD_R520  ), /* Radeon X1800 */
  103.     RHD_DEVICE_MATCH(  0x710B, RHD_R520  ), /* Radeon X1800 */
  104.     RHD_DEVICE_MATCH(  0x710C, RHD_R520  ), /* Radeon X1800 */
  105.     RHD_DEVICE_MATCH(  0x710E, RHD_R520  ), /* FireGL V7300 */
  106.     RHD_DEVICE_MATCH(  0x710F, RHD_R520  ), /* FireGL V7350 */
  107.     RHD_DEVICE_MATCH(  0x7140, RHD_RV515 ), /* Radeon X1600/X1550 */
  108.     RHD_DEVICE_MATCH(  0x7141, RHD_RV505 ), /* RV505 */
  109.     RHD_DEVICE_MATCH(  0x7142, RHD_RV515 ), /* Radeon X1300/X1550 */
  110.     RHD_DEVICE_MATCH(  0x7143, RHD_RV505 ), /* Radeon X1550 */
  111.     RHD_DEVICE_MATCH(  0x7144, RHD_M54   ), /* M54-GL */
  112.     RHD_DEVICE_MATCH(  0x7145, RHD_M54   ), /* Mobility Radeon X1400 */
  113.     RHD_DEVICE_MATCH(  0x7146, RHD_RV515 ), /* Radeon X1300/X1550 */
  114.     RHD_DEVICE_MATCH(  0x7147, RHD_RV505 ), /* Radeon X1550 64-bit */
  115.     RHD_DEVICE_MATCH(  0x7149, RHD_M52   ), /* Mobility Radeon X1300 */
  116.     RHD_DEVICE_MATCH(  0x714A, RHD_M52   ), /* Mobility Radeon X1300 */
  117.     RHD_DEVICE_MATCH(  0x714B, RHD_M52   ), /* Mobility Radeon X1300 */
  118.     RHD_DEVICE_MATCH(  0x714C, RHD_M52   ), /* Mobility Radeon X1300 */
  119.     RHD_DEVICE_MATCH(  0x714D, RHD_RV515 ), /* Radeon X1300 */
  120.     RHD_DEVICE_MATCH(  0x714E, RHD_RV515 ), /* Radeon X1300 */
  121.     RHD_DEVICE_MATCH(  0x714F, RHD_RV505 ), /* RV505 */
  122.     RHD_DEVICE_MATCH(  0x7151, RHD_RV505 ), /* RV505 */
  123.     RHD_DEVICE_MATCH(  0x7152, RHD_RV515 ), /* FireGL V3300 */
  124.     RHD_DEVICE_MATCH(  0x7153, RHD_RV515 ), /* FireGL V3350 */
  125.     RHD_DEVICE_MATCH(  0x715E, RHD_RV515 ), /* Radeon X1300 */
  126.     RHD_DEVICE_MATCH(  0x715F, RHD_RV505 ), /* Radeon X1550 64-bit */
  127.     RHD_DEVICE_MATCH(  0x7180, RHD_RV516 ), /* Radeon X1300/X1550 */
  128.     RHD_DEVICE_MATCH(  0x7181, RHD_RV516 ), /* Radeon X1600 */
  129.     RHD_DEVICE_MATCH(  0x7183, RHD_RV516 ), /* Radeon X1300/X1550 */
  130.     RHD_DEVICE_MATCH(  0x7186, RHD_M64   ), /* Mobility Radeon X1450 */
  131.     RHD_DEVICE_MATCH(  0x7187, RHD_RV516 ), /* Radeon X1300/X1550 */
  132.     RHD_DEVICE_MATCH(  0x7188, RHD_M64   ), /* Mobility Radeon X2300 */
  133.     RHD_DEVICE_MATCH(  0x718A, RHD_M64   ), /* Mobility Radeon X2300 */
  134.     RHD_DEVICE_MATCH(  0x718B, RHD_M62   ), /* Mobility Radeon X1350 */
  135.     RHD_DEVICE_MATCH(  0x718C, RHD_M62   ), /* Mobility Radeon X1350 */
  136.     RHD_DEVICE_MATCH(  0x718D, RHD_M64   ), /* Mobility Radeon X1450 */
  137.     RHD_DEVICE_MATCH(  0x718F, RHD_RV516 ), /* Radeon X1300 */
  138.     RHD_DEVICE_MATCH(  0x7193, RHD_RV516 ), /* Radeon X1550 */
  139.     RHD_DEVICE_MATCH(  0x7196, RHD_M62   ), /* Mobility Radeon X1350 */
  140.     RHD_DEVICE_MATCH(  0x719B, RHD_RV516 ), /* FireMV 2250 */
  141.     RHD_DEVICE_MATCH(  0x719F, RHD_RV516 ), /* Radeon X1550 64-bit */
  142.     RHD_DEVICE_MATCH(  0x71C0, RHD_RV530 ), /* Radeon X1600 */
  143.     RHD_DEVICE_MATCH(  0x71C1, RHD_RV535 ), /* Radeon X1650 */
  144.     RHD_DEVICE_MATCH(  0x71C2, RHD_RV530 ), /* Radeon X1600 */
  145.     RHD_DEVICE_MATCH(  0x71C3, RHD_RV535 ), /* Radeon X1600 */
  146.     RHD_DEVICE_MATCH(  0x71C4, RHD_M56   ), /* Mobility FireGL V5200 */
  147.     RHD_DEVICE_MATCH(  0x71C5, RHD_M56   ), /* Mobility Radeon X1600 */
  148.     RHD_DEVICE_MATCH(  0x71C6, RHD_RV530 ), /* Radeon X1650 */
  149.     RHD_DEVICE_MATCH(  0x71C7, RHD_RV535 ), /* Radeon X1650 */
  150.     RHD_DEVICE_MATCH(  0x71CD, RHD_RV530 ), /* Radeon X1600 */
  151.     RHD_DEVICE_MATCH(  0x71CE, RHD_RV530 ), /* Radeon X1300 XT/X1600 Pro */
  152.     RHD_DEVICE_MATCH(  0x71D2, RHD_RV530 ), /* FireGL V3400 */
  153.     RHD_DEVICE_MATCH(  0x71D4, RHD_M66   ), /* Mobility FireGL V5250 */
  154.     RHD_DEVICE_MATCH(  0x71D5, RHD_M66   ), /* Mobility Radeon X1700 */
  155.     RHD_DEVICE_MATCH(  0x71D6, RHD_M66   ), /* Mobility Radeon X1700 XT */
  156.     RHD_DEVICE_MATCH(  0x71DA, RHD_RV530 ), /* FireGL V5200 */
  157.     RHD_DEVICE_MATCH(  0x71DE, RHD_M66   ), /* Mobility Radeon X1700 */
  158.     RHD_DEVICE_MATCH(  0x7200, RHD_RV550 ), /*  Radeon X2300HD  */
  159.     RHD_DEVICE_MATCH(  0x7210, RHD_M71   ), /* Mobility Radeon HD 2300 */
  160.     RHD_DEVICE_MATCH(  0x7211, RHD_M71   ), /* Mobility Radeon HD 2300 */
  161.     RHD_DEVICE_MATCH(  0x7240, RHD_R580  ), /* Radeon X1950 */
  162.     RHD_DEVICE_MATCH(  0x7243, RHD_R580  ), /* Radeon X1900 */
  163.     RHD_DEVICE_MATCH(  0x7244, RHD_R580  ), /* Radeon X1950 */
  164.     RHD_DEVICE_MATCH(  0x7245, RHD_R580  ), /* Radeon X1900 */
  165.     RHD_DEVICE_MATCH(  0x7246, RHD_R580  ), /* Radeon X1900 */
  166.     RHD_DEVICE_MATCH(  0x7247, RHD_R580  ), /* Radeon X1900 */
  167.     RHD_DEVICE_MATCH(  0x7248, RHD_R580  ), /* Radeon X1900 */
  168.     RHD_DEVICE_MATCH(  0x7249, RHD_R580  ), /* Radeon X1900 */
  169.     RHD_DEVICE_MATCH(  0x724A, RHD_R580  ), /* Radeon X1900 */
  170.     RHD_DEVICE_MATCH(  0x724B, RHD_R580  ), /* Radeon X1900 */
  171.     RHD_DEVICE_MATCH(  0x724C, RHD_R580  ), /* Radeon X1900 */
  172.     RHD_DEVICE_MATCH(  0x724D, RHD_R580  ), /* Radeon X1900 */
  173.     RHD_DEVICE_MATCH(  0x724E, RHD_R580  ), /* AMD Stream Processor */
  174.     RHD_DEVICE_MATCH(  0x724F, RHD_R580  ), /* Radeon X1900 */
  175.     RHD_DEVICE_MATCH(  0x7280, RHD_RV570 ), /* Radeon X1950 */
  176.     RHD_DEVICE_MATCH(  0x7281, RHD_RV560 ), /* RV560 */
  177.     RHD_DEVICE_MATCH(  0x7283, RHD_RV560 ), /* RV560 */
  178.     RHD_DEVICE_MATCH(  0x7284, RHD_M68   ), /* Mobility Radeon X1900 */
  179.     RHD_DEVICE_MATCH(  0x7287, RHD_RV560 ), /* RV560 */
  180.     RHD_DEVICE_MATCH(  0x7288, RHD_RV570 ), /* Radeon X1950 GT */
  181.     RHD_DEVICE_MATCH(  0x7289, RHD_RV570 ), /* RV570 */
  182.     RHD_DEVICE_MATCH(  0x728B, RHD_RV570 ), /* RV570 */
  183.     RHD_DEVICE_MATCH(  0x728C, RHD_RV570 ), /* ATI FireGL V7400  */
  184.     RHD_DEVICE_MATCH(  0x7290, RHD_RV560 ), /* RV560 */
  185.     RHD_DEVICE_MATCH(  0x7291, RHD_RV560 ), /* Radeon X1650 */
  186.     RHD_DEVICE_MATCH(  0x7293, RHD_RV560 ), /* Radeon X1650 */
  187.     RHD_DEVICE_MATCH(  0x7297, RHD_RV560 ), /* RV560 */
  188.     RHD_DEVICE_MATCH(  0x791E, RHD_RS690 ), /* Radeon X1200 */
  189.     RHD_DEVICE_MATCH(  0x791F, RHD_RS690 ), /* Radeon X1200 */
  190.     RHD_DEVICE_MATCH(  0x793F, RHD_RS600 ), /* Radeon Xpress 1200 */
  191.     RHD_DEVICE_MATCH(  0x7941, RHD_RS600 ), /* Radeon Xpress 1200 */
  192.     RHD_DEVICE_MATCH(  0x7942, RHD_RS600 ), /* Radeon Xpress 1200 (M) */
  193.     RHD_DEVICE_MATCH(  0x796C, RHD_RS740 ), /* RS740 */
  194.     RHD_DEVICE_MATCH(  0x796D, RHD_RS740 ), /* RS740M */
  195.     RHD_DEVICE_MATCH(  0x796E, RHD_RS740 ), /* ATI Radeon 2100 RS740 */
  196.     RHD_DEVICE_MATCH(  0x796F, RHD_RS740 ), /* RS740M */
  197.     RHD_DEVICE_MATCH(  0x9400, RHD_R600  ), /* Radeon HD 2900 XT */
  198.     RHD_DEVICE_MATCH(  0x9401, RHD_R600  ), /* Radeon HD 2900 XT */
  199.     RHD_DEVICE_MATCH(  0x9402, RHD_R600  ), /* Radeon HD 2900 XT */
  200.     RHD_DEVICE_MATCH(  0x9403, RHD_R600  ), /* Radeon HD 2900 Pro */
  201.     RHD_DEVICE_MATCH(  0x9405, RHD_R600  ), /* Radeon HD 2900 GT */
  202.     RHD_DEVICE_MATCH(  0x940A, RHD_R600  ), /* FireGL V8650 */
  203.     RHD_DEVICE_MATCH(  0x940B, RHD_R600  ), /* FireGL V8600 */
  204.     RHD_DEVICE_MATCH(  0x940F, RHD_R600  ), /* FireGL V7600 */
  205.     RHD_DEVICE_MATCH(  0x9440, RHD_RV770 ), /* ATI Radeon 4800 Series  */
  206.     RHD_DEVICE_MATCH(  0x9441, RHD_RV770 ), /* ATI Radeon 4870 X2  */
  207.     RHD_DEVICE_MATCH(  0x9442, RHD_RV770 ), /* ATI Radeon 4800 Series  */
  208. //    RHD_DEVICE_MATCH(  0x9443, RHD_R700  ), /* ATI Radeon 4800 Series  */
  209.     RHD_DEVICE_MATCH(  0x9444, RHD_RV770 ), /* Everest ATI FirePro Graphics Accelerator  */
  210.     RHD_DEVICE_MATCH(  0x9446, RHD_RV770 ), /* K2 ATI FirePro Graphics Accelerator  */
  211. //    RHD_DEVICE_MATCH(  0x9447, RHD_R700 ), /* K2 ATI FirePro Graphics Accelerator  */
  212.     RHD_DEVICE_MATCH(  0x944A, RHD_M98 ), /* M98  */
  213.     RHD_DEVICE_MATCH(  0x944B, RHD_M98 ), /* M98  */
  214.     RHD_DEVICE_MATCH(  0x944C, RHD_RV770 ), /* RV770  */
  215.     RHD_DEVICE_MATCH(  0x944E, RHD_RV770 ), /* RV770  */
  216. //    RHD_DEVICE_MATCH(  0x944F, RHD_R700 ), /* R700  */
  217.     RHD_DEVICE_MATCH(  0x9456, RHD_RV770 ), /* Denali ATI FirePro Graphics Accelerator  */
  218.     RHD_DEVICE_MATCH(  0x945A, RHD_M98 ), /* M98 */
  219.     RHD_DEVICE_MATCH(  0x945B, RHD_M98 ), /* M98 */
  220.     RHD_DEVICE_MATCH(  0x946A, RHD_M98 ), /* M98 */
  221.     RHD_DEVICE_MATCH(  0x946B, RHD_M98 ), /* M98 */
  222.     RHD_DEVICE_MATCH(  0x947A, RHD_M98 ), /* M98 */
  223.     RHD_DEVICE_MATCH(  0x947B, RHD_M98 ), /* M96 */
  224.     RHD_DEVICE_MATCH(  0x9480, RHD_M96 ), /* M98 */
  225.     RHD_DEVICE_MATCH(  0x9487, RHD_RV730 ), /* RV730 */
  226.     RHD_DEVICE_MATCH(  0x9488, RHD_M96 ), /* M96 */
  227.     RHD_DEVICE_MATCH(  0x9489, RHD_M96 ), /* M96M GL */
  228.     RHD_DEVICE_MATCH(  0x948F, RHD_RV730 ), /* RV730 */
  229.     RHD_DEVICE_MATCH(  0x9487, RHD_RV730 ), /* RV730 */
  230.     RHD_DEVICE_MATCH(  0x9490, RHD_RV730 ), /* RV730 */
  231.     RHD_DEVICE_MATCH(  0x9498, RHD_RV730 ), /* RV730 */
  232.     RHD_DEVICE_MATCH(  0x949E, RHD_RV730 ), /* RV730 */
  233.     RHD_DEVICE_MATCH(  0x949F, RHD_RV730 ), /* RV730 */
  234.     RHD_DEVICE_MATCH(  0x94C0, RHD_RV610 ), /* RV610 */
  235.     RHD_DEVICE_MATCH(  0x94C1, RHD_RV610 ), /* Radeon HD 2400 XT */
  236.     RHD_DEVICE_MATCH(  0x94C3, RHD_RV610 ), /* Radeon HD 2400 Pro */
  237.     RHD_DEVICE_MATCH(  0x94C4, RHD_RV610 ), /* ATI Radeon HD 2400 PRO AGP */
  238.     RHD_DEVICE_MATCH(  0x94C5, RHD_RV610 ), /* FireGL V4000 */
  239.     RHD_DEVICE_MATCH(  0x94C6, RHD_RV610 ), /* RV610 */
  240.     RHD_DEVICE_MATCH(  0x94C7, RHD_RV610 ), /* ATI Radeon HD 2350 */
  241.     RHD_DEVICE_MATCH(  0x94C8, RHD_M74   ), /* Mobility Radeon HD 2400 XT */
  242.     RHD_DEVICE_MATCH(  0x94C9, RHD_M72   ), /* Mobility Radeon HD 2400 */
  243.     RHD_DEVICE_MATCH(  0x94CB, RHD_M72   ), /* ATI RADEON E2400 */
  244.     RHD_DEVICE_MATCH(  0x94CC, RHD_RV610 ), /* ATI Radeon HD 2400 */
  245.     RHD_DEVICE_MATCH(  0x9500, RHD_RV670 ), /* RV670 */
  246.     RHD_DEVICE_MATCH(  0x9501, RHD_RV670 ), /* ATI Radeon HD3870 */
  247.     RHD_DEVICE_MATCH(  0x9504, RHD_M88   ), /*  ATI Mobility Radeon HD 3850 */
  248.     RHD_DEVICE_MATCH(  0x9505, RHD_RV670 ), /* ATI Radeon HD3850 */
  249.     RHD_DEVICE_MATCH(  0x9506, RHD_M88   ), /*  ATI Mobility Radeon HD 3850 X2 */
  250.     RHD_DEVICE_MATCH(  0x9507, RHD_RV670 ), /* RV670 */
  251.     RHD_DEVICE_MATCH(  0x9508, RHD_M88   ), /*  ATI Mobility Radeon HD 3870 */
  252.     RHD_DEVICE_MATCH(  0x9509, RHD_M88   ), /*  ATI Mobility Radeon HD 3870 X2 */
  253.     RHD_DEVICE_MATCH(  0x950F, RHD_R680  ), /* ATI Radeon HD3870 X2 */
  254.     RHD_DEVICE_MATCH(  0x9511, RHD_RV670 ), /* ATI FireGL V7700 */
  255.     RHD_DEVICE_MATCH(  0x9515, RHD_RV670 ), /* ATI Radeon HD 3850 AGP */
  256.     RHD_DEVICE_MATCH(  0x9517, RHD_RV670 ), /* ATI Radeon HD 3960 */
  257.     RHD_DEVICE_MATCH(  0x9519, RHD_RV670 ), /* FireStream 9170 */
  258.     RHD_DEVICE_MATCH(  0x9540, RHD_RV710 ), /*   */
  259.     RHD_DEVICE_MATCH(  0x9541, RHD_RV710 ), /*   */
  260.     RHD_DEVICE_MATCH(  0x9542, RHD_RV710 ), /*   */
  261.     RHD_DEVICE_MATCH(  0x954E, RHD_RV710 ), /*   */
  262.     RHD_DEVICE_MATCH(  0x954f, RHD_RV710 ), /*   */
  263.     RHD_DEVICE_MATCH(  0x9580, RHD_RV630 ), /* RV630 */
  264.     RHD_DEVICE_MATCH(  0x9581, RHD_M76   ), /* Mobility Radeon HD 2600 */
  265.     RHD_DEVICE_MATCH(  0x9583, RHD_M76   ), /* Mobility Radeon HD 2600 XT */
  266.     RHD_DEVICE_MATCH(  0x9586, RHD_RV630 ), /* ATI Radeon HD 2600 XT AGP */
  267.     RHD_DEVICE_MATCH(  0x9587, RHD_RV630 ), /* ATI Radeon HD 2600 Pro AGP */
  268.     RHD_DEVICE_MATCH(  0x9588, RHD_RV630 ), /* Radeon HD 2600 XT */
  269.     RHD_DEVICE_MATCH(  0x9589, RHD_RV630 ), /* Radeon HD 2600 Pro */
  270.     RHD_DEVICE_MATCH(  0x958A, RHD_RV630 ), /* Gemini RV630 */
  271.     RHD_DEVICE_MATCH(  0x958B, RHD_M76   ), /* Gemini ATI Mobility Radeon HD 2600 XT */
  272.     RHD_DEVICE_MATCH(  0x958C, RHD_RV630 ), /* FireGL V5600 */
  273.     RHD_DEVICE_MATCH(  0x958D, RHD_RV630 ), /* FireGL V3600 */
  274.     RHD_DEVICE_MATCH(  0x958E, RHD_RV630 ), /* ATI Radeon HD 2600 LE */
  275.     RHD_DEVICE_MATCH(  0x958F, RHD_M76   ), /* ATI Mobility FireGL Graphics Processor */
  276.     RHD_DEVICE_MATCH(  0x9590, RHD_RV635 ), /* ATI Radeon HD 3600 Series */
  277.     RHD_DEVICE_MATCH(  0x9591, RHD_M86   ), /* Mobility Radeon HD 3650 */
  278.     RHD_DEVICE_MATCH(  0x9593, RHD_M86   ), /* Mobility Radeon HD 3670 */
  279.     RHD_DEVICE_MATCH(  0x9595, RHD_M86   ), /* Mobility FireGL V5700 */
  280.     RHD_DEVICE_MATCH(  0x9596, RHD_RV635 ), /* ATI Radeon HD 3650 AGP */
  281.     RHD_DEVICE_MATCH(  0x9597, RHD_RV635 ), /* ATI Radeon HD 3600 Series */
  282.     RHD_DEVICE_MATCH(  0x9598, RHD_RV635 ), /* ATI Radeon HD 3670 */
  283.     RHD_DEVICE_MATCH(  0x9599, RHD_RV635 ), /* ATI Radeon HD 3600 Series */
  284.     RHD_DEVICE_MATCH(  0x959B, RHD_M86   ), /* Mobility FireGL Graphics Processor */
  285.     RHD_DEVICE_MATCH(  0x95C0, RHD_RV620 ), /* ATI Radeon HD 3470 */
  286.     RHD_DEVICE_MATCH(  0x95C2, RHD_M82   ), /* ATI Mobility Radeon HD 3430 (M82) */
  287.     RHD_DEVICE_MATCH(  0x95C4, RHD_M82   ), /* Mobility Radeon HD 3400 Series (M82)  */
  288.     RHD_DEVICE_MATCH(  0x95C5, RHD_RV620 ), /* ATI Radeon HD 3450 */
  289.     RHD_DEVICE_MATCH(  0x95C6, RHD_RV620 ), /* ATI Radeon HD 3450 */
  290.     RHD_DEVICE_MATCH(  0x95C7, RHD_RV620 ), /* ATI Radeon HD 3430 */
  291.     RHD_DEVICE_MATCH(  0x95CC, RHD_RV620 ), /* Fire PRO Professional Graphics ASIC  */
  292.     RHD_DEVICE_MATCH(  0x95CD, RHD_RV620 ), /* ATI FireMV 2450  */
  293.     RHD_DEVICE_MATCH(  0x95CE, RHD_RV620 ), /* ATI FireMV 2260  */
  294.     RHD_DEVICE_MATCH(  0x95CF, RHD_RV620 ), /* ATI FireMV 2260  */
  295.     RHD_DEVICE_MATCH(  0x9610, RHD_RS780 ), /* ATI Radeon HD 3200 Graphics */
  296.     RHD_DEVICE_MATCH(  0x9611, RHD_RS780 ), /* ATI Radeon 3100 Graphics */
  297.     RHD_DEVICE_MATCH(  0x9612, RHD_RS780 ), /*  ATI Radeon HD 3200 Graphics  */
  298.     RHD_DEVICE_MATCH(  0x9613, RHD_RS780 ), /* ATI Radeon 3100 Graphics   */
  299.     RHD_DEVICE_MATCH(  0x9614, RHD_RS780 ), /* ATI Radeon HD 3300 Graphics  */
  300.     LIST_END
  301. };
  302.  
  303. static enum RHD_CHIPSETS rhdIGPChipsetList[] = {
  304.     RHD_RS690,
  305.     RHD_RS690,
  306.     RHD_RS690,
  307.     RHD_RS780,
  308.     RHD_UNKNOWN /* end marker */
  309. };
  310.  
  311. /*
  312.  *
  313.  */
  314. void
  315. RHDIdentify(int flags)
  316. {
  317.  
  318. }
  319.  
  320. /*
  321.  *
  322.  */
  323. Bool
  324. RHDIsIGP(enum RHD_CHIPSETS chipset)
  325. {
  326.     int i = 0;
  327.     while (rhdIGPChipsetList[i] != RHD_UNKNOWN) {
  328.         if (chipset == (rhdIGPChipsetList[i]))
  329.             return TRUE;
  330.         i++;
  331.     }
  332.     return FALSE;
  333. }
  334.  
  335. /*
  336.  * Some macros to help us make connector tables less messy.
  337.  * There are, after all, a limited number of possibilities at the moment.
  338.  */
  339. #define ID_CONNECTORINFO_EMPTY \
  340.      { {RHD_CONNECTOR_NONE, "NULL", RHD_DDC_NONE, RHD_HPD_NONE, \
  341.        { RHD_OUTPUT_NONE, RHD_OUTPUT_NONE}}}
  342.  
  343. #ifdef ATOM_BIOS
  344. # define DEVINFO_EMPTY   { { atomNone, atomNone } }
  345. #endif
  346.  
  347. /* Radeon RV610 0x94C3 0x0000 0x0000 */
  348. #define VGA_B1_TV_B_DVI_AA00 \
  349. {{ RHD_CONNECTOR_DVI_SINGLE, "VGA CRT2", RHD_DDC_1, RHD_HPD_NONE, \
  350.         { RHD_OUTPUT_NONE, RHD_OUTPUT_DACB }},                     \
  351.     {RHD_CONNECTOR_TV, "7PIN_DIN TV1 CV", RHD_DDC_0, RHD_HPD_NONE, \
  352.         { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE }},                     \
  353.     {RHD_CONNECTOR_DVI_SINGLE, "SINGLE_LINK_DVI CRT1 DFP2", RHD_DDC_0, RHD_HPD_0, \
  354.         {RHD_OUTPUT_LVTMA, RHD_OUTPUT_DACA }}}
  355.  
  356.  
  357. /* Radeon X1300 0x7187:0x1545:0x1930 */
  358. #define VGA_A0_TV_B_DVI_B11 \
  359.     {  { RHD_CONNECTOR_VGA, "VGA CRT1", RHD_DDC_0, RHD_HPD_NONE,    \
  360.         { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE }},                      \
  361.     { RHD_CONNECTOR_TV, "SVIDEO TV1", RHD_DDC_NONE, RHD_HPD_NONE,   \
  362.         { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE }},                      \
  363.     { RHD_CONNECTOR_DVI, "DVI-D DFP3", RHD_DDC_1, RHD_HPD_1,        \
  364.         { RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE }}}
  365.  
  366. /* Sapphire X1550 reports 2x DVI-I but has only 1 VGA and 1 DVI */
  367. #define VGA_A0_DVI_BB11 \
  368.   { {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE, \
  369.        { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE}}, \
  370.     {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_1, RHD_HPD_1, \
  371.        { RHD_OUTPUT_DACB, RHD_OUTPUT_LVTMA}}}
  372.  
  373. /* 0x7249:0x1043:0x0168 */
  374. #define DVI_AB10_DVI_A01 \
  375.   { { RHD_CONNECTOR_DVI, "DVI-I DFP1 CRT2", RHD_DDC_1, RHD_HPD_0,       \
  376.          { RHD_OUTPUT_TMDSA, RHD_OUTPUT_DACB }}, \
  377.       { RHD_CONNECTOR_DVI, "DVI-I DFP2", RHD_DDC_0, RHD_HPD_1, \
  378.          { RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE }}, \
  379.       { RHD_CONNECTOR_TV, "SVIDEO TV1", RHD_DDC_NONE, RHD_HPD_NONE, \
  380.          { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE }}}
  381.  
  382. #define VISIONTEK_C1550 \
  383.     { {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE,  \
  384.             { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE } },        \
  385.       {RHD_CONNECTOR_TV, "SVIDEO", RHD_DDC_NONE, RHD_HPD_NONE, \
  386.           { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE } },          \
  387.       {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_1, RHD_HPD_0, \
  388.           { RHD_OUTPUT_LVTMA, RHD_OUTPUT_DACB } } }
  389.  
  390. /* MacBook Pro provides a weird atombios connector table. */
  391. #define ID_CONNECTORINFO_MACBOOKPRO \
  392.  { {RHD_CONNECTOR_PANEL, "Panel", RHD_DDC_2, RHD_HPD_NONE, \
  393.        { RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE}}, \
  394.    {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_0, RHD_HPD_0, \
  395.        { RHD_OUTPUT_DACB, RHD_OUTPUT_TMDSA}}}
  396.  
  397. #ifdef ATOM_BIOS
  398. # define DEVINFO_MACBOOKPRO \
  399.     { { atomLCD1, atomNone }, { atomCRT2, atomDFP1 } }
  400. #endif
  401.  
  402. /* GeCube HD 2400PRO AGP (GC-RX24PGA2-D3) specifies 2 DVI again.*/
  403. #define BROKEN_VGA_B1_DVI_AB00 \
  404.  { {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_0, RHD_HPD_0, \
  405.        { RHD_OUTPUT_DACA, RHD_OUTPUT_LVTMA}}, \
  406.    {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_1, RHD_HPD_NONE, \
  407.        { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE}}}
  408.  
  409. /* Fujitsu Siemens Amilo PI1536 has no HPD on its DVI connector. */
  410. #define PANEL_B_DVI_AA1 \
  411.  { {RHD_CONNECTOR_PANEL, "Panel", RHD_DDC_NONE, RHD_HPD_NONE, \
  412.        { RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE}}, \
  413.    {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_0, RHD_HPD_NONE, \
  414.        { RHD_OUTPUT_DACA, RHD_OUTPUT_TMDSA}}}
  415.  
  416. /* Sapphire Radeon HD 2600 PRO AGP reports VGA output as DVI */
  417. #define DVI_BA10_TV_B0_VGA_A0 \
  418.  { { RHD_CONNECTOR_DVI, "DUAL_LINK_DVI_I", RHD_DDC_1, RHD_HPD_0, \
  419.         { RHD_OUTPUT_TMDSA, RHD_OUTPUT_DACB }}, \
  420.     { RHD_CONNECTOR_TV, "7PIN_DIN TV1 CV", RHD_DDC_0, RHD_HPD_NONE, \
  421.         { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE }}, \
  422.     { RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE, \
  423.         { RHD_OUTPUT_NONE, RHD_OUTPUT_DACA }}}
  424.  
  425. /* MSI RX2600PRO-T2D512Z/D2 */
  426. #define DVI_BA12_TV_B0_DVI_AB01 \
  427.  { { RHD_CONNECTOR_DVI, "DUAL_LINK_DVI_I DFP1 CRT2", RHD_DDC_1, RHD_HPD_2, \
  428.          { RHD_OUTPUT_TMDSA, RHD_OUTPUT_DACB }}, \
  429.    { RHD_CONNECTOR_TV, "7PIN_DIN TV1 CV", RHD_DDC_NONE, RHD_HPD_NONE, \
  430.          { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE }}, \
  431.    { RHD_CONNECTOR_DVI, "DUAL_LINK_DVI_I CRT1 DFP2", RHD_DDC_0, RHD_HPD_1, \
  432.          { RHD_OUTPUT_LVTMA, RHD_OUTPUT_DACA }}}
  433.  
  434. #if defined(USE_ID_CONNECTORS) || !defined(ATOM_BIOS)
  435.  
  436. #define VGA_A0_TVB_DVI_BB12                                    \
  437.   { { RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE, \
  438.         { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE }}, \
  439.     { RHD_CONNECTOR_TV, "SVIDEO", RHD_DDC_NONE, RHD_HPD_NONE, \
  440.         { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE }}, \
  441.     { RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_1, RHD_HPD_2, \
  442.         { RHD_OUTPUT_DACB, RHD_OUTPUT_LVTMA }}}
  443.  
  444. #define VGA_A0_DVI_BA10 \
  445.   { {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE, \
  446.        { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE}}, \
  447.     {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_1, RHD_HPD_0, \
  448.        { RHD_OUTPUT_DACB, RHD_OUTPUT_TMDSA}}}
  449.  
  450. #define VGA_A0_DVI_BB10 \
  451.   { {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE, \
  452.        { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE}}, \
  453.     {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_1, RHD_HPD_0, \
  454.        { RHD_OUTPUT_DACB, RHD_OUTPUT_LVTMA}}}
  455.  
  456. #define VGA_B1_DVI_AA00 \
  457.   { {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_1, RHD_HPD_NONE, \
  458.        { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE}}, \
  459.     {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_0, RHD_HPD_0, \
  460.        { RHD_OUTPUT_DACA, RHD_OUTPUT_TMDSA}}}
  461.  
  462. #define VGA_B1_DVI_AB01 \
  463.   { {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_1, RHD_HPD_NONE, \
  464.        { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE}}, \
  465.     {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_0, RHD_HPD_1, \
  466.        { RHD_OUTPUT_DACA, RHD_OUTPUT_LVTMA}}}
  467.  
  468. #define VGA_B1_DVI_AB00 \
  469.   { {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_1, RHD_HPD_NONE, \
  470.        { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE}}, \
  471.     {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_0, RHD_HPD_0, \
  472.        { RHD_OUTPUT_DACA, RHD_OUTPUT_LVTMA}}}
  473.  
  474. #define DVI_AA00_DVI_BB11 \
  475.   { {RHD_CONNECTOR_DVI, "DVI-I 1", RHD_DDC_0, RHD_HPD_0, \
  476.        { RHD_OUTPUT_DACA, RHD_OUTPUT_TMDSA}}, \
  477.     {RHD_CONNECTOR_DVI, "DVI-I 2", RHD_DDC_1, RHD_HPD_1, \
  478.        { RHD_OUTPUT_DACB, RHD_OUTPUT_LVTMA}}}
  479.  
  480. #define DVI_BA10_DVI_AB01 \
  481.   { {RHD_CONNECTOR_DVI, "DVI-I 1", RHD_DDC_1, RHD_HPD_0, \
  482.        { RHD_OUTPUT_DACB, RHD_OUTPUT_TMDSA}}, \
  483.     {RHD_CONNECTOR_DVI, "DVI-I 2", RHD_DDC_0, RHD_HPD_1, \
  484.        { RHD_OUTPUT_DACA, RHD_OUTPUT_LVTMA}}}
  485.  
  486. #define DVI_BB11_DVI_AA00 \
  487.   { {RHD_CONNECTOR_DVI, "DVI-I 1", RHD_DDC_1, RHD_HPD_1, \
  488.        { RHD_OUTPUT_DACB, RHD_OUTPUT_LVTMA}}, \
  489.     {RHD_CONNECTOR_DVI, "DVI-I 2", RHD_DDC_0, RHD_HPD_0, \
  490.        { RHD_OUTPUT_DACA, RHD_OUTPUT_TMDSA}}}
  491.  
  492. #define PANEL_B_VGA_A0 \
  493.   { {RHD_CONNECTOR_PANEL, "Panel", RHD_DDC_NONE, RHD_HPD_NONE, \
  494.        { RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE}}, \
  495.     {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE, \
  496.        { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE}}}
  497.  
  498. #define PANEL_B1_VGA_A0 \
  499.   { {RHD_CONNECTOR_PANEL, "Panel", RHD_DDC_1, RHD_HPD_NONE, \
  500.        { RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE}}, \
  501.     {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE, \
  502.        { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE}}}
  503.  
  504. #define PANEL_B1_VGA_A2 \
  505.   { {RHD_CONNECTOR_PANEL, "Panel", RHD_DDC_1, RHD_HPD_NONE, \
  506.        { RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE}}, \
  507.     {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_2, RHD_HPD_NONE, \
  508.        { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE}}}
  509.  
  510. #define PANEL_B2_VGA_A0 \
  511.   { {RHD_CONNECTOR_PANEL, "Panel", RHD_DDC_2, RHD_HPD_NONE, \
  512.        { RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE}}, \
  513.     {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE, \
  514.        { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE}}}
  515.  
  516. #define PANEL_B2_VGA_A0_DVI_A10 \
  517.   { {RHD_CONNECTOR_PANEL, "Panel", RHD_DDC_2, RHD_HPD_NONE, \
  518.        { RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE}}, \
  519.     {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE, \
  520.        { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE}}, \
  521.     {RHD_CONNECTOR_DVI, "DVI-D", RHD_DDC_1, RHD_HPD_0, \
  522.        { RHD_OUTPUT_TMDSA, RHD_OUTPUT_NONE}}}
  523.  
  524. #else /* if !defined(USE_ID_CONNECTORS) && defined(ATOM_BIOS) */
  525.  
  526. #define VGA_A0_TVB_DVI_BB12     ID_CONNECTORINFO_EMPTY
  527. #define VGA_A0_DVI_BA10         ID_CONNECTORINFO_EMPTY
  528. #define VGA_A0_DVI_BB10         ID_CONNECTORINFO_EMPTY
  529. #define VGA_B1_DVI_AA00         ID_CONNECTORINFO_EMPTY
  530. #define VGA_B1_DVI_AB01         ID_CONNECTORINFO_EMPTY
  531. #define VGA_B1_DVI_AB00         ID_CONNECTORINFO_EMPTY
  532. #define DVI_AA00_DVI_BB11       ID_CONNECTORINFO_EMPTY
  533. #define DVI_BA10_DVI_AB01       ID_CONNECTORINFO_EMPTY
  534. #define DVI_BB11_DVI_AA00       ID_CONNECTORINFO_EMPTY
  535. #define PANEL_B_VGA_A0          ID_CONNECTORINFO_EMPTY
  536. #define PANEL_B1_VGA_A0         ID_CONNECTORINFO_EMPTY
  537. #define PANEL_B1_VGA_A2         ID_CONNECTORINFO_EMPTY
  538. #define PANEL_B2_VGA_A0         ID_CONNECTORINFO_EMPTY
  539. #define PANEL_B2_VGA_A0_DVI_A10 ID_CONNECTORINFO_EMPTY
  540.  
  541. #endif /* if defined(USE_ID_CONNECTORS) || !defined(ATOM_BIOS) */
  542.  
  543. /*
  544.  * List of pci subsystem / card ids.
  545.  *
  546.  * Used for:
  547.  * - printing card name.
  548.  * - connector mapping.
  549.  *
  550.  */
  551. static struct rhdCard
  552. rhdCards[] =
  553. {
  554.     /* 0x7100 : R520 : Radeon X1800 */
  555.     { 0x7100, 0x1002, 0x0B12, "Powercolor X1800XT", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
  556.     /* 0x7101 : M58 : Mobility Radeon X1800 XT */
  557.     /* 0x7102 : M58 : Mobility Radeon X1800 */
  558.     /* 0x7103 : M58 : Mobility FireGL V7200 */
  559.     /* 0x7104 : R520 : FireGL V7200 */
  560.     { 0x7104, 0x1002, 0x0B32, "ATI FireGL V7200 RH", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
  561.     /* 0x7105 : R520 : FireGL V5300 */
  562.     /* 0x7106 : M58 : Mobility FireGL V7100 */
  563.     /* 0x7108 : R520 : Radeon X1800 */
  564.     /* 0x7109 : R520 : Radeon X1800 */
  565.     /* 0x710A : R520 : Radeon X1800 */
  566.     /* 0x710B : R520 : Radeon X1800 */
  567.     /* 0x710C : R520 : Radeon X1800 */
  568.     /* 0x710E : R520 : FireGL V7300 */
  569.     /* 0x710F : R520 : FireGL V7350 */
  570.     /* 0x7140 : RV515 : Radeon X1600 */
  571.     { 0x7140, 0x1787, 0x3000, "PowerColor X1550", RHD_CARD_FLAG_HPDSWAP, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  572.     /* 0x7141 : RV505 : RV505 */
  573.     /* 0x7142 : RV515 : Radeon X1300/X1550 */
  574.     /* 0x7143 : RV505 : Radeon X1550 */
  575.     /* 0x7144 : M54 : M54-GL */
  576.     /* 0x7145 : M54 : Mobility Radeon X1400 */
  577.     { 0x7145, 0x1028, 0x2002, "Dell Inspiron 9400", RHD_CARD_FLAG_NONE, PANEL_B2_VGA_A0_DVI_A10, DEVINFO_EMPTY },
  578.     { 0x7145, 0x1028, 0x2003, "Dell Inspiron 6400", RHD_CARD_FLAG_NONE, PANEL_B_VGA_A0, DEVINFO_EMPTY },
  579.     { 0x7145, 0x1179, 0xFF10, "Toshiba Satellite A100-773", RHD_CARD_FLAG_NONE, PANEL_B1_VGA_A2, DEVINFO_EMPTY },
  580.     { 0x7145, 0x1297, 0x3058, "M54P X1440", RHD_CARD_FLAG_HPDOFF, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  581.     { 0x7145, 0x1734, 0x10B0, "Fujitsu Siemens Amilo PI1536", RHD_CARD_FLAG_NONE, PANEL_B_DVI_AA1, DEVINFO_EMPTY },
  582.     { 0x7145, 0x17AA, 0x2006, "Lenovo Thinkpad T60 (2007)", RHD_CARD_FLAG_NONE, PANEL_B2_VGA_A0_DVI_A10, DEVINFO_EMPTY },
  583.     { 0x7145, 0x17AA, 0x202A, "Lenovo Thinkpad Z61m", RHD_CARD_FLAG_NONE, PANEL_B2_VGA_A0, DEVINFO_EMPTY },
  584.     /* 0x7146 : RV515 : Radeon X1300/X1550 */
  585.     { 0x7146, 0x174B, 0x0470, "Sapphire X1300", RHD_CARD_FLAG_NONE, VGA_B1_DVI_AB01, DEVINFO_EMPTY },
  586.     { 0x7146, 0x174B, 0x0920, "Sapphire X1300", RHD_CARD_FLAG_HPDSWAP, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  587.     { 0x7146, 0x1545, 0x2350, "Visiontek C1550", RHD_CARD_FLAG_NONE,  VISIONTEK_C1550, DEVINFO_EMPTY },
  588.     /* 0x7147 : RV505 : Radeon X1550 64-bit */
  589.     { 0x7147, 0x174B, 0x0840, "Sapphire X1550", RHD_CARD_FLAG_HPDSWAP, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  590.     /* 0x7149 : M52 : Mobility Radeon X1300 */
  591.     { 0x7149, 0x1028, 0x2003, "Dell Inspiron E1505", RHD_CARD_FLAG_NONE, PANEL_B_VGA_A0, DEVINFO_EMPTY },
  592.     { 0x7149, 0x17AA, 0x2005, "Lenovo Thinkpad T60 (2008)", RHD_CARD_FLAG_NONE, PANEL_B2_VGA_A0_DVI_A10, DEVINFO_EMPTY },
  593.     /* 0x714A : M52 : Mobility Radeon X1300 */
  594.     /* 0x714B : M52 : Mobility Radeon X1300 */
  595.     /* 0x714C : M52 : Mobility Radeon X1300 */
  596.     /* 0x714D : RV515 : Radeon X1300 */
  597.     /* 0x714E : RV515 : Radeon X1300 */
  598.     /* 0x714F : RV505 : RV505 */
  599.     /* 0x7151 : RV505 : RV505 */
  600.     /* 0x7152 : RV515 : FireGL V3300 */
  601.     { 0x7152, 0x1002, 0x0B02, "ATI FireGL V3300", RHD_CARD_FLAG_NONE, DVI_BB11_DVI_AA00, DEVINFO_EMPTY },
  602.     /* 0x7153 : RV515 : FireGL V3350 */
  603.     /* 0x715E : RV515 : Radeon X1300 */
  604.     /* 0x715F : RV505 : Radeon X1550 64-bit */
  605.     /* 0x7180 : RV516 : Radeon X1300/X1550 */
  606.     /* 0x7181 : RV516 : Radeon X1600 */
  607.     /* 0x7183 : RV516 : Radeon X1300/X1550 */
  608.     { 0x7183, 0x1028, 0x0D02, "Dell ATI Radeon X1300", RHD_CARD_FLAG_DMS59, DVI_AA00_DVI_BB11, DEVINFO_EMPTY },
  609.     { 0x7183, 0x1092, 0x3000, "RX155PCI", RHD_CARD_FLAG_NONE, VGA_A0_TVB_DVI_BB12, DEVINFO_EMPTY },
  610.     /* 0x7186 : M64 : Mobility Radeon X1450 */
  611.     /* 0x7187 : RV516 : Radeon X1300/X1550 */
  612.     { 0x7187, 0x174B, 0x3000, "RV516 : Radeon X1300/X1550", RHD_CARD_FLAG_HPDSWAP, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  613.     { 0x7187, 0x1458, 0x215C, "RV516 : Radeon X1300/X1550", RHD_CARD_FLAG_DMS59,  ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  614.     { 0x7187, 0x1545, 0x1930, "RV516 : Radeon X1300", RHD_CARD_FLAG_NONE, VGA_A0_TV_B_DVI_B11, DEVINFO_EMPTY },
  615.     /* 0x7188 : M64 : Mobility Radeon X2300 */
  616.     /* 0x718A : M64 : Mobility Radeon X2300 */
  617.     /* 0x718B : M62 : Mobility Radeon X1350 */
  618.     /* 0x718C : M62 : Mobility Radeon X1350 */
  619.     /* 0x718D : M64 : Mobility Radeon X1450 */
  620.     /* 0x718F : RV516 : Radeon X1300 */
  621.     /* 0x7193 : RV516 : Radeon X1550 */
  622.     /* 0x7196 : M62 : Mobility Radeon X1350 */
  623.     /* 0x719B : RV516 : FireMV 2250 */
  624.     /* 0x719F : RV516 : Radeon X1550 64-bit */
  625.     /* 0x71C0 : RV530 : Radeon X1600 */
  626.     /* 0x71C1 : RV535 : Radeon X1650 */
  627.     { 0x71C1, 0x174B, 0x0840, "Sapphire X1650 Pro", RHD_CARD_FLAG_NONE, DVI_AA00_DVI_BB11, DEVINFO_EMPTY },
  628.     /* 0x71C2 : RV530 : Radeon X1600 */
  629.     { 0x71C2, 0x1458, 0x2146, "Gigabyte GV-RX16P256DE-RH", RHD_CARD_FLAG_HPDSWAP, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  630.     { 0x71C2, 0x17EE, 0x71C0, "Connect3D Radeon X1600 Pro", RHD_CARD_FLAG_NONE, VGA_B1_DVI_AA00, DEVINFO_EMPTY },
  631.     /* 0x71C3 : RV535 : Radeon X1600 */
  632.     /* 0x71C4 : M56 : Mobility FireGL V5200 */
  633.     { 0x71C4, 0x17AA, 0x2007, "Lenovo Thinkpad T60p V5200", RHD_CARD_FLAG_HPDOFF, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  634.     /* 0x71C5 : M56 : Mobility Radeon X1600 */
  635.     { 0x71C5, 0x103C, 0x30A3, "HP/Compaq nc8430", RHD_CARD_FLAG_NONE, PANEL_B1_VGA_A0, DEVINFO_EMPTY },
  636.     { 0x71C5, 0x103C, 0x30B4, "HP/Compaq nw8440", RHD_CARD_FLAG_NONE, PANEL_B1_VGA_A0, DEVINFO_EMPTY },
  637.     { 0x71C5, 0x1043, 0x10B2, "Asus W3J/Z96", RHD_CARD_FLAG_NONE, PANEL_B_VGA_A0, DEVINFO_EMPTY },
  638.     { 0x71C5, 0x106B, 0x0080, "Macbook Pro", RHD_CARD_FLAG_NONE, ID_CONNECTORINFO_MACBOOKPRO, DEVINFO_MACBOOKPRO },
  639.     { 0x71C5, 0x1179, 0xFF10, "Toshiba Satellite A100-237", RHD_CARD_FLAG_NONE, PANEL_B1_VGA_A2, DEVINFO_EMPTY },
  640.     /* 0x71C6 : RV530 : Radeon X1650 */
  641.     { 0x71C6, 0x174B, 0x0850, "Sapphire X1650 Pro AGP", RHD_CARD_FLAG_NONE, VGA_A0_DVI_BA10, DEVINFO_EMPTY },
  642.     { 0x71C6, 0x1462, 0x0400, "MSI RX1650 Pro", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
  643.     /* 0x71C7 : RV535 : Radeon X1650 */
  644.     { 0x71C7, 0x1043, 0x01B6, "Asus EAX1650 Silent", RHD_CARD_FLAG_NONE, VGA_A0_DVI_BB10, DEVINFO_EMPTY },
  645.     { 0x71C7, 0x1787, 0x2227, "Diamond Viper X1650 Pro", RHD_CARD_FLAG_HPDSWAP, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  646.     /* 0x71CD : RV530 : Radeon X1600 */
  647.     { 0x71CD, 0x174B, 0x0840, "PCP X1600 400M/500E", RHD_CARD_FLAG_HPDSWAP, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  648.     /* 0x71CE : RV530 : Radeon X1300 XT/X1600 Pro */
  649.     { 0x71CE, 0x18BC, 0x2770, "Radeon X1300 XT/X1600 Pro", RHD_CARD_FLAG_HPDOFF, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  650.     /* 0x71D2 : RV530 : FireGL V3400 */
  651.     { 0x71D2, 0x1002, 0x2B02, "ATI FireGL V3400", RHD_CARD_FLAG_NONE, DVI_BB11_DVI_AA00, DEVINFO_EMPTY },
  652.     /* 0x71D4 : M66 : Mobility FireGL V5250 */
  653.     { 0x71D4, 0x17AA, 0x20A4, "Lenovo Thinkpad T60p V5250", RHD_CARD_FLAG_HPDOFF, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  654.     /* 0x71D5 : M66 : Mobility Radeon X1700 */
  655.     /* 0x71D6 : M66 : Mobility Radeon X1700 XT */
  656.     /* 0x71DA : RV530 : FireGL V5200 */
  657.     /* 0x71DE : M66 : Mobility Radeon X1700 */
  658.     /* 0x7200 : RV550 : Radeon X2300HD */
  659.     /* 0x7210 : M71 : Mobility Radeon HD 2300 */
  660.     /* 0x7211 : M71 : Mobility Radeon HD 2300 */
  661.     /* 0x7240 : R580 : Radeon X1950 */
  662.     /* 0x7243 : R580 : Radeon X1900 */
  663.     /* 0x7244 : R580 : Radeon X1950 */
  664.     /* 0x7245 : R580 : Radeon X1900 */
  665.     /* 0x7246 : R580 : Radeon X1900 */
  666.     /* 0x7247 : R580 : Radeon X1900 */
  667.     /* 0x7248 : R580 : Radeon X1900 */
  668.     /* 0x7249 : R580 : Radeon X1900 */
  669.     { 0x7249, 0x1002, 0x0B12, "ATI Radeon X1900 XTX", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
  670.     /* { 0x7249, 0x1043, 0x016B, "ATI Radeon X1900 XTX", RHD_CARD_FLAG_NONE, DVI_AB10_DVI_A01, DEVINFO_EMPTY }, */
  671.     /* 0x724A : R580 : Radeon X1900 */
  672.     /* 0x724B : R580 : Radeon X1900 */
  673.     { 0x724B, 0x1002, 0x0B12, "Sapphire Radeon X1900 GT", RHD_CARD_FLAG_NONE, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  674.     /* 0x724C : R580 : Radeon X1900 */
  675.     /* 0x724D : R580 : Radeon X1900 */
  676.     /* 0x724E : R580 : AMD Stream Processor */
  677.     /* 0x724F : R580 : Radeon X1900 */
  678.     /* 0x7280 : RV570 : Radeon X1950 */
  679.     { 0x7280, 0x174B, 0xE190, "Sapphire X1950 Pro", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
  680.     { 0x7280, 0x18BC, 0x2870, "GeCube X1950 Pro", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
  681.     /* 0x7281 : RV560 : RV560 */
  682.     /* 0x7283 : RV560 : RV560 */
  683.     /* 0x7284 : M68 : Mobility Radeon X1900 */
  684.     /* 0x7287 : RV560 : RV560 */
  685.     /* 0x7288 : RV570 : Radeon X1950 GT */
  686.     { 0x7288, 0x174B, 0xE190, "Sapphire X1950 GT", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
  687.     /* 0x7289 : RV570 : RV570 */
  688.     /* 0x728B : RV570 : RV570 */
  689.     /* 0x728C : RV570 : ATI FireGL V7400 */
  690.     /* 0x7290 : RV560 : RV560 */
  691.     /* 0x7291 : RV560 : Radeon X1650 */
  692.     /* 0x7293 : RV560 : Radeon X1650 */
  693.     /* 0x7297 : RV560 : RV560 */
  694.     /* 0x791E : RS690 : Radeon X1200 */
  695.     { 0x791E, 0x1043, 0x826D, "Asus M2A-VM", RHD_CARD_FLAG_NONE, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  696.     /* 0x791F : RS690 : Radeon X1200 */
  697.     { 0x791F, 0x103C, 0x30C2, "HP/Compaq 6715b", RHD_CARD_FLAG_NONE, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  698.     /* 0x793F : RS600 : Radeon Xpress 1200 */
  699.     /* 0x7941 : RS600 : Radeon Xpress 1200 */
  700.     /* 0x7942 : RS600 : Radeon Xpress 1200 (M) */
  701.     /* 0x796C : RS740 : RS740 */
  702.     /* 0x796D : RS740 : RS740M */
  703.     /* 0x796E : RS740 : RS740 */
  704.     /* 0x796F : RS740 : RS740M */
  705.     /* 0x9400 : R600 : Radeon HD 2900 XT */
  706.     { 0x9400, 0x1002, 0x3142, "Sapphire HD 2900 XT", RHD_CARD_FLAG_NONE, DVI_BB11_DVI_AA00, DEVINFO_EMPTY },
  707.     /* 0x9401 : R600 : Radeon HD 2900 XT */
  708.     /* 0x9402 : R600 : Radeon HD 2900 XT */
  709.     /* 0x9403 : R600 : Radeon HD 2900 Pro */
  710.     /* 0x9405 : R600 : ATI Radeon HD 2900 GT  */
  711.     /* 0x940A : R600 : ATI FireGL V8650  */
  712.     /* 0x940B : R600 : ATI FireGL V8600  */
  713.     /* 0x940F : R600 : ATI FireGL V7600  */
  714.     /* 0x94C0 : RV610 : RV610 */
  715.     /* 0x94C1 : RV610 : Radeon HD 2400 XT */
  716.     { 0x94C1, 0x1002, 0x0D02, "ATI Radeon HD 2400 XT", RHD_CARD_FLAG_DMS59, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  717.     { 0x94C1, 0x1028, 0x0D02, "Dell Radeon HD 2400 XT", RHD_CARD_FLAG_DMS59, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  718.     { 0x94C1, 0x174B, 0xE390, "Sapphire HD 2400 XT", RHD_CARD_FLAG_NONE, VGA_B1_DVI_AB00, DEVINFO_EMPTY },
  719.     { 0x94C3, 0x0000, 0x0000, "ATI Radeon 2400 HD GENERIC", RHD_CARD_FLAG_NONE, VGA_B1_TV_B_DVI_AA00, DEVINFO_EMPTY },
  720.     /* 0x94C3 : RV610 : Radeon HD 2400 Pro */
  721.     { 0x94C3, 0x1545, 0x3210, "ATI Radeon 2400HD Pro", RHD_CARD_FLAG_HPDSWAP, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  722.     { 0x94C3, 0x174B, 0xE370, "Sapphire HD 2400 Pro", RHD_CARD_FLAG_NONE, VGA_A0_DVI_BB10, DEVINFO_EMPTY },
  723.     { 0x94C3, 0x18BC, 0x3550, "GeCube Radeon HD 2400PRO", RHD_CARD_FLAG_NONE, BROKEN_VGA_B1_DVI_AB00, DEVINFO_EMPTY },
  724.     /* 0x94C4 : RV610 : ATI Radeon HD 2400 PRO AGP  */
  725.     { 0x94C4, 0x18BC, 0x0028, "GeCube Radeon HD 2400PRO AGP", RHD_CARD_FLAG_NONE, BROKEN_VGA_B1_DVI_AB00, DEVINFO_EMPTY },
  726.     /* 0x94C5 : RV610 : ATI FireGL V4000  */
  727.     /* 0x94C6 : RV610 : RV610  */
  728.     /* 0x94C7 : RV610 : ATI Radeon HD 2350 */
  729.     /* 0x94C8 : M74 : Mobility Radeon HD 2400 XT */
  730.     /* 0x94C9 : M72 : Mobility Radeon HD 2400 */
  731.     /* 0x94CB : M72 : ATI RADEON E2400 */
  732.     /* 0x94CC : RV610 : RV610  */
  733.     /* 0x9505 : RV670 : ATI Radeon HD 3850 */
  734.     /* 0x9580 : RV630 : RV630 */
  735.     /* 0x9581 : M76 : Mobility Radeon HD 2600 */
  736.     /* 0x9583 : M76 : Mobility Radeon HD 2600 XT */
  737.     /* 0x9586 : RV630 : ATI Radeon HD 2600 XT AGP */
  738.     /* 0x9587 : RV630 : ATI Radeon HD 2600 Pro AGP */
  739.     { 0x9587, 0x1002, 0x0028, "Sapphire Radeon HD 2600 PRO AGP", RHD_CARD_FLAG_NONE, DVI_BA10_TV_B0_VGA_A0, DEVINFO_EMPTY },
  740.     { 0x9587, 0x1462, 0x0028, "MSI HD2600PRO AGP", RHD_CARD_FLAG_NONE, DVI_BA12_TV_B0_DVI_AB01, DEVINFO_EMPTY },
  741.     /* 0x9588 : RV630 : Radeon HD 2600 XT */
  742.     { 0x9588, 0x1002, 0x2542, "ATI Radeon HD 2600XT DDR4", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
  743.     { 0x9588, 0x1448, 0x216C, "Gigabyte HD 2600 XT 256MB DDR3", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
  744.     { 0x9588, 0x174B, 0x2E42, "Sapphire HD 2600 XT", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
  745.     /* 0x9589 : RV630 : Radeon HD 2600 Pro */
  746.     { 0x9589, 0x174B, 0xE410, "Sapphire HD 2600 Pro", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
  747.     /* 0x958A : RV630 : Gemini RV630 */
  748.     /* 0x958B : M76 : Gemini ATI Mobility Radeon HD 2600 XT */
  749.     /* 0x958C : RV630 : ATI FireGL V5600  */
  750.     /* 0x958D : RV630 : ATI FireGL V3600  */
  751.     /* 0x958E : RV630 : ATI Radeon HD 2600 LE  */
  752.     { 0x9610, 0x105B, 0x0E0F, "Foxconn A7GM-S (RS780)", RHD_CARD_FLAG_HPDOFF, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
  753.     { 0, 0, 0, NULL, 0, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY } /* KEEP THIS: End marker. */
  754. };
  755.  
  756. /*
  757.  *
  758.  */
  759.  
  760. struct rhdCard *RHDCardIdentify(RHDPtr rhdPtr)
  761. {
  762.     unsigned int deviceID, subVendorID, subDeviceID;
  763.     int i;
  764.  
  765.     deviceID = (unsigned int) rhdPtr->PciDeviceID;
  766.     subVendorID = (unsigned int)rhdPtr->subvendor_id;
  767.     subDeviceID = (unsigned int)rhdPtr->subdevice_id;
  768.  
  769.     for (i = 0; rhdCards[i].name; i++)
  770.       if ((rhdCards[i].device == deviceID) &&
  771.           (rhdCards[i].card_vendor == subVendorID) &&
  772.           (rhdCards[i].card_device == subDeviceID))
  773.         return rhdCards + i;
  774.  
  775.     xf86DrvMsg(pScrn->scrnIndex, X_INFO,
  776.                "Unknown card detected: 0x%04X:0x%04X:0x%04X.\n",
  777.          deviceID, subVendorID, subDeviceID);
  778.     return NULL;
  779. }
  780.  
  781. #define USE_ATOMBIOS RHD_RV770
  782. #define USE_ATOM_CRTC USE_ATOMBIOS
  783. #define USE_ATOM_PLL USE_ATOMBIOS
  784. #define USE_ATOM_OUTPUT USE_ATOMBIOS
  785.  
  786. /*
  787.  *
  788.  */
  789. Bool
  790. RHDUseAtom(RHDPtr rhdPtr, enum RHD_CHIPSETS *BlackList,
  791.            enum atomSubSystem subsys)
  792. {
  793. #ifdef ATOM_BIOS
  794.     Bool FromSys = FALSE, ret = FALSE;
  795.     CARD32 FromUser = 0;
  796.     int i = 0;
  797.     char *message = NULL;
  798.     enum RHD_CHIPSETS AtomChip;
  799.     int from = 0;
  800.  
  801.     switch (subsys) {
  802.         case atomUsageCrtc:
  803.             AtomChip = USE_ATOM_CRTC;
  804.             message = "Crtcs";
  805.             FromUser = (rhdPtr->UseAtomFlags >> RHD_ATOMBIOS_CRTC) & 0x7;
  806.             break;
  807.         case atomUsagePLL:
  808.             AtomChip = USE_ATOM_PLL;
  809.             message = "PLLs";
  810.             FromUser = (rhdPtr->UseAtomFlags >> RHD_ATOMBIOS_PLL) & 0x7;
  811.             break;
  812.         case atomUsageOutput:
  813.             AtomChip = USE_ATOM_OUTPUT;
  814.             message = "Outputs";
  815.             FromUser = (rhdPtr->UseAtomFlags >> RHD_ATOMBIOS_OUTPUT) & 0x7;
  816.             break;
  817.         case atomUsageAny:
  818.             AtomChip = min(USE_ATOM_OUTPUT,min(USE_ATOM_PLL, USE_ATOM_CRTC));
  819.             message = "All";
  820.             FromUser = ((rhdPtr->UseAtomFlags >> RHD_ATOMBIOS_OUTPUT)
  821.                 | (rhdPtr->UseAtomFlags >> RHD_ATOMBIOS_PLL)
  822.                         | (rhdPtr->UseAtomFlags >> RHD_ATOMBIOS_CRTC)) & 0x7;
  823.             break;
  824.     }
  825.  
  826.     if (rhdPtr->ChipSet >= AtomChip)
  827.         FromSys = TRUE;
  828.  
  829.     if (!FromSys && BlackList) {
  830.         while (BlackList[i] != RHD_CHIP_END) {
  831.             if (BlackList[i++] == rhdPtr->ChipSet) {
  832.                 FromSys = TRUE;
  833.             }
  834.         }
  835.     }
  836.     if (!FromSys) {
  837.         if (rhdPtr->UseAtomBIOS.set) {
  838. //        from = X_CONFIG;
  839.             ret = rhdPtr->UseAtomBIOS.val.bool;
  840.         }
  841.         if (FromUser & RHD_ATOMBIOS_ON)
  842.             ret = TRUE;
  843.         if (FromUser & RHD_ATOMBIOS_OFF)
  844.             ret = FALSE;
  845.     } else {
  846.         ret = TRUE;
  847.         if ((FromUser & RHD_ATOMBIOS_FORCE) && (FromUser & RHD_ATOMBIOS_OFF)) {
  848.  //       from = X_CONFIG;
  849.             ret = FALSE;
  850.         }
  851.     }
  852.     if (ret)
  853.     xf86DrvMsg(rhdPtr->scrnIndex, from, "Using AtomBIOS for %s\n",
  854.            message);
  855.  
  856.     return ret;
  857. #else
  858.     return 0;
  859. #endif /* ATOM_BIOS */
  860. }
  861.