diff options
Diffstat (limited to 'shared-core')
| -rw-r--r-- | shared-core/drm.h | 20 | ||||
| -rw-r--r-- | shared-core/drm_pciids.txt | 255 | ||||
| -rw-r--r-- | shared-core/i915_dma.c | 351 | ||||
| -rw-r--r-- | shared-core/i915_drm.h | 47 | ||||
| -rw-r--r-- | shared-core/i915_drv.h | 12 | ||||
| -rw-r--r-- | shared-core/i915_irq.c | 2 | ||||
| -rw-r--r-- | shared-core/nouveau_drm.h | 3 | ||||
| -rw-r--r-- | shared-core/nouveau_drv.h | 15 | ||||
| -rw-r--r-- | shared-core/nouveau_fifo.c | 16 | ||||
| -rw-r--r-- | shared-core/nouveau_irq.c | 318 | ||||
| -rw-r--r-- | shared-core/nouveau_mem.c | 2 | ||||
| -rw-r--r-- | shared-core/nouveau_notifier.c | 14 | ||||
| -rw-r--r-- | shared-core/nouveau_reg.h | 17 | ||||
| -rw-r--r-- | shared-core/nouveau_state.c | 101 | ||||
| -rw-r--r-- | shared-core/nouveau_swmthd.c | 193 | ||||
| -rw-r--r-- | shared-core/nouveau_swmthd.h | 34 | ||||
| -rw-r--r-- | shared-core/nv04_graph.c | 52 | ||||
| -rw-r--r-- | shared-core/nv10_graph.c | 568 | ||||
| -rw-r--r-- | shared-core/nv20_graph.c | 3314 | ||||
| -rw-r--r-- | shared-core/nv30_graph.c | 2912 | ||||
| -rw-r--r-- | shared-core/nv40_graph.c | 169 | ||||
| -rw-r--r-- | shared-core/radeon_state.c | 4 | ||||
| -rw-r--r-- | shared-core/via_drv.h | 3 | 
23 files changed, 4653 insertions, 3769 deletions
| diff --git a/shared-core/drm.h b/shared-core/drm.h index ab05ffc1..d609fdda 100644 --- a/shared-core/drm.h +++ b/shared-core/drm.h @@ -640,6 +640,7 @@ struct drm_set_version {  #define DRM_FENCE_FLAG_SHAREABLE           0x00000002  #define DRM_FENCE_FLAG_WAIT_LAZY           0x00000004  #define DRM_FENCE_FLAG_WAIT_IGNORE_SIGNALS 0x00000008 +#define DRM_FENCE_FLAG_NO_USER             0x00000010  /* Reserved for driver use */  #define DRM_FENCE_MASK_DRIVER              0xFF000000 @@ -648,12 +649,14 @@ struct drm_set_version {  struct drm_fence_arg {  	unsigned int handle; -	unsigned int class; +	unsigned int fence_class;  	unsigned int type;  	unsigned int flags;  	unsigned int signaled; -	unsigned int pad64; -	uint64_t expand_pad[3]; /*Future expansion */ +	unsigned int error; +	unsigned int sequence; +        unsigned int pad64; +	uint64_t expand_pad[2]; /*Future expansion */  };  /* Buffer permissions, referring to how the GPU uses the buffers. @@ -752,13 +755,6 @@ struct drm_fence_arg {  #define DRM_BO_INIT_MINOR 1 -enum drm_bo_type { -	drm_bo_type_dc, -	drm_bo_type_user, -	drm_bo_type_fake, -	drm_bo_type_kernel, /* for initial kernel allocations */ -}; -  struct drm_bo_info_req {  	uint64_t mask;  	uint64_t flags; @@ -774,8 +770,6 @@ struct drm_bo_create_req {  	uint64_t buffer_start;  	unsigned int hint;  	unsigned int page_alignment; -	enum drm_bo_type type; -	unsigned int pad64;  };  struct drm_bo_op_req { @@ -1062,7 +1056,6 @@ struct drm_mode_mode_cmd {  #define DRM_IOCTL_MM_UNLOCK             DRM_IOWR(0xc3, struct drm_mm_type_arg)  #define DRM_IOCTL_FENCE_CREATE          DRM_IOWR(0xc4, struct drm_fence_arg) -#define DRM_IOCTL_FENCE_DESTROY         DRM_IOWR(0xc5, struct drm_fence_arg)  #define DRM_IOCTL_FENCE_REFERENCE       DRM_IOWR(0xc6, struct drm_fence_arg)  #define DRM_IOCTL_FENCE_UNREFERENCE     DRM_IOWR(0xc7, struct drm_fence_arg)  #define DRM_IOCTL_FENCE_SIGNALED        DRM_IOWR(0xc8, struct drm_fence_arg) @@ -1072,7 +1065,6 @@ struct drm_mode_mode_cmd {  #define DRM_IOCTL_FENCE_BUFFERS         DRM_IOWR(0xcc, struct drm_fence_arg)  #define DRM_IOCTL_BO_CREATE             DRM_IOWR(0xcd, struct drm_bo_create_arg) -#define DRM_IOCTL_BO_DESTROY            DRM_IOWR(0xce, struct drm_bo_handle_arg)  #define DRM_IOCTL_BO_MAP                DRM_IOWR(0xcf, struct drm_bo_map_wait_idle_arg)  #define DRM_IOCTL_BO_UNMAP              DRM_IOWR(0xd0, struct drm_bo_handle_arg)  #define DRM_IOCTL_BO_REFERENCE          DRM_IOWR(0xd1, struct drm_bo_reference_info_arg) diff --git a/shared-core/drm_pciids.txt b/shared-core/drm_pciids.txt index 74e7e75a..05d32f2e 100644 --- a/shared-core/drm_pciids.txt +++ b/shared-core/drm_pciids.txt @@ -481,261 +481,6 @@  0x10DE 0x009D NV40 "NVidia Quadro FX 4500"  0x10DE 0x009E NV40 "NVidia 0x009E" -[nouveau] -0x10de 0x0020 NV_04 "RIVA TNT" -0x10de 0x0028 NV_04 "RIVA TNT2/TNT2 Pro" -0x10de 0x0029 NV_04 "RIVA TNT2 Ultra" -0x10de 0x002a NV_04 "Riva TnT2" -0x10de 0x002b NV_04 "Riva TnT2" -0x10de 0x002c NV_04 "Vanta/Vanta LT" -0x10de 0x002d NV_04 "RIVA TNT2 Model 64/Model 64 Pro" -0x10de 0x002e NV_04 "Vanta" -0x10de 0x002f NV_04 "Vanta" -0x10de 0x0040 NV_40 "GeForce 6800 Ultra" -0x10de 0x0041 NV_40 "GeForce 6800" -0x10de 0x0042 NV_40 "GeForce 6800 LE" -0x10de 0x0043 NV_40 "NV40.3" -0x10de 0x0044 NV_40 "GeForce 6800 XT" -0x10de 0x0045 NV_40 "GeForce 6800 GT" -0x10de 0x0046 NV_40 "GeForce 6800 GT" -0x10de 0x0047 NV_40 "GeForce 6800 GS" -0x10de 0x0048 NV_40 "GeForce 6800 XT" -0x10de 0x0049 NV_40 "NV40GL" -0x10de 0x004d NV_40 "Quadro FX 4000" -0x10de 0x004e NV_40 "Quadro FX 4000" -0x10de 0x0090 NV_40 "GeForce 7800 GTX" -0x10de 0x0091 NV_40 "GeForce 7800 GTX" -0x10de 0x0092 NV_40 "GeForce 7800 GT" -0x10de 0x0093 NV_40 "GeForce 7800 GS" -0x10de 0x0095 NV_40 "GeForce 7800 SLI" -0x10de 0x0098 NV_40 "GeForce Go 7800" -0x10de 0x0099 NV_40 "GeForce Go 7800 GTX" -0x10de 0x009d NV_40 "Quadro FX4500" -0x10de 0x00a0 NV_04 "Aladdin TNT2" -0x10de 0x00c0 NV_40 "GeForce 6800 GS" -0x10de 0x00c1 NV_40 "GeForce 6800" -0x10de 0x00c2 NV_40 "GeForce 6800 LE" -0x10de 0x00c3 NV_40 "Geforce 6800 XT" -0x10de 0x00c8 NV_40 "GeForce Go 6800" -0x10de 0x00c9 NV_40 "GeForce Go 6800 Ultra" -0x10de 0x00cc NV_40 "Quadro FX Go1400" -0x10de 0x00cd NV_40 "Quadro FX 3450/4000 SDI" -0x10de 0x00ce NV_40 "Quadro FX 1400" -0x10de 0x00f0 NV_40 "GeForce 6800/GeForce 6800 Ultra" -0x10de 0x00f1 NV_40 "GeForce 6600/GeForce 6600 GT" -0x10de 0x00f2 NV_40 "GeForce 6600/GeForce 6600 GT" -0x10de 0x00f3 NV_40 "GeForce 6200" -0x10de 0x00f4 NV_40 "GeForce 6600 LE" -0x10de 0x00f5 NV_40 "GeForce 7800 GS" -0x10de 0x00f6 NV_40 "GeForce 6600 GS" -0x10de 0x00f8 NV_40 "Quadro FX 3400/4400" -0x10de 0x00f9 NV_40 "GeForce 6800 Ultra/GeForce 6800 GT" -0x10de 0x00fa NV_30 "GeForce PCX 5750" -0x10de 0x00fb NV_30 "GeForce PCX 5900" -0x10de 0x00fc NV_30 "Quadro FX 330/GeForce PCX 5300" -0x10de 0x00fd NV_30 "Quadro FX 330/Quadro NVS280" -0x10de 0x00fe NV_30 "Quadro FX 1300" -0x10de 0x00ff NV_17 "GeForce PCX 4300" -0x10de 0x0100 NV_10 "GeForce 256 SDR" -0x10de 0x0101 NV_10 "GeForce 256 DDR" -0x10de 0x0103 NV_10 "Quadro" -0x10de 0x0110 NV_11 "GeForce2 MX/MX 400" -0x10de 0x0111 NV_11 "GeForce2 MX 100 DDR/200 DDR" -0x10de 0x0112 NV_11 "GeForce2 Go" -0x10de 0x0113 NV_11 "Quadro2 MXR/EX/Go" -0x10de 0x0140 NV_40 "GeForce 6600 GT" -0x10de 0x0141 NV_40 "GeForce 6600" -0x10de 0x0142 NV_40 "GeForce 6600 LE" -0x10de 0x0143 NV_40 "GeForce 6600 VE" -0x10de 0x0144 NV_40 "GeForce Go 6600" -0x10de 0x0145 NV_40 "GeForce 6610 XL" -0x10de 0x0146 NV_40 "Geforce Go 6600TE/6200TE" -0x10de 0x0147 NV_40 "GeForce 6700 XL" -0x10de 0x0148 NV_40 "GeForce Go 6600" -0x10de 0x0149 NV_40 "GeForce Go 6600 GT" -0x10de 0x014a NV_40 "Quadro NVS 440" -0x10de 0x014c NV_40 "Quadro FX 550" -0x10de 0x014d NV_17 "Quadro FX 550" -0x10de 0x014e NV_40 "Quadro FX 540" -0x10de 0x014f NV_40 "GeForce 6200" -0x10de 0x0150 NV_15 "GeForce2 GTS/Pro" -0x10de 0x0151 NV_15 "GeForce2 Ti" -0x10de 0x0152 NV_15 "GeForce2 Ultra, Bladerunner" -0x10de 0x0153 NV_15 "Quadro2 Pro" -0x10de 0x0160 NV_44 "GeForce 6500" -0x10de 0x0161 NV_44 "GeForce 6200 TurboCache(TM)" -0x10de 0x0162 NV_44 "GeForce 6200 SE TurboCache (TM)" -0x10de 0x0163 NV_44 "GeForce 6200 LE" -0x10de 0x0164 NV_44 "GeForce Go 6200" -0x10de 0x0165 NV_44 "Quadro NVS 285" -0x10de 0x0166 NV_44 "GeForce Go 6400" -0x10de 0x0167 NV_44 "GeForce Go 6200 TurboCache" -0x10de 0x0168 NV_44 "GeForce Go 6200 TurboCache" -0x10de 0x0169 NV_44 "GeForce 6250" -0x10de 0x0170 NV_17 "GeForce4 MX 460" -0x10de 0x0171 NV_17 "GeForce4 MX 440" -0x10de 0x0172 NV_17 "GeForce4 MX 420" -0x10de 0x0173 NV_17 "GeForce4 MX 440-SE" -0x10de 0x0174 NV_17 "GeForce4 440 Go" -0x10de 0x0175 NV_17 "GeForce4 420 Go" -0x10de 0x0176 NV_17 "GeForce4 420 Go 32M" -0x10de 0x0177 NV_17 "GeForce4 460 Go" -0x10de 0x0178 NV_17 "Quadro4 550 XGL" -0x10de 0x0179 NV_17 "GeForce4 420 Go 32M" -0x10de 0x017a NV_17 "Quadro4 200/400 NVS" -0x10de 0x017b NV_17 "Quadro4 550 XGL" -0x10de 0x017c NV_17 "Quadro4 500 GoGL" -0x10de 0x017d NV_17 "GeForce4 410 Go 16M" -0x10de 0x0181 NV_17 "GeForce4 MX 440 AGP 8x" -0x10de 0x0182 NV_17 "GeForce4 MX 440SE AGP 8x" -0x10de 0x0183 NV_17 "GeForce4 MX 420 AGP 8x" -0x10de 0x0185 NV_17 "GeForce4 MX 4000 AGP 8x" -0x10de 0x0186 NV_17 "GeForce4 448 Go" -0x10de 0x0187 NV_17 "GeForce4 488 Go" -0x10de 0x0188 NV_17 "Quadro4 580 XGL" -0x10de 0x018a NV_17 "Quadro4 NVS AGP 8x" -0x10de 0x018b NV_17 "Quadro4 380 XGL" -0x10de 0x018c NV_17 "Quadro NVS 50 PCI" -0x10de 0x018d NV_17 "GeForce4 448 Go" -0x10de 0x0191 NV_50 "GeForce 8800 GTX" -0x10de 0x0193 NV_50 "GeForce 8800 GTS" -0x10de 0x0194 NV_50 "GeForce 8800 Ultra" -0x10de 0x019d NV_50 "Quadro FX 5600" -0x10de 0x019e NV_50 "Quadro FX 4600" -0x10de 0x01a0 NV_11|NV_NFORCE "GeForce2 MX Integrated Graphics" -0x10de 0x01d1 NV_44 "GeForce 7300 LE" -0x10de 0x01d3 NV_44 "Geforce 7300 SE" -0x10de 0x01d6 NV_44 "GeForce Go 7200" -0x10de 0x01d7 NV_44 "Quadro NVS 110M / GeForce Go 7300" -0x10de 0x01d8 NV_44 "GeForce Go 7400" -0x10de 0x01d9 NV_44 "GeForce Go 7400 GS" -0x10de 0x01da NV_44 "Quadro NVS 110M" -0x10de 0x01db NV_44 "Quadro NVS 120M" -0x10de 0x01dc NV_44 "Quadro FX 350M" -0x10de 0x01dd NV_44 "GeForce 7500 LE" -0x10de 0x01de NV_44 "Quadro FX 350" -0x10de 0x01df NV_44 "GeForce 7300 GS" -0x10de 0x01f0 NV_17|NV_NFORCE2 "GeForce4 MX - nForce GPU" -0x10de 0x0200 NV_20 "GeForce3" -0x10de 0x0201 NV_20 "GeForce3 Ti 200" -0x10de 0x0202 NV_20 "GeForce3 Ti 500" -0x10de 0x0203 NV_20 "Quadro DCC" -0x10de 0x0211 NV_40 "GeForce 6800" -0x10de 0x0212 NV_40 "GeForce 6800 LE" -0x10de 0x0215 NV_40 "GeForce 6800 GT" -0x10de 0x0218 NV_40 "GeForce 6800 XT" -0x10de 0x0221 NV_44 "GeForce 6200" -0x10de 0x0222 NV_44 "GeForce 6200 A-LE" -0x10de 0x0240 NV_44 "GeForce 6150" -0x10de 0x0241 NV_44 "GeForce 6150 LE" -0x10de 0x0242 NV_44 "GeForce 6100" -0x10de 0x0244 NV_44 "GeForce Go 6150" -0x10de 0x0247 NV_44 "GeForce Go 6100" -0x10de 0x0250 NV_25 "GeForce4 Ti 4600" -0x10de 0x0251 NV_25 "GeForce4 Ti 4400" -0x10de 0x0252 NV_25 "GeForce4 Ti" -0x10de 0x0253 NV_25 "GeForce4 Ti 4200" -0x10de 0x0258 NV_25 "Quadro4 900 XGL" -0x10de 0x0259 NV_25 "Quadro4 750 XGL" -0x10de 0x025b NV_25 "Quadro4 700 XGL" -0x10de 0x0280 NV_25 "GeForce4 Ti 4800" -0x10de 0x0281 NV_25 "GeForce4 Ti 4200 AGP 8x" -0x10de 0x0282 NV_25 "GeForce4 Ti 4800 SE" -0x10de 0x0286 NV_25 "GeForce4 Ti 4200 Go AGP 8x" -0x10de 0x0288 NV_25 "Quadro4 980 XGL" -0x10de 0x0289 NV_25 "Quadro4 780 XGL" -0x10de 0x028c NV_25 "Quadro4 700 GoGL" -0x10de 0x0290 NV_40 "GeForce 7900 GTX" -0x10de 0x0291 NV_40 "GeForce 7900 GT" -0x10de 0x0292 NV_40 "GeForce 7900 GS" -0x10de 0x0298 NV_40 "GeForce Go 7900 GS" -0x10de 0x0299 NV_40 "GeForce Go 7900 GTX" -0x10de 0x029a NV_40 "Quadro FX 2500M" -0x10de 0x029b NV_40 "Quadro FX 1500M" -0x10de 0x029c NV_40 "Quadro FX 5500" -0x10de 0x029d NV_40 "Quadro FX 3500" -0x10de 0x029e NV_40 "Quadro FX 1500" -0x10de 0x029f NV_40 "Quadro FX 4500 X2" -0x10de 0x02a0 NV_20 "XGPU" -0x10de 0x02e1 NV_40 "GeForce 7600 GS" -0x10de 0x0300 NV_30 "GeForce FX" -0x10de 0x0301 NV_30 "GeForce FX 5800 Ultra" -0x10de 0x0302 NV_30 "GeForce FX 5800" -0x10de 0x0308 NV_30 "Quadro FX 2000" -0x10de 0x0309 NV_30 "Quadro FX 1000" -0x10de 0x0311 NV_30 "GeForce FX 5600 Ultra" -0x10de 0x0312 NV_30 "GeForce FX 5600" -0x10de 0x0313 NV_30 "NV31" -0x10de 0x0314 NV_30 "GeForce FX 5600XT" -0x10de 0x0316 NV_30 "NV31M" -0x10de 0x0317 NV_30 "NV31M Pro" -0x10de 0x031a NV_30 "GeForce FX Go5600" -0x10de 0x031b NV_30 "GeForce FX Go5650" -0x10de 0x031d NV_30 "NV31GLM" -0x10de 0x031e NV_30 "NV31GLM Pro" -0x10de 0x031f NV_30 "NV31GLM Pro" -0x10de 0x0320 NV_34 "GeForce FX 5200" -0x10de 0x0321 NV_34 "GeForce FX 5200 Ultra" -0x10de 0x0322 NV_34 "GeForce FX 5200" -0x10de 0x0323 NV_34 "GeForce FX 5200LE" -0x10de 0x0324 NV_34 "GeForce FX Go5200" -0x10de 0x0325 NV_34 "GeForce FX Go5250" -0x10de 0x0326 NV_34 "GeForce FX 5500" -0x10de 0x0327 NV_34 "GeForce FX 5100" -0x10de 0x0328 NV_34 "GeForce FX Go5200 32M/64M" -0x10de 0x0329 NV_34 "GeForce FX Go5200" -0x10de 0x032a NV_34 "Quadro NVS 280 PCI" -0x10de 0x032b NV_34 "Quadro FX 500/600 PCI" -0x10de 0x032c NV_34 "GeForce FX Go 5300" -0x10de 0x032d NV_34 "GeForce FX Go5100" -0x10de 0x032f NV_34 "NV34GL" -0x10de 0x0330 NV_30 "GeForce FX 5900 Ultra" -0x10de 0x0331 NV_30 "GeForce FX 5900" -0x10de 0x0332 NV_30 "GeForce FX 5900XT" -0x10de 0x0333 NV_30 "GeForce FX 5950 Ultra" -0x10de 0x0334 NV_30 "GeForce FX 5900ZT" -0x10de 0x0338 NV_30 "Quadro FX 3000" -0x10de 0x033f NV_30 "Quadro FX 700" -0x10de 0x0341 NV_30 "GeForce FX 5700 Ultra" -0x10de 0x0342 NV_30 "GeForce FX 5700" -0x10de 0x0343 NV_30 "GeForce FX 5700LE" -0x10de 0x0344 NV_30 "GeForce FX 5700VE" -0x10de 0x0345 NV_30 "NV36.5" -0x10de 0x0347 NV_30 "GeForce FX Go5700" -0x10de 0x0348 NV_30 "GeForce FX Go5700" -0x10de 0x0349 NV_30 "NV36M Pro" -0x10de 0x034b NV_30 "NV36MAP" -0x10de 0x034c NV_30 "Quadro FX Go1000" -0x10de 0x034e NV_30 "Quadro FX 1100" -0x10de 0x034f NV_30 "NV36GL" -0x10de 0x0391 NV_40 "GeForce 7600 GT" -0x10de 0x0392 NV_40 "GeForce 7600 GS" -0x10de 0x0393 NV_40 "GeForce 7300 GT" -0x10de 0x0394 NV_40 "GeForce 7600 LE" -0x10de 0x0395 NV_40 "GeForce 7300 GT" -0x10de 0x0397 NV_40 "GeForce Go 7700" -0x10de 0x0398 NV_40 "GeForce Go 7600" -0x10de 0x0399 NV_40 "GeForce Go 7600 GT" -0x10de 0x039a NV_40 "Quadro NVS 300M" -0x10de 0x039b NV_40 "GeForce Go 7900 SE" -0x10de 0x039c NV_40 "Quadro FX 550M" -0x10de 0x039e NV_40 "Quadro FX 560" -0x10de 0x03d0 NV_44 "GeForce 6100 nForce 430" -0x10de 0x03d1 NV_44 "GeForce 6100 nForce 405" -0x10de 0x03d2 NV_44 "GeForce 6100 nForce 400" -0x10de 0x03d5 NV_44 "GeForce 6100 nForce 420" -0x10de 0x0400 NV_50 "GeForce 8600 GTS" -0x10de 0x0402 NV_50 "GeForce 8600 GT" -0x10de 0x0421 NV_50 "GeForce 8500 GT" -0x10de 0x0422 NV_50 "GeForce 8400 GS" -0x10de 0x0423 NV_50 "GeForce 8300 GS" -0x10de 0x0429 NV_50 "Quadro NVS 140" -0x12d2 0x0020 NV_04 "TNT" -0x12d2 0x0028 NV_04 "TNT2" -0x12d2 0x0029 NV_04 "UTNT2" -0x12d2 0x002c NV_04 "VTNT2" -0x12d2 0x00a0 NV_04 "ITNT2" -  [xgi]  0x18ca 0x2200 0 "XP5"  0x18ca 0x0047 0 "XP10 / XG47" diff --git a/shared-core/i915_dma.c b/shared-core/i915_dma.c index a653a06b..23994821 100644 --- a/shared-core/i915_dma.c +++ b/shared-core/i915_dma.c @@ -116,6 +116,10 @@ static int i915_initialize(struct drm_device * dev,  		return -EINVAL;  	} +#ifdef I915_HAVE_BUFFER +	dev_priv->max_validate_buffers = I915_MAX_VALIDATE_BUFFERS; +#endif +  	dev_priv->sarea_priv = (drm_i915_sarea_t *)  	    ((u8 *) dev_priv->sarea->handle + init->sarea_priv_offset); @@ -694,6 +698,343 @@ static int i915_cmdbuffer(struct drm_device *dev, void *data,  	return 0;  } +#ifdef I915_HAVE_BUFFER +struct i915_relocatee_info { +	struct drm_buffer_object *buf; +	unsigned long offset; +	u32 *data_page; +	unsigned page_offset; +	struct drm_bo_kmap_obj kmap; +	int is_iomem; +}; + +static void i915_dereference_buffers_locked(struct drm_buffer_object **buffers, +					    unsigned num_buffers) +{ +	while (num_buffers--) +		drm_bo_usage_deref_locked(&buffers[num_buffers]); +} + +int i915_apply_reloc(struct drm_file *file_priv, int num_buffers, +		     struct drm_buffer_object **buffers, +		     struct i915_relocatee_info *relocatee, +		     uint32_t *reloc) +{ +	unsigned index; +	unsigned long new_cmd_offset; +	u32 val; +	int ret; + +	if (reloc[2] >= num_buffers) { +		DRM_ERROR("Illegal relocation buffer %08X\n", reloc[2]); +		return -EINVAL; +	} + +	new_cmd_offset = reloc[0]; +	if (!relocatee->data_page || +	    !drm_bo_same_page(relocatee->offset, new_cmd_offset)) { +		drm_bo_kunmap(&relocatee->kmap); +		relocatee->offset = new_cmd_offset; +		ret = drm_bo_kmap(relocatee->buf, new_cmd_offset >> PAGE_SHIFT, +				  1, &relocatee->kmap); +		if (ret) { +			DRM_ERROR("Could not map command buffer to apply relocs\n %08lx", new_cmd_offset); +			return ret; +		} + +		relocatee->data_page = drm_bmo_virtual(&relocatee->kmap, +						       &relocatee->is_iomem); +		relocatee->page_offset = (relocatee->offset & PAGE_MASK); +	} + +	val = buffers[reloc[2]]->offset; +	index = (reloc[0] - relocatee->page_offset) >> 2; + +	/* add in validate */ +	val = val + reloc[1]; + +	relocatee->data_page[index] = val; +	return 0; +} + +int i915_process_relocs(struct drm_file *file_priv, +			uint32_t buf_handle, +			uint32_t *reloc_buf_handle, +			struct i915_relocatee_info *relocatee, +			struct drm_buffer_object **buffers, +			uint32_t num_buffers) +{ +	struct drm_device *dev = file_priv->head->dev; +	struct drm_buffer_object *reloc_list_object; +	uint32_t cur_handle = *reloc_buf_handle; +	uint32_t *reloc_page; +	int ret, reloc_is_iomem, reloc_stride; +	uint32_t num_relocs, reloc_offset, reloc_end, reloc_page_offset, next_offset, cur_offset; +	struct drm_bo_kmap_obj reloc_kmap; + +	memset(&reloc_kmap, 0, sizeof(reloc_kmap)); + +	reloc_list_object = drm_lookup_buffer_object(file_priv, cur_handle, 1); +	if (!reloc_list_object) +		return -EINVAL; + +	ret = drm_bo_kmap(reloc_list_object, 0, 1, &reloc_kmap); +	if (ret) { +		DRM_ERROR("Could not map relocation buffer.\n"); +		goto out; +	} + +	reloc_page = drm_bmo_virtual(&reloc_kmap, &reloc_is_iomem); +	num_relocs = reloc_page[0] & 0xffff; + +	if ((reloc_page[0] >> 16) & 0xffff) { +		DRM_ERROR("Unsupported relocation type requested\n"); +		goto out; +	} + +	/* get next relocate buffer handle */ +	*reloc_buf_handle = reloc_page[1]; +	reloc_stride = I915_RELOC0_STRIDE * sizeof(uint32_t); /* may be different for other types of relocs */ + +	DRM_DEBUG("num relocs is %d, next is %08X\n", num_relocs, reloc_page[1]); + +	reloc_page_offset = 0; +	reloc_offset = I915_RELOC_HEADER * sizeof(uint32_t); +	reloc_end = reloc_offset + (num_relocs * reloc_stride); + +	do { +		next_offset = drm_bo_offset_end(reloc_offset, reloc_end); + +		do { +			cur_offset = ((reloc_offset + reloc_page_offset) & ~PAGE_MASK) / sizeof(uint32_t); +			ret = i915_apply_reloc(file_priv, num_buffers, +					 buffers, relocatee, &reloc_page[cur_offset]); +			if (ret) +				goto out; + +			reloc_offset += reloc_stride; +		} while (reloc_offset < next_offset); + +		drm_bo_kunmap(&reloc_kmap); + +		reloc_offset = next_offset; +		if (reloc_offset != reloc_end) { +			ret = drm_bo_kmap(reloc_list_object, reloc_offset >> PAGE_SHIFT, 1, &reloc_kmap); +			if (ret) { +				DRM_ERROR("Could not map relocation buffer.\n"); +				goto out; +			} + +			reloc_page = drm_bmo_virtual(&reloc_kmap, &reloc_is_iomem); +			reloc_page_offset = reloc_offset & ~PAGE_MASK; +		} + +	} while (reloc_offset != reloc_end); +out: +	drm_bo_kunmap(&reloc_kmap); + +	mutex_lock(&dev->struct_mutex); +	drm_bo_usage_deref_locked(&reloc_list_object); +	mutex_unlock(&dev->struct_mutex); + +	return ret; +} + +/* + * Validate, add fence and relocate a block of bos from a userspace list + */ +int i915_validate_buffer_list(struct drm_file *file_priv, +			      unsigned int fence_class, uint64_t data, +			      struct drm_buffer_object **buffers, +			      uint32_t *num_buffers) +{ +	struct drm_i915_op_arg arg; +	struct drm_bo_op_req *req = &arg.d.req; +	struct drm_bo_arg_rep rep; +	unsigned long next = 0; +	int ret = 0; +	unsigned buf_count = 0; +	struct drm_device *dev = file_priv->head->dev; +	uint32_t buf_reloc_handle, buf_handle; +	struct i915_relocatee_info relocatee; + +	do { +		if (buf_count >= *num_buffers) { +			DRM_ERROR("Buffer count exceeded %d\n.", *num_buffers); +			ret = -EINVAL; +			goto out_err; +		} + +		buffers[buf_count] = NULL; + +		if (copy_from_user(&arg, (void __user *)(unsigned)data, sizeof(arg))) { +			ret = -EFAULT; +			goto out_err; +		} + +		if (arg.handled) { +			data = arg.next; +			buffers[buf_count] = drm_lookup_buffer_object(file_priv, req->arg_handle, 1); +			buf_count++; +			continue; +		} + +		rep.ret = 0; +		if (req->op != drm_bo_validate) { +			DRM_ERROR +			    ("Buffer object operation wasn't \"validate\".\n"); +			rep.ret = -EINVAL; +			goto out_err; +		} + +		buf_handle = req->bo_req.handle; +		buf_reloc_handle = arg.reloc_handle; + +		rep.ret = drm_bo_handle_validate(file_priv, req->bo_req.handle, +						 req->bo_req.fence_class, +						 req->bo_req.flags, +						 req->bo_req.mask, +						 req->bo_req.hint, +						 &rep.bo_info, +						 &buffers[buf_count]); + +		if (rep.ret) { +			DRM_ERROR("error on handle validate %d\n", rep.ret); +			goto out_err; +		} + + +		next = arg.next; +		arg.handled = 1; +		arg.d.rep = rep; + +		if (copy_to_user((void __user *)(unsigned)data, &arg, sizeof(arg))) +			return -EFAULT; + +		data = next; +		buf_count++; + +		if (buf_reloc_handle) { +			memset(&relocatee, 0, sizeof(relocatee)); + +			relocatee.buf = drm_lookup_buffer_object(file_priv, buf_handle, 1); +			if (!relocatee.buf) { +				DRM_DEBUG("relocatee buffer invalid %08x\n", buf_handle); +				ret = -EINVAL; +				goto out_err; +			} + +			while (buf_reloc_handle) { +				ret = i915_process_relocs(file_priv, buf_handle, &buf_reloc_handle, &relocatee, buffers, buf_count); +				if (ret) { +					DRM_ERROR("process relocs failed\n"); +					break; +				} +			} + +			drm_bo_kunmap(&relocatee.kmap); +			mutex_lock(&dev->struct_mutex); +			drm_bo_usage_deref_locked(&relocatee.buf); +			mutex_unlock(&dev->struct_mutex); + +			if (ret) +				goto out_err; + +		} +	} while (next != 0); +	*num_buffers = buf_count; +	return 0; +out_err: +	mutex_lock(&dev->struct_mutex); +	i915_dereference_buffers_locked(buffers, buf_count); +	mutex_unlock(&dev->struct_mutex); +	*num_buffers = 0; +	return (ret) ? ret : rep.ret; +} + +static int i915_execbuffer(struct drm_device *dev, void *data, +			   struct drm_file *file_priv) +{ +	struct drm_i915_private *dev_priv = (struct drm_i915_private *) dev->dev_private; +	drm_i915_sarea_t *sarea_priv = (drm_i915_sarea_t *) +		dev_priv->sarea_priv; +	struct drm_i915_execbuffer *exec_buf = data; +	struct drm_i915_batchbuffer *batch = &exec_buf->batch; +	struct drm_fence_arg *fence_arg = &exec_buf->fence_arg; +	int num_buffers; +	int ret; +	struct drm_buffer_object **buffers; +	struct drm_fence_object *fence; + +	if (!dev_priv->allow_batchbuffer) { +		DRM_ERROR("Batchbuffer ioctl disabled\n"); +		return -EINVAL; +	} + + +	LOCK_TEST_WITH_RETURN(dev, file_priv); + +	if (batch->num_cliprects && DRM_VERIFYAREA_READ(batch->cliprects, +							batch->num_cliprects * +							sizeof(struct drm_clip_rect))) +		return -EFAULT; + +	if (exec_buf->num_buffers > dev_priv->max_validate_buffers) +		return -EINVAL; + +	num_buffers = exec_buf->num_buffers; + +	buffers = drm_calloc(num_buffers, sizeof(struct drm_buffer_object *), DRM_MEM_DRIVER); +	if (!buffers) +		return -ENOMEM; + +	/* validate buffer list + fixup relocations */ +	ret = i915_validate_buffer_list(file_priv, 0, exec_buf->ops_list, +					buffers, &num_buffers); +	if (ret) +		goto out_free; + +	/* submit buffer */ +	batch->start = buffers[num_buffers-1]->offset; + +	DRM_DEBUG("i915 exec batchbuffer, start %x used %d cliprects %d\n", +		  batch->start, batch->used, batch->num_cliprects); + +	ret = i915_dispatch_batchbuffer(dev, batch); +	if (ret) +		goto out_err0; + +	sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv); + +	/* fence */ +	ret = drm_fence_buffer_objects(dev, NULL, 0, NULL, &fence); +	if (ret) +		goto out_err0; + +	if (!(fence_arg->flags & DRM_FENCE_FLAG_NO_USER)) { +		ret = drm_fence_add_user_object(file_priv, fence, fence_arg->flags & DRM_FENCE_FLAG_SHAREABLE); +		if (!ret) { +			fence_arg->handle = fence->base.hash.key; +			fence_arg->fence_class = fence->fence_class; +			fence_arg->type = fence->type; +			fence_arg->signaled = fence->signaled; +		} +	} +	drm_fence_usage_deref_unlocked(&fence); +out_err0: + +	/* handle errors */ +	mutex_lock(&dev->struct_mutex); +	i915_dereference_buffers_locked(buffers, num_buffers); +	mutex_unlock(&dev->struct_mutex); + +out_free: +	drm_free(buffers, (exec_buf->num_buffers * sizeof(struct drm_buffer_object *)), DRM_MEM_DRIVER); + +	return ret; +} +#endif +  int i915_do_cleanup_pageflip(struct drm_device * dev)  {  	struct drm_i915_private *dev_priv = dev->dev_private; @@ -724,13 +1065,14 @@ static int i915_flip_bufs(struct drm_device *dev, void *data, struct drm_file *f  	LOCK_TEST_WITH_RETURN(dev, file_priv); -	if (param->planes & ~0x3) { +	/* This is really planes */ +	if (param->pipes & ~0x3) {  		DRM_ERROR("Invalid planes 0x%x, only <= 0x3 is valid\n", -			  param->planes); +			  param->pipes);  		return -EINVAL;  	} -	i915_dispatch_flip(dev, param->planes, 0); +	i915_dispatch_flip(dev, param->pipes, 0);  	return 0;  } @@ -915,6 +1257,9 @@ struct drm_ioctl_desc i915_ioctls[] = {  	DRM_IOCTL_DEF(DRM_I915_VBLANK_SWAP, i915_vblank_swap, DRM_AUTH),  	DRM_IOCTL_DEF(DRM_I915_MMIO, i915_mmio, DRM_AUTH),  	DRM_IOCTL_DEF(DRM_I915_HWS_ADDR, i915_set_status_page, DRM_AUTH), +#ifdef I915_HAVE_BUFFER +	DRM_IOCTL_DEF(DRM_I915_EXECBUFFER, i915_execbuffer, DRM_AUTH), +#endif  };  int i915_max_ioctl = DRM_ARRAY_SIZE(i915_ioctls); diff --git a/shared-core/i915_drm.h b/shared-core/i915_drm.h index 8022bc91..e517fac0 100644 --- a/shared-core/i915_drm.h +++ b/shared-core/i915_drm.h @@ -160,6 +160,7 @@ typedef struct drm_i915_sarea {  #define DRM_I915_VBLANK_SWAP	0x0f  #define DRM_I915_MMIO		0x10  #define DRM_I915_HWS_ADDR	0x11 +#define DRM_I915_EXECBUFFER	0x12  #define DRM_IOCTL_I915_INIT		DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)  #define DRM_IOCTL_I915_FLUSH		DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH) @@ -177,12 +178,18 @@ typedef struct drm_i915_sarea {  #define DRM_IOCTL_I915_SET_VBLANK_PIPE	DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SET_VBLANK_PIPE, drm_i915_vblank_pipe_t)  #define DRM_IOCTL_I915_GET_VBLANK_PIPE	DRM_IOR( DRM_COMMAND_BASE + DRM_I915_GET_VBLANK_PIPE, drm_i915_vblank_pipe_t)  #define DRM_IOCTL_I915_VBLANK_SWAP	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_VBLANK_SWAP, drm_i915_vblank_swap_t) - +#define DRM_IOCTL_I915_EXECBUFFER	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_EXECBUFFER, struct drm_i915_execbuffer)  /* Asynchronous page flipping:   */  typedef struct drm_i915_flip { -	int planes; +	/* +	 * This is really talking about planes, and we could rename it +	 * except for the fact that some of the duplicated i915_drm.h files +	 * out there check for HAVE_I915_FLIP and so might pick up this +	 * version. +	 */ +	int pipes;  } drm_i915_flip_t;  /* Allow drivers to submit batchbuffers directly to hardware, relying @@ -319,4 +326,40 @@ typedef struct drm_i915_hws_addr {  	uint64_t addr;  } drm_i915_hws_addr_t; +/* + * Relocation header is 4 uint32_ts + * 0 - (16-bit relocation type << 16)| 16 bit reloc count + * 1 - buffer handle for another list of relocs + * 2-3 - spare. + */ +#define I915_RELOC_HEADER 4 + +/* + * type 0 relocation has 4-uint32_t stride + * 0 - offset into buffer + * 1 - delta to add in + * 2 - index into buffer list + * 3 - reserved (for optimisations later). + */ +#define I915_RELOC_TYPE_0 0 +#define I915_RELOC0_STRIDE 4 + +struct drm_i915_op_arg { +	uint64_t next; +	uint32_t reloc_handle; +	int handled; +	union { +		struct drm_bo_op_req req; +		struct drm_bo_arg_rep rep; +	} d; + +}; + +struct drm_i915_execbuffer { +	uint64_t ops_list; +	uint32_t num_buffers; +	struct drm_i915_batchbuffer batch; +	struct drm_fence_arg fence_arg; +}; +  #endif				/* _I915_DRM_H_ */ diff --git a/shared-core/i915_drv.h b/shared-core/i915_drv.h index 2d2d3a20..12ac8b6e 100644 --- a/shared-core/i915_drv.h +++ b/shared-core/i915_drv.h @@ -56,15 +56,20 @@   * 1.8: New ioctl for ARB_Occlusion_Query   * 1.9: Usable page flipping and triple buffering   * 1.10: Plane/pipe disentangling + * 1.11: TTM superioctl   */  #define DRIVER_MAJOR		1  #if defined(I915_HAVE_FENCE) && defined(I915_HAVE_BUFFER) -#define DRIVER_MINOR		10 +#define DRIVER_MINOR		11  #else  #define DRIVER_MINOR		6  #endif  #define DRIVER_PATCHLEVEL	0 +#ifdef I915_HAVE_BUFFER +#define I915_MAX_VALIDATE_BUFFERS 4096 +#endif +  struct drm_i915_ring_buffer {  	int tail_mask;  	unsigned long Start; @@ -137,7 +142,9 @@ struct drm_i915_private {  #endif  #ifdef I915_HAVE_BUFFER  	void *agp_iomap; +	unsigned int max_validate_buffers;  #endif +  	DRM_SPINTYPE swaps_lock;  	struct drm_i915_vbl_swap vbl_swaps;  	unsigned int swaps_pending; @@ -284,7 +291,8 @@ extern int i915_fence_has_irq(struct drm_device *dev, uint32_t class, uint32_t f  #ifdef I915_HAVE_BUFFER  /* i915_buffer.c */  extern struct drm_ttm_backend *i915_create_ttm_backend_entry(struct drm_device *dev); -extern int i915_fence_types(struct drm_buffer_object *bo, uint32_t *type); +extern int i915_fence_types(struct drm_buffer_object *bo, uint32_t *fclass, +	                    uint32_t *type);  extern int i915_invalidate_caches(struct drm_device *dev, uint64_t buffer_flags);  extern int i915_init_mem_type(struct drm_device *dev, uint32_t type,  			       struct drm_mem_type_manager *man); diff --git a/shared-core/i915_irq.c b/shared-core/i915_irq.c index b280aa9d..11cb20ab 100644 --- a/shared-core/i915_irq.c +++ b/shared-core/i915_irq.c @@ -704,7 +704,7 @@ int i915_vblank_swap(struct drm_device *dev, void *data,  		return -EBUSY;  	} -	vbl_swap = drm_calloc(1, sizeof(vbl_swap), DRM_MEM_DRIVER); +	vbl_swap = drm_calloc(1, sizeof(*vbl_swap), DRM_MEM_DRIVER);  	if (!vbl_swap) {  		DRM_ERROR("Failed to allocate memory to queue swap\n"); diff --git a/shared-core/nouveau_drm.h b/shared-core/nouveau_drm.h index c4f1e9a4..988d467a 100644 --- a/shared-core/nouveau_drm.h +++ b/shared-core/nouveau_drm.h @@ -123,12 +123,9 @@ enum nouveau_card_type {  	NV_05      =5,  	NV_10      =10,  	NV_11      =11, -	NV_15      =11,  	NV_17      =17,  	NV_20      =20, -	NV_25      =20,  	NV_30      =30, -	NV_34      =30,  	NV_40      =40,  	NV_44      =44,  	NV_50      =50, diff --git a/shared-core/nouveau_drv.h b/shared-core/nouveau_drv.h index e96c8fad..e5cef075 100644 --- a/shared-core/nouveau_drv.h +++ b/shared-core/nouveau_drv.h @@ -120,8 +120,9 @@ struct nouveau_channel  	struct nouveau_gpuobj_ref *ramfc;  	/* PGRAPH context */ +	/* XXX may be merge 2 pointers as private data ??? */  	struct nouveau_gpuobj_ref *ramin_grctx; -	uint32_t pgraph_ctx [340]; /* XXX dynamic alloc ? */ +	void *pgraph_ctx;  	/* NV50 VM */  	struct nouveau_gpuobj     *vm_pd; @@ -490,21 +491,13 @@ extern int  nv10_graph_load_context(struct nouveau_channel *);  extern int  nv10_graph_save_context(struct nouveau_channel *);  /* nv20_graph.c */ -extern void nouveau_nv20_context_switch(struct drm_device *); -extern int  nv20_graph_init(struct drm_device *); -extern void nv20_graph_takedown(struct drm_device *);  extern int  nv20_graph_create_context(struct nouveau_channel *);  extern void nv20_graph_destroy_context(struct nouveau_channel *);  extern int  nv20_graph_load_context(struct nouveau_channel *);  extern int  nv20_graph_save_context(struct nouveau_channel *); - -/* nv30_graph.c */ +extern int  nv20_graph_init(struct drm_device *); +extern void nv20_graph_takedown(struct drm_device *);  extern int  nv30_graph_init(struct drm_device *); -extern void nv30_graph_takedown(struct drm_device *); -extern int  nv30_graph_create_context(struct nouveau_channel *); -extern void nv30_graph_destroy_context(struct nouveau_channel *); -extern int  nv30_graph_load_context(struct nouveau_channel *); -extern int  nv30_graph_save_context(struct nouveau_channel *);  /* nv40_graph.c */  extern int  nv40_graph_init(struct drm_device *); diff --git a/shared-core/nouveau_fifo.c b/shared-core/nouveau_fifo.c index 437c84f2..f82d130b 100644 --- a/shared-core/nouveau_fifo.c +++ b/shared-core/nouveau_fifo.c @@ -403,7 +403,19 @@ void nouveau_fifo_free(struct nouveau_channel *chan)  	/* disable the fifo caches */  	NV_WRITE(NV03_PFIFO_CACHES, 0x00000000); +	NV_WRITE(NV04_PFIFO_CACHE1_DMA_PUSH, NV_READ(NV04_PFIFO_CACHE1_DMA_PUSH)&(~0x1)); +	NV_WRITE(NV03_PFIFO_CACHE1_PUSH0, 0x00000000); +	NV_WRITE(NV04_PFIFO_CACHE1_PULL0, 0x00000000); +	/* stop the fifo, otherwise it could be running and +	 * it will crash when removing gpu objects */ +	if (dev_priv->card_type < NV_50) { +		NV_WRITE(NV03_FIFO_REGS_DMAPUT(chan->id), chan->pushbuf_base); +		NV_WRITE(NV03_FIFO_REGS_DMAGET(chan->id), chan->pushbuf_base); +	} else { +		NV_WRITE(NV50_FIFO_REGS_DMAPUT(chan->id), chan->pushbuf_base); +		NV_WRITE(NV50_FIFO_REGS_DMAGET(chan->id), chan->pushbuf_base); +	}  	// FIXME XXX needs more code  	engine->fifo.destroy_context(chan); @@ -412,6 +424,10 @@ void nouveau_fifo_free(struct nouveau_channel *chan)  	engine->graph.destroy_context(chan);  	/* reenable the fifo caches */ +	NV_WRITE(NV04_PFIFO_CACHE1_DMA_PUSH, +		 NV_READ(NV04_PFIFO_CACHE1_DMA_PUSH) | 1); +	NV_WRITE(NV03_PFIFO_CACHE1_PUSH0, 0x00000001); +	NV_WRITE(NV04_PFIFO_CACHE1_PULL0, 0x00000001);  	NV_WRITE(NV03_PFIFO_CACHES, 0x00000001);  	/* Deallocate push buffer */ diff --git a/shared-core/nouveau_irq.c b/shared-core/nouveau_irq.c index e64677ed..ac507299 100644 --- a/shared-core/nouveau_irq.c +++ b/shared-core/nouveau_irq.c @@ -35,8 +35,10 @@  #include "nouveau_drm.h"  #include "nouveau_drv.h"  #include "nouveau_reg.h" +#include "nouveau_swmthd.h" -void nouveau_irq_preinstall(struct drm_device *dev) +void +nouveau_irq_preinstall(struct drm_device *dev)  {  	struct drm_nouveau_private *dev_priv = dev->dev_private; @@ -44,7 +46,8 @@ void nouveau_irq_preinstall(struct drm_device *dev)  	NV_WRITE(NV03_PMC_INTR_EN_0, 0);  } -void nouveau_irq_postinstall(struct drm_device *dev) +void +nouveau_irq_postinstall(struct drm_device *dev)  {  	struct drm_nouveau_private *dev_priv = dev->dev_private; @@ -52,7 +55,8 @@ void nouveau_irq_postinstall(struct drm_device *dev)  	NV_WRITE(NV03_PMC_INTR_EN_0, NV_PMC_INTR_EN_0_MASTER_ENABLE);  } -void nouveau_irq_uninstall(struct drm_device *dev) +void +nouveau_irq_uninstall(struct drm_device *dev)  {  	struct drm_nouveau_private *dev_priv = dev->dev_private; @@ -60,125 +64,86 @@ void nouveau_irq_uninstall(struct drm_device *dev)  	NV_WRITE(NV03_PMC_INTR_EN_0, 0);  } -static void nouveau_fifo_irq_handler(struct drm_device *dev) +static void +nouveau_fifo_irq_handler(struct drm_device *dev)  { -	uint32_t status, chmode, chstat, channel;  	struct drm_nouveau_private *dev_priv = dev->dev_private; +	uint32_t status; -	status = NV_READ(NV03_PFIFO_INTR_0); -	if (!status) -		return; -	chmode = NV_READ(NV04_PFIFO_MODE); -	chstat = NV_READ(NV04_PFIFO_DMA); -	channel=NV_READ(NV03_PFIFO_CACHE1_PUSH1)&(nouveau_fifo_number(dev)-1); +	while ((status = NV_READ(NV03_PFIFO_INTR_0))) { +		uint32_t chid, get; + +		NV_WRITE(NV03_PFIFO_CACHES, 0); + +		chid = NV_READ(NV03_PFIFO_CACHE1_PUSH1) & +				(nouveau_fifo_number(dev) - 1); +		get  = NV_READ(NV03_PFIFO_CACHE1_GET); + +		if (status & NV_PFIFO_INTR_CACHE_ERROR) { +			uint32_t mthd, data; +			int ptr; +			 +			ptr = get >> 2; +			if (dev_priv->card_type < NV_40) { +				mthd = NV_READ(NV04_PFIFO_CACHE1_METHOD(ptr)); +				data = NV_READ(NV04_PFIFO_CACHE1_DATA(ptr)); +			} else { +				mthd = NV_READ(NV40_PFIFO_CACHE1_METHOD(ptr)); +				data = NV_READ(NV40_PFIFO_CACHE1_DATA(ptr)); +			} -	if (status & NV_PFIFO_INTR_CACHE_ERROR) { -		uint32_t c1get, c1method, c1data; +			DRM_INFO("PFIFO_CACHE_ERROR - " +				 "Ch %d/%d Mthd 0x%04x Data 0x%08x\n", +				 chid, (mthd >> 13) & 7, mthd & 0x1ffc, data); -		DRM_ERROR("PFIFO error interrupt\n"); +			NV_WRITE(NV03_PFIFO_CACHE1_GET, get + 4); +			NV_WRITE(NV04_PFIFO_CACHE1_PULL0, 1); -		c1get = NV_READ(NV03_PFIFO_CACHE1_GET) >> 2; -		if (dev_priv->card_type < NV_40) { -			/* Untested, so it may not work.. */ -			c1method = NV_READ(NV04_PFIFO_CACHE1_METHOD(c1get)); -			c1data   = NV_READ(NV04_PFIFO_CACHE1_DATA(c1get)); -		} else { -			c1method = NV_READ(NV40_PFIFO_CACHE1_METHOD(c1get)); -			c1data   = NV_READ(NV40_PFIFO_CACHE1_DATA(c1get)); +			status &= ~NV_PFIFO_INTR_CACHE_ERROR; +			NV_WRITE(NV03_PFIFO_INTR_0, NV_PFIFO_INTR_CACHE_ERROR);  		} -		DRM_ERROR("Channel %d/%d - Method 0x%04x, Data 0x%08x\n", -			  channel, (c1method >> 13) & 7, c1method & 0x1ffc, -			  c1data); - -		status &= ~NV_PFIFO_INTR_CACHE_ERROR; -		NV_WRITE(NV03_PFIFO_INTR_0, NV_PFIFO_INTR_CACHE_ERROR); -	} - -	if (status & NV_PFIFO_INTR_DMA_PUSHER) { -		DRM_ERROR("PFIFO DMA pusher interrupt: ch%d, 0x%08x\n", -			  channel, NV_READ(NV04_PFIFO_CACHE1_DMA_GET)); +		if (status & NV_PFIFO_INTR_DMA_PUSHER) { +			DRM_INFO("PFIFO_DMA_PUSHER - Ch %d\n", chid); -		status &= ~NV_PFIFO_INTR_DMA_PUSHER; -		NV_WRITE(NV03_PFIFO_INTR_0, NV_PFIFO_INTR_DMA_PUSHER); +			status &= ~NV_PFIFO_INTR_DMA_PUSHER; +			NV_WRITE(NV03_PFIFO_INTR_0, NV_PFIFO_INTR_DMA_PUSHER); -		NV_WRITE(NV04_PFIFO_CACHE1_DMA_STATE, 0x00000000); -		if (NV_READ(NV04_PFIFO_CACHE1_DMA_PUT)!=NV_READ(NV04_PFIFO_CACHE1_DMA_GET)) -		{ -			uint32_t getval=NV_READ(NV04_PFIFO_CACHE1_DMA_GET)+4; -			NV_WRITE(NV04_PFIFO_CACHE1_DMA_GET,getval); +			NV_WRITE(NV04_PFIFO_CACHE1_DMA_STATE, 0x00000000); +			if (NV_READ(NV04_PFIFO_CACHE1_DMA_PUT) != get) +				NV_WRITE(NV04_PFIFO_CACHE1_DMA_GET, get + 4);  		} -	} -	if (status) { -		DRM_ERROR("Unhandled PFIFO interrupt: status=0x%08x\n", status); +		if (status) { +			DRM_INFO("Unhandled PFIFO_INTR - 0x%8x\n", status); +			NV_WRITE(NV03_PFIFO_INTR_0, status); +		} -		NV_WRITE(NV03_PFIFO_INTR_0, status); +		NV_WRITE(NV03_PFIFO_CACHES, 1);  	}  	NV_WRITE(NV03_PMC_INTR_0, NV_PMC_INTR_0_PFIFO_PENDING);  } -#if 0 -static void nouveau_nv04_context_switch(struct drm_device *dev) -{ -	struct drm_nouveau_private *dev_priv = dev->dev_private; -	uint32_t channel,i; -	uint32_t max=0; -	NV_WRITE(NV04_PGRAPH_FIFO,0x0); -	channel=NV_READ(NV03_PFIFO_CACHE1_PUSH1)&(nouveau_fifo_number(dev)-1); -	//DRM_INFO("raw PFIFO_CACH1_PHS1 reg is %x\n",NV_READ(NV03_PFIFO_CACHE1_PUSH1)); -	//DRM_INFO("currently on channel %d\n",channel); -	for (i=0;i<nouveau_fifo_number(dev);i++) -		if ((dev_priv->fifos[i].used)&&(i!=channel)) { -			uint32_t put,get,pending; -			//put=NV_READ(dev_priv->ramfc_offset+i*32); -			//get=NV_READ(dev_priv->ramfc_offset+4+i*32); -			put=NV_READ(NV03_FIFO_REGS_DMAPUT(i)); -			get=NV_READ(NV03_FIFO_REGS_DMAGET(i)); -			pending=NV_READ(NV04_PFIFO_DMA); -			//DRM_INFO("Channel %d (put/get %x/%x)\n",i,put,get); -			/* mark all pending channels as such */ -			if ((put!=get)&!(pending&(1<<i))) -			{ -				pending|=(1<<i); -				NV_WRITE(NV04_PFIFO_DMA,pending); -			} -			max++; -		} -	nouveau_wait_for_idle(dev); - -#if 1 -	/* 2-channel commute */ -	//		NV_WRITE(NV03_PFIFO_CACHE1_PUSH1,channel|0x100); -	if (channel==0) -		channel=1; -	else -		channel=0; -	//		dev_priv->cur_fifo=channel; -	NV_WRITE(NV04_PFIFO_NEXT_CHANNEL,channel|0x100); -#endif -	//NV_WRITE(NV03_PFIFO_CACHE1_PUSH1,max|0x100); -	//NV_WRITE(0x2050,max|0x100); - -	NV_WRITE(NV04_PGRAPH_FIFO,0x1); -	 -} -#endif - - -struct nouveau_bitfield_names -{ +struct nouveau_bitfield_names {  	uint32_t mask;  	const char * name;  };  static struct nouveau_bitfield_names nouveau_nstatus_names[] =  { -	{ NV03_PGRAPH_NSTATUS_STATE_IN_USE,       "STATE_IN_USE" }, -	{ NV03_PGRAPH_NSTATUS_INVALID_STATE,      "INVALID_STATE" }, -	{ NV03_PGRAPH_NSTATUS_BAD_ARGUMENT,       "BAD_ARGUMENT" }, -	{ NV03_PGRAPH_NSTATUS_PROTECTION_FAULT,   "PROTECTION_FAULT" } +	{ NV04_PGRAPH_NSTATUS_STATE_IN_USE,       "STATE_IN_USE" }, +	{ NV04_PGRAPH_NSTATUS_INVALID_STATE,      "INVALID_STATE" }, +	{ NV04_PGRAPH_NSTATUS_BAD_ARGUMENT,       "BAD_ARGUMENT" }, +	{ NV04_PGRAPH_NSTATUS_PROTECTION_FAULT,   "PROTECTION_FAULT" } +}; + +static struct nouveau_bitfield_names nouveau_nstatus_names_nv10[] = +{ +	{ NV10_PGRAPH_NSTATUS_STATE_IN_USE,       "STATE_IN_USE" }, +	{ NV10_PGRAPH_NSTATUS_INVALID_STATE,      "INVALID_STATE" }, +	{ NV10_PGRAPH_NSTATUS_BAD_ARGUMENT,       "BAD_ARGUMENT" }, +	{ NV10_PGRAPH_NSTATUS_PROTECTION_FAULT,   "PROTECTION_FAULT" }  };  static struct nouveau_bitfield_names nouveau_nsource_names[] = @@ -280,7 +245,7 @@ nouveau_graph_trapped_channel(struct drm_device *dev, int *channel_ret)  }  static void -nouveau_graph_dump_trap_info(struct drm_device *dev) +nouveau_graph_dump_trap_info(struct drm_device *dev, const char *id)  {  	struct drm_nouveau_private *dev_priv = dev->dev_private;  	uint32_t address; @@ -303,88 +268,140 @@ nouveau_graph_dump_trap_info(struct drm_device *dev)  	}  	nsource = NV_READ(NV03_PGRAPH_NSOURCE);  	nstatus = NV_READ(NV03_PGRAPH_NSTATUS); -	if (dev_priv->card_type < NV_50) { +	if (dev_priv->card_type < NV_10) { +		class = NV_READ(0x400180 + subc*4) & 0xFF; +	} else if (dev_priv->card_type < NV_40) { +		class = NV_READ(0x400160 + subc*4) & 0xFFF; +	} else if (dev_priv->card_type < NV_50) {  		class = NV_READ(0x400160 + subc*4) & 0xFFFF;  	} else {  		class = NV_READ(0x400814);  	} -	DRM_ERROR("nSource:"); +	DRM_INFO("%s - nSource:", id);  	nouveau_print_bitfield_names(nsource, nouveau_nsource_names,  	                             ARRAY_SIZE(nouveau_nsource_names));  	printk(", nStatus:"); -	nouveau_print_bitfield_names(nstatus, nouveau_nstatus_names, +	if (dev_priv->card_type < NV_10) +		nouveau_print_bitfield_names(nstatus, nouveau_nstatus_names,  	                             ARRAY_SIZE(nouveau_nstatus_names)); +	else +		nouveau_print_bitfield_names(nstatus, nouveau_nstatus_names_nv10, +	                             ARRAY_SIZE(nouveau_nstatus_names_nv10));  	printk("\n"); -	DRM_ERROR("Channel %d/%d (class 0x%04x) - Method 0x%04x, Data 0x%08x:0x%08x\n", -		  channel, subc, class, method, data2, data); +	DRM_INFO("%s - Ch %d/%d Class 0x%04x Mthd 0x%04x Data 0x%08x:0x%08x\n", +		 id, channel, subc, class, method, data2, data);  } -static void nouveau_pgraph_irq_handler(struct drm_device *dev) +static inline void +nouveau_pgraph_intr_notify(struct drm_device *dev, uint32_t nsource)  {  	struct drm_nouveau_private *dev_priv = dev->dev_private; -	uint32_t status, nsource; +	int handled = 0; -	status = NV_READ(NV03_PGRAPH_INTR); -	if (!status) -		return; -	nsource = NV_READ(NV03_PGRAPH_NSOURCE); +	DRM_DEBUG("PGRAPH notify interrupt\n"); +	if (dev_priv->card_type == NV_04 && +	    (nsource & NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD)) { +		uint32_t class, mthd; -	if (status & NV_PGRAPH_INTR_NOTIFY) { -		DRM_DEBUG("PGRAPH notify interrupt\n"); +		/* NV4 (nvidia TNT 1) reports software methods with +		 * PGRAPH NOTIFY ILLEGAL_MTHD +		 */ +		mthd = NV_READ(NV04_PGRAPH_TRAPPED_ADDR) & 0x1FFC; +		class = NV_READ(NV04_PGRAPH_CTX_SWITCH1) & 0xFFF; +		DRM_DEBUG("Got NV04 software method method %x for class %#x\n", +			  mthd, class); + +		if (nouveau_sw_method_execute(dev, class, mthd)) { +			DRM_ERROR("Unable to execute NV04 software method %x " +				  "for object class %x. Please report.\n", +				  mthd, class); +		} else { +			handled = 1; +		} +	} -		nouveau_graph_dump_trap_info(dev); +	if (!handled) +		nouveau_graph_dump_trap_info(dev, "PGRAPH_NOTIFY"); +} + +static inline void +nouveau_pgraph_intr_error(struct drm_device *dev, uint32_t nsource) +{ +	nouveau_graph_dump_trap_info(dev, "PGRAPH_ERROR"); +} -		status &= ~NV_PGRAPH_INTR_NOTIFY; -		NV_WRITE(NV03_PGRAPH_INTR, NV_PGRAPH_INTR_NOTIFY); +static inline void +nouveau_pgraph_intr_context_switch(struct drm_device *dev) +{ +	struct drm_nouveau_private *dev_priv = dev->dev_private; +	uint32_t chid; +	 +	chid = NV_READ(NV03_PFIFO_CACHE1_PUSH1) & (nouveau_fifo_number(dev)-1); +	DRM_DEBUG("PGRAPH context switch interrupt channel %x\n", chid); + +	switch(dev_priv->card_type) { +	case NV_04: +	case NV_05: +		nouveau_nv04_context_switch(dev); +		break; +	case NV_10: +	case NV_11: +	case NV_17: +		nouveau_nv10_context_switch(dev); +		break; +	default: +		DRM_ERROR("Context switch not implemented\n"); +		break;  	} +} + +static void +nouveau_pgraph_irq_handler(struct drm_device *dev) +{ +	struct drm_nouveau_private *dev_priv = dev->dev_private; +	uint32_t status; -	if (status & NV_PGRAPH_INTR_ERROR) { -		DRM_ERROR("PGRAPH error interrupt\n"); +	while ((status = NV_READ(NV03_PGRAPH_INTR))) { +		uint32_t nsource = NV_READ(NV03_PGRAPH_NSOURCE); -		nouveau_graph_dump_trap_info(dev); +		if (status & NV_PGRAPH_INTR_NOTIFY) { +			nouveau_pgraph_intr_notify(dev, nsource); -		status &= ~NV_PGRAPH_INTR_ERROR; -		NV_WRITE(NV03_PGRAPH_INTR, NV_PGRAPH_INTR_ERROR); -	} +			status &= ~NV_PGRAPH_INTR_NOTIFY; +			NV_WRITE(NV03_PGRAPH_INTR, NV_PGRAPH_INTR_NOTIFY); +		} -	if (status & NV_PGRAPH_INTR_CONTEXT_SWITCH) { -		uint32_t channel=NV_READ(NV03_PFIFO_CACHE1_PUSH1)&(nouveau_fifo_number(dev)-1); -		DRM_DEBUG("PGRAPH context switch interrupt channel %x\n",channel); -		switch(dev_priv->card_type) -		{ -			case NV_04: -			case NV_05: -				nouveau_nv04_context_switch(dev); -				break; -			case NV_10: -			case NV_11: -			case NV_17: -				nouveau_nv10_context_switch(dev); -				break; -			case NV_20: -			case NV_30: -				nouveau_nv20_context_switch(dev); -				break; -			default: -				DRM_ERROR("Context switch not implemented\n"); -				break; +		if (status & NV_PGRAPH_INTR_ERROR) { +			nouveau_pgraph_intr_error(dev, nsource); + +			status &= ~NV_PGRAPH_INTR_ERROR; +			NV_WRITE(NV03_PGRAPH_INTR, NV_PGRAPH_INTR_ERROR);  		} -		status &= ~NV_PGRAPH_INTR_CONTEXT_SWITCH; -		NV_WRITE(NV03_PGRAPH_INTR, NV_PGRAPH_INTR_CONTEXT_SWITCH); -	} +		if (status & NV_PGRAPH_INTR_CONTEXT_SWITCH) { +			nouveau_pgraph_intr_context_switch(dev); + +			status &= ~NV_PGRAPH_INTR_CONTEXT_SWITCH; +			NV_WRITE(NV03_PGRAPH_INTR, +				 NV_PGRAPH_INTR_CONTEXT_SWITCH); +		} -	if (status) { -		DRM_ERROR("Unhandled PGRAPH interrupt: STAT=0x%08x\n", status); -		NV_WRITE(NV03_PGRAPH_INTR, status); +		if (status) { +			DRM_INFO("Unhandled PGRAPH_INTR - 0x%8x\n", status); +			NV_WRITE(NV03_PGRAPH_INTR, status); +		} + +		if ((NV_READ(NV04_PGRAPH_FIFO) & (1 << 0)) == 0) +			NV_WRITE(NV04_PGRAPH_FIFO, 1);  	}  	NV_WRITE(NV03_PMC_INTR_0, NV_PMC_INTR_0_PGRAPH_PENDING);  } -static void nouveau_crtc_irq_handler(struct drm_device *dev, int crtc) +static void +nouveau_crtc_irq_handler(struct drm_device *dev, int crtc)  {  	struct drm_nouveau_private *dev_priv = dev->dev_private; @@ -397,7 +414,8 @@ static void nouveau_crtc_irq_handler(struct drm_device *dev, int crtc)  	}  } -irqreturn_t nouveau_irq_handler(DRM_IRQ_ARGS) +irqreturn_t +nouveau_irq_handler(DRM_IRQ_ARGS)  {  	struct drm_device *dev = (struct drm_device*)arg;  	struct drm_nouveau_private *dev_priv = dev->dev_private; diff --git a/shared-core/nouveau_mem.c b/shared-core/nouveau_mem.c index dbfba351..e2f0b38d 100644 --- a/shared-core/nouveau_mem.c +++ b/shared-core/nouveau_mem.c @@ -430,7 +430,7 @@ int nouveau_mem_init(struct drm_device *dev)  		sgreq.size = 16 << 20; //16MB of PCI scatter-gather zone  		if (drm_sg_alloc(dev, &sgreq)) { -			DRM_ERROR("Unable to allocate %dMB of scatter-gather" +			DRM_ERROR("Unable to allocate %ldMB of scatter-gather"  				  " pages for PCI DMA!",sgreq.size>>20);  		} else {  			if (nouveau_mem_init_heap(&dev_priv->pci_heap, 0, diff --git a/shared-core/nouveau_notifier.c b/shared-core/nouveau_notifier.c index d3b79683..31e2b244 100644 --- a/shared-core/nouveau_notifier.c +++ b/shared-core/nouveau_notifier.c @@ -33,20 +33,10 @@ int  nouveau_notifier_init_channel(struct nouveau_channel *chan)  {  	struct drm_device *dev = chan->dev; -	struct drm_nouveau_private *dev_priv = dev->dev_private;  	int flags, ret; -	/*TODO: PCI notifier blocks */ -#ifndef __powerpc__ -	if (dev_priv->agp_heap) -		flags = NOUVEAU_MEM_AGP; -	else -#endif -	if (dev_priv->pci_heap) -		flags = NOUVEAU_MEM_PCI; -	else -		flags = NOUVEAU_MEM_FB; -	flags |= (NOUVEAU_MEM_MAPPED | NOUVEAU_MEM_FB_ACCEPTABLE); +	flags = (NOUVEAU_MEM_PCI | NOUVEAU_MEM_MAPPED | +	         NOUVEAU_MEM_FB_ACCEPTABLE);  	chan->notifier_block = nouveau_mem_alloc(dev, 0, PAGE_SIZE, flags,  						 (struct drm_file *)-2); diff --git a/shared-core/nouveau_reg.h b/shared-core/nouveau_reg.h index 21133d98..4dc3b7fa 100644 --- a/shared-core/nouveau_reg.h +++ b/shared-core/nouveau_reg.h @@ -57,6 +57,7 @@  #    define NV50_FIFO_REGS_DMAGET(i)                       (NV50_FIFO_REGS(i)+0x44)  #define NV03_PMC_BOOT_0                                    0x00000000 +#define NV03_PMC_BOOT_1                                    0x00000004  #define NV03_PMC_INTR_0                                    0x00000100  #    define NV_PMC_INTR_0_PFIFO_PENDING                       (1<< 8)  #    define NV_PMC_INTR_0_PGRAPH_PENDING                      (1<<12) @@ -118,10 +119,14 @@  #define NV10_PGRAPH_DEBUG_4                                0x00400090  #define NV03_PGRAPH_INTR                                   0x00400100  #define NV03_PGRAPH_NSTATUS                                0x00400104 -#    define NV03_PGRAPH_NSTATUS_STATE_IN_USE                  (1<<23) -#    define NV03_PGRAPH_NSTATUS_INVALID_STATE                 (1<<24) -#    define NV03_PGRAPH_NSTATUS_BAD_ARGUMENT                  (1<<25) -#    define NV03_PGRAPH_NSTATUS_PROTECTION_FAULT              (1<<26) +#    define NV04_PGRAPH_NSTATUS_STATE_IN_USE                  (1<<11) +#    define NV04_PGRAPH_NSTATUS_INVALID_STATE                 (1<<12) +#    define NV04_PGRAPH_NSTATUS_BAD_ARGUMENT                  (1<<13) +#    define NV04_PGRAPH_NSTATUS_PROTECTION_FAULT              (1<<14) +#    define NV10_PGRAPH_NSTATUS_STATE_IN_USE                  (1<<23) +#    define NV10_PGRAPH_NSTATUS_INVALID_STATE                 (1<<24) +#    define NV10_PGRAPH_NSTATUS_BAD_ARGUMENT                  (1<<25) +#    define NV10_PGRAPH_NSTATUS_PROTECTION_FAULT              (1<<26)  #define NV03_PGRAPH_NSOURCE                                0x00400108  #    define NV03_PGRAPH_NSOURCE_NOTIFICATION                  (1<< 0)  #    define NV03_PGRAPH_NSOURCE_DATA_ERROR                    (1<< 1) @@ -286,10 +291,8 @@  #define NV10_PGRAPH_DMA_PITCH                              0x00400770  #define NV10_PGRAPH_DVD_COLORFMT                           0x00400774  #define NV10_PGRAPH_SCALED_FORMAT                          0x00400778 -#define NV10_PGRAPH_CHANNEL_CTX_TABLE                      0x00400780 -#define NV10_PGRAPH_CHANNEL_CTX_SIZE                       0x00400784 +#define NV20_PGRAPH_CHANNEL_CTX_TABLE                      0x00400780  #define NV20_PGRAPH_CHANNEL_CTX_POINTER                    0x00400784 -#define NV10_PGRAPH_CHANNEL_CTX_POINTER                    0x00400788  #define NV20_PGRAPH_CHANNEL_CTX_XFER                       0x00400788  #define NV20_PGRAPH_CHANNEL_CTX_XFER_LOAD                  0x00000001  #define NV20_PGRAPH_CHANNEL_CTX_XFER_SAVE                  0x00000002 diff --git a/shared-core/nouveau_state.c b/shared-core/nouveau_state.c index e73b4878..add2d598 100644 --- a/shared-core/nouveau_state.c +++ b/shared-core/nouveau_state.c @@ -192,11 +192,11 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev)  		engine->fb.init		= nv10_fb_init;  		engine->fb.takedown	= nv10_fb_takedown;  		engine->graph.init	= nv30_graph_init; -		engine->graph.takedown	= nv30_graph_takedown; -		engine->graph.create_context	= nv30_graph_create_context; -		engine->graph.destroy_context	= nv30_graph_destroy_context; -		engine->graph.load_context	= nv30_graph_load_context; -		engine->graph.save_context	= nv30_graph_save_context; +		engine->graph.takedown	= nv20_graph_takedown; +		engine->graph.create_context	= nv20_graph_create_context; +		engine->graph.destroy_context	= nv20_graph_destroy_context; +		engine->graph.load_context	= nv20_graph_load_context; +		engine->graph.save_context	= nv20_graph_save_context;  		engine->fifo.init	= nouveau_fifo_init;  		engine->fifo.takedown	= nouveau_stub_takedown;  		engine->fifo.create_context	= nv10_fifo_create_context; @@ -283,6 +283,12 @@ nouveau_card_init(struct drm_device *dev)  	ret = nouveau_init_card_mappings(dev);  	if (ret) return ret; +	/* Put the card in BE mode if it's not */ +	if (NV_READ(NV03_PMC_BOOT_1)) +		NV_WRITE(NV03_PMC_BOOT_1,0x00000001); + +	DRM_MEMORYBARRIER(); +  	/* Determine exact chipset we're running on */  	if (dev_priv->card_type < NV_10)  		dev_priv->chipset = dev_priv->card_type; @@ -403,19 +409,79 @@ int nouveau_firstopen(struct drm_device *dev)  int nouveau_load(struct drm_device *dev, unsigned long flags)  {  	struct drm_nouveau_private *dev_priv; - -	if (flags==NV_UNKNOWN) -		return -EINVAL; +	void __iomem *regs; +	uint32_t reg0,reg1; +	uint8_t architecture = 0;  	dev_priv = drm_calloc(1, sizeof(*dev_priv), DRM_MEM_DRIVER); -	if (!dev_priv)                    +	if (!dev_priv)  		return -ENOMEM; -	dev_priv->card_type=flags&NOUVEAU_FAMILY; -	dev_priv->flags=flags&NOUVEAU_FLAGS; +	dev_priv->flags = flags & NOUVEAU_FLAGS;  	dev_priv->init_state = NOUVEAU_CARD_INIT_DOWN; +	DRM_DEBUG("vendor: 0x%X device: 0x%X class: 0x%X\n", dev->pci_vendor, dev->pci_device, dev->pdev->class); + +	/* Time to determine the card architecture */ +	regs = ioremap_nocache(pci_resource_start(dev->pdev, 0), 0x8);  +	if (!regs) { +		DRM_ERROR("Could not ioremap to determine register\n"); +		return -ENOMEM; +	} + +	reg0 = readl(regs+NV03_PMC_BOOT_0); +	reg1 = readl(regs+NV03_PMC_BOOT_1); +	if (reg1) +		reg0=___swab32(reg0); + +	/* We're dealing with >=NV10 */ +	if ((reg0 & 0x0f000000) > 0 ) { +		/* Bit 27-20 contain the architecture in hex */ +		architecture = (reg0 & 0xff00000) >> 20; +	/* NV04 or NV05 */ +	} else if ((reg0 & 0xff00fff0) == 0x20004000) { +		architecture = 0x04; +	} + +	iounmap(regs); + +	if (architecture >= 0x50) { +		dev_priv->card_type = NV_50; +	} else if (architecture >= 0x44) { +		dev_priv->card_type = NV_44; +	} else if (architecture >= 0x40) { +		dev_priv->card_type = NV_40; +	} else if (architecture >= 0x30) { +		dev_priv->card_type = NV_30; +	} else if (architecture >= 0x20) { +		dev_priv->card_type = NV_20; +	} else if (architecture >= 0x17) { +		dev_priv->card_type = NV_17; +	} else if (architecture >= 0x11) { +		dev_priv->card_type = NV_11; +	} else if (architecture >= 0x10) { +		dev_priv->card_type = NV_10; +	} else if (architecture >= 0x04) { +		dev_priv->card_type = NV_04; +	} else { +		dev_priv->card_type = NV_UNKNOWN; +	} + +	DRM_INFO("Detected an NV%d generation card (0x%08x)\n", dev_priv->card_type,reg0); + +	if (dev_priv->card_type == NV_UNKNOWN) { +		return -EINVAL; +	} + +	/* Special flags */ +	if (dev->pci_device == 0x01a0) { +		dev_priv->flags |= NV_NFORCE; +	} else if (dev->pci_device == 0x01f0) { +		dev_priv->flags |= NV_NFORCE2; +	} +  	dev->dev_private = (void *)dev_priv; +  	return 0;  } @@ -423,12 +489,15 @@ void nouveau_lastclose(struct drm_device *dev)  {  	struct drm_nouveau_private *dev_priv = dev->dev_private; -	nouveau_card_takedown(dev); +	/* In the case of an error dev_priv may not be be allocated yet */ +	if (dev_priv && dev_priv->card_type) { +		nouveau_card_takedown(dev); -	if(dev_priv->fb_mtrr>0) -	{ -		drm_mtrr_del(dev_priv->fb_mtrr, drm_get_resource_start(dev, 1),nouveau_mem_fb_amount(dev), DRM_MTRR_WC); -		dev_priv->fb_mtrr=0; +		if(dev_priv->fb_mtrr>0) +		{ +			drm_mtrr_del(dev_priv->fb_mtrr, drm_get_resource_start(dev, 1),nouveau_mem_fb_amount(dev), DRM_MTRR_WC); +			dev_priv->fb_mtrr=0; +		}  	}  } diff --git a/shared-core/nouveau_swmthd.c b/shared-core/nouveau_swmthd.c new file mode 100644 index 00000000..66ef6233 --- /dev/null +++ b/shared-core/nouveau_swmthd.c @@ -0,0 +1,193 @@ +/* + * Copyright (C) 2007 Arthur Huillet. + * + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +/* + * Authors: + *   Arthur Huillet <arthur.huillet AT free DOT fr> + */ + +#include "drmP.h" +#include "drm.h" +#include "nouveau_drm.h" +#include "nouveau_drv.h" +#include "nouveau_reg.h" + +/*TODO: add a "card_type" attribute*/ +typedef struct{ +	uint32_t oclass; /* object class for this software method */ +	uint32_t mthd; /* method number */ +	void (*method_code)(struct drm_device *dev, uint32_t oclass, uint32_t mthd); /* pointer to the function that does the work */ + } nouveau_software_method_t; + + + /* This function handles the NV04 setcontext software methods. +One function for all because they are very similar.*/ +static void nouveau_NV04_setcontext_sw_method(struct drm_device *dev, uint32_t oclass, uint32_t mthd) { +	struct drm_nouveau_private *dev_priv = dev->dev_private; +	uint32_t inst_loc = NV_READ(NV04_PGRAPH_CTX_SWITCH4) & 0xFFFF; +	uint32_t value_to_set = 0, bit_to_set = 0; + +	switch ( oclass ) { +		case 0x4a: +			switch ( mthd ) { +				case 0x188 : +				case 0x18c : +					bit_to_set = 0; +					break; +				case 0x198 : +					bit_to_set = 1 << 24; /*PATCH_STATUS_VALID*/ +					break; +				case 0x2fc : +					bit_to_set = NV_READ(NV04_PGRAPH_TRAPPED_DATA) << 15; /*PATCH_CONFIG = NV04_PGRAPH_TRAPPED_DATA*/ +					break; +				default : ; +				}; +			break; +		case 0x5c: +			switch ( mthd ) { +				case 0x184: +					bit_to_set = 1 << 13; /*USER_CLIP_ENABLE*/ +					break; +				case 0x188: +				case 0x18c: +					bit_to_set = 0; +					break; +				case 0x198: +					bit_to_set = 1 << 24; /*PATCH_STATUS_VALID*/ +					break; +				case 0x2fc : +					bit_to_set = NV_READ(NV04_PGRAPH_TRAPPED_DATA) << 15; /*PATCH_CONFIG = NV04_PGRAPH_TRAPPED_DATA*/ +					break; +			}; +			break; +		case 0x5f: +			switch ( mthd ) { +				case 0x184 : +					bit_to_set = 1 << 12; /*CHROMA_KEY_ENABLE*/ +					break; +				case 0x188 : +					bit_to_set = 1 << 13; /*USER_CLIP_ENABLE*/ +					break; +				case 0x18c : +				case 0x190 : +					bit_to_set = 0; +					break; +				case 0x19c : +					bit_to_set = 1 << 24; /*PATCH_STATUS_VALID*/ +					break; +				case 0x2fc : +					bit_to_set = NV_READ(NV04_PGRAPH_TRAPPED_DATA) << 15; /*PATCH_CONFIG = NV04_PGRAPH_TRAPPED_DATA*/ +					break; +			}; +			break; +		case 0x61: +			switch ( mthd ) { +				case 0x188 : +					bit_to_set = 1 << 13; /*USER_CLIP_ENABLE*/ +					break; +				case 0x18c : +				case 0x190 : +					bit_to_set = 0; +					break; +				case 0x19c : +					bit_to_set = 1 << 24; /*PATCH_STATUS_VALID*/ +					break; +				case 0x2fc : +					bit_to_set = NV_READ(NV04_PGRAPH_TRAPPED_DATA) << 15; /*PATCH_CONFIG = NV04_PGRAPH_TRAPPED_DATA*/ +					break; +			}; +			break; +		case 0x77: +			switch ( mthd ) { +				case 0x198 : +					bit_to_set = 1 << 24; /*PATCH_STATUS_VALID*/ +					break; +				case 0x304 : +					bit_to_set = NV_READ(NV04_PGRAPH_TRAPPED_DATA) << 15; //PATCH_CONFIG +					break; +			}; +			break; +		default :; +		}; + +	value_to_set = (NV_READ(0x00700000 | inst_loc << 4))| bit_to_set; + +	/*RAMIN*/ +	nouveau_wait_for_idle(dev); +	NV_WRITE(0x00700000 | inst_loc << 4, value_to_set); + +	/*DRM_DEBUG("CTX_SWITCH1 value is %#x\n", NV_READ(NV04_PGRAPH_CTX_SWITCH1));*/ +	NV_WRITE(NV04_PGRAPH_CTX_SWITCH1, value_to_set); + +	/*DRM_DEBUG("CTX_CACHE1 + xxx value is %#x\n", NV_READ(NV04_PGRAPH_CTX_CACHE1 + (((NV_READ(NV04_PGRAPH_TRAPPED_ADDR) >> 13) & 0x7) << 2)));*/ +	NV_WRITE(NV04_PGRAPH_CTX_CACHE1 + (((NV_READ(NV04_PGRAPH_TRAPPED_ADDR) >> 13) & 0x7) << 2), value_to_set); +} + + nouveau_software_method_t nouveau_sw_methods[] = { +	/*NV04 context software methods*/ +	{ 0x4a, 0x188, nouveau_NV04_setcontext_sw_method }, +	{ 0x4a, 0x18c, nouveau_NV04_setcontext_sw_method }, +	{ 0x4a, 0x198, nouveau_NV04_setcontext_sw_method }, +	{ 0x4a, 0x2fc, nouveau_NV04_setcontext_sw_method }, +	{ 0x5c, 0x184, nouveau_NV04_setcontext_sw_method }, +	{ 0x5c, 0x188, nouveau_NV04_setcontext_sw_method }, +	{ 0x5c, 0x18c, nouveau_NV04_setcontext_sw_method }, +	{ 0x5c, 0x198, nouveau_NV04_setcontext_sw_method }, +	{ 0x5c, 0x2fc, nouveau_NV04_setcontext_sw_method }, +	{ 0x5f, 0x184, nouveau_NV04_setcontext_sw_method }, +	{ 0x5f, 0x188, nouveau_NV04_setcontext_sw_method }, +	{ 0x5f, 0x18c, nouveau_NV04_setcontext_sw_method }, +	{ 0x5f, 0x190, nouveau_NV04_setcontext_sw_method }, +	{ 0x5f, 0x19c, nouveau_NV04_setcontext_sw_method }, +	{ 0x5f, 0x2fc, nouveau_NV04_setcontext_sw_method }, +	{ 0x61, 0x188, nouveau_NV04_setcontext_sw_method }, +	{ 0x61, 0x18c, nouveau_NV04_setcontext_sw_method }, +	{ 0x61, 0x190, nouveau_NV04_setcontext_sw_method }, +	{ 0x61, 0x19c, nouveau_NV04_setcontext_sw_method }, +	{ 0x61, 0x2fc, nouveau_NV04_setcontext_sw_method }, +	{ 0x77, 0x198, nouveau_NV04_setcontext_sw_method }, +	{ 0x77, 0x304, nouveau_NV04_setcontext_sw_method }, +	/*terminator*/ +	{ 0x0, 0x0, NULL, }, + }; + + int nouveau_sw_method_execute(struct drm_device *dev, uint32_t oclass, uint32_t method) { +	int i = 0; +	while ( nouveau_sw_methods[ i ] . method_code != NULL ) +		{ +		if ( nouveau_sw_methods[ i ] . oclass == oclass && nouveau_sw_methods[ i ] . mthd == method ) +			{ +			nouveau_sw_methods[ i ] . method_code(dev, oclass, method); +			return 0; +			} +		i ++; +		} + +	 return 1; + } + + diff --git a/shared-core/nouveau_swmthd.h b/shared-core/nouveau_swmthd.h new file mode 100644 index 00000000..df8c7400 --- /dev/null +++ b/shared-core/nouveau_swmthd.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2007 Arthur Huillet. + * + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +/* + * Authors: + *   Arthur Huillet <arthur.huillet AT free DOT fr> + */ + +int nouveau_sw_method_execute(struct drm_device *dev, uint32_t oclass, uint32_t method); /* execute the given software method, returns 0 on success */ + diff --git a/shared-core/nv04_graph.c b/shared-core/nv04_graph.c index 2cf052cf..cffa3e4a 100644 --- a/shared-core/nv04_graph.c +++ b/shared-core/nv04_graph.c @@ -346,6 +346,10 @@ static uint32_t nv04_graph_ctx_regs [] = {  }; +struct graph_state { +	int nv04[sizeof(nv04_graph_ctx_regs)/sizeof(nv04_graph_ctx_regs[0])]; +}; +  void nouveau_nv04_context_switch(struct drm_device *dev)  {  	struct drm_nouveau_private *dev_priv = dev->dev_private; @@ -414,12 +418,17 @@ void nouveau_nv04_context_switch(struct drm_device *dev)  }  int nv04_graph_create_context(struct nouveau_channel *chan) { +	struct graph_state* pgraph_ctx;  	DRM_DEBUG("nv04_graph_context_create %d\n", chan->id); -	memset(chan->pgraph_ctx, 0, sizeof(chan->pgraph_ctx)); +	chan->pgraph_ctx = pgraph_ctx = drm_calloc(1, sizeof(*pgraph_ctx), +					      DRM_MEM_DRIVER); + +	if (pgraph_ctx == NULL) +		return -ENOMEM;  	//dev_priv->fifos[channel].pgraph_ctx_user = channel << 24; -	chan->pgraph_ctx[0] = 0x0001ffff; +	pgraph_ctx->nv04[0] = 0x0001ffff;  	/* is it really needed ??? */  	//dev_priv->fifos[channel].pgraph_ctx[1] = NV_READ(NV_PGRAPH_DEBUG_4);  	//dev_priv->fifos[channel].pgraph_ctx[2] = NV_READ(0x004006b0); @@ -429,16 +438,21 @@ int nv04_graph_create_context(struct nouveau_channel *chan) {  void nv04_graph_destroy_context(struct nouveau_channel *chan)  { +	struct graph_state* pgraph_ctx = chan->pgraph_ctx; + +	drm_free(pgraph_ctx, sizeof(*pgraph_ctx), DRM_MEM_DRIVER); +	chan->pgraph_ctx = NULL;  }  int nv04_graph_load_context(struct nouveau_channel *chan)  {  	struct drm_device *dev = chan->dev;  	struct drm_nouveau_private *dev_priv = dev->dev_private; +	struct graph_state* pgraph_ctx = chan->pgraph_ctx;  	int i;  	for (i = 0; i < sizeof(nv04_graph_ctx_regs)/sizeof(nv04_graph_ctx_regs[0]); i++) -		NV_WRITE(nv04_graph_ctx_regs[i], chan->pgraph_ctx[i]); +		NV_WRITE(nv04_graph_ctx_regs[i], pgraph_ctx->nv04[i]);  	return 0;  } @@ -447,10 +461,11 @@ int nv04_graph_save_context(struct nouveau_channel *chan)  {  	struct drm_device *dev = chan->dev;  	struct drm_nouveau_private *dev_priv = dev->dev_private; +	struct graph_state* pgraph_ctx = chan->pgraph_ctx;  	int i;  	for (i = 0; i < sizeof(nv04_graph_ctx_regs)/sizeof(nv04_graph_ctx_regs[0]); i++) -		chan->pgraph_ctx[i] = NV_READ(nv04_graph_ctx_regs[i]); +		pgraph_ctx->nv04[i] = NV_READ(nv04_graph_ctx_regs[i]);  	return 0;  } @@ -467,20 +482,22 @@ int nv04_graph_init(struct drm_device *dev) {  	NV_WRITE(NV03_PGRAPH_INTR, 0xFFFFFFFF);  	NV_WRITE(NV03_PGRAPH_INTR_EN, 0xFFFFFFFF); -	// check the context is big enough -	if ( sizeof(nv04_graph_ctx_regs)>sizeof(dev_priv->fifos[0]->pgraph_ctx) ) -		DRM_ERROR("pgraph_ctx too small\n"); - -	NV_WRITE(NV04_PGRAPH_DEBUG_0, 0x000001FF); +	NV_WRITE(NV04_PGRAPH_VALID1, 0); +	NV_WRITE(NV04_PGRAPH_VALID2, 0); +	/*NV_WRITE(NV04_PGRAPH_DEBUG_0, 0x000001FF); +	NV_WRITE(NV04_PGRAPH_DEBUG_0, 0x001FFFFF);*/  	NV_WRITE(NV04_PGRAPH_DEBUG_0, 0x1231c000); -	NV_WRITE(NV04_PGRAPH_DEBUG_1, 0xf2d91100); -	NV_WRITE(NV04_PGRAPH_DEBUG_2, 0x11d5f870); -	NV_WRITE(NV04_PGRAPH_DEBUG_3, 0x0004FF31); -	NV_WRITE(NV04_PGRAPH_DEBUG_3, 0x4004FF31 | -				    (0x00D00000) | -				    (1<<29) | -				    (1<<31)); -	NV_WRITE(NV04_PGRAPH_DEBUG_3, 0xfad4ff31); +	/*1231C000 blob, 001 haiku*/ +	//*V_WRITE(NV04_PGRAPH_DEBUG_1, 0xf2d91100);*/ +	NV_WRITE(NV04_PGRAPH_DEBUG_1, 0x72111100); +	/*0x72111100 blob , 01 haiku*/ +	/*NV_WRITE(NV04_PGRAPH_DEBUG_2, 0x11d5f870);*/ +	NV_WRITE(NV04_PGRAPH_DEBUG_2, 0x11d5f071); +	/*haiku same*/ + +	/*NV_WRITE(NV04_PGRAPH_DEBUG_3, 0xfad4ff31);*/ +	NV_WRITE(NV04_PGRAPH_DEBUG_3, 0x10d4ff31); +	/*haiku and blob 10d4*/  	NV_WRITE(NV04_PGRAPH_STATE        , 0xFFFFFFFF);  	NV_WRITE(NV04_PGRAPH_CTX_CONTROL  , 0x10010100); @@ -496,4 +513,3 @@ int nv04_graph_init(struct drm_device *dev) {  void nv04_graph_takedown(struct drm_device *dev)  {  } - diff --git a/shared-core/nv10_graph.c b/shared-core/nv10_graph.c index 1fd185a0..c6319b8f 100644 --- a/shared-core/nv10_graph.c +++ b/shared-core/nv10_graph.c @@ -42,244 +42,6 @@ struct pipe_state {  	uint32_t pipe_0x7800[0x0c0/4];  }; -/* TODO dynamic allocation ??? */ -static struct pipe_state pipe_state[NV10_FIFO_NUMBER]; - -static void nv10_graph_save_pipe(struct nouveau_channel *chan) { -	struct drm_device *dev = chan->dev; -	struct drm_nouveau_private *dev_priv = dev->dev_private; -	struct pipe_state *fifo_pipe_state = pipe_state + chan->id; -	int i; -#define PIPE_SAVE(addr) \ -	do { \ -		NV_WRITE(NV10_PGRAPH_PIPE_ADDRESS, addr); \ -		for (i=0; i < sizeof(fifo_pipe_state->pipe_##addr)/sizeof(fifo_pipe_state->pipe_##addr[0]); i++) \ -			fifo_pipe_state->pipe_##addr[i] = NV_READ(NV10_PGRAPH_PIPE_DATA); \ -	} while (0) - -	PIPE_SAVE(0x4400); -	PIPE_SAVE(0x0200); -	PIPE_SAVE(0x6400); -	PIPE_SAVE(0x6800); -	PIPE_SAVE(0x6c00); -	PIPE_SAVE(0x7000); -	PIPE_SAVE(0x7400); -	PIPE_SAVE(0x7800); -	PIPE_SAVE(0x0040); -	PIPE_SAVE(0x0000); - -#undef PIPE_SAVE -} - -static void nv10_graph_load_pipe(struct nouveau_channel *chan) { -	struct drm_device *dev = chan->dev; -	struct drm_nouveau_private *dev_priv = dev->dev_private; -	struct pipe_state *fifo_pipe_state = pipe_state + chan->id; -	int i; -	uint32_t xfmode0, xfmode1; -#define PIPE_RESTORE(addr) \ -	do { \ -		NV_WRITE(NV10_PGRAPH_PIPE_ADDRESS, addr); \ -		for (i=0; i < sizeof(fifo_pipe_state->pipe_##addr)/sizeof(fifo_pipe_state->pipe_##addr[0]); i++) \ -			NV_WRITE(NV10_PGRAPH_PIPE_DATA, fifo_pipe_state->pipe_##addr[i]); \ -	} while (0) - - -	nouveau_wait_for_idle(dev); -	/* XXX check haiku comments */ -	xfmode0 = NV_READ(NV10_PGRAPH_XFMODE0); -	xfmode1 = NV_READ(NV10_PGRAPH_XFMODE1); -	NV_WRITE(NV10_PGRAPH_XFMODE0, 0x10000000); -	NV_WRITE(NV10_PGRAPH_XFMODE1, 0x00000000); -	NV_WRITE(NV10_PGRAPH_PIPE_ADDRESS, 0x000064c0); -	for (i = 0; i < 4; i++) -		NV_WRITE(NV10_PGRAPH_PIPE_DATA, 0x3f800000); -	for (i = 0; i < 4; i++) -		NV_WRITE(NV10_PGRAPH_PIPE_DATA, 0x00000000); - -	NV_WRITE(NV10_PGRAPH_PIPE_ADDRESS, 0x00006ab0); -	for (i = 0; i < 3; i++) -		NV_WRITE(NV10_PGRAPH_PIPE_DATA, 0x3f800000); - -	NV_WRITE(NV10_PGRAPH_PIPE_ADDRESS, 0x00006a80); -	for (i = 0; i < 3; i++) -		NV_WRITE(NV10_PGRAPH_PIPE_DATA, 0x00000000); - -	NV_WRITE(NV10_PGRAPH_PIPE_ADDRESS, 0x00000040); -	NV_WRITE(NV10_PGRAPH_PIPE_DATA, 0x00000008); - - -	PIPE_RESTORE(0x0200); -	nouveau_wait_for_idle(dev); - -	/* restore XFMODE */ -	NV_WRITE(NV10_PGRAPH_XFMODE0, xfmode0); -	NV_WRITE(NV10_PGRAPH_XFMODE1, xfmode1); -	PIPE_RESTORE(0x6400); -	PIPE_RESTORE(0x6800); -	PIPE_RESTORE(0x6c00); -	PIPE_RESTORE(0x7000); -	PIPE_RESTORE(0x7400); -	PIPE_RESTORE(0x7800); -	PIPE_RESTORE(0x4400); -	PIPE_RESTORE(0x0000); -	PIPE_RESTORE(0x0040); -	nouveau_wait_for_idle(dev); - -#undef PIPE_RESTORE -} - -static void nv10_graph_create_pipe(struct nouveau_channel *chan) { -	struct pipe_state *fifo_pipe_state = pipe_state + chan->id; -	uint32_t *fifo_pipe_state_addr; -	int i; -#define PIPE_INIT(addr) \ -	do { \ -		fifo_pipe_state_addr = fifo_pipe_state->pipe_##addr; \ -	} while (0) -#define PIPE_INIT_END(addr) \ -	do { \ -		if (fifo_pipe_state_addr != \ -				sizeof(fifo_pipe_state->pipe_##addr)/sizeof(fifo_pipe_state->pipe_##addr[0]) + fifo_pipe_state->pipe_##addr) \ -			DRM_ERROR("incomplete pipe init for 0x%x :  %p/%p\n", addr, fifo_pipe_state_addr, \ -					sizeof(fifo_pipe_state->pipe_##addr)/sizeof(fifo_pipe_state->pipe_##addr[0]) + fifo_pipe_state->pipe_##addr); \ -	} while (0) -#define NV_WRITE_PIPE_INIT(value) *(fifo_pipe_state_addr++) = value - -	PIPE_INIT(0x0200); -	for (i = 0; i < 48; i++) -		NV_WRITE_PIPE_INIT(0x00000000); -	PIPE_INIT_END(0x0200); - -	PIPE_INIT(0x6400); -	for (i = 0; i < 211; i++) -		NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x3f800000); -	NV_WRITE_PIPE_INIT(0x40000000); -	NV_WRITE_PIPE_INIT(0x40000000); -	NV_WRITE_PIPE_INIT(0x40000000); -	NV_WRITE_PIPE_INIT(0x40000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x3f800000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x3f000000); -	NV_WRITE_PIPE_INIT(0x3f000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x3f800000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x3f800000); -	NV_WRITE_PIPE_INIT(0x3f800000); -	NV_WRITE_PIPE_INIT(0x3f800000); -	NV_WRITE_PIPE_INIT(0x3f800000); -	PIPE_INIT_END(0x6400); - -	PIPE_INIT(0x6800); -	for (i = 0; i < 162; i++) -		NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x3f800000); -	for (i = 0; i < 25; i++) -		NV_WRITE_PIPE_INIT(0x00000000); -	PIPE_INIT_END(0x6800); - -	PIPE_INIT(0x6c00); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0xbf800000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	PIPE_INIT_END(0x6c00); - -	PIPE_INIT(0x7000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x7149f2ca); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x7149f2ca); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x7149f2ca); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x7149f2ca); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x7149f2ca); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x7149f2ca); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x7149f2ca); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x00000000); -	NV_WRITE_PIPE_INIT(0x7149f2ca); -	for (i = 0; i < 35; i++) -		NV_WRITE_PIPE_INIT(0x00000000); -	PIPE_INIT_END(0x7000); - -	PIPE_INIT(0x7400); -	for (i = 0; i < 48; i++) -		NV_WRITE_PIPE_INIT(0x00000000); -	PIPE_INIT_END(0x7400); - -	PIPE_INIT(0x7800); -	for (i = 0; i < 48; i++) -		NV_WRITE_PIPE_INIT(0x00000000); -	PIPE_INIT_END(0x7800); - -	PIPE_INIT(0x4400); -	for (i = 0; i < 32; i++) -		NV_WRITE_PIPE_INIT(0x00000000); -	PIPE_INIT_END(0x4400); - -	PIPE_INIT(0x0000); -	for (i = 0; i < 16; i++) -		NV_WRITE_PIPE_INIT(0x00000000); -	PIPE_INIT_END(0x0000); - -	PIPE_INIT(0x0040); -	for (i = 0; i < 4; i++) -		NV_WRITE_PIPE_INIT(0x00000000); -	PIPE_INIT_END(0x0040); - -#undef PIPE_INIT -#undef PIPE_INIT_END -#undef NV_WRITE_PIPE_INIT -} -  static int nv10_graph_ctx_regs [] = {  NV10_PGRAPH_CTX_SWITCH1,  NV10_PGRAPH_CTX_SWITCH2, @@ -623,20 +385,269 @@ NV10_PGRAPH_DEBUG_4,  0x00400a04,  }; +struct graph_state { +	int nv10[sizeof(nv10_graph_ctx_regs)/sizeof(nv10_graph_ctx_regs[0])]; +	int nv17[sizeof(nv17_graph_ctx_regs)/sizeof(nv17_graph_ctx_regs[0])]; +	struct pipe_state pipe_state; +}; + +static void nv10_graph_save_pipe(struct nouveau_channel *chan) { +	struct drm_device *dev = chan->dev; +	struct drm_nouveau_private *dev_priv = dev->dev_private; +	struct graph_state* pgraph_ctx = chan->pgraph_ctx; +	struct pipe_state *fifo_pipe_state = &pgraph_ctx->pipe_state; +	int i; +#define PIPE_SAVE(addr) \ +	do { \ +		NV_WRITE(NV10_PGRAPH_PIPE_ADDRESS, addr); \ +		for (i=0; i < sizeof(fifo_pipe_state->pipe_##addr)/sizeof(fifo_pipe_state->pipe_##addr[0]); i++) \ +			fifo_pipe_state->pipe_##addr[i] = NV_READ(NV10_PGRAPH_PIPE_DATA); \ +	} while (0) + +	PIPE_SAVE(0x4400); +	PIPE_SAVE(0x0200); +	PIPE_SAVE(0x6400); +	PIPE_SAVE(0x6800); +	PIPE_SAVE(0x6c00); +	PIPE_SAVE(0x7000); +	PIPE_SAVE(0x7400); +	PIPE_SAVE(0x7800); +	PIPE_SAVE(0x0040); +	PIPE_SAVE(0x0000); + +#undef PIPE_SAVE +} + +static void nv10_graph_load_pipe(struct nouveau_channel *chan) { +	struct drm_device *dev = chan->dev; +	struct drm_nouveau_private *dev_priv = dev->dev_private; +	struct graph_state* pgraph_ctx = chan->pgraph_ctx; +	struct pipe_state *fifo_pipe_state = &pgraph_ctx->pipe_state; +	int i; +	uint32_t xfmode0, xfmode1; +#define PIPE_RESTORE(addr) \ +	do { \ +		NV_WRITE(NV10_PGRAPH_PIPE_ADDRESS, addr); \ +		for (i=0; i < sizeof(fifo_pipe_state->pipe_##addr)/sizeof(fifo_pipe_state->pipe_##addr[0]); i++) \ +			NV_WRITE(NV10_PGRAPH_PIPE_DATA, fifo_pipe_state->pipe_##addr[i]); \ +	} while (0) + + +	nouveau_wait_for_idle(dev); +	/* XXX check haiku comments */ +	xfmode0 = NV_READ(NV10_PGRAPH_XFMODE0); +	xfmode1 = NV_READ(NV10_PGRAPH_XFMODE1); +	NV_WRITE(NV10_PGRAPH_XFMODE0, 0x10000000); +	NV_WRITE(NV10_PGRAPH_XFMODE1, 0x00000000); +	NV_WRITE(NV10_PGRAPH_PIPE_ADDRESS, 0x000064c0); +	for (i = 0; i < 4; i++) +		NV_WRITE(NV10_PGRAPH_PIPE_DATA, 0x3f800000); +	for (i = 0; i < 4; i++) +		NV_WRITE(NV10_PGRAPH_PIPE_DATA, 0x00000000); + +	NV_WRITE(NV10_PGRAPH_PIPE_ADDRESS, 0x00006ab0); +	for (i = 0; i < 3; i++) +		NV_WRITE(NV10_PGRAPH_PIPE_DATA, 0x3f800000); + +	NV_WRITE(NV10_PGRAPH_PIPE_ADDRESS, 0x00006a80); +	for (i = 0; i < 3; i++) +		NV_WRITE(NV10_PGRAPH_PIPE_DATA, 0x00000000); + +	NV_WRITE(NV10_PGRAPH_PIPE_ADDRESS, 0x00000040); +	NV_WRITE(NV10_PGRAPH_PIPE_DATA, 0x00000008); + + +	PIPE_RESTORE(0x0200); +	nouveau_wait_for_idle(dev); + +	/* restore XFMODE */ +	NV_WRITE(NV10_PGRAPH_XFMODE0, xfmode0); +	NV_WRITE(NV10_PGRAPH_XFMODE1, xfmode1); +	PIPE_RESTORE(0x6400); +	PIPE_RESTORE(0x6800); +	PIPE_RESTORE(0x6c00); +	PIPE_RESTORE(0x7000); +	PIPE_RESTORE(0x7400); +	PIPE_RESTORE(0x7800); +	PIPE_RESTORE(0x4400); +	PIPE_RESTORE(0x0000); +	PIPE_RESTORE(0x0040); +	nouveau_wait_for_idle(dev); + +#undef PIPE_RESTORE +} + +static void nv10_graph_create_pipe(struct nouveau_channel *chan) { +	struct graph_state* pgraph_ctx = chan->pgraph_ctx; +	struct pipe_state *fifo_pipe_state = &pgraph_ctx->pipe_state; +	uint32_t *fifo_pipe_state_addr; +	int i; +#define PIPE_INIT(addr) \ +	do { \ +		fifo_pipe_state_addr = fifo_pipe_state->pipe_##addr; \ +	} while (0) +#define PIPE_INIT_END(addr) \ +	do { \ +		if (fifo_pipe_state_addr != \ +				sizeof(fifo_pipe_state->pipe_##addr)/sizeof(fifo_pipe_state->pipe_##addr[0]) + fifo_pipe_state->pipe_##addr) \ +			DRM_ERROR("incomplete pipe init for 0x%x :  %p/%p\n", addr, fifo_pipe_state_addr, \ +					sizeof(fifo_pipe_state->pipe_##addr)/sizeof(fifo_pipe_state->pipe_##addr[0]) + fifo_pipe_state->pipe_##addr); \ +	} while (0) +#define NV_WRITE_PIPE_INIT(value) *(fifo_pipe_state_addr++) = value + +	PIPE_INIT(0x0200); +	for (i = 0; i < 48; i++) +		NV_WRITE_PIPE_INIT(0x00000000); +	PIPE_INIT_END(0x0200); + +	PIPE_INIT(0x6400); +	for (i = 0; i < 211; i++) +		NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x3f800000); +	NV_WRITE_PIPE_INIT(0x40000000); +	NV_WRITE_PIPE_INIT(0x40000000); +	NV_WRITE_PIPE_INIT(0x40000000); +	NV_WRITE_PIPE_INIT(0x40000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x3f800000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x3f000000); +	NV_WRITE_PIPE_INIT(0x3f000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x3f800000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x3f800000); +	NV_WRITE_PIPE_INIT(0x3f800000); +	NV_WRITE_PIPE_INIT(0x3f800000); +	NV_WRITE_PIPE_INIT(0x3f800000); +	PIPE_INIT_END(0x6400); + +	PIPE_INIT(0x6800); +	for (i = 0; i < 162; i++) +		NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x3f800000); +	for (i = 0; i < 25; i++) +		NV_WRITE_PIPE_INIT(0x00000000); +	PIPE_INIT_END(0x6800); + +	PIPE_INIT(0x6c00); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0xbf800000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	PIPE_INIT_END(0x6c00); + +	PIPE_INIT(0x7000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x7149f2ca); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x7149f2ca); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x7149f2ca); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x7149f2ca); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x7149f2ca); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x7149f2ca); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x7149f2ca); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x00000000); +	NV_WRITE_PIPE_INIT(0x7149f2ca); +	for (i = 0; i < 35; i++) +		NV_WRITE_PIPE_INIT(0x00000000); +	PIPE_INIT_END(0x7000); + +	PIPE_INIT(0x7400); +	for (i = 0; i < 48; i++) +		NV_WRITE_PIPE_INIT(0x00000000); +	PIPE_INIT_END(0x7400); + +	PIPE_INIT(0x7800); +	for (i = 0; i < 48; i++) +		NV_WRITE_PIPE_INIT(0x00000000); +	PIPE_INIT_END(0x7800); + +	PIPE_INIT(0x4400); +	for (i = 0; i < 32; i++) +		NV_WRITE_PIPE_INIT(0x00000000); +	PIPE_INIT_END(0x4400); + +	PIPE_INIT(0x0000); +	for (i = 0; i < 16; i++) +		NV_WRITE_PIPE_INIT(0x00000000); +	PIPE_INIT_END(0x0000); + +	PIPE_INIT(0x0040); +	for (i = 0; i < 4; i++) +		NV_WRITE_PIPE_INIT(0x00000000); +	PIPE_INIT_END(0x0040); + +#undef PIPE_INIT +#undef PIPE_INIT_END +#undef NV_WRITE_PIPE_INIT +} +  static int nv10_graph_ctx_regs_find_offset(struct drm_device *dev, int reg)  { -	struct drm_nouveau_private *dev_priv = dev->dev_private; -	int i, j; +	int i;  	for (i = 0; i < sizeof(nv10_graph_ctx_regs)/sizeof(nv10_graph_ctx_regs[0]); i++) {  		if (nv10_graph_ctx_regs[i] == reg)  			return i;  	} -	if (dev_priv->chipset>=0x17) { -		for (j = 0; j < sizeof(nv17_graph_ctx_regs)/sizeof(nv17_graph_ctx_regs[0]); i++,j++) { -			if (nv17_graph_ctx_regs[j] == reg) -				return i; -		} +	DRM_ERROR("unknow offset nv10_ctx_regs %d\n", reg); +	return -1; +} + +static int nv17_graph_ctx_regs_find_offset(struct drm_device *dev, int reg) +{ +	int i; +	for (i = 0; i < sizeof(nv17_graph_ctx_regs)/sizeof(nv17_graph_ctx_regs[0]); i++) { +		if (nv17_graph_ctx_regs[i] == reg) +			return i;  	} +	DRM_ERROR("unknow offset nv17_ctx_regs %d\n", reg);  	return -1;  } @@ -644,13 +655,14 @@ int nv10_graph_load_context(struct nouveau_channel *chan)  {  	struct drm_device *dev = chan->dev;  	struct drm_nouveau_private *dev_priv = dev->dev_private; -	int i, j; +	struct graph_state* pgraph_ctx = chan->pgraph_ctx; +	int i;  	for (i = 0; i < sizeof(nv10_graph_ctx_regs)/sizeof(nv10_graph_ctx_regs[0]); i++) -		NV_WRITE(nv10_graph_ctx_regs[i], chan->pgraph_ctx[i]); +		NV_WRITE(nv10_graph_ctx_regs[i], pgraph_ctx->nv10[i]);  	if (dev_priv->chipset>=0x17) { -		for (j = 0; j < sizeof(nv17_graph_ctx_regs)/sizeof(nv17_graph_ctx_regs[0]); i++,j++) -			NV_WRITE(nv17_graph_ctx_regs[j], chan->pgraph_ctx[i]); +		for (i = 0; i < sizeof(nv17_graph_ctx_regs)/sizeof(nv17_graph_ctx_regs[0]); i++) +			NV_WRITE(nv17_graph_ctx_regs[i], pgraph_ctx->nv17[i]);  	}  	nv10_graph_load_pipe(chan); @@ -662,13 +674,14 @@ int nv10_graph_save_context(struct nouveau_channel *chan)  {  	struct drm_device *dev = chan->dev;  	struct drm_nouveau_private *dev_priv = dev->dev_private; -	int i, j; +	struct graph_state* pgraph_ctx = chan->pgraph_ctx; +	int i;  	for (i = 0; i < sizeof(nv10_graph_ctx_regs)/sizeof(nv10_graph_ctx_regs[0]); i++) -		chan->pgraph_ctx[i] = NV_READ(nv10_graph_ctx_regs[i]); +		pgraph_ctx->nv10[i] = NV_READ(nv10_graph_ctx_regs[i]);  	if (dev_priv->chipset>=0x17) { -		for (j = 0; j < sizeof(nv17_graph_ctx_regs)/sizeof(nv17_graph_ctx_regs[0]); i++,j++) -			chan->pgraph_ctx[i] = NV_READ(nv17_graph_ctx_regs[j]); +		for (i = 0; i < sizeof(nv17_graph_ctx_regs)/sizeof(nv17_graph_ctx_regs[0]); i++) +			pgraph_ctx->nv17[i] = NV_READ(nv17_graph_ctx_regs[i]);  	}  	nv10_graph_save_pipe(chan); @@ -700,7 +713,7 @@ void nouveau_nv10_context_switch(struct drm_device *dev)  	next = dev_priv->fifos[chid];  	if (!next) { -		DRM_DEBUG("Invalid next channel\n"); +		DRM_ERROR("Invalid next channel\n");  		return;  	} @@ -708,7 +721,7 @@ void nouveau_nv10_context_switch(struct drm_device *dev)  	last = dev_priv->fifos[chid];  	if (!last) { -		DRM_DEBUG("WARNING: Invalid last channel, switch to %x\n", +		DRM_INFO("WARNING: Invalid last channel, switch to %x\n",  		          next->id);  	} else {  		DRM_DEBUG("NV: PGRAPH context switch interrupt channel %x -> %x\n", @@ -737,16 +750,27 @@ void nouveau_nv10_context_switch(struct drm_device *dev)  #define NV_WRITE_CTX(reg, val) do { \  	int offset = nv10_graph_ctx_regs_find_offset(dev, reg); \  	if (offset > 0) \ -		chan->pgraph_ctx[offset] = val; \ +		pgraph_ctx->nv10[offset] = val; \ +	} while (0) + +#define NV17_WRITE_CTX(reg, val) do { \ +	int offset = nv17_graph_ctx_regs_find_offset(dev, reg); \ +	if (offset > 0) \ +		pgraph_ctx->nv17[offset] = val; \  	} while (0)  int nv10_graph_create_context(struct nouveau_channel *chan) {  	struct drm_device *dev = chan->dev;  	struct drm_nouveau_private *dev_priv = dev->dev_private; +	struct graph_state* pgraph_ctx;  	DRM_DEBUG("nv10_graph_context_create %d\n", chan->id); -	memset(chan->pgraph_ctx, 0, sizeof(chan->pgraph_ctx)); +	chan->pgraph_ctx = pgraph_ctx = drm_calloc(1, sizeof(*pgraph_ctx), +					      DRM_MEM_DRIVER); + +	if (pgraph_ctx == NULL) +		return -ENOMEM;  	/* mmio trace suggest that should be done in ddx with methods/objects */  #if 0 @@ -786,12 +810,12 @@ int nv10_graph_create_context(struct nouveau_channel *chan) {  	NV_WRITE_CTX(0x00400e34, 0x00080008);  	if (dev_priv->chipset>=0x17) {  		/* is it really needed ??? */ -		NV_WRITE_CTX(NV10_PGRAPH_DEBUG_4, NV_READ(NV10_PGRAPH_DEBUG_4)); -		NV_WRITE_CTX(0x004006b0, NV_READ(0x004006b0)); -		NV_WRITE_CTX(0x00400eac, 0x0fff0000); -		NV_WRITE_CTX(0x00400eb0, 0x0fff0000); -		NV_WRITE_CTX(0x00400ec0, 0x00000080); -		NV_WRITE_CTX(0x00400ed0, 0x00000080); +		NV17_WRITE_CTX(NV10_PGRAPH_DEBUG_4, NV_READ(NV10_PGRAPH_DEBUG_4)); +		NV17_WRITE_CTX(0x004006b0, NV_READ(0x004006b0)); +		NV17_WRITE_CTX(0x00400eac, 0x0fff0000); +		NV17_WRITE_CTX(0x00400eb0, 0x0fff0000); +		NV17_WRITE_CTX(0x00400ec0, 0x00000080); +		NV17_WRITE_CTX(0x00400ed0, 0x00000080);  	}  	NV_WRITE_CTX(NV10_PGRAPH_CTX_USER, chan->id << 24); @@ -803,9 +827,17 @@ void nv10_graph_destroy_context(struct nouveau_channel *chan)  {  	struct drm_device *dev = chan->dev;  	struct drm_nouveau_private *dev_priv = dev->dev_private; +	struct graph_state* pgraph_ctx = chan->pgraph_ctx;  	int chid; + +	drm_free(pgraph_ctx, sizeof(*pgraph_ctx), DRM_MEM_DRIVER); +	chan->pgraph_ctx = NULL; +  	chid = (NV_READ(NV10_PGRAPH_CTX_USER) >> 24) & (nouveau_fifo_number(dev)-1); +	/* This code seems to corrupt the 3D pipe, but blob seems to do similar things ???? +	 */ +#if 0  	/* does this avoid a potential context switch while we are written graph  	 * reg, or we should mask graph interrupt ???  	 */ @@ -814,10 +846,16 @@ void nv10_graph_destroy_context(struct nouveau_channel *chan)  		DRM_INFO("cleanning a channel with graph in current context\n");  		nouveau_wait_for_idle(dev);  		DRM_INFO("reseting current graph context\n"); -		nv10_graph_create_context(chan); +		/* can't be call here because of dynamic mem alloc */ +		//nv10_graph_create_context(chan);  		nv10_graph_load_context(chan);  	} -	NV_WRITE(NV04_PGRAPH_FIFO,0x1); +	NV_WRITE(NV04_PGRAPH_FIFO, 0x1); +#else +	if (chid == chan->id) { +		DRM_INFO("cleanning a channel with graph in current context\n"); +	} +#endif  }  int nv10_graph_init(struct drm_device *dev) { diff --git a/shared-core/nv20_graph.c b/shared-core/nv20_graph.c index c163daf9..ae0e0858 100644 --- a/shared-core/nv20_graph.c +++ b/shared-core/nv20_graph.c @@ -1,147 +1,3184 @@ -/*  - * Copyright 2007 Matthieu CASTET <castet.matthieu@free.fr> - * All Rights Reserved. +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" +#include "nouveau_drm.h" + +/* + * NV20 + * ----- + * There are 3 families : + * NV20 is 0x10de:0x020* + * NV25/28 is 0x10de:0x025* / 0x10de:0x028* + * NV2A is 0x10de:0x02A0   * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: + * NV30 + * ----- + * There are 3 families : + * NV30/31 is 0x10de:0x030* / 0x10de:0x031* + * NV34 is 0x10de:0x032* + * NV35/36 is 0x10de:0x033* / 0x10de:0x034*   * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. + * Not seen in the wild, no dumps (probably NV35) : + * NV37 is 0x10de:0x00fc, 0x10de:0x00fd + * NV38 is 0x10de:0x0333, 0x10de:0x00fe   * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL - * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE.   */ -#include "drmP.h" -#include "drm.h" -#include "nouveau_drv.h" -#include "nouveau_drm.h" +#define NV20_GRCTX_SIZE (3580*4) +#define NV25_GRCTX_SIZE (3529*4) +#define NV2A_GRCTX_SIZE (3500*4) -#define NV20_GRCTX_SIZE (3529*4) +#define NV30_31_GRCTX_SIZE (22392) +#define NV34_GRCTX_SIZE    (18140) +#define NV35_36_GRCTX_SIZE (22396) -int nv20_graph_create_context(struct nouveau_channel *chan) { -	struct drm_device *dev = chan->dev; +static void nv20_graph_context_init(struct drm_device *dev, +                                    struct nouveau_gpuobj *ctx) +{  	struct drm_nouveau_private *dev_priv = dev->dev_private; -	unsigned int ctx_size = NV20_GRCTX_SIZE; -	int ret; +	int i; +/* +write32 #1 block at +0x00740adc NV_PRAMIN+0x40adc of 3369 (0xd29) elements: ++0x00740adc: ffff0000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740afc: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740b1c: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740b3c: 00000000 0fff0000 0fff0000 00000000 00000000 00000000 00000000 00000000 ++0x00740b5c: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740b7c: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740b9c: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740bbc: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740bdc: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740bfc: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 -	if ((ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, ctx_size, 16, -					  NVOBJ_FLAG_ZERO_ALLOC, -					  &chan->ramin_grctx))) -		return ret; ++0x00740c1c: 00000101 00000000 00000000 00000000 00000000 00000111 00000000 00000000 ++0x00740c3c: 00000000 00000000 00000000 44400000 00000000 00000000 00000000 00000000 ++0x00740c5c: 00000000 00000000 00000000 00000000 00000000 00000000 00030303 00030303 ++0x00740c7c: 00030303 00030303 00000000 00000000 00000000 00000000 00080000 00080000 ++0x00740c9c: 00080000 00080000 00000000 00000000 01012000 01012000 01012000 01012000 ++0x00740cbc: 000105b8 000105b8 000105b8 000105b8 00080008 00080008 00080008 00080008 ++0x00740cdc: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740cfc: 07ff0000 07ff0000 07ff0000 07ff0000 07ff0000 07ff0000 07ff0000 07ff0000 ++0x00740d1c: 07ff0000 07ff0000 07ff0000 07ff0000 07ff0000 07ff0000 07ff0000 07ff0000 ++0x00740d3c: 00000000 00000000 4b7fffff 00000000 00000000 00000000 00000000 00000000 -	/* Initialise default context values */ -	INSTANCE_WR(chan->ramin_grctx->gpuobj, 10, chan->id<<24); /* CTX_USER */ ++0x00740d5c: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740d7c: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740d9c: 00000001 00000000 00004000 00000000 00000000 00000001 00000000 00040000 ++0x00740dbc: 00010000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740ddc: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 +... +*/ +	INSTANCE_WR(ctx, (0x33c/4)+0, 0xffff0000); +	INSTANCE_WR(ctx, (0x33c/4)+25, 0x0fff0000); +	INSTANCE_WR(ctx, (0x33c/4)+26, 0x0fff0000); +	INSTANCE_WR(ctx, (0x33c/4)+80, 0x00000101); +	INSTANCE_WR(ctx, (0x33c/4)+85, 0x00000111); +	INSTANCE_WR(ctx, (0x33c/4)+91, 0x44400000); +	for (i = 0; i < 4; ++i) +		INSTANCE_WR(ctx, (0x33c/4)+102+i, 0x00030303); +	for (i = 0; i < 4; ++i) +		INSTANCE_WR(ctx, (0x33c/4)+110+i, 0x00080000); +	for (i = 0; i < 4; ++i) +		INSTANCE_WR(ctx, (0x33c/4)+116+i, 0x01012000); +	for (i = 0; i < 4; ++i) +		INSTANCE_WR(ctx, (0x33c/4)+120+i, 0x000105b8); +	for (i = 0; i < 4; ++i) +		INSTANCE_WR(ctx, (0x33c/4)+124+i, 0x00080008); +	for (i = 0; i < 16; ++i) +		INSTANCE_WR(ctx, (0x33c/4)+136+i, 0x07ff0000); +	INSTANCE_WR(ctx, (0x33c/4)+154, 0x4b7fffff); +	INSTANCE_WR(ctx, (0x33c/4)+176, 0x00000001); +	INSTANCE_WR(ctx, (0x33c/4)+178, 0x00004000); +	INSTANCE_WR(ctx, (0x33c/4)+181, 0x00000001); +	INSTANCE_WR(ctx, (0x33c/4)+183, 0x00040000); +	INSTANCE_WR(ctx, (0x33c/4)+184, 0x00010000); -	INSTANCE_WR(dev_priv->ctx_table->gpuobj, chan->id, -		    chan->ramin_grctx->instance >> 4); -	return 0; +/* +... ++0x0074239c: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x007423bc: 10700ff9 0436086c 000c001b 00000000 10700ff9 0436086c 000c001b 00000000 ++0x007423dc: 10700ff9 0436086c 000c001b 00000000 10700ff9 0436086c 000c001b 00000000 ++0x007423fc: 10700ff9 0436086c 000c001b 00000000 10700ff9 0436086c 000c001b 00000000 +... ++0x00742bdc: 10700ff9 0436086c 000c001b 00000000 10700ff9 0436086c 000c001b 00000000 ++0x00742bfc: 10700ff9 0436086c 000c001b 00000000 10700ff9 0436086c 000c001b 00000000 ++0x00742c1c: 10700ff9 0436086c 000c001b 00000000 10700ff9 0436086c 000c001b 00000000 ++0x00742c3c: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 +... +*/ +	for (i = 0; i < 0x880; i += 0x10) { +		INSTANCE_WR(ctx, ((0x1c1c + i)/4)+0, 0x10700ff9); +		INSTANCE_WR(ctx, ((0x1c1c + i)/4)+1, 0x0436086c); +		INSTANCE_WR(ctx, ((0x1c1c + i)/4)+2, 0x000c001b); +	} + +/* +write32 #1 block at +0x00742fbc NV_PRAMIN+0x42fbc of 4 (0x4) elements: ++0x00742fbc: 3f800000 00000000 00000000 00000000 +*/ +	INSTANCE_WR(ctx, (0x281c/4), 0x3f800000); + +/* +write32 #1 block at +0x00742ffc NV_PRAMIN+0x42ffc of 12 (0xc) elements: ++0x00742ffc: 40000000 3f800000 3f000000 00000000 40000000 3f800000 00000000 bf800000 ++0x0074301c: 00000000 bf800000 00000000 00000000 +*/ +	INSTANCE_WR(ctx, (0x285c/4)+0, 0x40000000); +	INSTANCE_WR(ctx, (0x285c/4)+1, 0x3f800000); +	INSTANCE_WR(ctx, (0x285c/4)+2, 0x3f000000); +	INSTANCE_WR(ctx, (0x285c/4)+4, 0x40000000); +	INSTANCE_WR(ctx, (0x285c/4)+5, 0x3f800000); +	INSTANCE_WR(ctx, (0x285c/4)+7, 0xbf800000); +	INSTANCE_WR(ctx, (0x285c/4)+9, 0xbf800000); + +/* +write32 #1 block at +0x00742fcc NV_PRAMIN+0x42fcc of 4 (0x4) elements: ++0x00742fcc: 00000000 3f800000 00000000 00000000 +*/ +	INSTANCE_WR(ctx, (0x282c/4)+1, 0x3f800000); + +/* +write32 #1 block at +0x0074302c NV_PRAMIN+0x4302c of 4 (0x4) elements: ++0x0074302c: 00000000 00000000 00000000 00000000 +write32 #1 block at +0x00743c9c NV_PRAMIN+0x43c9c of 4 (0x4) elements: ++0x00743c9c: 00000000 00000000 00000000 00000000 +write32 #1 block at +0x00743c3c NV_PRAMIN+0x43c3c of 8 (0x8) elements: ++0x00743c3c: 00000000 00000000 000fe000 00000000 00000000 00000000 00000000 00000000 +*/ +	INSTANCE_WR(ctx, (0x349c/4)+2, 0x000fe000); + +/* +write32 #1 block at +0x00743c6c NV_PRAMIN+0x43c6c of 4 (0x4) elements: ++0x00743c6c: 00000000 00000000 00000000 00000000 +write32 #1 block at +0x00743ccc NV_PRAMIN+0x43ccc of 4 (0x4) elements: ++0x00743ccc: 00000000 000003f8 00000000 00000000 +*/ +	INSTANCE_WR(ctx, (0x352c/4)+1, 0x000003f8); + +/* write32 #1 NV_PRAMIN+0x43ce0 <- 0x002fe000 */ +	INSTANCE_WR(ctx, 0x3540/4, 0x002fe000); + +/* +write32 #1 block at +0x00743cfc NV_PRAMIN+0x43cfc of 8 (0x8) elements: ++0x00743cfc: 001c527c 001c527c 001c527c 001c527c 001c527c 001c527c 001c527c 001c527c +*/ +	for (i = 0; i < 8; ++i) +		INSTANCE_WR(ctx, (0x355c/4)+i, 0x001c527c);  } -void nv20_graph_destroy_context(struct nouveau_channel *chan) { -	struct drm_device *dev = chan->dev; +static void nv2a_graph_context_init(struct drm_device *dev, +                                    struct nouveau_gpuobj *ctx) +{  	struct drm_nouveau_private *dev_priv = dev->dev_private; +	int i; -	nouveau_gpuobj_ref_del(dev, &chan->ramin_grctx); +	INSTANCE_WR(ctx, 0x33c/4, 0xffff0000); +	for(i = 0x3a0; i< 0x3a8; i += 4) +		INSTANCE_WR(ctx, i/4, 0x0fff0000); +	INSTANCE_WR(ctx, 0x47c/4, 0x00000101); +	INSTANCE_WR(ctx, 0x490/4, 0x00000111); +	INSTANCE_WR(ctx, 0x4a8/4, 0x44400000); +	for(i = 0x4d4; i< 0x4e4; i += 4) +		INSTANCE_WR(ctx, i/4, 0x00030303); +	for(i = 0x4f4; i< 0x504; i += 4) +		INSTANCE_WR(ctx, i/4, 0x00080000); +	for(i = 0x50c; i< 0x51c; i += 4) +		INSTANCE_WR(ctx, i/4, 0x01012000); +	for(i = 0x51c; i< 0x52c; i += 4) +		INSTANCE_WR(ctx, i/4, 0x000105b8); +	for(i = 0x52c; i< 0x53c; i += 4) +		INSTANCE_WR(ctx, i/4, 0x00080008); +	for(i = 0x55c; i< 0x59c; i += 4) +		INSTANCE_WR(ctx, i/4, 0x07ff0000); +	INSTANCE_WR(ctx, 0x5a4/4, 0x4b7fffff); +	INSTANCE_WR(ctx, 0x5fc/4, 0x00000001); +	INSTANCE_WR(ctx, 0x604/4, 0x00004000); +	INSTANCE_WR(ctx, 0x610/4, 0x00000001); +	INSTANCE_WR(ctx, 0x618/4, 0x00040000); +	INSTANCE_WR(ctx, 0x61c/4, 0x00010000); -	INSTANCE_WR(dev_priv->ctx_table->gpuobj, chan->id, 0); +	for (i=0x1a9c; i <= 0x22fc/4; i += 32) { +		INSTANCE_WR(ctx, i/4    , 0x10700ff9); +		INSTANCE_WR(ctx, i/4 + 1, 0x0436086c); +		INSTANCE_WR(ctx, i/4 + 2, 0x000c001b); +	} + +	INSTANCE_WR(ctx, 0x269c/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x26b0/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x26dc/4, 0x40000000); +	INSTANCE_WR(ctx, 0x26e0/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x26e4/4, 0x3f000000); +	INSTANCE_WR(ctx, 0x26ec/4, 0x40000000); +	INSTANCE_WR(ctx, 0x26f0/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x26f8/4, 0xbf800000); +	INSTANCE_WR(ctx, 0x2700/4, 0xbf800000); +	INSTANCE_WR(ctx, 0x3024/4, 0x000fe000); +	INSTANCE_WR(ctx, 0x30a0/4, 0x000003f8); +	INSTANCE_WR(ctx, 0x33fc/4, 0x002fe000); +	for(i = 0x341c; i< 0x343c; i += 4) +		INSTANCE_WR(ctx, i/4, 0x001c527c);  } -static void nv20_graph_rdi(struct drm_device *dev) { +static void nv25_graph_context_init(struct drm_device *dev, +                                    struct nouveau_gpuobj *ctx) +{  	struct drm_nouveau_private *dev_priv = dev->dev_private;  	int i; +/* +write32 #1 block at +0x00740a7c NV_PRAMIN.GRCTX0+0x35c of 173 (0xad) elements: ++0x00740a7c: ffff0000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740a9c: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740abc: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740adc: 00000000 0fff0000 0fff0000 00000000 00000000 00000000 00000000 00000000 ++0x00740afc: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740b1c: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740b3c: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740b5c: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 -	NV_WRITE(NV10_PGRAPH_RDI_INDEX, 0x2c80000); -	for (i = 0; i < 32; i++) -		NV_WRITE(NV10_PGRAPH_RDI_DATA, 0); ++0x00740b7c: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740b9c: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740bbc: 00000101 00000000 00000000 00000000 00000000 00000111 00000000 00000000 ++0x00740bdc: 00000000 00000000 00000000 00000080 ffff0000 00000001 00000000 00000000 ++0x00740bfc: 00000000 00000000 44400000 00000000 00000000 00000000 00000000 00000000 ++0x00740c1c: 4b800000 00000000 00000000 00000000 00000000 00030303 00030303 00030303 ++0x00740c3c: 00030303 00000000 00000000 00000000 00000000 00080000 00080000 00080000 ++0x00740c5c: 00080000 00000000 00000000 01012000 01012000 01012000 01012000 000105b8 -	nouveau_wait_for_idle(dev); ++0x00740c7c: 000105b8 000105b8 000105b8 00080008 00080008 00080008 00080008 00000000 ++0x00740c9c: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 07ff0000 ++0x00740cbc: 07ff0000 07ff0000 07ff0000 07ff0000 07ff0000 07ff0000 07ff0000 07ff0000 ++0x00740cdc: 07ff0000 07ff0000 07ff0000 07ff0000 07ff0000 07ff0000 07ff0000 00000000 ++0x00740cfc: 00000000 4b7fffff 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740d1c: 00000000 00000000 00000000 00000000 00000000 +*/ +	INSTANCE_WR(ctx, (0x35c/4)+0, 0xffff0000); +	INSTANCE_WR(ctx, (0x35c/4)+25, 0x0fff0000); +	INSTANCE_WR(ctx, (0x35c/4)+26, 0x0fff0000); +	INSTANCE_WR(ctx, (0x35c/4)+80, 0x00000101); +	INSTANCE_WR(ctx, (0x35c/4)+85, 0x00000111); +	INSTANCE_WR(ctx, (0x35c/4)+91, 0x00000080); +	INSTANCE_WR(ctx, (0x35c/4)+92, 0xffff0000); +	INSTANCE_WR(ctx, (0x35c/4)+93, 0x00000001); +	INSTANCE_WR(ctx, (0x35c/4)+98, 0x44400000); +	INSTANCE_WR(ctx, (0x35c/4)+104, 0x4b800000); +	INSTANCE_WR(ctx, (0x35c/4)+109, 0x00030303); +	INSTANCE_WR(ctx, (0x35c/4)+110, 0x00030303); +	INSTANCE_WR(ctx, (0x35c/4)+111, 0x00030303); +	INSTANCE_WR(ctx, (0x35c/4)+112, 0x00030303); +	INSTANCE_WR(ctx, (0x35c/4)+117, 0x00080000); +	INSTANCE_WR(ctx, (0x35c/4)+118, 0x00080000); +	INSTANCE_WR(ctx, (0x35c/4)+119, 0x00080000); +	INSTANCE_WR(ctx, (0x35c/4)+120, 0x00080000); +	INSTANCE_WR(ctx, (0x35c/4)+123, 0x01012000); +	INSTANCE_WR(ctx, (0x35c/4)+124, 0x01012000); +	INSTANCE_WR(ctx, (0x35c/4)+125, 0x01012000); +	INSTANCE_WR(ctx, (0x35c/4)+126, 0x01012000); +	INSTANCE_WR(ctx, (0x35c/4)+127, 0x000105b8); +	INSTANCE_WR(ctx, (0x35c/4)+128, 0x000105b8); +	INSTANCE_WR(ctx, (0x35c/4)+129, 0x000105b8); +	INSTANCE_WR(ctx, (0x35c/4)+130, 0x000105b8); +	INSTANCE_WR(ctx, (0x35c/4)+131, 0x00080008); +	INSTANCE_WR(ctx, (0x35c/4)+132, 0x00080008); +	INSTANCE_WR(ctx, (0x35c/4)+133, 0x00080008); +	INSTANCE_WR(ctx, (0x35c/4)+134, 0x00080008); +	for (i=0; i<16; ++i) +		INSTANCE_WR(ctx, (0x35c/4)+143+i, 0x07ff0000); +	INSTANCE_WR(ctx, (0x35c/4)+161, 0x4b7fffff); + +/* +write32 #1 block at +0x00740d34 NV_PRAMIN.GRCTX0+0x614 of 3136 (0xc40) elements: ++0x00740d34: 00000000 00000000 00000000 00000080 30201000 70605040 b0a09080 f0e0d0c0 ++0x00740d54: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00740d74: 00000000 00000000 00000000 00000000 00000001 00000000 00004000 00000000 ++0x00740d94: 00000000 00000001 00000000 00040000 00010000 00000000 00000000 00000000 ++0x00740db4: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 +... ++0x00742214: 00000000 00000000 00000000 00000000 10700ff9 0436086c 000c001b 00000000 ++0x00742234: 10700ff9 0436086c 000c001b 00000000 10700ff9 0436086c 000c001b 00000000 ++0x00742254: 10700ff9 0436086c 000c001b 00000000 10700ff9 0436086c 000c001b 00000000 ++0x00742274: 10700ff9 0436086c 000c001b 00000000 10700ff9 0436086c 000c001b 00000000 +... ++0x00742a34: 10700ff9 0436086c 000c001b 00000000 10700ff9 0436086c 000c001b 00000000 ++0x00742a54: 10700ff9 0436086c 000c001b 00000000 10700ff9 0436086c 000c001b 00000000 ++0x00742a74: 10700ff9 0436086c 000c001b 00000000 10700ff9 0436086c 000c001b 00000000 ++0x00742a94: 10700ff9 0436086c 000c001b 00000000 00000000 00000000 00000000 00000000 ++0x00742ab4: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ++0x00742ad4: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 +*/ +	INSTANCE_WR(ctx, (0x614/4)+3, 0x00000080); +	INSTANCE_WR(ctx, (0x614/4)+4, 0x30201000); +	INSTANCE_WR(ctx, (0x614/4)+5, 0x70605040); +	INSTANCE_WR(ctx, (0x614/4)+6, 0xb0a09080); +	INSTANCE_WR(ctx, (0x614/4)+7, 0xf0e0d0c0); +	INSTANCE_WR(ctx, (0x614/4)+20, 0x00000001); +	INSTANCE_WR(ctx, (0x614/4)+22, 0x00004000); +	INSTANCE_WR(ctx, (0x614/4)+25, 0x00000001); +	INSTANCE_WR(ctx, (0x614/4)+27, 0x00040000); +	INSTANCE_WR(ctx, (0x614/4)+28, 0x00010000); +	for (i=0; i < 0x880/4; i+=4) { +		INSTANCE_WR(ctx, (0x1b04/4)+i+0, 0x10700ff9); +		INSTANCE_WR(ctx, (0x1b04/4)+i+1, 0x0436086c); +		INSTANCE_WR(ctx, (0x1b04/4)+i+2, 0x000c001b); +	} + +/* +write32 #1 block at +0x00742e24 NV_PRAMIN.GRCTX0+0x2704 of 4 (0x4) elements: ++0x00742e24: 3f800000 00000000 00000000 00000000 +*/ +	INSTANCE_WR(ctx, (0x2704/4), 0x3f800000); + +/* +write32 #1 block at +0x00742e64 NV_PRAMIN.GRCTX0+0x2744 of 12 (0xc) elements: ++0x00742e64: 40000000 3f800000 3f000000 00000000 40000000 3f800000 00000000 bf800000 ++0x00742e84: 00000000 bf800000 00000000 00000000 +*/ +	INSTANCE_WR(ctx, (0x2744/4)+0, 0x40000000); +	INSTANCE_WR(ctx, (0x2744/4)+1, 0x3f800000); +	INSTANCE_WR(ctx, (0x2744/4)+2, 0x3f000000); +	INSTANCE_WR(ctx, (0x2744/4)+4, 0x40000000); +	INSTANCE_WR(ctx, (0x2744/4)+5, 0x3f800000); +	INSTANCE_WR(ctx, (0x2744/4)+7, 0xbf800000); +	INSTANCE_WR(ctx, (0x2744/4)+9, 0xbf800000); + +/* +write32 #1 block at +0x00742e34 NV_PRAMIN.GRCTX0+0x2714 of 4 (0x4) elements: ++0x00742e34: 00000000 3f800000 00000000 00000000 +*/ +	INSTANCE_WR(ctx, (0x2714/4)+1, 0x3f800000); + +/* +write32 #1 block at +0x00742e94 NV_PRAMIN.GRCTX0+0x2774 of 4 (0x4) elements: ++0x00742e94: 00000000 00000000 00000000 00000000 +write32 #1 block at +0x00743804 NV_PRAMIN.GRCTX0+0x30e4 of 4 (0x4) elements: ++0x00743804: 00000000 00000000 00000000 00000000 +write32 #1 block at +0x007437a4 NV_PRAMIN.GRCTX0+0x3084 of 8 (0x8) elements: ++0x007437a4: 00000000 00000000 000fe000 00000000 00000000 00000000 00000000 00000000 +*/ +	INSTANCE_WR(ctx, (0x3084/4)+2, 0x000fe000); + +/* +write32 #1 block at +0x007437d4 NV_PRAMIN.GRCTX0+0x30b4 of 4 (0x4) elements: ++0x007437d4: 00000000 00000000 00000000 00000000 +write32 #1 block at +0x00743824 NV_PRAMIN.GRCTX0+0x3104 of 4 (0x4) elements: ++0x00743824: 00000000 000003f8 00000000 00000000 +*/ +	INSTANCE_WR(ctx, (0x3104/4)+1, 0x000003f8); + +/* write32 #1 NV_PRAMIN.GRCTX0+0x3468 <- 0x002fe000 */ +	INSTANCE_WR(ctx, 0x3468/4, 0x002fe000); + +/* +write32 #1 block at +0x00743ba4 NV_PRAMIN.GRCTX0+0x3484 of 8 (0x8) elements: ++0x00743ba4: 001c527c 001c527c 001c527c 001c527c 001c527c 001c527c 001c527c 001c527c +*/ +	for (i=0; i<8; ++i) +		INSTANCE_WR(ctx, (0x3484/4)+i, 0x001c527c);  } -/* Save current context (from PGRAPH) into the channel's context - */ -int nv20_graph_save_context(struct nouveau_channel *chan) { -	struct drm_device *dev = chan->dev; +static void nv30_31_graph_context_init(struct drm_device *dev, +                                       struct nouveau_gpuobj *ctx) +{  	struct drm_nouveau_private *dev_priv = dev->dev_private; -	uint32_t instance; +	int i; -	instance = INSTANCE_RD(dev_priv->ctx_table->gpuobj, chan->id); -	if (!instance) { -		return -EINVAL; -	} -	if (instance != (chan->ramin_grctx->instance >> 4)) -		DRM_ERROR("nv20_graph_save_context : bad instance\n"); +	INSTANCE_WR(ctx, 0x410/4, 0x00000101); +	INSTANCE_WR(ctx, 0x424/4, 0x00000111); +	INSTANCE_WR(ctx, 0x428/4, 0x00000060); +	INSTANCE_WR(ctx, 0x444/4, 0x00000080); +	INSTANCE_WR(ctx, 0x448/4, 0xffff0000); +	INSTANCE_WR(ctx, 0x44c/4, 0x00000001); +	INSTANCE_WR(ctx, 0x460/4, 0x44400000); +	INSTANCE_WR(ctx, 0x48c/4, 0xffff0000); +	for(i = 0x4e0; i< 0x4e8; i += 4) +		INSTANCE_WR(ctx, i/4, 0x0fff0000); +	INSTANCE_WR(ctx, 0x4ec/4, 0x00011100); +	for(i = 0x508; i< 0x548; i += 4) +		INSTANCE_WR(ctx, i/4, 0x07ff0000); +	INSTANCE_WR(ctx, 0x550/4, 0x4b7fffff); +	INSTANCE_WR(ctx, 0x58c/4, 0x00000080); +	INSTANCE_WR(ctx, 0x590/4, 0x30201000); +	INSTANCE_WR(ctx, 0x594/4, 0x70605040); +	INSTANCE_WR(ctx, 0x598/4, 0xb8a89888); +	INSTANCE_WR(ctx, 0x59c/4, 0xf8e8d8c8); +	INSTANCE_WR(ctx, 0x5b0/4, 0xb0000000); +	for(i = 0x600; i< 0x640; i += 4) +		INSTANCE_WR(ctx, i/4, 0x00010588); +	for(i = 0x640; i< 0x680; i += 4) +		INSTANCE_WR(ctx, i/4, 0x00030303); +	for(i = 0x6c0; i< 0x700; i += 4) +		INSTANCE_WR(ctx, i/4, 0x0008aae4); +	for(i = 0x700; i< 0x740; i += 4) +		INSTANCE_WR(ctx, i/4, 0x01012000); +	for(i = 0x740; i< 0x780; i += 4) +		INSTANCE_WR(ctx, i/4, 0x00080008); +	INSTANCE_WR(ctx, 0x85c/4, 0x00040000); +	INSTANCE_WR(ctx, 0x860/4, 0x00010000); +	for(i = 0x864; i< 0x874; i += 4) +		INSTANCE_WR(ctx, i/4, 0x00040004); +	INSTANCE_WR(ctx, 0x1f18/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f1c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f20/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f28/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f2c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f30/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f38/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f3c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f40/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f48/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f4c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f50/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f58/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f5c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f60/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f68/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f6c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f70/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f78/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f7c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f80/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f88/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f8c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f90/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f98/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f9c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1fa0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1fa8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1fac/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1fb0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1fb8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1fbc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1fc0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1fc8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1fcc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1fd0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1fd8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1fdc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1fe0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1fe8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1fec/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1ff0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1ff8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1ffc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2000/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2008/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x200c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2010/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2018/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x201c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2020/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2028/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x202c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2030/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2038/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x203c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2040/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2048/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x204c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2050/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2058/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x205c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2060/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2068/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x206c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2070/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2078/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x207c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2080/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2088/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x208c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2090/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2098/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x209c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x20a0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x20a8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x20ac/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x20b0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x20b8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x20bc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x20c0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x20c8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x20cc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x20d0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x20d8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x20dc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x20e0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x20e8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x20ec/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x20f0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x20f8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x20fc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2100/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2108/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x210c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2110/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2118/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x211c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2120/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2128/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x212c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2130/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2138/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x213c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2140/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2148/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x214c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2150/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2158/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x215c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2160/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2168/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x216c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2170/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2178/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x217c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2180/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2188/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x218c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2190/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2198/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x219c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x21a0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x21a8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x21ac/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x21b0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x21b8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x21bc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x21c0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x21c8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x21cc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x21d0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x21d8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x21dc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x21e0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x21e8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x21ec/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x21f0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x21f8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x21fc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2200/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2208/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x220c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2210/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2218/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x221c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2220/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2228/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x222c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2230/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2238/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x223c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2240/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2248/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x224c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2250/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2258/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x225c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2260/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2268/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x226c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2270/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2278/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x227c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2280/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2288/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x228c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2290/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2298/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x229c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x22a0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x22a8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x22ac/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x22b0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x22b8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x22bc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x22c0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x22c8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x22cc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x22d0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x22d8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x22dc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x22e0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x22e8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x22ec/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x22f0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x22f8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x22fc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2300/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2308/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x230c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2310/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2318/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x231c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2320/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2328/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x232c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2330/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2338/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x233c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2340/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2348/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x234c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2350/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2358/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x235c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2360/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2368/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x236c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2370/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2378/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x237c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2380/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2388/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x238c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2390/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2398/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x239c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x23a0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x23a8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x23ac/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x23b0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x23b8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x23bc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x23c0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x23c8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x23cc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x23d0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x23d8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x23dc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x23e0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x23e8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x23ec/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x23f0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x23f8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x23fc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2400/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2408/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x240c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2410/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2418/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x241c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2420/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2428/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x242c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2430/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2438/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x243c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2440/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2448/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x244c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2450/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2458/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x245c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2460/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2468/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x246c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2470/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2478/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x247c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2480/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2488/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x248c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2490/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2498/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x249c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x24a0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x24a8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x24ac/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x24b0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x24b8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x24bc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x24c0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x24c8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x24cc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x24d0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x24d8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x24dc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x24e0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x24e8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x24ec/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x24f0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x24f8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x24fc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2500/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2508/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x250c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2510/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2518/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x251c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2520/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2528/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x252c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2530/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2538/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x253c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2540/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2548/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x254c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2550/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2558/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x255c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2560/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2568/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x256c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2570/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2578/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x257c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2580/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2588/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x258c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2590/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2598/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x259c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x25a0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x25a8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x25ac/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x25b0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x25b8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x25bc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x25c0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x25c8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x25cc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x25d0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x25d8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x25dc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x25e0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x25e8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x25ec/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x25f0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x25f8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x25fc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2600/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2608/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x260c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2610/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2618/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x261c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2620/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2628/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x262c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2630/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2638/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x263c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2640/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2648/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x264c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2650/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2658/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x265c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2660/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2668/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x266c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2670/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2678/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x267c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2680/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2688/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x268c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2690/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2698/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x269c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x26a0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x26a8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x26ac/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x26b0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x26b8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x26bc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x26c0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x26c8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x26cc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x26d0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x26d8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x26dc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x26e0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x26e8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x26ec/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x26f0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x26f8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x26fc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2700/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2708/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x270c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2710/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2718/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x271c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2720/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2728/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x272c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2730/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2738/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x273c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2740/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2748/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x274c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2750/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2758/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x275c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2760/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2768/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x276c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2770/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2778/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x277c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2780/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2788/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x278c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2790/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2798/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x279c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x27a0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x27a8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x27ac/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x27b0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x27b8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x27bc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x27c0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x27c8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x27cc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x27d0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x27d8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x27dc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x27e0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x27e8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x27ec/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x27f0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x27f8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x27fc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2800/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2808/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x280c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2810/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2818/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x281c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2820/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2828/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x282c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2830/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2838/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x283c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2840/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2848/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x284c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2850/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2858/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x285c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2860/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2868/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x286c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2870/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2878/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x287c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2880/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2888/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x288c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2890/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2898/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x289c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x28a0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x28a8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x28ac/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x28b0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x28b8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x28bc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x28c0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x28c8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x28cc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x28d0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x28d8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x28dc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x28e0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x28e8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x28ec/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x28f0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x28f8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x28fc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2900/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2908/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x290c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2910/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2918/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x291c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2920/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2928/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x292c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2930/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2938/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x293c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2940/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2948/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x294c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2950/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2958/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x295c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2960/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2968/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x296c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2970/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2978/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x297c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2980/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2988/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x298c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2990/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2998/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x299c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x29a0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x29a8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x29ac/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x29b0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x29b8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x29bc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x29c0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x29c8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x29cc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x29d0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x29d8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x29dc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x29e0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x29e8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x29ec/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x29f0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x29f8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x29fc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a00/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a08/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a0c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a10/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a18/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a1c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a20/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a28/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a2c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a30/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a38/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a3c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a40/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a48/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a4c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a50/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a58/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a5c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a60/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a68/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a6c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a70/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a78/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a7c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a80/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a88/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a8c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a90/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a98/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a9c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2aa0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2aa8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2aac/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ab0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2ab8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2abc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ac0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2ac8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2acc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ad0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2ad8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2adc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ae0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2ae8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2aec/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2af0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2af8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2afc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b00/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b08/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b0c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b10/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b18/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b1c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b20/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b28/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b2c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b30/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b38/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b3c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b40/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b48/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b4c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b50/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b58/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b5c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b60/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b68/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b6c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b70/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b78/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b7c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b80/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b88/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b8c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b90/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b98/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b9c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ba0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2ba8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2bac/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2bb0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2bb8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2bbc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2bc0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2bc8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2bcc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2bd0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2bd8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2bdc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2be0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2be8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2bec/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2bf0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2bf8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2bfc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c00/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c08/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c0c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c10/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c18/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c1c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c20/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c28/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c2c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c30/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c38/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c3c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c40/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c48/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c4c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c50/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c58/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c5c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c60/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c68/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c6c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c70/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c78/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c7c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c80/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c88/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c8c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c90/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c98/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c9c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ca0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2ca8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2cac/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2cb0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2cb8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2cbc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2cc0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2cc8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2ccc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2cd0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2cd8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2cdc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ce0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2ce8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2cec/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2cf0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2cf8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2cfc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d00/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d08/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d0c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d10/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d18/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d1c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d20/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d28/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d2c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d30/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d38/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d3c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d40/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d48/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d4c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d50/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d58/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d5c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d60/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d68/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d6c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d70/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d78/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d7c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d80/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d88/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d8c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d90/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d98/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d9c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2da0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2da8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2dac/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2db0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2db8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2dbc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2dc0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2dc8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2dcc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2dd0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2dd8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2ddc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2de0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2de8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2dec/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2df0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2df8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2dfc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e00/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e08/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e0c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e10/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e18/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e1c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e20/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e28/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e2c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e30/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e38/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e3c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e40/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e48/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e4c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e50/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e58/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e5c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e60/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e68/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e6c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e70/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e78/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e7c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e80/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e88/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e8c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e90/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e98/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e9c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ea0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2ea8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2eac/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2eb0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2eb8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2ebc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ec0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2ec8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2ecc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ed0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2ed8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2edc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ee0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2ee8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2eec/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ef0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2ef8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2efc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f00/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f08/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f0c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f10/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f18/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f1c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f20/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f28/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f2c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f30/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f38/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f3c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f40/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f48/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f4c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f50/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f58/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f5c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f60/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f68/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f6c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f70/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f78/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f7c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f80/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f88/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f8c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f90/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f98/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f9c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2fa0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2fa8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2fac/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2fb0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2fb8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2fbc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2fc0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2fc8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2fcc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2fd0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2fd8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2fdc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2fe0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2fe8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2fec/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ff0/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2ff8/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2ffc/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3000/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x3008/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x300c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3010/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x3018/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x301c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3020/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x3028/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x302c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3030/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x3038/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x303c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3040/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x3048/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x304c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3050/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x3058/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x305c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3060/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x3068/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x306c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3070/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x3078/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x307c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3080/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x3088/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x308c/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3090/4, 0x000c001b); +	for(i = 0x30b8; i< 0x30c8; i += 4) +		INSTANCE_WR(ctx, i/4, 0x0000ffff); +	INSTANCE_WR(ctx, 0x344c/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x3808/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x381c/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x3848/4, 0x40000000); +	INSTANCE_WR(ctx, 0x384c/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x3850/4, 0x3f000000); +	INSTANCE_WR(ctx, 0x3858/4, 0x40000000); +	INSTANCE_WR(ctx, 0x385c/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x3864/4, 0xbf800000); +	INSTANCE_WR(ctx, 0x386c/4, 0xbf800000); +} -	NV_WRITE(NV10_PGRAPH_CHANNEL_CTX_SIZE, instance); -	NV_WRITE(NV10_PGRAPH_CHANNEL_CTX_POINTER, 2 /* save ctx */); -	return 0; +static void nv34_graph_context_init(struct drm_device *dev, +                                    struct nouveau_gpuobj *ctx) +{ +	struct drm_nouveau_private *dev_priv = dev->dev_private; +	int i; + +	INSTANCE_WR(ctx, 0x40c/4, 0x01000101); +	INSTANCE_WR(ctx, 0x420/4, 0x00000111); +	INSTANCE_WR(ctx, 0x424/4, 0x00000060); +	INSTANCE_WR(ctx, 0x440/4, 0x00000080); +	INSTANCE_WR(ctx, 0x444/4, 0xffff0000); +	INSTANCE_WR(ctx, 0x448/4, 0x00000001); +	INSTANCE_WR(ctx, 0x45c/4, 0x44400000); +	INSTANCE_WR(ctx, 0x480/4, 0xffff0000); +	for(i = 0x4d4; i< 0x4dc; i += 4) +		INSTANCE_WR(ctx, i/4, 0x0fff0000); +	INSTANCE_WR(ctx, 0x4e0/4, 0x00011100); +	for(i = 0x4fc; i< 0x53c; i += 4) +		INSTANCE_WR(ctx, i/4, 0x07ff0000); +	INSTANCE_WR(ctx, 0x544/4, 0x4b7fffff); +	INSTANCE_WR(ctx, 0x57c/4, 0x00000080); +	INSTANCE_WR(ctx, 0x580/4, 0x30201000); +	INSTANCE_WR(ctx, 0x584/4, 0x70605040); +	INSTANCE_WR(ctx, 0x588/4, 0xb8a89888); +	INSTANCE_WR(ctx, 0x58c/4, 0xf8e8d8c8); +	INSTANCE_WR(ctx, 0x5a0/4, 0xb0000000); +	for(i = 0x5f0; i< 0x630; i += 4) +		INSTANCE_WR(ctx, i/4, 0x00010588); +	for(i = 0x630; i< 0x670; i += 4) +		INSTANCE_WR(ctx, i/4, 0x00030303); +	for(i = 0x6b0; i< 0x6f0; i += 4) +		INSTANCE_WR(ctx, i/4, 0x0008aae4); +	for(i = 0x6f0; i< 0x730; i += 4) +		INSTANCE_WR(ctx, i/4, 0x01012000); +	for(i = 0x730; i< 0x770; i += 4) +		INSTANCE_WR(ctx, i/4, 0x00080008); +	INSTANCE_WR(ctx, 0x850/4, 0x00040000); +	INSTANCE_WR(ctx, 0x854/4, 0x00010000); +	for(i = 0x858; i< 0x868; i += 4) +		INSTANCE_WR(ctx, i/4, 0x00040004); +	INSTANCE_WR(ctx, 0x15ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x15b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x15b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x15bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x15c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x15c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x15cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x15d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x15d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x15dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x15e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x15e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x15ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x15f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x15f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x15fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1600/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1604/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x160c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1610/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1614/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x161c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1620/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1624/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x162c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1630/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1634/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x163c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1640/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1644/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x164c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1650/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1654/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x165c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1660/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1664/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x166c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1670/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1674/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x167c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1680/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1684/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x168c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1690/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1694/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x169c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x16a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x16a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x16ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x16b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x16b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x16bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x16c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x16c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x16cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x16d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x16d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x16dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x16e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x16e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x16ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x16f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x16f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x16fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1700/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1704/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x170c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1710/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1714/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x171c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1720/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1724/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x172c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1730/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1734/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x173c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1740/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1744/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x174c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1750/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1754/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x175c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1760/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1764/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x176c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1770/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1774/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x177c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1780/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1784/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x178c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1790/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1794/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x179c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x17a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x17a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x17ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x17b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x17b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x17bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x17c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x17c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x17cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x17d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x17d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x17dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x17e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x17e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x17ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x17f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x17f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x17fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1800/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1804/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x180c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1810/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1814/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x181c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1820/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1824/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x182c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1830/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1834/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x183c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1840/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1844/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x184c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1850/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1854/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x185c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1860/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1864/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x186c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1870/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1874/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x187c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1880/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1884/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x188c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1890/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1894/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x189c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x18a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x18a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x18ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x18b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x18b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x18bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x18c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x18c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x18cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x18d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x18d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x18dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x18e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x18e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x18ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x18f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x18f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x18fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1900/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1904/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x190c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1910/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1914/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x191c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1920/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1924/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x192c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1930/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1934/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x193c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1940/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1944/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x194c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1950/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1954/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x195c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1960/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1964/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x196c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1970/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1974/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x197c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1980/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1984/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x198c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1990/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1994/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x199c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x19a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x19a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x19ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x19b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x19b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x19bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x19c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x19c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x19cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x19d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x19d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x19dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x19e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x19e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x19ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x19f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x19f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x19fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1a00/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1a04/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1a0c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1a10/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1a14/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1a1c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1a20/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1a24/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1a2c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1a30/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1a34/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1a3c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1a40/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1a44/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1a4c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1a50/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1a54/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1a5c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1a60/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1a64/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1a6c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1a70/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1a74/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1a7c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1a80/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1a84/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1a8c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1a90/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1a94/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1a9c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1aa0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1aa4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1aac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1ab0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1ab4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1abc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1ac0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1ac4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1acc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1ad0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1ad4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1adc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1ae0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1ae4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1aec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1af0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1af4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1afc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1b00/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1b04/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1b0c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1b10/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1b14/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1b1c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1b20/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1b24/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1b2c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1b30/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1b34/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1b3c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1b40/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1b44/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1b4c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1b50/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1b54/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1b5c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1b60/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1b64/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1b6c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1b70/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1b74/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1b7c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1b80/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1b84/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1b8c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1b90/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1b94/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1b9c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1ba0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1ba4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1bac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1bb0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1bb4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1bbc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1bc0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1bc4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1bcc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1bd0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1bd4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1bdc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1be0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1be4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1bec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1bf0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1bf4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1bfc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1c00/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1c04/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1c0c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1c10/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1c14/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1c1c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1c20/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1c24/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1c2c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1c30/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1c34/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1c3c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1c40/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1c44/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1c4c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1c50/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1c54/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1c5c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1c60/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1c64/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1c6c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1c70/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1c74/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1c7c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1c80/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1c84/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1c8c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1c90/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1c94/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1c9c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1ca0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1ca4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1cac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1cb0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1cb4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1cbc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1cc0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1cc4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1ccc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1cd0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1cd4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1cdc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1ce0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1ce4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1cec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1cf0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1cf4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1cfc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1d00/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1d04/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1d0c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1d10/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1d14/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1d1c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1d20/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1d24/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1d2c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1d30/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1d34/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1d3c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1d40/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1d44/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1d4c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1d50/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1d54/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1d5c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1d60/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1d64/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1d6c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1d70/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1d74/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1d7c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1d80/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1d84/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1d8c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1d90/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1d94/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1d9c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1da0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1da4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1dac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1db0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1db4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1dbc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1dc0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1dc4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1dcc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1dd0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1dd4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1ddc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1de0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1de4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1dec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1df0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1df4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1dfc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1e00/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1e04/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1e0c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1e10/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1e14/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1e1c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1e20/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1e24/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1e2c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1e30/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1e34/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1e3c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1e40/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1e44/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1e4c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1e50/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1e54/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1e5c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1e60/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1e64/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1e6c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1e70/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1e74/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1e7c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1e80/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1e84/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1e8c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1e90/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1e94/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1e9c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1ea0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1ea4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1eac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1eb0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1eb4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1ebc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1ec0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1ec4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1ecc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1ed0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1ed4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1edc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1ee0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1ee4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1eec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1ef0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1ef4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1efc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f00/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f04/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f0c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f10/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f14/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f1c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f20/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f24/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f2c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f30/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f34/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f3c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f40/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f44/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f4c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f50/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f54/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f5c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f60/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f64/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f6c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f70/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f74/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f7c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f80/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f84/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f8c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f90/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f94/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f9c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1fa0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1fa4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1fac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1fb0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1fb4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1fbc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1fc0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1fc4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1fcc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1fd0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1fd4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1fdc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1fe0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1fe4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1fec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1ff0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1ff4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1ffc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2000/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2004/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x200c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2010/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2014/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x201c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2020/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2024/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x202c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2030/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2034/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x203c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2040/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2044/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x204c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2050/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2054/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x205c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2060/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2064/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x206c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2070/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2074/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x207c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2080/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2084/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x208c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2090/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2094/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x209c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x20a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x20a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x20ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x20b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x20b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x20bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x20c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x20c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x20cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x20d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x20d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x20dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x20e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x20e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x20ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x20f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x20f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x20fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2100/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2104/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x210c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2110/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2114/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x211c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2120/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2124/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x212c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2130/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2134/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x213c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2140/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2144/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x214c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2150/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2154/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x215c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2160/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2164/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x216c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2170/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2174/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x217c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2180/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2184/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x218c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2190/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2194/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x219c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x21a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x21a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x21ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x21b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x21b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x21bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x21c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x21c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x21cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x21d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x21d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x21dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x21e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x21e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x21ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x21f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x21f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x21fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2200/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2204/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x220c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2210/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2214/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x221c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2220/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2224/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x222c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2230/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2234/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x223c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2240/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2244/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x224c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2250/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2254/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x225c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2260/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2264/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x226c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2270/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2274/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x227c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2280/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2284/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x228c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2290/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2294/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x229c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x22a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x22a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x22ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x22b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x22b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x22bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x22c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x22c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x22cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x22d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x22d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x22dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x22e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x22e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x22ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x22f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x22f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x22fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2300/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2304/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x230c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2310/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2314/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x231c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2320/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2324/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x232c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2330/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2334/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x233c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2340/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2344/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x234c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2350/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2354/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x235c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2360/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2364/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x236c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2370/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2374/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x237c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2380/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2384/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x238c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2390/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2394/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x239c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x23a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x23a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x23ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x23b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x23b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x23bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x23c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x23c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x23cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x23d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x23d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x23dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x23e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x23e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x23ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x23f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x23f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x23fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2400/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2404/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x240c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2410/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2414/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x241c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2420/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2424/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x242c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2430/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2434/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x243c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2440/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2444/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x244c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2450/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2454/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x245c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2460/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2464/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x246c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2470/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2474/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x247c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2480/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2484/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x248c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2490/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2494/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x249c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x24a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x24a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x24ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x24b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x24b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x24bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x24c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x24c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x24cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x24d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x24d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x24dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x24e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x24e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x24ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x24f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x24f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x24fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2500/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2504/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x250c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2510/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2514/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x251c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2520/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2524/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x252c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2530/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2534/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x253c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2540/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2544/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x254c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2550/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2554/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x255c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2560/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2564/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x256c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2570/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2574/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x257c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2580/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2584/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x258c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2590/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2594/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x259c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x25a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x25a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x25ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x25b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x25b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x25bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x25c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x25c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x25cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x25d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x25d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x25dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x25e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x25e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x25ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x25f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x25f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x25fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2600/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2604/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x260c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2610/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2614/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x261c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2620/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2624/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x262c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2630/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2634/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x263c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2640/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2644/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x264c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2650/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2654/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x265c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2660/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2664/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x266c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2670/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2674/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x267c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2680/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2684/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x268c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2690/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2694/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x269c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x26a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x26a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x26ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x26b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x26b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x26bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x26c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x26c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x26cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x26d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x26d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x26dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x26e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x26e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x26ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x26f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x26f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x26fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2700/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2704/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x270c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2710/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2714/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x271c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2720/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2724/4, 0x000c001b); +	for(i = 0x274c; i< 0x275c; i += 4) +		INSTANCE_WR(ctx, i/4, 0x0000ffff); +	INSTANCE_WR(ctx, 0x2ae0/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x2e9c/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x2eb0/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x2edc/4, 0x40000000); +	INSTANCE_WR(ctx, 0x2ee0/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x2ee4/4, 0x3f000000); +	INSTANCE_WR(ctx, 0x2eec/4, 0x40000000); +	INSTANCE_WR(ctx, 0x2ef0/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x2ef8/4, 0xbf800000); +	INSTANCE_WR(ctx, 0x2f00/4, 0xbf800000);  } +static void nv35_36_graph_context_init(struct drm_device *dev, +                                       struct nouveau_gpuobj *ctx) +{ +	struct drm_nouveau_private *dev_priv = dev->dev_private; +	int i; + +	INSTANCE_WR(ctx, 0x40c/4, 0x00000101); +	INSTANCE_WR(ctx, 0x420/4, 0x00000111); +	INSTANCE_WR(ctx, 0x424/4, 0x00000060); +	INSTANCE_WR(ctx, 0x440/4, 0x00000080); +	INSTANCE_WR(ctx, 0x444/4, 0xffff0000); +	INSTANCE_WR(ctx, 0x448/4, 0x00000001); +	INSTANCE_WR(ctx, 0x45c/4, 0x44400000); +	INSTANCE_WR(ctx, 0x488/4, 0xffff0000); +	for(i = 0x4dc; i< 0x4e4; i += 4) +		INSTANCE_WR(ctx, i/4, 0x0fff0000); +	INSTANCE_WR(ctx, 0x4e8/4, 0x00011100); +	for(i = 0x504; i< 0x544; i += 4) +		INSTANCE_WR(ctx, i/4, 0x07ff0000); +	INSTANCE_WR(ctx, 0x54c/4, 0x4b7fffff); +	INSTANCE_WR(ctx, 0x588/4, 0x00000080); +	INSTANCE_WR(ctx, 0x58c/4, 0x30201000); +	INSTANCE_WR(ctx, 0x590/4, 0x70605040); +	INSTANCE_WR(ctx, 0x594/4, 0xb8a89888); +	INSTANCE_WR(ctx, 0x598/4, 0xf8e8d8c8); +	INSTANCE_WR(ctx, 0x5ac/4, 0xb0000000); +	for(i = 0x604; i< 0x644; i += 4) +		INSTANCE_WR(ctx, i/4, 0x00010588); +	for(i = 0x644; i< 0x684; i += 4) +		INSTANCE_WR(ctx, i/4, 0x00030303); +	for(i = 0x6c4; i< 0x704; i += 4) +		INSTANCE_WR(ctx, i/4, 0x0008aae4); +	for(i = 0x704; i< 0x744; i += 4) +		INSTANCE_WR(ctx, i/4, 0x01012000); +	for(i = 0x744; i< 0x784; i += 4) +		INSTANCE_WR(ctx, i/4, 0x00080008); +	INSTANCE_WR(ctx, 0x860/4, 0x00040000); +	INSTANCE_WR(ctx, 0x864/4, 0x00010000); +	for(i = 0x868; i< 0x878; i += 4) +		INSTANCE_WR(ctx, i/4, 0x00040004); +	INSTANCE_WR(ctx, 0x1f1c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f20/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f24/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f2c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f30/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f34/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f3c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f40/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f44/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f4c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f50/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f54/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f5c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f60/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f64/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f6c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f70/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f74/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f7c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f80/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f84/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f8c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1f90/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1f94/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1f9c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1fa0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1fa4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1fac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1fb0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1fb4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1fbc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1fc0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1fc4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1fcc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1fd0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1fd4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1fdc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1fe0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1fe4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1fec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x1ff0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x1ff4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x1ffc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2000/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2004/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x200c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2010/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2014/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x201c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2020/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2024/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x202c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2030/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2034/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x203c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2040/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2044/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x204c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2050/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2054/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x205c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2060/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2064/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x206c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2070/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2074/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x207c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2080/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2084/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x208c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2090/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2094/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x209c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x20a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x20a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x20ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x20b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x20b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x20bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x20c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x20c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x20cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x20d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x20d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x20dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x20e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x20e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x20ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x20f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x20f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x20fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2100/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2104/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x210c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2110/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2114/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x211c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2120/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2124/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x212c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2130/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2134/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x213c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2140/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2144/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x214c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2150/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2154/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x215c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2160/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2164/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x216c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2170/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2174/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x217c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2180/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2184/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x218c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2190/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2194/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x219c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x21a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x21a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x21ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x21b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x21b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x21bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x21c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x21c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x21cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x21d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x21d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x21dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x21e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x21e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x21ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x21f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x21f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x21fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2200/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2204/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x220c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2210/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2214/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x221c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2220/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2224/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x222c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2230/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2234/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x223c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2240/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2244/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x224c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2250/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2254/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x225c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2260/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2264/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x226c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2270/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2274/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x227c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2280/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2284/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x228c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2290/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2294/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x229c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x22a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x22a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x22ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x22b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x22b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x22bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x22c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x22c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x22cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x22d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x22d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x22dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x22e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x22e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x22ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x22f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x22f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x22fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2300/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2304/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x230c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2310/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2314/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x231c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2320/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2324/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x232c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2330/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2334/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x233c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2340/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2344/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x234c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2350/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2354/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x235c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2360/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2364/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x236c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2370/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2374/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x237c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2380/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2384/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x238c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2390/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2394/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x239c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x23a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x23a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x23ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x23b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x23b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x23bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x23c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x23c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x23cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x23d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x23d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x23dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x23e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x23e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x23ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x23f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x23f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x23fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2400/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2404/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x240c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2410/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2414/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x241c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2420/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2424/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x242c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2430/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2434/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x243c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2440/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2444/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x244c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2450/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2454/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x245c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2460/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2464/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x246c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2470/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2474/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x247c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2480/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2484/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x248c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2490/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2494/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x249c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x24a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x24a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x24ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x24b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x24b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x24bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x24c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x24c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x24cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x24d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x24d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x24dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x24e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x24e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x24ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x24f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x24f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x24fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2500/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2504/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x250c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2510/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2514/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x251c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2520/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2524/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x252c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2530/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2534/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x253c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2540/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2544/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x254c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2550/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2554/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x255c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2560/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2564/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x256c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2570/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2574/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x257c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2580/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2584/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x258c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2590/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2594/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x259c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x25a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x25a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x25ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x25b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x25b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x25bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x25c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x25c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x25cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x25d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x25d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x25dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x25e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x25e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x25ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x25f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x25f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x25fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2600/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2604/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x260c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2610/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2614/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x261c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2620/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2624/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x262c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2630/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2634/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x263c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2640/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2644/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x264c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2650/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2654/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x265c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2660/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2664/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x266c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2670/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2674/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x267c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2680/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2684/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x268c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2690/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2694/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x269c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x26a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x26a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x26ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x26b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x26b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x26bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x26c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x26c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x26cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x26d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x26d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x26dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x26e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x26e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x26ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x26f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x26f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x26fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2700/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2704/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x270c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2710/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2714/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x271c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2720/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2724/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x272c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2730/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2734/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x273c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2740/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2744/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x274c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2750/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2754/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x275c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2760/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2764/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x276c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2770/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2774/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x277c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2780/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2784/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x278c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2790/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2794/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x279c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x27a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x27a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x27ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x27b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x27b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x27bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x27c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x27c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x27cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x27d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x27d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x27dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x27e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x27e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x27ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x27f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x27f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x27fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2800/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2804/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x280c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2810/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2814/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x281c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2820/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2824/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x282c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2830/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2834/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x283c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2840/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2844/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x284c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2850/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2854/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x285c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2860/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2864/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x286c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2870/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2874/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x287c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2880/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2884/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x288c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2890/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2894/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x289c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x28a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x28a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x28ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x28b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x28b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x28bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x28c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x28c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x28cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x28d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x28d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x28dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x28e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x28e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x28ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x28f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x28f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x28fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2900/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2904/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x290c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2910/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2914/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x291c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2920/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2924/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x292c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2930/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2934/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x293c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2940/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2944/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x294c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2950/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2954/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x295c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2960/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2964/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x296c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2970/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2974/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x297c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2980/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2984/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x298c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2990/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2994/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x299c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x29a0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x29a4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x29ac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x29b0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x29b4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x29bc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x29c0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x29c4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x29cc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x29d0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x29d4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x29dc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x29e0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x29e4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x29ec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x29f0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x29f4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x29fc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a00/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a04/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a0c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a10/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a14/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a1c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a20/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a24/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a2c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a30/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a34/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a3c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a40/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a44/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a4c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a50/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a54/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a5c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a60/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a64/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a6c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a70/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a74/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a7c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a80/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a84/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a8c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2a90/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2a94/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2a9c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2aa0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2aa4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2aac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2ab0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ab4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2abc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2ac0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ac4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2acc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2ad0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ad4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2adc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2ae0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ae4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2aec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2af0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2af4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2afc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b00/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b04/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b0c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b10/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b14/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b1c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b20/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b24/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b2c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b30/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b34/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b3c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b40/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b44/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b4c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b50/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b54/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b5c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b60/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b64/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b6c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b70/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b74/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b7c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b80/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b84/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b8c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2b90/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2b94/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2b9c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2ba0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ba4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2bac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2bb0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2bb4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2bbc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2bc0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2bc4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2bcc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2bd0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2bd4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2bdc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2be0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2be4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2bec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2bf0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2bf4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2bfc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c00/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c04/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c0c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c10/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c14/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c1c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c20/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c24/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c2c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c30/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c34/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c3c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c40/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c44/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c4c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c50/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c54/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c5c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c60/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c64/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c6c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c70/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c74/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c7c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c80/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c84/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c8c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2c90/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2c94/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2c9c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2ca0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ca4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2cac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2cb0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2cb4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2cbc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2cc0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2cc4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2ccc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2cd0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2cd4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2cdc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2ce0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ce4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2cec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2cf0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2cf4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2cfc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d00/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d04/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d0c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d10/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d14/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d1c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d20/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d24/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d2c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d30/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d34/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d3c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d40/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d44/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d4c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d50/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d54/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d5c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d60/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d64/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d6c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d70/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d74/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d7c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d80/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d84/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d8c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2d90/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2d94/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2d9c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2da0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2da4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2dac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2db0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2db4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2dbc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2dc0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2dc4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2dcc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2dd0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2dd4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2ddc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2de0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2de4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2dec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2df0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2df4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2dfc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e00/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e04/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e0c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e10/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e14/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e1c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e20/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e24/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e2c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e30/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e34/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e3c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e40/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e44/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e4c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e50/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e54/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e5c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e60/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e64/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e6c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e70/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e74/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e7c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e80/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e84/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e8c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2e90/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2e94/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2e9c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2ea0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ea4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2eac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2eb0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2eb4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2ebc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2ec0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ec4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2ecc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2ed0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ed4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2edc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2ee0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ee4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2eec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2ef0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ef4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2efc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f00/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f04/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f0c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f10/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f14/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f1c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f20/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f24/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f2c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f30/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f34/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f3c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f40/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f44/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f4c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f50/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f54/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f5c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f60/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f64/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f6c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f70/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f74/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f7c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f80/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f84/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f8c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2f90/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2f94/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2f9c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2fa0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2fa4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2fac/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2fb0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2fb4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2fbc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2fc0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2fc4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2fcc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2fd0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2fd4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2fdc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2fe0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2fe4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2fec/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x2ff0/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x2ff4/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x2ffc/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x3000/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3004/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x300c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x3010/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3014/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x301c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x3020/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3024/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x302c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x3030/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3034/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x303c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x3040/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3044/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x304c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x3050/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3054/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x305c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x3060/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3064/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x306c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x3070/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3074/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x307c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x3080/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3084/4, 0x000c001b); +	INSTANCE_WR(ctx, 0x308c/4, 0x10700ff9); +	INSTANCE_WR(ctx, 0x3090/4, 0x0436086c); +	INSTANCE_WR(ctx, 0x3094/4, 0x000c001b); +	for(i = 0x30bc; i< 0x30cc; i += 4) +		INSTANCE_WR(ctx, i/4, 0x0000ffff); +	INSTANCE_WR(ctx, 0x3450/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x380c/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x3820/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x384c/4, 0x40000000); +	INSTANCE_WR(ctx, 0x3850/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x3854/4, 0x3f000000); +	INSTANCE_WR(ctx, 0x385c/4, 0x40000000); +	INSTANCE_WR(ctx, 0x3860/4, 0x3f800000); +	INSTANCE_WR(ctx, 0x3868/4, 0xbf800000); +	INSTANCE_WR(ctx, 0x3870/4, 0xbf800000); +} -/* Restore the context for a specific channel into PGRAPH - */ -int nv20_graph_load_context(struct nouveau_channel *chan) { +int nv20_graph_create_context(struct nouveau_channel *chan) +{  	struct drm_device *dev = chan->dev;  	struct drm_nouveau_private *dev_priv = dev->dev_private; -	uint32_t instance; +	void (*ctx_init)(struct drm_device *, struct nouveau_gpuobj *); +	unsigned int ctx_size; +	unsigned int idoffs = 0x28/4; +	int ret; -	instance = INSTANCE_RD(dev_priv->ctx_table->gpuobj, chan->id); -	if (!instance) { -		return -EINVAL; +	switch (dev_priv->chipset) { +	case 0x20: +		ctx_size = NV20_GRCTX_SIZE; +		ctx_init = nv20_graph_context_init; +		idoffs = 0; +		break; +	case 0x25: +	case 0x28: +		ctx_size = NV25_GRCTX_SIZE; +		ctx_init = nv25_graph_context_init; +		break; +	case 0x2a: +		ctx_size = NV2A_GRCTX_SIZE; +		ctx_init = nv2a_graph_context_init; +		idoffs = 0; +		break; +	case 0x30: +	case 0x31: +		ctx_size = NV30_31_GRCTX_SIZE; +		ctx_init = nv30_31_graph_context_init; +		break; +	case 0x34: +		ctx_size = NV34_GRCTX_SIZE; +		ctx_init = nv34_graph_context_init; +		break; +	case 0x35: +	case 0x36: +		ctx_size = NV35_36_GRCTX_SIZE; +		ctx_init = nv35_36_graph_context_init; +		break; +	default: +		ctx_size = 0; +		ctx_init = nv35_36_graph_context_init; +		DRM_ERROR("Please contact the devs if you want your NV%x" +		          " card to work\n", dev_priv->chipset); +		return -ENOSYS; +		break;  	} -	if (instance != (chan->ramin_grctx->instance >> 4)) -		DRM_ERROR("nv20_graph_load_context_current : bad instance\n"); -	NV_WRITE(NV10_PGRAPH_CTX_USER, chan->id << 24); -	NV_WRITE(NV10_PGRAPH_CHANNEL_CTX_SIZE, instance); -	NV_WRITE(NV10_PGRAPH_CHANNEL_CTX_POINTER, 1 /* restore ctx */); +	if ((ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, ctx_size, 16, +					  NVOBJ_FLAG_ZERO_ALLOC, +					  &chan->ramin_grctx))) +		return ret; + +	/* Initialise default context values */ +	ctx_init(dev, chan->ramin_grctx->gpuobj); + +	/* nv20: INSTANCE_WR(chan->ramin_grctx->gpuobj, 10, chan->id<<24); */ +	INSTANCE_WR(chan->ramin_grctx->gpuobj, idoffs, (chan->id<<24)|0x1); +	                                                     /* CTX_USER */ + +	INSTANCE_WR(dev_priv->ctx_table->gpuobj, chan->id, +			chan->ramin_grctx->instance >> 4); +  	return 0;  } -void nouveau_nv20_context_switch(struct drm_device *dev) +void nv20_graph_destroy_context(struct nouveau_channel *chan)  { +	struct drm_device *dev = chan->dev;  	struct drm_nouveau_private *dev_priv = dev->dev_private; -	struct nouveau_channel *next, *last; -	int chid; -	chid = NV_READ(NV03_PFIFO_CACHE1_PUSH1)&(nouveau_fifo_number(dev)-1); -	next = dev_priv->fifos[chid]; +	if (chan->ramin_grctx) +		nouveau_gpuobj_ref_del(dev, &chan->ramin_grctx); -	chid = (NV_READ(NV10_PGRAPH_CTX_USER) >> 24) & (nouveau_fifo_number(dev)-1); -	last = dev_priv->fifos[chid]; +	INSTANCE_WR(dev_priv->ctx_table->gpuobj, chan->id, 0); +} -	DRM_DEBUG("NV: PGRAPH context switch interrupt channel %x -> %x\n", -		  last->id, next->id); +int nv20_graph_load_context(struct nouveau_channel *chan) +{ +	struct drm_device *dev = chan->dev; +	struct drm_nouveau_private *dev_priv = dev->dev_private; +	uint32_t inst; + +	if (!chan->ramin_grctx) +		return -EINVAL; +	inst = chan->ramin_grctx->instance >> 4; -	NV_WRITE(NV04_PGRAPH_FIFO,0x0); +	NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_POINTER, inst); +	NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_XFER, +		 NV20_PGRAPH_CHANNEL_CTX_XFER_LOAD); -	nv20_graph_save_context(last); -	  	nouveau_wait_for_idle(dev); +	return 0; +} -	NV_WRITE(NV10_PGRAPH_CTX_CONTROL, 0x10000000); +int nv20_graph_save_context(struct nouveau_channel *chan) +{ +	struct drm_device *dev = chan->dev; +	struct drm_nouveau_private *dev_priv = dev->dev_private; +	uint32_t inst; + +	if (!chan->ramin_grctx) +		return -EINVAL; +	inst = chan->ramin_grctx->instance >> 4; -	nv20_graph_load_context(next); +	NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_POINTER, inst); +	NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_XFER, +		 NV20_PGRAPH_CHANNEL_CTX_XFER_SAVE);  	nouveau_wait_for_idle(dev); -	 -	if ((NV_READ(NV10_PGRAPH_CTX_USER) >> 24) != next->id) -		DRM_ERROR("nouveau_nv20_context_switch : wrong channel restored %x %x!!!\n", next->id, NV_READ(NV10_PGRAPH_CTX_USER) >> 24); +	return 0; +} -	NV_WRITE(NV10_PGRAPH_CTX_CONTROL, 0x10010100); -	NV_WRITE(NV10_PGRAPH_FFINTFC_ST2, NV_READ(NV10_PGRAPH_FFINTFC_ST2)&0xCFFFFFFF); +static void nv20_graph_rdi(struct drm_device *dev) { +	struct drm_nouveau_private *dev_priv = dev->dev_private; +	int i; + +	NV_WRITE(NV10_PGRAPH_RDI_INDEX, 0x2c80000); +	for (i = 0; i < 32; i++) +		NV_WRITE(NV10_PGRAPH_RDI_DATA, 0); -	NV_WRITE(NV04_PGRAPH_FIFO,0x1); +	nouveau_wait_for_idle(dev);  }  int nv20_graph_init(struct drm_device *dev) { @@ -163,10 +3200,9 @@ int nv20_graph_init(struct drm_device *dev) {  					  &dev_priv->ctx_table)))  		return ret; -	NV_WRITE(NV10_PGRAPH_CHANNEL_CTX_TABLE, +	NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_TABLE,  		 dev_priv->ctx_table->instance >> 4); -	//XXX need to be done and save/restore for each fifo ???  	nv20_graph_rdi(dev);  	NV_WRITE(NV03_PGRAPH_INTR   , 0xFFFFFFFF); @@ -175,7 +3211,7 @@ int nv20_graph_init(struct drm_device *dev) {  	NV_WRITE(NV04_PGRAPH_DEBUG_0, 0xFFFFFFFF);  	NV_WRITE(NV04_PGRAPH_DEBUG_0, 0x00000000);  	NV_WRITE(NV04_PGRAPH_DEBUG_1, 0x00118700); -	NV_WRITE(NV04_PGRAPH_DEBUG_3, 0xF20E0431); +	NV_WRITE(NV04_PGRAPH_DEBUG_3, 0xF20E0435); /* 0x4 = auto ctx switch */  	NV_WRITE(NV10_PGRAPH_DEBUG_4, 0x00000000);  	NV_WRITE(0x40009C           , 0x00000040); @@ -247,3 +3283,91 @@ void nv20_graph_takedown(struct drm_device *dev)  	nouveau_gpuobj_ref_del(dev, &dev_priv->ctx_table);  } +int nv30_graph_init(struct drm_device *dev) +{ +	struct drm_nouveau_private *dev_priv = dev->dev_private; +	uint32_t vramsz, tmp; +	int ret, i; + +	NV_WRITE(NV03_PMC_ENABLE, NV_READ(NV03_PMC_ENABLE) & +			~NV_PMC_ENABLE_PGRAPH); +	NV_WRITE(NV03_PMC_ENABLE, NV_READ(NV03_PMC_ENABLE) | +			 NV_PMC_ENABLE_PGRAPH); + +	/* Create Context Pointer Table */ +	dev_priv->ctx_table_size = 32 * 4; +	if ((ret = nouveau_gpuobj_new_ref(dev, NULL, NULL, 0, +					  dev_priv->ctx_table_size, 16, +					  NVOBJ_FLAG_ZERO_ALLOC, +					  &dev_priv->ctx_table))) +		return ret; + +	NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_TABLE, +			dev_priv->ctx_table->instance >> 4); + +	NV_WRITE(NV03_PGRAPH_INTR   , 0xFFFFFFFF); +	NV_WRITE(NV03_PGRAPH_INTR_EN, 0xFFFFFFFF); + +	NV_WRITE(NV04_PGRAPH_DEBUG_0, 0xFFFFFFFF); +	NV_WRITE(NV04_PGRAPH_DEBUG_0, 0x00000000); +	NV_WRITE(NV04_PGRAPH_DEBUG_1, 0x401287c0); +	NV_WRITE(0x400890, 0x01b463ff); +	NV_WRITE(NV04_PGRAPH_DEBUG_3, 0xf3de0475); +	NV_WRITE(NV10_PGRAPH_DEBUG_4, 0x00008000); +	NV_WRITE(NV04_PGRAPH_LIMIT_VIOL_PIX, 0xf04bdff6); +	NV_WRITE(0x400B80, 0x1003d888); +	NV_WRITE(0x400098, 0x00000000); +	NV_WRITE(0x40009C, 0x0005ad00); +	NV_WRITE(0x400B88, 0x62ff00ff); // suspiciously like PGRAPH_DEBUG_2 +	NV_WRITE(0x4000a0, 0x00000000); +	NV_WRITE(0x4000a4, 0x00000008); +	NV_WRITE(0x4008a8, 0xb784a400); +	NV_WRITE(0x400ba0, 0x002f8685); +	NV_WRITE(0x400ba4, 0x00231f3f); +	NV_WRITE(0x4008a4, 0x40000020); +	NV_WRITE(0x400B84, 0x0c000000); +	NV_WRITE(NV04_PGRAPH_DEBUG_2, 0x62ff0f7f); +	NV_WRITE(0x4000c0, 0x00000016); + +	/* copy tile info from PFB */ +	for (i=0; i<NV10_PFB_TILE__SIZE; i++) { +		NV_WRITE(NV10_PGRAPH_TILE(i), NV_READ(NV10_PFB_TILE(i))); +		NV_WRITE(NV10_PGRAPH_TLIMIT(i), NV_READ(NV10_PFB_TLIMIT(i))); +		NV_WRITE(NV10_PGRAPH_TSIZE(i), NV_READ(NV10_PFB_TSIZE(i))); +		NV_WRITE(NV10_PGRAPH_TSTATUS(i), NV_READ(NV10_PFB_TSTATUS(i))); +	} + +	NV_WRITE(NV10_PGRAPH_CTX_CONTROL, 0x10010100); +	NV_WRITE(NV10_PGRAPH_STATE      , 0xFFFFFFFF); +	NV_WRITE(NV04_PGRAPH_FIFO       , 0x00000001); + +	/* begin RAM config */ +	vramsz = drm_get_resource_len(dev, 0) - 1; +	NV_WRITE(0x4009A4, NV_READ(NV04_PFB_CFG0)); +	NV_WRITE(0x4009A8, NV_READ(NV04_PFB_CFG1)); +	NV_WRITE(0x400750, 0x00EA0000); +	NV_WRITE(0x400754, NV_READ(NV04_PFB_CFG0)); +	NV_WRITE(0x400750, 0x00EA0004); +	NV_WRITE(0x400754, NV_READ(NV04_PFB_CFG1)); +	NV_WRITE(0x400820, 0); +	NV_WRITE(0x400824, 0); +	NV_WRITE(0x400864, vramsz-1); +	NV_WRITE(0x400868, vramsz-1); + +	NV_WRITE(0x400B20, 0x00000000); +	NV_WRITE(0x400B04, 0xFFFFFFFF); + +	/* per-context state, doesn't belong here */ +	tmp = NV_READ(NV10_PGRAPH_SURFACE) & 0x0007ff00; +	NV_WRITE(NV10_PGRAPH_SURFACE, tmp); +	tmp = NV_READ(NV10_PGRAPH_SURFACE) | 0x00020100; +	NV_WRITE(NV10_PGRAPH_SURFACE, tmp); + +	NV_WRITE(NV03_PGRAPH_ABS_UCLIP_XMIN, 0); +	NV_WRITE(NV03_PGRAPH_ABS_UCLIP_YMIN, 0); +	NV_WRITE(NV03_PGRAPH_ABS_UCLIP_XMAX, 0x7fff); +	NV_WRITE(NV03_PGRAPH_ABS_UCLIP_YMAX, 0x7fff); + +	return 0; +} + diff --git a/shared-core/nv30_graph.c b/shared-core/nv30_graph.c deleted file mode 100644 index 590a5c33..00000000 --- a/shared-core/nv30_graph.c +++ /dev/null @@ -1,2912 +0,0 @@ -/* - * Based on nv40_graph.c - *  Someday this will all go away... - */ -#include "drmP.h" -#include "drm.h" -#include "nouveau_drv.h" -#include "nouveau_drm.h" - -/* - * There are 3 families : - * NV30 is 0x10de:0x030* - * NV31 is 0x10de:0x031* - * - * NV34 is 0x10de:0x032* - * - * NV35 is 0x10de:0x033* (NV35 and NV36 are the same) - * NV36 is 0x10de:0x034* - * - * Not seen in the wild, no dumps (probably NV35) : - * NV37 is 0x10de:0x00fc, 0x10de:0x00fd - * NV38 is 0x10de:0x0333, 0x10de:0x00fe - * - */ - - -#define NV30_31_GRCTX_SIZE (22392) -#define NV34_GRCTX_SIZE    (18140) -#define NV35_36_GRCTX_SIZE (22396) - -static void nv30_31_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx) -{ -	struct drm_nouveau_private *dev_priv = dev->dev_private; -	int i; - -	INSTANCE_WR(ctx, 0x410/4, 0x00000101); -	INSTANCE_WR(ctx, 0x424/4, 0x00000111); -	INSTANCE_WR(ctx, 0x428/4, 0x00000060); -	INSTANCE_WR(ctx, 0x444/4, 0x00000080); -	INSTANCE_WR(ctx, 0x448/4, 0xffff0000); -	INSTANCE_WR(ctx, 0x44c/4, 0x00000001); -	INSTANCE_WR(ctx, 0x460/4, 0x44400000); -	INSTANCE_WR(ctx, 0x48c/4, 0xffff0000); -	for(i = 0x4e0; i< 0x4e8; i += 4) -		INSTANCE_WR(ctx, i/4, 0x0fff0000); -	INSTANCE_WR(ctx, 0x4ec/4, 0x00011100); -	for(i = 0x508; i< 0x548; i += 4) -		INSTANCE_WR(ctx, i/4, 0x07ff0000); -	INSTANCE_WR(ctx, 0x550/4, 0x4b7fffff); -	INSTANCE_WR(ctx, 0x58c/4, 0x00000080); -	INSTANCE_WR(ctx, 0x590/4, 0x30201000); -	INSTANCE_WR(ctx, 0x594/4, 0x70605040); -	INSTANCE_WR(ctx, 0x598/4, 0xb8a89888); -	INSTANCE_WR(ctx, 0x59c/4, 0xf8e8d8c8); -	INSTANCE_WR(ctx, 0x5b0/4, 0xb0000000); -	for(i = 0x600; i< 0x640; i += 4) -		INSTANCE_WR(ctx, i/4, 0x00010588); -	for(i = 0x640; i< 0x680; i += 4) -		INSTANCE_WR(ctx, i/4, 0x00030303); -	for(i = 0x6c0; i< 0x700; i += 4) -		INSTANCE_WR(ctx, i/4, 0x0008aae4); -	for(i = 0x700; i< 0x740; i += 4) -		INSTANCE_WR(ctx, i/4, 0x01012000); -	for(i = 0x740; i< 0x780; i += 4) -		INSTANCE_WR(ctx, i/4, 0x00080008); -	INSTANCE_WR(ctx, 0x85c/4, 0x00040000); -	INSTANCE_WR(ctx, 0x860/4, 0x00010000); -	for(i = 0x864; i< 0x874; i += 4) -		INSTANCE_WR(ctx, i/4, 0x00040004); -	INSTANCE_WR(ctx, 0x1f18/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f1c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f20/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f28/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f2c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f30/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f38/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f3c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f40/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f48/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f4c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f50/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f58/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f5c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f60/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f68/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f6c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f70/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f78/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f7c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f80/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f88/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f8c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f90/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f98/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f9c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1fa0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1fa8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1fac/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1fb0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1fb8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1fbc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1fc0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1fc8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1fcc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1fd0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1fd8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1fdc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1fe0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1fe8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1fec/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1ff0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1ff8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1ffc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2000/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2008/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x200c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2010/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2018/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x201c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2020/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2028/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x202c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2030/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2038/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x203c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2040/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2048/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x204c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2050/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2058/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x205c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2060/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2068/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x206c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2070/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2078/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x207c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2080/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2088/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x208c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2090/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2098/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x209c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x20a0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x20a8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x20ac/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x20b0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x20b8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x20bc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x20c0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x20c8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x20cc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x20d0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x20d8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x20dc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x20e0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x20e8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x20ec/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x20f0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x20f8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x20fc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2100/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2108/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x210c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2110/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2118/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x211c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2120/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2128/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x212c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2130/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2138/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x213c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2140/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2148/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x214c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2150/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2158/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x215c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2160/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2168/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x216c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2170/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2178/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x217c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2180/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2188/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x218c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2190/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2198/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x219c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x21a0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x21a8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x21ac/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x21b0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x21b8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x21bc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x21c0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x21c8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x21cc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x21d0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x21d8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x21dc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x21e0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x21e8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x21ec/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x21f0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x21f8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x21fc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2200/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2208/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x220c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2210/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2218/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x221c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2220/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2228/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x222c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2230/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2238/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x223c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2240/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2248/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x224c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2250/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2258/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x225c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2260/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2268/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x226c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2270/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2278/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x227c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2280/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2288/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x228c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2290/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2298/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x229c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x22a0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x22a8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x22ac/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x22b0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x22b8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x22bc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x22c0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x22c8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x22cc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x22d0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x22d8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x22dc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x22e0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x22e8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x22ec/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x22f0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x22f8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x22fc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2300/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2308/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x230c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2310/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2318/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x231c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2320/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2328/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x232c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2330/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2338/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x233c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2340/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2348/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x234c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2350/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2358/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x235c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2360/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2368/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x236c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2370/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2378/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x237c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2380/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2388/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x238c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2390/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2398/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x239c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x23a0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x23a8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x23ac/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x23b0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x23b8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x23bc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x23c0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x23c8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x23cc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x23d0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x23d8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x23dc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x23e0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x23e8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x23ec/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x23f0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x23f8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x23fc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2400/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2408/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x240c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2410/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2418/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x241c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2420/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2428/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x242c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2430/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2438/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x243c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2440/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2448/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x244c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2450/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2458/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x245c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2460/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2468/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x246c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2470/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2478/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x247c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2480/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2488/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x248c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2490/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2498/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x249c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x24a0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x24a8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x24ac/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x24b0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x24b8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x24bc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x24c0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x24c8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x24cc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x24d0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x24d8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x24dc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x24e0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x24e8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x24ec/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x24f0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x24f8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x24fc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2500/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2508/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x250c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2510/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2518/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x251c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2520/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2528/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x252c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2530/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2538/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x253c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2540/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2548/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x254c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2550/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2558/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x255c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2560/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2568/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x256c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2570/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2578/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x257c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2580/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2588/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x258c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2590/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2598/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x259c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x25a0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x25a8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x25ac/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x25b0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x25b8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x25bc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x25c0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x25c8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x25cc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x25d0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x25d8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x25dc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x25e0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x25e8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x25ec/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x25f0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x25f8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x25fc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2600/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2608/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x260c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2610/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2618/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x261c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2620/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2628/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x262c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2630/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2638/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x263c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2640/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2648/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x264c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2650/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2658/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x265c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2660/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2668/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x266c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2670/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2678/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x267c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2680/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2688/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x268c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2690/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2698/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x269c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x26a0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x26a8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x26ac/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x26b0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x26b8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x26bc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x26c0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x26c8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x26cc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x26d0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x26d8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x26dc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x26e0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x26e8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x26ec/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x26f0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x26f8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x26fc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2700/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2708/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x270c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2710/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2718/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x271c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2720/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2728/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x272c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2730/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2738/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x273c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2740/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2748/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x274c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2750/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2758/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x275c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2760/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2768/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x276c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2770/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2778/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x277c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2780/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2788/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x278c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2790/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2798/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x279c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x27a0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x27a8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x27ac/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x27b0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x27b8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x27bc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x27c0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x27c8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x27cc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x27d0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x27d8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x27dc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x27e0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x27e8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x27ec/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x27f0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x27f8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x27fc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2800/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2808/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x280c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2810/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2818/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x281c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2820/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2828/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x282c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2830/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2838/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x283c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2840/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2848/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x284c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2850/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2858/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x285c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2860/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2868/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x286c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2870/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2878/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x287c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2880/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2888/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x288c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2890/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2898/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x289c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x28a0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x28a8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x28ac/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x28b0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x28b8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x28bc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x28c0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x28c8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x28cc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x28d0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x28d8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x28dc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x28e0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x28e8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x28ec/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x28f0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x28f8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x28fc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2900/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2908/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x290c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2910/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2918/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x291c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2920/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2928/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x292c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2930/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2938/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x293c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2940/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2948/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x294c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2950/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2958/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x295c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2960/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2968/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x296c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2970/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2978/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x297c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2980/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2988/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x298c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2990/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2998/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x299c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x29a0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x29a8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x29ac/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x29b0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x29b8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x29bc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x29c0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x29c8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x29cc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x29d0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x29d8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x29dc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x29e0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x29e8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x29ec/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x29f0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x29f8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x29fc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a00/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a08/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a0c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a10/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a18/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a1c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a20/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a28/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a2c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a30/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a38/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a3c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a40/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a48/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a4c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a50/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a58/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a5c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a60/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a68/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a6c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a70/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a78/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a7c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a80/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a88/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a8c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a90/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a98/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a9c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2aa0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2aa8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2aac/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ab0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2ab8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2abc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ac0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2ac8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2acc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ad0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2ad8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2adc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ae0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2ae8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2aec/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2af0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2af8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2afc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b00/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b08/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b0c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b10/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b18/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b1c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b20/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b28/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b2c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b30/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b38/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b3c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b40/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b48/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b4c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b50/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b58/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b5c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b60/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b68/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b6c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b70/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b78/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b7c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b80/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b88/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b8c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b90/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b98/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b9c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ba0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2ba8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2bac/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2bb0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2bb8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2bbc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2bc0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2bc8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2bcc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2bd0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2bd8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2bdc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2be0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2be8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2bec/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2bf0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2bf8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2bfc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c00/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c08/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c0c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c10/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c18/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c1c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c20/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c28/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c2c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c30/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c38/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c3c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c40/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c48/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c4c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c50/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c58/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c5c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c60/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c68/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c6c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c70/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c78/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c7c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c80/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c88/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c8c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c90/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c98/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c9c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ca0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2ca8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2cac/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2cb0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2cb8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2cbc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2cc0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2cc8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2ccc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2cd0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2cd8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2cdc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ce0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2ce8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2cec/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2cf0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2cf8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2cfc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d00/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d08/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d0c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d10/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d18/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d1c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d20/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d28/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d2c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d30/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d38/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d3c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d40/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d48/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d4c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d50/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d58/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d5c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d60/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d68/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d6c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d70/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d78/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d7c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d80/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d88/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d8c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d90/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d98/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d9c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2da0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2da8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2dac/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2db0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2db8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2dbc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2dc0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2dc8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2dcc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2dd0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2dd8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2ddc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2de0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2de8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2dec/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2df0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2df8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2dfc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e00/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e08/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e0c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e10/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e18/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e1c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e20/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e28/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e2c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e30/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e38/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e3c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e40/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e48/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e4c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e50/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e58/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e5c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e60/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e68/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e6c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e70/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e78/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e7c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e80/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e88/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e8c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e90/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e98/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e9c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ea0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2ea8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2eac/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2eb0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2eb8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2ebc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ec0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2ec8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2ecc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ed0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2ed8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2edc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ee0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2ee8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2eec/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ef0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2ef8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2efc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f00/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f08/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f0c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f10/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f18/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f1c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f20/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f28/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f2c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f30/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f38/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f3c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f40/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f48/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f4c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f50/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f58/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f5c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f60/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f68/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f6c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f70/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f78/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f7c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f80/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f88/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f8c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f90/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f98/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f9c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2fa0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2fa8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2fac/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2fb0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2fb8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2fbc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2fc0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2fc8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2fcc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2fd0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2fd8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2fdc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2fe0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2fe8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2fec/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ff0/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2ff8/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2ffc/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3000/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x3008/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x300c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3010/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x3018/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x301c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3020/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x3028/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x302c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3030/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x3038/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x303c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3040/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x3048/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x304c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3050/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x3058/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x305c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3060/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x3068/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x306c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3070/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x3078/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x307c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3080/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x3088/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x308c/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3090/4, 0x000c001b); -	for(i = 0x30b8; i< 0x30c8; i += 4) -		INSTANCE_WR(ctx, i/4, 0x0000ffff); -	INSTANCE_WR(ctx, 0x344c/4, 0x3f800000); -	INSTANCE_WR(ctx, 0x3808/4, 0x3f800000); -	INSTANCE_WR(ctx, 0x381c/4, 0x3f800000); -	INSTANCE_WR(ctx, 0x3848/4, 0x40000000); -	INSTANCE_WR(ctx, 0x384c/4, 0x3f800000); -	INSTANCE_WR(ctx, 0x3850/4, 0x3f000000); -	INSTANCE_WR(ctx, 0x3858/4, 0x40000000); -	INSTANCE_WR(ctx, 0x385c/4, 0x3f800000); -	INSTANCE_WR(ctx, 0x3864/4, 0xbf800000); -	INSTANCE_WR(ctx, 0x386c/4, 0xbf800000); -} - -static void nv34_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx) -{ -	struct drm_nouveau_private *dev_priv = dev->dev_private; -	int i; - -	INSTANCE_WR(ctx, 0x40c/4, 0x01000101); -	INSTANCE_WR(ctx, 0x420/4, 0x00000111); -	INSTANCE_WR(ctx, 0x424/4, 0x00000060); -	INSTANCE_WR(ctx, 0x440/4, 0x00000080); -	INSTANCE_WR(ctx, 0x444/4, 0xffff0000); -	INSTANCE_WR(ctx, 0x448/4, 0x00000001); -	INSTANCE_WR(ctx, 0x45c/4, 0x44400000); -	INSTANCE_WR(ctx, 0x480/4, 0xffff0000); -	for(i = 0x4d4; i< 0x4dc; i += 4) -		INSTANCE_WR(ctx, i/4, 0x0fff0000); -	INSTANCE_WR(ctx, 0x4e0/4, 0x00011100); -	for(i = 0x4fc; i< 0x53c; i += 4) -		INSTANCE_WR(ctx, i/4, 0x07ff0000); -	INSTANCE_WR(ctx, 0x544/4, 0x4b7fffff); -	INSTANCE_WR(ctx, 0x57c/4, 0x00000080); -	INSTANCE_WR(ctx, 0x580/4, 0x30201000); -	INSTANCE_WR(ctx, 0x584/4, 0x70605040); -	INSTANCE_WR(ctx, 0x588/4, 0xb8a89888); -	INSTANCE_WR(ctx, 0x58c/4, 0xf8e8d8c8); -	INSTANCE_WR(ctx, 0x5a0/4, 0xb0000000); -	for(i = 0x5f0; i< 0x630; i += 4) -		INSTANCE_WR(ctx, i/4, 0x00010588); -	for(i = 0x630; i< 0x670; i += 4) -		INSTANCE_WR(ctx, i/4, 0x00030303); -	for(i = 0x6b0; i< 0x6f0; i += 4) -		INSTANCE_WR(ctx, i/4, 0x0008aae4); -	for(i = 0x6f0; i< 0x730; i += 4) -		INSTANCE_WR(ctx, i/4, 0x01012000); -	for(i = 0x730; i< 0x770; i += 4) -		INSTANCE_WR(ctx, i/4, 0x00080008); -	INSTANCE_WR(ctx, 0x850/4, 0x00040000); -	INSTANCE_WR(ctx, 0x854/4, 0x00010000); -	for(i = 0x858; i< 0x868; i += 4) -		INSTANCE_WR(ctx, i/4, 0x00040004); -	INSTANCE_WR(ctx, 0x15ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x15b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x15b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x15bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x15c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x15c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x15cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x15d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x15d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x15dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x15e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x15e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x15ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x15f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x15f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x15fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1600/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1604/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x160c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1610/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1614/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x161c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1620/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1624/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x162c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1630/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1634/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x163c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1640/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1644/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x164c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1650/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1654/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x165c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1660/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1664/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x166c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1670/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1674/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x167c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1680/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1684/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x168c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1690/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1694/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x169c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x16a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x16a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x16ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x16b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x16b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x16bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x16c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x16c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x16cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x16d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x16d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x16dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x16e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x16e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x16ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x16f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x16f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x16fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1700/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1704/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x170c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1710/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1714/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x171c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1720/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1724/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x172c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1730/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1734/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x173c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1740/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1744/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x174c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1750/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1754/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x175c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1760/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1764/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x176c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1770/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1774/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x177c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1780/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1784/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x178c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1790/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1794/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x179c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x17a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x17a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x17ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x17b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x17b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x17bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x17c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x17c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x17cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x17d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x17d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x17dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x17e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x17e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x17ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x17f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x17f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x17fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1800/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1804/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x180c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1810/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1814/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x181c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1820/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1824/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x182c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1830/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1834/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x183c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1840/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1844/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x184c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1850/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1854/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x185c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1860/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1864/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x186c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1870/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1874/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x187c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1880/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1884/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x188c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1890/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1894/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x189c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x18a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x18a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x18ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x18b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x18b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x18bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x18c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x18c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x18cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x18d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x18d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x18dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x18e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x18e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x18ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x18f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x18f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x18fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1900/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1904/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x190c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1910/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1914/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x191c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1920/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1924/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x192c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1930/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1934/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x193c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1940/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1944/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x194c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1950/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1954/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x195c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1960/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1964/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x196c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1970/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1974/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x197c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1980/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1984/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x198c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1990/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1994/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x199c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x19a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x19a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x19ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x19b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x19b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x19bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x19c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x19c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x19cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x19d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x19d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x19dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x19e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x19e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x19ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x19f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x19f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x19fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1a00/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1a04/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1a0c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1a10/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1a14/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1a1c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1a20/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1a24/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1a2c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1a30/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1a34/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1a3c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1a40/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1a44/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1a4c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1a50/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1a54/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1a5c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1a60/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1a64/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1a6c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1a70/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1a74/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1a7c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1a80/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1a84/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1a8c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1a90/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1a94/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1a9c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1aa0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1aa4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1aac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1ab0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1ab4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1abc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1ac0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1ac4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1acc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1ad0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1ad4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1adc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1ae0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1ae4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1aec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1af0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1af4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1afc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1b00/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1b04/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1b0c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1b10/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1b14/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1b1c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1b20/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1b24/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1b2c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1b30/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1b34/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1b3c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1b40/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1b44/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1b4c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1b50/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1b54/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1b5c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1b60/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1b64/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1b6c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1b70/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1b74/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1b7c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1b80/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1b84/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1b8c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1b90/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1b94/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1b9c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1ba0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1ba4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1bac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1bb0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1bb4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1bbc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1bc0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1bc4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1bcc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1bd0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1bd4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1bdc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1be0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1be4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1bec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1bf0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1bf4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1bfc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1c00/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1c04/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1c0c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1c10/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1c14/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1c1c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1c20/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1c24/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1c2c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1c30/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1c34/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1c3c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1c40/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1c44/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1c4c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1c50/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1c54/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1c5c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1c60/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1c64/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1c6c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1c70/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1c74/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1c7c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1c80/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1c84/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1c8c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1c90/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1c94/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1c9c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1ca0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1ca4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1cac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1cb0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1cb4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1cbc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1cc0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1cc4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1ccc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1cd0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1cd4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1cdc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1ce0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1ce4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1cec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1cf0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1cf4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1cfc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1d00/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1d04/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1d0c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1d10/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1d14/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1d1c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1d20/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1d24/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1d2c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1d30/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1d34/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1d3c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1d40/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1d44/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1d4c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1d50/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1d54/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1d5c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1d60/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1d64/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1d6c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1d70/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1d74/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1d7c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1d80/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1d84/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1d8c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1d90/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1d94/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1d9c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1da0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1da4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1dac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1db0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1db4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1dbc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1dc0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1dc4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1dcc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1dd0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1dd4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1ddc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1de0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1de4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1dec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1df0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1df4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1dfc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1e00/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1e04/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1e0c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1e10/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1e14/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1e1c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1e20/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1e24/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1e2c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1e30/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1e34/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1e3c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1e40/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1e44/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1e4c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1e50/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1e54/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1e5c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1e60/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1e64/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1e6c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1e70/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1e74/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1e7c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1e80/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1e84/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1e8c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1e90/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1e94/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1e9c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1ea0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1ea4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1eac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1eb0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1eb4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1ebc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1ec0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1ec4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1ecc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1ed0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1ed4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1edc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1ee0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1ee4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1eec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1ef0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1ef4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1efc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f00/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f04/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f0c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f10/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f14/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f1c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f20/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f24/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f2c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f30/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f34/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f3c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f40/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f44/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f4c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f50/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f54/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f5c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f60/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f64/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f6c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f70/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f74/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f7c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f80/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f84/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f8c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f90/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f94/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f9c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1fa0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1fa4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1fac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1fb0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1fb4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1fbc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1fc0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1fc4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1fcc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1fd0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1fd4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1fdc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1fe0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1fe4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1fec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1ff0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1ff4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1ffc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2000/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2004/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x200c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2010/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2014/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x201c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2020/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2024/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x202c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2030/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2034/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x203c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2040/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2044/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x204c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2050/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2054/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x205c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2060/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2064/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x206c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2070/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2074/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x207c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2080/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2084/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x208c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2090/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2094/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x209c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x20a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x20a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x20ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x20b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x20b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x20bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x20c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x20c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x20cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x20d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x20d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x20dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x20e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x20e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x20ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x20f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x20f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x20fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2100/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2104/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x210c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2110/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2114/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x211c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2120/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2124/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x212c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2130/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2134/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x213c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2140/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2144/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x214c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2150/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2154/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x215c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2160/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2164/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x216c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2170/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2174/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x217c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2180/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2184/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x218c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2190/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2194/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x219c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x21a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x21a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x21ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x21b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x21b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x21bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x21c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x21c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x21cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x21d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x21d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x21dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x21e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x21e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x21ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x21f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x21f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x21fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2200/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2204/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x220c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2210/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2214/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x221c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2220/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2224/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x222c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2230/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2234/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x223c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2240/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2244/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x224c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2250/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2254/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x225c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2260/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2264/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x226c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2270/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2274/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x227c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2280/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2284/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x228c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2290/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2294/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x229c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x22a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x22a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x22ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x22b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x22b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x22bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x22c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x22c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x22cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x22d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x22d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x22dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x22e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x22e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x22ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x22f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x22f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x22fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2300/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2304/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x230c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2310/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2314/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x231c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2320/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2324/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x232c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2330/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2334/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x233c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2340/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2344/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x234c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2350/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2354/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x235c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2360/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2364/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x236c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2370/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2374/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x237c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2380/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2384/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x238c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2390/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2394/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x239c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x23a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x23a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x23ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x23b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x23b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x23bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x23c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x23c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x23cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x23d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x23d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x23dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x23e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x23e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x23ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x23f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x23f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x23fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2400/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2404/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x240c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2410/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2414/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x241c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2420/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2424/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x242c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2430/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2434/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x243c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2440/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2444/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x244c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2450/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2454/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x245c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2460/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2464/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x246c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2470/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2474/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x247c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2480/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2484/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x248c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2490/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2494/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x249c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x24a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x24a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x24ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x24b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x24b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x24bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x24c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x24c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x24cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x24d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x24d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x24dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x24e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x24e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x24ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x24f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x24f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x24fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2500/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2504/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x250c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2510/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2514/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x251c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2520/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2524/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x252c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2530/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2534/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x253c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2540/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2544/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x254c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2550/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2554/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x255c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2560/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2564/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x256c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2570/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2574/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x257c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2580/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2584/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x258c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2590/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2594/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x259c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x25a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x25a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x25ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x25b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x25b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x25bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x25c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x25c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x25cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x25d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x25d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x25dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x25e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x25e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x25ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x25f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x25f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x25fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2600/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2604/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x260c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2610/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2614/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x261c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2620/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2624/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x262c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2630/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2634/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x263c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2640/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2644/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x264c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2650/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2654/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x265c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2660/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2664/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x266c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2670/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2674/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x267c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2680/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2684/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x268c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2690/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2694/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x269c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x26a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x26a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x26ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x26b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x26b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x26bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x26c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x26c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x26cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x26d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x26d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x26dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x26e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x26e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x26ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x26f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x26f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x26fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2700/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2704/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x270c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2710/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2714/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x271c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2720/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2724/4, 0x000c001b); -	for(i = 0x274c; i< 0x275c; i += 4) -		INSTANCE_WR(ctx, i/4, 0x0000ffff); -	INSTANCE_WR(ctx, 0x2ae0/4, 0x3f800000); -	INSTANCE_WR(ctx, 0x2e9c/4, 0x3f800000); -	INSTANCE_WR(ctx, 0x2eb0/4, 0x3f800000); -	INSTANCE_WR(ctx, 0x2edc/4, 0x40000000); -	INSTANCE_WR(ctx, 0x2ee0/4, 0x3f800000); -	INSTANCE_WR(ctx, 0x2ee4/4, 0x3f000000); -	INSTANCE_WR(ctx, 0x2eec/4, 0x40000000); -	INSTANCE_WR(ctx, 0x2ef0/4, 0x3f800000); -	INSTANCE_WR(ctx, 0x2ef8/4, 0xbf800000); -	INSTANCE_WR(ctx, 0x2f00/4, 0xbf800000); -} - -static void nv35_36_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx) -{ -	struct drm_nouveau_private *dev_priv = dev->dev_private; -	int i; - -	INSTANCE_WR(ctx, 0x40c/4, 0x00000101); -	INSTANCE_WR(ctx, 0x420/4, 0x00000111); -	INSTANCE_WR(ctx, 0x424/4, 0x00000060); -	INSTANCE_WR(ctx, 0x440/4, 0x00000080); -	INSTANCE_WR(ctx, 0x444/4, 0xffff0000); -	INSTANCE_WR(ctx, 0x448/4, 0x00000001); -	INSTANCE_WR(ctx, 0x45c/4, 0x44400000); -	INSTANCE_WR(ctx, 0x488/4, 0xffff0000); -	for(i = 0x4dc; i< 0x4e4; i += 4) -		INSTANCE_WR(ctx, i/4, 0x0fff0000); -	INSTANCE_WR(ctx, 0x4e8/4, 0x00011100); -	for(i = 0x504; i< 0x544; i += 4) -		INSTANCE_WR(ctx, i/4, 0x07ff0000); -	INSTANCE_WR(ctx, 0x54c/4, 0x4b7fffff); -	INSTANCE_WR(ctx, 0x588/4, 0x00000080); -	INSTANCE_WR(ctx, 0x58c/4, 0x30201000); -	INSTANCE_WR(ctx, 0x590/4, 0x70605040); -	INSTANCE_WR(ctx, 0x594/4, 0xb8a89888); -	INSTANCE_WR(ctx, 0x598/4, 0xf8e8d8c8); -	INSTANCE_WR(ctx, 0x5ac/4, 0xb0000000); -	for(i = 0x604; i< 0x644; i += 4) -		INSTANCE_WR(ctx, i/4, 0x00010588); -	for(i = 0x644; i< 0x684; i += 4) -		INSTANCE_WR(ctx, i/4, 0x00030303); -	for(i = 0x6c4; i< 0x704; i += 4) -		INSTANCE_WR(ctx, i/4, 0x0008aae4); -	for(i = 0x704; i< 0x744; i += 4) -		INSTANCE_WR(ctx, i/4, 0x01012000); -	for(i = 0x744; i< 0x784; i += 4) -		INSTANCE_WR(ctx, i/4, 0x00080008); -	INSTANCE_WR(ctx, 0x860/4, 0x00040000); -	INSTANCE_WR(ctx, 0x864/4, 0x00010000); -	for(i = 0x868; i< 0x878; i += 4) -		INSTANCE_WR(ctx, i/4, 0x00040004); -	INSTANCE_WR(ctx, 0x1f1c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f20/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f24/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f2c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f30/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f34/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f3c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f40/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f44/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f4c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f50/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f54/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f5c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f60/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f64/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f6c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f70/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f74/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f7c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f80/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f84/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f8c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1f90/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1f94/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1f9c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1fa0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1fa4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1fac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1fb0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1fb4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1fbc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1fc0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1fc4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1fcc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1fd0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1fd4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1fdc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1fe0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1fe4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1fec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x1ff0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x1ff4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x1ffc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2000/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2004/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x200c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2010/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2014/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x201c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2020/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2024/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x202c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2030/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2034/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x203c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2040/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2044/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x204c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2050/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2054/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x205c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2060/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2064/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x206c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2070/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2074/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x207c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2080/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2084/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x208c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2090/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2094/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x209c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x20a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x20a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x20ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x20b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x20b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x20bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x20c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x20c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x20cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x20d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x20d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x20dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x20e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x20e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x20ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x20f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x20f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x20fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2100/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2104/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x210c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2110/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2114/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x211c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2120/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2124/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x212c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2130/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2134/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x213c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2140/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2144/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x214c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2150/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2154/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x215c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2160/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2164/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x216c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2170/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2174/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x217c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2180/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2184/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x218c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2190/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2194/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x219c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x21a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x21a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x21ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x21b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x21b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x21bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x21c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x21c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x21cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x21d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x21d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x21dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x21e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x21e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x21ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x21f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x21f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x21fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2200/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2204/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x220c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2210/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2214/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x221c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2220/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2224/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x222c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2230/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2234/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x223c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2240/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2244/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x224c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2250/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2254/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x225c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2260/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2264/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x226c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2270/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2274/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x227c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2280/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2284/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x228c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2290/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2294/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x229c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x22a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x22a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x22ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x22b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x22b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x22bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x22c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x22c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x22cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x22d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x22d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x22dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x22e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x22e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x22ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x22f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x22f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x22fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2300/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2304/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x230c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2310/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2314/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x231c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2320/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2324/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x232c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2330/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2334/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x233c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2340/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2344/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x234c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2350/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2354/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x235c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2360/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2364/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x236c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2370/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2374/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x237c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2380/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2384/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x238c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2390/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2394/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x239c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x23a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x23a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x23ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x23b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x23b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x23bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x23c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x23c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x23cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x23d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x23d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x23dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x23e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x23e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x23ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x23f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x23f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x23fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2400/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2404/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x240c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2410/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2414/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x241c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2420/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2424/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x242c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2430/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2434/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x243c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2440/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2444/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x244c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2450/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2454/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x245c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2460/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2464/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x246c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2470/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2474/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x247c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2480/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2484/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x248c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2490/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2494/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x249c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x24a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x24a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x24ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x24b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x24b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x24bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x24c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x24c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x24cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x24d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x24d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x24dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x24e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x24e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x24ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x24f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x24f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x24fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2500/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2504/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x250c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2510/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2514/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x251c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2520/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2524/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x252c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2530/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2534/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x253c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2540/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2544/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x254c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2550/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2554/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x255c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2560/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2564/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x256c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2570/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2574/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x257c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2580/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2584/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x258c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2590/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2594/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x259c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x25a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x25a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x25ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x25b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x25b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x25bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x25c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x25c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x25cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x25d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x25d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x25dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x25e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x25e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x25ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x25f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x25f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x25fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2600/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2604/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x260c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2610/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2614/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x261c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2620/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2624/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x262c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2630/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2634/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x263c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2640/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2644/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x264c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2650/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2654/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x265c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2660/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2664/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x266c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2670/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2674/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x267c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2680/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2684/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x268c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2690/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2694/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x269c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x26a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x26a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x26ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x26b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x26b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x26bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x26c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x26c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x26cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x26d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x26d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x26dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x26e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x26e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x26ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x26f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x26f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x26fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2700/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2704/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x270c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2710/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2714/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x271c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2720/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2724/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x272c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2730/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2734/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x273c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2740/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2744/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x274c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2750/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2754/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x275c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2760/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2764/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x276c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2770/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2774/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x277c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2780/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2784/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x278c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2790/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2794/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x279c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x27a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x27a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x27ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x27b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x27b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x27bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x27c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x27c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x27cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x27d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x27d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x27dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x27e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x27e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x27ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x27f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x27f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x27fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2800/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2804/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x280c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2810/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2814/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x281c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2820/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2824/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x282c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2830/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2834/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x283c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2840/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2844/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x284c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2850/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2854/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x285c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2860/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2864/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x286c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2870/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2874/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x287c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2880/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2884/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x288c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2890/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2894/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x289c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x28a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x28a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x28ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x28b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x28b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x28bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x28c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x28c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x28cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x28d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x28d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x28dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x28e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x28e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x28ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x28f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x28f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x28fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2900/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2904/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x290c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2910/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2914/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x291c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2920/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2924/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x292c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2930/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2934/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x293c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2940/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2944/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x294c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2950/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2954/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x295c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2960/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2964/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x296c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2970/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2974/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x297c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2980/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2984/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x298c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2990/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2994/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x299c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x29a0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x29a4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x29ac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x29b0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x29b4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x29bc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x29c0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x29c4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x29cc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x29d0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x29d4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x29dc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x29e0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x29e4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x29ec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x29f0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x29f4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x29fc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a00/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a04/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a0c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a10/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a14/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a1c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a20/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a24/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a2c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a30/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a34/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a3c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a40/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a44/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a4c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a50/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a54/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a5c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a60/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a64/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a6c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a70/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a74/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a7c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a80/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a84/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a8c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2a90/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2a94/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2a9c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2aa0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2aa4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2aac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2ab0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ab4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2abc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2ac0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ac4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2acc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2ad0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ad4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2adc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2ae0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ae4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2aec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2af0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2af4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2afc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b00/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b04/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b0c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b10/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b14/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b1c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b20/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b24/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b2c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b30/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b34/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b3c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b40/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b44/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b4c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b50/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b54/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b5c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b60/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b64/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b6c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b70/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b74/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b7c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b80/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b84/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b8c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2b90/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2b94/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2b9c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2ba0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ba4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2bac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2bb0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2bb4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2bbc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2bc0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2bc4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2bcc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2bd0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2bd4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2bdc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2be0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2be4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2bec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2bf0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2bf4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2bfc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c00/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c04/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c0c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c10/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c14/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c1c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c20/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c24/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c2c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c30/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c34/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c3c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c40/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c44/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c4c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c50/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c54/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c5c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c60/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c64/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c6c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c70/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c74/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c7c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c80/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c84/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c8c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2c90/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2c94/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2c9c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2ca0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ca4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2cac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2cb0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2cb4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2cbc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2cc0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2cc4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2ccc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2cd0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2cd4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2cdc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2ce0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ce4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2cec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2cf0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2cf4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2cfc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d00/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d04/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d0c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d10/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d14/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d1c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d20/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d24/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d2c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d30/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d34/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d3c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d40/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d44/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d4c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d50/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d54/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d5c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d60/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d64/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d6c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d70/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d74/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d7c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d80/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d84/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d8c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2d90/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2d94/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2d9c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2da0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2da4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2dac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2db0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2db4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2dbc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2dc0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2dc4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2dcc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2dd0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2dd4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2ddc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2de0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2de4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2dec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2df0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2df4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2dfc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e00/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e04/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e0c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e10/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e14/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e1c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e20/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e24/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e2c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e30/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e34/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e3c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e40/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e44/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e4c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e50/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e54/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e5c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e60/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e64/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e6c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e70/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e74/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e7c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e80/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e84/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e8c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2e90/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2e94/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2e9c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2ea0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ea4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2eac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2eb0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2eb4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2ebc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2ec0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ec4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2ecc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2ed0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ed4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2edc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2ee0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ee4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2eec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2ef0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ef4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2efc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f00/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f04/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f0c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f10/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f14/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f1c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f20/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f24/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f2c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f30/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f34/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f3c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f40/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f44/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f4c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f50/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f54/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f5c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f60/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f64/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f6c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f70/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f74/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f7c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f80/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f84/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f8c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2f90/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2f94/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2f9c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2fa0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2fa4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2fac/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2fb0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2fb4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2fbc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2fc0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2fc4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2fcc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2fd0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2fd4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2fdc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2fe0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2fe4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2fec/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x2ff0/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x2ff4/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x2ffc/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x3000/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3004/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x300c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x3010/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3014/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x301c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x3020/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3024/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x302c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x3030/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3034/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x303c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x3040/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3044/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x304c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x3050/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3054/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x305c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x3060/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3064/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x306c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x3070/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3074/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x307c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x3080/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3084/4, 0x000c001b); -	INSTANCE_WR(ctx, 0x308c/4, 0x10700ff9); -	INSTANCE_WR(ctx, 0x3090/4, 0x0436086c); -	INSTANCE_WR(ctx, 0x3094/4, 0x000c001b); -	for(i = 0x30bc; i< 0x30cc; i += 4) -		INSTANCE_WR(ctx, i/4, 0x0000ffff); -	INSTANCE_WR(ctx, 0x3450/4, 0x3f800000); -	INSTANCE_WR(ctx, 0x380c/4, 0x3f800000); -	INSTANCE_WR(ctx, 0x3820/4, 0x3f800000); -	INSTANCE_WR(ctx, 0x384c/4, 0x40000000); -	INSTANCE_WR(ctx, 0x3850/4, 0x3f800000); -	INSTANCE_WR(ctx, 0x3854/4, 0x3f000000); -	INSTANCE_WR(ctx, 0x385c/4, 0x40000000); -	INSTANCE_WR(ctx, 0x3860/4, 0x3f800000); -	INSTANCE_WR(ctx, 0x3868/4, 0xbf800000); -	INSTANCE_WR(ctx, 0x3870/4, 0xbf800000);} - -int nv30_graph_create_context(struct nouveau_channel *chan) -{ -	struct drm_device *dev = chan->dev; -	struct drm_nouveau_private *dev_priv = dev->dev_private; -	void (*ctx_init)(struct drm_device *, struct nouveau_gpuobj *); -	unsigned int ctx_size; -	int ret; - -	switch (dev_priv->chipset) { -	case 0x30: -	case 0x31: -		ctx_size = NV30_31_GRCTX_SIZE; -		ctx_init = nv30_31_graph_context_init; -		break; -	case 0x34: -		ctx_size = NV34_GRCTX_SIZE; -		ctx_init = nv34_graph_context_init; -		break; -	case 0x35: -	case 0x36: -		ctx_size = NV35_36_GRCTX_SIZE; -		ctx_init = nv35_36_graph_context_init; -		break; -	default: -		ctx_size = 0; -		ctx_init = nv35_36_graph_context_init; -		DRM_ERROR("Please contact the devs if you want your NV%x card to work\n",dev_priv->chipset); -		break; -	} - -	if ((ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, ctx_size, 16, -					  NVOBJ_FLAG_ZERO_ALLOC, -					  &chan->ramin_grctx))) -		return ret; - -	/* Initialise default context values */ -	ctx_init(dev, chan->ramin_grctx->gpuobj); - -	INSTANCE_WR(chan->ramin_grctx->gpuobj, 0x28/4, (chan->id<<24)|0x1); /* CTX_USER */ -	INSTANCE_WR(dev_priv->ctx_table->gpuobj, chan->id, -			chan->ramin_grctx->instance >> 4); - -	return 0; -} - -void nv30_graph_destroy_context(struct nouveau_channel *chan) -{ -	struct drm_device *dev = chan->dev; -	struct drm_nouveau_private *dev_priv = dev->dev_private; - -	if (chan->ramin_grctx) -		nouveau_gpuobj_ref_del(dev, &chan->ramin_grctx); - -	INSTANCE_WR(dev_priv->ctx_table->gpuobj, chan->id, 0); -} - -static int -nouveau_graph_wait_idle(struct drm_device *dev) -{ -	struct drm_nouveau_private *dev_priv = dev->dev_private; -	int tv = 1000; - -	while (tv--) { -		if (NV_READ(0x400700) == 0) -			break; -	} - -	if (NV_READ(0x400700)) { -		DRM_ERROR("timeout!\n"); -		return -EBUSY; -	} -	return 0; -} - -int nv30_graph_load_context(struct nouveau_channel *chan) -{ -	struct drm_device *dev = chan->dev; -	struct drm_nouveau_private *dev_priv = dev->dev_private; -	uint32_t inst; - -	if (!chan->ramin_grctx) -		return -EINVAL; -	inst = chan->ramin_grctx->instance >> 4; - -	NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_POINTER, inst); -	NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_XFER, -		 NV20_PGRAPH_CHANNEL_CTX_XFER_LOAD); - -	return nouveau_graph_wait_idle(dev); -} - -int nv30_graph_save_context(struct nouveau_channel *chan) -{ -	struct drm_device *dev = chan->dev; -	struct drm_nouveau_private *dev_priv = dev->dev_private; -	uint32_t inst; - -	if (!chan->ramin_grctx) -		return -EINVAL; -	inst = chan->ramin_grctx->instance >> 4; - -	NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_POINTER, inst); -	NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_XFER, -		 NV20_PGRAPH_CHANNEL_CTX_XFER_SAVE); - -	return nouveau_graph_wait_idle(dev); -} - -int nv30_graph_init(struct drm_device *dev) -{ -	struct drm_nouveau_private *dev_priv = dev->dev_private; -	uint32_t vramsz, tmp; -	int ret, i; - -	NV_WRITE(NV03_PMC_ENABLE, NV_READ(NV03_PMC_ENABLE) & -			~NV_PMC_ENABLE_PGRAPH); -	NV_WRITE(NV03_PMC_ENABLE, NV_READ(NV03_PMC_ENABLE) | -			 NV_PMC_ENABLE_PGRAPH); - -        /* Create Context Pointer Table */ -        dev_priv->ctx_table_size = 32 * 4; -	if ((ret = nouveau_gpuobj_new_ref(dev, NULL, NULL, 0, -					  dev_priv->ctx_table_size, 16, -					  NVOBJ_FLAG_ZERO_ALLOC, -					  &dev_priv->ctx_table))) -		return ret; - -        NV_WRITE(NV10_PGRAPH_CHANNEL_CTX_TABLE, -		 dev_priv->ctx_table->instance >> 4); - -	NV_WRITE(NV03_PGRAPH_INTR   , 0xFFFFFFFF); -	NV_WRITE(NV03_PGRAPH_INTR_EN, 0xFFFFFFFF); - -	NV_WRITE(NV04_PGRAPH_DEBUG_0, 0xFFFFFFFF); -	NV_WRITE(NV04_PGRAPH_DEBUG_0, 0x00000000); -	NV_WRITE(NV04_PGRAPH_DEBUG_1, 0x401287c0); -	NV_WRITE(0x400890, 0x01b463ff); -	NV_WRITE(NV04_PGRAPH_DEBUG_3, 0xf3de0471); -	NV_WRITE(NV10_PGRAPH_DEBUG_4, 0x00008000); -	NV_WRITE(NV04_PGRAPH_LIMIT_VIOL_PIX, 0xf04bdff6); -	NV_WRITE(0x400B80, 0x1003d888); -	NV_WRITE(0x400098, 0x00000000); -	NV_WRITE(0x40009C, 0x0005ad00); -	NV_WRITE(0x400B88, 0x62ff00ff); // suspiciously like PGRAPH_DEBUG_2 -	NV_WRITE(0x4000a0, 0x00000000); -	NV_WRITE(0x4000a4, 0x00000008); -	NV_WRITE(0x4008a8, 0xb784a400); -	NV_WRITE(0x400ba0, 0x002f8685); -	NV_WRITE(0x400ba4, 0x00231f3f); -	NV_WRITE(0x4008a4, 0x40000020); -	NV_WRITE(0x400B84, 0x0c000000); -	NV_WRITE(NV04_PGRAPH_DEBUG_2, 0x62ff0f7f); -	NV_WRITE(0x4000c0, 0x00000016); -	NV_WRITE(0x400780, 0x000014e4); - -	/* copy tile info from PFB */ -	for (i=0; i<NV10_PFB_TILE__SIZE; i++) { -		NV_WRITE(NV10_PGRAPH_TILE(i), NV_READ(NV10_PFB_TILE(i))); -		NV_WRITE(NV10_PGRAPH_TLIMIT(i), NV_READ(NV10_PFB_TLIMIT(i))); -		NV_WRITE(NV10_PGRAPH_TSIZE(i), NV_READ(NV10_PFB_TSIZE(i))); -		NV_WRITE(NV10_PGRAPH_TSTATUS(i), NV_READ(NV10_PFB_TSTATUS(i))); -	} - -	NV_WRITE(NV10_PGRAPH_CTX_CONTROL, 0x10010100); -	NV_WRITE(NV10_PGRAPH_STATE      , 0xFFFFFFFF); -	NV_WRITE(NV04_PGRAPH_FIFO       , 0x00000001); - -	/* begin RAM config */ -	vramsz = drm_get_resource_len(dev, 0) - 1; -	NV_WRITE(0x4009A4, NV_READ(NV04_PFB_CFG0)); -	NV_WRITE(0x4009A8, NV_READ(NV04_PFB_CFG1)); -	NV_WRITE(0x400750, 0x00EA0000); -	NV_WRITE(0x400754, NV_READ(NV04_PFB_CFG0)); -	NV_WRITE(0x400750, 0x00EA0004); -	NV_WRITE(0x400754, NV_READ(NV04_PFB_CFG1)); -	NV_WRITE(0x400820, 0); -	NV_WRITE(0x400824, 0); -	NV_WRITE(0x400864, vramsz-1); -	NV_WRITE(0x400868, vramsz-1); - -	NV_WRITE(0x400B20, 0x00000000); -	NV_WRITE(0x400B04, 0xFFFFFFFF); - -	/* per-context state, doesn't belong here */ -	tmp = NV_READ(NV10_PGRAPH_SURFACE) & 0x0007ff00; -	NV_WRITE(NV10_PGRAPH_SURFACE, tmp); -	tmp = NV_READ(NV10_PGRAPH_SURFACE) | 0x00020100; -	NV_WRITE(NV10_PGRAPH_SURFACE, tmp); - -	NV_WRITE(NV03_PGRAPH_ABS_UCLIP_XMIN, 0); -	NV_WRITE(NV03_PGRAPH_ABS_UCLIP_YMIN, 0); -	NV_WRITE(NV03_PGRAPH_ABS_UCLIP_XMAX, 0x7fff); -	NV_WRITE(NV03_PGRAPH_ABS_UCLIP_YMAX, 0x7fff); - -	return 0; -} - -void nv30_graph_takedown(struct drm_device *dev) -{ -	struct drm_nouveau_private *dev_priv = dev->dev_private; - -	nouveau_gpuobj_ref_del(dev, &dev_priv->ctx_table); -} - diff --git a/shared-core/nv40_graph.c b/shared-core/nv40_graph.c index 3f3df515..7ce4273d 100644 --- a/shared-core/nv40_graph.c +++ b/shared-core/nv40_graph.c @@ -37,6 +37,7 @@  #define NV41_GRCTX_SIZE (92*1024)  #define NV43_GRCTX_SIZE (70*1024)  #define NV46_GRCTX_SIZE (70*1024) /* probably ~64KiB */ +#define NV47_GRCTX_SIZE (125*1024)  #define NV49_GRCTX_SIZE (164640)  #define NV4A_GRCTX_SIZE (64*1024)  #define NV4B_GRCTX_SIZE (164640) @@ -565,6 +566,136 @@ nv46_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)  		INSTANCE_WR(ctx, i/4, 0x3f800000);  } +/* This may only work on 7800 AGP cards, will include a warning */ +static void +nv47_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx) +{ +	struct drm_nouveau_private *dev_priv = dev->dev_private; +	int i; + +	INSTANCE_WR(ctx, 0x00000000/4, ctx->im_pramin->start); +	INSTANCE_WR(ctx, 0x00000024/4, 0x0000ffff); +	INSTANCE_WR(ctx, 0x00000028/4, 0x0000ffff); +	INSTANCE_WR(ctx, 0x00000030/4, 0x00000001); +	INSTANCE_WR(ctx, 0x0000011c/4, 0x20010001); +	INSTANCE_WR(ctx, 0x00000120/4, 0x0f73ef00); +	INSTANCE_WR(ctx, 0x00000128/4, 0x02008821); +	INSTANCE_WR(ctx, 0x00000178/4, 0x00000040); +	INSTANCE_WR(ctx, 0x0000017c/4, 0x00000040); +	INSTANCE_WR(ctx, 0x00000180/4, 0x00000040); +	INSTANCE_WR(ctx, 0x00000188/4, 0x00000040); +	for (i=0x00000194; i<=0x000001b0; i+=4) +		INSTANCE_WR(ctx, i/4, 0x80000000); +	INSTANCE_WR(ctx, 0x000001d0/4, 0x0b0b0b0c); +	INSTANCE_WR(ctx, 0x00000340/4, 0x00040000); +	INSTANCE_WR(ctx, 0x00000350/4, 0x55555555); +	INSTANCE_WR(ctx, 0x00000354/4, 0x55555555); +	INSTANCE_WR(ctx, 0x00000358/4, 0x55555555); +	INSTANCE_WR(ctx, 0x0000035c/4, 0x55555555); +	INSTANCE_WR(ctx, 0x00000388/4, 0x00000008); +	INSTANCE_WR(ctx, 0x0000039c/4, 0x00001010); +	for (i=0x000003c0; i<=0x000003fc; i+=4) +		INSTANCE_WR(ctx, i/4, 0x00000111); +	INSTANCE_WR(ctx, 0x00000454/4, 0x00000111); +	INSTANCE_WR(ctx, 0x00000458/4, 0x00080060); +	INSTANCE_WR(ctx, 0x00000474/4, 0x00000080); +	INSTANCE_WR(ctx, 0x00000478/4, 0xffff0000); +	INSTANCE_WR(ctx, 0x0000047c/4, 0x00000001); +	INSTANCE_WR(ctx, 0x00000490/4, 0x46400000); +	INSTANCE_WR(ctx, 0x000004a0/4, 0xffff0000); +	for (i=0x000004a4; i<=0x000004e0; i+=4) +		INSTANCE_WR(ctx, i/4, 0x88888888); +	INSTANCE_WR(ctx, 0x000004f4/4, 0x0fff0000); +	INSTANCE_WR(ctx, 0x000004f8/4, 0x0fff0000); +	INSTANCE_WR(ctx, 0x00000500/4, 0x00011100); +	for (i=0x0000051c; i<=0x00000558; i+=4) +		INSTANCE_WR(ctx, i/4, 0x07ff0000); +	INSTANCE_WR(ctx, 0x00000564/4, 0x4b7fffff); +	INSTANCE_WR(ctx, 0x0000058c/4, 0x30201000); +	INSTANCE_WR(ctx, 0x00000590/4, 0x70605040); +	INSTANCE_WR(ctx, 0x00000594/4, 0xb8a89888); +	INSTANCE_WR(ctx, 0x00000598/4, 0xf8e8d8c8); +	INSTANCE_WR(ctx, 0x000005ac/4, 0x40100000); +	INSTANCE_WR(ctx, 0x000005c8/4, 0x0000ffff); +	INSTANCE_WR(ctx, 0x000005fc/4, 0x435185d6); +	INSTANCE_WR(ctx, 0x00000600/4, 0x2155b699); +	INSTANCE_WR(ctx, 0x00000604/4, 0xfedcba98); +	INSTANCE_WR(ctx, 0x00000608/4, 0x00000098); +	INSTANCE_WR(ctx, 0x00000618/4, 0xffffffff); +	INSTANCE_WR(ctx, 0x0000061c/4, 0x00ff7000); +	INSTANCE_WR(ctx, 0x00000620/4, 0x0000ffff); +	INSTANCE_WR(ctx, 0x00000630/4, 0x00ff0000); +	INSTANCE_WR(ctx, 0x0000066c/4, 0x00ffff00); +	for (i=0x000006b0; i<=0x000006ec; i+=4) +		INSTANCE_WR(ctx, i/4, 0x00018488); +	for (i=0x000006f0; i<=0x0000072c; i+=4) +		INSTANCE_WR(ctx, i/4, 0x00028202); +	for (i=0x00000770; i<=0x000007ac; i+=4) +		INSTANCE_WR(ctx, i/4, 0x0000aae4); +	for (i=0x000007b0; i<=0x000007ec; i+=4) +		INSTANCE_WR(ctx, i/4, 0x01012000); +	for (i=0x000007f0; i<=0x0000082c; i+=4) +		INSTANCE_WR(ctx, i/4, 0x00080008); +	for (i=0x00000870; i<=0x000008ac; i+=4) +		INSTANCE_WR(ctx, i/4, 0x00100008); +	INSTANCE_WR(ctx, 0x00000900/4, 0x0001bc80); +	INSTANCE_WR(ctx, 0x00000904/4, 0x0001bc80); +	INSTANCE_WR(ctx, 0x00000908/4, 0x0001bc80); +	INSTANCE_WR(ctx, 0x0000090c/4, 0x0001bc80); +	INSTANCE_WR(ctx, 0x00000910/4, 0x00000202); +	INSTANCE_WR(ctx, 0x00000914/4, 0x00000202); +	INSTANCE_WR(ctx, 0x00000918/4, 0x00000202); +	INSTANCE_WR(ctx, 0x0000091c/4, 0x00000202); +	for (i=0x00000930; i<=0x0000095c; i+=4) +		INSTANCE_WR(ctx, i/4, 0x00000008); +	INSTANCE_WR(ctx, 0x00000970/4, 0x00000002); +	INSTANCE_WR(ctx, 0x000009a4/4, 0x00000021); +	INSTANCE_WR(ctx, 0x000009a8/4, 0x030c30c3); +	INSTANCE_WR(ctx, 0x000009b4/4, 0x3e020200); +	INSTANCE_WR(ctx, 0x000009b8/4, 0x00ffffff); +	INSTANCE_WR(ctx, 0x000009bc/4, 0x40103f00); +	INSTANCE_WR(ctx, 0x000009c8/4, 0x00040000); +	INSTANCE_WR(ctx, 0x00000a00/4, 0x00008100); +	INSTANCE_WR(ctx, 0x00000a8c/4, 0x00000001); +	INSTANCE_WR(ctx, 0x00000ad0/4, 0x00001001); +	INSTANCE_WR(ctx, 0x00000adc/4, 0x00000003); +	INSTANCE_WR(ctx, 0x00000ae0/4, 0x00888001); +	for (i=0x00000b10; i<=0x00000b8c; i+=4) +		INSTANCE_WR(ctx, i/4, 0xffffffff); +	INSTANCE_WR(ctx, 0x00000bb4/4, 0x00000005); +	INSTANCE_WR(ctx, 0x00000bc0/4, 0x0000ffff); +	for (i=0x00000bdc; i<=0x00000bf8; i+=4) +		INSTANCE_WR(ctx, i/4, 0x00005555); +	INSTANCE_WR(ctx, 0x00000bfc/4, 0x00000001); +	INSTANCE_WR(ctx, 0x00000c34/4, 0x00000001); +	INSTANCE_WR(ctx, 0x00000c38/4, 0x08e00001); +	INSTANCE_WR(ctx, 0x00000c3c/4, 0x000e3000); +	for (i=0x00003000; i<=0x00003078; i+=8) +		INSTANCE_WR(ctx, i/4, 0x3f800000); +	for (i=0x00004dc0; i<=0x00006fb0; i+=24) +		INSTANCE_WR(ctx, i/4, 0x00000001); +	for (i=0x00006fc0; i<=0x000073b0; i+=16) +		INSTANCE_WR(ctx, i/4, 0x3f800000); +	for (i=0x00009800; i<=0x0000b9f0; i+=24) +		INSTANCE_WR(ctx, i/4, 0x00000001); +	for (i=0x0000ba00; i<=0x00010430; i+=24) +		INSTANCE_WR(ctx, i/4, 0x3f800000); +	for (i=0x00010440; i<=0x00010830; i+=16) +		INSTANCE_WR(ctx, i/4, 0x3f800000); +	for (i=0x00012c80; i<=0x00014e70; i+=24) +		INSTANCE_WR(ctx, i/4, 0x00000001); +	for (i=0x00014e80; i<=0x00015270; i+=16) +		INSTANCE_WR(ctx, i/4, 0x3f800000); +	for (i=0x000176c0; i<=0x000198b0; i+=24) +		INSTANCE_WR(ctx, i/4, 0x00000001); +	for (i=0x000198c0; i<=0x00019cb0; i+=16) +		INSTANCE_WR(ctx, i/4, 0x3f800000); +	for (i=0x0001c100; i<=0x0001e2f0; i+=24) +		INSTANCE_WR(ctx, i/4, 0x00000001); +	for (i=0x0001e300; i<=0x0001e6f0; i+=16) +		INSTANCE_WR(ctx, i/4, 0x3f800000); +} +  static void  nv49_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)  { @@ -1361,6 +1492,11 @@ nv40_graph_create_context(struct nouveau_channel *chan)  		ctx_size = NV46_GRCTX_SIZE;  		ctx_init = nv46_graph_context_init;  		break; +	case 0x47: +		DRM_INFO("NV47 warning: If your card behaves strangely, please come to the irc channel\n"); +		ctx_size = NV47_GRCTX_SIZE; +		ctx_init = nv47_graph_context_init; +		break;  	case 0x49:  		ctx_size = NV49_GRCTX_SIZE;  		ctx_init = nv49_graph_context_init; @@ -1675,6 +1811,38 @@ static uint32_t nv46_ctx_voodoo[] = {  	0x00600009, 0x00700005, 0x00700006, 0x0060000e, ~0  }; +static uint32_t nv47_ctx_voodoo[] = { +	0x00400889, 0x00200000, 0x0060000a, 0x00200000, 0x00300000, 0x00800001, +	0x00700009, 0x0060000e, 0x00400d64, 0x00400d05, 0x00409265, 0x00409606, +	0x0040a368, 0x0040198f, 0x00200001, 0x0060000a, 0x00700080, 0x00104042, +	0x00200001, 0x0060000a, 0x00700000, 0x001040c5, 0x00401826, 0x00401968, +	0x0060000d, 0x00200000, 0x0060000a, 0x00700000, 0x00106000, 0x00700080, +	0x004020e6, 0x007000a0, 0x00500060, 0x00200001, 0x0060000a, 0x0011814d, +	0x00110158, 0x00105401, 0x0020003a, 0x00100051, 0x001040c5, 0x0010c1c4, +	0x001041c9, 0x0010c1dc, 0x00150210, 0x0012c225, 0x00108238, 0x0010823e, +	0x001242c0, 0x00200040, 0x00100280, 0x00128100, 0x00128120, 0x00128143, +	0x0011415f, 0x0010815c, 0x0010c140, 0x00104029, 0x00110400, 0x00104d12, +	0x00500060, 0x00403f87, 0x0060000d, 0x00407ce6, 0x002000f0, 0x0060000a, +	0x00200020, 0x00100620, 0x00154650, 0x00104668, 0x0017466d, 0x0011068b, +	0x00168691, 0x001046ae, 0x001046b0, 0x001206b4, 0x001046c4, 0x001146c6, +	0x00200022, 0x001006cc, 0x001246f0, 0x002000c0, 0x00100700, 0x0010c3d7, +	0x001043e1, 0x00500060, 0x00200268, 0x0060000a, 0x00104800, 0x00108901, +	0x00124920, 0x0020001f, 0x00100940, 0x00140965, 0x00144a00, 0x00104a19, +	0x0010ca1c, 0x00110b00, 0x00200028, 0x00100b08, 0x00134c2e, 0x0010cd00, +	0x0010cd04, 0x00120d08, 0x00104d80, 0x00104e00, 0x0012d600, 0x00105c00, +	0x00104f06, 0x00105406, 0x00105709, 0x00200318, 0x0060000a, 0x00300000, +	0x00200680, 0x00407500, 0x00200684, 0x00800001, 0x00200b60, 0x0060000a, +	0x00209540, 0x00407b8a, 0x00201350, 0x00800041, 0x00408c00, 0x00600006, +	0x004088e6, 0x00700080, 0x0020007a, 0x0060000a, 0x00104280, 0x00200318, +	0x0060000a, 0x00200004, 0x00800001, 0x00700000, 0x00200000, 0x0060000a, +	0x00106002, 0x0040a368, 0x00700000, 0x00200000, 0x0060000a, 0x00106002, +	0x00700080, 0x00400a68, 0x00500060, 0x00600007, 0x00409688, 0x0060000f, +	0x00500060, 0x00200000, 0x0060000a, 0x00700000, 0x00106001, 0x0091a880, +	0x00901ffe, 0x10940000, 0x00200020, 0x0060000b, 0x00500069, 0x0060000c, +	0x00402168, 0x0040a506, 0x0040a605, 0x00600009, 0x00700005, 0x00700006, +	0x0060000e, ~0 +}; +  //this is used for nv49 and nv4b  static uint32_t nv49_4b_ctx_voodoo[] ={  	0x00400564, 0x00400505, 0x00408165, 0x00408206, 0x00409e68, 0x00200020, @@ -1835,6 +2003,7 @@ nv40_graph_init(struct drm_device *dev)  	case 0x43: ctx_voodoo = nv43_ctx_voodoo; break;  	case 0x44: ctx_voodoo = nv44_ctx_voodoo; break;  	case 0x46: ctx_voodoo = nv46_ctx_voodoo; break; +	case 0x47: ctx_voodoo = nv47_ctx_voodoo; break;  	case 0x49: ctx_voodoo = nv49_4b_ctx_voodoo; break;  	case 0x4a: ctx_voodoo = nv4a_ctx_voodoo; break;  	case 0x4b: ctx_voodoo = nv49_4b_ctx_voodoo; break; diff --git a/shared-core/radeon_state.c b/shared-core/radeon_state.c index ac7f6011..e3aadfb9 100644 --- a/shared-core/radeon_state.c +++ b/shared-core/radeon_state.c @@ -1861,6 +1861,7 @@ static int radeon_cp_dispatch_texture(struct drm_device * dev,  		OUT_RING((image->width << 16) | height);  		RADEON_WAIT_UNTIL_2D_IDLE();  		ADVANCE_RING(); +		COMMIT_RING();  		radeon_cp_discard_buffer(dev, buf); @@ -1878,6 +1879,8 @@ static int radeon_cp_dispatch_texture(struct drm_device * dev,  	RADEON_FLUSH_CACHE();  	RADEON_WAIT_UNTIL_2D_IDLE();  	ADVANCE_RING(); +	COMMIT_RING(); +  	return 0;  } @@ -2401,7 +2404,6 @@ static int radeon_cp_texture(struct drm_device *dev, void *data, struct drm_file  	ret = radeon_cp_dispatch_texture(dev, file_priv, tex, &image); -	COMMIT_RING();  	return ret;  } diff --git a/shared-core/via_drv.h b/shared-core/via_drv.h index 15e65950..0b474844 100644 --- a/shared-core/via_drv.h +++ b/shared-core/via_drv.h @@ -206,7 +206,8 @@ extern int via_fence_has_irq(struct drm_device * dev, uint32_t class,  #ifdef VIA_HAVE_BUFFER  extern struct drm_ttm_backend *via_create_ttm_backend_entry(struct drm_device *dev); -extern int via_fence_types(struct drm_buffer_object *bo, uint32_t *type); +extern int via_fence_types(struct drm_buffer_object *bo, uint32_t *fclass, +			   uint32_t *type);  extern int via_invalidate_caches(struct drm_device *dev, uint64_t buffer_flags);  extern int via_init_mem_type(struct drm_device *dev, uint32_t type,  			       struct drm_mem_type_manager *man); | 
