xref: /qemu/hw/xtensa/bootparam.h (revision 513823e7521a09ed7ad1e32e6454bac3b2cbf52d)
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 
31 static inline size_t get_tag_size(size_t data_size)
32 {
33     return data_size + sizeof(BpTag) + 4;
34 }
35 
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