xref: /kvmtool/pci.c (revision 60742802dc8cfa371095d9dbc0fe208dae32d8f8)
1*60742802SPekka Enberg #include "kvm/pci.h"
2*60742802SPekka Enberg 
3*60742802SPekka Enberg #include "kvm/ioport.h"
4*60742802SPekka Enberg 
5*60742802SPekka Enberg #include <stdint.h>
6*60742802SPekka Enberg 
7*60742802SPekka Enberg static uint32_t pci_cse;	/* PCI configuration space enable */
8*60742802SPekka Enberg 
9*60742802SPekka Enberg static bool pci_cse_out(struct kvm *self, uint16_t port, void *data, int size, uint32_t count)
10*60742802SPekka Enberg {
11*60742802SPekka Enberg 	uint32_t *p = data;
12*60742802SPekka Enberg 
13*60742802SPekka Enberg 	pci_cse		= *p;
14*60742802SPekka Enberg 
15*60742802SPekka Enberg 	return true;
16*60742802SPekka Enberg }
17*60742802SPekka Enberg 
18*60742802SPekka Enberg static bool pci_cse_in(struct kvm *self, uint16_t port, void *data, int size, uint32_t count)
19*60742802SPekka Enberg {
20*60742802SPekka Enberg 	uint32_t *p = data;
21*60742802SPekka Enberg 
22*60742802SPekka Enberg 	*p		= pci_cse;
23*60742802SPekka Enberg 
24*60742802SPekka Enberg 	return true;
25*60742802SPekka Enberg }
26*60742802SPekka Enberg 
27*60742802SPekka Enberg static struct ioport_operations pci_cse_ops = {
28*60742802SPekka Enberg 	.io_in		= pci_cse_in,
29*60742802SPekka Enberg 	.io_out		= pci_cse_out,
30*60742802SPekka Enberg };
31*60742802SPekka Enberg 
32*60742802SPekka Enberg static bool pci_mechanism_out(struct kvm *self, uint16_t port, void *data, int size, uint32_t count)
33*60742802SPekka Enberg {
34*60742802SPekka Enberg 	return true;
35*60742802SPekka Enberg }
36*60742802SPekka Enberg 
37*60742802SPekka Enberg static bool pci_mechanism_in(struct kvm *self, uint16_t port, void *data, int size, uint32_t count)
38*60742802SPekka Enberg {
39*60742802SPekka Enberg 	return true;
40*60742802SPekka Enberg }
41*60742802SPekka Enberg 
42*60742802SPekka Enberg static struct ioport_operations pci_mechanism_ops = {
43*60742802SPekka Enberg 	.io_in		= pci_mechanism_in,
44*60742802SPekka Enberg 	.io_out		= pci_mechanism_out,
45*60742802SPekka Enberg };
46*60742802SPekka Enberg 
47*60742802SPekka Enberg void pci__init(void)
48*60742802SPekka Enberg {
49*60742802SPekka Enberg 	ioport__register(0xcfb, &pci_mechanism_ops);
50*60742802SPekka Enberg 	ioport__register(0xcf8, &pci_cse_ops);
51*60742802SPekka Enberg }
52