Revision bc24a225 hw/pxa2xx_gpio.c
b/hw/pxa2xx_gpio.c | ||
---|---|---|
12 | 12 |
|
13 | 13 |
#define PXA2XX_GPIO_BANKS 4 |
14 | 14 |
|
15 |
struct pxa2xx_gpio_info_s {
|
|
15 |
struct PXA2xxGPIOInfo {
|
|
16 | 16 |
qemu_irq *pic; |
17 | 17 |
int lines; |
18 | 18 |
CPUState *cpu_env; |
... | ... | |
63 | 63 |
PXA2XX_REG(GAFR_U, 0x058, 0x060, 0x068, 0x070) |
64 | 64 |
}; |
65 | 65 |
|
66 |
static void pxa2xx_gpio_irq_update(struct pxa2xx_gpio_info_s *s)
|
|
66 |
static void pxa2xx_gpio_irq_update(PXA2xxGPIOInfo *s)
|
|
67 | 67 |
{ |
68 | 68 |
if (s->status[0] & (1 << 0)) |
69 | 69 |
qemu_irq_raise(s->pic[PXA2XX_PIC_GPIO_0]); |
... | ... | |
88 | 88 |
|
89 | 89 |
static void pxa2xx_gpio_set(void *opaque, int line, int level) |
90 | 90 |
{ |
91 |
struct pxa2xx_gpio_info_s *s = (struct pxa2xx_gpio_info_s *) opaque;
|
|
91 |
PXA2xxGPIOInfo *s = (PXA2xxGPIOInfo *) opaque;
|
|
92 | 92 |
int bank; |
93 | 93 |
uint32_t mask; |
94 | 94 |
|
... | ... | |
118 | 118 |
cpu_interrupt(s->cpu_env, CPU_INTERRUPT_EXITTB); |
119 | 119 |
} |
120 | 120 |
|
121 |
static void pxa2xx_gpio_handler_update(struct pxa2xx_gpio_info_s *s) {
|
|
121 |
static void pxa2xx_gpio_handler_update(PXA2xxGPIOInfo *s) {
|
|
122 | 122 |
uint32_t level, diff; |
123 | 123 |
int i, bit, line; |
124 | 124 |
for (i = 0; i < PXA2XX_GPIO_BANKS; i ++) { |
... | ... | |
136 | 136 |
|
137 | 137 |
static uint32_t pxa2xx_gpio_read(void *opaque, target_phys_addr_t offset) |
138 | 138 |
{ |
139 |
struct pxa2xx_gpio_info_s *s = (struct pxa2xx_gpio_info_s *) opaque;
|
|
139 |
PXA2xxGPIOInfo *s = (PXA2xxGPIOInfo *) opaque;
|
|
140 | 140 |
uint32_t ret; |
141 | 141 |
int bank; |
142 | 142 |
if (offset >= 0x200) |
... | ... | |
188 | 188 |
static void pxa2xx_gpio_write(void *opaque, |
189 | 189 |
target_phys_addr_t offset, uint32_t value) |
190 | 190 |
{ |
191 |
struct pxa2xx_gpio_info_s *s = (struct pxa2xx_gpio_info_s *) opaque;
|
|
191 |
PXA2xxGPIOInfo *s = (PXA2xxGPIOInfo *) opaque;
|
|
192 | 192 |
int bank; |
193 | 193 |
if (offset >= 0x200) |
194 | 194 |
return; |
... | ... | |
251 | 251 |
|
252 | 252 |
static void pxa2xx_gpio_save(QEMUFile *f, void *opaque) |
253 | 253 |
{ |
254 |
struct pxa2xx_gpio_info_s *s = (struct pxa2xx_gpio_info_s *) opaque;
|
|
254 |
PXA2xxGPIOInfo *s = (PXA2xxGPIOInfo *) opaque;
|
|
255 | 255 |
int i; |
256 | 256 |
|
257 | 257 |
qemu_put_be32(f, s->lines); |
... | ... | |
272 | 272 |
|
273 | 273 |
static int pxa2xx_gpio_load(QEMUFile *f, void *opaque, int version_id) |
274 | 274 |
{ |
275 |
struct pxa2xx_gpio_info_s *s = (struct pxa2xx_gpio_info_s *) opaque;
|
|
275 |
PXA2xxGPIOInfo *s = (PXA2xxGPIOInfo *) opaque;
|
|
276 | 276 |
int i; |
277 | 277 |
|
278 | 278 |
if (qemu_get_be32(f) != s->lines) |
... | ... | |
294 | 294 |
return 0; |
295 | 295 |
} |
296 | 296 |
|
297 |
struct pxa2xx_gpio_info_s *pxa2xx_gpio_init(target_phys_addr_t base,
|
|
297 |
PXA2xxGPIOInfo *pxa2xx_gpio_init(target_phys_addr_t base,
|
|
298 | 298 |
CPUState *env, qemu_irq *pic, int lines) |
299 | 299 |
{ |
300 | 300 |
int iomemtype; |
301 |
struct pxa2xx_gpio_info_s *s;
|
|
301 |
PXA2xxGPIOInfo *s;
|
|
302 | 302 |
|
303 |
s = (struct pxa2xx_gpio_info_s *)
|
|
304 |
qemu_mallocz(sizeof(struct pxa2xx_gpio_info_s));
|
|
305 |
memset(s, 0, sizeof(struct pxa2xx_gpio_info_s));
|
|
303 |
s = (PXA2xxGPIOInfo *)
|
|
304 |
qemu_mallocz(sizeof(PXA2xxGPIOInfo));
|
|
305 |
memset(s, 0, sizeof(PXA2xxGPIOInfo));
|
|
306 | 306 |
s->pic = pic; |
307 | 307 |
s->lines = lines; |
308 | 308 |
s->cpu_env = env; |
... | ... | |
318 | 318 |
return s; |
319 | 319 |
} |
320 | 320 |
|
321 |
qemu_irq *pxa2xx_gpio_in_get(struct pxa2xx_gpio_info_s *s)
|
|
321 |
qemu_irq *pxa2xx_gpio_in_get(PXA2xxGPIOInfo *s)
|
|
322 | 322 |
{ |
323 | 323 |
return s->in; |
324 | 324 |
} |
325 | 325 |
|
326 |
void pxa2xx_gpio_out_set(struct pxa2xx_gpio_info_s *s,
|
|
326 |
void pxa2xx_gpio_out_set(PXA2xxGPIOInfo *s,
|
|
327 | 327 |
int line, qemu_irq handler) |
328 | 328 |
{ |
329 | 329 |
if (line >= s->lines) { |
... | ... | |
338 | 338 |
* Registers a callback to notify on GPLR reads. This normally |
339 | 339 |
* shouldn't be needed but it is used for the hack on Spitz machines. |
340 | 340 |
*/ |
341 |
void pxa2xx_gpio_read_notifier(struct pxa2xx_gpio_info_s *s, qemu_irq handler)
|
|
341 |
void pxa2xx_gpio_read_notifier(PXA2xxGPIOInfo *s, qemu_irq handler)
|
|
342 | 342 |
{ |
343 | 343 |
s->read_notify = handler; |
344 | 344 |
} |
Also available in: Unified diff