This source file includes following definitions.
- gv100_gsp_oneinit
- gv100_gsp_dtor
- gv100_gsp_new
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #include <subdev/gsp.h>
23 #include <subdev/top.h>
24 #include <engine/falcon.h>
25
26 static int
27 gv100_gsp_oneinit(struct nvkm_subdev *subdev)
28 {
29 struct nvkm_gsp *gsp = nvkm_gsp(subdev);
30
31 gsp->addr = nvkm_top_addr(subdev->device, subdev->index);
32 if (!gsp->addr)
33 return -EINVAL;
34
35 return nvkm_falcon_v1_new(subdev, "GSP", gsp->addr, &gsp->falcon);
36 }
37
38 static void *
39 gv100_gsp_dtor(struct nvkm_subdev *subdev)
40 {
41 struct nvkm_gsp *gsp = nvkm_gsp(subdev);
42 nvkm_falcon_del(&gsp->falcon);
43 return gsp;
44 }
45
46 static const struct nvkm_subdev_func
47 gv100_gsp = {
48 .dtor = gv100_gsp_dtor,
49 .oneinit = gv100_gsp_oneinit,
50 };
51
52 int
53 gv100_gsp_new(struct nvkm_device *device, int index, struct nvkm_gsp **pgsp)
54 {
55 struct nvkm_gsp *gsp;
56
57 if (!(gsp = *pgsp = kzalloc(sizeof(*gsp), GFP_KERNEL)))
58 return -ENOMEM;
59
60 nvkm_subdev_ctor(&gv100_gsp, device, index, &gsp->subdev);
61 return 0;
62 }