1a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard/* 2a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 3a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * All Rights Reserved. 4a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * 5a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * Permission is hereby granted, free of charge, to any person obtaining a 6a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * copy of this software and associated documentation files (the 7a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * "Software"), to deal in the Software without restriction, including 8a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * without limitation the rights to use, copy, modify, merge, publish, 9a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * distribute, sub license, and/or sell copies of the Software, and to 10a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * permit persons to whom the Software is furnished to do so, subject to 11a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * the following conditions: 12a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * 13a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * The above copyright notice and this permission notice (including the 14a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * next paragraph) shall be included in all copies or substantial portions 15a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * of the Software. 16a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * 17a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 20a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 21a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * 25a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * 26a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * Author: Alan Hourihane <alanh@tungstengraphics.com> 27a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * Author: Jakob Bornecrantz <wallbraker@gmail.com> 28a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * Author: Corbin Simpson <MostAwesomedude@gmail.com> 29a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * 30a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard */ 31a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 32a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "../../state_trackers/xorg/xorg_winsys.h" 33a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 34a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstatic void radeonsi_xorg_identify(int flags); 35a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstatic Bool radeonsi_xorg_pci_probe(DriverPtr driver, 36a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard int entity_num, 37a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct pci_device *device, 38a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard intptr_t match_data); 39a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 40a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstatic const struct pci_id_match radeonsi_xorg_device_match[] = { 41a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard {0x1002, PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY, 0, 0, 0}, 42a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard {0, 0, 0}, 43a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}; 44a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 45a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstatic SymTabRec radeonsi_xorg_chipsets[] = { 46a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard {PCI_MATCH_ANY, "AMD Southern Islands Graphics Chipset"}, 47a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard {-1, NULL} 48a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}; 49a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 50a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstatic PciChipsets radeonsi_xorg_pci_devices[] = { 51a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard {PCI_MATCH_ANY, PCI_MATCH_ANY, NULL}, 52a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard {-1, -1, NULL} 53a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}; 54a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 55a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstatic XF86ModuleVersionInfo radeonsi_xorg_version = { 56a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard "radeonsi", 57a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard MODULEVENDORSTRING, 58a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard MODINFOSTRING1, 59a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard MODINFOSTRING2, 60a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard XORG_VERSION_CURRENT, 61a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 0, 1, 0, /* major, minor, patch */ 62a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard ABI_CLASS_VIDEODRV, 63a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard ABI_VIDEODRV_VERSION, 64a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard MOD_CLASS_VIDEODRV, 65a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard {0, 0, 0, 0} 66a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}; 67a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 68a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard/* 69a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * Xorg driver exported structures 70a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard */ 71a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 72a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard_X_EXPORT DriverRec radeonsi_driver = { 73a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1, 74a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard "radeonsi", 75a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard radeonsi_xorg_identify, 76a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard NULL, 77a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard xorg_tracker_available_options, 78a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard NULL, 79a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 0, 80a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard NULL, 81a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard radeonsi_xorg_device_match, 82a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard radeonsi_xorg_pci_probe 83a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}; 84a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 85a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstatic MODULESETUPPROTO(radeonsi_xorg_setup); 86a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 87a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard_X_EXPORT XF86ModuleData radeonsiModuleData = { 88a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard &radeonsi_xorg_version, 89a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard radeonsi_xorg_setup, 90a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard NULL 91a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}; 92a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 93a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard/* 94a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * Xorg driver functions 95a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard */ 96a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 97a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstatic pointer 98a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardradeonsi_xorg_setup(pointer module, pointer opts, int *errmaj, int *errmin) 99a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 100a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard static Bool setupDone = 0; 101a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 102a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard /* This module should be loaded only once, but check to be sure. 103a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard */ 104a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard if (!setupDone) { 105a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard setupDone = 1; 106a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard xf86AddDriver(&radeonsi_driver, module, HaveDriverFuncs); 107a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 108a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard /* 109a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * The return value must be non-NULL on success even though there 110a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * is no TearDownProc. 111a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard */ 112a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return (pointer) 1; 113a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else { 114a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard if (errmaj) 115a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard *errmaj = LDR_ONCEONLY; 116a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return NULL; 117a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 118a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 119a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 120a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstatic void 121a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardradeonsi_xorg_identify(int flags) 122a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 123a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard xf86PrintChipsets("radeonsi", "Driver for AMD Radeon SI Gallium with KMS", 124a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard radeonsi_xorg_chipsets); 125a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 126a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 127a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstatic Bool 128a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardradeonsi_xorg_pci_probe(DriverPtr driver, 129a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard int entity_num, struct pci_device *device, intptr_t match_data) 130a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 131a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard ScrnInfoPtr scrn = NULL; 132a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard EntityInfoPtr entity; 133a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 134a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard scrn = xf86ConfigPciEntity(scrn, 0, entity_num, radeonsi_xorg_pci_devices, 135a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard NULL, NULL, NULL, NULL, NULL); 136a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard if (scrn != NULL) { 137a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard scrn->driverVersion = 1; 138a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard scrn->driverName = "radeonsi"; 139a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard scrn->name = "RADEONSI"; 140a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard scrn->Probe = NULL; 141a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 142a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard entity = xf86GetEntityInfo(entity_num); 143a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 144a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard /* Use all the functions from the xorg tracker */ 145a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard xorg_tracker_set_functions(scrn); 146a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 147a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return scrn != NULL; 148a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 149