xref: /openbmc/qemu/hw/xtensa/bootparam.h (revision a118c4aff4087eafb68f7132b233ad548cf16376)
12a6a4076SMarkus Armbruster #ifndef HW_XTENSA_BOOTPARAM_H
22a6a4076SMarkus Armbruster #define HW_XTENSA_BOOTPARAM_H
3b707ab75SMax Filippov 
4*206e562cSPhilippe Mathieu-Daudé #include "exec/cpu-common.h"
5*206e562cSPhilippe Mathieu-Daudé 
662dbaedeSMax Filippov #define BP_TAG_COMMAND_LINE     0x1001  /* command line (0-terminated string)*/
762dbaedeSMax Filippov #define BP_TAG_INITRD           0x1002  /* ramdisk addr and size (bp_meminfo) */
862dbaedeSMax Filippov #define BP_TAG_MEMORY           0x1003  /* memory addr and size (bp_meminfo) */
962dbaedeSMax Filippov #define BP_TAG_SERIAL_BAUDRATE  0x1004  /* baud rate of current console. */
1062dbaedeSMax Filippov #define BP_TAG_SERIAL_PORT      0x1005  /* serial device of current console */
1162dbaedeSMax Filippov #define BP_TAG_FDT              0x1006  /* flat device tree addr */
1262dbaedeSMax Filippov 
1362dbaedeSMax Filippov #define BP_TAG_FIRST            0x7B0B  /* first tag with a version number */
1462dbaedeSMax Filippov #define BP_TAG_LAST             0x7E0B  /* last tag */
1562dbaedeSMax Filippov 
16b707ab75SMax Filippov typedef struct BpTag {
17b707ab75SMax Filippov     uint16_t tag;
18b707ab75SMax Filippov     uint16_t size;
19b707ab75SMax Filippov } BpTag;
20b707ab75SMax Filippov 
21b6edea8bSMax Filippov typedef struct BpMemInfo {
22b6edea8bSMax Filippov     uint32_t type;
23b6edea8bSMax Filippov     uint32_t start;
24b6edea8bSMax Filippov     uint32_t end;
25b6edea8bSMax Filippov } BpMemInfo;
26b6edea8bSMax Filippov 
27b6edea8bSMax Filippov #define MEMORY_TYPE_CONVENTIONAL        0x1000
28b6edea8bSMax Filippov #define MEMORY_TYPE_NONE                0x2000
29b6edea8bSMax Filippov 
get_tag_size(size_t data_size)30a9a28591SMax Filippov static inline size_t get_tag_size(size_t data_size)
31a9a28591SMax Filippov {
32a9a28591SMax Filippov     return data_size + sizeof(BpTag) + 4;
33a9a28591SMax Filippov }
34a9a28591SMax Filippov 
put_tag(ram_addr_t addr,uint16_t tag,size_t size,const void * data)35b707ab75SMax Filippov static inline ram_addr_t put_tag(ram_addr_t addr, uint16_t tag,
36b707ab75SMax Filippov         size_t size, const void *data)
37b707ab75SMax Filippov {
38b707ab75SMax Filippov     BpTag bp_tag = {
39b707ab75SMax Filippov         .tag = tswap16(tag),
40b707ab75SMax Filippov         .size = tswap16((size + 3) & ~3),
41b707ab75SMax Filippov     };
42b707ab75SMax Filippov 
43b707ab75SMax Filippov     cpu_physical_memory_write(addr, &bp_tag, sizeof(bp_tag));
44b707ab75SMax Filippov     addr += sizeof(bp_tag);
45b707ab75SMax Filippov     cpu_physical_memory_write(addr, data, size);
46b707ab75SMax Filippov     addr += (size + 3) & ~3;
47b707ab75SMax Filippov 
48b707ab75SMax Filippov     return addr;
49b707ab75SMax Filippov }
50b707ab75SMax Filippov 
51b707ab75SMax Filippov #endif
52