2 #ifndef __NVC0_WINSYS_H__
3 #define __NVC0_WINSYS_H__
8 #include "pipe/p_defines.h"
10 #include "nouveau/nouveau_winsys.h"
11 #include "nouveau/nouveau_buffer.h"
13 #ifndef NV04_PFIFO_MAX_PACKET_LEN
14 #define NV04_PFIFO_MAX_PACKET_LEN 2047
19 nv50_add_bufctx_resident_bo(struct nouveau_bufctx
*bufctx
, int bin
,
20 unsigned flags
, struct nouveau_bo
*bo
)
22 nouveau_bufctx_refn(bufctx
, bin
, bo
, flags
)->priv
= NULL
;
26 nvc0_add_resident(struct nouveau_bufctx
*bufctx
, int bin
,
27 struct nv04_resource
*res
, unsigned flags
)
29 struct nouveau_bufref
*ref
=
30 nouveau_bufctx_refn(bufctx
, bin
, res
->bo
, flags
| res
->domain
);
32 ref
->priv_data
= flags
;
35 #define BCTX_REFN_bo(ctx, bin, fl, bo) \
36 nv50_add_bufctx_resident_bo(ctx, NVC0_BIND_##bin, fl, bo);
38 #define BCTX_REFN(bctx, bin, res, acc) \
39 nvc0_add_resident(bctx, NVC0_BIND_##bin, res, NOUVEAU_BO_##acc)
42 PUSH_REFN(struct nouveau_pushbuf
*push
, struct nouveau_bo
*bo
, uint32_t flags
)
44 struct nouveau_pushbuf_refn ref
= { bo
, flags
};
45 nouveau_pushbuf_refn(push
, &ref
, 1);
49 #define SUBC_3D(m) 0, (m)
50 #define NVC0_3D(n) SUBC_3D(NVC0_3D_##n)
51 #define NVE4_3D(n) SUBC_3D(NVE4_3D_##n)
53 #define SUBC_COMPUTE(m) 1, (m)
54 #define NVC0_COMPUTE(n) SUBC_COMPUTE(NVC0_COMPUTE_##n)
55 #define NVE4_COMPUTE(n) SUBC_COMPUTE(NVE4_COMPUTE_##n)
57 #define SUBC_M2MF(m) 2, (m)
58 #define SUBC_P2MF(m) 2, (m)
59 #define NVC0_M2MF(n) SUBC_M2MF(NVC0_M2MF_##n)
60 #define NVE4_P2MF(n) SUBC_P2MF(NVE4_P2MF_##n)
62 #define SUBC_2D(m) 3, (m)
63 #define NVC0_2D(n) SUBC_2D(NVC0_2D_##n)
65 #define SUBC_COPY(m) 4, (m)
66 #define NVE4_COPY(m) SUBC_COPY(NVE4_COPY_##n)
68 #define SUBC_SW(m) 7, (m)
70 static INLINE
uint32_t
71 NVC0_FIFO_PKHDR_SQ(int subc
, int mthd
, unsigned size
)
73 return 0x20000000 | (size
<< 16) | (subc
<< 13) | (mthd
>> 2);
76 static INLINE
uint32_t
77 NVC0_FIFO_PKHDR_NI(int subc
, int mthd
, unsigned size
)
79 return 0x60000000 | (size
<< 16) | (subc
<< 13) | (mthd
>> 2);
82 static INLINE
uint32_t
83 NVC0_FIFO_PKHDR_IL(int subc
, int mthd
, uint8_t data
)
85 return 0x80000000 | (data
<< 16) | (subc
<< 13) | (mthd
>> 2);
88 static INLINE
uint32_t
89 NVC0_FIFO_PKHDR_1I(int subc
, int mthd
, unsigned size
)
91 return 0xa0000000 | (size
<< 16) | (subc
<< 13) | (mthd
>> 2);
96 nouveau_bo_memtype(const struct nouveau_bo
*bo
)
98 return bo
->config
.nvc0
.memtype
;
103 PUSH_DATAh(struct nouveau_pushbuf
*push
, uint64_t data
)
105 *push
->cur
++ = (uint32_t)(data
>> 32);
109 BEGIN_NVC0(struct nouveau_pushbuf
*push
, int subc
, int mthd
, unsigned size
)
111 #ifndef NVC0_PUSH_EXPLICIT_SPACE_CHECKING
112 PUSH_SPACE(push
, size
+ 1);
114 PUSH_DATA (push
, NVC0_FIFO_PKHDR_SQ(subc
, mthd
, size
));
118 BEGIN_NIC0(struct nouveau_pushbuf
*push
, int subc
, int mthd
, unsigned size
)
120 #ifndef NVC0_PUSH_EXPLICIT_SPACE_CHECKING
121 PUSH_SPACE(push
, size
+ 1);
123 PUSH_DATA (push
, NVC0_FIFO_PKHDR_NI(subc
, mthd
, size
));
127 BEGIN_1IC0(struct nouveau_pushbuf
*push
, int subc
, int mthd
, unsigned size
)
129 #ifndef NVC0_PUSH_EXPLICIT_SPACE_CHECKING
130 PUSH_SPACE(push
, size
+ 1);
132 PUSH_DATA (push
, NVC0_FIFO_PKHDR_1I(subc
, mthd
, size
));
136 IMMED_NVC0(struct nouveau_pushbuf
*push
, int subc
, int mthd
, uint8_t data
)
138 #ifndef NVC0_PUSH_EXPLICIT_SPACE_CHECKING
141 PUSH_DATA (push
, NVC0_FIFO_PKHDR_IL(subc
, mthd
, data
));
144 #endif /* __NVC0_WINSYS_H__ */