mirror of https://github.com/xqemu/xqemu.git
register: QOMify
QOMify registers as a child of TYPE_DEVICE. This allows registers to define GPIOs. Define an init helper that will do QOM initialisation. Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> Signed-off-by: Alistair Francis <alistair.francis@xilinx.com> Reviewed-by: KONRAD Frederic <fred.konrad@greensocs.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 2545f71db26bf5586ca0c08a3e3cf1b217450552.1467053537.git.alistair.francis@xilinx.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
684204593d
commit
49e14ddbce
|
@ -159,6 +159,17 @@ void register_reset(RegisterInfo *reg)
|
||||||
register_write_val(reg, reg->access->reset);
|
register_write_val(reg, reg->access->reset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void register_init(RegisterInfo *reg)
|
||||||
|
{
|
||||||
|
assert(reg);
|
||||||
|
|
||||||
|
if (!reg->data || !reg->access) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
object_initialize((void *)reg, sizeof(*reg), TYPE_REGISTER);
|
||||||
|
}
|
||||||
|
|
||||||
void register_write_memory(void *opaque, hwaddr addr,
|
void register_write_memory(void *opaque, hwaddr addr,
|
||||||
uint64_t value, unsigned size)
|
uint64_t value, unsigned size)
|
||||||
{
|
{
|
||||||
|
@ -217,3 +228,15 @@ uint64_t register_read_memory(void *opaque, hwaddr addr,
|
||||||
|
|
||||||
return extract64(read_val, 0, size * 8);
|
return extract64(read_val, 0, size * 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const TypeInfo register_info = {
|
||||||
|
.name = TYPE_REGISTER,
|
||||||
|
.parent = TYPE_DEVICE,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void register_register_types(void)
|
||||||
|
{
|
||||||
|
type_register_static(®ister_info);
|
||||||
|
}
|
||||||
|
|
||||||
|
type_init(register_register_types)
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#ifndef REGISTER_H
|
#ifndef REGISTER_H
|
||||||
#define REGISTER_H
|
#define REGISTER_H
|
||||||
|
|
||||||
|
#include "hw/qdev-core.h"
|
||||||
#include "exec/memory.h"
|
#include "exec/memory.h"
|
||||||
|
|
||||||
typedef struct RegisterInfo RegisterInfo;
|
typedef struct RegisterInfo RegisterInfo;
|
||||||
|
@ -72,6 +73,9 @@ struct RegisterAccessInfo {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct RegisterInfo {
|
struct RegisterInfo {
|
||||||
|
/* <private> */
|
||||||
|
DeviceState parent_obj;
|
||||||
|
|
||||||
/* <public> */
|
/* <public> */
|
||||||
void *data;
|
void *data;
|
||||||
int data_size;
|
int data_size;
|
||||||
|
@ -81,6 +85,9 @@ struct RegisterInfo {
|
||||||
void *opaque;
|
void *opaque;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define TYPE_REGISTER "qemu,register"
|
||||||
|
#define REGISTER(obj) OBJECT_CHECK(RegisterInfo, (obj), TYPE_REGISTER)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This structure is used to group all of the individual registers which are
|
* This structure is used to group all of the individual registers which are
|
||||||
* modeled using the RegisterInfo structure.
|
* modeled using the RegisterInfo structure.
|
||||||
|
@ -131,6 +138,13 @@ uint64_t register_read(RegisterInfo *reg, uint64_t re, const char* prefix,
|
||||||
|
|
||||||
void register_reset(RegisterInfo *reg);
|
void register_reset(RegisterInfo *reg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize a register.
|
||||||
|
* @reg: Register to initialize
|
||||||
|
*/
|
||||||
|
|
||||||
|
void register_init(RegisterInfo *reg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Memory API MMIO write handler that will write to a Register API register.
|
* Memory API MMIO write handler that will write to a Register API register.
|
||||||
* @opaque: RegisterInfo to write to
|
* @opaque: RegisterInfo to write to
|
||||||
|
|
Loading…
Reference in New Issue