Revision b41a2cd1 hw/i8259.c
b/hw/i8259.c | ||
---|---|---|
46 | 46 |
/* debug PIC */ |
47 | 47 |
//#define DEBUG_PIC |
48 | 48 |
|
49 |
//#define DEBUG_IRQ_LATENCY |
|
50 |
|
|
49 | 51 |
typedef struct PicState { |
50 | 52 |
uint8_t last_irr; /* edge detection */ |
51 | 53 |
uint8_t irr; /* interrupt request register */ |
... | ... | |
220 | 222 |
return intno; |
221 | 223 |
} |
222 | 224 |
|
223 |
void pic_ioport_write(CPUState *env, uint32_t addr, uint32_t val)
|
|
225 |
static void pic_ioport_write(void *opaque, uint32_t addr, uint32_t val)
|
|
224 | 226 |
{ |
225 |
PicState *s; |
|
227 |
PicState *s = opaque;
|
|
226 | 228 |
int priority, cmd, irq; |
227 | 229 |
|
228 | 230 |
#ifdef DEBUG_PIC |
229 | 231 |
printf("pic_write: addr=0x%02x val=0x%02x\n", addr, val); |
230 | 232 |
#endif |
231 |
s = &pics[addr >> 7]; |
|
232 | 233 |
addr &= 1; |
233 | 234 |
if (addr == 0) { |
234 | 235 |
if (val & 0x10) { |
... | ... | |
334 | 335 |
return ret; |
335 | 336 |
} |
336 | 337 |
|
337 |
uint32_t pic_ioport_read(CPUState *env, uint32_t addr1)
|
|
338 |
static uint32_t pic_ioport_read(void *opaque, uint32_t addr1)
|
|
338 | 339 |
{ |
339 |
PicState *s; |
|
340 |
PicState *s = opaque;
|
|
340 | 341 |
unsigned int addr; |
341 | 342 |
int ret; |
342 | 343 |
|
343 | 344 |
addr = addr1; |
344 |
s = &pics[addr >> 7]; |
|
345 | 345 |
addr &= 1; |
346 | 346 |
if (s->poll) { |
347 | 347 |
ret = pic_poll_read(s, addr1); |
... | ... | |
378 | 378 |
|
379 | 379 |
void pic_init(void) |
380 | 380 |
{ |
381 |
#if defined (TARGET_I386) || defined (TARGET_PPC) |
|
382 |
register_ioport_write(0x20, 2, pic_ioport_write, 1); |
|
383 |
register_ioport_read(0x20, 2, pic_ioport_read, 1); |
|
384 |
register_ioport_write(0xa0, 2, pic_ioport_write, 1); |
|
385 |
register_ioport_read(0xa0, 2, pic_ioport_read, 1); |
|
386 |
#endif |
|
381 |
register_ioport_write(0x20, 2, 1, pic_ioport_write, &pics[0]); |
|
382 |
register_ioport_read(0x20, 2, 1, pic_ioport_read, &pics[0]); |
|
383 |
register_ioport_write(0xa0, 2, 1, pic_ioport_write, &pics[1]); |
|
384 |
register_ioport_read(0xa0, 2, 1, pic_ioport_read, &pics[1]); |
|
387 | 385 |
} |
388 | 386 |
|
Also available in: Unified diff