fw_cfg: make calls typesafe

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
Gerd Hoffmann 2009-12-18 12:01:09 +01:00 committed by Anthony Liguori
parent 8c52c8f320
commit c2b5bda43a
2 changed files with 21 additions and 21 deletions

View File

@ -45,11 +45,11 @@ typedef struct _FWCfgEntry {
FWCfgCallback callback; FWCfgCallback callback;
} FWCfgEntry; } FWCfgEntry;
typedef struct _FWCfgState { struct _FWCfgState {
FWCfgEntry entries[2][FW_CFG_MAX_ENTRY]; FWCfgEntry entries[2][FW_CFG_MAX_ENTRY];
uint16_t cur_entry; uint16_t cur_entry;
uint32_t cur_offset; uint32_t cur_offset;
} FWCfgState; };
static void fw_cfg_write(FWCfgState *s, uint8_t value) static void fw_cfg_write(FWCfgState *s, uint8_t value)
{ {
@ -210,9 +210,8 @@ static const VMStateDescription vmstate_fw_cfg = {
} }
}; };
int fw_cfg_add_bytes(void *opaque, uint16_t key, uint8_t *data, uint32_t len) int fw_cfg_add_bytes(FWCfgState *s, uint16_t key, uint8_t *data, uint32_t len)
{ {
FWCfgState *s = opaque;
int arch = !!(key & FW_CFG_ARCH_LOCAL); int arch = !!(key & FW_CFG_ARCH_LOCAL);
key &= FW_CFG_ENTRY_MASK; key &= FW_CFG_ENTRY_MASK;
@ -226,37 +225,36 @@ int fw_cfg_add_bytes(void *opaque, uint16_t key, uint8_t *data, uint32_t len)
return 1; return 1;
} }
int fw_cfg_add_i16(void *opaque, uint16_t key, uint16_t value) int fw_cfg_add_i16(FWCfgState *s, uint16_t key, uint16_t value)
{ {
uint16_t *copy; uint16_t *copy;
copy = qemu_malloc(sizeof(value)); copy = qemu_malloc(sizeof(value));
*copy = cpu_to_le16(value); *copy = cpu_to_le16(value);
return fw_cfg_add_bytes(opaque, key, (uint8_t *)copy, sizeof(value)); return fw_cfg_add_bytes(s, key, (uint8_t *)copy, sizeof(value));
} }
int fw_cfg_add_i32(void *opaque, uint16_t key, uint32_t value) int fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value)
{ {
uint32_t *copy; uint32_t *copy;
copy = qemu_malloc(sizeof(value)); copy = qemu_malloc(sizeof(value));
*copy = cpu_to_le32(value); *copy = cpu_to_le32(value);
return fw_cfg_add_bytes(opaque, key, (uint8_t *)copy, sizeof(value)); return fw_cfg_add_bytes(s, key, (uint8_t *)copy, sizeof(value));
} }
int fw_cfg_add_i64(void *opaque, uint16_t key, uint64_t value) int fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value)
{ {
uint64_t *copy; uint64_t *copy;
copy = qemu_malloc(sizeof(value)); copy = qemu_malloc(sizeof(value));
*copy = cpu_to_le64(value); *copy = cpu_to_le64(value);
return fw_cfg_add_bytes(opaque, key, (uint8_t *)copy, sizeof(value)); return fw_cfg_add_bytes(s, key, (uint8_t *)copy, sizeof(value));
} }
int fw_cfg_add_callback(void *opaque, uint16_t key, FWCfgCallback callback, int fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback,
void *callback_opaque, uint8_t *data, size_t len) void *callback_opaque, uint8_t *data, size_t len)
{ {
FWCfgState *s = opaque;
int arch = !!(key & FW_CFG_ARCH_LOCAL); int arch = !!(key & FW_CFG_ARCH_LOCAL);
if (!(key & FW_CFG_WRITE_CHANNEL)) if (!(key & FW_CFG_WRITE_CHANNEL))
@ -275,8 +273,8 @@ int fw_cfg_add_callback(void *opaque, uint16_t key, FWCfgCallback callback,
return 1; return 1;
} }
void *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port,
target_phys_addr_t ctl_addr, target_phys_addr_t data_addr) target_phys_addr_t ctl_addr, target_phys_addr_t data_addr)
{ {
FWCfgState *s; FWCfgState *s;
int io_ctl_memory, io_data_memory; int io_ctl_memory, io_data_memory;

View File

@ -37,14 +37,16 @@
#ifndef NO_QEMU_PROTOS #ifndef NO_QEMU_PROTOS
typedef void (*FWCfgCallback)(void *opaque, uint8_t *data); typedef void (*FWCfgCallback)(void *opaque, uint8_t *data);
int fw_cfg_add_bytes(void *opaque, uint16_t key, uint8_t *data, uint32_t len); typedef struct _FWCfgState FWCfgState;
int fw_cfg_add_i16(void *opaque, uint16_t key, uint16_t value); int fw_cfg_add_bytes(FWCfgState *s, uint16_t key, uint8_t *data, uint32_t len);
int fw_cfg_add_i32(void *opaque, uint16_t key, uint32_t value); int fw_cfg_add_i16(FWCfgState *s, uint16_t key, uint16_t value);
int fw_cfg_add_i64(void *opaque, uint16_t key, uint64_t value); int fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value);
int fw_cfg_add_callback(void *opaque, uint16_t key, FWCfgCallback callback, int fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value);
int fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback,
void *callback_opaque, uint8_t *data, size_t len); void *callback_opaque, uint8_t *data, size_t len);
void *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, int fw_cfg_add_file(FWCfgState *s, uint8_t type, uint8_t *data, uint32_t len);
target_phys_addr_t crl_addr, target_phys_addr_t data_addr); FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port,
target_phys_addr_t crl_addr, target_phys_addr_t data_addr);
#endif /* NO_QEMU_PROTOS */ #endif /* NO_QEMU_PROTOS */