1 | #ifndef HW_XTENSA_BOOTPARAM_H |
2 | #define HW_XTENSA_BOOTPARAM_H |
3 | |
4 | #define BP_TAG_COMMAND_LINE 0x1001 /* command line (0-terminated string)*/ |
5 | #define BP_TAG_INITRD 0x1002 /* ramdisk addr and size (bp_meminfo) */ |
6 | #define BP_TAG_MEMORY 0x1003 /* memory addr and size (bp_meminfo) */ |
7 | #define BP_TAG_SERIAL_BAUDRATE 0x1004 /* baud rate of current console. */ |
8 | #define BP_TAG_SERIAL_PORT 0x1005 /* serial device of current console */ |
9 | #define BP_TAG_FDT 0x1006 /* flat device tree addr */ |
10 | |
11 | #define BP_TAG_FIRST 0x7B0B /* first tag with a version number */ |
12 | #define BP_TAG_LAST 0x7E0B /* last tag */ |
13 | |
14 | typedef struct BpTag { |
15 | uint16_t tag; |
16 | uint16_t size; |
17 | } BpTag; |
18 | |
19 | typedef struct BpMemInfo { |
20 | uint32_t type; |
21 | uint32_t start; |
22 | uint32_t end; |
23 | } BpMemInfo; |
24 | |
25 | #define MEMORY_TYPE_CONVENTIONAL 0x1000 |
26 | #define MEMORY_TYPE_NONE 0x2000 |
27 | |
28 | static inline size_t get_tag_size(size_t data_size) |
29 | { |
30 | return data_size + sizeof(BpTag) + 4; |
31 | } |
32 | |
33 | static inline ram_addr_t put_tag(ram_addr_t addr, uint16_t tag, |
34 | size_t size, const void *data) |
35 | { |
36 | BpTag bp_tag = { |
37 | .tag = tswap16(tag), |
38 | .size = tswap16((size + 3) & ~3), |
39 | }; |
40 | |
41 | cpu_physical_memory_write(addr, &bp_tag, sizeof(bp_tag)); |
42 | addr += sizeof(bp_tag); |
43 | cpu_physical_memory_write(addr, data, size); |
44 | addr += (size + 3) & ~3; |
45 | |
46 | return addr; |
47 | } |
48 | |
49 | #endif |
50 | |