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