Subversion Repositories Kolibri OS

Rev

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

Rev 4569 Rev 5078
Line 98... Line 98...
98
}
98
}
Line 99... Line 99...
99
 
99
 
100
/**
100
/**
101
 * Send the fifo command to create a screen.
101
 * Send the fifo command to create a screen.
102
 */
102
 */
103
int vmw_sou_fifo_create(struct vmw_private *dev_priv,
103
static int vmw_sou_fifo_create(struct vmw_private *dev_priv,
104
			       struct vmw_screen_object_unit *sou,
104
			       struct vmw_screen_object_unit *sou,
105
			       uint32_t x, uint32_t y,
105
			       uint32_t x, uint32_t y,
106
			       struct drm_display_mode *mode)
106
			       struct drm_display_mode *mode)
107
{
107
{
Line 112... Line 112...
112
			uint32_t cmdType;
112
			uint32_t cmdType;
113
		} header;
113
		} header;
114
		SVGAScreenObject obj;
114
		SVGAScreenObject obj;
115
	} *cmd;
115
	} *cmd;
Line 116... Line 116...
116
 
116
 
117
//   BUG_ON(!sou->buffer);
-
 
118
 
-
 
Line 119... Line 117...
119
    ENTER();
117
	BUG_ON(!sou->buffer);
120
 
118
 
121
	fifo_size = sizeof(*cmd);
119
	fifo_size = sizeof(*cmd);
122
	cmd = vmw_fifo_reserve(dev_priv, fifo_size);
120
	cmd = vmw_fifo_reserve(dev_priv, fifo_size);
Line 141... Line 139...
141
		cmd->obj.root.x = sou->base.gui_x;
139
		cmd->obj.root.x = sou->base.gui_x;
142
		cmd->obj.root.y = sou->base.gui_y;
140
		cmd->obj.root.y = sou->base.gui_y;
143
	}
141
	}
Line 144... Line 142...
144
 
142
 
145
	/* Ok to assume that buffer is pinned in vram */
143
	/* Ok to assume that buffer is pinned in vram */
146
//   vmw_bo_get_guest_ptr(&sou->buffer->base, &cmd->obj.backingStore.ptr);
-
 
147
 
-
 
148
    cmd->obj.backingStore.ptr.gmrId = SVGA_GMR_FRAMEBUFFER;
-
 
149
    cmd->obj.backingStore.ptr.offset = 0;
144
	vmw_bo_get_guest_ptr(&sou->buffer->base, &cmd->obj.backingStore.ptr);
Line 150... Line 145...
150
	cmd->obj.backingStore.pitch = mode->hdisplay * 4;
145
	cmd->obj.backingStore.pitch = mode->hdisplay * 4;
Line 151... Line 146...
151
 
146
 
Line 152... Line -...
152
	vmw_fifo_commit(dev_priv, fifo_size);
-
 
153
 
-
 
154
	sou->defined = true;
147
	vmw_fifo_commit(dev_priv, fifo_size);
155
 
148
 
Line 156... Line 149...
156
    LEAVE();
149
	sou->defined = true;
157
 
150
 
Line 312... Line 305...
312
		if (unlikely(ret != 0))
305
		if (unlikely(ret != 0))
313
			return ret;
306
			return ret;
Line 314... Line 307...
314
 
307
 
315
		connector->encoder = NULL;
308
		connector->encoder = NULL;
316
		encoder->crtc = NULL;
309
		encoder->crtc = NULL;
317
		crtc->fb = NULL;
310
		crtc->primary->fb = NULL;
318
		crtc->x = 0;
311
		crtc->x = 0;
319
		crtc->y = 0;
312
		crtc->y = 0;
Line 320... Line 313...
320
		crtc->enabled = false;
313
		crtc->enabled = false;
Line 373... Line 366...
373
		if (sou->defined)
366
		if (sou->defined)
374
			return ret;
367
			return ret;
Line 375... Line 368...
375
 
368
 
376
		connector->encoder = NULL;
369
		connector->encoder = NULL;
377
		encoder->crtc = NULL;
370
		encoder->crtc = NULL;
378
		crtc->fb = NULL;
371
		crtc->primary->fb = NULL;
379
		crtc->x = 0;
372
		crtc->x = 0;
380
		crtc->y = 0;
373
		crtc->y = 0;
Line 381... Line 374...
381
		crtc->enabled = false;
374
		crtc->enabled = false;
Line 386... Line 379...
386
	vmw_sou_add_active(dev_priv, sou, vfb);
379
	vmw_sou_add_active(dev_priv, sou, vfb);
Line 387... Line 380...
387
 
380
 
388
	connector->encoder = encoder;
381
	connector->encoder = encoder;
389
	encoder->crtc = crtc;
382
	encoder->crtc = crtc;
390
	crtc->mode = *mode;
383
	crtc->mode = *mode;
391
	crtc->fb = fb;
384
	crtc->primary->fb = fb;
392
	crtc->x = set->x;
385
	crtc->x = set->x;
393
	crtc->y = set->y;
386
	crtc->y = set->y;
Line 394... Line 387...
394
	crtc->enabled = true;
387
	crtc->enabled = true;
Line 445... Line 438...
445
	struct drm_device *dev = dev_priv->dev;
438
	struct drm_device *dev = dev_priv->dev;
446
	struct drm_connector *connector;
439
	struct drm_connector *connector;
447
	struct drm_encoder *encoder;
440
	struct drm_encoder *encoder;
448
	struct drm_crtc *crtc;
441
	struct drm_crtc *crtc;
Line 449... Line -...
449
 
-
 
450
    ENTER();
-
 
451
 
442
 
452
	sou = kzalloc(sizeof(*sou), GFP_KERNEL);
443
	sou = kzalloc(sizeof(*sou), GFP_KERNEL);
453
	if (!sou)
444
	if (!sou)
Line 454... Line 445...
454
		return -ENOMEM;
445
		return -ENOMEM;
Line 474... Line 465...
474
			 DRM_MODE_ENCODER_VIRTUAL);
465
			 DRM_MODE_ENCODER_VIRTUAL);
475
	drm_mode_connector_attach_encoder(connector, encoder);
466
	drm_mode_connector_attach_encoder(connector, encoder);
476
	encoder->possible_crtcs = (1 << unit);
467
	encoder->possible_crtcs = (1 << unit);
477
	encoder->possible_clones = 0;
468
	encoder->possible_clones = 0;
Line -... Line 469...
-
 
469
 
-
 
470
	(void) drm_connector_register(connector);
478
 
471
 
Line 479... Line 472...
479
	drm_crtc_init(dev, crtc, &vmw_screen_object_crtc_funcs);
472
	drm_crtc_init(dev, crtc, &vmw_screen_object_crtc_funcs);
Line 480... Line 473...
480
 
473
 
481
	drm_mode_crtc_set_gamma_size(crtc, 256);
474
	drm_mode_crtc_set_gamma_size(crtc, 256);
482
 
475
 
483
	drm_object_attach_property(&connector->base,
476
	drm_object_attach_property(&connector->base,
484
				      dev->mode_config.dirty_info_property,
477
				      dev->mode_config.dirty_info_property,
485
				      1);
478
				      1);
Line 486... Line 479...
486
    LEAVE();
479
 
487
	return 0;
480
	return 0;
488
}
481
}
489
 
482
 
Line 490... Line -...
490
int vmw_kms_init_screen_object_display(struct vmw_private *dev_priv)
-
 
491
{
-
 
492
	struct drm_device *dev = dev_priv->dev;
483
int vmw_kms_init_screen_object_display(struct vmw_private *dev_priv)
493
	int i, ret;
484
{
494
 
485
	struct drm_device *dev = dev_priv->dev;
495
    ENTER();
486
	int i, ret;
Line 521... Line 512...
521
	for (i = 0; i < VMWGFX_NUM_DISPLAY_UNITS; ++i)
512
	for (i = 0; i < VMWGFX_NUM_DISPLAY_UNITS; ++i)
522
		vmw_sou_init(dev_priv, i);
513
		vmw_sou_init(dev_priv, i);
Line 523... Line 514...
523
 
514
 
Line 524... Line -...
524
	DRM_INFO("Screen objects system initialized\n");
-
 
525
 
515
	DRM_INFO("Screen objects system initialized\n");
Line 526... Line 516...
526
    LEAVE();
516
 
527
	return 0;
517
	return 0;
528
 
518
 
Line 577... Line 567...
577
	struct vmw_screen_object_unit *sou = vmw_crtc_to_sou(crtc);
567
	struct vmw_screen_object_unit *sou = vmw_crtc_to_sou(crtc);
Line 578... Line 568...
578
 
568
 
Line 579... Line 569...
579
	BUG_ON(!sou->base.is_implicit);
569
	BUG_ON(!sou->base.is_implicit);
580
 
570
 
581
	dev_priv->sou_priv->implicit_fb =
571
	dev_priv->sou_priv->implicit_fb =
Line 582... Line 572...
582
		vmw_framebuffer_to_vfb(sou->base.crtc.fb);
572
		vmw_framebuffer_to_vfb(sou->base.crtc.primary->fb);
Line 583... Line 573...
583
}
573
}
Line 637... Line 627...
637
    struct vmw_screen_object_unit *sou;
627
    struct vmw_screen_object_unit *sou;
638
    display_t *os_display;
628
    display_t *os_display;
Line 639... Line 629...
639
 
629
 
Line 640... Line -...
640
    bool ret = false;
-
 
641
 
-
 
642
    ENTER();
630
    bool ret = false;
643
 
631
 
Line 644... Line 632...
644
//    dbgprintf("width %d height %d vrefresh %d\n",
632
//    dbgprintf("width %d height %d vrefresh %d\n",
645
//               reqmode->width, reqmode->height, reqmode->freq);
633
//               reqmode->width, reqmode->height, reqmode->freq);
Line 716... Line 704...
716
#else   /*   sledgehammer  */
704
#else   /*   sledgehammer  */
Line 717... Line 705...
717
 
705
 
718
        vmw_write(dev_priv,SVGA_REG_WIDTH,  mode->hdisplay);
706
        vmw_write(dev_priv,SVGA_REG_WIDTH,  mode->hdisplay);
719
        vmw_write(dev_priv,SVGA_REG_HEIGHT, mode->vdisplay);
707
        vmw_write(dev_priv,SVGA_REG_HEIGHT, mode->vdisplay);
-
 
708
        vmw_write(dev_priv,SVGA_REG_BITS_PER_PIXEL, 32);
720
        vmw_write(dev_priv,SVGA_REG_BITS_PER_PIXEL, 32);
709
        os_display->select_cursor(os_display->cursor);
721
        ret = 0;
710
        ret = 0;
722
#endif
711
#endif
723
        if (ret == 0)
712
        if (ret == 0)
724
        {
713
        {
Line 735... Line 724...
735
        else
724
        else
736
            DRM_ERROR("failed to set mode %d_%d on crtc %p\n",
725
            DRM_ERROR("failed to set mode %d_%d on crtc %p\n",
737
                       os_display->width, os_display->height, crtc);
726
                       os_display->width, os_display->height, crtc);
738
    }
727
    }
Line 739... Line -...
739
 
-
 
740
    LEAVE();
728
 
741
    return ret;
729
    return ret;