1 // SPDX-License-Identifier: GPL-2.0-only OR MIT
2 /* Copyright The Asahi Linux Contributors */
3
4 #include "iomfb_v12_3.h"
5 #include "iomfb_v13_3.h"
6 #include "version_utils.h"
7
8 static const struct dcp_method_entry dcp_methods[dcpep_num_methods] = {
9 IOMFB_METHOD("A000", dcpep_late_init_signal),
10 IOMFB_METHOD("A029", dcpep_setup_video_limits),
11 IOMFB_METHOD("A131", iomfbep_a131_pmu_service_matched),
12 IOMFB_METHOD("A132", iomfbep_a132_backlight_service_matched),
13 IOMFB_METHOD("A357", dcpep_set_create_dfb),
14 IOMFB_METHOD("A358", iomfbep_a358_vi_set_temperature_hint),
15 IOMFB_METHOD("A401", dcpep_start_signal),
16 IOMFB_METHOD("A407", dcpep_swap_start),
17 IOMFB_METHOD("A408", dcpep_swap_submit),
18 IOMFB_METHOD("A410", dcpep_set_display_device),
19 IOMFB_METHOD("A411", dcpep_is_main_display),
20 IOMFB_METHOD("A412", dcpep_set_digital_out_mode),
21 IOMFB_METHOD("A422", iomfbep_set_matrix),
22 IOMFB_METHOD("A426", iomfbep_get_color_remap_mode),
23 IOMFB_METHOD("A439", dcpep_set_parameter_dcp),
24 IOMFB_METHOD("A443", dcpep_create_default_fb),
25 IOMFB_METHOD("A447", dcpep_enable_disable_video_power_savings),
26 IOMFB_METHOD("A454", dcpep_first_client_open),
27 IOMFB_METHOD("A455", iomfbep_last_client_close),
28 IOMFB_METHOD("A460", dcpep_set_display_refresh_properties),
29 IOMFB_METHOD("A463", dcpep_flush_supports_power),
30 IOMFB_METHOD("A464", iomfbep_abort_swaps_dcp),
31 IOMFB_METHOD("A468", dcpep_set_power_state),
32 };
33
34 #define DCP_FW v12_3
35 #define DCP_FW_VER DCP_FW_VERSION(12, 3, 0)
36
37 #include "iomfb_template.c"
38
39 static const iomfb_cb_handler cb_handlers[IOMFB_MAX_CB] = {
40 [0] = trampoline_true, /* did_boot_signal */
41 [1] = trampoline_true, /* did_power_on_signal */
42 [2] = trampoline_nop, /* will_power_off_signal */
43 [3] = trampoline_rt_bandwidth,
44 [100] = iomfbep_cb_match_pmu_service,
45 [101] = trampoline_zero, /* get_display_default_stride */
46 [102] = trampoline_nop, /* set_number_property */
47 [103] = trampoline_nop, /* set_boolean_property */
48 [106] = trampoline_nop, /* remove_property */
49 [107] = trampoline_true, /* create_provider_service */
50 [108] = trampoline_true, /* create_product_service */
51 [109] = trampoline_true, /* create_pmu_service */
52 [110] = trampoline_true, /* create_iomfb_service */
53 [111] = trampoline_create_backlight_service,
54 [116] = dcpep_cb_boot_1,
55 [117] = trampoline_false, /* is_dark_boot */
56 [118] = trampoline_false, /* is_dark_boot / is_waking_from_hibernate*/
57 [120] = trampoline_read_edt_data,
58 [122] = trampoline_prop_start,
59 [123] = trampoline_prop_chunk,
60 [124] = trampoline_prop_end,
61 [201] = trampoline_map_piodma,
62 [202] = trampoline_unmap_piodma,
63 [206] = iomfbep_cb_match_pmu_service_2,
64 [207] = iomfbep_cb_match_backlight_service,
65 [208] = trampoline_get_time,
66 [211] = trampoline_nop, /* update_backlight_factor_prop */
67 [300] = trampoline_pr_publish,
68 [401] = trampoline_get_uint_prop,
69 [404] = trampoline_nop, /* sr_set_uint_prop */
70 [406] = trampoline_set_fx_prop,
71 [408] = trampoline_get_frequency,
72 [411] = trampoline_map_reg,
73 [413] = trampoline_true, /* sr_set_property_dict */
74 [414] = trampoline_sr_set_property_int,
75 [415] = trampoline_true, /* sr_set_property_bool */
76 [451] = trampoline_allocate_buffer,
77 [452] = trampoline_map_physical,
78 [456] = trampoline_release_mem_desc,
79 [552] = trampoline_true, /* set_property_dict_0 */
80 [561] = trampoline_true, /* set_property_dict */
81 [563] = trampoline_true, /* set_property_int */
82 [565] = trampoline_true, /* set_property_bool */
83 [567] = trampoline_true, /* set_property_str */
84 [574] = trampoline_zero, /* power_up_dart */
85 [576] = trampoline_hotplug,
86 [577] = trampoline_nop, /* powerstate_notify */
87 [582] = trampoline_true, /* create_default_fb_surface */
88 [584] = trampoline_nop, /* IOMobileFramebufferAP::clear_default_surface */
89 [588] = trampoline_nop, /* resize_default_fb_surface_gated */
90 [589] = trampoline_swap_complete,
91 [591] = trampoline_swap_complete_intent_gated,
92 [592] = trampoline_abort_swap_ap_gated,
93 [593] = trampoline_enable_backlight_message_ap_gated,
94 [594] = trampoline_nop, /* IOMobileFramebufferAP::setSystemConsoleMode */
95 [596] = trampoline_false, /* IOMobileFramebufferAP::isDFBAllocated */
96 [597] = trampoline_false, /* IOMobileFramebufferAP::preserveContents */
97 [598] = trampoline_nop, /* find_swap_function_gated */
98 };
99
DCP_FW_NAME(iomfb_start)100 void DCP_FW_NAME(iomfb_start)(struct apple_dcp *dcp)
101 {
102 dcp->cb_handlers = cb_handlers;
103
104 dcp_start_signal(dcp, false, dcp_started, NULL);
105 }
106
107 #undef DCP_FW_VER
108 #undef DCP_FW
109