13cce6243Sblueswir1 #ifndef FW_CFG_H 23cce6243Sblueswir1 #define FW_CFG_H 33cce6243Sblueswir1 41dfe5057SHu Tao #ifndef NO_QEMU_PROTOS 51dfe5057SHu Tao #include <stdint.h> 61dfe5057SHu Tao #include <stddef.h> 71dfe5057SHu Tao 81dfe5057SHu Tao #include "exec/hwaddr.h" 9*45936c8bSMichael S. Tsirkin #include "qemu/typedefs.h" 101dfe5057SHu Tao #endif 111dfe5057SHu Tao 123cce6243Sblueswir1 #define FW_CFG_SIGNATURE 0x00 133cce6243Sblueswir1 #define FW_CFG_ID 0x01 14084a197aSblueswir1 #define FW_CFG_UUID 0x02 15905fdcb5Sblueswir1 #define FW_CFG_RAM_SIZE 0x03 16905fdcb5Sblueswir1 #define FW_CFG_NOGRAPHIC 0x04 17905fdcb5Sblueswir1 #define FW_CFG_NB_CPUS 0x05 18905fdcb5Sblueswir1 #define FW_CFG_MACHINE_ID 0x06 197e12f656Sblueswir1 #define FW_CFG_KERNEL_ADDR 0x07 207e12f656Sblueswir1 #define FW_CFG_KERNEL_SIZE 0x08 217e12f656Sblueswir1 #define FW_CFG_KERNEL_CMDLINE 0x09 227e12f656Sblueswir1 #define FW_CFG_INITRD_ADDR 0x0a 237e12f656Sblueswir1 #define FW_CFG_INITRD_SIZE 0x0b 247e12f656Sblueswir1 #define FW_CFG_BOOT_DEVICE 0x0c 2511c2fd3eSaliguori #define FW_CFG_NUMA 0x0d 2695387491SJan Kiszka #define FW_CFG_BOOT_MENU 0x0e 276be68d7eSJes Sorensen #define FW_CFG_MAX_CPUS 0x0f 2877873196SAlexander Graf #define FW_CFG_KERNEL_ENTRY 0x10 2977873196SAlexander Graf #define FW_CFG_KERNEL_DATA 0x11 3077873196SAlexander Graf #define FW_CFG_INITRD_DATA 0x12 3157a46d05SAlexander Graf #define FW_CFG_CMDLINE_ADDR 0x13 3257a46d05SAlexander Graf #define FW_CFG_CMDLINE_SIZE 0x14 3357a46d05SAlexander Graf #define FW_CFG_CMDLINE_DATA 0x15 3457a46d05SAlexander Graf #define FW_CFG_SETUP_ADDR 0x16 3557a46d05SAlexander Graf #define FW_CFG_SETUP_SIZE 0x17 3657a46d05SAlexander Graf #define FW_CFG_SETUP_DATA 0x18 37abe147e0SGerd Hoffmann #define FW_CFG_FILE_DIR 0x19 38abe147e0SGerd Hoffmann 39abe147e0SGerd Hoffmann #define FW_CFG_FILE_FIRST 0x20 40abe147e0SGerd Hoffmann #define FW_CFG_FILE_SLOTS 0x10 41abe147e0SGerd Hoffmann #define FW_CFG_MAX_ENTRY (FW_CFG_FILE_FIRST+FW_CFG_FILE_SLOTS) 423cce6243Sblueswir1 433cce6243Sblueswir1 #define FW_CFG_WRITE_CHANNEL 0x4000 443cce6243Sblueswir1 #define FW_CFG_ARCH_LOCAL 0x8000 453cce6243Sblueswir1 #define FW_CFG_ENTRY_MASK ~(FW_CFG_WRITE_CHANNEL | FW_CFG_ARCH_LOCAL) 463cce6243Sblueswir1 473cce6243Sblueswir1 #define FW_CFG_INVALID 0xffff 483cce6243Sblueswir1 493cce6243Sblueswir1 #ifndef NO_QEMU_PROTOS 50abe147e0SGerd Hoffmann typedef struct FWCfgFile { 51abe147e0SGerd Hoffmann uint32_t size; /* file size */ 52abe147e0SGerd Hoffmann uint16_t select; /* write this to 0x510 to read it */ 53abe147e0SGerd Hoffmann uint16_t reserved; 54abe147e0SGerd Hoffmann char name[56]; 55abe147e0SGerd Hoffmann } FWCfgFile; 56abe147e0SGerd Hoffmann 57abe147e0SGerd Hoffmann typedef struct FWCfgFiles { 58abe147e0SGerd Hoffmann uint32_t count; 59abe147e0SGerd Hoffmann FWCfgFile f[]; 60abe147e0SGerd Hoffmann } FWCfgFiles; 61abe147e0SGerd Hoffmann 623cce6243Sblueswir1 typedef void (*FWCfgCallback)(void *opaque, uint8_t *data); 633cce6243Sblueswir1 64089da572SMarkus Armbruster void fw_cfg_add_bytes(FWCfgState *s, uint16_t key, void *data, size_t len); 6544687f75SMarkus Armbruster void fw_cfg_add_string(FWCfgState *s, uint16_t key, const char *value); 664cad3867SMarkus Armbruster void fw_cfg_add_i16(FWCfgState *s, uint16_t key, uint16_t value); 674cad3867SMarkus Armbruster void fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value); 684cad3867SMarkus Armbruster void fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value); 694cad3867SMarkus Armbruster void fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback, 70089da572SMarkus Armbruster void *callback_opaque, void *data, size_t len); 71089da572SMarkus Armbruster void fw_cfg_add_file(FWCfgState *s, const char *filename, void *data, 72089da572SMarkus Armbruster size_t len); 73c2b5bda4SGerd Hoffmann FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, 74a8170e5eSAvi Kivity hwaddr crl_addr, hwaddr data_addr); 753cce6243Sblueswir1 763cce6243Sblueswir1 #endif /* NO_QEMU_PROTOS */ 773cce6243Sblueswir1 783cce6243Sblueswir1 #endif 79