summaryrefslogtreecommitdiffstats
path: root/sys/dev/pci/drm/drm_drv.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/pci/drm/drm_drv.c')
-rw-r--r--sys/dev/pci/drm/drm_drv.c39
1 files changed, 24 insertions, 15 deletions
diff --git a/sys/dev/pci/drm/drm_drv.c b/sys/dev/pci/drm/drm_drv.c
index b9d292c113a..e385230dac8 100644
--- a/sys/dev/pci/drm/drm_drv.c
+++ b/sys/dev/pci/drm/drm_drv.c
@@ -56,16 +56,26 @@ int drm_activate(struct device *, enum devact);
int drmprint(void *, const char *);
struct device *
-drm_attach_mi(const struct drm_driver_info *driver, bus_dma_tag_t dmat,
- struct pci_attach_args *pa, int is_agp, struct device *dev)
+drm_attach_pci(const struct drm_driver_info *driver, struct pci_attach_args *pa,
+ int is_agp, struct device *dev)
{
struct drm_attach_args arg;
arg.driver = driver;
- arg.pa = pa;
- arg.dmat = dmat;
+ arg.dmat = pa->pa_dmat;
+ arg.bst = pa->pa_memt;
+ arg.irq = pa->pa_intrline;
arg.is_agp = is_agp;
+ arg.busid_len = 20;
+ arg.busid = malloc(arg.busid_len + 1, M_DRM, M_NOWAIT);
+ if (arg.busid == NULL) {
+ printf(": no memory for drm\n");
+ return (NULL);
+ }
+ snprintf(arg.busid, arg.busid_len, "pci:%04x:%02x:%02x.%1x",
+ pa->pa_domain, pa->pa_bus, pa->pa_device, pa->pa_function);
+
printf("\n");
return (config_found(dev, &arg, drmprint));
}
@@ -104,20 +114,14 @@ drm_attach(struct device *parent, struct device *self, void *aux)
{
struct drm_device *dev = (struct drm_device *)self;
struct drm_attach_args *da = aux;
- struct pci_attach_args *pa = da->pa;
dev->dev_private = parent;
dev->driver = da->driver;
- /* needed for pci_mapreg_* */
- memcpy(&dev->pa, pa, sizeof(dev->pa));
-
dev->dmat = da->dmat;
- dev->irq = pa->pa_intrline;
- dev->pci_domain = 0;
- dev->pci_bus = pa->pa_bus;
- dev->pci_slot = pa->pa_device;
- dev->pci_func = pa->pa_function;
+ dev->irq = da->irq;
+ dev->unique = da->busid;
+ dev->unique_len = da->busid_len;
rw_init(&dev->dev_lock, "drmdevlk");
mtx_init(&dev->drw_lock, IPL_NONE);
@@ -628,8 +632,6 @@ drmioctl(dev_t kdev, u_long cmd, caddr_t data, int flags,
return (drm_setversion(dev, data, file_priv));
case DRM_IOCTL_IRQ_BUSID:
return (drm_irq_by_busid(dev, data, file_priv));
- case DRM_IOCTL_SET_UNIQUE:
- return (drm_setunique(dev, data, file_priv));
case DRM_IOCTL_AUTH_MAGIC:
return (drm_authmagic(dev, data, file_priv));
case DRM_IOCTL_ADD_MAP:
@@ -666,6 +668,13 @@ drmioctl(dev_t kdev, u_long cmd, caddr_t data, int flags,
return (drm_sg_free(dev, data, file_priv));
case DRM_IOCTL_UPDATE_DRAW:
return (drm_update_draw(dev, data, file_priv));
+ case DRM_IOCTL_SET_UNIQUE:
+ /*
+ * Deprecated in DRM version 1.1, and will return EBUSY
+ * when setversion has
+ * requested version 1.1 or greater.
+ */
+ return (EBUSY);
}
}
if (dev->driver->ioctl != NULL)