Beispiel #1
0
void kvm__arch_read_term(struct kvm *kvm)
{
	if (term_readable(0)) {
		serial8250__update_consoles(kvm);
		virtio_console__inject_interrupt(kvm);
	}
}
Beispiel #2
0
static unsigned long h_get_term_char(struct kvm_cpu *vcpu, unsigned long opcode, unsigned long *args)
{
    /* To do: Read register from args[0], and check it. */
    unsigned long *len = args + 0;
    unsigned long *char0_7 = args + 1;
    unsigned long *char8_15 = args + 2;
    union hv_chario data;
    struct iovec iov;

    if (vcpu->kvm->cfg.active_console != CONSOLE_HV)
        return H_SUCCESS;

    if (term_readable(0)) {
        iov.iov_base = data.buf;
        iov.iov_len = 16;

        *len = term_getc_iov(vcpu->kvm, &iov, 1, 0);
        *char0_7 = be64_to_cpu(data.a.char0_7);
        *char8_15 = be64_to_cpu(data.a.char8_15);
    } else {
        *len = 0;
    }

    return H_SUCCESS;
}
Beispiel #3
0
void spapr_hvcons_poll(struct kvm *kvm)
{
    if (term_readable(0)) {
        /*
         * We can inject an IRQ to guest here if we want.  The guest
         * will happily poll, though, so not required.
         */
    }
}
Beispiel #4
0
static void rtas_get_term_char(struct kvm_cpu *vcpu,
			       uint32_t token, uint32_t nargs,
			       target_ulong args,
			       uint32_t nret, target_ulong rets)
{
	int c;
	if (term_readable(CONSOLE_HV, 0) &&
	    (c = term_getc(CONSOLE_HV, 0)) >= 0) {
		rtas_st(vcpu->kvm, rets, 0, 0);
		rtas_st(vcpu->kvm, rets, 1, c);
	} else {
		rtas_st(vcpu->kvm, rets, 0, -2);
	}
}