1/* SPDX-License-Identifier: MIT */
2/*
3 * Copyright © 2019 Intel Corporation
4 */
5
6#ifndef __INTEL_DMC_H__
7#define __INTEL_DMC_H__
8
9#include <linux/types.h>
10
11enum pipe;
12enum pipedmc_event_id;
13struct drm_printer;
14struct intel_crtc;
15struct intel_crtc_state;
16struct intel_display;
17struct intel_dmc_snapshot;
18
19void intel_dmc_init(struct intel_display *display);
20void intel_dmc_load_program(struct intel_display *display);
21void intel_dmc_wait_fw_load(struct intel_display *display);
22void intel_dmc_disable_program(struct intel_display *display);
23void intel_dmc_enable_pipe(const struct intel_crtc_state *crtc_state);
24void intel_dmc_disable_pipe(const struct intel_crtc_state *crtc_state);
25void intel_dmc_block_pkgc(struct intel_display *display, enum pipe pipe,
26 bool block);
27void intel_dmc_start_pkgc_exit_at_start_of_undelayed_vblank(struct intel_display *display,
28 enum pipe pipe, bool enable);
29void intel_dmc_fini(struct intel_display *display);
30void intel_dmc_suspend(struct intel_display *display);
31void intel_dmc_resume(struct intel_display *display);
32bool intel_dmc_has_payload(struct intel_display *display);
33void intel_dmc_debugfs_register(struct intel_display *display);
34
35struct intel_dmc_snapshot *intel_dmc_snapshot_capture(struct intel_display *display);
36void intel_dmc_snapshot_print(const struct intel_dmc_snapshot *snapshot, struct drm_printer *p);
37void intel_dmc_update_dc6_allowed_count(struct intel_display *display, bool start_tracking);
38
39void assert_main_dmc_loaded(struct intel_display *display);
40
41void intel_pipedmc_irq_handler(struct intel_display *display, enum pipe pipe);
42
43u32 intel_pipedmc_start_mmioaddr(struct intel_crtc *crtc);
44void intel_pipedmc_enable_event(struct intel_crtc *crtc,
45 enum pipedmc_event_id event);
46void intel_pipedmc_disable_event(struct intel_crtc *crtc,
47 enum pipedmc_event_id event);
48
49void intel_pipedmc_irq_handler(struct intel_display *display, enum pipe pipe);
50
51#endif /* __INTEL_DMC_H__ */
52