diff options
| author | David Airlie <airlied@asimov.stargames.com.au> | 2007-04-10 11:51:31 +1000 | 
|---|---|---|
| committer | David Airlie <airlied@asimov.stargames.com.au> | 2007-04-10 11:51:31 +1000 | 
| commit | eb9bdc27879d1aa307b234bbdb0f81494dcf7095 (patch) | |
| tree | 9b91a924b27d2e94f9efd5eb9e4fcceefae47d24 | |
| parent | ed0ebd9d3da2e5c4e8053b6e7a7d2898b184f857 (diff) | |
mode: fixup problems with framebuffer add function
| -rw-r--r-- | libdrm/xf86drmMode.c | 12 | ||||
| -rw-r--r-- | linux-core/drm_crtc.c | 14 | ||||
| -rw-r--r-- | linux-core/intel_display.c | 7 | 
3 files changed, 21 insertions, 12 deletions
| diff --git a/libdrm/xf86drmMode.c b/libdrm/xf86drmMode.c index 55a9d91c..5f480890 100644 --- a/libdrm/xf86drmMode.c +++ b/libdrm/xf86drmMode.c @@ -192,10 +192,11 @@ err_allocs:  	return 0;  } -uint32_t drmModeAddFB(int fd, uint32_t width, uint32_t height, -                               uint8_t bpp, uint32_t pitch, drmBO *bo) +int drmModeAddFB(int fd, uint32_t width, uint32_t height, +                 uint8_t bpp, uint32_t pitch, drmBO *bo, uint32_t *buf_id)  {  	struct drm_mode_fb_cmd f; +	int ret;  	f.width  = width;  	f.height = height; @@ -203,10 +204,11 @@ uint32_t drmModeAddFB(int fd, uint32_t width, uint32_t height,  	f.bpp    = bpp;  	f.handle = bo->handle; -	if (ioctl(fd, DRM_IOCTL_MODE_ADDFB, &f)) -		return 0; +	if (ret = ioctl(fd, DRM_IOCTL_MODE_ADDFB, &f)) +		return ret; -	return f.buffer_id; +	*buf_id = f.buffer_id; +	return 0;  }  int drmModeRmFB(int fd, uint32_t bufferId) diff --git a/linux-core/drm_crtc.c b/linux-core/drm_crtc.c index 4f8af001..ce2073d1 100644 --- a/linux-core/drm_crtc.c +++ b/linux-core/drm_crtc.c @@ -502,6 +502,7 @@ bool drm_initial_config(drm_device_t *dev, bool can_grow)  	struct drm_framebuffer *fb;  	struct drm_output *output, *use_output = NULL; +#if 0  	fb = drm_framebuffer_create(dev);  	if (!fb)  		return false; @@ -512,6 +513,7 @@ bool drm_initial_config(drm_device_t *dev, bool can_grow)  	fb->depth = 24;  	fb->bits_per_pixel = 32; +#endif  	/* bind both CRTCs to this fb */  	/* only initialise one crtc to enabled state */  	list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { @@ -931,15 +933,15 @@ int drm_mode_addfb(struct inode *inode, struct file *filp,  	struct drm_buffer_object *bo;          int ret; -	if (!copy_from_user(&r, argp, sizeof(r))) +	if (copy_from_user(&r, argp, sizeof(r)))  		return -EFAULT; -	if (config->min_width > r.width || r.width > config->max_width) { -		DRM_ERROR("mode new framebuffer width not within limits"); +	if ((config->min_width > r.width) || (r.width > config->max_width)) { +		DRM_ERROR("mode new framebuffer width not within limits\n");  		return -EINVAL;          } -	if (config->min_height > r.height || r.height > config->min_height) { -		DRM_ERROR("mode new framebuffer height not within limits"); +	if ((config->min_height > r.height) || (r.height > config->max_height)) { +		DRM_ERROR("mode new framebuffer height not within limits\n");  		return -EINVAL;  	} @@ -963,7 +965,7 @@ int drm_mode_addfb(struct inode *inode, struct file *filp,  	fb->bo             = bo;          r.buffer_id = fb->id; -        if (!copy_to_user(argp, &r, sizeof(r))) +        if (copy_to_user(argp, &r, sizeof(r)))                  return -EFAULT;  	return 0; diff --git a/linux-core/intel_display.c b/linux-core/intel_display.c index e8d15ce5..fce0fafd 100644 --- a/linux-core/intel_display.c +++ b/linux-core/intel_display.c @@ -1090,6 +1090,11 @@ void intel_modeset_init(drm_device_t *dev)  	drm_mode_config_init(dev); +	dev->mode_config.min_width = 0; +	dev->mode_config.min_height = 0; + +	dev->mode_config.max_width = 4096; +	dev->mode_config.max_height = 4096;  	if (IS_MOBILE(dev) || IS_I9XX(dev))  		num_pipe = 2; @@ -1104,7 +1109,7 @@ void intel_modeset_init(drm_device_t *dev)  	intel_setup_outputs(dev); -	drm_initial_config(dev, false); +	//drm_initial_config(dev, false);  }  void intel_modeset_cleanup(drm_device_t *dev) | 
