Skip to content

Commit f4beaf5

Browse files
mgcaowenlingz
authored andcommitted
HV: support vuart base & irq can be changed
add two static variables for COM_BASE & COM_IRQ, to support them dynamically changed. Tracked-On: #2170 Signed-off-by: Minggui Cao <minggui.cao@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
1 parent 537adae commit f4beaf5

File tree

1 file changed

+12
-14
lines changed

1 file changed

+12
-14
lines changed

hypervisor/debug/vuart.c

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333

3434
#include "uart16550.h"
3535

36+
static uint8_t vuart_com_irq = CONFIG_COM_IRQ;
37+
static uint16_t vuart_com_base = CONFIG_COM_BASE;
3638

3739
#ifndef CONFIG_PARTITION_MODE
3840
static char vuart_rx_buf[RX_BUF_SIZE];
@@ -111,8 +113,7 @@ static uint8_t vuart_intr_reason(const struct acrn_vuart *vu)
111113
{
112114
if (((vu->lsr & LSR_OE) != 0U) && ((vu->ier & IER_ELSI) != 0U)) {
113115
return IIR_RLS;
114-
} else if ((fifo_numchars(&vu->rxfifo) > 0U) &&
115-
((vu->ier & IER_ERBFI) != 0U)) {
116+
} else if ((fifo_numchars(&vu->rxfifo) > 0U) && ((vu->ier & IER_ERBFI) != 0U)) {
116117
return IIR_RXTOUT;
117118
} else if (vu->thre_int_pending && ((vu->ier & IER_ETBEI) != 0U)) {
118119
return IIR_TXRDY;
@@ -132,7 +133,7 @@ static void vuart_toggle_intr(const struct acrn_vuart *vu)
132133
uint32_t operation;
133134

134135
intr_reason = vuart_intr_reason(vu);
135-
vioapic_get_rte(vu->vm, CONFIG_COM_IRQ, &rte);
136+
vioapic_get_rte(vu->vm, vuart_com_irq, &rte);
136137

137138
/* TODO:
138139
* Here should assert vuart irq according to CONFIG_COM_IRQ polarity.
@@ -143,15 +144,13 @@ static void vuart_toggle_intr(const struct acrn_vuart *vu)
143144
* we want to make it as an known issue.
144145
*/
145146
if ((rte.full & IOAPIC_RTE_INTPOL) != 0UL) {
146-
operation = (intr_reason != IIR_NOPEND) ?
147-
GSI_SET_LOW : GSI_SET_HIGH;
147+
operation = (intr_reason != IIR_NOPEND) ? GSI_SET_LOW : GSI_SET_HIGH;
148148
} else {
149-
operation = (intr_reason != IIR_NOPEND) ?
150-
GSI_SET_HIGH : GSI_SET_LOW;
149+
operation = (intr_reason != IIR_NOPEND) ? GSI_SET_HIGH : GSI_SET_LOW;
151150
}
152151

153-
vpic_set_irq(vu->vm, CONFIG_COM_IRQ, operation);
154-
vioapic_set_irq(vu->vm, CONFIG_COM_IRQ, operation);
152+
vpic_set_irq(vu->vm, vuart_com_irq, operation);
153+
vioapic_set_irq(vu->vm, vuart_com_irq, operation);
155154
}
156155

157156
static void vuart_write(struct acrn_vm *vm, uint16_t offset_arg,
@@ -202,8 +201,7 @@ static void vuart_write(struct acrn_vm *vm, uint16_t offset_arg,
202201
fifo_reset(&vu->rxfifo);
203202
}
204203

205-
vu->fcr = value_u8 &
206-
(FCR_FIFOE | FCR_DMA | FCR_RX_MASK);
204+
vu->fcr = value_u8 & (FCR_FIFOE | FCR_DMA | FCR_RX_MASK);
207205
}
208206
break;
209207
case UART16550_LCR:
@@ -323,7 +321,7 @@ static void vuart_register_io_handler(struct acrn_vm *vm)
323321
{
324322
struct vm_io_range range = {
325323
.flags = IO_ATTR_RW,
326-
.base = CONFIG_COM_BASE,
324+
.base = vuart_com_base,
327325
.len = 8U
328326
};
329327

@@ -402,7 +400,7 @@ void vuart_init(struct acrn_vm *vm)
402400
vm->vuart.dlh = (uint8_t)(divisor >> 8U);
403401

404402
vm->vuart.active = false;
405-
vm->vuart.base = CONFIG_COM_BASE;
403+
vm->vuart.base = vuart_com_base;
406404
vm->vuart.vm = vm;
407405
vuart_fifo_init(vu);
408406
vuart_lock_init(vu);
@@ -411,5 +409,5 @@ void vuart_init(struct acrn_vm *vm)
411409

412410
bool hv_used_dbg_intx(uint8_t intx_pin)
413411
{
414-
return is_dbg_uart_enabled() && (intx_pin == CONFIG_COM_IRQ);
412+
return is_dbg_uart_enabled() && (intx_pin == vuart_com_irq);
415413
}

0 commit comments

Comments
 (0)