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