1 #ifndef __NOUVEAU_LOCAL_H__
2 #define __NOUVEAU_LOCAL_H__
4 #include "pipe/p_compiler.h"
5 #include "nouveau_winsys_pipe.h"
11 #define NOUVEAU_MSG(fmt, args...) do { \
12 fprintf(stdout, "nouveau: "fmt, ##args); \
16 #define NOUVEAU_ERR(fmt, args...) do { \
17 fprintf(stderr, "%s:%d - "fmt, __func__, __LINE__, ##args); \
21 #define NOUVEAU_TIME_MSEC() 0
23 /* User FIFO control */
24 //#define NOUVEAU_DMA_TRACE
25 //#define NOUVEAU_DMA_DEBUG
26 //#define NOUVEAU_DMA_DUMP_POSTRELOC_PUSHBUF
27 #define NOUVEAU_DMA_BARRIER
28 #define NOUVEAU_DMA_TIMEOUT 2000
30 /* Push buffer access macros */
32 OUT_RING(struct nouveau_channel
*chan
, unsigned data
)
34 *(chan
->pushbuf
->cur
++) = (data
);
38 OUT_RINGp(struct nouveau_channel
*chan
, uint32_t *data
, unsigned size
)
40 memcpy(chan
->pushbuf
->cur
, data
, size
* 4);
41 chan
->pushbuf
->cur
+= size
;
45 OUT_RINGf(struct nouveau_channel
*chan
, float f
)
47 union { uint32_t i
; float f
; } c
;
53 BEGIN_RING(struct nouveau_channel
*chan
, struct nouveau_grobj
*gr
,
54 unsigned mthd
, unsigned size
)
56 if (chan
->pushbuf
->remaining
< (size
+ 1))
57 nouveau_pushbuf_flush(chan
, (size
+ 1));
58 OUT_RING(chan
, (gr
->subc
<< 13) | (size
<< 18) | mthd
);
59 chan
->pushbuf
->remaining
-= (size
+ 1);
63 FIRE_RING(struct nouveau_channel
*chan
)
65 nouveau_pushbuf_flush(chan
, 0);
69 BIND_RING(struct nouveau_channel
*chan
, struct nouveau_grobj
*gr
, unsigned subc
)
72 BEGIN_RING(chan
, gr
, 0x0000, 1);
73 OUT_RING (chan
, gr
->handle
);
77 OUT_RELOC(struct nouveau_channel
*chan
, struct nouveau_bo
*bo
,
78 unsigned data
, unsigned flags
, unsigned vor
, unsigned tor
)
80 nouveau_pushbuf_emit_reloc(chan
, chan
->pushbuf
->cur
++, bo
,
81 data
, flags
, vor
, tor
);
84 /* Raw data + flags depending on FB/TT buffer */
86 OUT_RELOCd(struct nouveau_channel
*chan
, struct nouveau_bo
*bo
,
87 unsigned data
, unsigned flags
, unsigned vor
, unsigned tor
)
89 OUT_RELOC(chan
, bo
, data
, flags
| NOUVEAU_BO_OR
, vor
, tor
);
92 /* FB/TT object handle */
94 OUT_RELOCo(struct nouveau_channel
*chan
, struct nouveau_bo
*bo
,
97 OUT_RELOC(chan
, bo
, 0, flags
| NOUVEAU_BO_OR
,
98 chan
->vram
->handle
, chan
->gart
->handle
);
101 /* Low 32-bits of offset */
103 OUT_RELOCl(struct nouveau_channel
*chan
, struct nouveau_bo
*bo
,
104 unsigned delta
, unsigned flags
)
106 OUT_RELOC(chan
, bo
, delta
, flags
| NOUVEAU_BO_LOW
, 0, 0);
109 /* High 32-bits of offset */
111 OUT_RELOCh(struct nouveau_channel
*chan
, struct nouveau_bo
*bo
,
112 unsigned delta
, unsigned flags
)
114 OUT_RELOC(chan
, bo
, delta
, flags
| NOUVEAU_BO_HIGH
, 0, 0);