| #ifndef HW_XTENSA_BOOTPARAM_H | 
 | #define HW_XTENSA_BOOTPARAM_H | 
 |  | 
 | #include "exec/cpu-common.h" | 
 |  | 
 | #define BP_TAG_COMMAND_LINE     0x1001  /* command line (0-terminated string)*/ | 
 | #define BP_TAG_INITRD           0x1002  /* ramdisk addr and size (bp_meminfo) */ | 
 | #define BP_TAG_MEMORY           0x1003  /* memory addr and size (bp_meminfo) */ | 
 | #define BP_TAG_SERIAL_BAUDRATE  0x1004  /* baud rate of current console. */ | 
 | #define BP_TAG_SERIAL_PORT      0x1005  /* serial device of current console */ | 
 | #define BP_TAG_FDT              0x1006  /* flat device tree addr */ | 
 |  | 
 | #define BP_TAG_FIRST            0x7B0B  /* first tag with a version number */ | 
 | #define BP_TAG_LAST             0x7E0B  /* last tag */ | 
 |  | 
 | typedef struct BpTag { | 
 |     uint16_t tag; | 
 |     uint16_t size; | 
 | } BpTag; | 
 |  | 
 | typedef struct BpMemInfo { | 
 |     uint32_t type; | 
 |     uint32_t start; | 
 |     uint32_t end; | 
 | } BpMemInfo; | 
 |  | 
 | #define MEMORY_TYPE_CONVENTIONAL        0x1000 | 
 | #define MEMORY_TYPE_NONE                0x2000 | 
 |  | 
 | static inline size_t get_tag_size(size_t data_size) | 
 | { | 
 |     return data_size + sizeof(BpTag) + 4; | 
 | } | 
 |  | 
 | static inline ram_addr_t put_tag(ram_addr_t addr, uint16_t tag, | 
 |         size_t size, const void *data) | 
 | { | 
 |     BpTag bp_tag = { | 
 |         .tag = tswap16(tag), | 
 |         .size = tswap16((size + 3) & ~3), | 
 |     }; | 
 |  | 
 |     cpu_physical_memory_write(addr, &bp_tag, sizeof(bp_tag)); | 
 |     addr += sizeof(bp_tag); | 
 |     cpu_physical_memory_write(addr, data, size); | 
 |     addr += (size + 3) & ~3; | 
 |  | 
 |     return addr; | 
 | } | 
 |  | 
 | #endif |