aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i830/i830_dma.c95
-rw-r--r--drivers/gpu/drm/i830/i830_drv.h48
-rw-r--r--drivers/gpu/drm/i830/i830_irq.c10
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
76static int i830_freelist_put(struct drm_device * dev, struct drm_buf * buf) 75static 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
126static int i830_map_buffer(struct drm_buf * buf, struct drm_file *file_priv) 125static 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
159static int i830_unmap_buffer(struct drm_buf * buf) 158static 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
179static int i830_dma_get_buffer(struct drm_device * dev, drm_i830_dma_t * d, 178static 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
209static int i830_dma_cleanup(struct drm_device * dev) 208static 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
249int i830_wait_ring(struct drm_device * dev, int n, const char *caller) 247int 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: 277out_wait_ring:
280 return iters; 278 return iters;
281} 279}
282 280
283static void i830_kernel_lost_context(struct drm_device * dev) 281static 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
298static int i830_freelist_init(struct drm_device * dev, drm_i830_private_t * dev_priv) 296static 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
332static int i830_dma_initialize(struct drm_device * dev, 330static 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 */
485static void i830EmitContextVerified(struct drm_device * dev, unsigned int *code) 483static 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
530static void i830EmitTexVerified(struct drm_device * dev, unsigned int *code) 528static 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
564static void i830EmitTexBlendVerified(struct drm_device * dev, 562static 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
589static void i830EmitTexPalette(struct drm_device * dev, 587static 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 */
616static void i830EmitDestVerified(struct drm_device * dev, unsigned int *code) 613static 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
677static void i830EmitStippleVerified(struct drm_device * dev, unsigned int *code) 674static 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
688static void i830EmitState(struct drm_device * dev) 685static 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
791static void i830_fill_box(struct drm_device * dev, 788static 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
829static void i830_cp_performance_boxes(struct drm_device * dev) 825static 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
874static void i830_dma_dispatch_clear(struct drm_device * dev, int flags, 870static 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
969static void i830_dma_dispatch_swap(struct drm_device * dev) 965static 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
1039static void i830_dma_dispatch_flip(struct drm_device * dev) 1035static 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
1082static void i830_dma_dispatch_vertex(struct drm_device * dev, 1078static 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
1194static void i830_dma_quiescent(struct drm_device * dev) 1189static 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
1211static int i830_flush_queue(struct drm_device * dev) 1206static 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 */
1244static void i830_reclaim_buffers(struct drm_device * dev, struct drm_file *file_priv) 1239static 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 */
1342static void i830_do_init_pageflip(struct drm_device * dev) 1336static 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
1352static int i830_do_cleanup_pageflip(struct drm_device * dev) 1346static 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
1493void i830_driver_lastclose(struct drm_device * dev) 1487void i830_driver_lastclose(struct drm_device *dev)
1494{ 1488{
1495 i830_dma_cleanup(dev); 1489 i830_dma_cleanup(dev);
1496} 1490}
1497 1491
1498void i830_driver_preclose(struct drm_device * dev, struct drm_file *file_priv) 1492void 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
1508void i830_driver_reclaim_buffers_locked(struct drm_device * dev, struct drm_file *file_priv) 1501void 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
1513int i830_driver_dma_quiescent(struct drm_device * dev) 1506int 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 */
1549int i830_driver_device_is_agp(struct drm_device * dev) 1542int 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
134extern irqreturn_t i830_driver_irq_handler(DRM_IRQ_ARGS); 134extern irqreturn_t i830_driver_irq_handler(DRM_IRQ_ARGS);
135extern void i830_driver_irq_preinstall(struct drm_device * dev); 135extern void i830_driver_irq_preinstall(struct drm_device *dev);
136extern void i830_driver_irq_postinstall(struct drm_device * dev); 136extern void i830_driver_irq_postinstall(struct drm_device *dev);
137extern void i830_driver_irq_uninstall(struct drm_device * dev); 137extern void i830_driver_irq_uninstall(struct drm_device *dev);
138extern int i830_driver_load(struct drm_device *, unsigned long flags); 138extern int i830_driver_load(struct drm_device *, unsigned long flags);
139extern void i830_driver_preclose(struct drm_device * dev, 139extern void i830_driver_preclose(struct drm_device *dev,
140 struct drm_file *file_priv); 140 struct drm_file *file_priv);
141extern void i830_driver_lastclose(struct drm_device * dev); 141extern void i830_driver_lastclose(struct drm_device *dev);
142extern void i830_driver_reclaim_buffers_locked(struct drm_device * dev, 142extern void i830_driver_reclaim_buffers_locked(struct drm_device *dev,
143 struct drm_file *file_priv); 143 struct drm_file *file_priv);
144extern int i830_driver_dma_quiescent(struct drm_device * dev); 144extern int i830_driver_dma_quiescent(struct drm_device *dev);
145extern int i830_driver_device_is_agp(struct drm_device * dev); 145extern 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
183extern int i830_wait_ring(struct drm_device * dev, int n, const char *caller); 185extern 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
56static int i830_emit_irq(struct drm_device * dev) 56static 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
73static int i830_wait_irq(struct drm_device * dev, int irq_nr) 73static 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*/
159void i830_driver_irq_preinstall(struct drm_device * dev) 159void 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
171void i830_driver_irq_postinstall(struct drm_device * dev) 171void 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
178void i830_driver_irq_uninstall(struct drm_device * dev) 178void 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)