1a649c2abSJani Nikula /* SPDX-License-Identifier: MIT */ 2a649c2abSJani Nikula /* 3a649c2abSJani Nikula * Copyright © 2019 Intel Corporation 4a649c2abSJani Nikula */ 5a649c2abSJani Nikula 6a649c2abSJani Nikula #ifndef __INTEL_PLANE_H__ 7a649c2abSJani Nikula #define __INTEL_PLANE_H__ 8a649c2abSJani Nikula 9a649c2abSJani Nikula #include <linux/types.h> 10a649c2abSJani Nikula 11a649c2abSJani Nikula struct drm_plane; 12a649c2abSJani Nikula struct drm_property; 13a649c2abSJani Nikula struct drm_rect; 14a649c2abSJani Nikula struct intel_atomic_state; 15a649c2abSJani Nikula struct intel_crtc; 16a649c2abSJani Nikula struct intel_crtc_state; 17a649c2abSJani Nikula struct intel_dsb; 18a649c2abSJani Nikula struct intel_plane; 19a649c2abSJani Nikula struct intel_plane_state; 20a649c2abSJani Nikula enum plane_id; 21a649c2abSJani Nikula 22a649c2abSJani Nikula struct intel_plane * 23a649c2abSJani Nikula intel_crtc_get_plane(struct intel_crtc *crtc, enum plane_id plane_id); 24a649c2abSJani Nikula bool intel_plane_can_async_flip(struct intel_plane *plane, u32 format, 25a649c2abSJani Nikula u64 modifier); 26a649c2abSJani Nikula unsigned int intel_adjusted_rate(const struct drm_rect *src, 27a649c2abSJani Nikula const struct drm_rect *dst, 28a649c2abSJani Nikula unsigned int rate); 29a649c2abSJani Nikula unsigned int intel_plane_pixel_rate(const struct intel_crtc_state *crtc_state, 30a649c2abSJani Nikula const struct intel_plane_state *plane_state); 31a649c2abSJani Nikula 32a649c2abSJani Nikula unsigned int intel_plane_data_rate(const struct intel_crtc_state *crtc_state, 33a649c2abSJani Nikula const struct intel_plane_state *plane_state, 34a649c2abSJani Nikula int color_plane); 35a649c2abSJani Nikula void intel_plane_copy_uapi_to_hw_state(struct intel_plane_state *plane_state, 36a649c2abSJani Nikula const struct intel_plane_state *from_plane_state, 37a649c2abSJani Nikula struct intel_crtc *crtc); 38a649c2abSJani Nikula void intel_plane_copy_hw_state(struct intel_plane_state *plane_state, 39a649c2abSJani Nikula const struct intel_plane_state *from_plane_state); 40a649c2abSJani Nikula void intel_plane_async_flip(struct intel_dsb *dsb, 41a649c2abSJani Nikula struct intel_plane *plane, 42a649c2abSJani Nikula const struct intel_crtc_state *crtc_state, 43a649c2abSJani Nikula const struct intel_plane_state *plane_state, 44a649c2abSJani Nikula bool async_flip); 45a649c2abSJani Nikula void intel_plane_update_noarm(struct intel_dsb *dsb, 46a649c2abSJani Nikula struct intel_plane *plane, 47a649c2abSJani Nikula const struct intel_crtc_state *crtc_state, 48a649c2abSJani Nikula const struct intel_plane_state *plane_state); 49a649c2abSJani Nikula void intel_plane_update_arm(struct intel_dsb *dsb, 50a649c2abSJani Nikula struct intel_plane *plane, 51a649c2abSJani Nikula const struct intel_crtc_state *crtc_state, 52a649c2abSJani Nikula const struct intel_plane_state *plane_state); 53a649c2abSJani Nikula void intel_plane_disable_arm(struct intel_dsb *dsb, 54a649c2abSJani Nikula struct intel_plane *plane, 55a649c2abSJani Nikula const struct intel_crtc_state *crtc_state); 56a649c2abSJani Nikula struct intel_plane *intel_plane_alloc(void); 57a649c2abSJani Nikula void intel_plane_free(struct intel_plane *plane); 58a649c2abSJani Nikula void intel_plane_destroy(struct drm_plane *plane); 59a649c2abSJani Nikula struct drm_plane_state *intel_plane_duplicate_state(struct drm_plane *plane); 60a649c2abSJani Nikula void intel_plane_destroy_state(struct drm_plane *plane, 61a649c2abSJani Nikula struct drm_plane_state *state); 62a649c2abSJani Nikula void intel_crtc_planes_update_noarm(struct intel_dsb *dsb, 63a649c2abSJani Nikula struct intel_atomic_state *state, 64a649c2abSJani Nikula struct intel_crtc *crtc); 65a649c2abSJani Nikula void intel_crtc_planes_update_arm(struct intel_dsb *dsbx, 66a649c2abSJani Nikula struct intel_atomic_state *state, 67a649c2abSJani Nikula struct intel_crtc *crtc); 68a649c2abSJani Nikula int intel_plane_atomic_check_with_state(const struct intel_crtc_state *old_crtc_state, 69a649c2abSJani Nikula struct intel_crtc_state *crtc_state, 70a649c2abSJani Nikula const struct intel_plane_state *old_plane_state, 71a649c2abSJani Nikula struct intel_plane_state *intel_state); 72a649c2abSJani Nikula int intel_plane_calc_min_cdclk(struct intel_atomic_state *state, 73a649c2abSJani Nikula struct intel_plane *plane, 74a649c2abSJani Nikula bool *need_cdclk_calc); 7515af755fSJani Nikula int intel_plane_check_clipping(struct intel_plane_state *plane_state, 76a649c2abSJani Nikula struct intel_crtc_state *crtc_state, 77a649c2abSJani Nikula int min_scale, int max_scale, 78a649c2abSJani Nikula bool can_position); 79a649c2abSJani Nikula int intel_plane_check_src_coordinates(struct intel_plane_state *plane_state); 80a649c2abSJani Nikula void intel_plane_set_invisible(struct intel_crtc_state *crtc_state, 81a649c2abSJani Nikula struct intel_plane_state *plane_state); 82a649c2abSJani Nikula void intel_plane_helper_add(struct intel_plane *plane); 83a649c2abSJani Nikula bool intel_plane_needs_physical(struct intel_plane *plane); 84a649c2abSJani Nikula void intel_plane_init_cursor_vblank_work(struct intel_plane_state *old_plane_state, 85a649c2abSJani Nikula struct intel_plane_state *new_plane_state); 86*be8f5f88SJani Nikula int intel_plane_add_affected(struct intel_atomic_state *state, 87a649c2abSJani Nikula struct intel_crtc *crtc); 88b603034fSJani Nikula int intel_plane_atomic_check(struct intel_atomic_state *state); 89a649c2abSJani Nikula 90a649c2abSJani Nikula u32 intel_plane_ggtt_offset(const struct intel_plane_state *plane_state); 91a649c2abSJani Nikula bool intel_plane_format_mod_supported_async(struct drm_plane *plane, 92a649c2abSJani Nikula u32 format, 93a649c2abSJani Nikula u64 modifier); 94a649c2abSJani Nikula 95a649c2abSJani Nikula #endif /* __INTEL_PLANE_H__ */ 96