1f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller
2f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller#ifndef __NV50_WINSYS_H__
3f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller#define __NV50_WINSYS_H__
4f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller
5f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller#include <stdint.h>
6f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller#include <unistd.h>
779079141fa7cbf395d1ffc77364ac301d9824211Ben Skeggs
8f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller#include "pipe/p_defines.h"
9f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller
105eb7ff1175a644ffe3b0f1a75cb235400355f9fbJohannes Obermayr#include "nouveau_winsys.h"
115eb7ff1175a644ffe3b0f1a75cb235400355f9fbJohannes Obermayr#include "nouveau_buffer.h"
12f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller
136d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller
14f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller#ifndef NV04_PFIFO_MAX_PACKET_LEN
15f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller#define NV04_PFIFO_MAX_PACKET_LEN 2047
16f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller#endif
17f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller
18f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller
19a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void
206d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumillernv50_add_bufctx_resident_bo(struct nouveau_bufctx *bufctx, int bin,
216d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller                            unsigned flags, struct nouveau_bo *bo)
226d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller{
236d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   nouveau_bufctx_refn(bufctx, bin, bo, flags)->priv = NULL;
246d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller}
256d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller
26a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void
276d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumillernv50_add_bufctx_resident(struct nouveau_bufctx *bufctx, int bin,
286d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller                         struct nv04_resource *res, unsigned flags)
296d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller{
306d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   struct nouveau_bufref *ref =
316d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller      nouveau_bufctx_refn(bufctx, bin, res->bo, flags | res->domain);
326d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   ref->priv = res;
336d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   ref->priv_data = flags;
346d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller}
356d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller
366d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller#define BCTX_REFN_bo(ctx, bin, fl, bo) \
376d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   nv50_add_bufctx_resident_bo(ctx, NV50_BIND_##bin, fl, bo);
386d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller
396d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller#define BCTX_REFN(bctx, bin, res, acc) \
406d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   nv50_add_bufctx_resident(bctx, NV50_BIND_##bin, res, NOUVEAU_BO_##acc)
416d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller
42a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void
436d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph BumillerPUSH_REFN(struct nouveau_pushbuf *push, struct nouveau_bo *bo, uint32_t flags)
446d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller{
456d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   struct nouveau_pushbuf_refn ref = { bo, flags };
466d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   nouveau_pushbuf_refn(push, &ref, 1);
476d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller}
486d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller
496d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller
506d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller#define SUBC_3D(m) 3, (m)
516d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller#define NV50_3D(n) SUBC_3D(NV50_3D_##n)
529e40a621c177d595ffd1cf094246219e7067d768Samuel Pitoiset#define NV84_3D(n) SUBC_3D(NV84_3D_##n)
5302fac2930581b9bea9f6d221eb6d6b471fc3b9c6Christoph Bumiller#define NVA0_3D(n) SUBC_3D(NVA0_3D_##n)
54f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller
556d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller#define SUBC_2D(m) 4, (m)
566d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller#define NV50_2D(n) SUBC_2D(NV50_2D_##n)
57f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller
586d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller#define SUBC_M2MF(m) 5, (m)
596d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller#define NV50_M2MF(n) SUBC_M2MF(NV50_M2MF_##n)
60f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller
61e844aac40bbcbdfef373cc7cf720cc8b0552aff0Samuel Pitoiset#define SUBC_CP(m) 6, (m)
62e844aac40bbcbdfef373cc7cf720cc8b0552aff0Samuel Pitoiset#define NV50_CP(n) SUBC_CP(NV50_COMPUTE_##n)
63f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller
64f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller
65a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline uint32_t
666d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph BumillerNV50_FIFO_PKHDR(int subc, int mthd, unsigned size)
67f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller{
686d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   return 0x00000000 | (size << 18) | (subc << 13) | mthd;
69f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller}
70f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller
71a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline uint32_t
726d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph BumillerNV50_FIFO_PKHDR_NI(int subc, int mthd, unsigned size)
73f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller{
746d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   return 0x40000000 | (size << 18) | (subc << 13) | mthd;
75f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller}
76f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller
77a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline uint32_t
786d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph BumillerNV50_FIFO_PKHDR_L(int subc, int mthd)
79f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller{
806d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   return 0x00030000 | (subc << 13) | mthd;
81f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller}
82f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller
836d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller
84a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline uint32_t
856d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumillernouveau_bo_memtype(const struct nouveau_bo *bo)
86f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller{
876d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   return bo->config.nv50.memtype;
88f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller}
89f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller
906d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller
91a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void
926d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph BumillerPUSH_DATAh(struct nouveau_pushbuf *push, uint64_t data)
93f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller{
946d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   *push->cur++ = (uint32_t)(data >> 32);
95f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller}
96f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller
97a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void
986d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph BumillerBEGIN_NV04(struct nouveau_pushbuf *push, int subc, int mthd, unsigned size)
99f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller{
1006d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller#ifndef NV50_PUSH_EXPLICIT_SPACE_CHECKING
1016d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   PUSH_SPACE(push, size + 1);
1026d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller#endif
1036d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   PUSH_DATA (push, NV50_FIFO_PKHDR(subc, mthd, size));
104f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller}
105f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller
106a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void
1076d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph BumillerBEGIN_NI04(struct nouveau_pushbuf *push, int subc, int mthd, unsigned size)
108f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller{
1096d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller#ifndef NV50_PUSH_EXPLICIT_SPACE_CHECKING
1106d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   PUSH_SPACE(push, size + 1);
1116d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller#endif
1126d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   PUSH_DATA (push, NV50_FIFO_PKHDR_NI(subc, mthd, size));
113f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller}
114f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller
1156d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller/* long, non-incremental, nv50-only */
116a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void
1176d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph BumillerBEGIN_NL50(struct nouveau_pushbuf *push, int subc, int mthd, uint32_t size)
1186d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller{
1196d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller#ifndef NV50_PUSH_EXPLICIT_SPACE_CHECKING
1206d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   PUSH_SPACE(push, 2);
121f80c03e1875fe96ff2f4c022e3cb76357828140dChristoph Bumiller#endif
1226d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   PUSH_DATA (push, NV50_FIFO_PKHDR_L(subc, mthd));
1236d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller   PUSH_DATA (push, size);
1246d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller}
1256d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller
1266d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller#endif /* __NV50_WINSYS_H__ */
127