xref: /xnu-11417.140.69/EXTERNAL_HEADERS/img4/4xnu.h (revision 43a90889846e00bfb5cf1d255cdc0a701a1e05a4)
1 /*!
2  * @header
3  * xnu-specific interfaces. These are hacks that only exist because xnu doesn't
4  * like linking static libraries, and we have a pre-existing contract for how to
5  * export our interfaces to xnu.
6  */
7 #ifndef __IMG4_4XNU_H
8 #define __IMG4_4XNU_H
9 
10 #ifndef __IMG4_INDIRECT
11 #error "Please #include <img4/firmware.h> instead of this file directly"
12 #endif // __IMG4_INDIRECT
13 
14 __BEGIN_DECLS
15 OS_ASSUME_NONNULL_BEGIN
16 OS_ASSUME_PTR_ABI_SINGLE_BEGIN
17 
18 /*!
19  * @function img4_get_manifest
20  * Returns a buffer representing the Image4 manifest bytes within the given DER
21  * blob.
22  *
23  * @param buff
24  * The buffer to examine for the Image4 manifest.
25  *
26  * @param len
27  * The length of {@link buff}.
28  *
29  * @param buff_storage
30  * Upon successful return, a buffer object which will contain a pointer to and
31  * the length of the Image4 manifest.
32  *
33  * @result
34  * Upon success, {@link buff_storage} is returned. If the DER blob contains no
35  * Image4 manifest, then NULL is returned.
36  */
37 #if !XNU_KERNEL_PRIVATE
38 IMG4_API_AVAILABLE_20211105
39 OS_EXPORT OS_WARN_RESULT OS_NONNULL1 OS_NONNULL3
40 const img4_buff_t *
41 img4_get_manifest(const void *__sized_by(len) buff, size_t len,
42 		img4_buff_t *buff_storage);
43 #else
44 #define img4_get_manifest(...) \
45 		(img4if->i4if_v15.get_manifest(__VA_ARGS__))
46 #endif
47 
48 /*!
49  * @function img4_get_payload
50  * Returns a buffer representing the Image4 payload bytes within the given DER
51  * blob.
52  *
53  * @param buff
54  * The buffer to examine for the Image4 payload.
55  *
56  * @param len
57  * The length of {@link buff}.
58  *
59  * @param buff_storage
60  * Upon successful return, a buffer object which will contain a pointer to and
61  * the length of the Image4 manifest.
62  *
63  * @result
64  * Upon success, {@link buff_storage} is returned. If the DER blob contains no
65  * Image4 payload, then NULL is returned.
66  */
67 #if !XNU_KERNEL_PRIVATE
68 IMG4_API_AVAILABLE_20211105
69 OS_EXPORT OS_WARN_RESULT OS_NONNULL1 OS_NONNULL3
70 const img4_buff_t *
71 img4_get_payload(const void *__sized_by(len) buff, size_t len,
72 		img4_buff_t *buff_storage);
73 #else
74 #define img4_get_payload(...) \
75 		(img4if->i4if_v15.get_payload(__VA_ARGS__))
76 #endif
77 
78 OS_ASSUME_PTR_ABI_SINGLE_END
79 OS_ASSUME_NONNULL_END
80 __END_DECLS
81 
82 #endif // __IMG4_4XNU_H
83