xref: /openbmc/qemu/hw/xtensa/bootparam.h (revision fcf5ef2a)
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