xref: /linux/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/nvdec.c (revision ab93e0dd72c37d378dd936f031ffb83ff2bd87ce)
1 /* SPDX-License-Identifier: MIT
2  *
3  * Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.
4  */
5 #include "engine.h"
6 #include <engine/nvdec.h>
7 
8 static void *
9 nvkm_rm_nvdec_dtor(struct nvkm_engine *engine)
10 {
11 	return container_of(engine, struct nvkm_nvdec, engine);
12 }
13 
14 int
15 nvkm_rm_nvdec_new(struct nvkm_rm *rm, int inst)
16 {
17 	struct nvkm_nvdec *nvdec;
18 	int ret;
19 
20 	nvdec = kzalloc(sizeof(*nvdec), GFP_KERNEL);
21 	if (!nvdec)
22 		return -ENOMEM;
23 
24 	ret = nvkm_rm_engine_ctor(nvkm_rm_nvdec_dtor, rm, NVKM_ENGINE_NVDEC, inst,
25 				  &rm->gpu->nvdec.class, 1, &nvdec->engine);
26 	if (ret) {
27 		kfree(nvdec);
28 		return ret;
29 	}
30 
31 	rm->device->nvdec[inst] = nvdec;
32 	return 0;
33 }
34