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
14typedef struct BpTag {
15 uint16_t tag;
16 uint16_t size;
17} BpTag;
18
19typedef 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
28static inline size_t get_tag_size(size_t data_size)
29{
30 return data_size + sizeof(BpTag) + 4;
31}
32
33static 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