217
static void cmos_init_hd(int type_ofs, int info_ofs, BlockDriverState *hd,
222
static void cmos_init_hd(ISADevice *s, int type_ofs, int info_ofs,
223
int16_t cylinders, int8_t heads, int8_t sectors)
220
int cylinders, heads, sectors;
221
bdrv_get_geometry_hint(hd, &cylinders, &heads, §ors);
222
225
rtc_set_memory(s, type_ofs, 47);
223
226
rtc_set_memory(s, info_ofs, cylinders);
224
227
rtc_set_memory(s, info_ofs + 1, cylinders >> 8);
280
283
typedef struct pc_cmos_init_late_arg {
281
284
ISADevice *rtc_state;
282
BusState *idebus0, *idebus1;
283
286
} pc_cmos_init_late_arg;
285
288
static void pc_cmos_init_late(void *opaque)
287
290
pc_cmos_init_late_arg *arg = opaque;
288
291
ISADevice *s = arg->rtc_state;
293
int8_t heads, sectors;
290
BlockDriverState *hd_table[4];
293
ide_get_bs(hd_table, arg->idebus0);
294
ide_get_bs(hd_table + 2, arg->idebus1);
296
rtc_set_memory(s, 0x12, (hd_table[0] ? 0xf0 : 0) | (hd_table[1] ? 0x0f : 0));
298
cmos_init_hd(0x19, 0x1b, hd_table[0], s);
300
cmos_init_hd(0x1a, 0x24, hd_table[1], s);
298
if (ide_get_geometry(arg->idebus[0], 0,
299
&cylinders, &heads, §ors) >= 0) {
300
cmos_init_hd(s, 0x19, 0x1b, cylinders, heads, sectors);
303
if (ide_get_geometry(arg->idebus[0], 1,
304
&cylinders, &heads, §ors) >= 0) {
305
cmos_init_hd(s, 0x1a, 0x24, cylinders, heads, sectors);
308
rtc_set_memory(s, 0x12, val);
303
311
for (i = 0; i < 4; i++) {
305
int cylinders, heads, sectors, translation;
306
/* NOTE: bdrv_get_geometry_hint() returns the physical
307
geometry. It is always such that: 1 <= sects <= 63, 1
308
<= heads <= 16, 1 <= cylinders <= 16383. The BIOS
309
geometry can be different if a translation is done. */
310
translation = bdrv_get_translation_hint(hd_table[i]);
311
if (translation == BIOS_ATA_TRANSLATION_AUTO) {
312
bdrv_get_geometry_hint(hd_table[i], &cylinders, &heads, §ors);
313
if (cylinders <= 1024 && heads <= 16 && sectors <= 63) {
314
/* No translation. */
317
/* LBA translation. */
323
val |= translation << (i * 2);
312
/* NOTE: ide_get_geometry() returns the physical
313
geometry. It is always such that: 1 <= sects <= 63, 1
314
<= heads <= 16, 1 <= cylinders <= 16383. The BIOS
315
geometry can be different if a translation is done. */
316
if (ide_get_geometry(arg->idebus[i / 2], i % 2,
317
&cylinders, &heads, §ors) >= 0) {
318
trans = ide_get_bios_chs_trans(arg->idebus[i / 2], i % 2) - 1;
319
assert((trans & ~3) == 0);
320
val |= trans << (i * 2);
326
323
rtc_set_memory(s, 0x39, val);
333
330
ISADevice *floppy, BusState *idebus0, BusState *idebus1,
336
int val, nb, nb_heads, max_track, last_sect, i;
337
334
FDriveType fd_type[2] = { FDRIVE_DRV_NONE, FDRIVE_DRV_NONE };
339
BlockDriverState *fd[MAX_FD];
340
335
static pc_cmos_init_late_arg arg;
342
337
/* various important CMOS locations needed by PC/Bochs bios */
380
375
/* floppy type */
382
fdc_get_bs(fd, floppy);
383
377
for (i = 0; i < 2; i++) {
384
if (fd[i] && bdrv_is_inserted(fd[i])) {
385
bdrv_get_floppy_geometry_hint(fd[i], &nb_heads, &max_track,
386
&last_sect, FDRIVE_DRV_NONE,
378
fd_type[i] = isa_fdc_get_drive_type(floppy, i);
391
381
val = (cmos_get_fd_drive_type(fd_type[0]) << 4) |
892
876
if (kvm_irqchip_in_kernel()) {
893
877
dev = qdev_create(NULL, "kvm-apic");
878
} else if (xen_enabled()) {
879
dev = qdev_create(NULL, "xen-apic");
895
881
dev = qdev_create(NULL, "apic");
897
884
qdev_prop_set_uint8(dev, "id", apic_id);
898
885
qdev_prop_set_ptr(dev, "cpu_env", env);
899
886
qdev_init_nofail(dev);
910
/* KVM does not support MSI yet. */
911
if (!kvm_irqchip_in_kernel()) {
912
msi_supported = true;
918
900
void pc_acpi_smi_interrupt(void *opaque, int irq, int level)
920
CPUState *s = opaque;
902
CPUX86State *s = opaque;
923
905
cpu_interrupt(s, CPU_INTERRUPT_SMI);
927
static void pc_cpu_reset(void *opaque)
929
CPUState *env = opaque;
932
env->halted = !cpu_is_bsp(env);
935
static CPUState *pc_new_cpu(const char *cpu_model)
939
env = cpu_init(cpu_model);
909
static X86CPU *pc_new_cpu(const char *cpu_model)
914
cpu = cpu_x86_init(cpu_model);
941
916
fprintf(stderr, "Unable to find x86 CPU definition\n");
944
920
if ((env->cpuid_features & CPUID_APIC) || smp_cpus > 1) {
945
921
env->apic_state = apic_init(env, env->cpuid_apic_id);
947
qemu_register_reset(pc_cpu_reset, env);
952
927
void pc_cpus_init(const char *cpu_model)
1089
1065
qemu_irq pit_alt_irq = NULL;
1090
1066
qemu_irq rtc_irq = NULL;
1091
1067
qemu_irq *a20_line;
1092
ISADevice *i8042, *port92, *vmmouse, *pit;
1068
ISADevice *i8042, *port92, *vmmouse, *pit = NULL;
1093
1069
qemu_irq *cpu_exit_irq;
1095
1071
register_ioport_write(0x80, 1, 1, ioport80_write, NULL);
1097
1073
register_ioport_write(0xf0, 1, 1, ioportF0_write, NULL);
1076
* Check if an HPET shall be created.
1078
* Without KVM_CAP_PIT_STATE2, we cannot switch off the in-kernel PIT
1079
* when the HPET wants to take over. Thus we have to disable the latter.
1081
if (!no_hpet && (!kvm_irqchip_in_kernel() || kvm_has_pit_state2())) {
1100
1082
hpet = sysbus_try_create_simple("hpet", HPET_BASE, NULL);
1113
1095
qemu_register_boot_set(pc_boot_set, *rtc_state);
1115
pit = pit_init(isa_bus, 0x40, pit_isa_irq, pit_alt_irq);
1117
/* connect PIT to output control line of the HPET */
1118
qdev_connect_gpio_out(hpet, 0, qdev_get_gpio_in(&pit->qdev, 0));
1097
if (!xen_enabled()) {
1098
if (kvm_irqchip_in_kernel()) {
1099
pit = kvm_pit_init(isa_bus, 0x40);
1101
pit = pit_init(isa_bus, 0x40, pit_isa_irq, pit_alt_irq);
1104
/* connect PIT to output control line of the HPET */
1105
qdev_connect_gpio_out(hpet, 0, qdev_get_gpio_in(&pit->qdev, 0));
1107
pcspk_init(isa_bus, pit);
1120
pcspk_init(isa_bus, pit);
1122
1110
for(i = 0; i < MAX_SERIAL_PORTS; i++) {
1123
1111
if (serial_hds[i]) {