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