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