root / hw / alpha / pci.c @ 47b43a1f
History | View | Annotate | Download (2.3 kB)
1 | 80bb2ff7 | Richard Henderson | /*
|
---|---|---|---|
2 | 80bb2ff7 | Richard Henderson | * QEMU Alpha PCI support functions.
|
3 | 80bb2ff7 | Richard Henderson | *
|
4 | 80bb2ff7 | Richard Henderson | * Some of this isn't very Alpha specific at all.
|
5 | 80bb2ff7 | Richard Henderson | *
|
6 | 80bb2ff7 | Richard Henderson | * ??? Sparse memory access not implemented.
|
7 | 80bb2ff7 | Richard Henderson | */
|
8 | 80bb2ff7 | Richard Henderson | |
9 | 80bb2ff7 | Richard Henderson | #include "config.h" |
10 | 47b43a1f | Paolo Bonzini | #include "alpha_sys.h" |
11 | 1de7afc9 | Paolo Bonzini | #include "qemu/log.h" |
12 | 9c17d615 | Paolo Bonzini | #include "sysemu/sysemu.h" |
13 | 80bb2ff7 | Richard Henderson | |
14 | 80bb2ff7 | Richard Henderson | |
15 | 80bb2ff7 | Richard Henderson | /* PCI IO reads/writes, to byte-word addressable memory. */
|
16 | 80bb2ff7 | Richard Henderson | /* ??? Doesn't handle multiple PCI busses. */
|
17 | 80bb2ff7 | Richard Henderson | |
18 | a8170e5e | Avi Kivity | static uint64_t bw_io_read(void *opaque, hwaddr addr, unsigned size) |
19 | 80bb2ff7 | Richard Henderson | { |
20 | 80bb2ff7 | Richard Henderson | switch (size) {
|
21 | 80bb2ff7 | Richard Henderson | case 1: |
22 | 80bb2ff7 | Richard Henderson | return cpu_inb(addr);
|
23 | 80bb2ff7 | Richard Henderson | case 2: |
24 | 80bb2ff7 | Richard Henderson | return cpu_inw(addr);
|
25 | 80bb2ff7 | Richard Henderson | case 4: |
26 | 80bb2ff7 | Richard Henderson | return cpu_inl(addr);
|
27 | 80bb2ff7 | Richard Henderson | } |
28 | 80bb2ff7 | Richard Henderson | abort(); |
29 | 80bb2ff7 | Richard Henderson | } |
30 | 80bb2ff7 | Richard Henderson | |
31 | a8170e5e | Avi Kivity | static void bw_io_write(void *opaque, hwaddr addr, |
32 | 80bb2ff7 | Richard Henderson | uint64_t val, unsigned size)
|
33 | 80bb2ff7 | Richard Henderson | { |
34 | 80bb2ff7 | Richard Henderson | switch (size) {
|
35 | 80bb2ff7 | Richard Henderson | case 1: |
36 | 80bb2ff7 | Richard Henderson | cpu_outb(addr, val); |
37 | 80bb2ff7 | Richard Henderson | break;
|
38 | 80bb2ff7 | Richard Henderson | case 2: |
39 | 80bb2ff7 | Richard Henderson | cpu_outw(addr, val); |
40 | 80bb2ff7 | Richard Henderson | break;
|
41 | 80bb2ff7 | Richard Henderson | case 4: |
42 | 80bb2ff7 | Richard Henderson | cpu_outl(addr, val); |
43 | 80bb2ff7 | Richard Henderson | break;
|
44 | 80bb2ff7 | Richard Henderson | default:
|
45 | 80bb2ff7 | Richard Henderson | abort(); |
46 | 80bb2ff7 | Richard Henderson | } |
47 | 80bb2ff7 | Richard Henderson | } |
48 | 80bb2ff7 | Richard Henderson | |
49 | 80bb2ff7 | Richard Henderson | const MemoryRegionOps alpha_pci_bw_io_ops = {
|
50 | 80bb2ff7 | Richard Henderson | .read = bw_io_read, |
51 | 80bb2ff7 | Richard Henderson | .write = bw_io_write, |
52 | 80bb2ff7 | Richard Henderson | .endianness = DEVICE_LITTLE_ENDIAN, |
53 | 80bb2ff7 | Richard Henderson | .impl = { |
54 | 80bb2ff7 | Richard Henderson | .min_access_size = 1,
|
55 | 80bb2ff7 | Richard Henderson | .max_access_size = 4,
|
56 | 80bb2ff7 | Richard Henderson | }, |
57 | 80bb2ff7 | Richard Henderson | }; |
58 | 80bb2ff7 | Richard Henderson | |
59 | 80bb2ff7 | Richard Henderson | /* PCI config space reads/writes, to byte-word addressable memory. */
|
60 | a8170e5e | Avi Kivity | static uint64_t bw_conf1_read(void *opaque, hwaddr addr, |
61 | 80bb2ff7 | Richard Henderson | unsigned size)
|
62 | 80bb2ff7 | Richard Henderson | { |
63 | 80bb2ff7 | Richard Henderson | PCIBus *b = opaque; |
64 | 80bb2ff7 | Richard Henderson | return pci_data_read(b, addr, size);
|
65 | 80bb2ff7 | Richard Henderson | } |
66 | 80bb2ff7 | Richard Henderson | |
67 | a8170e5e | Avi Kivity | static void bw_conf1_write(void *opaque, hwaddr addr, |
68 | 80bb2ff7 | Richard Henderson | uint64_t val, unsigned size)
|
69 | 80bb2ff7 | Richard Henderson | { |
70 | 80bb2ff7 | Richard Henderson | PCIBus *b = opaque; |
71 | 80bb2ff7 | Richard Henderson | pci_data_write(b, addr, val, size); |
72 | 80bb2ff7 | Richard Henderson | } |
73 | 80bb2ff7 | Richard Henderson | |
74 | 80bb2ff7 | Richard Henderson | const MemoryRegionOps alpha_pci_conf1_ops = {
|
75 | 80bb2ff7 | Richard Henderson | .read = bw_conf1_read, |
76 | 80bb2ff7 | Richard Henderson | .write = bw_conf1_write, |
77 | 80bb2ff7 | Richard Henderson | .endianness = DEVICE_LITTLE_ENDIAN, |
78 | 80bb2ff7 | Richard Henderson | .impl = { |
79 | 80bb2ff7 | Richard Henderson | .min_access_size = 1,
|
80 | 80bb2ff7 | Richard Henderson | .max_access_size = 4,
|
81 | 80bb2ff7 | Richard Henderson | }, |
82 | 80bb2ff7 | Richard Henderson | }; |
83 | 80bb2ff7 | Richard Henderson | |
84 | 80bb2ff7 | Richard Henderson | /* PCI/EISA Interrupt Acknowledge Cycle. */
|
85 | 80bb2ff7 | Richard Henderson | |
86 | a8170e5e | Avi Kivity | static uint64_t iack_read(void *opaque, hwaddr addr, unsigned size) |
87 | 80bb2ff7 | Richard Henderson | { |
88 | 80bb2ff7 | Richard Henderson | return pic_read_irq(isa_pic);
|
89 | 80bb2ff7 | Richard Henderson | } |
90 | 80bb2ff7 | Richard Henderson | |
91 | a8170e5e | Avi Kivity | static void special_write(void *opaque, hwaddr addr, |
92 | 80bb2ff7 | Richard Henderson | uint64_t val, unsigned size)
|
93 | 80bb2ff7 | Richard Henderson | { |
94 | 80bb2ff7 | Richard Henderson | qemu_log("pci: special write cycle");
|
95 | 80bb2ff7 | Richard Henderson | } |
96 | 80bb2ff7 | Richard Henderson | |
97 | 80bb2ff7 | Richard Henderson | const MemoryRegionOps alpha_pci_iack_ops = {
|
98 | 80bb2ff7 | Richard Henderson | .read = iack_read, |
99 | 80bb2ff7 | Richard Henderson | .write = special_write, |
100 | 80bb2ff7 | Richard Henderson | .endianness = DEVICE_LITTLE_ENDIAN, |
101 | 80bb2ff7 | Richard Henderson | .valid = { |
102 | 80bb2ff7 | Richard Henderson | .min_access_size = 4,
|
103 | 80bb2ff7 | Richard Henderson | .max_access_size = 4,
|
104 | 80bb2ff7 | Richard Henderson | }, |
105 | 80bb2ff7 | Richard Henderson | .impl = { |
106 | 80bb2ff7 | Richard Henderson | .min_access_size = 4,
|
107 | 80bb2ff7 | Richard Henderson | .max_access_size = 4,
|
108 | 80bb2ff7 | Richard Henderson | }, |
109 | 80bb2ff7 | Richard Henderson | }; |