50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef HW_XTENSA_BOOTPARAM
 | |
| #define HW_XTENSA_BOOTPARAM
 | |
| 
 | |
| #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
 | 
