mirror of
https://github.com/clearlinux/kvmtool.git
synced 2026-09-06 05:31:50 +00:00
kvm: Initial PCI probe emulation
This patch adds simple PCI Configuration Mechanism 1 probing emulation. It doesn't expose any actual PCI devices yet. Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
This commit is contained in:
committed by
Will Deacon
parent
46365b263c
commit
60742802dc
@@ -16,6 +16,7 @@ OBJS += ioport.o
|
||||
OBJS += kvm.o
|
||||
OBJS += main.o
|
||||
OBJS += mmio.o
|
||||
OBJS += pci.o
|
||||
OBJS += util.o
|
||||
|
||||
DEPS := $(patsubst %.o,%.d,$(OBJS))
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef KVM__PCI_H
|
||||
#define KVM__PCI_H
|
||||
|
||||
void pci__init(void);
|
||||
|
||||
#endif /* KVM__PCI_H */
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "kvm/early_printk.h"
|
||||
#include "kvm/util.h"
|
||||
#include "kvm/pci.h"
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <signal.h>
|
||||
@@ -110,6 +111,7 @@ int main(int argc, char *argv[])
|
||||
kvm__enable_singlestep(kvm);
|
||||
|
||||
early_printk__init();
|
||||
pci__init();
|
||||
|
||||
for (;;) {
|
||||
kvm__run(kvm);
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
#include "kvm/pci.h"
|
||||
|
||||
#include "kvm/ioport.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
static uint32_t pci_cse; /* PCI configuration space enable */
|
||||
|
||||
static bool pci_cse_out(struct kvm *self, uint16_t port, void *data, int size, uint32_t count)
|
||||
{
|
||||
uint32_t *p = data;
|
||||
|
||||
pci_cse = *p;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool pci_cse_in(struct kvm *self, uint16_t port, void *data, int size, uint32_t count)
|
||||
{
|
||||
uint32_t *p = data;
|
||||
|
||||
*p = pci_cse;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static struct ioport_operations pci_cse_ops = {
|
||||
.io_in = pci_cse_in,
|
||||
.io_out = pci_cse_out,
|
||||
};
|
||||
|
||||
static bool pci_mechanism_out(struct kvm *self, uint16_t port, void *data, int size, uint32_t count)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool pci_mechanism_in(struct kvm *self, uint16_t port, void *data, int size, uint32_t count)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
static struct ioport_operations pci_mechanism_ops = {
|
||||
.io_in = pci_mechanism_in,
|
||||
.io_out = pci_mechanism_out,
|
||||
};
|
||||
|
||||
void pci__init(void)
|
||||
{
|
||||
ioport__register(0xcfb, &pci_mechanism_ops);
|
||||
ioport__register(0xcf8, &pci_cse_ops);
|
||||
}
|
||||
Reference in New Issue
Block a user