| .. | .. |
|---|
| 45 | 45 | */ |
|---|
| 46 | 46 | #define NOUVEAU_DMA_SKIPS (128 / 4) |
|---|
| 47 | 47 | |
|---|
| 48 | | -/* Hardcoded object assignments to subchannels (subchannel id). */ |
|---|
| 49 | | -enum { |
|---|
| 50 | | - NvSubCtxSurf2D = 0, |
|---|
| 51 | | - NvSubSw = 1, |
|---|
| 52 | | - NvSubImageBlit = 2, |
|---|
| 53 | | - NvSubGdiRect = 3, |
|---|
| 54 | | - |
|---|
| 55 | | - NvSub2D = 3, /* DO NOT CHANGE - hardcoded for kepler gr fifo */ |
|---|
| 56 | | - NvSubCopy = 4, /* DO NOT CHANGE - hardcoded for kepler gr fifo */ |
|---|
| 57 | | -}; |
|---|
| 58 | | - |
|---|
| 59 | 48 | /* Object handles - for stuff that's doesn't use handle == oclass. */ |
|---|
| 60 | 49 | enum { |
|---|
| 61 | 50 | NvDmaFB = 0x80000002, |
|---|
| .. | .. |
|---|
| 65 | 54 | NvEvoSema0 = 0x80000010, |
|---|
| 66 | 55 | NvEvoSema1 = 0x80000011, |
|---|
| 67 | 56 | }; |
|---|
| 68 | | - |
|---|
| 69 | | -#define NV_MEMORY_TO_MEMORY_FORMAT 0x00000039 |
|---|
| 70 | | -#define NV_MEMORY_TO_MEMORY_FORMAT_NAME 0x00000000 |
|---|
| 71 | | -#define NV_MEMORY_TO_MEMORY_FORMAT_SET_REF 0x00000050 |
|---|
| 72 | | -#define NV_MEMORY_TO_MEMORY_FORMAT_NOP 0x00000100 |
|---|
| 73 | | -#define NV_MEMORY_TO_MEMORY_FORMAT_NOTIFY 0x00000104 |
|---|
| 74 | | -#define NV_MEMORY_TO_MEMORY_FORMAT_NOTIFY_STYLE_WRITE 0x00000000 |
|---|
| 75 | | -#define NV_MEMORY_TO_MEMORY_FORMAT_NOTIFY_STYLE_WRITE_LE_AWAKEN 0x00000001 |
|---|
| 76 | | -#define NV_MEMORY_TO_MEMORY_FORMAT_DMA_NOTIFY 0x00000180 |
|---|
| 77 | | -#define NV_MEMORY_TO_MEMORY_FORMAT_DMA_SOURCE 0x00000184 |
|---|
| 78 | | -#define NV_MEMORY_TO_MEMORY_FORMAT_OFFSET_IN 0x0000030c |
|---|
| 79 | | - |
|---|
| 80 | | -#define NV50_MEMORY_TO_MEMORY_FORMAT 0x00005039 |
|---|
| 81 | | -#define NV50_MEMORY_TO_MEMORY_FORMAT_UNK200 0x00000200 |
|---|
| 82 | | -#define NV50_MEMORY_TO_MEMORY_FORMAT_UNK21C 0x0000021c |
|---|
| 83 | | -#define NV50_MEMORY_TO_MEMORY_FORMAT_OFFSET_IN_HIGH 0x00000238 |
|---|
| 84 | | -#define NV50_MEMORY_TO_MEMORY_FORMAT_OFFSET_OUT_HIGH 0x0000023c |
|---|
| 85 | 57 | |
|---|
| 86 | 58 | static __must_check inline int |
|---|
| 87 | 59 | RING_SPACE(struct nouveau_channel *chan, int size) |
|---|
| .. | .. |
|---|
| 100 | 72 | OUT_RING(struct nouveau_channel *chan, int data) |
|---|
| 101 | 73 | { |
|---|
| 102 | 74 | nouveau_bo_wr32(chan->push.buffer, chan->dma.cur++, data); |
|---|
| 103 | | -} |
|---|
| 104 | | - |
|---|
| 105 | | -extern void |
|---|
| 106 | | -OUT_RINGp(struct nouveau_channel *chan, const void *data, unsigned nr_dwords); |
|---|
| 107 | | - |
|---|
| 108 | | -static inline void |
|---|
| 109 | | -BEGIN_NV04(struct nouveau_channel *chan, int subc, int mthd, int size) |
|---|
| 110 | | -{ |
|---|
| 111 | | - OUT_RING(chan, 0x00000000 | (subc << 13) | (size << 18) | mthd); |
|---|
| 112 | | -} |
|---|
| 113 | | - |
|---|
| 114 | | -static inline void |
|---|
| 115 | | -BEGIN_NI04(struct nouveau_channel *chan, int subc, int mthd, int size) |
|---|
| 116 | | -{ |
|---|
| 117 | | - OUT_RING(chan, 0x40000000 | (subc << 13) | (size << 18) | mthd); |
|---|
| 118 | | -} |
|---|
| 119 | | - |
|---|
| 120 | | -static inline void |
|---|
| 121 | | -BEGIN_NVC0(struct nouveau_channel *chan, int subc, int mthd, int size) |
|---|
| 122 | | -{ |
|---|
| 123 | | - OUT_RING(chan, 0x20000000 | (size << 16) | (subc << 13) | (mthd >> 2)); |
|---|
| 124 | | -} |
|---|
| 125 | | - |
|---|
| 126 | | -static inline void |
|---|
| 127 | | -BEGIN_NIC0(struct nouveau_channel *chan, int subc, int mthd, int size) |
|---|
| 128 | | -{ |
|---|
| 129 | | - OUT_RING(chan, 0x60000000 | (size << 16) | (subc << 13) | (mthd >> 2)); |
|---|
| 130 | | -} |
|---|
| 131 | | - |
|---|
| 132 | | -static inline void |
|---|
| 133 | | -BEGIN_IMC0(struct nouveau_channel *chan, int subc, int mthd, u16 data) |
|---|
| 134 | | -{ |
|---|
| 135 | | - OUT_RING(chan, 0x80000000 | (data << 16) | (subc << 13) | (mthd >> 2)); |
|---|
| 136 | 75 | } |
|---|
| 137 | 76 | |
|---|
| 138 | 77 | #define WRITE_PUT(val) do { \ |
|---|
| .. | .. |
|---|
| 163 | 102 | { |
|---|
| 164 | 103 | chan->dma.cur = chan->dma.put; |
|---|
| 165 | 104 | } |
|---|
| 166 | | - |
|---|
| 167 | | -/* FIFO methods */ |
|---|
| 168 | | -#define NV01_SUBCHAN_OBJECT 0x00000000 |
|---|
| 169 | | -#define NV84_SUBCHAN_SEMAPHORE_ADDRESS_HIGH 0x00000010 |
|---|
| 170 | | -#define NV84_SUBCHAN_SEMAPHORE_ADDRESS_LOW 0x00000014 |
|---|
| 171 | | -#define NV84_SUBCHAN_SEMAPHORE_SEQUENCE 0x00000018 |
|---|
| 172 | | -#define NV84_SUBCHAN_SEMAPHORE_TRIGGER 0x0000001c |
|---|
| 173 | | -#define NV84_SUBCHAN_SEMAPHORE_TRIGGER_ACQUIRE_EQUAL 0x00000001 |
|---|
| 174 | | -#define NV84_SUBCHAN_SEMAPHORE_TRIGGER_WRITE_LONG 0x00000002 |
|---|
| 175 | | -#define NV84_SUBCHAN_SEMAPHORE_TRIGGER_ACQUIRE_GEQUAL 0x00000004 |
|---|
| 176 | | -#define NVC0_SUBCHAN_SEMAPHORE_TRIGGER_YIELD 0x00001000 |
|---|
| 177 | | -#define NV84_SUBCHAN_UEVENT 0x00000020 |
|---|
| 178 | | -#define NV84_SUBCHAN_WRCACHE_FLUSH 0x00000024 |
|---|
| 179 | | -#define NV10_SUBCHAN_REF_CNT 0x00000050 |
|---|
| 180 | | -#define NV11_SUBCHAN_DMA_SEMAPHORE 0x00000060 |
|---|
| 181 | | -#define NV11_SUBCHAN_SEMAPHORE_OFFSET 0x00000064 |
|---|
| 182 | | -#define NV11_SUBCHAN_SEMAPHORE_ACQUIRE 0x00000068 |
|---|
| 183 | | -#define NV11_SUBCHAN_SEMAPHORE_RELEASE 0x0000006c |
|---|
| 184 | | -#define NV40_SUBCHAN_YIELD 0x00000080 |
|---|
| 185 | 105 | |
|---|
| 186 | 106 | /* NV_SW object class */ |
|---|
| 187 | 107 | #define NV_SW_DMA_VBLSEM 0x0000018c |
|---|