aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_drv.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/i915_drv.h')
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h861
1 files changed, 518 insertions, 343 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index af4a263cf257..ce7914c4c044 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -34,6 +34,8 @@
34#include "intel_bios.h" 34#include "intel_bios.h"
35#include "intel_ringbuffer.h" 35#include "intel_ringbuffer.h"
36#include <linux/io-mapping.h> 36#include <linux/io-mapping.h>
37#include <linux/i2c.h>
38#include <drm/intel-gtt.h>
37 39
38/* General customization: 40/* General customization:
39 */ 41 */
@@ -47,17 +49,22 @@
47enum pipe { 49enum pipe {
48 PIPE_A = 0, 50 PIPE_A = 0,
49 PIPE_B, 51 PIPE_B,
52 PIPE_C,
53 I915_MAX_PIPES
50}; 54};
55#define pipe_name(p) ((p) + 'A')
51 56
52enum plane { 57enum plane {
53 PLANE_A = 0, 58 PLANE_A = 0,
54 PLANE_B, 59 PLANE_B,
60 PLANE_C,
55}; 61};
56 62#define plane_name(p) ((p) + 'A')
57#define I915_NUM_PIPE 2
58 63
59#define I915_GEM_GPU_DOMAINS (~(I915_GEM_DOMAIN_CPU | I915_GEM_DOMAIN_GTT)) 64#define I915_GEM_GPU_DOMAINS (~(I915_GEM_DOMAIN_CPU | I915_GEM_DOMAIN_GTT))
60 65
66#define for_each_pipe(p) for ((p) = 0; (p) < dev_priv->num_pipe; (p)++)
67
61/* Interface history: 68/* Interface history:
62 * 69 *
63 * 1.1: Original. 70 * 1.1: Original.
@@ -73,12 +80,7 @@ enum plane {
73#define DRIVER_PATCHLEVEL 0 80#define DRIVER_PATCHLEVEL 0
74 81
75#define WATCH_COHERENCY 0 82#define WATCH_COHERENCY 0
76#define WATCH_BUF 0 83#define WATCH_LISTS 0
77#define WATCH_EXEC 0
78#define WATCH_LRU 0
79#define WATCH_RELOC 0
80#define WATCH_INACTIVE 0
81#define WATCH_PWRITE 0
82 84
83#define I915_GEM_PHYS_CURSOR_0 1 85#define I915_GEM_PHYS_CURSOR_0 1
84#define I915_GEM_PHYS_CURSOR_1 2 86#define I915_GEM_PHYS_CURSOR_1 2
@@ -89,7 +91,7 @@ struct drm_i915_gem_phys_object {
89 int id; 91 int id;
90 struct page **page_list; 92 struct page **page_list;
91 drm_dma_handle_t *handle; 93 drm_dma_handle_t *handle;
92 struct drm_gem_object *cur_obj; 94 struct drm_i915_gem_object *cur_obj;
93}; 95};
94 96
95struct mem_block { 97struct mem_block {
@@ -110,8 +112,10 @@ struct intel_opregion {
110 struct opregion_acpi *acpi; 112 struct opregion_acpi *acpi;
111 struct opregion_swsci *swsci; 113 struct opregion_swsci *swsci;
112 struct opregion_asle *asle; 114 struct opregion_asle *asle;
113 int enabled; 115 void *vbt;
116 u32 __iomem *lid_state;
114}; 117};
118#define OPREGION_SIZE (8*1024)
115 119
116struct intel_overlay; 120struct intel_overlay;
117struct intel_overlay_error_state; 121struct intel_overlay_error_state;
@@ -123,53 +127,72 @@ struct drm_i915_master_private {
123#define I915_FENCE_REG_NONE -1 127#define I915_FENCE_REG_NONE -1
124 128
125struct drm_i915_fence_reg { 129struct drm_i915_fence_reg {
126 struct drm_gem_object *obj;
127 struct list_head lru_list; 130 struct list_head lru_list;
131 struct drm_i915_gem_object *obj;
132 uint32_t setup_seqno;
128}; 133};
129 134
130struct sdvo_device_mapping { 135struct sdvo_device_mapping {
136 u8 initialized;
131 u8 dvo_port; 137 u8 dvo_port;
132 u8 slave_addr; 138 u8 slave_addr;
133 u8 dvo_wiring; 139 u8 dvo_wiring;
134 u8 initialized; 140 u8 i2c_pin;
141 u8 i2c_speed;
135 u8 ddc_pin; 142 u8 ddc_pin;
136}; 143};
137 144
145struct intel_display_error_state;
146
138struct drm_i915_error_state { 147struct drm_i915_error_state {
139 u32 eir; 148 u32 eir;
140 u32 pgtbl_er; 149 u32 pgtbl_er;
141 u32 pipeastat; 150 u32 pipestat[I915_MAX_PIPES];
142 u32 pipebstat;
143 u32 ipeir; 151 u32 ipeir;
144 u32 ipehr; 152 u32 ipehr;
145 u32 instdone; 153 u32 instdone;
146 u32 acthd; 154 u32 acthd;
155 u32 error; /* gen6+ */
156 u32 bcs_acthd; /* gen6+ blt engine */
157 u32 bcs_ipehr;
158 u32 bcs_ipeir;
159 u32 bcs_instdone;
160 u32 bcs_seqno;
161 u32 vcs_acthd; /* gen6+ bsd engine */
162 u32 vcs_ipehr;
163 u32 vcs_ipeir;
164 u32 vcs_instdone;
165 u32 vcs_seqno;
147 u32 instpm; 166 u32 instpm;
148 u32 instps; 167 u32 instps;
149 u32 instdone1; 168 u32 instdone1;
150 u32 seqno; 169 u32 seqno;
151 u64 bbaddr; 170 u64 bbaddr;
171 u64 fence[16];
152 struct timeval time; 172 struct timeval time;
153 struct drm_i915_error_object { 173 struct drm_i915_error_object {
154 int page_count; 174 int page_count;
155 u32 gtt_offset; 175 u32 gtt_offset;
156 u32 *pages[0]; 176 u32 *pages[0];
157 } *ringbuffer, *batchbuffer[2]; 177 } *ringbuffer[I915_NUM_RINGS], *batchbuffer[I915_NUM_RINGS];
158 struct drm_i915_error_buffer { 178 struct drm_i915_error_buffer {
159 size_t size; 179 u32 size;
160 u32 name; 180 u32 name;
161 u32 seqno; 181 u32 seqno;
162 u32 gtt_offset; 182 u32 gtt_offset;
163 u32 read_domains; 183 u32 read_domains;
164 u32 write_domain; 184 u32 write_domain;
165 u32 fence_reg; 185 s32 fence_reg:5;
166 s32 pinned:2; 186 s32 pinned:2;
167 u32 tiling:2; 187 u32 tiling:2;
168 u32 dirty:1; 188 u32 dirty:1;
169 u32 purgeable:1; 189 u32 purgeable:1;
170 } *active_bo; 190 u32 ring:4;
171 u32 active_bo_count; 191 u32 cache_level:2;
192 } *active_bo, *pinned_bo;
193 u32 active_bo_count, pinned_bo_count;
172 struct intel_overlay_error_state *overlay; 194 struct intel_overlay_error_state *overlay;
195 struct intel_display_error_state *display;
173}; 196};
174 197
175struct drm_i915_display_funcs { 198struct drm_i915_display_funcs {
@@ -179,48 +202,58 @@ struct drm_i915_display_funcs {
179 void (*disable_fbc)(struct drm_device *dev); 202 void (*disable_fbc)(struct drm_device *dev);
180 int (*get_display_clock_speed)(struct drm_device *dev); 203 int (*get_display_clock_speed)(struct drm_device *dev);
181 int (*get_fifo_size)(struct drm_device *dev, int plane); 204 int (*get_fifo_size)(struct drm_device *dev, int plane);
182 void (*update_wm)(struct drm_device *dev, int planea_clock, 205 void (*update_wm)(struct drm_device *dev);
183 int planeb_clock, int sr_hdisplay, int sr_htotal, 206 int (*crtc_mode_set)(struct drm_crtc *crtc,
184 int pixel_size); 207 struct drm_display_mode *mode,
208 struct drm_display_mode *adjusted_mode,
209 int x, int y,
210 struct drm_framebuffer *old_fb);
211 void (*fdi_link_train)(struct drm_crtc *crtc);
212 void (*init_clock_gating)(struct drm_device *dev);
213 void (*init_pch_clock_gating)(struct drm_device *dev);
214 int (*queue_flip)(struct drm_device *dev, struct drm_crtc *crtc,
215 struct drm_framebuffer *fb,
216 struct drm_i915_gem_object *obj);
185 /* clock updates for mode set */ 217 /* clock updates for mode set */
186 /* cursor updates */ 218 /* cursor updates */
187 /* render clock increase/decrease */ 219 /* render clock increase/decrease */
188 /* display clock increase/decrease */ 220 /* display clock increase/decrease */
189 /* pll clock increase/decrease */ 221 /* pll clock increase/decrease */
190 /* clock gating init */
191}; 222};
192 223
193struct intel_device_info { 224struct intel_device_info {
194 u8 gen; 225 u8 gen;
195 u8 is_mobile : 1; 226 u8 is_mobile : 1;
196 u8 is_i8xx : 1;
197 u8 is_i85x : 1; 227 u8 is_i85x : 1;
198 u8 is_i915g : 1; 228 u8 is_i915g : 1;
199 u8 is_i9xx : 1;
200 u8 is_i945gm : 1; 229 u8 is_i945gm : 1;
201 u8 is_i965g : 1;
202 u8 is_i965gm : 1;
203 u8 is_g33 : 1; 230 u8 is_g33 : 1;
204 u8 need_gfx_hws : 1; 231 u8 need_gfx_hws : 1;
205 u8 is_g4x : 1; 232 u8 is_g4x : 1;
206 u8 is_pineview : 1; 233 u8 is_pineview : 1;
207 u8 is_broadwater : 1; 234 u8 is_broadwater : 1;
208 u8 is_crestline : 1; 235 u8 is_crestline : 1;
209 u8 is_ironlake : 1; 236 u8 is_ivybridge : 1;
210 u8 has_fbc : 1; 237 u8 has_fbc : 1;
211 u8 has_rc6 : 1;
212 u8 has_pipe_cxsr : 1; 238 u8 has_pipe_cxsr : 1;
213 u8 has_hotplug : 1; 239 u8 has_hotplug : 1;
214 u8 cursor_needs_physical : 1; 240 u8 cursor_needs_physical : 1;
241 u8 has_overlay : 1;
242 u8 overlay_needs_physical : 1;
243 u8 supports_tv : 1;
244 u8 has_bsd_ring : 1;
245 u8 has_blt_ring : 1;
215}; 246};
216 247
217enum no_fbc_reason { 248enum no_fbc_reason {
249 FBC_NO_OUTPUT, /* no outputs enabled to compress */
218 FBC_STOLEN_TOO_SMALL, /* not enough space to hold compressed buffers */ 250 FBC_STOLEN_TOO_SMALL, /* not enough space to hold compressed buffers */
219 FBC_UNSUPPORTED_MODE, /* interlace or doublescanned mode */ 251 FBC_UNSUPPORTED_MODE, /* interlace or doublescanned mode */
220 FBC_MODE_TOO_LARGE, /* mode too large for compression */ 252 FBC_MODE_TOO_LARGE, /* mode too large for compression */
221 FBC_BAD_PLANE, /* fbc not supported on plane */ 253 FBC_BAD_PLANE, /* fbc not supported on plane */
222 FBC_NOT_TILED, /* buffer not tiled */ 254 FBC_NOT_TILED, /* buffer not tiled */
223 FBC_MULTIPLE_PIPES, /* more than one pipe active */ 255 FBC_MULTIPLE_PIPES, /* more than one pipe active */
256 FBC_MODULE_PARAM,
224}; 257};
225 258
226enum intel_pch { 259enum intel_pch {
@@ -229,6 +262,7 @@ enum intel_pch {
229}; 262};
230 263
231#define QUIRK_PIPEA_FORCE (1<<0) 264#define QUIRK_PIPEA_FORCE (1<<0)
265#define QUIRK_LVDS_SSC_DISABLE (1<<1)
232 266
233struct intel_fbdev; 267struct intel_fbdev;
234 268
@@ -238,23 +272,25 @@ typedef struct drm_i915_private {
238 const struct intel_device_info *info; 272 const struct intel_device_info *info;
239 273
240 int has_gem; 274 int has_gem;
275 int relative_constants_mode;
241 276
242 void __iomem *regs; 277 void __iomem *regs;
243 278
279 struct intel_gmbus {
280 struct i2c_adapter adapter;
281 struct i2c_adapter *force_bit;
282 u32 reg0;
283 } *gmbus;
284
244 struct pci_dev *bridge_dev; 285 struct pci_dev *bridge_dev;
245 struct intel_ring_buffer render_ring; 286 struct intel_ring_buffer ring[I915_NUM_RINGS];
246 struct intel_ring_buffer bsd_ring;
247 uint32_t next_seqno; 287 uint32_t next_seqno;
248 288
249 drm_dma_handle_t *status_page_dmah; 289 drm_dma_handle_t *status_page_dmah;
250 void *seqno_page;
251 dma_addr_t dma_status_page;
252 uint32_t counter; 290 uint32_t counter;
253 unsigned int seqno_gfx_addr;
254 drm_local_map_t hws_map; 291 drm_local_map_t hws_map;
255 struct drm_gem_object *seqno_obj; 292 struct drm_i915_gem_object *pwrctx;
256 struct drm_gem_object *pwrctx; 293 struct drm_i915_gem_object *renderctx;
257 struct drm_gem_object *renderctx;
258 294
259 struct resource mch_res; 295 struct resource mch_res;
260 296
@@ -264,21 +300,15 @@ typedef struct drm_i915_private {
264 int current_page; 300 int current_page;
265 int page_flipping; 301 int page_flipping;
266 302
267 wait_queue_head_t irq_queue;
268 atomic_t irq_received; 303 atomic_t irq_received;
269 /** Protects user_irq_refcount and irq_mask_reg */ 304
270 spinlock_t user_irq_lock; 305 /* protects the irq masks */
271 u32 trace_irq_seqno; 306 spinlock_t irq_lock;
272 /** Cached value of IMR to avoid reads in updating the bitfield */ 307 /** Cached value of IMR to avoid reads in updating the bitfield */
273 u32 irq_mask_reg;
274 u32 pipestat[2]; 308 u32 pipestat[2];
275 /** splitted irq regs for graphics and display engine on Ironlake, 309 u32 irq_mask;
276 irq_mask_reg is still used for display irq. */ 310 u32 gt_irq_mask;
277 u32 gt_irq_mask_reg; 311 u32 pch_irq_mask;
278 u32 gt_irq_enable_reg;
279 u32 de_irq_enable_reg;
280 u32 pch_irq_mask_reg;
281 u32 pch_irq_enable_reg;
282 312
283 u32 hotplug_supported_mask; 313 u32 hotplug_supported_mask;
284 struct work_struct hotplug_work; 314 struct work_struct hotplug_work;
@@ -289,26 +319,21 @@ typedef struct drm_i915_private {
289 unsigned int sr01, adpa, ppcr, dvob, dvoc, lvds; 319 unsigned int sr01, adpa, ppcr, dvob, dvoc, lvds;
290 int vblank_pipe; 320 int vblank_pipe;
291 int num_pipe; 321 int num_pipe;
292 u32 flush_rings;
293#define FLUSH_RENDER_RING 0x1
294#define FLUSH_BSD_RING 0x2
295 322
296 /* For hangcheck timer */ 323 /* For hangcheck timer */
297#define DRM_I915_HANGCHECK_PERIOD 75 /* in jiffies */ 324#define DRM_I915_HANGCHECK_PERIOD 1500 /* in ms */
298 struct timer_list hangcheck_timer; 325 struct timer_list hangcheck_timer;
299 int hangcheck_count; 326 int hangcheck_count;
300 uint32_t last_acthd; 327 uint32_t last_acthd;
301 uint32_t last_instdone; 328 uint32_t last_instdone;
302 uint32_t last_instdone1; 329 uint32_t last_instdone1;
303 330
304 struct drm_mm vram;
305
306 unsigned long cfb_size; 331 unsigned long cfb_size;
307 unsigned long cfb_pitch; 332 unsigned long cfb_pitch;
333 unsigned long cfb_offset;
308 int cfb_fence; 334 int cfb_fence;
309 int cfb_plane; 335 int cfb_plane;
310 336 int cfb_y;
311 int irq_enabled;
312 337
313 struct intel_opregion opregion; 338 struct intel_opregion opregion;
314 339
@@ -316,8 +341,8 @@ typedef struct drm_i915_private {
316 struct intel_overlay *overlay; 341 struct intel_overlay *overlay;
317 342
318 /* LVDS info */ 343 /* LVDS info */
319 int backlight_duty_cycle; /* restore backlight to this value */ 344 int backlight_level; /* restore backlight to this value */
320 bool panel_wants_dither; 345 bool backlight_enabled;
321 struct drm_display_mode *panel_fixed_mode; 346 struct drm_display_mode *panel_fixed_mode;
322 struct drm_display_mode *lfp_lvds_vbt_mode; /* if any */ 347 struct drm_display_mode *lfp_lvds_vbt_mode; /* if any */
323 struct drm_display_mode *sdvo_lvds_vbt_mode; /* if any */ 348 struct drm_display_mode *sdvo_lvds_vbt_mode; /* if any */
@@ -328,13 +353,23 @@ typedef struct drm_i915_private {
328 unsigned int lvds_vbt:1; 353 unsigned int lvds_vbt:1;
329 unsigned int int_crt_support:1; 354 unsigned int int_crt_support:1;
330 unsigned int lvds_use_ssc:1; 355 unsigned int lvds_use_ssc:1;
331 unsigned int edp_support:1;
332 int lvds_ssc_freq; 356 int lvds_ssc_freq;
333 int edp_bpp; 357 struct {
358 int rate;
359 int lanes;
360 int preemphasis;
361 int vswing;
362
363 bool initialized;
364 bool support;
365 int bpp;
366 struct edp_power_seq pps;
367 } edp;
368 bool no_aux_handshake;
334 369
335 struct notifier_block lid_notifier; 370 struct notifier_block lid_notifier;
336 371
337 int crt_ddc_bus; /* 0 = unknown, else GPIO to use for CRT DDC */ 372 int crt_ddc_pin;
338 struct drm_i915_fence_reg fence_regs[16]; /* assume 965 */ 373 struct drm_i915_fence_reg fence_regs[16]; /* assume 965 */
339 int fence_reg_start; /* 4 if userland hasn't ioctl'd us yet */ 374 int fence_reg_start; /* 4 if userland hasn't ioctl'd us yet */
340 int num_fence_regs; /* 8 on pre-965, 16 otherwise */ 375 int num_fence_regs; /* 8 on pre-965, 16 otherwise */
@@ -344,6 +379,7 @@ typedef struct drm_i915_private {
344 spinlock_t error_lock; 379 spinlock_t error_lock;
345 struct drm_i915_error_state *first_error; 380 struct drm_i915_error_state *first_error;
346 struct work_struct error_work; 381 struct work_struct error_work;
382 struct completion error_completion;
347 struct workqueue_struct *wq; 383 struct workqueue_struct *wq;
348 384
349 /* Display functions */ 385 /* Display functions */
@@ -507,21 +543,36 @@ typedef struct drm_i915_private {
507 u32 saveMCHBAR_RENDER_STANDBY; 543 u32 saveMCHBAR_RENDER_STANDBY;
508 544
509 struct { 545 struct {
546 /** Bridge to intel-gtt-ko */
547 const struct intel_gtt *gtt;
548 /** Memory allocator for GTT stolen memory */
549 struct drm_mm stolen;
550 /** Memory allocator for GTT */
510 struct drm_mm gtt_space; 551 struct drm_mm gtt_space;
552 /** List of all objects in gtt_space. Used to restore gtt
553 * mappings on resume */
554 struct list_head gtt_list;
555
556 /** Usable portion of the GTT for GEM */
557 unsigned long gtt_start;
558 unsigned long gtt_mappable_end;
559 unsigned long gtt_end;
511 560
512 struct io_mapping *gtt_mapping; 561 struct io_mapping *gtt_mapping;
513 int gtt_mtrr; 562 int gtt_mtrr;
514 563
564 struct shrinker inactive_shrinker;
565
515 /** 566 /**
516 * Membership on list of all loaded devices, used to evict 567 * List of objects currently involved in rendering.
517 * inactive buffers under memory pressure.
518 * 568 *
519 * Modifications should only be done whilst holding the 569 * Includes buffers having the contents of their GPU caches
520 * shrink_list_lock spinlock. 570 * flushed, not necessarily primitives. last_rendering_seqno
571 * represents when the rendering involved will be completed.
572 *
573 * A reference is held on the buffer while on this list.
521 */ 574 */
522 struct list_head shrink_list; 575 struct list_head active_list;
523
524 spinlock_t active_list_lock;
525 576
526 /** 577 /**
527 * List of objects which are not in the ringbuffer but which 578 * List of objects which are not in the ringbuffer but which
@@ -535,15 +586,6 @@ typedef struct drm_i915_private {
535 struct list_head flushing_list; 586 struct list_head flushing_list;
536 587
537 /** 588 /**
538 * List of objects currently pending a GPU write flush.
539 *
540 * All elements on this list will belong to either the
541 * active_list or flushing_list, last_rendering_seqno can
542 * be used to differentiate between the two elements.
543 */
544 struct list_head gpu_write_list;
545
546 /**
547 * LRU list of objects which are not in the ringbuffer and 589 * LRU list of objects which are not in the ringbuffer and
548 * are ready to unbind, but are still in the GTT. 590 * are ready to unbind, but are still in the GTT.
549 * 591 *
@@ -555,6 +597,12 @@ typedef struct drm_i915_private {
555 */ 597 */
556 struct list_head inactive_list; 598 struct list_head inactive_list;
557 599
600 /**
601 * LRU list of objects which are not in the ringbuffer but
602 * are still pinned in the GTT.
603 */
604 struct list_head pinned_list;
605
558 /** LRU list of objects with fence regs on them. */ 606 /** LRU list of objects with fence regs on them. */
559 struct list_head fence_list; 607 struct list_head fence_list;
560 608
@@ -576,14 +624,10 @@ typedef struct drm_i915_private {
576 struct delayed_work retire_work; 624 struct delayed_work retire_work;
577 625
578 /** 626 /**
579 * Waiting sequence number, if any 627 * Are we in a non-interruptible section of code like
580 */ 628 * modesetting?
581 uint32_t waiting_gem_seqno;
582
583 /**
584 * Last seq seen at irq time
585 */ 629 */
586 uint32_t irq_gem_seqno; 630 bool interruptible;
587 631
588 /** 632 /**
589 * Flag if the X Server, and thus DRM, is not currently in 633 * Flag if the X Server, and thus DRM, is not currently in
@@ -599,7 +643,7 @@ typedef struct drm_i915_private {
599 * Flag if the hardware appears to be wedged. 643 * Flag if the hardware appears to be wedged.
600 * 644 *
601 * This is set when attempts to idle the device timeout. 645 * This is set when attempts to idle the device timeout.
602 * It prevents command submission from occuring and makes 646 * It prevents command submission from occurring and makes
603 * every pending request fail 647 * every pending request fail
604 */ 648 */
605 atomic_t wedged; 649 atomic_t wedged;
@@ -611,12 +655,19 @@ typedef struct drm_i915_private {
611 655
612 /* storage for physical objects */ 656 /* storage for physical objects */
613 struct drm_i915_gem_phys_object *phys_objs[I915_MAX_PHYS_OBJECT]; 657 struct drm_i915_gem_phys_object *phys_objs[I915_MAX_PHYS_OBJECT];
658
659 /* accounting, useful for userland debugging */
660 size_t gtt_total;
661 size_t mappable_gtt_total;
662 size_t object_memory;
663 u32 object_count;
614 } mm; 664 } mm;
615 struct sdvo_device_mapping sdvo_mappings[2]; 665 struct sdvo_device_mapping sdvo_mappings[2];
616 /* indicate whether the LVDS_BORDER should be enabled or not */ 666 /* indicate whether the LVDS_BORDER should be enabled or not */
617 unsigned int lvds_border_bits; 667 unsigned int lvds_border_bits;
618 /* Panel fitter placement and size for Ironlake+ */ 668 /* Panel fitter placement and size for Ironlake+ */
619 u32 pch_pf_pos, pch_pf_size; 669 u32 pch_pf_pos, pch_pf_size;
670 int panel_t3, panel_t12;
620 671
621 struct drm_crtc *plane_to_crtc_mapping[2]; 672 struct drm_crtc *plane_to_crtc_mapping[2];
622 struct drm_crtc *pipe_to_crtc_mapping[2]; 673 struct drm_crtc *pipe_to_crtc_mapping[2];
@@ -626,8 +677,6 @@ typedef struct drm_i915_private {
626 /* Reclocking support */ 677 /* Reclocking support */
627 bool render_reclock_avail; 678 bool render_reclock_avail;
628 bool lvds_downclock_avail; 679 bool lvds_downclock_avail;
629 /* indicate whether the LVDS EDID is OK */
630 bool lvds_edid_good;
631 /* indicates the reduced downclock for LVDS*/ 680 /* indicates the reduced downclock for LVDS*/
632 int lvds_downclock; 681 int lvds_downclock;
633 struct work_struct idle_work; 682 struct work_struct idle_work;
@@ -640,20 +689,24 @@ typedef struct drm_i915_private {
640 689
641 bool mchbar_need_disable; 690 bool mchbar_need_disable;
642 691
692 struct work_struct rps_work;
693 spinlock_t rps_lock;
694 u32 pm_iir;
695
643 u8 cur_delay; 696 u8 cur_delay;
644 u8 min_delay; 697 u8 min_delay;
645 u8 max_delay; 698 u8 max_delay;
646 u8 fmax; 699 u8 fmax;
647 u8 fstart; 700 u8 fstart;
648 701
649 u64 last_count1; 702 u64 last_count1;
650 unsigned long last_time1; 703 unsigned long last_time1;
651 u64 last_count2; 704 u64 last_count2;
652 struct timespec last_time2; 705 struct timespec last_time2;
653 unsigned long gfx_power; 706 unsigned long gfx_power;
654 int c_m; 707 int c_m;
655 int r_t; 708 int r_t;
656 u8 corr; 709 u8 corr;
657 spinlock_t *mchdev_lock; 710 spinlock_t *mchdev_lock;
658 711
659 enum no_fbc_reason no_fbc_reason; 712 enum no_fbc_reason no_fbc_reason;
@@ -661,23 +714,37 @@ typedef struct drm_i915_private {
661 struct drm_mm_node *compressed_fb; 714 struct drm_mm_node *compressed_fb;
662 struct drm_mm_node *compressed_llb; 715 struct drm_mm_node *compressed_llb;
663 716
717 unsigned long last_gpu_reset;
718
664 /* list of fbdev register on this device */ 719 /* list of fbdev register on this device */
665 struct intel_fbdev *fbdev; 720 struct intel_fbdev *fbdev;
721
722 struct drm_property *broadcast_rgb_property;
723 struct drm_property *force_audio_property;
724
725 atomic_t forcewake_count;
666} drm_i915_private_t; 726} drm_i915_private_t;
667 727
668/** driver private structure attached to each drm_gem_object */ 728enum i915_cache_level {
729 I915_CACHE_NONE,
730 I915_CACHE_LLC,
731 I915_CACHE_LLC_MLC, /* gen6+ */
732};
733
669struct drm_i915_gem_object { 734struct drm_i915_gem_object {
670 struct drm_gem_object base; 735 struct drm_gem_object base;
671 736
672 /** Current space allocated to this object in the GTT, if any. */ 737 /** Current space allocated to this object in the GTT, if any. */
673 struct drm_mm_node *gtt_space; 738 struct drm_mm_node *gtt_space;
739 struct list_head gtt_list;
674 740
675 /** This object's place on the active/flushing/inactive lists */ 741 /** This object's place on the active/flushing/inactive lists */
676 struct list_head list; 742 struct list_head ring_list;
743 struct list_head mm_list;
677 /** This object's place on GPU write list */ 744 /** This object's place on GPU write list */
678 struct list_head gpu_write_list; 745 struct list_head gpu_write_list;
679 /** This object's place on eviction list */ 746 /** This object's place in the batchbuffer or on the eviction list */
680 struct list_head evict_list; 747 struct list_head exec_list;
681 748
682 /** 749 /**
683 * This is set if the object is on the active or flushing lists 750 * This is set if the object is on the active or flushing lists
@@ -693,6 +760,12 @@ struct drm_i915_gem_object {
693 unsigned int dirty : 1; 760 unsigned int dirty : 1;
694 761
695 /** 762 /**
763 * This is set if the object has been written to since the last
764 * GPU flush.
765 */
766 unsigned int pending_gpu_write : 1;
767
768 /**
696 * Fence register bits (if any) for this object. Will be set 769 * Fence register bits (if any) for this object. Will be set
697 * as needed when mapped into the GTT. 770 * as needed when mapped into the GTT.
698 * Protected by dev->struct_mutex. 771 * Protected by dev->struct_mutex.
@@ -702,29 +775,15 @@ struct drm_i915_gem_object {
702 signed int fence_reg : 5; 775 signed int fence_reg : 5;
703 776
704 /** 777 /**
705 * Used for checking the object doesn't appear more than once
706 * in an execbuffer object list.
707 */
708 unsigned int in_execbuffer : 1;
709
710 /**
711 * Advice: are the backing pages purgeable? 778 * Advice: are the backing pages purgeable?
712 */ 779 */
713 unsigned int madv : 2; 780 unsigned int madv : 2;
714 781
715 /** 782 /**
716 * Refcount for the pages array. With the current locking scheme, there
717 * are at most two concurrent users: Binding a bo to the gtt and
718 * pwrite/pread using physical addresses. So two bits for a maximum
719 * of two users are enough.
720 */
721 unsigned int pages_refcount : 2;
722#define DRM_I915_GEM_OBJECT_MAX_PAGES_REFCOUNT 0x3
723
724 /**
725 * Current tiling mode for the object. 783 * Current tiling mode for the object.
726 */ 784 */
727 unsigned int tiling_mode : 2; 785 unsigned int tiling_mode : 2;
786 unsigned int tiling_changed : 1;
728 787
729 /** How many users have pinned this object in GTT space. The following 788 /** How many users have pinned this object in GTT space. The following
730 * users can each hold at most one reference: pwrite/pread, pin_ioctl 789 * users can each hold at most one reference: pwrite/pread, pin_ioctl
@@ -738,28 +797,57 @@ struct drm_i915_gem_object {
738 unsigned int pin_count : 4; 797 unsigned int pin_count : 4;
739#define DRM_I915_GEM_OBJECT_MAX_PIN_COUNT 0xf 798#define DRM_I915_GEM_OBJECT_MAX_PIN_COUNT 0xf
740 799
741 /** AGP memory structure for our GTT binding. */ 800 /**
742 DRM_AGP_MEM *agp_mem; 801 * Is the object at the current location in the gtt mappable and
802 * fenceable? Used to avoid costly recalculations.
803 */
804 unsigned int map_and_fenceable : 1;
805
806 /**
807 * Whether the current gtt mapping needs to be mappable (and isn't just
808 * mappable by accident). Track pin and fault separate for a more
809 * accurate mappable working set.
810 */
811 unsigned int fault_mappable : 1;
812 unsigned int pin_mappable : 1;
813
814 /*
815 * Is the GPU currently using a fence to access this buffer,
816 */
817 unsigned int pending_fenced_gpu_access:1;
818 unsigned int fenced_gpu_access:1;
819
820 unsigned int cache_level:2;
743 821
744 struct page **pages; 822 struct page **pages;
745 823
746 /** 824 /**
747 * Current offset of the object in GTT space. 825 * DMAR support
748 *
749 * This is the same as gtt_space->start
750 */ 826 */
751 uint32_t gtt_offset; 827 struct scatterlist *sg_list;
828 int num_sg;
752 829
753 /* Which ring is refering to is this object */ 830 /**
754 struct intel_ring_buffer *ring; 831 * Used for performing relocations during execbuffer insertion.
832 */
833 struct hlist_node exec_node;
834 unsigned long exec_handle;
835 struct drm_i915_gem_exec_object2 *exec_entry;
755 836
756 /** 837 /**
757 * Fake offset for use by mmap(2) 838 * Current offset of the object in GTT space.
839 *
840 * This is the same as gtt_space->start
758 */ 841 */
759 uint64_t mmap_offset; 842 uint32_t gtt_offset;
760 843
761 /** Breadcrumb of last rendering to the buffer. */ 844 /** Breadcrumb of last rendering to the buffer. */
762 uint32_t last_rendering_seqno; 845 uint32_t last_rendering_seqno;
846 struct intel_ring_buffer *ring;
847
848 /** Breadcrumb of last fenced GPU access to the buffer. */
849 uint32_t last_fenced_seqno;
850 struct intel_ring_buffer *last_fenced_ring;
763 851
764 /** Current tiling stride for the object, if it's tiled. */ 852 /** Current tiling stride for the object, if it's tiled. */
765 uint32_t stride; 853 uint32_t stride;
@@ -767,8 +855,6 @@ struct drm_i915_gem_object {
767 /** Record of address bit 17 of each page at last unbind. */ 855 /** Record of address bit 17 of each page at last unbind. */
768 unsigned long *bit_17; 856 unsigned long *bit_17;
769 857
770 /** AGP mapping type (AGP_USER_MEMORY or AGP_USER_CACHED_MEMORY */
771 uint32_t agp_type;
772 858
773 /** 859 /**
774 * If present, while GEM_DOMAIN_CPU is in the read domain this array 860 * If present, while GEM_DOMAIN_CPU is in the read domain this array
@@ -816,33 +902,102 @@ struct drm_i915_gem_request {
816 /** global list entry for this request */ 902 /** global list entry for this request */
817 struct list_head list; 903 struct list_head list;
818 904
905 struct drm_i915_file_private *file_priv;
819 /** file_priv list entry for this request */ 906 /** file_priv list entry for this request */
820 struct list_head client_list; 907 struct list_head client_list;
821}; 908};
822 909
823struct drm_i915_file_private { 910struct drm_i915_file_private {
824 struct { 911 struct {
912 struct spinlock lock;
825 struct list_head request_list; 913 struct list_head request_list;
826 } mm; 914 } mm;
827}; 915};
828 916
829enum intel_chip_family { 917#define INTEL_INFO(dev) (((struct drm_i915_private *) (dev)->dev_private)->info)
830 CHIP_I8XX = 0x01, 918
831 CHIP_I9XX = 0x02, 919#define IS_I830(dev) ((dev)->pci_device == 0x3577)
832 CHIP_I915 = 0x04, 920#define IS_845G(dev) ((dev)->pci_device == 0x2562)
833 CHIP_I965 = 0x08, 921#define IS_I85X(dev) (INTEL_INFO(dev)->is_i85x)
834}; 922#define IS_I865G(dev) ((dev)->pci_device == 0x2572)
923#define IS_I915G(dev) (INTEL_INFO(dev)->is_i915g)
924#define IS_I915GM(dev) ((dev)->pci_device == 0x2592)
925#define IS_I945G(dev) ((dev)->pci_device == 0x2772)
926#define IS_I945GM(dev) (INTEL_INFO(dev)->is_i945gm)
927#define IS_BROADWATER(dev) (INTEL_INFO(dev)->is_broadwater)
928#define IS_CRESTLINE(dev) (INTEL_INFO(dev)->is_crestline)
929#define IS_GM45(dev) ((dev)->pci_device == 0x2A42)
930#define IS_G4X(dev) (INTEL_INFO(dev)->is_g4x)
931#define IS_PINEVIEW_G(dev) ((dev)->pci_device == 0xa001)
932#define IS_PINEVIEW_M(dev) ((dev)->pci_device == 0xa011)
933#define IS_PINEVIEW(dev) (INTEL_INFO(dev)->is_pineview)
934#define IS_G33(dev) (INTEL_INFO(dev)->is_g33)
935#define IS_IRONLAKE_D(dev) ((dev)->pci_device == 0x0042)
936#define IS_IRONLAKE_M(dev) ((dev)->pci_device == 0x0046)
937#define IS_IVYBRIDGE(dev) (INTEL_INFO(dev)->is_ivybridge)
938#define IS_MOBILE(dev) (INTEL_INFO(dev)->is_mobile)
939
940/*
941 * The genX designation typically refers to the render engine, so render
942 * capability related checks should use IS_GEN, while display and other checks
943 * have their own (e.g. HAS_PCH_SPLIT for ILK+ display, IS_foo for particular
944 * chips, etc.).
945 */
946#define IS_GEN2(dev) (INTEL_INFO(dev)->gen == 2)
947#define IS_GEN3(dev) (INTEL_INFO(dev)->gen == 3)
948#define IS_GEN4(dev) (INTEL_INFO(dev)->gen == 4)
949#define IS_GEN5(dev) (INTEL_INFO(dev)->gen == 5)
950#define IS_GEN6(dev) (INTEL_INFO(dev)->gen == 6)
951#define IS_GEN7(dev) (INTEL_INFO(dev)->gen == 7)
952
953#define HAS_BSD(dev) (INTEL_INFO(dev)->has_bsd_ring)
954#define HAS_BLT(dev) (INTEL_INFO(dev)->has_blt_ring)
955#define I915_NEED_GFX_HWS(dev) (INTEL_INFO(dev)->need_gfx_hws)
956
957#define HAS_OVERLAY(dev) (INTEL_INFO(dev)->has_overlay)
958#define OVERLAY_NEEDS_PHYSICAL(dev) (INTEL_INFO(dev)->overlay_needs_physical)
959
960/* With the 945 and later, Y tiling got adjusted so that it was 32 128-byte
961 * rows, which changed the alignment requirements and fence programming.
962 */
963#define HAS_128_BYTE_Y_TILING(dev) (!IS_GEN2(dev) && !(IS_I915G(dev) || \
964 IS_I915GM(dev)))
965#define SUPPORTS_DIGITAL_OUTPUTS(dev) (!IS_GEN2(dev) && !IS_PINEVIEW(dev))
966#define SUPPORTS_INTEGRATED_HDMI(dev) (IS_G4X(dev) || IS_GEN5(dev))
967#define SUPPORTS_INTEGRATED_DP(dev) (IS_G4X(dev) || IS_GEN5(dev))
968#define SUPPORTS_EDP(dev) (IS_IRONLAKE_M(dev))
969#define SUPPORTS_TV(dev) (INTEL_INFO(dev)->supports_tv)
970#define I915_HAS_HOTPLUG(dev) (INTEL_INFO(dev)->has_hotplug)
971/* dsparb controlled by hw only */
972#define DSPARB_HWCONTROL(dev) (IS_G4X(dev) || IS_IRONLAKE(dev))
973
974#define HAS_FW_BLC(dev) (INTEL_INFO(dev)->gen > 2)
975#define HAS_PIPE_CXSR(dev) (INTEL_INFO(dev)->has_pipe_cxsr)
976#define I915_HAS_FBC(dev) (INTEL_INFO(dev)->has_fbc)
977
978#define HAS_PCH_SPLIT(dev) (IS_GEN5(dev) || IS_GEN6(dev) || IS_IVYBRIDGE(dev))
979#define HAS_PIPE_CONTROL(dev) (INTEL_INFO(dev)->gen >= 5)
980
981#define INTEL_PCH_TYPE(dev) (((struct drm_i915_private *)(dev)->dev_private)->pch_type)
982#define HAS_PCH_CPT(dev) (INTEL_PCH_TYPE(dev) == PCH_CPT)
983#define HAS_PCH_IBX(dev) (INTEL_PCH_TYPE(dev) == PCH_IBX)
984
985#include "i915_trace.h"
835 986
836extern struct drm_ioctl_desc i915_ioctls[]; 987extern struct drm_ioctl_desc i915_ioctls[];
837extern int i915_max_ioctl; 988extern int i915_max_ioctl;
838extern unsigned int i915_fbpercrtc; 989extern unsigned int i915_fbpercrtc;
990extern int i915_panel_ignore_lid;
839extern unsigned int i915_powersave; 991extern unsigned int i915_powersave;
992extern unsigned int i915_semaphores;
840extern unsigned int i915_lvds_downclock; 993extern unsigned int i915_lvds_downclock;
994extern unsigned int i915_panel_use_ssc;
995extern int i915_vbt_sdvo_panel_type;
996extern unsigned int i915_enable_rc6;
997extern unsigned int i915_enable_fbc;
841 998
842extern int i915_suspend(struct drm_device *dev, pm_message_t state); 999extern int i915_suspend(struct drm_device *dev, pm_message_t state);
843extern int i915_resume(struct drm_device *dev); 1000extern int i915_resume(struct drm_device *dev);
844extern void i915_save_display(struct drm_device *dev);
845extern void i915_restore_display(struct drm_device *dev);
846extern int i915_master_create(struct drm_device *dev, struct drm_master *master); 1001extern int i915_master_create(struct drm_device *dev, struct drm_master *master);
847extern void i915_master_destroy(struct drm_device *dev, struct drm_master *master); 1002extern void i915_master_destroy(struct drm_device *dev, struct drm_master *master);
848 1003
@@ -860,9 +1015,9 @@ extern int i915_driver_device_is_agp(struct drm_device * dev);
860extern long i915_compat_ioctl(struct file *filp, unsigned int cmd, 1015extern long i915_compat_ioctl(struct file *filp, unsigned int cmd,
861 unsigned long arg); 1016 unsigned long arg);
862extern int i915_emit_box(struct drm_device *dev, 1017extern int i915_emit_box(struct drm_device *dev,
863 struct drm_clip_rect *boxes, 1018 struct drm_clip_rect *box,
864 int i, int DR1, int DR4); 1019 int DR1, int DR4);
865extern int i965_reset(struct drm_device *dev, u8 flags); 1020extern int i915_reset(struct drm_device *dev, u8 flags);
866extern unsigned long i915_chipset_val(struct drm_i915_private *dev_priv); 1021extern unsigned long i915_chipset_val(struct drm_i915_private *dev_priv);
867extern unsigned long i915_mch_val(struct drm_i915_private *dev_priv); 1022extern unsigned long i915_mch_val(struct drm_i915_private *dev_priv);
868extern unsigned long i915_gfx_val(struct drm_i915_private *dev_priv); 1023extern unsigned long i915_gfx_val(struct drm_i915_private *dev_priv);
@@ -871,34 +1026,20 @@ extern void i915_update_gfx_val(struct drm_i915_private *dev_priv);
871 1026
872/* i915_irq.c */ 1027/* i915_irq.c */
873void i915_hangcheck_elapsed(unsigned long data); 1028void i915_hangcheck_elapsed(unsigned long data);
874void i915_destroy_error_state(struct drm_device *dev); 1029void i915_handle_error(struct drm_device *dev, bool wedged);
875extern int i915_irq_emit(struct drm_device *dev, void *data, 1030extern int i915_irq_emit(struct drm_device *dev, void *data,
876 struct drm_file *file_priv); 1031 struct drm_file *file_priv);
877extern int i915_irq_wait(struct drm_device *dev, void *data, 1032extern int i915_irq_wait(struct drm_device *dev, void *data,
878 struct drm_file *file_priv); 1033 struct drm_file *file_priv);
879void i915_trace_irq_get(struct drm_device *dev, u32 seqno);
880extern void i915_enable_interrupt (struct drm_device *dev);
881 1034
882extern irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS); 1035extern void intel_irq_init(struct drm_device *dev);
883extern void i915_driver_irq_preinstall(struct drm_device * dev); 1036
884extern int i915_driver_irq_postinstall(struct drm_device *dev);
885extern void i915_driver_irq_uninstall(struct drm_device * dev);
886extern int i915_vblank_pipe_set(struct drm_device *dev, void *data, 1037extern int i915_vblank_pipe_set(struct drm_device *dev, void *data,
887 struct drm_file *file_priv); 1038 struct drm_file *file_priv);
888extern int i915_vblank_pipe_get(struct drm_device *dev, void *data, 1039extern int i915_vblank_pipe_get(struct drm_device *dev, void *data,
889 struct drm_file *file_priv); 1040 struct drm_file *file_priv);
890extern int i915_enable_vblank(struct drm_device *dev, int crtc);
891extern void i915_disable_vblank(struct drm_device *dev, int crtc);
892extern u32 i915_get_vblank_counter(struct drm_device *dev, int crtc);
893extern u32 gm45_get_vblank_counter(struct drm_device *dev, int crtc);
894extern int i915_vblank_swap(struct drm_device *dev, void *data, 1041extern int i915_vblank_swap(struct drm_device *dev, void *data,
895 struct drm_file *file_priv); 1042 struct drm_file *file_priv);
896extern void i915_enable_irq(drm_i915_private_t *dev_priv, u32 mask);
897extern void i915_disable_irq(drm_i915_private_t *dev_priv, u32 mask);
898extern void ironlake_enable_graphics_irq(drm_i915_private_t *dev_priv,
899 u32 mask);
900extern void ironlake_disable_graphics_irq(drm_i915_private_t *dev_priv,
901 u32 mask);
902 1043
903void 1044void
904i915_enable_pipestat(drm_i915_private_t *dev_priv, int pipe, u32 mask); 1045i915_enable_pipestat(drm_i915_private_t *dev_priv, int pipe, u32 mask);
@@ -908,6 +1049,12 @@ i915_disable_pipestat(drm_i915_private_t *dev_priv, int pipe, u32 mask);
908 1049
909void intel_enable_asle (struct drm_device *dev); 1050void intel_enable_asle (struct drm_device *dev);
910 1051
1052#ifdef CONFIG_DEBUG_FS
1053extern void i915_destroy_error_state(struct drm_device *dev);
1054#else
1055#define i915_destroy_error_state(x)
1056#endif
1057
911 1058
912/* i915_mem.c */ 1059/* i915_mem.c */
913extern int i915_mem_alloc(struct drm_device *dev, void *data, 1060extern int i915_mem_alloc(struct drm_device *dev, void *data,
@@ -964,83 +1111,124 @@ int i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
964 struct drm_file *file_priv); 1111 struct drm_file *file_priv);
965void i915_gem_load(struct drm_device *dev); 1112void i915_gem_load(struct drm_device *dev);
966int i915_gem_init_object(struct drm_gem_object *obj); 1113int i915_gem_init_object(struct drm_gem_object *obj);
967struct drm_gem_object * i915_gem_alloc_object(struct drm_device *dev, 1114int __must_check i915_gem_flush_ring(struct intel_ring_buffer *ring,
968 size_t size); 1115 uint32_t invalidate_domains,
1116 uint32_t flush_domains);
1117struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev,
1118 size_t size);
969void i915_gem_free_object(struct drm_gem_object *obj); 1119void i915_gem_free_object(struct drm_gem_object *obj);
970int i915_gem_object_pin(struct drm_gem_object *obj, uint32_t alignment); 1120int __must_check i915_gem_object_pin(struct drm_i915_gem_object *obj,
971void i915_gem_object_unpin(struct drm_gem_object *obj); 1121 uint32_t alignment,
972int i915_gem_object_unbind(struct drm_gem_object *obj); 1122 bool map_and_fenceable);
973void i915_gem_release_mmap(struct drm_gem_object *obj); 1123void i915_gem_object_unpin(struct drm_i915_gem_object *obj);
1124int __must_check i915_gem_object_unbind(struct drm_i915_gem_object *obj);
1125void i915_gem_release_mmap(struct drm_i915_gem_object *obj);
974void i915_gem_lastclose(struct drm_device *dev); 1126void i915_gem_lastclose(struct drm_device *dev);
975uint32_t i915_get_gem_seqno(struct drm_device *dev, 1127
976 struct intel_ring_buffer *ring); 1128int __must_check i915_mutex_lock_interruptible(struct drm_device *dev);
977bool i915_seqno_passed(uint32_t seq1, uint32_t seq2); 1129int __must_check i915_gem_object_wait_rendering(struct drm_i915_gem_object *obj);
978int i915_gem_object_get_fence_reg(struct drm_gem_object *obj); 1130void i915_gem_object_move_to_active(struct drm_i915_gem_object *obj,
979int i915_gem_object_put_fence_reg(struct drm_gem_object *obj); 1131 struct intel_ring_buffer *ring,
1132 u32 seqno);
1133
1134int i915_gem_dumb_create(struct drm_file *file_priv,
1135 struct drm_device *dev,
1136 struct drm_mode_create_dumb *args);
1137int i915_gem_mmap_gtt(struct drm_file *file_priv, struct drm_device *dev,
1138 uint32_t handle, uint64_t *offset);
1139int i915_gem_dumb_destroy(struct drm_file *file_priv, struct drm_device *dev,
1140 uint32_t handle);
1141/**
1142 * Returns true if seq1 is later than seq2.
1143 */
1144static inline bool
1145i915_seqno_passed(uint32_t seq1, uint32_t seq2)
1146{
1147 return (int32_t)(seq1 - seq2) >= 0;
1148}
1149
1150static inline u32
1151i915_gem_next_request_seqno(struct intel_ring_buffer *ring)
1152{
1153 drm_i915_private_t *dev_priv = ring->dev->dev_private;
1154 return ring->outstanding_lazy_request = dev_priv->next_seqno;
1155}
1156
1157int __must_check i915_gem_object_get_fence(struct drm_i915_gem_object *obj,
1158 struct intel_ring_buffer *pipelined);
1159int __must_check i915_gem_object_put_fence(struct drm_i915_gem_object *obj);
1160
980void i915_gem_retire_requests(struct drm_device *dev); 1161void i915_gem_retire_requests(struct drm_device *dev);
981void i915_gem_retire_work_handler(struct work_struct *work); 1162void i915_gem_reset(struct drm_device *dev);
982void i915_gem_clflush_object(struct drm_gem_object *obj); 1163void i915_gem_clflush_object(struct drm_i915_gem_object *obj);
983int i915_gem_object_set_domain(struct drm_gem_object *obj, 1164int __must_check i915_gem_object_set_domain(struct drm_i915_gem_object *obj,
984 uint32_t read_domains, 1165 uint32_t read_domains,
985 uint32_t write_domain); 1166 uint32_t write_domain);
986int i915_gem_init_ringbuffer(struct drm_device *dev); 1167int __must_check i915_gem_object_flush_gpu(struct drm_i915_gem_object *obj);
1168int __must_check i915_gem_init_ringbuffer(struct drm_device *dev);
987void i915_gem_cleanup_ringbuffer(struct drm_device *dev); 1169void i915_gem_cleanup_ringbuffer(struct drm_device *dev);
988int i915_gem_do_init(struct drm_device *dev, unsigned long start, 1170void i915_gem_do_init(struct drm_device *dev,
989 unsigned long end); 1171 unsigned long start,
990int i915_gpu_idle(struct drm_device *dev); 1172 unsigned long mappable_end,
991int i915_gem_idle(struct drm_device *dev); 1173 unsigned long end);
992uint32_t i915_add_request(struct drm_device *dev, 1174int __must_check i915_gpu_idle(struct drm_device *dev);
993 struct drm_file *file_priv, 1175int __must_check i915_gem_idle(struct drm_device *dev);
994 uint32_t flush_domains, 1176int __must_check i915_add_request(struct intel_ring_buffer *ring,
995 struct intel_ring_buffer *ring); 1177 struct drm_file *file,
996int i915_do_wait_request(struct drm_device *dev, 1178 struct drm_i915_gem_request *request);
997 uint32_t seqno, int interruptible, 1179int __must_check i915_wait_request(struct intel_ring_buffer *ring,
998 struct intel_ring_buffer *ring); 1180 uint32_t seqno);
999int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf); 1181int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf);
1000int i915_gem_object_set_to_gtt_domain(struct drm_gem_object *obj, 1182int __must_check
1001 int write); 1183i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj,
1002int i915_gem_object_set_to_display_plane(struct drm_gem_object *obj); 1184 bool write);
1185int __must_check
1186i915_gem_object_set_to_display_plane(struct drm_i915_gem_object *obj,
1187 struct intel_ring_buffer *pipelined);
1003int i915_gem_attach_phys_object(struct drm_device *dev, 1188int i915_gem_attach_phys_object(struct drm_device *dev,
1004 struct drm_gem_object *obj, 1189 struct drm_i915_gem_object *obj,
1005 int id, 1190 int id,
1006 int align); 1191 int align);
1007void i915_gem_detach_phys_object(struct drm_device *dev, 1192void i915_gem_detach_phys_object(struct drm_device *dev,
1008 struct drm_gem_object *obj); 1193 struct drm_i915_gem_object *obj);
1009void i915_gem_free_all_phys_object(struct drm_device *dev); 1194void i915_gem_free_all_phys_object(struct drm_device *dev);
1010int i915_gem_object_get_pages(struct drm_gem_object *obj, gfp_t gfpmask); 1195void i915_gem_release(struct drm_device *dev, struct drm_file *file);
1011void i915_gem_object_put_pages(struct drm_gem_object *obj);
1012void i915_gem_release(struct drm_device * dev, struct drm_file *file_priv);
1013int i915_gem_object_flush_write_domain(struct drm_gem_object *obj);
1014 1196
1015void i915_gem_shrinker_init(void); 1197uint32_t
1016void i915_gem_shrinker_exit(void); 1198i915_gem_get_unfenced_gtt_alignment(struct drm_device *dev,
1199 uint32_t size,
1200 int tiling_mode);
1201
1202/* i915_gem_gtt.c */
1203void i915_gem_restore_gtt_mappings(struct drm_device *dev);
1204int __must_check i915_gem_gtt_bind_object(struct drm_i915_gem_object *obj);
1205void i915_gem_gtt_unbind_object(struct drm_i915_gem_object *obj);
1017 1206
1018/* i915_gem_evict.c */ 1207/* i915_gem_evict.c */
1019int i915_gem_evict_something(struct drm_device *dev, int min_size, unsigned alignment); 1208int __must_check i915_gem_evict_something(struct drm_device *dev, int min_size,
1020int i915_gem_evict_everything(struct drm_device *dev); 1209 unsigned alignment, bool mappable);
1021int i915_gem_evict_inactive(struct drm_device *dev); 1210int __must_check i915_gem_evict_everything(struct drm_device *dev,
1211 bool purgeable_only);
1212int __must_check i915_gem_evict_inactive(struct drm_device *dev,
1213 bool purgeable_only);
1022 1214
1023/* i915_gem_tiling.c */ 1215/* i915_gem_tiling.c */
1024void i915_gem_detect_bit_6_swizzle(struct drm_device *dev); 1216void i915_gem_detect_bit_6_swizzle(struct drm_device *dev);
1025void i915_gem_object_do_bit_17_swizzle(struct drm_gem_object *obj); 1217void i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj);
1026void i915_gem_object_save_bit_17_swizzle(struct drm_gem_object *obj); 1218void i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj);
1027bool i915_tiling_ok(struct drm_device *dev, int stride, int size,
1028 int tiling_mode);
1029bool i915_gem_object_fence_offset_ok(struct drm_gem_object *obj,
1030 int tiling_mode);
1031 1219
1032/* i915_gem_debug.c */ 1220/* i915_gem_debug.c */
1033void i915_gem_dump_object(struct drm_gem_object *obj, int len, 1221void i915_gem_dump_object(struct drm_i915_gem_object *obj, int len,
1034 const char *where, uint32_t mark); 1222 const char *where, uint32_t mark);
1035#if WATCH_INACTIVE 1223#if WATCH_LISTS
1036void i915_verify_inactive(struct drm_device *dev, char *file, int line); 1224int i915_verify_lists(struct drm_device *dev);
1037#else 1225#else
1038#define i915_verify_inactive(dev, file, line) 1226#define i915_verify_lists(dev) 0
1039#endif 1227#endif
1040void i915_gem_object_check_coherency(struct drm_gem_object *obj, int handle); 1228void i915_gem_object_check_coherency(struct drm_i915_gem_object *obj,
1041void i915_gem_dump_object(struct drm_gem_object *obj, int len, 1229 int handle);
1230void i915_gem_dump_object(struct drm_i915_gem_object *obj, int len,
1042 const char *where, uint32_t mark); 1231 const char *where, uint32_t mark);
1043void i915_dump_lru(struct drm_device *dev, const char *where);
1044 1232
1045/* i915_debugfs.c */ 1233/* i915_debugfs.c */
1046int i915_debugfs_init(struct drm_minor *minor); 1234int i915_debugfs_init(struct drm_minor *minor);
@@ -1054,23 +1242,45 @@ extern int i915_restore_state(struct drm_device *dev);
1054extern int i915_save_state(struct drm_device *dev); 1242extern int i915_save_state(struct drm_device *dev);
1055extern int i915_restore_state(struct drm_device *dev); 1243extern int i915_restore_state(struct drm_device *dev);
1056 1244
1245/* intel_i2c.c */
1246extern int intel_setup_gmbus(struct drm_device *dev);
1247extern void intel_teardown_gmbus(struct drm_device *dev);
1248extern void intel_gmbus_set_speed(struct i2c_adapter *adapter, int speed);
1249extern void intel_gmbus_force_bit(struct i2c_adapter *adapter, bool force_bit);
1250extern inline bool intel_gmbus_is_forced_bit(struct i2c_adapter *adapter)
1251{
1252 return container_of(adapter, struct intel_gmbus, adapter)->force_bit;
1253}
1254extern void intel_i2c_reset(struct drm_device *dev);
1255
1256/* intel_opregion.c */
1257extern int intel_opregion_setup(struct drm_device *dev);
1057#ifdef CONFIG_ACPI 1258#ifdef CONFIG_ACPI
1058/* i915_opregion.c */ 1259extern void intel_opregion_init(struct drm_device *dev);
1059extern int intel_opregion_init(struct drm_device *dev, int resume); 1260extern void intel_opregion_fini(struct drm_device *dev);
1060extern void intel_opregion_free(struct drm_device *dev, int suspend); 1261extern void intel_opregion_asle_intr(struct drm_device *dev);
1061extern void opregion_asle_intr(struct drm_device *dev); 1262extern void intel_opregion_gse_intr(struct drm_device *dev);
1062extern void ironlake_opregion_gse_intr(struct drm_device *dev); 1263extern void intel_opregion_enable_asle(struct drm_device *dev);
1063extern void opregion_enable_asle(struct drm_device *dev);
1064#else 1264#else
1065static inline int intel_opregion_init(struct drm_device *dev, int resume) { return 0; } 1265static inline void intel_opregion_init(struct drm_device *dev) { return; }
1066static inline void intel_opregion_free(struct drm_device *dev, int suspend) { return; } 1266static inline void intel_opregion_fini(struct drm_device *dev) { return; }
1067static inline void opregion_asle_intr(struct drm_device *dev) { return; } 1267static inline void intel_opregion_asle_intr(struct drm_device *dev) { return; }
1068static inline void ironlake_opregion_gse_intr(struct drm_device *dev) { return; } 1268static inline void intel_opregion_gse_intr(struct drm_device *dev) { return; }
1069static inline void opregion_enable_asle(struct drm_device *dev) { return; } 1269static inline void intel_opregion_enable_asle(struct drm_device *dev) { return; }
1070#endif 1270#endif
1071 1271
1272/* intel_acpi.c */
1273#ifdef CONFIG_ACPI
1274extern void intel_register_dsm_handler(void);
1275extern void intel_unregister_dsm_handler(void);
1276#else
1277static inline void intel_register_dsm_handler(void) { return; }
1278static inline void intel_unregister_dsm_handler(void) { return; }
1279#endif /* CONFIG_ACPI */
1280
1072/* modesetting */ 1281/* modesetting */
1073extern void intel_modeset_init(struct drm_device *dev); 1282extern void intel_modeset_init(struct drm_device *dev);
1283extern void intel_modeset_gem_init(struct drm_device *dev);
1074extern void intel_modeset_cleanup(struct drm_device *dev); 1284extern void intel_modeset_cleanup(struct drm_device *dev);
1075extern int intel_modeset_vga_set_state(struct drm_device *dev, bool state); 1285extern int intel_modeset_vga_set_state(struct drm_device *dev, bool state);
1076extern void i8xx_disable_fbc(struct drm_device *dev); 1286extern void i8xx_disable_fbc(struct drm_device *dev);
@@ -1080,145 +1290,110 @@ extern void intel_disable_fbc(struct drm_device *dev);
1080extern void intel_enable_fbc(struct drm_crtc *crtc, unsigned long interval); 1290extern void intel_enable_fbc(struct drm_crtc *crtc, unsigned long interval);
1081extern bool intel_fbc_enabled(struct drm_device *dev); 1291extern bool intel_fbc_enabled(struct drm_device *dev);
1082extern bool ironlake_set_drps(struct drm_device *dev, u8 val); 1292extern bool ironlake_set_drps(struct drm_device *dev, u8 val);
1293extern void ironlake_enable_rc6(struct drm_device *dev);
1294extern void gen6_set_rps(struct drm_device *dev, u8 val);
1083extern void intel_detect_pch (struct drm_device *dev); 1295extern void intel_detect_pch (struct drm_device *dev);
1084extern int intel_trans_dp_port_sel (struct drm_crtc *crtc); 1296extern int intel_trans_dp_port_sel (struct drm_crtc *crtc);
1085 1297
1086/* overlay */ 1298/* overlay */
1299#ifdef CONFIG_DEBUG_FS
1087extern struct intel_overlay_error_state *intel_overlay_capture_error_state(struct drm_device *dev); 1300extern struct intel_overlay_error_state *intel_overlay_capture_error_state(struct drm_device *dev);
1088extern void intel_overlay_print_error_state(struct seq_file *m, struct intel_overlay_error_state *error); 1301extern void intel_overlay_print_error_state(struct seq_file *m, struct intel_overlay_error_state *error);
1089 1302
1090/** 1303extern struct intel_display_error_state *intel_display_capture_error_state(struct drm_device *dev);
1091 * Lock test for when it's just for synchronization of ring access. 1304extern void intel_display_print_error_state(struct seq_file *m,
1092 * 1305 struct drm_device *dev,
1093 * In that case, we don't need to do it when GEM is initialized as nobody else 1306 struct intel_display_error_state *error);
1094 * has access to the ring. 1307#endif
1095 */
1096#define RING_LOCK_TEST_WITH_RETURN(dev, file_priv) do { \
1097 if (((drm_i915_private_t *)dev->dev_private)->render_ring.gem_object \
1098 == NULL) \
1099 LOCK_TEST_WITH_RETURN(dev, file_priv); \
1100} while (0)
1101 1308
1102#define I915_READ(reg) readl(dev_priv->regs + (reg)) 1309#define LP_RING(d) (&((struct drm_i915_private *)(d))->ring[RCS])
1103#define I915_WRITE(reg, val) writel(val, dev_priv->regs + (reg))
1104#define I915_READ16(reg) readw(dev_priv->regs + (reg))
1105#define I915_WRITE16(reg, val) writel(val, dev_priv->regs + (reg))
1106#define I915_READ8(reg) readb(dev_priv->regs + (reg))
1107#define I915_WRITE8(reg, val) writeb(val, dev_priv->regs + (reg))
1108#define I915_WRITE64(reg, val) writeq(val, dev_priv->regs + (reg))
1109#define I915_READ64(reg) readq(dev_priv->regs + (reg))
1110#define POSTING_READ(reg) (void)I915_READ(reg)
1111#define POSTING_READ16(reg) (void)I915_READ16(reg)
1112
1113#define I915_VERBOSE 0
1114
1115#define BEGIN_LP_RING(n) do { \
1116 drm_i915_private_t *dev_priv__ = dev->dev_private; \
1117 if (I915_VERBOSE) \
1118 DRM_DEBUG(" BEGIN_LP_RING %x\n", (int)(n)); \
1119 intel_ring_begin(dev, &dev_priv__->render_ring, (n)); \
1120} while (0)
1121 1310
1311#define BEGIN_LP_RING(n) \
1312 intel_ring_begin(LP_RING(dev_priv), (n))
1122 1313
1123#define OUT_RING(x) do { \ 1314#define OUT_RING(x) \
1124 drm_i915_private_t *dev_priv__ = dev->dev_private; \ 1315 intel_ring_emit(LP_RING(dev_priv), x)
1125 if (I915_VERBOSE) \
1126 DRM_DEBUG(" OUT_RING %x\n", (int)(x)); \
1127 intel_ring_emit(dev, &dev_priv__->render_ring, x); \
1128} while (0)
1129 1316
1130#define ADVANCE_LP_RING() do { \ 1317#define ADVANCE_LP_RING() \
1131 drm_i915_private_t *dev_priv__ = dev->dev_private; \ 1318 intel_ring_advance(LP_RING(dev_priv))
1132 if (I915_VERBOSE) \
1133 DRM_DEBUG("ADVANCE_LP_RING %x\n", \
1134 dev_priv__->render_ring.tail); \
1135 intel_ring_advance(dev, &dev_priv__->render_ring); \
1136} while(0)
1137 1319
1138/** 1320/**
1139 * Reads a dword out of the status page, which is written to from the command 1321 * Lock test for when it's just for synchronization of ring access.
1140 * queue by automatic updates, MI_REPORT_HEAD, MI_STORE_DATA_INDEX, or
1141 * MI_STORE_DATA_IMM.
1142 *
1143 * The following dwords have a reserved meaning:
1144 * 0x00: ISR copy, updated when an ISR bit not set in the HWSTAM changes.
1145 * 0x04: ring 0 head pointer
1146 * 0x05: ring 1 head pointer (915-class)
1147 * 0x06: ring 2 head pointer (915-class)
1148 * 0x10-0x1b: Context status DWords (GM45)
1149 * 0x1f: Last written status offset. (GM45)
1150 * 1322 *
1151 * The area from dword 0x20 to 0x3ff is available for driver usage. 1323 * In that case, we don't need to do it when GEM is initialized as nobody else
1324 * has access to the ring.
1152 */ 1325 */
1153#define READ_HWSP(dev_priv, reg) (((volatile u32 *)\ 1326#define RING_LOCK_TEST_WITH_RETURN(dev, file) do { \
1154 (dev_priv->render_ring.status_page.page_addr))[reg]) 1327 if (LP_RING(dev->dev_private)->obj == NULL) \
1155#define READ_BREADCRUMB(dev_priv) READ_HWSP(dev_priv, I915_BREADCRUMB_INDEX) 1328 LOCK_TEST_WITH_RETURN(dev, file); \
1156#define I915_GEM_HWS_INDEX 0x20 1329} while (0)
1157#define I915_BREADCRUMB_INDEX 0x21
1158
1159#define INTEL_INFO(dev) (((struct drm_i915_private *) (dev)->dev_private)->info)
1160
1161#define IS_I830(dev) ((dev)->pci_device == 0x3577)
1162#define IS_845G(dev) ((dev)->pci_device == 0x2562)
1163#define IS_I85X(dev) (INTEL_INFO(dev)->is_i85x)
1164#define IS_I865G(dev) ((dev)->pci_device == 0x2572)
1165#define IS_I915G(dev) (INTEL_INFO(dev)->is_i915g)
1166#define IS_I915GM(dev) ((dev)->pci_device == 0x2592)
1167#define IS_I945G(dev) ((dev)->pci_device == 0x2772)
1168#define IS_I945GM(dev) (INTEL_INFO(dev)->is_i945gm)
1169#define IS_I965G(dev) (INTEL_INFO(dev)->is_i965g)
1170#define IS_I965GM(dev) (INTEL_INFO(dev)->is_i965gm)
1171#define IS_BROADWATER(dev) (INTEL_INFO(dev)->is_broadwater)
1172#define IS_CRESTLINE(dev) (INTEL_INFO(dev)->is_crestline)
1173#define IS_GM45(dev) ((dev)->pci_device == 0x2A42)
1174#define IS_G4X(dev) (INTEL_INFO(dev)->is_g4x)
1175#define IS_PINEVIEW_G(dev) ((dev)->pci_device == 0xa001)
1176#define IS_PINEVIEW_M(dev) ((dev)->pci_device == 0xa011)
1177#define IS_PINEVIEW(dev) (INTEL_INFO(dev)->is_pineview)
1178#define IS_G33(dev) (INTEL_INFO(dev)->is_g33)
1179#define IS_IRONLAKE_D(dev) ((dev)->pci_device == 0x0042)
1180#define IS_IRONLAKE_M(dev) ((dev)->pci_device == 0x0046)
1181#define IS_IRONLAKE(dev) (INTEL_INFO(dev)->is_ironlake)
1182#define IS_I9XX(dev) (INTEL_INFO(dev)->is_i9xx)
1183#define IS_MOBILE(dev) (INTEL_INFO(dev)->is_mobile)
1184
1185#define IS_GEN2(dev) (INTEL_INFO(dev)->gen == 2)
1186#define IS_GEN3(dev) (INTEL_INFO(dev)->gen == 3)
1187#define IS_GEN4(dev) (INTEL_INFO(dev)->gen == 4)
1188#define IS_GEN5(dev) (INTEL_INFO(dev)->gen == 5)
1189#define IS_GEN6(dev) (INTEL_INFO(dev)->gen == 6)
1190
1191#define HAS_BSD(dev) (IS_IRONLAKE(dev) || IS_G4X(dev))
1192#define I915_NEED_GFX_HWS(dev) (INTEL_INFO(dev)->need_gfx_hws)
1193 1330
1194/* With the 945 and later, Y tiling got adjusted so that it was 32 128-byte 1331/* On SNB platform, before reading ring registers forcewake bit
1195 * rows, which changed the alignment requirements and fence programming. 1332 * must be set to prevent GT core from power down and stale values being
1333 * returned.
1196 */ 1334 */
1197#define HAS_128_BYTE_Y_TILING(dev) (IS_I9XX(dev) && !(IS_I915G(dev) || \ 1335void gen6_gt_force_wake_get(struct drm_i915_private *dev_priv);
1198 IS_I915GM(dev))) 1336void gen6_gt_force_wake_put(struct drm_i915_private *dev_priv);
1199#define SUPPORTS_DIGITAL_OUTPUTS(dev) (IS_I9XX(dev) && !IS_PINEVIEW(dev)) 1337void __gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv);
1200#define SUPPORTS_INTEGRATED_HDMI(dev) (IS_G4X(dev) || IS_IRONLAKE(dev)) 1338
1201#define SUPPORTS_INTEGRATED_DP(dev) (IS_G4X(dev) || IS_IRONLAKE(dev)) 1339/* We give fast paths for the really cool registers */
1202#define SUPPORTS_EDP(dev) (IS_IRONLAKE_M(dev)) 1340#define NEEDS_FORCE_WAKE(dev_priv, reg) \
1203#define SUPPORTS_TV(dev) (IS_I9XX(dev) && IS_MOBILE(dev) && \ 1341 (((dev_priv)->info->gen >= 6) && \
1204 !IS_IRONLAKE(dev) && !IS_PINEVIEW(dev) && \ 1342 ((reg) < 0x40000) && \
1205 !IS_GEN6(dev)) 1343 ((reg) != FORCEWAKE))
1206#define I915_HAS_HOTPLUG(dev) (INTEL_INFO(dev)->has_hotplug) 1344
1207/* dsparb controlled by hw only */ 1345#define __i915_read(x, y) \
1208#define DSPARB_HWCONTROL(dev) (IS_G4X(dev) || IS_IRONLAKE(dev)) 1346static inline u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg) { \
1209 1347 u##x val = 0; \
1210#define HAS_FW_BLC(dev) (IS_I9XX(dev) || IS_G4X(dev) || IS_IRONLAKE(dev)) 1348 if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \
1211#define HAS_PIPE_CXSR(dev) (INTEL_INFO(dev)->has_pipe_cxsr) 1349 gen6_gt_force_wake_get(dev_priv); \
1212#define I915_HAS_FBC(dev) (INTEL_INFO(dev)->has_fbc) 1350 val = read##y(dev_priv->regs + reg); \
1213#define I915_HAS_RC6(dev) (INTEL_INFO(dev)->has_rc6) 1351 gen6_gt_force_wake_put(dev_priv); \
1214 1352 } else { \
1215#define HAS_PCH_SPLIT(dev) (IS_IRONLAKE(dev) || \ 1353 val = read##y(dev_priv->regs + reg); \
1216 IS_GEN6(dev)) 1354 } \
1217#define HAS_PIPE_CONTROL(dev) (IS_IRONLAKE(dev) || IS_GEN6(dev)) 1355 trace_i915_reg_rw(false, reg, val, sizeof(val)); \
1218 1356 return val; \
1219#define INTEL_PCH_TYPE(dev) (((struct drm_i915_private *)(dev)->dev_private)->pch_type) 1357}
1220#define HAS_PCH_CPT(dev) (INTEL_PCH_TYPE(dev) == PCH_CPT) 1358
1359__i915_read(8, b)
1360__i915_read(16, w)
1361__i915_read(32, l)
1362__i915_read(64, q)
1363#undef __i915_read
1364
1365#define __i915_write(x, y) \
1366static inline void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val) { \
1367 trace_i915_reg_rw(true, reg, val, sizeof(val)); \
1368 if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \
1369 __gen6_gt_wait_for_fifo(dev_priv); \
1370 } \
1371 write##y(val, dev_priv->regs + reg); \
1372}
1373__i915_write(8, b)
1374__i915_write(16, w)
1375__i915_write(32, l)
1376__i915_write(64, q)
1377#undef __i915_write
1378
1379#define I915_READ8(reg) i915_read8(dev_priv, (reg))
1380#define I915_WRITE8(reg, val) i915_write8(dev_priv, (reg), (val))
1381
1382#define I915_READ16(reg) i915_read16(dev_priv, (reg))
1383#define I915_WRITE16(reg, val) i915_write16(dev_priv, (reg), (val))
1384#define I915_READ16_NOTRACE(reg) readw(dev_priv->regs + (reg))
1385#define I915_WRITE16_NOTRACE(reg, val) writew(val, dev_priv->regs + (reg))
1386
1387#define I915_READ(reg) i915_read32(dev_priv, (reg))
1388#define I915_WRITE(reg, val) i915_write32(dev_priv, (reg), (val))
1389#define I915_READ_NOTRACE(reg) readl(dev_priv->regs + (reg))
1390#define I915_WRITE_NOTRACE(reg, val) writel(val, dev_priv->regs + (reg))
1391
1392#define I915_WRITE64(reg, val) i915_write64(dev_priv, (reg), (val))
1393#define I915_READ64(reg) i915_read64(dev_priv, (reg))
1394
1395#define POSTING_READ(reg) (void)I915_READ_NOTRACE(reg)
1396#define POSTING_READ16(reg) (void)I915_READ16_NOTRACE(reg)
1221 1397
1222#define PRIMARY_RINGBUFFER_SIZE (128*1024)
1223 1398
1224#endif 1399#endif