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