1a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#ifndef __NV30_WINSYS_H__ 2a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define __NV30_WINSYS_H__ 3a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 4a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#include <string.h> 55eb7ff1175a644ffe3b0f1a75cb235400355f9fbJohannes Obermayr#include "nouveau_winsys.h" 65eb7ff1175a644ffe3b0f1a75cb235400355f9fbJohannes Obermayr#include "nouveau_buffer.h" 7a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 8a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs/*XXX: rnn */ 9a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV40_3D_VTXTEX_OFFSET(i) (0x0900 + ((i) * 0x20)) // 401e80 10a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV40_3D_VTXTEX_FORMAT(i) (0x0904 + ((i) * 0x20)) // 401e90 11a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV40_3D_VTXTEX_WRAP(i) (0x0908 + ((i) * 0x20)) // 401ea0 12a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV40_3D_VTXTEX_ENABLE(i) (0x090c + ((i) * 0x20)) // 401eb0 13a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV40_3D_VTXTEX_SWZ(i) (0x0910 + ((i) * 0x20)) // 401ec0 14a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV40_3D_VTXTEX_FILTER(i) (0x0914 + ((i) * 0x20)) // 401ed0 15a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV40_3D_VTXTEX_SIZE(i) (0x0918 + ((i) * 0x20)) // 401ee0 16a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV40_3D_VTXTEX_BCOL(i) (0x091c + ((i) * 0x20)) // 401ef0 17a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV30_3D_VTX_CACHE_INVALIDATE_1710 0x1710 18a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV30_3D_R1718 0x1718 19a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV40_3D_PRIM_RESTART_ENABLE 0x1dac 20a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV40_3D_PRIM_RESTART_INDEX 0x1db0 21a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 22a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void 23a2fc42b899de22273c1df96091bfb5c636075cb0Ben SkeggsPUSH_RELOC(struct nouveau_pushbuf *push, struct nouveau_bo *bo, uint32_t offset, 24a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs uint32_t flags, uint32_t vor, uint32_t tor) 25a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs{ 26a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nouveau_pushbuf_reloc(push, bo, offset, flags, vor, tor); 27a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs} 28a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 29a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct nouveau_bufctx * 30a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggsbufctx(struct nouveau_pushbuf *push) 31a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs{ 32a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs struct nouveau_bufctx **pctx = push->user_priv; 33a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs return *pctx; 34a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs} 35a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 36a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void 37a2fc42b899de22273c1df96091bfb5c636075cb0Ben SkeggsPUSH_RESET(struct nouveau_pushbuf *push, int bin) 38a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs{ 39a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nouveau_bufctx_reset(bufctx(push), bin); 40a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs} 41a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 42a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void 43a2fc42b899de22273c1df96091bfb5c636075cb0Ben SkeggsPUSH_REFN(struct nouveau_pushbuf *push, int bin, 44a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs struct nouveau_bo *bo, uint32_t access) 45a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs{ 46a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nouveau_bufctx_refn(bufctx(push), bin, bo, access); 47a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs} 48a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 49a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void 50a2fc42b899de22273c1df96091bfb5c636075cb0Ben SkeggsPUSH_MTHDl(struct nouveau_pushbuf *push, int subc, int mthd, int bin, 51a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs struct nouveau_bo *bo, uint32_t offset, uint32_t access) 52a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs{ 53a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nouveau_bufctx_mthd(bufctx(push), bin, (1 << 18) | (subc << 13) | mthd, 54a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs bo, offset, access | NOUVEAU_BO_LOW, 0, 0)->priv = NULL; 55a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_DATA(push, bo->offset + offset); 56a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs} 57a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 58a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void 59a2fc42b899de22273c1df96091bfb5c636075cb0Ben SkeggsPUSH_MTHDo(struct nouveau_pushbuf *push, int subc, int mthd, int bin, 60a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs struct nouveau_bo *bo, uint32_t access, uint32_t vor, uint32_t tor) 61a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs{ 62a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nouveau_bufctx_mthd(bufctx(push), bin, (1 << 18) | (subc << 13) | mthd, 63a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs bo, 0, access | NOUVEAU_BO_OR, vor, tor)->priv = NULL; 64a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs if (bo->flags & NOUVEAU_BO_VRAM) 65a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_DATA(push, vor); 66a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs else 67a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_DATA(push, tor); 68a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs} 69a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 70a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void 71a2fc42b899de22273c1df96091bfb5c636075cb0Ben SkeggsPUSH_MTHDs(struct nouveau_pushbuf *push, int subc, int mthd, int bin, 72a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs struct nouveau_bo *bo, uint32_t data, uint32_t access, 73a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs uint32_t vor, uint32_t tor) 74a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs{ 75a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nouveau_bufctx_mthd(bufctx(push), bin, (1 << 18) | (subc << 13) | mthd, 76a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs bo, data, access | NOUVEAU_BO_OR, vor, tor)->priv = NULL; 77a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs if (bo->flags & NOUVEAU_BO_VRAM) 78a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_DATA(push, data | vor); 79a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs else 80a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_DATA(push, data | tor); 81a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs} 82a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 83a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct nouveau_bufref * 84a2fc42b899de22273c1df96091bfb5c636075cb0Ben SkeggsPUSH_MTHD(struct nouveau_pushbuf *push, int subc, int mthd, int bin, 85a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs struct nouveau_bo *bo, uint32_t data, uint32_t access, 86a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs uint32_t vor, uint32_t tor) 87a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs{ 88a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs struct nouveau_bufref *bref = 89a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nouveau_bufctx_mthd(bufctx(push), bin, (1 << 18) | (subc << 13) | mthd, 90a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs bo, data, access | NOUVEAU_BO_OR, vor, tor); 91a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs if (access & NOUVEAU_BO_LOW) 92a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs data += bo->offset; 93a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs if (bo->flags & NOUVEAU_BO_VRAM) 94a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs data |= vor; 95a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs else 96a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs data |= tor; 97a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_DATA(push, data); 98a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs bref->priv = NULL; 99a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs return bref; 100a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs} 101a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 102a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void 103a2fc42b899de22273c1df96091bfb5c636075cb0Ben SkeggsPUSH_RESRC(struct nouveau_pushbuf *push, int subc, int mthd, int bin, 104a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs struct nv04_resource *r, uint32_t data, uint32_t access, 105a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs uint32_t vor, uint32_t tor) 106a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs{ 107a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_MTHD(push, subc, mthd, bin, r->bo, r->offset + data, 108a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs r->domain | access, vor, tor)->priv = r; 109a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs} 110a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 111a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void 112a2fc42b899de22273c1df96091bfb5c636075cb0Ben SkeggsBEGIN_NV04(struct nouveau_pushbuf *push, int subc, int mthd, int size) 113a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs{ 114a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_SPACE(push, size + 1); 115a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_DATA (push, 0x00000000 | (size << 18) | (subc << 13) | mthd); 116a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs} 117a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 118a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void 119a2fc42b899de22273c1df96091bfb5c636075cb0Ben SkeggsBEGIN_NI04(struct nouveau_pushbuf *push, int subc, int mthd, int size) 120a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs{ 121a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_SPACE(push, size + 1); 122a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_DATA (push, 0x40000000 | (size << 18) | (subc << 13) | mthd); 123a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs} 124a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 125a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs/* subchannel assignment 126a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * 127a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * 0: <1.0.0 - used by kernel for m2mf 128a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * 1.0.0 - used by kernel for nvsw 129a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * 130a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * 1: <1.0.0 - used by kernel for nvsw 131a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * 1.0.0 - free for userspace 132a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * 133a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * 2-7: free for userspace on all kernel versions 134a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs */ 135a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 136a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define SUBC_M2MF(mthd) 2, (mthd) 137a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV03_M2MF(mthd) SUBC_M2MF(NV03_M2MF_##mthd) 138a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 139a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define SUBC_SF2D(mthd) 3, (mthd) 140a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV04_SF2D(mthd) SUBC_SF2D(NV04_SURFACE_2D_##mthd) 141a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 142a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define SUBC_SSWZ(mthd) 4, (mthd) 143a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV04_SSWZ(mthd) SUBC_SSWZ(NV04_SURFACE_SWZ_##mthd) 144a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 145a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define SUBC_SIFM(mthd) 5, (mthd) 146a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV03_SIFM(mthd) SUBC_SIFM(NV03_SIFM_##mthd) 147a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV05_SIFM(mthd) SUBC_SIFM(NV05_SIFM_##mthd) 148a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 149a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define SUBC_3D(mthd) 7, (mthd) 150a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV30_3D(mthd) SUBC_3D(NV30_3D_##mthd) 151a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV40_3D(mthd) SUBC_3D(NV40_3D_##mthd) 152a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 153a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV01_SUBC(subc, mthd) SUBC_##subc((NV01_SUBCHAN_##mthd)) 154a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV11_SUBC(subc, mthd) SUBC_##subc((NV11_SUBCHAN_##mthd)) 155a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 156a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#define NV04_GRAPH(subc, mthd) SUBC_##subc((NV04_GRAPH_##mthd)) 157a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 158a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#endif 159