码迷,mamicode.com
首页 > 其他好文 > 详细

KMS(3)

时间:2021-02-15 12:16:04      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:内容类型   metadata   reference   htm   矩阵   钩子函数   head   端口   mic   

struct drm_mode_config

模式配置控制结构体。

定义

struct drm_mode_config {
  struct mutex mutex;
  struct drm_modeset_lock connection_mutex;
  struct drm_modeset_acquire_ctx *acquire_ctx;
  struct mutex idr_mutex;
  struct idr object_idr;
  struct idr tile_idr;
  struct mutex fb_lock;
  int num_fb;
  struct list_head fb_list;
  spinlock_t connector_list_lock;
  int num_connector;
  struct ida connector_ida;
  struct list_head connector_list;
  struct llist_head connector_free_list;
  struct work_struct connector_free_work;
  int num_encoder;
  struct list_head encoder_list;
  int num_total_plane;
  struct list_head plane_list;
  int num_crtc;
  struct list_head crtc_list;
  struct list_head property_list;
  struct list_head privobj_list;
  int min_width, min_height;
  int max_width, max_height;
  const struct drm_mode_config_funcs *funcs;
  resource_size_t fb_base;
  bool poll_enabled;
  bool poll_running;
  bool delayed_event;
  struct delayed_work output_poll_work;
  struct mutex blob_lock;
  struct list_head property_blob_list;
  struct drm_property *edid_property;
  struct drm_property *dpms_property;
  struct drm_property *path_property;
  struct drm_property *tile_property;
  struct drm_property *link_status_property;
  struct drm_property *plane_type_property;
  struct drm_property *prop_src_x;
  struct drm_property *prop_src_y;
  struct drm_property *prop_src_w;
  struct drm_property *prop_src_h;
  struct drm_property *prop_crtc_x;
  struct drm_property *prop_crtc_y;
  struct drm_property *prop_crtc_w;
  struct drm_property *prop_crtc_h;
  struct drm_property *prop_fb_id;
  struct drm_property *prop_in_fence_fd;
  struct drm_property *prop_out_fence_ptr;
  struct drm_property *prop_crtc_id;
  struct drm_property *prop_fb_damage_clips;
  struct drm_property *prop_active;
  struct drm_property *prop_mode_id;
  struct drm_property *prop_vrr_enabled;
  struct drm_property *dvi_i_subconnector_property;
  struct drm_property *dvi_i_select_subconnector_property;
  struct drm_property *dp_subconnector_property;
  struct drm_property *tv_subconnector_property;
  struct drm_property *tv_select_subconnector_property;
  struct drm_property *tv_mode_property;
  struct drm_property *tv_left_margin_property;
  struct drm_property *tv_right_margin_property;
  struct drm_property *tv_top_margin_property;
  struct drm_property *tv_bottom_margin_property;
  struct drm_property *tv_brightness_property;
  struct drm_property *tv_contrast_property;
  struct drm_property *tv_flicker_reduction_property;
  struct drm_property *tv_overscan_property;
  struct drm_property *tv_saturation_property;
  struct drm_property *tv_hue_property;
  struct drm_property *scaling_mode_property;
  struct drm_property *aspect_ratio_property;
  struct drm_property *content_type_property;
  struct drm_property *degamma_lut_property;
  struct drm_property *degamma_lut_size_property;
  struct drm_property *ctm_property;
  struct drm_property *gamma_lut_property;
  struct drm_property *gamma_lut_size_property;
  struct drm_property *suggested_x_property;
  struct drm_property *suggested_y_property;
  struct drm_property *non_desktop_property;
  struct drm_property *panel_orientation_property;
  struct drm_property *writeback_fb_id_property;
  struct drm_property *writeback_pixel_formats_property;
  struct drm_property *writeback_out_fence_ptr_property;
  struct drm_property *hdr_output_metadata_property;
  struct drm_property *content_protection_property;
  struct drm_property *hdcp_content_type_property;
  uint32_t preferred_depth, prefer_shadow;
  bool prefer_shadow_fbdev;
  bool quirk_addfb_prefer_xbgr_30bpp;
  bool quirk_addfb_prefer_host_byte_order;
  bool async_page_flip;
  bool allow_fb_modifiers;
  bool normalize_zpos;
  struct drm_property *modifiers_property;
  uint32_t cursor_width, cursor_height;
  struct drm_atomic_state *suspend_state;
  const struct drm_mode_config_helper_funcs *helper_private;
};

成员

mutex

这是一个可怕的大模型BKL,它保护所有不能保护的东西。范围是不清楚和模糊的,尝试从它的保护下删除任何东西,并将其移到范围更广的锁中。
它保护的一件重要的事情是使用acquire_ctx。

connection_mutex
这保护了连接器状态和连接器到编码器到CRTC的路由链。
特别是对于原子驱动程序,它保护drm_connector.state。

acquire_ctx

对于遗留的ioctl,原子驱动程序使用全局隐式获取上下文。已弃用,因为隐式锁定上下文使得不可能使用驱动程序私有结构drm_modeset_lock。用户必须持有互斥锁。

idr_mutex

用于KMS ID分配和管理的互斥锁。保护object_idr和tile_idr。

object_idr

主要KMS ID跟踪对象。使用这个idr为所有的id, fb, crtc,connector,modes-用一个id表示所有模式相关信息,以方便后期使用。

tile_idr

使用这个idr为tiled sinks分配新的id,就像在一些高分辨率DP MST屏幕中使用的那样。

fb_lock

保护全局的fb_list和num_fb。

num_fb

fb_list上的元素数。

fb_list

所有的struct drm_framebuffer列表。

connector_list_lock

保护num_connector、connector_list和connector_free_list。

num_connector

此设备上的connector数量。受connector_list_lock保护。

connector_ida

connector索引的id分配器。

connector_list

用drm_connector.head链接的connector对象列表。受connector_list_lock保护。仅使用drm_for_each_connector_iter()和结构体drm_connector_list_iter遍历此列表。

connector_free_list

用drm_connector.free_head链接的connector对象列表。受connector_list_lock保护。由drm_for_each_connector_iter()和struct drm_connector_list_iter使用connector_free_work保存空闲连接器。

connector_free_work

清理connector_free_list的work.

num_encoder

此设备上的encoder数目。这在设备的生命周期内是不变的,因此不需要任何锁。

encoder_list

通过drm_encoder.head链接为列表的encoder对象列表。这在设备的生命周期内是不变的,因此不需要任何锁。

num_total_plane

此设备上通用(即primary/cursor)平面的数量。这在设备的生命周期内是不变的,因此不需要任何锁。

plane_list

用drm_plane.head链接的平面对象列表。这在设备的生命周期内是不变的,因此不需要任何锁。

num_crtc

此设备上通过drm_crtc.head链接的crtc数量。这在设备的生命周期内是不变的,因此不需要任何锁。

crtc_list

通过drm_crtc.head链接的CRTC对象列表。这在设备的生命周期内是不变的,因此不需要任何锁。

property_list

用drm_property.head链接的属性类型对象的列表。这在设备的生命周期内是不变的,因此不需要任何锁。

privobj_list

通过drm_private_obj.head链接的私有对象列表。这在设备的生命周期内是不变的,因此不需要任何锁。

min_width

此设备上的fb像素最小宽度

min_height

此设备上的fb像素最小高度

max_width

此设备上的fb像素最大宽度

max_height

此设备上的fb像素最大高度

funcs

提供模式设置功能的核心驱动

fb_base

framebuffer基址

poll_enabled

跟踪此设备的轮询支持

poll_running

跟踪此设备的轮询状态

  delayed_event
  跟踪此设备的延迟轮询uevent分发
  output_poll_work
  进程上下文中轮询的延迟工作  
  blob_lock
  用于blob属性分配和管理的互斥锁,保护property_blob_list和drm_file.blobs。
  property_blob_listdpms_property
  通过drm_property_blob.head链接的blob属性对象的列表。受blob_lock保护。
  edid_property
  默认连接器属性,用于保存当前连接的接收器的EDID(如果有的话)。
  dpms_property
  默认的连接器属性来控制连接器的DPMS状态。
  path_property
  默认连接器属性,用于保存端口的DP MST路径。
  tile_property
  默认连接器属性,用于存储平铺屏幕的平铺位置,对于需要用多个crtc驱动的接收器。
  link_status_property
  连接器的链接状态的默认连接器属性
  plane_type_property
  默认的平面属性,以区分光标、primary和overlay的传统类型平面。
  prop_src_x/prop_src_y/prop_src_w/prop_src_h
  在连接的drm_framebuffer中平面源位置的默认原子平面属性。
  prop_crtc_x/prop_crtc_y/prop_crtc_w/prop_crtc_h
  在drm_crtc中显示平面目标位置的默认原子平面属性。
  prop_fb_id
  指定drm_framebuffer的默认原子平面属性。
  prop_in_fence_fd
  表示同步文件fd,表示一个平面上要到来的fence。
  prop_out_fence_ptr
  Sync文件fd指针,表示一个CRTC的输出栅栏。用户空间应该提供一个指向s32类型值的指针,然后将该指针转换为u64类型。
  prop_crtc_id
  指定drm_crtc的默认原子平面属性。
  prop_fb_damage_clips
  可选的plane属性,将平面上的已用过区域标记在与平面相连的framebuffer的framebuffer坐标中。
  blob数据的布局只是一个drm_mode_rect数组。与平面src坐标不同,已用过的区域不在16.16 fixed point中。
  prop_active
  默认的原子CRTC属性来控制活动状态,这是原子驱动程序中DPMS的简化实现。
  prop_mode_id
  默认的原子CRTC属性,用于设置CRTC的模式。0模式意味着CRTC完全被禁用——所有连接器必须(包括活动的连接器)也必须设置为禁状态;
  prop_vrr_enabled
  默认的原子CRTC属性,以指示是否应该在CRTC上启用可变刷新率。
  dvi_i_subconnector_property
  可选DVI-I属性,以区分模拟或数字模式。
  dvi_i_select_subconnector_property
  模拟或数字模式之间选择的可选DVI-I属性。
  dp_subconnector_property
  可选DP属性,用于区分不同的DP下游端口类型。
  tv_subconnector_property
  可选的电视属性,以区分不同的电视连接器类型。
  tv_select_subconnector_property
  可选的电视属性,以选择不同的电视连接器类型。
  tv_mode_property
  可选电视属性选择输出电视模式。
  tv_left_margin_property/tv_right_margin_property/tv_top_margin_property/tv_bottom_margin_property
  可选的TV属性,以设置左/右/上/下边距(以像素表示)。
  tv_brightness_property
  可选电视属性设置亮度。
  tv_contrast_property
  可选的TV属性来设置对比度。
  tv_flicker_reduction_property
  可选的TV属性来控制闪烁减少模式。
  tv_overscan_property
  可选的TV属性来控制过扫描设置。
  tv_saturation_property
  可选的电视属性设置饱和度。
  tv_hue_property
  可选的TV属性来设置色调。
  scaling_mode_property
  可选的连接器属性来控制放大,主要用于内置面板。
  aspect_ratio_property
  可选的连接器属性,以控制HDMI信息帧长宽比设置。
  content_type_property
  可选的连接器属性来控制HDMI信息帧内容类型设置。
  degamma_lut_property
  可选的CRTC属性,设置用来将帧缓冲区的颜色转换为线性伽玛的LUT。
  degamma_lut_size_property
  驱动程序支持的degamma LUT大小,可选CRTC属性(只读)。
  ctm_property
  可选的CRTC属性,设置用于在degamma LUT中查找之后转换颜色的矩阵。
  gamma_lut_property
  可选的CRTC属性,通过颜色转换矩阵后,设置LUT用于转换颜色到连接屏幕的伽玛空间。
  gamma_lut_size_property
  可选的CRTC属性,驱动支持的伽玛查找表的大小(只读)。
  suggested_x_property/suggested_y_property
  可选的连接器属性,用于提示主机屏幕上的输出位置。
  non_desktop_property
  可选的连接器属性,提示设备不是标准显示器,控制台/桌面不应该显示在上面。
  panel_orientation_property
  可选的连接器属性,指示液晶面板如何安装在外壳内(例如:正常或倒置)。
  writeback_fb_id_property
  用于回写连接器的属性,存储输出帧缓冲区的ID。参见:drm_writeback_connector_init ()。
  writeback_pixel_formats_property
  回写连接器的属性,存储支持的像素格式的数组(只读)。参见:drm_writeback_connector_init ()。
  writeback_out_fence_ptr_property
  回写连接器属性,fd指针表示回写连接器的输出fences.用户空间应该提供一个指向s32类型值的指针,然后将该指针转换为u64类型。参见:drm_writeback_connector_init ()。
  hdr_output_metadata_property
  包含hdr元数据的连接器属性。这将由基于HDR内容的用户空间合成器提供。
  content_protection_property
  用于内容保护的drm枚举属性。参考drm_connector_attach_content_protection_property()。
  hdcp_content_type_property
  DRM枚举属性,表示所保护内容的类型。
  preferred_depth
  首选RBG像素深度,由fb助手使用。
  prefer_shadow
  提示用户空间首选shadow-fb渲染。
  prefer_shadow_fbdev
  提示用户空间优先使用shadow-fb渲染
  quirk_addfb_prefer_xbgr_30bpp
  传统addfb 跟踪调试属性,只能被nouveau内核驱动设置。
  quirk_addfb_prefer_host_byte_order
  当设置为true时,drm_mode_addfb()将在调用drm_mode_addfb2()时选择主机字节顺序的pixel_format。这就是drm_mode_addfb()从最开始应该工作的方式。但事实并非如此,所以我们最终在内核和用户空间驱动程序中都使用了一些古怪的方法来处理破坏的行为。简单地无条件地修复drm_mode_addfb()会破坏这些驱动程序,所以在这里添加一个怪异的位,允许驱动程序选择加入。
  async_page_flip
  这个设备在主平面上支持异步翻转吗?
  allow_fb_modifiers
  驱动程序是否支持ADDFB2.1 ioctl调用中的fb modifiers。
  重要提示:
  如果此属性设置为true,驱动程序必须在传统方法中,为其drm_mode_config_funcs.fb_create钩子函数中填写完整的隐式修饰符信息,否则对于需要修饰符的调用,GETFB2 ioctl调用会有问题。
  normalize_zpos
  如果为true, drm核心将调用drm_atomic_normalize_zpos()作为drm_atomic_helper_check()的原子模式检查的一部分。
  modifiers_property
  平面属性,表示支持的mofifier/format组合。
  cursor_width/cursor_height
  提示用户空间的最大光标宽度/高度。
  suspend_state
  暂停时的原子状态。由drm_mode_config_helper_suspend()设置,由drm_mode_config_helper_resume()清除。
  helper_private
  中间层私有数据。
  

KMS(3)

标签:内容类型   metadata   reference   htm   矩阵   钩子函数   head   端口   mic   

原文地址:https://www.cnblogs.com/lizhenneng/p/14315851.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!