Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e781dc8f authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/device: tidy ctor/dtor interfaces



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 76ecea5b
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -210,12 +210,10 @@ enum nv_bus_type {
	NVKM_BUS_PLATFORM,
};

#define nvkm_device_create(p,t,n,s,c,d,u)                                   \
	nvkm_device_create_((void *)(p), (t), (n), (s), (c), (d),           \
			       sizeof(**u), (void **)u)
int  nvkm_device_create_(void *, enum nv_bus_type type, u64 name,
int  nvkm_device_new(void *, enum nv_bus_type type, u64 name,
		     const char *sname, const char *cfg, const char *dbg,
			    int, void **);
		     struct nvkm_device **);
void nvkm_device_del(struct nvkm_device **);

/* device logging */
#define nvdev_printk_(d,l,p,f,a...) do {                                       \
+11 −11
Original line number Diff line number Diff line
@@ -325,9 +325,9 @@ static int nouveau_drm_probe(struct pci_dev *pdev,
		remove_conflicting_framebuffers(aper, "nouveaufb", boot);
	kfree(aper);

	ret = nvkm_device_create(pdev, NVKM_BUS_PCI,
				 nouveau_pci_name(pdev), pci_name(pdev),
				 nouveau_config, nouveau_debug, &device);
	ret = nvkm_device_new(pdev, NVKM_BUS_PCI, nouveau_pci_name(pdev),
			      pci_name(pdev), nouveau_config, nouveau_debug,
			      &device);
	if (ret)
		return ret;

@@ -335,7 +335,7 @@ static int nouveau_drm_probe(struct pci_dev *pdev,

	ret = drm_get_pci_dev(pdev, pent, &driver_pci);
	if (ret) {
		nvkm_object_ref(NULL, (struct nvkm_object **)&device);
		nvkm_device_del(&device);
		return ret;
	}

@@ -537,7 +537,7 @@ nouveau_drm_device_remove(struct drm_device *dev)
	device = client->device;
	drm_put_dev(dev);

	nvkm_object_ref(NULL, (struct nvkm_object **)&device);
	nvkm_device_del(&device);
}

static void
@@ -1062,12 +1062,12 @@ nouveau_platform_device_create(struct platform_device *pdev,
	struct drm_device *drm;
	int err;

	err = nvkm_device_create(pdev, NVKM_BUS_PLATFORM,
	err = nvkm_device_new(pdev, NVKM_BUS_PLATFORM,
			      nouveau_platform_name(pdev),
			      dev_name(&pdev->dev), nouveau_config,
			      nouveau_debug, pdevice);
	if (err)
		return ERR_PTR(err);
		goto err_free;

	drm = drm_dev_alloc(&driver_platform, &pdev->dev);
	if (!drm) {
@@ -1085,7 +1085,7 @@ nouveau_platform_device_create(struct platform_device *pdev,
	return drm;

err_free:
	nvkm_object_ref(NULL, (struct nvkm_object **)pdevice);
	nvkm_device_del(pdevice);

	return ERR_PTR(err);
}
+25 −24
Original line number Diff line number Diff line
@@ -666,23 +666,6 @@ nvkm_device_init(struct nvkm_object *object)
	return ret;
}

static void
nvkm_device_dtor(struct nvkm_object *object)
{
	struct nvkm_device *device = (void *)object;

	nvkm_event_fini(&device->event);

	mutex_lock(&nv_devices_mutex);
	list_del(&device->head);
	mutex_unlock(&nv_devices_mutex);

	if (device->pri)
		iounmap(device->pri);

	nvkm_engine_destroy(&device->engine);
}

resource_size_t
nv_device_resource_start(struct nvkm_device *device, unsigned int bar)
{
@@ -728,16 +711,34 @@ static struct nvkm_oclass
nvkm_device_oclass = {
	.handle = NV_ENGINE(DEVICE, 0x00),
	.ofuncs = &(struct nvkm_ofuncs) {
		.dtor = nvkm_device_dtor,
		.init = nvkm_device_init,
		.fini = nvkm_device_fini,
	},
};

void
nvkm_device_del(struct nvkm_device **pdevice)
{
	struct nvkm_device *device = *pdevice;
	if (device) {
		nvkm_event_fini(&device->event);

		mutex_lock(&nv_devices_mutex);
		list_del(&device->head);
		mutex_unlock(&nv_devices_mutex);

		if (device->pri)
			iounmap(device->pri);

		nvkm_engine_destroy(&device->engine);
		*pdevice = NULL;
	}
}

int
nvkm_device_create_(void *dev, enum nv_bus_type type, u64 name,
nvkm_device_new(void *dev, enum nv_bus_type type, u64 name,
		const char *sname, const char *cfg, const char *dbg,
		    int length, void **pobject)
		struct nvkm_device **pdevice)
{
	struct nvkm_device *device;
	int ret = -EEXIST;
@@ -748,9 +749,9 @@ nvkm_device_create_(void *dev, enum nv_bus_type type, u64 name,
			goto done;
	}

	ret = nvkm_engine_create_(NULL, NULL, &nvkm_device_oclass, true,
				  "DEVICE", "device", length, pobject);
	device = *pobject;
	ret = nvkm_engine_create(NULL, NULL, &nvkm_device_oclass, true,
				 "DEVICE", "device", &device);
	*pdevice = device;
	if (ret)
		goto done;