1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#if !defined(__PPC_MAC_H__)
26#define __PPC_MAC_H__
27
28#include "exec/memory.h"
29#include "hw/sysbus.h"
30#include "hw/ide/internal.h"
31#include "hw/input/adb.h"
32
33
34#define MAX_CPUS 1
35
36#define BIOS_SIZE (1024 * 1024)
37#define NVRAM_SIZE 0x2000
38#define PROM_FILENAME "openbios-ppc"
39#define PROM_ADDR 0xfff00000
40
41#define KERNEL_LOAD_ADDR 0x01000000
42#define KERNEL_GAP 0x00100000
43
44#define ESCC_CLOCK 3686400
45
46
47#define TYPE_CUDA "cuda"
48#define CUDA(obj) OBJECT_CHECK(CUDAState, (obj), TYPE_CUDA)
49
50
51
52
53
54typedef struct CUDATimer {
55 int index;
56 uint16_t latch;
57 uint16_t counter_value;
58 int64_t load_time;
59 int64_t next_irq_time;
60 uint64_t frequency;
61 QEMUTimer *timer;
62} CUDATimer;
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79typedef struct CUDAState {
80
81 SysBusDevice parent_obj;
82
83
84 MemoryRegion mem;
85
86 uint8_t b;
87 uint8_t a;
88 uint8_t dirb;
89 uint8_t dira;
90 uint8_t sr;
91 uint8_t acr;
92 uint8_t pcr;
93 uint8_t ifr;
94 uint8_t ier;
95 uint8_t anh;
96
97 ADBBusState adb_bus;
98 CUDATimer timers[2];
99
100 uint32_t tick_offset;
101 uint64_t frequency;
102
103 uint8_t last_b;
104 uint8_t last_acr;
105
106 int data_in_size;
107 int data_in_index;
108 int data_out_index;
109
110 qemu_irq irq;
111 uint8_t autopoll;
112 uint8_t data_in[128];
113 uint8_t data_out[16];
114 QEMUTimer *adb_poll_timer;
115} CUDAState;
116
117
118#define TYPE_OLDWORLD_MACIO "macio-oldworld"
119#define TYPE_NEWWORLD_MACIO "macio-newworld"
120
121#define TYPE_MACIO_IDE "macio-ide"
122#define MACIO_IDE(obj) OBJECT_CHECK(MACIOIDEState, (obj), TYPE_MACIO_IDE)
123
124typedef struct MACIOIDEState {
125
126 SysBusDevice parent_obj;
127
128
129 qemu_irq irq;
130 qemu_irq dma_irq;
131
132 MemoryRegion mem;
133 IDEBus bus;
134 BlockAIOCB *aiocb;
135 IDEDMA dma;
136 void *dbdma;
137 bool dma_active;
138} MACIOIDEState;
139
140void macio_ide_init_drives(MACIOIDEState *ide, DriveInfo **hd_table);
141void macio_ide_register_dma(MACIOIDEState *ide, void *dbdma, int channel);
142
143void macio_init(PCIDevice *dev,
144 MemoryRegion *pic_mem,
145 MemoryRegion *escc_mem);
146
147
148qemu_irq *heathrow_pic_init(MemoryRegion **pmem,
149 int nb_cpus, qemu_irq **irqs);
150
151
152#define TYPE_GRACKLE_PCI_HOST_BRIDGE "grackle-pcihost"
153PCIBus *pci_grackle_init(uint32_t base, qemu_irq *pic,
154 MemoryRegion *address_space_mem,
155 MemoryRegion *address_space_io);
156
157
158PCIBus *pci_pmac_init(qemu_irq *pic,
159 MemoryRegion *address_space_mem,
160 MemoryRegion *address_space_io);
161PCIBus *pci_pmac_u3_init(qemu_irq *pic,
162 MemoryRegion *address_space_mem,
163 MemoryRegion *address_space_io);
164
165
166#define TYPE_MACIO_NVRAM "macio-nvram"
167#define MACIO_NVRAM(obj) \
168 OBJECT_CHECK(MacIONVRAMState, (obj), TYPE_MACIO_NVRAM)
169
170typedef struct MacIONVRAMState {
171
172 SysBusDevice parent_obj;
173
174
175 uint32_t size;
176 uint32_t it_shift;
177
178 MemoryRegion mem;
179 uint8_t *data;
180} MacIONVRAMState;
181
182void pmac_format_nvram_partition (MacIONVRAMState *nvr, int len);
183#endif
184