/* * Copyright (c) 2016 Intel Corporation * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that copyright * notice and this permission notice appear in supporting documentation, and * that the name of the copyright holders not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. The copyright holders make no representations * about the suitability of this software for any purpose. It is provided "as * is" without express or implied warranty. * * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. */ #ifndef __DRM_MODE_CONFIG_H__ #define __DRM_MODE_CONFIG_H__ #include <linux/mutex.h> #include <linux/types.h> #include <linux/idr.h> #include <linux/workqueue.h> #include <linux/llist.h> #include <drm/drm_modeset_lock.h> struct drm_file; struct drm_device; struct drm_atomic_state; struct drm_mode_fb_cmd2; struct drm_format_info; struct drm_display_mode; /** * struct drm_mode_config_funcs - basic driver provided mode setting functions * * Some global (i.e. not per-CRTC, connector, etc) mode setting functions that * involve drivers. */ struct drm_mode_config_funcs { … }; /** * struct drm_mode_config - Mode configuration control structure * @min_width: minimum fb pixel width on this device * @min_height: minimum fb pixel height on this device * @max_width: maximum fb pixel width on this device * @max_height: maximum fb pixel height on this device * @funcs: core driver provided mode setting functions * @poll_enabled: track polling support for this device * @poll_running: track polling status for this device * @delayed_event: track delayed poll uevent deliver for this device * @output_poll_work: delayed work for polling in process context * @preferred_depth: preferred RBG pixel depth, used by fb helpers * @prefer_shadow: hint to userspace to prefer shadow-fb rendering * @cursor_width: hint to userspace for max cursor width * @cursor_height: hint to userspace for max cursor height * @helper_private: mid-layer private data * * Core mode resource tracking structure. All CRTC, encoders, and connectors * enumerated by the driver are added here, as are global properties. Some * global restrictions are also here, e.g. dimension restrictions. * * Framebuffer sizes refer to the virtual screen that can be displayed by * the CRTC. This can be different from the physical resolution programmed. * The minimum width and height, stored in @min_width and @min_height, * describe the smallest size of the framebuffer. It correlates to the * minimum programmable resolution. * The maximum width, stored in @max_width, is typically limited by the * maximum pitch between two adjacent scanlines. The maximum height, stored * in @max_height, is usually only limited by the amount of addressable video * memory. For hardware that has no real maximum, drivers should pick a * reasonable default. * * See also @DRM_SHADOW_PLANE_MAX_WIDTH and @DRM_SHADOW_PLANE_MAX_HEIGHT. */ struct drm_mode_config { … }; int __must_check drmm_mode_config_init(struct drm_device *dev); /** * drm_mode_config_init - DRM mode_configuration structure initialization * @dev: DRM device * * This is the unmanaged version of drmm_mode_config_init() for drivers which * still explicitly call drm_mode_config_cleanup(). * * FIXME: This function is deprecated and drivers should be converted over to * drmm_mode_config_init(). */ static inline int drm_mode_config_init(struct drm_device *dev) { … } void drm_mode_config_reset(struct drm_device *dev); void drm_mode_config_cleanup(struct drm_device *dev); #endif