mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-25 21:54:06 +08:00
drm/nouveau/core/client: use standard object dtor/init/fini paths
Preparation for supporting subclients, and also good for consistency. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
03295eabdb
commit
2c3af924fb
@ -21,9 +21,6 @@ struct nvkm_client {
|
||||
|
||||
int nvkm_client_new(const char *name, u64 device, const char *cfg,
|
||||
const char *dbg, struct nvkm_client **);
|
||||
void nvkm_client_del(struct nvkm_client **);
|
||||
int nvkm_client_init(struct nvkm_client *);
|
||||
int nvkm_client_fini(struct nvkm_client *, bool suspend);
|
||||
|
||||
int nvkm_client_notify_new(struct nvkm_object *, struct nvkm_event *,
|
||||
void *data, u32 size);
|
||||
|
@ -60,20 +60,24 @@ nvkm_client_ioctl(void *priv, bool super, void *data, u32 size, void **hack)
|
||||
static int
|
||||
nvkm_client_resume(void *priv)
|
||||
{
|
||||
return nvkm_client_init(priv);
|
||||
struct nvkm_client *client = priv;
|
||||
return nvkm_object_init(&client->object);
|
||||
}
|
||||
|
||||
static int
|
||||
nvkm_client_suspend(void *priv)
|
||||
{
|
||||
return nvkm_client_fini(priv, true);
|
||||
struct nvkm_client *client = priv;
|
||||
return nvkm_object_fini(&client->object, true);
|
||||
}
|
||||
|
||||
static void
|
||||
nvkm_client_driver_fini(void *priv)
|
||||
{
|
||||
struct nvkm_client *client = priv;
|
||||
nvkm_client_del(&client);
|
||||
struct nvkm_object *object = &client->object;
|
||||
nvkm_object_fini(object, false);
|
||||
nvkm_object_del(&object);
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -206,45 +206,36 @@ nvkm_client_child_get(struct nvkm_object *object, int index,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct nvkm_object_func
|
||||
nvkm_client_object_func = {
|
||||
.mthd = nvkm_client_mthd,
|
||||
.sclass = nvkm_client_child_get,
|
||||
};
|
||||
|
||||
int
|
||||
nvkm_client_fini(struct nvkm_client *client, bool suspend)
|
||||
static int
|
||||
nvkm_client_fini(struct nvkm_object *object, bool suspend)
|
||||
{
|
||||
struct nvkm_object *object = &client->object;
|
||||
struct nvkm_client *client = nvkm_client(object);
|
||||
const char *name[2] = { "fini", "suspend" };
|
||||
int i;
|
||||
nvif_debug(object, "%s notify\n", name[suspend]);
|
||||
for (i = 0; i < ARRAY_SIZE(client->notify); i++)
|
||||
nvkm_client_notify_put(client, i);
|
||||
return nvkm_object_fini(&client->object, suspend);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
nvkm_client_init(struct nvkm_client *client)
|
||||
static void *
|
||||
nvkm_client_dtor(struct nvkm_object *object)
|
||||
{
|
||||
return nvkm_object_init(&client->object);
|
||||
}
|
||||
|
||||
void
|
||||
nvkm_client_del(struct nvkm_client **pclient)
|
||||
{
|
||||
struct nvkm_client *client = *pclient;
|
||||
struct nvkm_client *client = nvkm_client(object);
|
||||
int i;
|
||||
if (client) {
|
||||
nvkm_client_fini(client, false);
|
||||
for (i = 0; i < ARRAY_SIZE(client->notify); i++)
|
||||
nvkm_client_notify_del(client, i);
|
||||
nvkm_object_dtor(&client->object);
|
||||
kfree(*pclient);
|
||||
*pclient = NULL;
|
||||
}
|
||||
for (i = 0; i < ARRAY_SIZE(client->notify); i++)
|
||||
nvkm_client_notify_del(client, i);
|
||||
return client;
|
||||
}
|
||||
|
||||
static const struct nvkm_object_func
|
||||
nvkm_client = {
|
||||
.dtor = nvkm_client_dtor,
|
||||
.fini = nvkm_client_fini,
|
||||
.mthd = nvkm_client_mthd,
|
||||
.sclass = nvkm_client_child_get,
|
||||
};
|
||||
|
||||
int
|
||||
nvkm_client_new(const char *name, u64 device, const char *cfg,
|
||||
const char *dbg, struct nvkm_client **pclient)
|
||||
@ -256,7 +247,7 @@ nvkm_client_new(const char *name, u64 device, const char *cfg,
|
||||
return -ENOMEM;
|
||||
oclass.client = client;
|
||||
|
||||
nvkm_object_ctor(&nvkm_client_object_func, &oclass, &client->object);
|
||||
nvkm_object_ctor(&nvkm_client, &oclass, &client->object);
|
||||
snprintf(client->name, sizeof(client->name), "%s", name);
|
||||
client->device = device;
|
||||
client->debug = nvkm_dbgopt(dbg, "CLIENT");
|
||||
|
Loading…
Reference in New Issue
Block a user