Esempio n. 1
0
int vmw_kms_sou_init_display(struct vmw_private *dev_priv)
{
	struct drm_device *dev = dev_priv->dev;
	int i, ret;

	if (!(dev_priv->capabilities & SVGA_CAP_SCREEN_OBJECT_2)) {
		DRM_INFO("Not using screen objects,"
			 " missing cap SCREEN_OBJECT_2\n");
		return -ENOSYS;
	}

	ret = -ENOMEM;
	dev_priv->num_implicit = 0;
	dev_priv->implicit_fb = NULL;

	ret = drm_vblank_init(dev, VMWGFX_NUM_DISPLAY_UNITS);
	if (unlikely(ret != 0))
		return ret;

	vmw_kms_create_implicit_placement_property(dev_priv, false);

	for (i = 0; i < VMWGFX_NUM_DISPLAY_UNITS; ++i)
		vmw_sou_init(dev_priv, i);

	dev_priv->active_display_unit = vmw_du_screen_object;

	DRM_INFO("Screen Objects Display Unit initialized\n");

	return 0;
}
Esempio n. 2
0
/**
 * vmw_kms_stdu_init_display - Initializes a Screen Target based display
 *
 * @dev_priv: VMW DRM device
 *
 * This function initialize a Screen Target based display device.  It checks
 * the capability bits to make sure the underlying hardware can support
 * screen targets, and then creates the maximum number of CRTCs, a.k.a Display
 * Units, as supported by the display hardware.
 *
 * RETURNS:
 * 0 on success, error code otherwise
 */
int vmw_kms_stdu_init_display(struct vmw_private *dev_priv)
{
    struct drm_device *dev = dev_priv->dev;
    int i, ret;


    /* Do nothing if Screen Target support is turned off */
    if (!VMWGFX_ENABLE_SCREEN_TARGET_OTABLE)
        return -ENOSYS;

    if (!(dev_priv->capabilities & SVGA_CAP_GBOBJECTS))
        return -ENOSYS;

    ret = drm_vblank_init(dev, VMWGFX_NUM_DISPLAY_UNITS);
    if (unlikely(ret != 0))
        return ret;

    dev_priv->active_display_unit = vmw_du_screen_target;

    vmw_kms_create_implicit_placement_property(dev_priv, false);

    for (i = 0; i < VMWGFX_NUM_DISPLAY_UNITS; ++i) {
        ret = vmw_stdu_init(dev_priv, i);

        if (unlikely(ret != 0)) {
            DRM_ERROR("Failed to initialize STDU %d", i);
            goto err_vblank_cleanup;
        }
    }

    DRM_INFO("Screen Target Display device initialized\n");

    return 0;

err_vblank_cleanup:
    drm_vblank_cleanup(dev);
    return ret;
}