Blame view

include/binman_sym.h 2.99 KB
197906326   Simon Glass   binman: Support a...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
  /*
   * Symbol access for symbols set up by binman as part of the build.
   *
   * This allows C code to access the position of a particular part of the image
   * assembled by binman.
   *
   * Copyright (c) 2017 Google, Inc
   *
   * SPDX-License-Identifier:     GPL-2.0+
   */
  
  #ifndef __BINMAN_SYM_H
  #define __BINMAN_SYM_H
  
  #define BINMAN_SYM_MISSING	(-1UL)
  
  #ifdef CONFIG_BINMAN
  
  /**
   * binman_symname() - Internal fnuction to get a binman symbol name
   *
   * @entry_name: Name of the entry to look for (e.g. 'u_boot_spl')
   * @_prop_name: Property value to get from that entry (e.g. 'pos')
   * @returns name of the symbol for that entry and property
   */
  #define binman_symname(_entry_name, _prop_name) \
  	_binman_ ## _entry_name ## _prop_ ## _prop_name
  
  /**
   * binman_sym_declare() - Declare a symbol that will be used at run-time
   *
   * @_type: Type f the symbol (e.g. unsigned long)
   * @entry_name: Name of the entry to look for (e.g. 'u_boot_spl')
   * @_prop_name: Property value to get from that entry (e.g. 'pos')
   */
  #define binman_sym_declare(_type, _entry_name, _prop_name) \
  	_type binman_symname(_entry_name, _prop_name) \
  		__attribute__((aligned(4), unused, section(".binman_sym")))
  
  /**
8bee2d251   Simon Glass   binman: Add binma...
41
42
43
44
45
46
47
48
49
50
51
   * binman_sym_extern() - Declare a extern symbol that will be used at run-time
   *
   * @_type: Type f the symbol (e.g. unsigned long)
   * @entry_name: Name of the entry to look for (e.g. 'u_boot_spl')
   * @_prop_name: Property value to get from that entry (e.g. 'pos')
   */
  #define binman_sym_extern(_type, _entry_name, _prop_name) \
  	extern _type binman_symname(_entry_name, _prop_name) \
  		__attribute__((aligned(4), unused, section(".binman_sym")))
  
  /**
197906326   Simon Glass   binman: Support a...
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
   * binman_sym_declare_optional() - Declare an optional symbol
   *
   * If this symbol cannot be provided by binman, an error will not be generated.
   * Instead the image will be assigned the value BINMAN_SYM_MISSING.
   *
   * @_type: Type f the symbol (e.g. unsigned long)
   * @entry_name: Name of the entry to look for (e.g. 'u_boot_spl')
   * @_prop_name: Property value to get from that entry (e.g. 'pos')
   */
  #define binman_sym_declare_optional(_type, _entry_name, _prop_name) \
  	_type binman_symname(_entry_name, _prop_name) \
  		__attribute__((aligned(4), weak, unused, \
  		section(".binman_sym")))
  
  /**
   * binman_sym() - Access a previously declared symbol
   *
   * This is used to get the value of a symbol. E.g.:
   *
   *    ulong address = binman_sym(ulong, u_boot_spl, pos);
   *
   * @_type: Type f the symbol (e.g. unsigned long)
   * @entry_name: Name of the entry to look for (e.g. 'u_boot_spl')
   * @_prop_name: Property value to get from that entry (e.g. 'pos')
   * @returns value of that property (filled in by binman)
   */
  #define binman_sym(_type, _entry_name, _prop_name) \
  	(*(_type *)&binman_symname(_entry_name, _prop_name))
  
  #else /* !BINMAN */
  
  #define binman_sym_declare(_type, _entry_name, _prop_name)
  
  #define binman_sym_declare_optional(_type, _entry_name, _prop_name)
8bee2d251   Simon Glass   binman: Add binma...
86
  #define binman_sym_extern(_type, _entry_name, _prop_name)
197906326   Simon Glass   binman: Support a...
87
88
89
90
91
  #define binman_sym(_type, _entry_name, _prop_name) BINMAN_SYM_MISSING
  
  #endif /* BINMAN */
  
  #endif