提交 104059da 编写于 作者: P Paolo Bonzini 提交者: Andreas Färber

qdev: Add enum property types to QAPI schema

Reviewed-by: NIgor Mammedov <imammedo@redhat.com>
Reviewed-by: NEric Blake <eblake@redhat.com>
Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: NAndreas Färber <afaerber@suse.de>
上级 f31c41ff
...@@ -449,36 +449,22 @@ PropertyInfo qdev_prop_macaddr = { ...@@ -449,36 +449,22 @@ PropertyInfo qdev_prop_macaddr = {
/* --- lost tick policy --- */ /* --- lost tick policy --- */
static const char *lost_tick_policy_table[LOST_TICK_MAX+1] = {
[LOST_TICK_DISCARD] = "discard",
[LOST_TICK_DELAY] = "delay",
[LOST_TICK_MERGE] = "merge",
[LOST_TICK_SLEW] = "slew",
[LOST_TICK_MAX] = NULL,
};
QEMU_BUILD_BUG_ON(sizeof(LostTickPolicy) != sizeof(int)); QEMU_BUILD_BUG_ON(sizeof(LostTickPolicy) != sizeof(int));
PropertyInfo qdev_prop_losttickpolicy = { PropertyInfo qdev_prop_losttickpolicy = {
.name = "LostTickPolicy", .name = "LostTickPolicy",
.enum_table = lost_tick_policy_table, .enum_table = LostTickPolicy_lookup,
.get = get_enum, .get = get_enum,
.set = set_enum, .set = set_enum,
}; };
/* --- BIOS CHS translation */ /* --- BIOS CHS translation */
static const char *bios_chs_trans_table[] = { QEMU_BUILD_BUG_ON(sizeof(BiosAtaTranslation) != sizeof(int));
[BIOS_ATA_TRANSLATION_AUTO] = "auto",
[BIOS_ATA_TRANSLATION_NONE] = "none",
[BIOS_ATA_TRANSLATION_LBA] = "lba",
[BIOS_ATA_TRANSLATION_LARGE] = "large",
[BIOS_ATA_TRANSLATION_RECHS] = "rechs",
};
PropertyInfo qdev_prop_bios_chs_trans = { PropertyInfo qdev_prop_bios_chs_trans = {
.name = "bios-chs-trans", .name = "bios-chs-trans",
.enum_table = bios_chs_trans_table, .enum_table = BiosAtaTranslation_lookup,
.get = get_enum, .get = get_enum,
.set = set_enum, .set = set_enum,
}; };
......
...@@ -268,9 +268,9 @@ static void kvm_pit_realizefn(DeviceState *dev, Error **errp) ...@@ -268,9 +268,9 @@ static void kvm_pit_realizefn(DeviceState *dev, Error **errp)
return; return;
} }
switch (s->lost_tick_policy) { switch (s->lost_tick_policy) {
case LOST_TICK_DELAY: case LOST_TICK_POLICY_DELAY:
break; /* enabled by default */ break; /* enabled by default */
case LOST_TICK_DISCARD: case LOST_TICK_POLICY_DISCARD:
if (kvm_check_extension(kvm_state, KVM_CAP_REINJECT_CONTROL)) { if (kvm_check_extension(kvm_state, KVM_CAP_REINJECT_CONTROL)) {
struct kvm_reinject_control control = { .pit_reinject = 0 }; struct kvm_reinject_control control = { .pit_reinject = 0 };
...@@ -300,7 +300,7 @@ static void kvm_pit_realizefn(DeviceState *dev, Error **errp) ...@@ -300,7 +300,7 @@ static void kvm_pit_realizefn(DeviceState *dev, Error **errp)
static Property kvm_pit_properties[] = { static Property kvm_pit_properties[] = {
DEFINE_PROP_UINT32("iobase", PITCommonState, iobase, -1), DEFINE_PROP_UINT32("iobase", PITCommonState, iobase, -1),
DEFINE_PROP_LOSTTICKPOLICY("lost_tick_policy", KVMPITState, DEFINE_PROP_LOSTTICKPOLICY("lost_tick_policy", KVMPITState,
lost_tick_policy, LOST_TICK_DELAY), lost_tick_policy, LOST_TICK_POLICY_DELAY),
DEFINE_PROP_END_OF_LIST(), DEFINE_PROP_END_OF_LIST(),
}; };
......
...@@ -185,7 +185,7 @@ static void rtc_periodic_timer(void *opaque) ...@@ -185,7 +185,7 @@ static void rtc_periodic_timer(void *opaque)
if (s->cmos_data[RTC_REG_B] & REG_B_PIE) { if (s->cmos_data[RTC_REG_B] & REG_B_PIE) {
s->cmos_data[RTC_REG_C] |= REG_C_IRQF; s->cmos_data[RTC_REG_C] |= REG_C_IRQF;
#ifdef TARGET_I386 #ifdef TARGET_I386
if (s->lost_tick_policy == LOST_TICK_SLEW) { if (s->lost_tick_policy == LOST_TICK_POLICY_SLEW) {
if (s->irq_reinject_on_ack_count >= RTC_REINJECT_ON_ACK_COUNT) if (s->irq_reinject_on_ack_count >= RTC_REINJECT_ON_ACK_COUNT)
s->irq_reinject_on_ack_count = 0; s->irq_reinject_on_ack_count = 0;
apic_reset_irq_delivered(); apic_reset_irq_delivered();
...@@ -708,7 +708,7 @@ static int rtc_post_load(void *opaque, int version_id) ...@@ -708,7 +708,7 @@ static int rtc_post_load(void *opaque, int version_id)
#ifdef TARGET_I386 #ifdef TARGET_I386
if (version_id >= 2) { if (version_id >= 2) {
if (s->lost_tick_policy == LOST_TICK_SLEW) { if (s->lost_tick_policy == LOST_TICK_POLICY_SLEW) {
rtc_coalesced_timer_update(s); rtc_coalesced_timer_update(s);
} }
} }
...@@ -749,7 +749,7 @@ static void rtc_notify_clock_reset(Notifier *notifier, void *data) ...@@ -749,7 +749,7 @@ static void rtc_notify_clock_reset(Notifier *notifier, void *data)
periodic_timer_update(s, now); periodic_timer_update(s, now);
check_update_timer(s); check_update_timer(s);
#ifdef TARGET_I386 #ifdef TARGET_I386
if (s->lost_tick_policy == LOST_TICK_SLEW) { if (s->lost_tick_policy == LOST_TICK_POLICY_SLEW) {
rtc_coalesced_timer_update(s); rtc_coalesced_timer_update(s);
} }
#endif #endif
...@@ -774,7 +774,7 @@ static void rtc_reset(void *opaque) ...@@ -774,7 +774,7 @@ static void rtc_reset(void *opaque)
qemu_irq_lower(s->irq); qemu_irq_lower(s->irq);
#ifdef TARGET_I386 #ifdef TARGET_I386
if (s->lost_tick_policy == LOST_TICK_SLEW) { if (s->lost_tick_policy == LOST_TICK_POLICY_SLEW) {
s->irq_coalesced = 0; s->irq_coalesced = 0;
} }
#endif #endif
...@@ -835,11 +835,11 @@ static void rtc_realizefn(DeviceState *dev, Error **errp) ...@@ -835,11 +835,11 @@ static void rtc_realizefn(DeviceState *dev, Error **errp)
#ifdef TARGET_I386 #ifdef TARGET_I386
switch (s->lost_tick_policy) { switch (s->lost_tick_policy) {
case LOST_TICK_SLEW: case LOST_TICK_POLICY_SLEW:
s->coalesced_timer = s->coalesced_timer =
timer_new_ns(rtc_clock, rtc_coalesced_timer, s); timer_new_ns(rtc_clock, rtc_coalesced_timer, s);
break; break;
case LOST_TICK_DISCARD: case LOST_TICK_POLICY_DISCARD:
break; break;
default: default:
error_setg(errp, "Invalid lost tick policy."); error_setg(errp, "Invalid lost tick policy.");
...@@ -890,7 +890,7 @@ ISADevice *rtc_init(ISABus *bus, int base_year, qemu_irq intercept_irq) ...@@ -890,7 +890,7 @@ ISADevice *rtc_init(ISABus *bus, int base_year, qemu_irq intercept_irq)
static Property mc146818rtc_properties[] = { static Property mc146818rtc_properties[] = {
DEFINE_PROP_INT32("base_year", RTCState, base_year, 1980), DEFINE_PROP_INT32("base_year", RTCState, base_year, 1980),
DEFINE_PROP_LOSTTICKPOLICY("lost_tick_policy", RTCState, DEFINE_PROP_LOSTTICKPOLICY("lost_tick_policy", RTCState,
lost_tick_policy, LOST_TICK_DISCARD), lost_tick_policy, LOST_TICK_POLICY_DISCARD),
DEFINE_PROP_END_OF_LIST(), DEFINE_PROP_END_OF_LIST(),
}; };
......
...@@ -65,12 +65,6 @@ int blkconf_geometry(BlockConf *conf, int *trans, ...@@ -65,12 +65,6 @@ int blkconf_geometry(BlockConf *conf, int *trans,
/* Hard disk geometry */ /* Hard disk geometry */
#define BIOS_ATA_TRANSLATION_AUTO 0
#define BIOS_ATA_TRANSLATION_NONE 1
#define BIOS_ATA_TRANSLATION_LBA 2
#define BIOS_ATA_TRANSLATION_LARGE 3
#define BIOS_ATA_TRANSLATION_RECHS 4
void hd_geometry_guess(BlockDriverState *bs, void hd_geometry_guess(BlockDriverState *bs,
uint32_t *pcyls, uint32_t *pheads, uint32_t *psecs, uint32_t *pcyls, uint32_t *pheads, uint32_t *psecs,
int *ptrans); int *ptrans);
......
...@@ -261,14 +261,6 @@ typedef int (*DMA_transfer_handler) (void *opaque, int nchan, int pos, int size) ...@@ -261,14 +261,6 @@ typedef int (*DMA_transfer_handler) (void *opaque, int nchan, int pos, int size)
typedef uint64_t pcibus_t; typedef uint64_t pcibus_t;
typedef enum LostTickPolicy {
LOST_TICK_DISCARD,
LOST_TICK_DELAY,
LOST_TICK_MERGE,
LOST_TICK_SLEW,
LOST_TICK_MAX
} LostTickPolicy;
typedef struct PCIHostDeviceAddress { typedef struct PCIHostDeviceAddress {
unsigned int domain; unsigned int domain;
unsigned int bus; unsigned int bus;
......
...@@ -28,7 +28,65 @@ ...@@ -28,7 +28,65 @@
'data': [ 'GenericError', 'CommandNotFound', 'DeviceEncrypted', 'data': [ 'GenericError', 'CommandNotFound', 'DeviceEncrypted',
'DeviceNotActive', 'DeviceNotFound', 'KVMMissingCap' ] } 'DeviceNotActive', 'DeviceNotFound', 'KVMMissingCap' ] }
##
# LostTickPolicy:
#
# Policy for handling lost ticks in timer devices.
#
# @discard: throw away the missed tick(s) and continue with future injection
# normally. Guest time may be delayed, unless the OS has explicit
# handling of lost ticks
#
# @delay: continue to deliver ticks at the normal rate. Guest time will be
# delayed due to the late tick
#
# @merge: merge the missed tick(s) into one tick and inject. Guest time
# may be delayed, depending on how the OS reacts to the merging
# of ticks
#
# @slew: deliver ticks at a higher rate to catch up with the missed tick. The
# guest time should not be delayed once catchup is complete.
#
# Since: 2.0
##
{ 'enum': 'LostTickPolicy',
'data': ['discard', 'delay', 'merge', 'slew' ] }
## ##
# BiosAtaTranslation:
#
# Policy that BIOS should use to interpret cylinder/head/sector
# addresses. Note that Bochs BIOS and SeaBIOS will not actually
# translate logical CHS to physical; instead, they will use logical
# block addressing.
#
# @auto: If cylinder/heads/sizes are passed, choose between none and LBA
# depending on the size of the disk. If they are not passed,
# choose none if QEMU can guess that the disk had 16 or fewer
# heads, large if QEMU can guess that the disk had 131072 or
# fewer tracks across all heads (i.e. cylinders*heads<131072),
# otherwise LBA.
#
# @none: The physical disk geometry is equal to the logical geometry.
#
# @lba: Assume 63 sectors per track and one of 16, 32, 64, 128 or 255
# heads (if fewer than 255 are enough to cover the whole disk
# with 1024 cylinders/head). The number of cylinders/head is
# then computed based on the number of sectors and heads.
#
# @large: The number of cylinders per head is scaled down to 1024
# by correspondingly scaling up the number of heads.
#
# @rechs: Same as @large, but first convert a 16-head geometry to
# 15-head, by proportionally scaling up the number of
# cylinders/head.
#
# Since: 2.0
##
{ 'enum': 'BiosAtaTranslation',
'data': ['auto', 'none', 'lba', 'large', 'rechs']}
# @add_client # @add_client
# #
# Allow client connections for VNC, Spice and socket based # Allow client connections for VNC, Spice and socket based
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册