172cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz/* 272cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 372cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * All Rights Reserved. 472cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * 572cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * Permission is hereby granted, free of charge, to any person obtaining a 672cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * copy of this software and associated documentation files (the 772cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * "Software"), to deal in the Software without restriction, including 872cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * without limitation the rights to use, copy, modify, merge, publish, 972cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * distribute, sub license, and/or sell copies of the Software, and to 1072cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * permit persons to whom the Software is furnished to do so, subject to 1172cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * the following conditions: 1272cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * 1372cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * The above copyright notice and this permission notice (including the 1472cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * next paragraph) shall be included in all copies or substantial portions 1572cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * of the Software. 1672cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * 1772cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 1872cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 1972cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 2072cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 2172cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 2272cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 2372cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2472cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * 2572cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * 2672cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * Author: Alan Hourihane <alanh@tungstengraphics.com> 2772cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * Author: Jakob Bornecrantz <wallbraker@gmail.com> 2872cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * 2972cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz */ 3072cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 3143218a45a4cdbe2bc92867dc143f4b0e5fe9ca8dJakob Bornecrantz#include "../../state_trackers/xorg/xorg_winsys.h" 3272cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 3372cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantzstatic void intel_xorg_identify(int flags); 3472cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantzstatic Bool intel_xorg_pci_probe(DriverPtr driver, 3572cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz int entity_num, 3672cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz struct pci_device *device, 3772cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz intptr_t match_data); 3872cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 3972cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantzstatic const struct pci_id_match intel_xorg_device_match[] = { 40e0da812c5bdb7ffdd3450f614a4b73e44cd7fecaMichel Dänzer {0x8086, PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY, 0, 0, 0}, 4172cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz {0, 0, 0}, 4272cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz}; 4372cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 4472cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantzstatic SymTabRec intel_xorg_chipsets[] = { 45e0da812c5bdb7ffdd3450f614a4b73e44cd7fecaMichel Dänzer {PCI_MATCH_ANY, "Intel Graphics Device"}, 4672cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz {-1, NULL} 4772cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz}; 4872cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 4972cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantzstatic PciChipsets intel_xorg_pci_devices[] = { 50c0cf0fd163397d68acfb2e226a6b9a569ded54cdMichel Dänzer {PCI_MATCH_ANY, PCI_MATCH_ANY, NULL}, 51c0cf0fd163397d68acfb2e226a6b9a569ded54cdMichel Dänzer {-1, -1, NULL} 5272cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz}; 5372cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 5472cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantzstatic XF86ModuleVersionInfo intel_xorg_version = { 55b1ce5749b996d6ce3dcf9bbd1537c46d14e62adbMatt Turner "i915", 5672cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz MODULEVENDORSTRING, 5772cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz MODINFOSTRING1, 5872cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz MODINFOSTRING2, 5972cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz XORG_VERSION_CURRENT, 6072cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 0, 1, 0, /* major, minor, patch */ 6172cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz ABI_CLASS_VIDEODRV, 6272cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz ABI_VIDEODRV_VERSION, 6372cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz MOD_CLASS_VIDEODRV, 6472cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz {0, 0, 0, 0} 6572cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz}; 6672cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 6772cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz/* 6872cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * Xorg driver exported structures 6972cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz */ 7072cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 7172cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz_X_EXPORT DriverRec modesetting = { 7272cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 1, 7372cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz "modesetting", 7472cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz intel_xorg_identify, 7572cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz NULL, 7672cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz xorg_tracker_available_options, 7772cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz NULL, 7872cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 0, 7972cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz NULL, 8072cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz intel_xorg_device_match, 8172cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz intel_xorg_pci_probe 8272cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz}; 8372cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 8472cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantzstatic MODULESETUPPROTO(intel_xorg_setup); 8572cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 8672cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz_X_EXPORT XF86ModuleData modesettingModuleData = { 8772cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz &intel_xorg_version, 8872cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz intel_xorg_setup, 8972cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz NULL 9072cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz}; 9172cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 9272cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz/* 9372cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * Xorg driver functions 9472cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz */ 9572cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 9672cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantzstatic pointer 9772cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantzintel_xorg_setup(pointer module, pointer opts, int *errmaj, int *errmin) 9872cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz{ 9972cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz static Bool setupDone = 0; 10072cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 10172cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz /* This module should be loaded only once, but check to be sure. 10272cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz */ 10372cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz if (!setupDone) { 10472cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz setupDone = 1; 10572cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz xf86AddDriver(&modesetting, module, HaveDriverFuncs); 10672cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 10772cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz /* 10872cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * The return value must be non-NULL on success even though there 10972cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz * is no TearDownProc. 11072cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz */ 11172cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz return (pointer) 1; 11272cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz } else { 11372cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz if (errmaj) 11472cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz *errmaj = LDR_ONCEONLY; 11572cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz return NULL; 11672cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz } 11772cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz} 11872cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 11972cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantzstatic void 12072cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantzintel_xorg_identify(int flags) 12172cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz{ 12272cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz xf86PrintChipsets("modesetting", "Driver for Modesetting Kernel Drivers", 12372cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz intel_xorg_chipsets); 12472cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz} 12572cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 12672cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantzstatic Bool 12772cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantzintel_xorg_pci_probe(DriverPtr driver, 12872cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz int entity_num, struct pci_device *device, intptr_t match_data) 12972cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz{ 13072cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz ScrnInfoPtr scrn = NULL; 13172cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz EntityInfoPtr entity; 13272cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 13372cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz scrn = xf86ConfigPciEntity(scrn, 0, entity_num, intel_xorg_pci_devices, 13472cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz NULL, NULL, NULL, NULL, NULL); 13572cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz if (scrn != NULL) { 13672cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz scrn->driverVersion = 1; 1376f0a1a842685a2b172187ece08113352c3765ce6Jakob Bornecrantz scrn->driverName = "i915"; 13872cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz scrn->name = "modesetting"; 13972cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz scrn->Probe = NULL; 14072cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 14172cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz entity = xf86GetEntityInfo(entity_num); 14272cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz 14372cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz /* Use all the functions from the xorg tracker */ 14472cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz xorg_tracker_set_functions(scrn); 14572cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz } 14672cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz return scrn != NULL; 14772cf6e8e92e49753472e760b1cf4575327b48f43Jakob Bornecrantz} 148