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) |
