diff options
-rw-r--r-- | drivers/gpu/drm/i830/i830_dma.c | 95 | ||||
-rw-r--r-- | drivers/gpu/drm/i830/i830_drv.h | 48 | ||||
-rw-r--r-- | drivers/gpu/drm/i830/i830_irq.c | 10 |
3 files changed, 74 insertions, 79 deletions
diff --git a/drivers/gpu/drm/i830/i830_dma.c b/drivers/gpu/drm/i830/i830_dma.c index 65759a9a85c8..7ee85ea507ce 100644 --- a/drivers/gpu/drm/i830/i830_dma.c +++ b/drivers/gpu/drm/i830/i830_dma.c | |||
@@ -62,9 +62,8 @@ static struct drm_buf *i830_freelist_get(struct drm_device * dev) | |||
62 | /* In use is already a pointer */ | 62 | /* In use is already a pointer */ |
63 | used = cmpxchg(buf_priv->in_use, I830_BUF_FREE, | 63 | used = cmpxchg(buf_priv->in_use, I830_BUF_FREE, |
64 | I830_BUF_CLIENT); | 64 | I830_BUF_CLIENT); |
65 | if (used == I830_BUF_FREE) { | 65 | if (used == I830_BUF_FREE) |
66 | return buf; | 66 | return buf; |
67 | } | ||
68 | } | 67 | } |
69 | return NULL; | 68 | return NULL; |
70 | } | 69 | } |
@@ -73,7 +72,7 @@ static struct drm_buf *i830_freelist_get(struct drm_device * dev) | |||
73 | * yet, the hardware updates in use for us once its on the ring buffer. | 72 | * yet, the hardware updates in use for us once its on the ring buffer. |
74 | */ | 73 | */ |
75 | 74 | ||
76 | static int i830_freelist_put(struct drm_device * dev, struct drm_buf * buf) | 75 | static int i830_freelist_put(struct drm_device *dev, struct drm_buf *buf) |
77 | { | 76 | { |
78 | drm_i830_buf_priv_t *buf_priv = buf->dev_private; | 77 | drm_i830_buf_priv_t *buf_priv = buf->dev_private; |
79 | int used; | 78 | int used; |
@@ -123,7 +122,7 @@ static const struct file_operations i830_buffer_fops = { | |||
123 | .fasync = drm_fasync, | 122 | .fasync = drm_fasync, |
124 | }; | 123 | }; |
125 | 124 | ||
126 | static int i830_map_buffer(struct drm_buf * buf, struct drm_file *file_priv) | 125 | static int i830_map_buffer(struct drm_buf *buf, struct drm_file *file_priv) |
127 | { | 126 | { |
128 | struct drm_device *dev = file_priv->minor->dev; | 127 | struct drm_device *dev = file_priv->minor->dev; |
129 | drm_i830_buf_priv_t *buf_priv = buf->dev_private; | 128 | drm_i830_buf_priv_t *buf_priv = buf->dev_private; |
@@ -156,7 +155,7 @@ static int i830_map_buffer(struct drm_buf * buf, struct drm_file *file_priv) | |||
156 | return retcode; | 155 | return retcode; |
157 | } | 156 | } |
158 | 157 | ||
159 | static int i830_unmap_buffer(struct drm_buf * buf) | 158 | static int i830_unmap_buffer(struct drm_buf *buf) |
160 | { | 159 | { |
161 | drm_i830_buf_priv_t *buf_priv = buf->dev_private; | 160 | drm_i830_buf_priv_t *buf_priv = buf->dev_private; |
162 | int retcode = 0; | 161 | int retcode = 0; |
@@ -176,7 +175,7 @@ static int i830_unmap_buffer(struct drm_buf * buf) | |||
176 | return retcode; | 175 | return retcode; |
177 | } | 176 | } |
178 | 177 | ||
179 | static int i830_dma_get_buffer(struct drm_device * dev, drm_i830_dma_t * d, | 178 | static int i830_dma_get_buffer(struct drm_device *dev, drm_i830_dma_t *d, |
180 | struct drm_file *file_priv) | 179 | struct drm_file *file_priv) |
181 | { | 180 | { |
182 | struct drm_buf *buf; | 181 | struct drm_buf *buf; |
@@ -206,7 +205,7 @@ static int i830_dma_get_buffer(struct drm_device * dev, drm_i830_dma_t * d, | |||
206 | return retcode; | 205 | return retcode; |
207 | } | 206 | } |
208 | 207 | ||
209 | static int i830_dma_cleanup(struct drm_device * dev) | 208 | static int i830_dma_cleanup(struct drm_device *dev) |
210 | { | 209 | { |
211 | struct drm_device_dma *dma = dev->dma; | 210 | struct drm_device_dma *dma = dev->dma; |
212 | 211 | ||
@@ -222,9 +221,8 @@ static int i830_dma_cleanup(struct drm_device * dev) | |||
222 | drm_i830_private_t *dev_priv = | 221 | drm_i830_private_t *dev_priv = |
223 | (drm_i830_private_t *) dev->dev_private; | 222 | (drm_i830_private_t *) dev->dev_private; |
224 | 223 | ||
225 | if (dev_priv->ring.virtual_start) { | 224 | if (dev_priv->ring.virtual_start) |
226 | drm_core_ioremapfree(&dev_priv->ring.map, dev); | 225 | drm_core_ioremapfree(&dev_priv->ring.map, dev); |
227 | } | ||
228 | if (dev_priv->hw_status_page) { | 226 | if (dev_priv->hw_status_page) { |
229 | pci_free_consistent(dev->pdev, PAGE_SIZE, | 227 | pci_free_consistent(dev->pdev, PAGE_SIZE, |
230 | dev_priv->hw_status_page, | 228 | dev_priv->hw_status_page, |
@@ -246,7 +244,7 @@ static int i830_dma_cleanup(struct drm_device * dev) | |||
246 | return 0; | 244 | return 0; |
247 | } | 245 | } |
248 | 246 | ||
249 | int i830_wait_ring(struct drm_device * dev, int n, const char *caller) | 247 | int i830_wait_ring(struct drm_device *dev, int n, const char *caller) |
250 | { | 248 | { |
251 | drm_i830_private_t *dev_priv = dev->dev_private; | 249 | drm_i830_private_t *dev_priv = dev->dev_private; |
252 | drm_i830_ring_buffer_t *ring = &(dev_priv->ring); | 250 | drm_i830_ring_buffer_t *ring = &(dev_priv->ring); |
@@ -276,11 +274,11 @@ int i830_wait_ring(struct drm_device * dev, int n, const char *caller) | |||
276 | dev_priv->sarea_priv->perf_boxes |= I830_BOX_WAIT; | 274 | dev_priv->sarea_priv->perf_boxes |= I830_BOX_WAIT; |
277 | } | 275 | } |
278 | 276 | ||
279 | out_wait_ring: | 277 | out_wait_ring: |
280 | return iters; | 278 | return iters; |
281 | } | 279 | } |
282 | 280 | ||
283 | static void i830_kernel_lost_context(struct drm_device * dev) | 281 | static void i830_kernel_lost_context(struct drm_device *dev) |
284 | { | 282 | { |
285 | drm_i830_private_t *dev_priv = dev->dev_private; | 283 | drm_i830_private_t *dev_priv = dev->dev_private; |
286 | drm_i830_ring_buffer_t *ring = &(dev_priv->ring); | 284 | drm_i830_ring_buffer_t *ring = &(dev_priv->ring); |
@@ -295,7 +293,7 @@ static void i830_kernel_lost_context(struct drm_device * dev) | |||
295 | dev_priv->sarea_priv->perf_boxes |= I830_BOX_RING_EMPTY; | 293 | dev_priv->sarea_priv->perf_boxes |= I830_BOX_RING_EMPTY; |
296 | } | 294 | } |
297 | 295 | ||
298 | static int i830_freelist_init(struct drm_device * dev, drm_i830_private_t * dev_priv) | 296 | static int i830_freelist_init(struct drm_device *dev, drm_i830_private_t *dev_priv) |
299 | { | 297 | { |
300 | struct drm_device_dma *dma = dev->dma; | 298 | struct drm_device_dma *dma = dev->dma; |
301 | int my_idx = 36; | 299 | int my_idx = 36; |
@@ -329,9 +327,9 @@ static int i830_freelist_init(struct drm_device * dev, drm_i830_private_t * dev_ | |||
329 | return 0; | 327 | return 0; |
330 | } | 328 | } |
331 | 329 | ||
332 | static int i830_dma_initialize(struct drm_device * dev, | 330 | static int i830_dma_initialize(struct drm_device *dev, |
333 | drm_i830_private_t * dev_priv, | 331 | drm_i830_private_t *dev_priv, |
334 | drm_i830_init_t * init) | 332 | drm_i830_init_t *init) |
335 | { | 333 | { |
336 | struct drm_map_list *r_list; | 334 | struct drm_map_list *r_list; |
337 | 335 | ||
@@ -482,7 +480,7 @@ static int i830_dma_init(struct drm_device *dev, void *data, | |||
482 | /* Most efficient way to verify state for the i830 is as it is | 480 | /* Most efficient way to verify state for the i830 is as it is |
483 | * emitted. Non-conformant state is silently dropped. | 481 | * emitted. Non-conformant state is silently dropped. |
484 | */ | 482 | */ |
485 | static void i830EmitContextVerified(struct drm_device * dev, unsigned int *code) | 483 | static void i830EmitContextVerified(struct drm_device *dev, unsigned int *code) |
486 | { | 484 | { |
487 | drm_i830_private_t *dev_priv = dev->dev_private; | 485 | drm_i830_private_t *dev_priv = dev->dev_private; |
488 | int i, j = 0; | 486 | int i, j = 0; |
@@ -527,7 +525,7 @@ static void i830EmitContextVerified(struct drm_device * dev, unsigned int *code) | |||
527 | ADVANCE_LP_RING(); | 525 | ADVANCE_LP_RING(); |
528 | } | 526 | } |
529 | 527 | ||
530 | static void i830EmitTexVerified(struct drm_device * dev, unsigned int *code) | 528 | static void i830EmitTexVerified(struct drm_device *dev, unsigned int *code) |
531 | { | 529 | { |
532 | drm_i830_private_t *dev_priv = dev->dev_private; | 530 | drm_i830_private_t *dev_priv = dev->dev_private; |
533 | int i, j = 0; | 531 | int i, j = 0; |
@@ -561,7 +559,7 @@ static void i830EmitTexVerified(struct drm_device * dev, unsigned int *code) | |||
561 | printk("rejected packet %x\n", code[0]); | 559 | printk("rejected packet %x\n", code[0]); |
562 | } | 560 | } |
563 | 561 | ||
564 | static void i830EmitTexBlendVerified(struct drm_device * dev, | 562 | static void i830EmitTexBlendVerified(struct drm_device *dev, |
565 | unsigned int *code, unsigned int num) | 563 | unsigned int *code, unsigned int num) |
566 | { | 564 | { |
567 | drm_i830_private_t *dev_priv = dev->dev_private; | 565 | drm_i830_private_t *dev_priv = dev->dev_private; |
@@ -586,7 +584,7 @@ static void i830EmitTexBlendVerified(struct drm_device * dev, | |||
586 | ADVANCE_LP_RING(); | 584 | ADVANCE_LP_RING(); |
587 | } | 585 | } |
588 | 586 | ||
589 | static void i830EmitTexPalette(struct drm_device * dev, | 587 | static void i830EmitTexPalette(struct drm_device *dev, |
590 | unsigned int *palette, int number, int is_shared) | 588 | unsigned int *palette, int number, int is_shared) |
591 | { | 589 | { |
592 | drm_i830_private_t *dev_priv = dev->dev_private; | 590 | drm_i830_private_t *dev_priv = dev->dev_private; |
@@ -603,9 +601,8 @@ static void i830EmitTexPalette(struct drm_device * dev, | |||
603 | } else { | 601 | } else { |
604 | OUT_RING(CMD_OP_MAP_PALETTE_LOAD | MAP_PALETTE_NUM(number)); | 602 | OUT_RING(CMD_OP_MAP_PALETTE_LOAD | MAP_PALETTE_NUM(number)); |
605 | } | 603 | } |
606 | for (i = 0; i < 256; i++) { | 604 | for (i = 0; i < 256; i++) |
607 | OUT_RING(palette[i]); | 605 | OUT_RING(palette[i]); |
608 | } | ||
609 | OUT_RING(0); | 606 | OUT_RING(0); |
610 | /* KW: WHERE IS THE ADVANCE_LP_RING? This is effectively a noop! | 607 | /* KW: WHERE IS THE ADVANCE_LP_RING? This is effectively a noop! |
611 | */ | 608 | */ |
@@ -613,7 +610,7 @@ static void i830EmitTexPalette(struct drm_device * dev, | |||
613 | 610 | ||
614 | /* Need to do some additional checking when setting the dest buffer. | 611 | /* Need to do some additional checking when setting the dest buffer. |
615 | */ | 612 | */ |
616 | static void i830EmitDestVerified(struct drm_device * dev, unsigned int *code) | 613 | static void i830EmitDestVerified(struct drm_device *dev, unsigned int *code) |
617 | { | 614 | { |
618 | drm_i830_private_t *dev_priv = dev->dev_private; | 615 | drm_i830_private_t *dev_priv = dev->dev_private; |
619 | unsigned int tmp; | 616 | unsigned int tmp; |
@@ -674,7 +671,7 @@ static void i830EmitDestVerified(struct drm_device * dev, unsigned int *code) | |||
674 | ADVANCE_LP_RING(); | 671 | ADVANCE_LP_RING(); |
675 | } | 672 | } |
676 | 673 | ||
677 | static void i830EmitStippleVerified(struct drm_device * dev, unsigned int *code) | 674 | static void i830EmitStippleVerified(struct drm_device *dev, unsigned int *code) |
678 | { | 675 | { |
679 | drm_i830_private_t *dev_priv = dev->dev_private; | 676 | drm_i830_private_t *dev_priv = dev->dev_private; |
680 | RING_LOCALS; | 677 | RING_LOCALS; |
@@ -685,7 +682,7 @@ static void i830EmitStippleVerified(struct drm_device * dev, unsigned int *code) | |||
685 | ADVANCE_LP_RING(); | 682 | ADVANCE_LP_RING(); |
686 | } | 683 | } |
687 | 684 | ||
688 | static void i830EmitState(struct drm_device * dev) | 685 | static void i830EmitState(struct drm_device *dev) |
689 | { | 686 | { |
690 | drm_i830_private_t *dev_priv = dev->dev_private; | 687 | drm_i830_private_t *dev_priv = dev->dev_private; |
691 | drm_i830_sarea_t *sarea_priv = dev_priv->sarea_priv; | 688 | drm_i830_sarea_t *sarea_priv = dev_priv->sarea_priv; |
@@ -788,7 +785,7 @@ static void i830EmitState(struct drm_device * dev) | |||
788 | * Performance monitoring functions | 785 | * Performance monitoring functions |
789 | */ | 786 | */ |
790 | 787 | ||
791 | static void i830_fill_box(struct drm_device * dev, | 788 | static void i830_fill_box(struct drm_device *dev, |
792 | int x, int y, int w, int h, int r, int g, int b) | 789 | int x, int y, int w, int h, int r, int g, int b) |
793 | { | 790 | { |
794 | drm_i830_private_t *dev_priv = dev->dev_private; | 791 | drm_i830_private_t *dev_priv = dev->dev_private; |
@@ -816,17 +813,16 @@ static void i830_fill_box(struct drm_device * dev, | |||
816 | OUT_RING((y << 16) | x); | 813 | OUT_RING((y << 16) | x); |
817 | OUT_RING(((y + h) << 16) | (x + w)); | 814 | OUT_RING(((y + h) << 16) | (x + w)); |
818 | 815 | ||
819 | if (dev_priv->current_page == 1) { | 816 | if (dev_priv->current_page == 1) |
820 | OUT_RING(dev_priv->front_offset); | 817 | OUT_RING(dev_priv->front_offset); |
821 | } else { | 818 | else |
822 | OUT_RING(dev_priv->back_offset); | 819 | OUT_RING(dev_priv->back_offset); |
823 | } | ||
824 | 820 | ||
825 | OUT_RING(color); | 821 | OUT_RING(color); |
826 | ADVANCE_LP_RING(); | 822 | ADVANCE_LP_RING(); |
827 | } | 823 | } |
828 | 824 | ||
829 | static void i830_cp_performance_boxes(struct drm_device * dev) | 825 | static void i830_cp_performance_boxes(struct drm_device *dev) |
830 | { | 826 | { |
831 | drm_i830_private_t *dev_priv = dev->dev_private; | 827 | drm_i830_private_t *dev_priv = dev->dev_private; |
832 | 828 | ||
@@ -871,7 +867,7 @@ static void i830_cp_performance_boxes(struct drm_device * dev) | |||
871 | dev_priv->sarea_priv->perf_boxes = 0; | 867 | dev_priv->sarea_priv->perf_boxes = 0; |
872 | } | 868 | } |
873 | 869 | ||
874 | static void i830_dma_dispatch_clear(struct drm_device * dev, int flags, | 870 | static void i830_dma_dispatch_clear(struct drm_device *dev, int flags, |
875 | unsigned int clear_color, | 871 | unsigned int clear_color, |
876 | unsigned int clear_zval, | 872 | unsigned int clear_zval, |
877 | unsigned int clear_depthmask) | 873 | unsigned int clear_depthmask) |
@@ -966,7 +962,7 @@ static void i830_dma_dispatch_clear(struct drm_device * dev, int flags, | |||
966 | } | 962 | } |
967 | } | 963 | } |
968 | 964 | ||
969 | static void i830_dma_dispatch_swap(struct drm_device * dev) | 965 | static void i830_dma_dispatch_swap(struct drm_device *dev) |
970 | { | 966 | { |
971 | drm_i830_private_t *dev_priv = dev->dev_private; | 967 | drm_i830_private_t *dev_priv = dev->dev_private; |
972 | drm_i830_sarea_t *sarea_priv = dev_priv->sarea_priv; | 968 | drm_i830_sarea_t *sarea_priv = dev_priv->sarea_priv; |
@@ -1036,7 +1032,7 @@ static void i830_dma_dispatch_swap(struct drm_device * dev) | |||
1036 | } | 1032 | } |
1037 | } | 1033 | } |
1038 | 1034 | ||
1039 | static void i830_dma_dispatch_flip(struct drm_device * dev) | 1035 | static void i830_dma_dispatch_flip(struct drm_device *dev) |
1040 | { | 1036 | { |
1041 | drm_i830_private_t *dev_priv = dev->dev_private; | 1037 | drm_i830_private_t *dev_priv = dev->dev_private; |
1042 | RING_LOCALS; | 1038 | RING_LOCALS; |
@@ -1079,8 +1075,8 @@ static void i830_dma_dispatch_flip(struct drm_device * dev) | |||
1079 | dev_priv->sarea_priv->pf_current_page = dev_priv->current_page; | 1075 | dev_priv->sarea_priv->pf_current_page = dev_priv->current_page; |
1080 | } | 1076 | } |
1081 | 1077 | ||
1082 | static void i830_dma_dispatch_vertex(struct drm_device * dev, | 1078 | static void i830_dma_dispatch_vertex(struct drm_device *dev, |
1083 | struct drm_buf * buf, int discard, int used) | 1079 | struct drm_buf *buf, int discard, int used) |
1084 | { | 1080 | { |
1085 | drm_i830_private_t *dev_priv = dev->dev_private; | 1081 | drm_i830_private_t *dev_priv = dev->dev_private; |
1086 | drm_i830_buf_priv_t *buf_priv = buf->dev_private; | 1082 | drm_i830_buf_priv_t *buf_priv = buf->dev_private; |
@@ -1100,9 +1096,8 @@ static void i830_dma_dispatch_vertex(struct drm_device * dev, | |||
1100 | if (discard) { | 1096 | if (discard) { |
1101 | u = cmpxchg(buf_priv->in_use, I830_BUF_CLIENT, | 1097 | u = cmpxchg(buf_priv->in_use, I830_BUF_CLIENT, |
1102 | I830_BUF_HARDWARE); | 1098 | I830_BUF_HARDWARE); |
1103 | if (u != I830_BUF_CLIENT) { | 1099 | if (u != I830_BUF_CLIENT) |
1104 | DRM_DEBUG("xxxx 2\n"); | 1100 | DRM_DEBUG("xxxx 2\n"); |
1105 | } | ||
1106 | } | 1101 | } |
1107 | 1102 | ||
1108 | if (used > 4 * 1023) | 1103 | if (used > 4 * 1023) |
@@ -1191,7 +1186,7 @@ static void i830_dma_dispatch_vertex(struct drm_device * dev, | |||
1191 | } | 1186 | } |
1192 | } | 1187 | } |
1193 | 1188 | ||
1194 | static void i830_dma_quiescent(struct drm_device * dev) | 1189 | static void i830_dma_quiescent(struct drm_device *dev) |
1195 | { | 1190 | { |
1196 | drm_i830_private_t *dev_priv = dev->dev_private; | 1191 | drm_i830_private_t *dev_priv = dev->dev_private; |
1197 | RING_LOCALS; | 1192 | RING_LOCALS; |
@@ -1208,7 +1203,7 @@ static void i830_dma_quiescent(struct drm_device * dev) | |||
1208 | i830_wait_ring(dev, dev_priv->ring.Size - 8, __func__); | 1203 | i830_wait_ring(dev, dev_priv->ring.Size - 8, __func__); |
1209 | } | 1204 | } |
1210 | 1205 | ||
1211 | static int i830_flush_queue(struct drm_device * dev) | 1206 | static int i830_flush_queue(struct drm_device *dev) |
1212 | { | 1207 | { |
1213 | drm_i830_private_t *dev_priv = dev->dev_private; | 1208 | drm_i830_private_t *dev_priv = dev->dev_private; |
1214 | struct drm_device_dma *dma = dev->dma; | 1209 | struct drm_device_dma *dma = dev->dma; |
@@ -1241,7 +1236,7 @@ static int i830_flush_queue(struct drm_device * dev) | |||
1241 | } | 1236 | } |
1242 | 1237 | ||
1243 | /* Must be called with the lock held */ | 1238 | /* Must be called with the lock held */ |
1244 | static void i830_reclaim_buffers(struct drm_device * dev, struct drm_file *file_priv) | 1239 | static void i830_reclaim_buffers(struct drm_device *dev, struct drm_file *file_priv) |
1245 | { | 1240 | { |
1246 | struct drm_device_dma *dma = dev->dma; | 1241 | struct drm_device_dma *dma = dev->dma; |
1247 | int i; | 1242 | int i; |
@@ -1316,9 +1311,8 @@ static int i830_clear_bufs(struct drm_device *dev, void *data, | |||
1316 | LOCK_TEST_WITH_RETURN(dev, file_priv); | 1311 | LOCK_TEST_WITH_RETURN(dev, file_priv); |
1317 | 1312 | ||
1318 | /* GH: Someone's doing nasty things... */ | 1313 | /* GH: Someone's doing nasty things... */ |
1319 | if (!dev->dev_private) { | 1314 | if (!dev->dev_private) |
1320 | return -EINVAL; | 1315 | return -EINVAL; |
1321 | } | ||
1322 | 1316 | ||
1323 | i830_dma_dispatch_clear(dev, clear->flags, | 1317 | i830_dma_dispatch_clear(dev, clear->flags, |
1324 | clear->clear_color, | 1318 | clear->clear_color, |
@@ -1339,7 +1333,7 @@ static int i830_swap_bufs(struct drm_device *dev, void *data, | |||
1339 | 1333 | ||
1340 | /* Not sure why this isn't set all the time: | 1334 | /* Not sure why this isn't set all the time: |
1341 | */ | 1335 | */ |
1342 | static void i830_do_init_pageflip(struct drm_device * dev) | 1336 | static void i830_do_init_pageflip(struct drm_device *dev) |
1343 | { | 1337 | { |
1344 | drm_i830_private_t *dev_priv = dev->dev_private; | 1338 | drm_i830_private_t *dev_priv = dev->dev_private; |
1345 | 1339 | ||
@@ -1349,7 +1343,7 @@ static void i830_do_init_pageflip(struct drm_device * dev) | |||
1349 | dev_priv->sarea_priv->pf_current_page = dev_priv->current_page; | 1343 | dev_priv->sarea_priv->pf_current_page = dev_priv->current_page; |
1350 | } | 1344 | } |
1351 | 1345 | ||
1352 | static int i830_do_cleanup_pageflip(struct drm_device * dev) | 1346 | static int i830_do_cleanup_pageflip(struct drm_device *dev) |
1353 | { | 1347 | { |
1354 | drm_i830_private_t *dev_priv = dev->dev_private; | 1348 | drm_i830_private_t *dev_priv = dev->dev_private; |
1355 | 1349 | ||
@@ -1490,27 +1484,26 @@ int i830_driver_load(struct drm_device *dev, unsigned long flags) | |||
1490 | return 0; | 1484 | return 0; |
1491 | } | 1485 | } |
1492 | 1486 | ||
1493 | void i830_driver_lastclose(struct drm_device * dev) | 1487 | void i830_driver_lastclose(struct drm_device *dev) |
1494 | { | 1488 | { |
1495 | i830_dma_cleanup(dev); | 1489 | i830_dma_cleanup(dev); |
1496 | } | 1490 | } |
1497 | 1491 | ||
1498 | void i830_driver_preclose(struct drm_device * dev, struct drm_file *file_priv) | 1492 | void i830_driver_preclose(struct drm_device *dev, struct drm_file *file_priv) |
1499 | { | 1493 | { |
1500 | if (dev->dev_private) { | 1494 | if (dev->dev_private) { |
1501 | drm_i830_private_t *dev_priv = dev->dev_private; | 1495 | drm_i830_private_t *dev_priv = dev->dev_private; |
1502 | if (dev_priv->page_flipping) { | 1496 | if (dev_priv->page_flipping) |
1503 | i830_do_cleanup_pageflip(dev); | 1497 | i830_do_cleanup_pageflip(dev); |
1504 | } | ||
1505 | } | 1498 | } |
1506 | } | 1499 | } |
1507 | 1500 | ||
1508 | void i830_driver_reclaim_buffers_locked(struct drm_device * dev, struct drm_file *file_priv) | 1501 | void i830_driver_reclaim_buffers_locked(struct drm_device *dev, struct drm_file *file_priv) |
1509 | { | 1502 | { |
1510 | i830_reclaim_buffers(dev, file_priv); | 1503 | i830_reclaim_buffers(dev, file_priv); |
1511 | } | 1504 | } |
1512 | 1505 | ||
1513 | int i830_driver_dma_quiescent(struct drm_device * dev) | 1506 | int i830_driver_dma_quiescent(struct drm_device *dev) |
1514 | { | 1507 | { |
1515 | i830_dma_quiescent(dev); | 1508 | i830_dma_quiescent(dev); |
1516 | return 0; | 1509 | return 0; |
@@ -1546,7 +1539,7 @@ int i830_max_ioctl = DRM_ARRAY_SIZE(i830_ioctls); | |||
1546 | * \returns | 1539 | * \returns |
1547 | * A value of 1 is always retured to indictate every i8xx is AGP. | 1540 | * A value of 1 is always retured to indictate every i8xx is AGP. |
1548 | */ | 1541 | */ |
1549 | int i830_driver_device_is_agp(struct drm_device * dev) | 1542 | int i830_driver_device_is_agp(struct drm_device *dev) |
1550 | { | 1543 | { |
1551 | return 1; | 1544 | return 1; |
1552 | } | 1545 | } |
diff --git a/drivers/gpu/drm/i830/i830_drv.h b/drivers/gpu/drm/i830/i830_drv.h index da82afe4ded5..ecfd25a35da3 100644 --- a/drivers/gpu/drm/i830/i830_drv.h +++ b/drivers/gpu/drm/i830/i830_drv.h | |||
@@ -132,33 +132,33 @@ extern int i830_irq_wait(struct drm_device *dev, void *data, | |||
132 | struct drm_file *file_priv); | 132 | struct drm_file *file_priv); |
133 | 133 | ||
134 | extern irqreturn_t i830_driver_irq_handler(DRM_IRQ_ARGS); | 134 | extern irqreturn_t i830_driver_irq_handler(DRM_IRQ_ARGS); |
135 | extern void i830_driver_irq_preinstall(struct drm_device * dev); | 135 | extern void i830_driver_irq_preinstall(struct drm_device *dev); |
136 | extern void i830_driver_irq_postinstall(struct drm_device * dev); | 136 | extern void i830_driver_irq_postinstall(struct drm_device *dev); |
137 | extern void i830_driver_irq_uninstall(struct drm_device * dev); | 137 | extern void i830_driver_irq_uninstall(struct drm_device *dev); |
138 | extern int i830_driver_load(struct drm_device *, unsigned long flags); | 138 | extern int i830_driver_load(struct drm_device *, unsigned long flags); |
139 | extern void i830_driver_preclose(struct drm_device * dev, | 139 | extern void i830_driver_preclose(struct drm_device *dev, |
140 | struct drm_file *file_priv); | 140 | struct drm_file *file_priv); |
141 | extern void i830_driver_lastclose(struct drm_device * dev); | 141 | extern void i830_driver_lastclose(struct drm_device *dev); |
142 | extern void i830_driver_reclaim_buffers_locked(struct drm_device * dev, | 142 | extern void i830_driver_reclaim_buffers_locked(struct drm_device *dev, |
143 | struct drm_file *file_priv); | 143 | struct drm_file *file_priv); |
144 | extern int i830_driver_dma_quiescent(struct drm_device * dev); | 144 | extern int i830_driver_dma_quiescent(struct drm_device *dev); |
145 | extern int i830_driver_device_is_agp(struct drm_device * dev); | 145 | extern int i830_driver_device_is_agp(struct drm_device *dev); |
146 | 146 | ||
147 | #define I830_READ(reg) DRM_READ32(dev_priv->mmio_map, reg) | 147 | #define I830_READ(reg) DRM_READ32(dev_priv->mmio_map, reg) |
148 | #define I830_WRITE(reg,val) DRM_WRITE32(dev_priv->mmio_map, reg, val) | 148 | #define I830_WRITE(reg, val) DRM_WRITE32(dev_priv->mmio_map, reg, val) |
149 | #define I830_READ16(reg) DRM_READ16(dev_priv->mmio_map, reg) | 149 | #define I830_READ16(reg) DRM_READ16(dev_priv->mmio_map, reg) |
150 | #define I830_WRITE16(reg,val) DRM_WRITE16(dev_priv->mmio_map, reg, val) | 150 | #define I830_WRITE16(reg, val) DRM_WRITE16(dev_priv->mmio_map, reg, val) |
151 | 151 | ||
152 | #define I830_VERBOSE 0 | 152 | #define I830_VERBOSE 0 |
153 | 153 | ||
154 | #define RING_LOCALS unsigned int outring, ringmask, outcount; \ | 154 | #define RING_LOCALS unsigned int outring, ringmask, outcount; \ |
155 | volatile char *virt; | 155 | volatile char *virt; |
156 | 156 | ||
157 | #define BEGIN_LP_RING(n) do { \ | 157 | #define BEGIN_LP_RING(n) do { \ |
158 | if (I830_VERBOSE) \ | 158 | if (I830_VERBOSE) \ |
159 | printk("BEGIN_LP_RING(%d)\n", (n)); \ | 159 | printk("BEGIN_LP_RING(%d)\n", (n)); \ |
160 | if (dev_priv->ring.space < n*4) \ | 160 | if (dev_priv->ring.space < n*4) \ |
161 | i830_wait_ring(dev, n*4, __func__); \ | 161 | i830_wait_ring(dev, n*4, __func__); \ |
162 | outcount = 0; \ | 162 | outcount = 0; \ |
163 | outring = dev_priv->ring.tail; \ | 163 | outring = dev_priv->ring.tail; \ |
164 | ringmask = dev_priv->ring.tail_mask; \ | 164 | ringmask = dev_priv->ring.tail_mask; \ |
@@ -166,21 +166,23 @@ extern int i830_driver_device_is_agp(struct drm_device * dev); | |||
166 | } while (0) | 166 | } while (0) |
167 | 167 | ||
168 | #define OUT_RING(n) do { \ | 168 | #define OUT_RING(n) do { \ |
169 | if (I830_VERBOSE) printk(" OUT_RING %x\n", (int)(n)); \ | 169 | if (I830_VERBOSE) \ |
170 | printk(" OUT_RING %x\n", (int)(n)); \ | ||
170 | *(volatile unsigned int *)(virt + outring) = n; \ | 171 | *(volatile unsigned int *)(virt + outring) = n; \ |
171 | outcount++; \ | 172 | outcount++; \ |
172 | outring += 4; \ | 173 | outring += 4; \ |
173 | outring &= ringmask; \ | 174 | outring &= ringmask; \ |
174 | } while (0) | 175 | } while (0) |
175 | 176 | ||
176 | #define ADVANCE_LP_RING() do { \ | 177 | #define ADVANCE_LP_RING() do { \ |
177 | if (I830_VERBOSE) printk("ADVANCE_LP_RING %x\n", outring); \ | 178 | if (I830_VERBOSE) \ |
178 | dev_priv->ring.tail = outring; \ | 179 | printk("ADVANCE_LP_RING %x\n", outring); \ |
179 | dev_priv->ring.space -= outcount * 4; \ | 180 | dev_priv->ring.tail = outring; \ |
180 | I830_WRITE(LP_RING + RING_TAIL, outring); \ | 181 | dev_priv->ring.space -= outcount * 4; \ |
181 | } while(0) | 182 | I830_WRITE(LP_RING + RING_TAIL, outring); \ |
183 | } while (0) | ||
182 | 184 | ||
183 | extern int i830_wait_ring(struct drm_device * dev, int n, const char *caller); | 185 | extern int i830_wait_ring(struct drm_device *dev, int n, const char *caller); |
184 | 186 | ||
185 | #define GFX_OP_USER_INTERRUPT ((0<<29)|(2<<23)) | 187 | #define GFX_OP_USER_INTERRUPT ((0<<29)|(2<<23)) |
186 | #define GFX_OP_BREAKPOINT_INTERRUPT ((0<<29)|(1<<23)) | 188 | #define GFX_OP_BREAKPOINT_INTERRUPT ((0<<29)|(1<<23)) |
diff --git a/drivers/gpu/drm/i830/i830_irq.c b/drivers/gpu/drm/i830/i830_irq.c index 91ec2bb497e9..d1a6b95d631d 100644 --- a/drivers/gpu/drm/i830/i830_irq.c +++ b/drivers/gpu/drm/i830/i830_irq.c | |||
@@ -53,7 +53,7 @@ irqreturn_t i830_driver_irq_handler(DRM_IRQ_ARGS) | |||
53 | return IRQ_HANDLED; | 53 | return IRQ_HANDLED; |
54 | } | 54 | } |
55 | 55 | ||
56 | static int i830_emit_irq(struct drm_device * dev) | 56 | static int i830_emit_irq(struct drm_device *dev) |
57 | { | 57 | { |
58 | drm_i830_private_t *dev_priv = dev->dev_private; | 58 | drm_i830_private_t *dev_priv = dev->dev_private; |
59 | RING_LOCALS; | 59 | RING_LOCALS; |
@@ -70,7 +70,7 @@ static int i830_emit_irq(struct drm_device * dev) | |||
70 | return atomic_read(&dev_priv->irq_emitted); | 70 | return atomic_read(&dev_priv->irq_emitted); |
71 | } | 71 | } |
72 | 72 | ||
73 | static int i830_wait_irq(struct drm_device * dev, int irq_nr) | 73 | static int i830_wait_irq(struct drm_device *dev, int irq_nr) |
74 | { | 74 | { |
75 | drm_i830_private_t *dev_priv = (drm_i830_private_t *) dev->dev_private; | 75 | drm_i830_private_t *dev_priv = (drm_i830_private_t *) dev->dev_private; |
76 | DECLARE_WAITQUEUE(entry, current); | 76 | DECLARE_WAITQUEUE(entry, current); |
@@ -156,7 +156,7 @@ int i830_irq_wait(struct drm_device *dev, void *data, | |||
156 | 156 | ||
157 | /* drm_dma.h hooks | 157 | /* drm_dma.h hooks |
158 | */ | 158 | */ |
159 | void i830_driver_irq_preinstall(struct drm_device * dev) | 159 | void i830_driver_irq_preinstall(struct drm_device *dev) |
160 | { | 160 | { |
161 | drm_i830_private_t *dev_priv = (drm_i830_private_t *) dev->dev_private; | 161 | drm_i830_private_t *dev_priv = (drm_i830_private_t *) dev->dev_private; |
162 | 162 | ||
@@ -168,14 +168,14 @@ void i830_driver_irq_preinstall(struct drm_device * dev) | |||
168 | init_waitqueue_head(&dev_priv->irq_queue); | 168 | init_waitqueue_head(&dev_priv->irq_queue); |
169 | } | 169 | } |
170 | 170 | ||
171 | void i830_driver_irq_postinstall(struct drm_device * dev) | 171 | void i830_driver_irq_postinstall(struct drm_device *dev) |
172 | { | 172 | { |
173 | drm_i830_private_t *dev_priv = (drm_i830_private_t *) dev->dev_private; | 173 | drm_i830_private_t *dev_priv = (drm_i830_private_t *) dev->dev_private; |
174 | 174 | ||
175 | I830_WRITE16(I830REG_INT_ENABLE_R, 0x2); | 175 | I830_WRITE16(I830REG_INT_ENABLE_R, 0x2); |
176 | } | 176 | } |
177 | 177 | ||
178 | void i830_driver_irq_uninstall(struct drm_device * dev) | 178 | void i830_driver_irq_uninstall(struct drm_device *dev) |
179 | { | 179 | { |
180 | drm_i830_private_t *dev_priv = (drm_i830_private_t *) dev->dev_private; | 180 | drm_i830_private_t *dev_priv = (drm_i830_private_t *) dev->dev_private; |
181 | if (!dev_priv) | 181 | if (!dev_priv) |