On Tue, 9 Mar 2021 11:49:47 +0000
Alexandru Elisei <[email protected]> wrote:

> Hi Andre,
> 
> Regarding the naming of the functions, these are real ioport emulation 
> functions,
> which are executed because a KVM_EXIT_IO exit reason from KVM_RUN. Wouldn't 
> naming
> the functions something like *_pio or *_io be more appropriate?

Yes, indeed these devices here are per definition pure port I/O
devices. I changed the names to _io, to be in line with the later
patches.

Cheers,
Andre
 
> On 2/25/21 12:59 AM, Andre Przywara wrote:
> > With the planned retirement of the special ioport emulation code, we
> > need to provide emulation functions compatible with the MMIO
> > prototype.
> >
> > Adjust the trap handlers to use that new function, and provide shims to
> > implement the old ioport interface, for now.
> >
> > Signed-off-by: Andre Przywara <[email protected]>
> > Reviewed-by: Alexandru Elisei <[email protected]>
> > ---
> >  x86/ioport.c | 30 ++++++++++++++++++++++++++----
> >  1 file changed, 26 insertions(+), 4 deletions(-)
> >
> > diff --git a/x86/ioport.c b/x86/ioport.c
> > index a8d2bb1a..78f9a863 100644
> > --- a/x86/ioport.c
> > +++ b/x86/ioport.c
> > @@ -3,8 +3,14 @@
> >  #include <stdlib.h>
> >  #include <stdio.h>
> >  
> > +static void dummy_mmio(struct kvm_cpu *vcpu, u64 addr, u8 *data, u32 len,
> > +                  u8 is_write, void *ptr)
> > +{
> > +}
> > +
> >  static bool debug_io_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 
> > port, void *data, int size)
> >  {
> > +   dummy_mmio(vcpu, port, data, size, true, NULL);
> >     return 0;
> >  }
> >  
> > @@ -12,15 +18,23 @@ static struct ioport_operations debug_ops = {
> >     .io_out         = debug_io_out,
> >  };
> >  
> > -static bool seabios_debug_io_out(struct ioport *ioport, struct kvm_cpu 
> > *vcpu, u16 port, void *data, int size)
> > +static void seabios_debug_mmio(struct kvm_cpu *vcpu, u64 addr, u8 *data,
> > +                          u32 len, u8 is_write, void *ptr)
> >  {
> >     char ch;
> >  
> > +   if (!is_write)
> > +           return;
> > +
> >     ch = ioport__read8(data);
> >  
> >     putchar(ch);
> > +}
> >  
> > -   return true;
> > +static bool seabios_debug_io_out(struct ioport *ioport, struct kvm_cpu 
> > *vcpu, u16 port, void *data, int size)
> > +{
> > +   seabios_debug_mmio(vcpu, port, data, size, true, NULL);
> > +   return 0;
> >  }
> >  
> >  static struct ioport_operations seabios_debug_ops = {
> > @@ -29,11 +43,13 @@ static struct ioport_operations seabios_debug_ops = {
> >  
> >  static bool dummy_io_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 
> > port, void *data, int size)
> >  {
> > +   dummy_mmio(vcpu, port, data, size, false, NULL);
> >     return true;
> >  }
> >  
> >  static bool dummy_io_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 
> > port, void *data, int size)
> >  {
> > +   dummy_mmio(vcpu, port, data, size, true, NULL);
> >     return true;
> >  }
> >  
> > @@ -50,13 +66,19 @@ static struct ioport_operations 
> > dummy_write_only_ioport_ops = {
> >   * The "fast A20 gate"
> >   */
> >  
> > -static bool ps2_control_a_io_in(struct ioport *ioport, struct kvm_cpu 
> > *vcpu, u16 port, void *data, int size)
> > +static void ps2_control_mmio(struct kvm_cpu *vcpu, u64 addr, u8 *data, u32 
> > len,
> > +                        u8 is_write, void *ptr)
> >  {
> >     /*
> >      * A20 is always enabled.
> >      */
> > -   ioport__write8(data, 0x02);
> > +   if (!is_write)
> > +           ioport__write8(data, 0x02);
> > +}
> >  
> > +static bool ps2_control_a_io_in(struct ioport *ioport, struct kvm_cpu 
> > *vcpu, u16 port, void *data, int size)
> > +{
> > +   ps2_control_mmio(vcpu, port, data, size, false, NULL);
> >     return true;
> >  }
> >    

_______________________________________________
kvmarm mailing list
[email protected]
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

Reply via email to