43796935a65e9fa09e982f2660ff21b1e3b0bc5a
[project/bcm63xx/atf.git] / include / drivers / auth / img_parser_mod.h
1 /*
2 * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #ifndef IMG_PARSER_MOD_H
8 #define IMG_PARSER_MOD_H
9
10 #include <auth_common.h>
11
12 /*
13 * Return values
14 */
15 enum img_parser_ret_value {
16 IMG_PARSER_OK,
17 IMG_PARSER_ERR, /* Parser internal error */
18 IMG_PARSER_ERR_FORMAT, /* Malformed image */
19 IMG_PARSER_ERR_NOT_FOUND /* Authentication data not found */
20 };
21
22 /*
23 * Image types. A parser should be instantiated and registered for each type
24 */
25 typedef enum img_type_enum {
26 IMG_RAW, /* Binary image */
27 IMG_PLAT, /* Platform specific format */
28 IMG_CERT, /* X509v3 certificate */
29 IMG_MAX_TYPES,
30 } img_type_t;
31
32 /* Image parser library structure */
33 typedef struct img_parser_lib_desc_s {
34 img_type_t img_type;
35 const char *name;
36
37 void (*init)(void);
38 int (*check_integrity)(void *img, unsigned int img_len);
39 int (*get_auth_param)(const auth_param_type_desc_t *type_desc,
40 void *img, unsigned int img_len,
41 void **param, unsigned int *param_len);
42 } img_parser_lib_desc_t;
43
44 /* Exported functions */
45 void img_parser_init(void);
46 int img_parser_check_integrity(img_type_t img_type,
47 void *img_ptr, unsigned int img_len);
48 int img_parser_get_auth_param(img_type_t img_type,
49 const auth_param_type_desc_t *type_desc,
50 void *img_ptr, unsigned int img_len,
51 void **param_ptr, unsigned int *param_len);
52
53 /* Macro to register an image parser library */
54 #define REGISTER_IMG_PARSER_LIB(_type, _name, _init, _check_int, _get_param) \
55 static const img_parser_lib_desc_t __img_parser_lib_desc_##_type \
56 __section(".img_parser_lib_descs") __used = { \
57 .img_type = _type, \
58 .name = _name, \
59 .init = _init, \
60 .check_integrity = _check_int, \
61 .get_auth_param = _get_param \
62 }
63
64 #endif /* IMG_PARSER_MOD_H */