[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 21/28] Add (virtual)_interrupt to PAPR virtual tty d
From: |
qemu |
Subject: |
[Qemu-devel] [PATCH 21/28] Add (virtual)_interrupt to PAPR virtual tty device |
Date: |
Tue, 15 Feb 2011 15:56:32 +1100 |
From: David Gibson <address@hidden>
Now that we have implemented the PAPR "xics" virtualized interrupt
controller, we can add interrupts in PAPR VIO devices. This patch adds
interrupt support to the PAPR virtual tty/console device.
Signed-off-by: David Gibson <address@hidden>
---
hw/spapr.c | 6 ++++--
hw/spapr_vio.h | 3 ++-
hw/spapr_vty.c | 11 ++++++++++-
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/hw/spapr.c b/hw/spapr.c
index 5b19963..e7f8864 100644
--- a/hw/spapr.c
+++ b/hw/spapr.c
@@ -255,6 +255,7 @@ static void ppc_spapr_init(ram_addr_t ram_size,
int fdt_size;
sPAPREnvironment *spapr;
char *filename;
+ int irq = 16;
spapr = qemu_malloc(sizeof(*spapr));
@@ -318,9 +319,10 @@ static void ppc_spapr_init(ram_addr_t ram_size,
/* Set up VIO bus */
spapr->vio_bus = spapr_vio_bus_init();
- for (i = 0; i < MAX_SERIAL_PORTS; i++) {
+ for (i = 0; i < MAX_SERIAL_PORTS; i++, irq++) {
if (serial_hds[i]) {
- spapr_vty_create(spapr->vio_bus, i, serial_hds[i]);
+ spapr_vty_create(spapr->vio_bus, i, serial_hds[i],
+ xics_find_qirq(spapr->icp, irq), irq);
}
}
diff --git a/hw/spapr_vio.h b/hw/spapr_vio.h
index 8a000c6..2013927 100644
--- a/hw/spapr_vio.h
+++ b/hw/spapr_vio.h
@@ -51,6 +51,7 @@ extern int spapr_vio_signal(VIOsPAPRDevice *dev, target_ulong
mode);
void vty_putchars(VIOsPAPRDevice *sdev, uint8_t *buf, int len);
void spapr_vty_create(VIOsPAPRBus *bus,
- uint32_t reg, CharDriverState *chardev);
+ uint32_t reg, CharDriverState *chardev,
+ qemu_irq qirq, uint32_t vio_irq_num);
#endif /* _HW_SPAPR_VIO_H */
diff --git a/hw/spapr_vty.c b/hw/spapr_vty.c
index afc9ef9..5c2412a 100644
--- a/hw/spapr_vty.c
+++ b/hw/spapr_vty.c
@@ -24,6 +24,10 @@ static void vty_receive(void *opaque, const uint8_t *buf,
int size)
VIOsPAPRVTYDevice *dev = (VIOsPAPRVTYDevice *)opaque;
int i;
+ if ((dev->in == dev->out) && size) {
+ /* toggle line to simulate edge interrupt */
+ qemu_irq_pulse(dev->sdev.qirq);
+ }
for (i = 0; i < size; i++) {
assert((dev->in - dev->out) < VTERM_BUFSIZE);
dev->buf[dev->in++ % VTERM_BUFSIZE] = buf[i];
@@ -107,14 +111,19 @@ static target_ulong h_get_term_char(CPUState *env,
sPAPREnvironment *spapr,
}
void spapr_vty_create(VIOsPAPRBus *bus,
- uint32_t reg, CharDriverState *chardev)
+ uint32_t reg, CharDriverState *chardev,
+ qemu_irq qirq, uint32_t vio_irq_num)
{
DeviceState *dev;
+ VIOsPAPRDevice *sdev;
dev = qdev_create(&bus->bus, "spapr-vty");
qdev_prop_set_uint32(dev, "reg", reg);
qdev_prop_set_chr(dev, "chardev", chardev);
qdev_init_nofail(dev);
+ sdev = (VIOsPAPRDevice *)dev;
+ sdev->qirq = qirq;
+ sdev->vio_irq_num = vio_irq_num;
}
static void vty_hcalls(VIOsPAPRBus *bus)
--
1.7.1
- [Qemu-devel] [PATCH 07/28] Correct ppc popcntb logic, implement popcntw and popcntd, (continued)
- [Qemu-devel] [PATCH 07/28] Correct ppc popcntb logic, implement popcntw and popcntd, qemu, 2011/02/14
- [Qemu-devel] [PATCH 11/28] Better factor the ppc hash translation path, qemu, 2011/02/14
- [Qemu-devel] [PATCH 09/28] Parse SDR1 on mtspr instead of at translate time, qemu, 2011/02/14
- [Qemu-devel] [PATCH 10/28] Use "hash" more consistently in ppc mmu code, qemu, 2011/02/14
- [Qemu-devel] [PATCH 12/28] Support 1T segments on ppc, qemu, 2011/02/14
- [Qemu-devel] [PATCH 13/28] Add POWER7 support for ppc, qemu, 2011/02/14
- [Qemu-devel] [PATCH 18/28] Implement assorted pSeries hcalls and RTAS methods, qemu, 2011/02/14
- [Qemu-devel] [PATCH 17/28] Implement hcall based RTAS for pSeries machines, qemu, 2011/02/14
- [Qemu-devel] [PATCH 20/28] Add PAPR H_VIO_SIGNAL hypercall and infrastructure for VIO interrupts, qemu, 2011/02/14
- [Qemu-devel] [PATCH 14/28] Start implementing pSeries logical partition machine, qemu, 2011/02/14
- [Qemu-devel] [PATCH 21/28] Add (virtual)_interrupt to PAPR virtual tty device,
qemu <=
- [Qemu-devel] [PATCH 19/28] Implement the PAPR (pSeries) virtualized interrupt controller (xics), qemu, 2011/02/14
- [Qemu-devel] [PATCH 15/28] Implement the bus structure for PAPR virtual IO, qemu, 2011/02/14
- [Qemu-devel] [PATCH 26/28] Add a PAPR TCE-bypass mechanism for the pSeries machine, qemu, 2011/02/14
- [Qemu-devel] [PATCH 24/28] Implement PAPR CRQ hypercalls, qemu, 2011/02/14
- [Qemu-devel] [PATCH 23/28] Implement sPAPR Virtual LAN (ibmveth), qemu, 2011/02/14
- [Qemu-devel] [PATCH 16/28] Virtual hash page table handling on pSeries machine, qemu, 2011/02/14
- [Qemu-devel] [PATCH 22/28] Implement TCE translation for sPAPR VIO, qemu, 2011/02/14
- [Qemu-devel] [PATCH 28/28] Implement PAPR VPA functions for pSeries shared processor partitions, qemu, 2011/02/14
- [Qemu-devel] [PATCH 25/28] Implement PAPR virtual SCSI interface (ibmvscsi), qemu, 2011/02/14
- [Qemu-devel] [PATCH 27/28] Add SLOF-based partition firmware for pSeries machine, allowing more boot options, qemu, 2011/02/14