Statistics
| Branch: | Revision:

root / hw / xen-host-pci-device.h @ 0ed8b6f6

History | View | Annotate | Download (1.7 kB)

1 396af688 Anthony PERARD
#ifndef XEN_HOST_PCI_DEVICE_H
2 396af688 Anthony PERARD
#define XEN_HOST_PCI_DEVICE_H
3 396af688 Anthony PERARD
4 396af688 Anthony PERARD
#include "pci.h"
5 396af688 Anthony PERARD
6 396af688 Anthony PERARD
enum {
7 396af688 Anthony PERARD
    XEN_HOST_PCI_REGION_TYPE_IO = 1 << 1,
8 396af688 Anthony PERARD
    XEN_HOST_PCI_REGION_TYPE_MEM = 1 << 2,
9 396af688 Anthony PERARD
    XEN_HOST_PCI_REGION_TYPE_PREFETCH = 1 << 3,
10 396af688 Anthony PERARD
    XEN_HOST_PCI_REGION_TYPE_MEM_64 = 1 << 4,
11 396af688 Anthony PERARD
};
12 396af688 Anthony PERARD
13 396af688 Anthony PERARD
typedef struct XenHostPCIIORegion {
14 396af688 Anthony PERARD
    pcibus_t base_addr;
15 396af688 Anthony PERARD
    pcibus_t size;
16 396af688 Anthony PERARD
    uint8_t type;
17 396af688 Anthony PERARD
    uint8_t bus_flags; /* Bus-specific bits */
18 396af688 Anthony PERARD
} XenHostPCIIORegion;
19 396af688 Anthony PERARD
20 396af688 Anthony PERARD
typedef struct XenHostPCIDevice {
21 396af688 Anthony PERARD
    uint16_t domain;
22 396af688 Anthony PERARD
    uint8_t bus;
23 396af688 Anthony PERARD
    uint8_t dev;
24 396af688 Anthony PERARD
    uint8_t func;
25 396af688 Anthony PERARD
26 396af688 Anthony PERARD
    uint16_t vendor_id;
27 396af688 Anthony PERARD
    uint16_t device_id;
28 396af688 Anthony PERARD
    int irq;
29 396af688 Anthony PERARD
30 396af688 Anthony PERARD
    XenHostPCIIORegion io_regions[PCI_NUM_REGIONS - 1];
31 396af688 Anthony PERARD
    XenHostPCIIORegion rom;
32 396af688 Anthony PERARD
33 396af688 Anthony PERARD
    bool is_virtfn;
34 396af688 Anthony PERARD
35 396af688 Anthony PERARD
    int config_fd;
36 396af688 Anthony PERARD
} XenHostPCIDevice;
37 396af688 Anthony PERARD
38 396af688 Anthony PERARD
int xen_host_pci_device_get(XenHostPCIDevice *d, uint16_t domain,
39 396af688 Anthony PERARD
                            uint8_t bus, uint8_t dev, uint8_t func);
40 396af688 Anthony PERARD
void xen_host_pci_device_put(XenHostPCIDevice *pci_dev);
41 396af688 Anthony PERARD
42 396af688 Anthony PERARD
int xen_host_pci_get_byte(XenHostPCIDevice *d, int pos, uint8_t *p);
43 396af688 Anthony PERARD
int xen_host_pci_get_word(XenHostPCIDevice *d, int pos, uint16_t *p);
44 396af688 Anthony PERARD
int xen_host_pci_get_long(XenHostPCIDevice *d, int pos, uint32_t *p);
45 396af688 Anthony PERARD
int xen_host_pci_get_block(XenHostPCIDevice *d, int pos, uint8_t *buf,
46 396af688 Anthony PERARD
                           int len);
47 396af688 Anthony PERARD
int xen_host_pci_set_byte(XenHostPCIDevice *d, int pos, uint8_t data);
48 396af688 Anthony PERARD
int xen_host_pci_set_word(XenHostPCIDevice *d, int pos, uint16_t data);
49 396af688 Anthony PERARD
int xen_host_pci_set_long(XenHostPCIDevice *d, int pos, uint32_t data);
50 396af688 Anthony PERARD
int xen_host_pci_set_block(XenHostPCIDevice *d, int pos, uint8_t *buf,
51 396af688 Anthony PERARD
                           int len);
52 396af688 Anthony PERARD
53 396af688 Anthony PERARD
int xen_host_pci_find_ext_cap_offset(XenHostPCIDevice *s, uint32_t cap);
54 396af688 Anthony PERARD
55 396af688 Anthony PERARD
#endif /* !XEN_HOST_PCI_DEVICE_H_ */