Subversion Repositories Kolibri OS

Rev

Rev 4560 | Rev 5128 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4560 Rev 5060
Line 61... Line 61...
61
 *
61
 *
62
 * In that case, we don't need to do it when GEM is initialized as nobody else
62
 * In that case, we don't need to do it when GEM is initialized as nobody else
63
 * has access to the ring.
63
 * has access to the ring.
64
 */
64
 */
65
#define RING_LOCK_TEST_WITH_RETURN(dev, file) do {			\
65
#define RING_LOCK_TEST_WITH_RETURN(dev, file) do {			\
66
	if (LP_RING(dev->dev_private)->obj == NULL)			\
66
	if (LP_RING(dev->dev_private)->buffer->obj == NULL)			\
67
		LOCK_TEST_WITH_RETURN(dev, file);			\
67
		LOCK_TEST_WITH_RETURN(dev, file);			\
68
} while (0)
68
} while (0)
Line 69... Line 69...
69
 
69
 
70
static inline u32
70
static inline u32
Line 80... Line 80...
80
#define READ_BREADCRUMB(dev_priv) READ_HWSP(dev_priv, I915_BREADCRUMB_INDEX)
80
#define READ_BREADCRUMB(dev_priv) READ_HWSP(dev_priv, I915_BREADCRUMB_INDEX)
81
#define I915_BREADCRUMB_INDEX		0x21
81
#define I915_BREADCRUMB_INDEX		0x21
Line 82... Line 82...
82
 
82
 
83
void i915_update_dri1_breadcrumb(struct drm_device *dev)
83
void i915_update_dri1_breadcrumb(struct drm_device *dev)
84
{
84
{
85
	drm_i915_private_t *dev_priv = dev->dev_private;
85
	struct drm_i915_private *dev_priv = dev->dev_private;
Line 86... Line 86...
86
	struct drm_i915_master_private *master_priv;
86
	struct drm_i915_master_private *master_priv;
87
 
87
 
88
	/*
88
	/*
Line 101... Line 101...
101
	}
101
	}
102
}
102
}
Line 103... Line 103...
103
 
103
 
104
static void i915_write_hws_pga(struct drm_device *dev)
104
static void i915_write_hws_pga(struct drm_device *dev)
105
{
105
{
106
	drm_i915_private_t *dev_priv = dev->dev_private;
106
	struct drm_i915_private *dev_priv = dev->dev_private;
Line 107... Line 107...
107
	u32 addr;
107
	u32 addr;
108
 
108
 
109
	addr = dev_priv->status_page_dmah->busaddr;
109
	addr = dev_priv->status_page_dmah->busaddr;
Line 116... Line 116...
116
 * Frees the hardware status page, whether it's a physical address or a virtual
116
 * Frees the hardware status page, whether it's a physical address or a virtual
117
 * address set up by the X Server.
117
 * address set up by the X Server.
118
 */
118
 */
119
static void i915_free_hws(struct drm_device *dev)
119
static void i915_free_hws(struct drm_device *dev)
120
{
120
{
121
	drm_i915_private_t *dev_priv = dev->dev_private;
121
	struct drm_i915_private *dev_priv = dev->dev_private;
122
	struct intel_ring_buffer *ring = LP_RING(dev_priv);
122
	struct intel_engine_cs *ring = LP_RING(dev_priv);
Line 123... Line 123...
123
 
123
 
124
	if (dev_priv->status_page_dmah) {
124
	if (dev_priv->status_page_dmah) {
125
		drm_pci_free(dev, dev_priv->status_page_dmah);
125
		drm_pci_free(dev, dev_priv->status_page_dmah);
126
		dev_priv->status_page_dmah = NULL;
126
		dev_priv->status_page_dmah = NULL;
Line 137... Line 137...
137
 
137
 
Line 138... Line 138...
138
#if 0
138
#if 0
139
 
139
 
140
void i915_kernel_lost_context(struct drm_device * dev)
140
void i915_kernel_lost_context(struct drm_device * dev)
141
{
141
{
142
	drm_i915_private_t *dev_priv = dev->dev_private;
142
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
143
	struct drm_i915_master_private *master_priv;
Line 143... Line 144...
143
	struct drm_i915_master_private *master_priv;
144
	struct intel_engine_cs *ring = LP_RING(dev_priv);
144
	struct intel_ring_buffer *ring = LP_RING(dev_priv);
145
	struct intel_ringbuffer *ringbuf = ring->buffer;
145
 
146
 
146
	/*
147
	/*
147
	 * We should never lose context on the ring with modesetting
148
	 * We should never lose context on the ring with modesetting
148
	 * as we don't expose it to userspace
149
	 * as we don't expose it to userspace
Line 149... Line 150...
149
	 */
150
	 */
150
	if (drm_core_check_feature(dev, DRIVER_MODESET))
151
	if (drm_core_check_feature(dev, DRIVER_MODESET))
151
		return;
152
		return;
152
 
153
 
153
	ring->head = I915_READ_HEAD(ring) & HEAD_ADDR;
154
	ringbuf->head = I915_READ_HEAD(ring) & HEAD_ADDR;
Line 154... Line 155...
154
	ring->tail = I915_READ_TAIL(ring) & TAIL_ADDR;
155
	ringbuf->tail = I915_READ_TAIL(ring) & TAIL_ADDR;
155
	ring->space = ring->head - (ring->tail + I915_RING_FREE_SPACE);
156
	ringbuf->space = ringbuf->head - (ringbuf->tail + I915_RING_FREE_SPACE);
Line 156... Line 157...
156
	if (ring->space < 0)
157
	if (ringbuf->space < 0)
157
		ring->space += ring->size;
158
		ringbuf->space += ringbuf->size;
158
 
159
 
159
	if (!dev->primary->master)
160
	if (!dev->primary->master)
Line 160... Line 161...
160
		return;
161
		return;
161
 
162
 
162
	master_priv = dev->primary->master->driver_priv;
163
	master_priv = dev->primary->master->driver_priv;
163
	if (ring->head == ring->tail && master_priv->sarea_priv)
164
	if (ringbuf->head == ringbuf->tail && master_priv->sarea_priv)
Line 164... Line 165...
164
		master_priv->sarea_priv->perf_boxes |= I915_BOX_RING_EMPTY;
165
		master_priv->sarea_priv->perf_boxes |= I915_BOX_RING_EMPTY;
165
}
166
}
166
 
167
 
Line 188... Line 189...
188
	return 0;
189
	return 0;
189
}
190
}
Line 190... Line 191...
190
 
191
 
191
static int i915_initialize(struct drm_device * dev, drm_i915_init_t * init)
192
static int i915_initialize(struct drm_device *dev, drm_i915_init_t *init)
192
{
193
{
193
	drm_i915_private_t *dev_priv = dev->dev_private;
194
	struct drm_i915_private *dev_priv = dev->dev_private;
194
	struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
195
	struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
Line 195... Line 196...
195
	int ret;
196
	int ret;
196
 
197
 
Line 201... Line 202...
201
	} else {
202
	} else {
202
		DRM_DEBUG_DRIVER("sarea not found assuming DRI2 userspace\n");
203
		DRM_DEBUG_DRIVER("sarea not found assuming DRI2 userspace\n");
203
	}
204
	}
Line 204... Line 205...
204
 
205
 
205
	if (init->ring_size != 0) {
206
	if (init->ring_size != 0) {
206
		if (LP_RING(dev_priv)->obj != NULL) {
207
		if (LP_RING(dev_priv)->buffer->obj != NULL) {
207
			i915_dma_cleanup(dev);
208
			i915_dma_cleanup(dev);
208
			DRM_ERROR("Client tried to initialize ringbuffer in "
209
			DRM_ERROR("Client tried to initialize ringbuffer in "
209
				  "GEM mode\n");
210
				  "GEM mode\n");
210
			return -EINVAL;
211
			return -EINVAL;
Line 233... Line 234...
233
	return 0;
234
	return 0;
234
}
235
}
Line 235... Line 236...
235
 
236
 
236
static int i915_dma_resume(struct drm_device * dev)
237
static int i915_dma_resume(struct drm_device *dev)
237
{
238
{
238
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
239
	struct drm_i915_private *dev_priv = dev->dev_private;
Line 239... Line 240...
239
	struct intel_ring_buffer *ring = LP_RING(dev_priv);
240
	struct intel_engine_cs *ring = LP_RING(dev_priv);
Line 240... Line 241...
240
 
241
 
241
	DRM_DEBUG_DRIVER("%s\n", __func__);
242
	DRM_DEBUG_DRIVER("%s\n", __func__);
242
 
243
 
243
	if (ring->virtual_start == NULL) {
244
	if (ring->buffer->virtual_start == NULL) {
244
		DRM_ERROR("can not ioremap virtual address for"
245
		DRM_ERROR("can not ioremap virtual address for"
Line 357... Line 358...
357
	return 0;
358
	return 0;
358
}
359
}
Line 359... Line 360...
359
 
360
 
360
static int i915_emit_cmds(struct drm_device * dev, int *buffer, int dwords)
361
static int i915_emit_cmds(struct drm_device *dev, int *buffer, int dwords)
361
{
362
{
362
	drm_i915_private_t *dev_priv = dev->dev_private;
363
	struct drm_i915_private *dev_priv = dev->dev_private;
Line 363... Line 364...
363
	int i, ret;
364
	int i, ret;
364
 
365
 
Line 365... Line 366...
365
	if ((dwords+1) * sizeof(int) >= LP_RING(dev_priv)->size - 8)
366
	if ((dwords+1) * sizeof(int) >= LP_RING(dev_priv)->buffer->size - 8)
366
		return -EINVAL;
367
		return -EINVAL;
-
 
368
 
367
 
369
	for (i = 0; i < dwords;) {
368
	for (i = 0; i < dwords;) {
370
		int sz = validate_cmd(buffer[i]);
369
		int sz = validate_cmd(buffer[i]);
371
 
370
		if (sz == 0 || i + sz > dwords)
372
		if (sz == 0 || i + sz > dwords)
Line 433... Line 435...
433
 * emit. For now, do it in both places:
435
 * emit. For now, do it in both places:
434
 */
436
 */
Line 435... Line 437...
435
 
437
 
436
static void i915_emit_breadcrumb(struct drm_device *dev)
438
static void i915_emit_breadcrumb(struct drm_device *dev)
437
{
439
{
438
	drm_i915_private_t *dev_priv = dev->dev_private;
440
	struct drm_i915_private *dev_priv = dev->dev_private;
Line 439... Line 441...
439
	struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
441
	struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
440
 
442
 
441
	dev_priv->dri1.counter++;
443
	dev_priv->dri1.counter++;
Line 549... Line 551...
549
	return 0;
551
	return 0;
550
}
552
}
Line 551... Line 553...
551
 
553
 
552
static int i915_dispatch_flip(struct drm_device * dev)
554
static int i915_dispatch_flip(struct drm_device *dev)
553
{
555
{
554
	drm_i915_private_t *dev_priv = dev->dev_private;
556
	struct drm_i915_private *dev_priv = dev->dev_private;
555
	struct drm_i915_master_private *master_priv =
557
	struct drm_i915_master_private *master_priv =
556
		dev->primary->master->driver_priv;
558
		dev->primary->master->driver_priv;
Line 557... Line 559...
557
	int ret;
559
	int ret;
Line 627... Line 629...
627
}
629
}
Line 628... Line 630...
628
 
630
 
629
static int i915_batchbuffer(struct drm_device *dev, void *data,
631
static int i915_batchbuffer(struct drm_device *dev, void *data,
630
			    struct drm_file *file_priv)
632
			    struct drm_file *file_priv)
631
{
633
{
632
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
634
	struct drm_i915_private *dev_priv = dev->dev_private;
633
	struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
635
	struct drm_i915_master_private *master_priv;
634
	drm_i915_sarea_t *sarea_priv = (drm_i915_sarea_t *)
-
 
635
	    master_priv->sarea_priv;
636
	drm_i915_sarea_t *sarea_priv;
636
	drm_i915_batchbuffer_t *batch = data;
637
	drm_i915_batchbuffer_t *batch = data;
637
	int ret;
638
	int ret;
Line 638... Line 639...
638
	struct drm_clip_rect *cliprects = NULL;
639
	struct drm_clip_rect *cliprects = NULL;
639
 
640
 
Line -... Line 641...
-
 
641
	if (drm_core_check_feature(dev, DRIVER_MODESET))
-
 
642
		return -ENODEV;
-
 
643
 
640
	if (drm_core_check_feature(dev, DRIVER_MODESET))
644
	master_priv = dev->primary->master->driver_priv;
641
		return -ENODEV;
645
	sarea_priv = (drm_i915_sarea_t *) master_priv->sarea_priv;
642
 
646
 
643
	if (!dev_priv->dri1.allow_batchbuffer) {
647
	if (!dev_priv->dri1.allow_batchbuffer) {
Line 683... Line 687...
683
}
687
}
Line 684... Line 688...
684
 
688
 
685
static int i915_cmdbuffer(struct drm_device *dev, void *data,
689
static int i915_cmdbuffer(struct drm_device *dev, void *data,
686
			  struct drm_file *file_priv)
690
			  struct drm_file *file_priv)
687
{
691
{
688
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
692
	struct drm_i915_private *dev_priv = dev->dev_private;
689
	struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
693
	struct drm_i915_master_private *master_priv;
690
	drm_i915_sarea_t *sarea_priv = (drm_i915_sarea_t *)
-
 
691
	    master_priv->sarea_priv;
694
	drm_i915_sarea_t *sarea_priv;
692
	drm_i915_cmdbuffer_t *cmdbuf = data;
695
	drm_i915_cmdbuffer_t *cmdbuf = data;
693
	struct drm_clip_rect *cliprects = NULL;
696
	struct drm_clip_rect *cliprects = NULL;
694
	void *batch_data;
697
	void *batch_data;
Line 698... Line 701...
698
			cmdbuf->buf, cmdbuf->sz, cmdbuf->num_cliprects);
701
			cmdbuf->buf, cmdbuf->sz, cmdbuf->num_cliprects);
Line 699... Line 702...
699
 
702
 
700
	if (drm_core_check_feature(dev, DRIVER_MODESET))
703
	if (drm_core_check_feature(dev, DRIVER_MODESET))
Line -... Line 704...
-
 
704
		return -ENODEV;
-
 
705
 
-
 
706
	master_priv = dev->primary->master->driver_priv;
701
		return -ENODEV;
707
	sarea_priv = (drm_i915_sarea_t *) master_priv->sarea_priv;
Line 702... Line 708...
702
 
708
 
703
	RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
709
	RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
Line 751... Line 757...
751
	return ret;
757
	return ret;
752
}
758
}
Line 753... Line 759...
753
 
759
 
754
static int i915_emit_irq(struct drm_device * dev)
760
static int i915_emit_irq(struct drm_device *dev)
755
{
761
{
756
	drm_i915_private_t *dev_priv = dev->dev_private;
762
	struct drm_i915_private *dev_priv = dev->dev_private;
Line 757... Line 763...
757
	struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
763
	struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
Line 758... Line 764...
758
 
764
 
Line 777... Line 783...
777
	return dev_priv->dri1.counter;
783
	return dev_priv->dri1.counter;
778
}
784
}
Line 779... Line 785...
779
 
785
 
780
static int i915_wait_irq(struct drm_device * dev, int irq_nr)
786
static int i915_wait_irq(struct drm_device *dev, int irq_nr)
781
{
787
{
782
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
788
	struct drm_i915_private *dev_priv = dev->dev_private;
783
	struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
789
	struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
784
	int ret = 0;
790
	int ret = 0;
Line 785... Line 791...
785
	struct intel_ring_buffer *ring = LP_RING(dev_priv);
791
	struct intel_engine_cs *ring = LP_RING(dev_priv);
786
 
792
 
Line 787... Line 793...
787
	DRM_DEBUG_DRIVER("irq_nr=%d breadcrumb=%d\n", irq_nr,
793
	DRM_DEBUG_DRIVER("irq_nr=%d breadcrumb=%d\n", irq_nr,
Line 814... Line 820...
814
/* Needs the lock as it touches the ring.
820
/* Needs the lock as it touches the ring.
815
 */
821
 */
816
static int i915_irq_emit(struct drm_device *dev, void *data,
822
static int i915_irq_emit(struct drm_device *dev, void *data,
817
			 struct drm_file *file_priv)
823
			 struct drm_file *file_priv)
818
{
824
{
819
	drm_i915_private_t *dev_priv = dev->dev_private;
825
	struct drm_i915_private *dev_priv = dev->dev_private;
820
	drm_i915_irq_emit_t *emit = data;
826
	drm_i915_irq_emit_t *emit = data;
821
	int result;
827
	int result;
Line 822... Line 828...
822
 
828
 
823
	if (drm_core_check_feature(dev, DRIVER_MODESET))
829
	if (drm_core_check_feature(dev, DRIVER_MODESET))
Line 824... Line 830...
824
		return -ENODEV;
830
		return -ENODEV;
825
 
831
 
826
	if (!dev_priv || !LP_RING(dev_priv)->virtual_start) {
832
	if (!dev_priv || !LP_RING(dev_priv)->buffer->virtual_start) {
827
		DRM_ERROR("called with no initialization\n");
833
		DRM_ERROR("called with no initialization\n");
Line 828... Line 834...
828
		return -EINVAL;
834
		return -EINVAL;
Line 845... Line 851...
845
/* Doesn't need the hardware lock.
851
/* Doesn't need the hardware lock.
846
 */
852
 */
847
static int i915_irq_wait(struct drm_device *dev, void *data,
853
static int i915_irq_wait(struct drm_device *dev, void *data,
848
			 struct drm_file *file_priv)
854
			 struct drm_file *file_priv)
849
{
855
{
850
	drm_i915_private_t *dev_priv = dev->dev_private;
856
	struct drm_i915_private *dev_priv = dev->dev_private;
851
	drm_i915_irq_wait_t *irqwait = data;
857
	drm_i915_irq_wait_t *irqwait = data;
Line 852... Line 858...
852
 
858
 
853
	if (drm_core_check_feature(dev, DRIVER_MODESET))
859
	if (drm_core_check_feature(dev, DRIVER_MODESET))
Line 862... Line 868...
862
}
868
}
Line 863... Line 869...
863
 
869
 
864
static int i915_vblank_pipe_get(struct drm_device *dev, void *data,
870
static int i915_vblank_pipe_get(struct drm_device *dev, void *data,
865
			 struct drm_file *file_priv)
871
			 struct drm_file *file_priv)
866
{
872
{
867
	drm_i915_private_t *dev_priv = dev->dev_private;
873
	struct drm_i915_private *dev_priv = dev->dev_private;
Line 868... Line 874...
868
	drm_i915_vblank_pipe_t *pipe = data;
874
	drm_i915_vblank_pipe_t *pipe = data;
869
 
875
 
Line 924... Line 930...
924
#endif
930
#endif
Line 925... Line 931...
925
 
931
 
926
int i915_getparam(struct drm_device *dev, void *data,
932
int i915_getparam(struct drm_device *dev, void *data,
927
			 struct drm_file *file_priv)
933
			 struct drm_file *file_priv)
928
{
934
{
929
	drm_i915_private_t *dev_priv = dev->dev_private;
935
	struct drm_i915_private *dev_priv = dev->dev_private;
930
	drm_i915_getparam_t *param = data;
936
	drm_i915_getparam_t *param = data;
Line 931... Line 937...
931
	int value;
937
	int value;
932
 
938
 
Line 944... Line 950...
944
		break;
950
		break;
945
	case I915_PARAM_LAST_DISPATCH:
951
	case I915_PARAM_LAST_DISPATCH:
946
		value = READ_BREADCRUMB(dev_priv);
952
		value = READ_BREADCRUMB(dev_priv);
947
		break;
953
		break;
948
	case I915_PARAM_CHIPSET_ID:
954
	case I915_PARAM_CHIPSET_ID:
949
		value = dev->pci_device;
955
		value = dev->pdev->device;
950
		break;
956
		break;
951
	case I915_PARAM_HAS_GEM:
957
	case I915_PARAM_HAS_GEM:
952
		value = 1;
958
		value = 1;
953
		break;
959
		break;
954
	case I915_PARAM_NUM_FENCES_AVAIL:
960
	case I915_PARAM_NUM_FENCES_AVAIL:
Line 993... Line 999...
993
		break;
999
		break;
994
	case I915_PARAM_HAS_WT:
1000
	case I915_PARAM_HAS_WT:
995
		value = HAS_WT(dev);
1001
		value = HAS_WT(dev);
996
		break;
1002
		break;
997
	case I915_PARAM_HAS_ALIASING_PPGTT:
1003
	case I915_PARAM_HAS_ALIASING_PPGTT:
998
		value = dev_priv->mm.aliasing_ppgtt ? 1 : 0;
1004
		value = dev_priv->mm.aliasing_ppgtt || USES_FULL_PPGTT(dev);
999
		break;
1005
		break;
1000
	case I915_PARAM_HAS_WAIT_TIMEOUT:
1006
	case I915_PARAM_HAS_WAIT_TIMEOUT:
1001
		value = 1;
1007
		value = 1;
1002
		break;
1008
		break;
1003
	case I915_PARAM_HAS_SEMAPHORES:
1009
	case I915_PARAM_HAS_SEMAPHORES:
Line 1016... Line 1022...
1016
		value = 1;
1022
		value = 1;
1017
        break;
1023
        break;
1018
	case I915_PARAM_HAS_EXEC_HANDLE_LUT:
1024
	case I915_PARAM_HAS_EXEC_HANDLE_LUT:
1019
		value = 1;
1025
		value = 1;
1020
        break;
1026
        break;
-
 
1027
	case I915_PARAM_CMD_PARSER_VERSION:
-
 
1028
		value = i915_cmd_parser_get_version();
-
 
1029
		break;
1021
	default:
1030
	default:
1022
		DRM_DEBUG("Unknown parameter %d\n", param->param);
1031
		DRM_DEBUG("Unknown parameter %d\n", param->param);
1023
		return -EINVAL;
1032
		return -EINVAL;
1024
	}
1033
	}
Line 1030... Line 1039...
1030
 
1039
 
1031
#if 0
1040
#if 0
1032
static int i915_setparam(struct drm_device *dev, void *data,
1041
static int i915_setparam(struct drm_device *dev, void *data,
1033
			 struct drm_file *file_priv)
1042
			 struct drm_file *file_priv)
1034
{
1043
{
1035
	drm_i915_private_t *dev_priv = dev->dev_private;
1044
	struct drm_i915_private *dev_priv = dev->dev_private;
Line 1036... Line 1045...
1036
	drm_i915_setparam_t *param = data;
1045
	drm_i915_setparam_t *param = data;
1037
 
1046
 
1038
	if (!dev_priv) {
1047
	if (!dev_priv) {
Line 1091... Line 1100...
1091
 
1100
 
1092
/* Setup MCHBAR if possible, return true if we should disable it again */
1101
/* Setup MCHBAR if possible, return true if we should disable it again */
1093
static void
1102
static void
1094
intel_setup_mchbar(struct drm_device *dev)
1103
intel_setup_mchbar(struct drm_device *dev)
1095
{
1104
{
1096
	drm_i915_private_t *dev_priv = dev->dev_private;
1105
	struct drm_i915_private *dev_priv = dev->dev_private;
1097
	int mchbar_reg = INTEL_INFO(dev)->gen >= 4 ? MCHBAR_I965 : MCHBAR_I915;
1106
	int mchbar_reg = INTEL_INFO(dev)->gen >= 4 ? MCHBAR_I965 : MCHBAR_I915;
1098
	u32 temp;
1107
	u32 temp;
Line -... Line 1108...
-
 
1108
	bool enabled;
-
 
1109
 
-
 
1110
	if (IS_VALLEYVIEW(dev))
1099
	bool enabled;
1111
		return;
Line 1100... Line 1112...
1100
 
1112
 
1101
	dev_priv->mchbar_need_disable = false;
1113
	dev_priv->mchbar_need_disable = false;
1102
 
1114
 
Line 1157... Line 1169...
1157
 
1169
 
1158
    ret = intel_parse_bios(dev);
1170
    ret = intel_parse_bios(dev);
1159
    if (ret)
1171
    if (ret)
Line 1160... Line -...
1160
        DRM_INFO("failed to find VBIOS tables\n");
-
 
-
 
1172
        DRM_INFO("failed to find VBIOS tables\n");
Line 1161... Line 1173...
1161
 
1173
 
1162
    main_fb_obj = kos_gem_fb_object_create(dev,0,16*1024*1024);
1174
 
1163
 
1175
 
1164
	/* Initialise stolen first so that we may reserve preallocated
1176
	/* Initialise stolen first so that we may reserve preallocated
1165
	 * objects for the BIOS to KMS transition.
1177
	 * objects for the BIOS to KMS transition.
1166
	 */
1178
	 */
Line -... Line 1179...
-
 
1179
	ret = i915_gem_init_stolen(dev);
-
 
1180
	if (ret)
1167
	ret = i915_gem_init_stolen(dev);
1181
		goto cleanup_vga_switcheroo;
1168
	if (ret)
1182
 
1169
		goto cleanup_vga_switcheroo;
1183
	intel_power_domains_init_hw(dev_priv);
Line 1170... Line 1184...
1170
 
1184
 
Line 1171... Line 1185...
1171
	ret = drm_irq_install(dev);
1185
	ret = drm_irq_install(dev, dev->pdev->irq);
1172
	if (ret)
1186
	if (ret)
1173
		goto cleanup_gem_stolen;
1187
		goto cleanup_gem_stolen;
Line 1174... Line 1188...
1174
 
1188
 
1175
	intel_power_domains_init_hw(dev);
1189
	dev_priv->pm._irqs_disabled = false;
1176
 
1190
 
Line 1177... Line 1191...
1177
	/* Important: The output setup functions called by modeset_init need
1191
	/* Important: The output setup functions called by modeset_init need
Line 1178... Line 1192...
1178
	 * working irqs for e.g. gmbus and dp aux transfers. */
1192
	 * working irqs for e.g. gmbus and dp aux transfers. */
1179
    intel_modeset_init(dev);
1193
    intel_modeset_init(dev);
1180
 
1194
 
1181
	ret = i915_gem_init(dev);
1195
	ret = i915_gem_init(dev);
1182
    if (ret)
-
 
1183
		goto cleanup_power;
1196
    if (ret)
1184
 
-
 
Line 1185... Line 1197...
1185
 
1197
		goto cleanup_irq;
1186
    intel_modeset_gem_init(dev);
1198
 
1187
 
1199
 
Line 1210... Line 1222...
1210
	 * scanning against hotplug events. Hence do this first and ignore the
1222
	 * scanning against hotplug events. Hence do this first and ignore the
1211
	 * tiny window where we will loose hotplug notifactions.
1223
	 * tiny window where we will loose hotplug notifactions.
1212
	 */
1224
	 */
1213
	intel_fbdev_initial_config(dev);
1225
	intel_fbdev_initial_config(dev);
Line 1214... Line -...
1214
 
-
 
1215
	/* Only enable hotplug handling once the fbdev is fully set up. */
-
 
1216
	dev_priv->enable_hotplug_processing = true;
-
 
1217
 
1226
 
Line 1218... Line 1227...
1218
	drm_kms_helper_poll_init(dev);
1227
	drm_kms_helper_poll_init(dev);
Line 1219... Line 1228...
1219
 
1228
 
1220
    return 0;
1229
    return 0;
1221
 
1230
 
1222
cleanup_gem:
1231
cleanup_gem:
1223
	mutex_lock(&dev->struct_mutex);
1232
	mutex_lock(&dev->struct_mutex);
1224
	i915_gem_cleanup_ringbuffer(dev);
1233
	i915_gem_cleanup_ringbuffer(dev);
1225
	i915_gem_context_fini(dev);
-
 
1226
	mutex_unlock(&dev->struct_mutex);
1234
	i915_gem_context_fini(dev);
1227
	i915_gem_cleanup_aliasing_ppgtt(dev);
-
 
1228
	drm_mm_takedown(&dev_priv->gtt.base.mm);
1235
	mutex_unlock(&dev->struct_mutex);
1229
cleanup_power:
1236
	WARN_ON(dev_priv->mm.aliasing_ppgtt);
1230
	intel_display_power_put(dev, POWER_DOMAIN_VGA);
1237
cleanup_irq:
1231
//	drm_irq_uninstall(dev);
1238
//	drm_irq_uninstall(dev);
1232
cleanup_gem_stolen:
1239
cleanup_gem_stolen:
Line 1240... Line 1247...
1240
}
1247
}
Line 1241... Line 1248...
1241
 
1248
 
1242
 
1249
 
1243
 
1250
 
1244
#if IS_ENABLED(CONFIG_FB)
1251
#if IS_ENABLED(CONFIG_FB)
1245
static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv)
1252
static int i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv)
1246
{
1253
{
-
 
1254
	struct apertures_struct *ap;
Line 1247... Line 1255...
1247
	struct apertures_struct *ap;
1255
	struct pci_dev *pdev = dev_priv->dev->pdev;
1248
	struct pci_dev *pdev = dev_priv->dev->pdev;
1256
	bool primary;
1249
	bool primary;
1257
	int ret;
Line 1250... Line 1258...
1250
 
1258
 
1251
	ap = alloc_apertures(1);
1259
	ap = alloc_apertures(1);
Line 1252... Line 1260...
1252
	if (!ap)
1260
	if (!ap)
1253
		return;
1261
		return -ENOMEM;
Line 1254... Line 1262...
1254
 
1262
 
Line 1255... Line 1263...
1255
	ap->ranges[0].base = dev_priv->gtt.mappable_base;
1263
	ap->ranges[0].base = dev_priv->gtt.mappable_base;
-
 
1264
	ap->ranges[0].size = dev_priv->gtt.mappable_end;
-
 
1265
 
1256
	ap->ranges[0].size = dev_priv->gtt.mappable_end;
1266
	primary =
1257
 
1267
		pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;
1258
	primary =
1268
 
1259
		pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;
1269
	ret = remove_conflicting_framebuffers(ap, "inteldrmfb", primary);
-
 
1270
 
1260
 
1271
	kfree(ap);
1261
	remove_conflicting_framebuffers(ap, "inteldrmfb", primary);
1272
 
Line 1262... Line 1273...
1262
 
1273
	return ret;
1263
	kfree(ap);
1274
}
1264
}
1275
#else
Line 1265... Line 1276...
1265
#else
1276
static int i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv)
1266
static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv)
1277
{
1267
{
1278
	return 0;
1268
}
1279
}
1269
#endif
1280
#endif
1270
 
1281
 
1271
static void i915_dump_device_info(struct drm_i915_private *dev_priv)
1282
static void i915_dump_device_info(struct drm_i915_private *dev_priv)
1272
{
1283
{
-
 
1284
	const struct intel_device_info *info = &dev_priv->info;
1273
	const struct intel_device_info *info = dev_priv->info;
1285
 
1274
 
1286
#define PRINT_S(name) "%s"
1275
#define PRINT_S(name) "%s"
1287
#define SEP_EMPTY
1276
#define SEP_EMPTY
1288
#define PRINT_FLAG(name) info->name ? #name "," : ""
1277
#define PRINT_FLAG(name) info->name ? #name "," : ""
1289
#define SEP_COMMA ,
1278
#define SEP_COMMA ,
1290
	DRM_DEBUG_DRIVER("i915 device info: gen=%i, pciid=0x%04x rev=0x%02x flags="
Line -... Line 1291...
-
 
1291
			 DEV_INFO_FOR_EACH_FLAG(PRINT_S, SEP_EMPTY),
-
 
1292
			 info->gen,
-
 
1293
			 dev_priv->dev->pdev->device,
-
 
1294
			 dev_priv->dev->pdev->revision,
-
 
1295
			 DEV_INFO_FOR_EACH_FLAG(PRINT_FLAG, SEP_COMMA));
-
 
1296
#undef PRINT_S
-
 
1297
#undef SEP_EMPTY
-
 
1298
#undef PRINT_FLAG
-
 
1299
#undef SEP_COMMA
-
 
1300
}
-
 
1301
 
-
 
1302
/*
-
 
1303
 * Determine various intel_device_info fields at runtime.
-
 
1304
 *
-
 
1305
 * Use it when either:
-
 
1306
 *   - it's judged too laborious to fill n static structures with the limit
-
 
1307
 *     when a simple if statement does the job,
-
 
1308
 *   - run-time checks (eg read fuse/strap registers) are needed.
-
 
1309
 *
-
 
1310
 * This function needs to be called:
-
 
1311
 *   - after the MMIO has been setup as we are reading registers,
-
 
1312
 *   - after the PCH has been detected,
-
 
1313
 *   - before the first usage of the fields it can tweak.
-
 
1314
 */
-
 
1315
static void intel_device_info_runtime_init(struct drm_device *dev)
-
 
1316
{
-
 
1317
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
1318
	struct intel_device_info *info;
-
 
1319
	enum pipe pipe;
-
 
1320
 
-
 
1321
	info = (struct intel_device_info *)&dev_priv->info;
-
 
1322
 
-
 
1323
	if (IS_VALLEYVIEW(dev))
-
 
1324
		for_each_pipe(pipe)
-
 
1325
			info->num_sprites[pipe] = 2;
-
 
1326
	else
-
 
1327
		for_each_pipe(pipe)
-
 
1328
			info->num_sprites[pipe] = 1;
-
 
1329
 
-
 
1330
	if (i915.disable_display) {
-
 
1331
		DRM_INFO("Display disabled (module parameter)\n");
-
 
1332
		info->num_pipes = 0;
-
 
1333
	} else if (info->num_pipes > 0 &&
-
 
1334
		   (INTEL_INFO(dev)->gen == 7 || INTEL_INFO(dev)->gen == 8) &&
-
 
1335
		   !IS_VALLEYVIEW(dev)) {
-
 
1336
		u32 fuse_strap = I915_READ(FUSE_STRAP);
-
 
1337
		u32 sfuse_strap = I915_READ(SFUSE_STRAP);
-
 
1338
 
-
 
1339
		/*
-
 
1340
		 * SFUSE_STRAP is supposed to have a bit signalling the display
-
 
1341
		 * is fused off. Unfortunately it seems that, at least in
-
 
1342
		 * certain cases, fused off display means that PCH display
-
 
1343
		 * reads don't land anywhere. In that case, we read 0s.
-
 
1344
		 *
-
 
1345
		 * On CPT/PPT, we can detect this case as SFUSE_STRAP_FUSE_LOCK
-
 
1346
		 * should be set when taking over after the firmware.
1279
	DRM_DEBUG_DRIVER("i915 device info: gen=%i, pciid=0x%04x flags="
1347
		 */
1280
			 DEV_INFO_FOR_EACH_FLAG(PRINT_S, SEP_EMPTY),
1348
		if (fuse_strap & ILK_INTERNAL_DISPLAY_DISABLE ||
1281
			 info->gen,
1349
		    sfuse_strap & SFUSE_STRAP_DISPLAY_DISABLED ||
1282
			 dev_priv->dev->pdev->device,
1350
		    (dev_priv->pch_type == PCH_CPT &&
1283
			 DEV_INFO_FOR_EACH_FLAG(PRINT_FLAG, SEP_COMMA));
1351
		     !(sfuse_strap & SFUSE_STRAP_FUSE_LOCK))) {
Line 1299... Line 1367...
1299
 *   - setup the DRM framebuffer with the allocated memory
1367
 *   - setup the DRM framebuffer with the allocated memory
1300
 */
1368
 */
1301
int i915_driver_load(struct drm_device *dev, unsigned long flags)
1369
int i915_driver_load(struct drm_device *dev, unsigned long flags)
1302
{
1370
{
1303
    struct drm_i915_private *dev_priv;
1371
    struct drm_i915_private *dev_priv;
1304
	struct intel_device_info *info;
1372
	struct intel_device_info *info, *device_info;
1305
	int ret = 0, mmio_bar, mmio_size;
1373
	int ret = 0, mmio_bar, mmio_size;
1306
	uint32_t aperture_size;
1374
	uint32_t aperture_size;
Line 1307... Line 1375...
1307
 
1375
 
Line 1308... Line 1376...
1308
	info = (struct intel_device_info *) flags;
1376
	info = (struct intel_device_info *) flags;
1309
 
1377
 
1310
 
1378
 
Line 1311... Line 1379...
1311
	dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL);
1379
	dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL);
1312
    if (dev_priv == NULL)
1380
    if (dev_priv == NULL)
-
 
1381
        return -ENOMEM;
-
 
1382
 
-
 
1383
	dev->dev_private = dev_priv;
1313
        return -ENOMEM;
1384
    dev_priv->dev = dev;
Line 1314... Line 1385...
1314
 
1385
 
1315
    dev->dev_private = (void *)dev_priv;
1386
	/* copy initial configuration to dev_priv->info */
1316
    dev_priv->dev = dev;
1387
	device_info = (struct intel_device_info *)&dev_priv->info;
1317
	dev_priv->info = info;
1388
	*device_info = *info;
1318
 
1389
 
-
 
1390
	spin_lock_init(&dev_priv->irq_lock);
1319
	spin_lock_init(&dev_priv->irq_lock);
1391
	spin_lock_init(&dev_priv->gpu_error.lock);
1320
	spin_lock_init(&dev_priv->gpu_error.lock);
1392
	spin_lock_init(&dev_priv->backlight_lock);
Line 1321... Line 1393...
1321
	spin_lock_init(&dev_priv->backlight_lock);
1393
	spin_lock_init(&dev_priv->uncore.lock);
Line 1361... Line 1433...
1361
		DRM_ERROR("failed to map registers\n");
1433
		DRM_ERROR("failed to map registers\n");
1362
		ret = -EIO;
1434
		ret = -EIO;
1363
		goto put_bridge;
1435
		goto put_bridge;
1364
	}
1436
	}
Line 1365... Line -...
1365
 
-
 
1366
	intel_uncore_early_sanitize(dev);
-
 
1367
 
1437
 
1368
	/* This must be called before any calls to HAS_PCH_* */
1438
	/* This must be called before any calls to HAS_PCH_* */
Line 1369... Line 1439...
1369
	intel_detect_pch(dev);
1439
	intel_detect_pch(dev);
Line 1442... Line 1512...
1442
     * According to chipset errata, on the 965GM, MSI interrupts may
1512
     * According to chipset errata, on the 965GM, MSI interrupts may
1443
     * be lost or delayed, but we use them anyways to avoid
1513
     * be lost or delayed, but we use them anyways to avoid
1444
     * stuck interrupts on some machines.
1514
     * stuck interrupts on some machines.
1445
     */
1515
     */
Line 1446... Line -...
1446
 
-
 
1447
	dev_priv->num_plane = 1;
-
 
1448
	if (IS_VALLEYVIEW(dev))
1516
 
Line 1449... Line 1517...
1449
		dev_priv->num_plane = 2;
1517
	intel_device_info_runtime_init(dev);
1450
 
1518
 
1451
//   if (INTEL_INFO(dev)->num_pipes) {
1519
//   if (INTEL_INFO(dev)->num_pipes) {
1452
//       ret = drm_vblank_init(dev, INTEL_INFO(dev)->num_pipes);
1520
//       ret = drm_vblank_init(dev, INTEL_INFO(dev)->num_pipes);
1453
//       if (ret)
1521
//       if (ret)
Line 1454... Line 1522...
1454
//           goto out_gem_unload;
1522
//           goto out_gem_unload;
Line 1455... Line 1523...
1455
//   }
1523
//   }
1456
 
1524
 
1457
	intel_power_domains_init(dev);
1525
	intel_power_domains_init(dev_priv);
1458
 
1526
 
Line 1469... Line 1537...
1469
 
1537
 
1470
 
1538
 
1471
	if (INTEL_INFO(dev)->num_pipes) {
1539
	if (INTEL_INFO(dev)->num_pipes) {
1472
    /* Must be done after probing outputs */
-
 
1473
		intel_opregion_init(dev);
1540
    /* Must be done after probing outputs */
Line 1474... Line 1541...
1474
//		acpi_video_register();
1541
		intel_opregion_init(dev);
1475
	}
1542
	}
Line 1513... Line 1580...
1513
	intel_gpu_ips_teardown();
1580
	intel_gpu_ips_teardown();
Line 1514... Line 1581...
1514
 
1581
 
1515
		/* The i915.ko module is still not prepared to be loaded when
1582
		/* The i915.ko module is still not prepared to be loaded when
1516
		 * the power well is not enabled, so just enable it in case
1583
		 * the power well is not enabled, so just enable it in case
1517
		 * we're going to unload/reload. */
1584
		 * we're going to unload/reload. */
1518
	intel_display_set_init_power(dev, true);
1585
	intel_display_set_init_power(dev_priv, true);
Line 1519... Line 1586...
1519
	intel_power_domains_remove(dev);
1586
	intel_power_domains_remove(dev_priv);
Line 1520... Line 1587...
1520
 
1587
 
1521
	i915_teardown_sysfs(dev);
1588
	i915_teardown_sysfs(dev);
Line 1550... Line 1617...
1550
	/* Free error state after interrupts are fully disabled. */
1617
	/* Free error state after interrupts are fully disabled. */
1551
	del_timer_sync(&dev_priv->gpu_error.hangcheck_timer);
1618
	del_timer_sync(&dev_priv->gpu_error.hangcheck_timer);
1552
	cancel_work_sync(&dev_priv->gpu_error.work);
1619
	cancel_work_sync(&dev_priv->gpu_error.work);
1553
	i915_destroy_error_state(dev);
1620
	i915_destroy_error_state(dev);
Line 1554... Line -...
1554
 
-
 
1555
	cancel_delayed_work_sync(&dev_priv->pc8.enable_work);
-
 
1556
 
1621
 
1557
	if (dev->pdev->msi_enabled)
1622
	if (dev->pdev->msi_enabled)
Line 1558... Line 1623...
1558
		pci_disable_msi(dev->pdev);
1623
		pci_disable_msi(dev->pdev);
Line 1559... Line 1624...
1559
 
1624
 
1560
	intel_opregion_fini(dev);
1625
	intel_opregion_fini(dev);
1561
 
1626
 
Line 1562... Line 1627...
1562
	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
1627
	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
1563
		/* Flush any outstanding unpin_work. */
-
 
1564
		flush_workqueue(dev_priv->wq);
1628
		/* Flush any outstanding unpin_work. */
1565
 
1629
		flush_workqueue(dev_priv->wq);
-
 
1630
 
1566
		mutex_lock(&dev->struct_mutex);
1631
		mutex_lock(&dev->struct_mutex);
1567
		i915_gem_free_all_phys_object(dev);
-
 
1568
		i915_gem_cleanup_ringbuffer(dev);
1632
		i915_gem_cleanup_ringbuffer(dev);
Line 1569... Line 1633...
1569
		i915_gem_context_fini(dev);
1633
		i915_gem_context_fini(dev);
1570
		mutex_unlock(&dev->struct_mutex);
1634
		WARN_ON(dev_priv->mm.aliasing_ppgtt);
1571
		i915_gem_cleanup_aliasing_ppgtt(dev);
1635
		mutex_unlock(&dev->struct_mutex);
Line 1572... Line -...
1572
		i915_gem_cleanup_stolen(dev);
-
 
1573
 
1636
		i915_gem_cleanup_stolen(dev);
Line 1574... Line 1637...
1574
		if (!I915_NEED_GFX_HWS(dev))
1637
 
Line 1575... Line 1638...
1575
			i915_free_hws(dev);
1638
		if (!I915_NEED_GFX_HWS(dev))
1576
	}
1639
			i915_free_hws(dev);
Line -... Line 1640...
-
 
1640
	}
1577
 
1641
 
1578
	list_del(&dev_priv->gtt.base.global_link);
1642
	WARN_ON(!list_empty(&dev_priv->vm_list));
Line 1579... Line 1643...
1579
	WARN_ON(!list_empty(&dev_priv->vm_list));
1643
 
Line 1594... Line 1658...
1594
 
1658
 
1595
	if (dev_priv->slab)
1659
	if (dev_priv->slab)
Line 1596... Line 1660...
1596
		kmem_cache_destroy(dev_priv->slab);
1660
		kmem_cache_destroy(dev_priv->slab);
1597
 
1661
 
Line 1598... Line 1662...
1598
	pci_dev_put(dev_priv->bridge_dev);
1662
	pci_dev_put(dev_priv->bridge_dev);
1599
	kfree(dev->dev_private);
1663
	kfree(dev_priv);
1600
 
1664
 
Line 1601... Line 1665...
1601
	return 0;
1665
	return 0;
1602
}
1666
}
1603
#endif
-
 
1604
 
-
 
1605
int i915_driver_open(struct drm_device *dev, struct drm_file *file)
-
 
1606
{
-
 
1607
	struct drm_i915_file_private *file_priv;
-
 
1608
 
1667
#endif
1609
	DRM_DEBUG_DRIVER("\n");
-
 
1610
	file_priv = kzalloc(sizeof(*file_priv), GFP_KERNEL);
-
 
1611
	if (!file_priv)
-
 
1612
		return -ENOMEM;
-
 
1613
 
-
 
Line 1614... Line 1668...
1614
	file->driver_priv = file_priv;
1668
 
-
 
1669
int i915_driver_open(struct drm_device *dev, struct drm_file *file)
-
 
1670
{
Line 1615... Line 1671...
1615
 
1671
	int ret;
1616
	spin_lock_init(&file_priv->mm.lock);
1672
 
Line 1617... Line 1673...
1617
	INIT_LIST_HEAD(&file_priv->mm.request_list);
1673
	ret = i915_gem_open(dev, file);
Line 1634... Line 1690...
1634
 * and DMA structures, since the kernel won't be using them, and clea
1690
 * and DMA structures, since the kernel won't be using them, and clea
1635
 * up any GEM state.
1691
 * up any GEM state.
1636
 */
1692
 */
1637
void i915_driver_lastclose(struct drm_device * dev)
1693
void i915_driver_lastclose(struct drm_device *dev)
1638
{
1694
{
1639
	drm_i915_private_t *dev_priv = dev->dev_private;
1695
	struct drm_i915_private *dev_priv = dev->dev_private;
Line 1640... Line 1696...
1640
 
1696
 
1641
	/* On gen6+ we refuse to init without kms enabled, but then the drm core
1697
	/* On gen6+ we refuse to init without kms enabled, but then the drm core
1642
	 * goes right around and calls lastclose. Check for this and don't clean
1698
	 * goes right around and calls lastclose. Check for this and don't clean
1643
	 * up anything. */
1699
	 * up anything. */
Line 1653... Line 1709...
1653
	i915_gem_lastclose(dev);
1709
	i915_gem_lastclose(dev);
Line 1654... Line 1710...
1654
 
1710
 
1655
	i915_dma_cleanup(dev);
1711
	i915_dma_cleanup(dev);
Line 1656... Line 1712...
1656
}
1712
}
1657
 
1713
 
1658
void i915_driver_preclose(struct drm_device * dev, struct drm_file *file_priv)
1714
void i915_driver_preclose(struct drm_device *dev, struct drm_file *file)
1659
{
1715
{
1660
	mutex_lock(&dev->struct_mutex);
1716
	mutex_lock(&dev->struct_mutex);
1661
	i915_gem_context_close(dev, file_priv);
1717
	i915_gem_context_close(dev, file);
1662
	i915_gem_release(dev, file_priv);
1718
	i915_gem_release(dev, file);
Line 1663... Line 1719...
1663
	mutex_unlock(&dev->struct_mutex);
1719
	mutex_unlock(&dev->struct_mutex);
1664
}
1720
}
1665
 
1721
 
Line -... Line 1722...
-
 
1722
void i915_driver_postclose(struct drm_device *dev, struct drm_file *file)
-
 
1723
{
1666
void i915_driver_postclose(struct drm_device *dev, struct drm_file *file)
1724
	struct drm_i915_file_private *file_priv = file->driver_priv;
1667
{
1725
 
Line 1668... Line 1726...
1668
	struct drm_i915_file_private *file_priv = file->driver_priv;
1726
	if (file_priv && file_priv->bsd_ring)
1669
 
1727
		file_priv->bsd_ring = NULL;
Line 1718... Line 1776...
1718
	DRM_IOCTL_DEF_DRV(I915_GEM_WAIT, i915_gem_wait_ioctl, DRM_AUTH|DRM_UNLOCKED|DRM_RENDER_ALLOW),
1776
	DRM_IOCTL_DEF_DRV(I915_GEM_WAIT, i915_gem_wait_ioctl, DRM_AUTH|DRM_UNLOCKED|DRM_RENDER_ALLOW),
1719
	DRM_IOCTL_DEF_DRV(I915_GEM_CONTEXT_CREATE, i915_gem_context_create_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
1777
	DRM_IOCTL_DEF_DRV(I915_GEM_CONTEXT_CREATE, i915_gem_context_create_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
1720
	DRM_IOCTL_DEF_DRV(I915_GEM_CONTEXT_DESTROY, i915_gem_context_destroy_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
1778
	DRM_IOCTL_DEF_DRV(I915_GEM_CONTEXT_DESTROY, i915_gem_context_destroy_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
1721
	DRM_IOCTL_DEF_DRV(I915_REG_READ, i915_reg_read_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
1779
	DRM_IOCTL_DEF_DRV(I915_REG_READ, i915_reg_read_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
1722
	DRM_IOCTL_DEF_DRV(I915_GET_RESET_STATS, i915_get_reset_stats_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
1780
	DRM_IOCTL_DEF_DRV(I915_GET_RESET_STATS, i915_get_reset_stats_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
-
 
1781
	DRM_IOCTL_DEF_DRV(I915_GEM_USERPTR, i915_gem_userptr_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
1723
};
1782
};
Line 1724... Line 1783...
1724
 
1783
 
Line 1725... Line 1784...
1725
int i915_max_ioctl = DRM_ARRAY_SIZE(i915_ioctls);
1784
int i915_max_ioctl = ARRAY_SIZE(i915_ioctls);
1726
 
1785
 
1727
/*
1786
/*
1728
 * This is really ugly: Because old userspace abused the linux agp interface to
1787
 * This is really ugly: Because old userspace abused the linux agp interface to