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