161f1c4a8Sjames qian wang (Arm Technology China) /* SPDX-License-Identifier: GPL-2.0 */ 261f1c4a8Sjames qian wang (Arm Technology China) /* 361f1c4a8Sjames qian wang (Arm Technology China) * (C) COPYRIGHT 2018 ARM Limited. All rights reserved. 461f1c4a8Sjames qian wang (Arm Technology China) * Author: James.Qian.Wang <james.qian.wang@arm.com> 561f1c4a8Sjames qian wang (Arm Technology China) * 661f1c4a8Sjames qian wang (Arm Technology China) */ 761f1c4a8Sjames qian wang (Arm Technology China) #ifndef _KOMEDA_KMS_H_ 861f1c4a8Sjames qian wang (Arm Technology China) #define _KOMEDA_KMS_H_ 961f1c4a8Sjames qian wang (Arm Technology China) 1061f1c4a8Sjames qian wang (Arm Technology China) #include <drm/drm_atomic.h> 1161f1c4a8Sjames qian wang (Arm Technology China) #include <drm/drm_atomic_helper.h> 1261f1c4a8Sjames qian wang (Arm Technology China) #include <drm/drm_crtc_helper.h> 136649a95dSSam Ravnborg #include <drm/drm_device.h> 1461f1c4a8Sjames qian wang (Arm Technology China) #include <drm/drm_writeback.h> 15f5f0a68eSjames qian wang (Arm Technology China) #include <video/videomode.h> 16f5f0a68eSjames qian wang (Arm Technology China) #include <video/display_timing.h> 1761f1c4a8Sjames qian wang (Arm Technology China) 188c919745Sjames qian wang (Arm Technology China) /** 198c919745Sjames qian wang (Arm Technology China) * struct komeda_plane - komeda instance of drm_plane 208c919745Sjames qian wang (Arm Technology China) */ 2161f1c4a8Sjames qian wang (Arm Technology China) struct komeda_plane { 2261f1c4a8Sjames qian wang (Arm Technology China) /** @base: &drm_plane */ 2361f1c4a8Sjames qian wang (Arm Technology China) struct drm_plane base; 2461f1c4a8Sjames qian wang (Arm Technology China) /** 2561f1c4a8Sjames qian wang (Arm Technology China) * @layer: 2661f1c4a8Sjames qian wang (Arm Technology China) * 2761f1c4a8Sjames qian wang (Arm Technology China) * represents available layer input pipelines for this plane. 2861f1c4a8Sjames qian wang (Arm Technology China) * 2961f1c4a8Sjames qian wang (Arm Technology China) * NOTE: 3061f1c4a8Sjames qian wang (Arm Technology China) * the layer is not for a specific Layer, but indicate a group of 3161f1c4a8Sjames qian wang (Arm Technology China) * Layers with same capabilities. 3261f1c4a8Sjames qian wang (Arm Technology China) */ 3361f1c4a8Sjames qian wang (Arm Technology China) struct komeda_layer *layer; 3461f1c4a8Sjames qian wang (Arm Technology China) }; 3561f1c4a8Sjames qian wang (Arm Technology China) 3661f1c4a8Sjames qian wang (Arm Technology China) /** 3761f1c4a8Sjames qian wang (Arm Technology China) * struct komeda_plane_state 3861f1c4a8Sjames qian wang (Arm Technology China) * 3961f1c4a8Sjames qian wang (Arm Technology China) * The plane_state can be split into two data flow (left/right) and handled 4061f1c4a8Sjames qian wang (Arm Technology China) * by two layers &komeda_plane.layer and &komeda_plane.layer.right 4161f1c4a8Sjames qian wang (Arm Technology China) */ 4261f1c4a8Sjames qian wang (Arm Technology China) struct komeda_plane_state { 4361f1c4a8Sjames qian wang (Arm Technology China) /** @base: &drm_plane_state */ 4461f1c4a8Sjames qian wang (Arm Technology China) struct drm_plane_state base; 4561f1c4a8Sjames qian wang (Arm Technology China) 4661f1c4a8Sjames qian wang (Arm Technology China) /* private properties */ 4761f1c4a8Sjames qian wang (Arm Technology China) }; 4861f1c4a8Sjames qian wang (Arm Technology China) 4961f1c4a8Sjames qian wang (Arm Technology China) /** 5061f1c4a8Sjames qian wang (Arm Technology China) * struct komeda_wb_connector 5161f1c4a8Sjames qian wang (Arm Technology China) */ 5261f1c4a8Sjames qian wang (Arm Technology China) struct komeda_wb_connector { 5361f1c4a8Sjames qian wang (Arm Technology China) /** @base: &drm_writeback_connector */ 5461f1c4a8Sjames qian wang (Arm Technology China) struct drm_writeback_connector base; 5561f1c4a8Sjames qian wang (Arm Technology China) 5661f1c4a8Sjames qian wang (Arm Technology China) /** @wb_layer: represents associated writeback pipeline of komeda */ 5761f1c4a8Sjames qian wang (Arm Technology China) struct komeda_layer *wb_layer; 5861f1c4a8Sjames qian wang (Arm Technology China) }; 5961f1c4a8Sjames qian wang (Arm Technology China) 6061f1c4a8Sjames qian wang (Arm Technology China) /** 6161f1c4a8Sjames qian wang (Arm Technology China) * struct komeda_crtc 6261f1c4a8Sjames qian wang (Arm Technology China) */ 6361f1c4a8Sjames qian wang (Arm Technology China) struct komeda_crtc { 6461f1c4a8Sjames qian wang (Arm Technology China) /** @base: &drm_crtc */ 6561f1c4a8Sjames qian wang (Arm Technology China) struct drm_crtc base; 6661f1c4a8Sjames qian wang (Arm Technology China) /** @master: only master has display output */ 6761f1c4a8Sjames qian wang (Arm Technology China) struct komeda_pipeline *master; 6861f1c4a8Sjames qian wang (Arm Technology China) /** 6961f1c4a8Sjames qian wang (Arm Technology China) * @slave: optional 7061f1c4a8Sjames qian wang (Arm Technology China) * 7161f1c4a8Sjames qian wang (Arm Technology China) * Doesn't have its own display output, the handled data flow will 7261f1c4a8Sjames qian wang (Arm Technology China) * merge into the master. 7361f1c4a8Sjames qian wang (Arm Technology China) */ 7461f1c4a8Sjames qian wang (Arm Technology China) struct komeda_pipeline *slave; 75b7925b61Sjames qian wang (Arm Technology China) 768c919745Sjames qian wang (Arm Technology China) /** @disable_done: this flip_done is for tracing the disable */ 77b7925b61Sjames qian wang (Arm Technology China) struct completion *disable_done; 7861f1c4a8Sjames qian wang (Arm Technology China) }; 7961f1c4a8Sjames qian wang (Arm Technology China) 808c919745Sjames qian wang (Arm Technology China) /** 818c919745Sjames qian wang (Arm Technology China) * struct komeda_crtc_state 828c919745Sjames qian wang (Arm Technology China) */ 8361f1c4a8Sjames qian wang (Arm Technology China) struct komeda_crtc_state { 8461f1c4a8Sjames qian wang (Arm Technology China) /** @base: &drm_crtc_state */ 8561f1c4a8Sjames qian wang (Arm Technology China) struct drm_crtc_state base; 8661f1c4a8Sjames qian wang (Arm Technology China) 8761f1c4a8Sjames qian wang (Arm Technology China) /* private properties */ 8861f1c4a8Sjames qian wang (Arm Technology China) 8961f1c4a8Sjames qian wang (Arm Technology China) /* computed state which are used by validate/check */ 908c919745Sjames qian wang (Arm Technology China) /** 918c919745Sjames qian wang (Arm Technology China) * @affected_pipes: 928c919745Sjames qian wang (Arm Technology China) * the affected pipelines in once display instance 938c919745Sjames qian wang (Arm Technology China) */ 9461f1c4a8Sjames qian wang (Arm Technology China) u32 affected_pipes; 958c919745Sjames qian wang (Arm Technology China) /** 968c919745Sjames qian wang (Arm Technology China) * @active_pipes: 978c919745Sjames qian wang (Arm Technology China) * the active pipelines in once display instance 988c919745Sjames qian wang (Arm Technology China) */ 9961f1c4a8Sjames qian wang (Arm Technology China) u32 active_pipes; 10061f1c4a8Sjames qian wang (Arm Technology China) }; 10161f1c4a8Sjames qian wang (Arm Technology China) 10261f1c4a8Sjames qian wang (Arm Technology China) /** struct komeda_kms_dev - for gather KMS related things */ 10361f1c4a8Sjames qian wang (Arm Technology China) struct komeda_kms_dev { 10461f1c4a8Sjames qian wang (Arm Technology China) /** @base: &drm_device */ 10561f1c4a8Sjames qian wang (Arm Technology China) struct drm_device base; 10661f1c4a8Sjames qian wang (Arm Technology China) 10761f1c4a8Sjames qian wang (Arm Technology China) /** @n_crtcs: valid numbers of crtcs in &komeda_kms_dev.crtcs */ 10861f1c4a8Sjames qian wang (Arm Technology China) int n_crtcs; 10961f1c4a8Sjames qian wang (Arm Technology China) /** @crtcs: crtcs list */ 11061f1c4a8Sjames qian wang (Arm Technology China) struct komeda_crtc crtcs[KOMEDA_MAX_PIPELINES]; 11161f1c4a8Sjames qian wang (Arm Technology China) }; 11261f1c4a8Sjames qian wang (Arm Technology China) 11361f1c4a8Sjames qian wang (Arm Technology China) #define to_kplane(p) container_of(p, struct komeda_plane, base) 11461f1c4a8Sjames qian wang (Arm Technology China) #define to_kplane_st(p) container_of(p, struct komeda_plane_state, base) 11561f1c4a8Sjames qian wang (Arm Technology China) #define to_kconn(p) container_of(p, struct komeda_wb_connector, base) 11661f1c4a8Sjames qian wang (Arm Technology China) #define to_kcrtc(p) container_of(p, struct komeda_crtc, base) 11761f1c4a8Sjames qian wang (Arm Technology China) #define to_kcrtc_st(p) container_of(p, struct komeda_crtc_state, base) 11861f1c4a8Sjames qian wang (Arm Technology China) #define to_kdev(p) container_of(p, struct komeda_kms_dev, base) 11961f1c4a8Sjames qian wang (Arm Technology China) 12061f1c4a8Sjames qian wang (Arm Technology China) int komeda_kms_setup_crtcs(struct komeda_kms_dev *kms, struct komeda_dev *mdev); 12161f1c4a8Sjames qian wang (Arm Technology China) 12261f1c4a8Sjames qian wang (Arm Technology China) int komeda_kms_add_crtcs(struct komeda_kms_dev *kms, struct komeda_dev *mdev); 12361f1c4a8Sjames qian wang (Arm Technology China) int komeda_kms_add_planes(struct komeda_kms_dev *kms, struct komeda_dev *mdev); 12461f1c4a8Sjames qian wang (Arm Technology China) int komeda_kms_add_private_objs(struct komeda_kms_dev *kms, 12561f1c4a8Sjames qian wang (Arm Technology China) struct komeda_dev *mdev); 126ee6b73d6Sjames qian wang (Arm Technology China) void komeda_kms_cleanup_private_objs(struct komeda_kms_dev *kms); 12761f1c4a8Sjames qian wang (Arm Technology China) 1280dac37bfSjames qian wang (Arm Technology China) void komeda_crtc_handle_event(struct komeda_crtc *kcrtc, 1290dac37bfSjames qian wang (Arm Technology China) struct komeda_events *evts); 1300dac37bfSjames qian wang (Arm Technology China) 13161f1c4a8Sjames qian wang (Arm Technology China) struct komeda_kms_dev *komeda_kms_attach(struct komeda_dev *mdev); 13261f1c4a8Sjames qian wang (Arm Technology China) void komeda_kms_detach(struct komeda_kms_dev *kms); 13361f1c4a8Sjames qian wang (Arm Technology China) 13461f1c4a8Sjames qian wang (Arm Technology China) #endif /*_KOMEDA_KMS_H_*/ 135