39 #include <linux/pci.h>
40 #include <linux/slab.h>
42 #include <linux/export.h>
54 drm_dma_handle_t *dmah;
74 if (dmah->vaddr ==
NULL) {
79 memset(dmah->vaddr, 0, size);
83 for (addr = (
unsigned long)dmah->vaddr, sz = size;
108 for (addr = (
unsigned long)dmah->vaddr, sz = dmah->size;
137 if (dev->if_version < 0x10004)
144 static int drm_pci_get_irq(
struct drm_device *dev)
146 return dev->pdev->irq;
149 static const char *drm_pci_get_name(
struct drm_device *dev)
152 return pdriver->
name;
155 int drm_pci_set_busid(
struct drm_device *dev,
struct drm_master *master)
159 master->unique_len = 40;
160 master->unique_size = master->unique_len;
162 if (master->unique ==
NULL)
166 len =
snprintf(master->unique, master->unique_len,
167 "pci:%04x:%02x:%02x.%d",
168 drm_get_pci_domain(dev),
169 dev->pdev->bus->number,
173 if (len >= master->unique_len) {
174 DRM_ERROR(
"buffer overflow");
178 master->unique_len = len;
184 if (dev->devname ==
NULL) {
197 int drm_pci_set_unique(
struct drm_device *dev,
198 struct drm_master *master,
202 const char *bus_name;
207 if (!master->unique) {
217 master->unique[master->unique_len] =
'\0';
219 bus_name = dev->driver->bus->get_name(dev);
227 sprintf(dev->devname,
"%s@%s", bus_name,
233 ret =
sscanf(master->unique,
"PCI:%d:%d:%d", &bus, &slot, &func);
242 if ((domain != drm_get_pci_domain(dev)) ||
243 (bus != dev->pdev->bus->number) ||
244 (slot !=
PCI_SLOT(dev->pdev->devfn)) ||
245 (func !=
PCI_FUNC(dev->pdev->devfn))) {
257 if ((p->
busnum >> 8) != drm_get_pci_domain(dev) ||
258 (p->
busnum & 0xff) != dev->pdev->bus->number ||
262 p->
irq = dev->pdev->irq;
271 if (drm_core_has_AGP(dev)) {
272 if (drm_pci_device_is_agp(dev))
273 dev->agp = drm_agp_init(dev);
274 if (drm_core_check_feature(dev, DRIVER_REQUIRE_AGP)
275 && (dev->agp ==
NULL)) {
276 DRM_ERROR(
"Cannot initialize the agpgart module.\n");
279 if (drm_core_has_MTRR(dev)) {
282 mtrr_add(dev->agp->agp_info.aper_base,
283 dev->agp->agp_info.aper_size *
290 static struct drm_bus drm_pci_bus = {
291 .bus_type = DRIVER_BUS_PCI,
292 .get_irq = drm_pci_get_irq,
293 .get_name = drm_pci_get_name,
294 .set_busid = drm_pci_set_busid,
295 .set_unique = drm_pci_set_unique,
296 .irq_by_busid = drm_pci_irq_by_busid,
297 .agp_init = drm_pci_agp_init,
312 struct drm_driver *
driver)
330 dev->pci_device = pdev->
device;
331 dev->pci_vendor = pdev->
vendor;
344 if (drm_core_check_feature(dev, DRIVER_MODESET)) {
345 pci_set_drvdata(pdev, dev);
351 if ((ret =
drm_get_minor(dev, &dev->primary, DRM_MINOR_LEGACY)))
354 if (dev->driver->load) {
361 if (drm_core_check_feature(dev, DRIVER_MODESET)) {
363 &dev->primary->mode_group);
370 DRM_INFO(
"Initialized %s %d.%d.%d %s for %s on minor %d\n",
371 driver->name, driver->major, driver->minor, driver->patchlevel,
372 driver->date, pci_name(pdev), dev->primary->index);
380 if (drm_core_check_feature(dev, DRIVER_MODESET))
410 INIT_LIST_HEAD(&driver->device_list);
411 driver->kdriver.pci = pdriver;
412 driver->bus = &drm_pci_bus;
414 if (driver->driver_features & DRIVER_MODESET)
415 return pci_register_driver(pdriver);
418 for (i = 0; pdriver->
id_table[
i].vendor != 0; i++) {
436 drm_get_pci_dev(pdev, pid, driver);
459 if (driver->driver_features & DRIVER_MODESET) {
465 DRM_INFO(
"Module unloaded\n");
479 if (!pci_is_pcie(dev->pdev))
482 root = dev->pdev->
bus->self;
484 pos = pci_pcie_cap(root);
501 *mask |= DRM_PCIE_SPEED_25;
503 *mask |= DRM_PCIE_SPEED_50;
505 *mask |= DRM_PCIE_SPEED_80;
508 *mask |= DRM_PCIE_SPEED_25;
510 *mask |= DRM_PCIE_SPEED_50;
513 DRM_INFO(
"probing gen 2 caps for device %x:%x = %x/%x\n", root->
vendor, root->
device, lnkcap, lnkcap2);