1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#include <engine/falcon.h>
26#include <engine/ppp.h>
27
28struct nv98_ppp_priv {
29 struct nouveau_falcon base;
30};
31
32
33
34
35
36static struct nouveau_oclass
37nv98_ppp_sclass[] = {
38 { 0x88b3, &nouveau_object_ofuncs },
39 { 0x85b3, &nouveau_object_ofuncs },
40 {},
41};
42
43
44
45
46
47static struct nouveau_oclass
48nv98_ppp_cclass = {
49 .handle = NV_ENGCTX(PPP, 0x98),
50 .ofuncs = &(struct nouveau_ofuncs) {
51 .ctor = _nouveau_falcon_context_ctor,
52 .dtor = _nouveau_falcon_context_dtor,
53 .init = _nouveau_falcon_context_init,
54 .fini = _nouveau_falcon_context_fini,
55 .rd32 = _nouveau_falcon_context_rd32,
56 .wr32 = _nouveau_falcon_context_wr32,
57 },
58};
59
60
61
62
63
64static int
65nv98_ppp_init(struct nouveau_object *object)
66{
67 struct nv98_ppp_priv *priv = (void *)object;
68 int ret;
69
70 ret = nouveau_falcon_init(&priv->base);
71 if (ret)
72 return ret;
73
74 nv_wr32(priv, 0x086010, 0x0000ffd2);
75 nv_wr32(priv, 0x08601c, 0x0000fff2);
76 return 0;
77}
78
79static int
80nv98_ppp_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
81 struct nouveau_oclass *oclass, void *data, u32 size,
82 struct nouveau_object **pobject)
83{
84 struct nv98_ppp_priv *priv;
85 int ret;
86
87 ret = nouveau_falcon_create(parent, engine, oclass, 0x086000, true,
88 "PPPP", "ppp", &priv);
89 *pobject = nv_object(priv);
90 if (ret)
91 return ret;
92
93 nv_subdev(priv)->unit = 0x00400002;
94 nv_engine(priv)->cclass = &nv98_ppp_cclass;
95 nv_engine(priv)->sclass = nv98_ppp_sclass;
96 return 0;
97}
98
99struct nouveau_oclass
100nv98_ppp_oclass = {
101 .handle = NV_ENGINE(PPP, 0x98),
102 .ofuncs = &(struct nouveau_ofuncs) {
103 .ctor = nv98_ppp_ctor,
104 .dtor = _nouveau_falcon_dtor,
105 .init = nv98_ppp_init,
106 .fini = _nouveau_falcon_fini,
107 .rd32 = _nouveau_falcon_rd32,
108 .wr32 = _nouveau_falcon_wr32,
109 },
110};
111