xref: /xnu-11215.41.3/EXTERNAL_HEADERS/img4/api.h (revision 33de042d024d46de5ff4e89f2471de6608e37fa4)
1 /*!
2  * @header
3  * API definitions.
4  */
5 #ifndef __IMG4_API_H
6 #define __IMG4_API_H
7 
8 #ifndef __IMG4_INDIRECT
9 #error "Please #include <img4/firmware.h> instead of this file directly"
10 #endif // __IMG4_INDIRECT
11 
12 #include <img4/shim.h>
13 
14 /*!
15  * @const IMG4_API_VERSION
16  * The API version of the library. This version will be changed in accordance
17  * with new API introductions so that callers may submit code to the build that
18  * adopts those new APIs before the APIs land by using the following pattern:
19  *
20  *     #if IMG4_API_VERSION >= 20180424
21  *     img4_new_api();
22  *     #endif
23  *
24  * In this example, the library maintainer and API adopter agree on an API
25  * version of 20180424 ahead of time for the introduction of
26  * img4_new_api(). When a libdarwin with that API version is submitted, the
27  * project is rebuilt, and the new API becomes active.
28  *
29  * Breaking API changes will be both covered under this mechanism as well as
30  * individual preprocessor macros in this header that declare new behavior as
31  * required.
32  *
33  * @note
34  * For a period of time, the API version was incorrectly defined as 20212105
35  * when it should have been 20210521. Avoid version comparisons across that
36  * version epoch.
37  */
38 #define IMG4_API_VERSION (20221202u)
39 
40 #if IMG4_TARGET_DARWIN
41 #define IMG4_API_AVAILABLE_FALL_2018 \
42 		API_AVAILABLE( \
43 			macos(10.15), \
44 			ios(12.0), \
45 			tvos(12.0), \
46 			watchos(5.0))
47 
48 #define IMG4_API_DEPRECATED_FALL_2018 \
49 		API_DEPRECATED_WITH_REPLACEMENT( \
50 			"img4_firmware_t", \
51 			macos(10.15, 11.0), \
52 			ios(12.2, 14.0), \
53 			tvos(12.2, 14.0), \
54 			watchos(5.2, 7.0))
55 
56 #define IMG4_API_AVAILABLE_SPRING_2019 \
57 		API_AVAILABLE(\
58 			macos(10.15), \
59 			ios(12.2), \
60 			tvos(12.2), \
61 			watchos(5.2))
62 
63 #define IMG4_API_AVAILABLE_FALL_2020 \
64 		API_AVAILABLE( \
65 			macos(11.0), \
66 			ios(14.0), \
67 			tvos(14.0), \
68 			watchos(7.0), \
69 			bridgeos(5.0))
70 
71 #define IMG4_API_AVAILABLE_FALL_2021 \
72 		API_AVAILABLE( \
73 			macos(12.0), \
74 			ios(15.0), \
75 			tvos(15.0), \
76 			watchos(8.0), \
77 			bridgeos(6.0))
78 
79 #define IMG4_API_AVAILABLE_FALL_2021_B \
80 		API_AVAILABLE( \
81 			macos(12.1), \
82 			ios(15.1), \
83 			tvos(15.1), \
84 			watchos(8.1), \
85 			bridgeos(6.1))
86 #define IMG4_API_AVAILABLE_FALL_2022 \
87 		API_AVAILABLE( \
88 			macos(13.0), \
89 			ios(16.0), \
90 			tvos(16.0), \
91 			watchos(9.0), \
92 			bridgeos(7.0))
93 #define IMG4_API_AVAILABLE_SPRING_2023 \
94 		API_AVAILABLE( \
95 			macos(13.3), \
96 			ios(16.4), \
97 			tvos(16.4), \
98 			watchos(9.4), \
99 			bridgeos(7.4))
100 #else
101 #define IMG4_API_AVAILABLE_FALL_2018
102 #define IMG4_API_DEPRECATED_FALL_2018
103 #define IMG4_API_AVAILABLE_SPRING_2019
104 #define IMG4_API_AVAILABLE_FALL_2020
105 #define IMG4_API_AVAILABLE_FALL_2021
106 #define IMG4_API_AVAILABLE_FALL_2021_B
107 #define IMG4_API_AVAILABLE_FALL_2022
108 #define IMG4_API_AVAILABLE_SPRING_2023
109 #endif
110 
111 #define IMG4_API_AVAILABLE_20180112 IMG4_API_AVAILABLE_FALL_2018
112 #define IMG4_API_AVAILABLE_20181106 IMG4_API_AVAILABLE_SPRING_2019
113 #define IMG4_API_AVAILABLE_20200508 IMG4_API_AVAILABLE_FALL_2020
114 #define IMG4_API_AVAILABLE_20200608 IMG4_API_AVAILABLE_FALL_2020
115 #define IMG4_API_AVAILABLE_20200724 IMG4_API_AVAILABLE_FALL_2020
116 #define IMG4_API_AVAILABLE_20210113 IMG4_API_AVAILABLE_FALL_2021
117 #define IMG4_API_AVAILABLE_20210205 IMG4_API_AVAILABLE_FALL_2021
118 #define IMG4_API_AVAILABLE_20210226 IMG4_API_AVAILABLE_FALL_2021
119 #define IMG4_API_AVAILABLE_20210305 IMG4_API_AVAILABLE_FALL_2021
120 #define IMG4_API_AVAILABLE_20210521 IMG4_API_AVAILABLE_FALL_2021
121 #define IMG4_API_AVAILABLE_20210624 IMG4_API_AVAILABLE_FALL_2021
122 #define IMG4_API_AVAILABLE_20210731 IMG4_API_AVAILABLE_FALL_2021_B
123 #define IMG4_API_AVAILABLE_20211105 IMG4_API_AVAILABLE_FALL_2022
124 #define IMG4_API_AVAILABLE_20211112 IMG4_API_AVAILABLE_FALL_2022
125 #define IMG4_API_AVAILABLE_20211119 IMG4_API_AVAILABLE_FALL_2022
126 #define IMG4_API_AVAILABLE_20211126 IMG4_API_AVAILABLE_FALL_2022
127 #define IMG4_API_AVAILABLE_20211224 IMG4_API_AVAILABLE_FALL_2022
128 #define IMG4_API_AVAILABLE_20220128 IMG4_API_AVAILABLE_FALL_2022
129 #define IMG4_API_AVAILABLE_20220322 IMG4_API_AVAILABLE_FALL_2022
130 #define IMG4_API_AVAILABLE_20220401 IMG4_API_AVAILABLE_FALL_2022
131 #define IMG4_API_AVAILABLE_20220513 IMG4_API_AVAILABLE_FALL_2022
132 #define IMG4_API_AVAILABLE_20220711 IMG4_API_AVAILABLE_FALL_2022
133 #define IMG4_API_AVAILABLE_20220714 IMG4_API_AVAILABLE_FALL_2022
134 #define IMG4_API_AVAILABLE_20220715 IMG4_API_AVAILABLE_FALL_2022
135 #define IMG4_API_AVAILABLE_20220912 IMG4_API_AVAILABLE_FALL_2022
136 #define IMG4_API_AVAILABLE_20220915 IMG4_API_AVAILABLE_SPRING_2023
137 #define IMG4_API_AVAILABLE_20221202 IMG4_API_AVAILABLE_SPRING_2023
138 
139 /*!
140  * @typedef img4_struct_version_t
141  * A type describing the version of a structure in the library.
142  */
143 IMG4_API_AVAILABLE_20180112
144 typedef uint16_t img4_struct_version_t;
145 
146 #endif // __IMG4_API_H
147