Statistics
| Branch: | Revision:

root / hw / xen / xen-host-pci-device.h @ 47b43a1f

History | View | Annotate | Download (1.7 kB)

1
#ifndef XEN_HOST_PCI_DEVICE_H
2
#define XEN_HOST_PCI_DEVICE_H
3

    
4
#include "hw/pci/pci.h"
5

    
6
enum {
7
    XEN_HOST_PCI_REGION_TYPE_IO = 1 << 1,
8
    XEN_HOST_PCI_REGION_TYPE_MEM = 1 << 2,
9
    XEN_HOST_PCI_REGION_TYPE_PREFETCH = 1 << 3,
10
    XEN_HOST_PCI_REGION_TYPE_MEM_64 = 1 << 4,
11
};
12

    
13
typedef struct XenHostPCIIORegion {
14
    pcibus_t base_addr;
15
    pcibus_t size;
16
    uint8_t type;
17
    uint8_t bus_flags; /* Bus-specific bits */
18
} XenHostPCIIORegion;
19

    
20
typedef struct XenHostPCIDevice {
21
    uint16_t domain;
22
    uint8_t bus;
23
    uint8_t dev;
24
    uint8_t func;
25

    
26
    uint16_t vendor_id;
27
    uint16_t device_id;
28
    int irq;
29

    
30
    XenHostPCIIORegion io_regions[PCI_NUM_REGIONS - 1];
31
    XenHostPCIIORegion rom;
32

    
33
    bool is_virtfn;
34

    
35
    int config_fd;
36
} XenHostPCIDevice;
37

    
38
int xen_host_pci_device_get(XenHostPCIDevice *d, uint16_t domain,
39
                            uint8_t bus, uint8_t dev, uint8_t func);
40
void xen_host_pci_device_put(XenHostPCIDevice *pci_dev);
41

    
42
int xen_host_pci_get_byte(XenHostPCIDevice *d, int pos, uint8_t *p);
43
int xen_host_pci_get_word(XenHostPCIDevice *d, int pos, uint16_t *p);
44
int xen_host_pci_get_long(XenHostPCIDevice *d, int pos, uint32_t *p);
45
int xen_host_pci_get_block(XenHostPCIDevice *d, int pos, uint8_t *buf,
46
                           int len);
47
int xen_host_pci_set_byte(XenHostPCIDevice *d, int pos, uint8_t data);
48
int xen_host_pci_set_word(XenHostPCIDevice *d, int pos, uint16_t data);
49
int xen_host_pci_set_long(XenHostPCIDevice *d, int pos, uint32_t data);
50
int xen_host_pci_set_block(XenHostPCIDevice *d, int pos, uint8_t *buf,
51
                           int len);
52

    
53
int xen_host_pci_find_ext_cap_offset(XenHostPCIDevice *s, uint32_t cap);
54

    
55
#endif /* !XEN_HOST_PCI_DEVICE_H_ */