1#ifndef __NOUVEAU_DMAOBJ_H__
2#define __NOUVEAU_DMAOBJ_H__
3
4#include <core/object.h>
5#include <core/engine.h>
6
7struct nouveau_gpuobj;
8
9struct nouveau_dmaobj {
10 struct nouveau_object base;
11 u32 target;
12 u32 access;
13 u64 start;
14 u64 limit;
15 u32 conf0;
16};
17
18struct nouveau_dmaeng {
19 struct nouveau_engine base;
20
21 /* creates a "physical" dma object from a struct nouveau_dmaobj */
22 int (*bind)(struct nouveau_dmaeng *dmaeng,
23 struct nouveau_object *parent,
24 struct nouveau_dmaobj *dmaobj,
25 struct nouveau_gpuobj **);
26};
27
28#define nouveau_dmaeng_create(p,e,c,d) \
29 nouveau_engine_create((p), (e), (c), true, "DMAOBJ", "dmaobj", (d))
30#define nouveau_dmaeng_destroy(p) \
31 nouveau_engine_destroy(&(p)->base)
32#define nouveau_dmaeng_init(p) \
33 nouveau_engine_init(&(p)->base)
34#define nouveau_dmaeng_fini(p,s) \
35 nouveau_engine_fini(&(p)->base, (s))
36
37#define _nouveau_dmaeng_dtor _nouveau_engine_dtor
38#define _nouveau_dmaeng_init _nouveau_engine_init
39#define _nouveau_dmaeng_fini _nouveau_engine_fini
40
41extern struct nouveau_oclass nv04_dmaeng_oclass;
42extern struct nouveau_oclass nv50_dmaeng_oclass;
43extern struct nouveau_oclass nvc0_dmaeng_oclass;
44extern struct nouveau_oclass nvd0_dmaeng_oclass;
45
46extern struct nouveau_oclass nouveau_dmaobj_sclass[];
47
48#endif
49