Revision 775616c3 hw/pl061.c
b/hw/pl061.c | ||
---|---|---|
48 | 48 |
uint8_t slr; |
49 | 49 |
uint8_t den; |
50 | 50 |
uint8_t cr; |
51 |
uint8_t float_high; |
|
51 | 52 |
qemu_irq irq; |
52 | 53 |
qemu_irq out[8]; |
53 | 54 |
} pl061_state; |
... | ... | |
56 | 57 |
{ |
57 | 58 |
uint8_t changed; |
58 | 59 |
uint8_t mask; |
60 |
uint8_t out; |
|
59 | 61 |
int i; |
60 | 62 |
|
61 |
changed = s->old_data ^ s->data; |
|
63 |
/* Outputs float high. */ |
|
64 |
/* FIXME: This is board dependent. */ |
|
65 |
out = (s->data & s->dir) | ~s->dir; |
|
66 |
changed = s->old_data ^ out; |
|
62 | 67 |
if (!changed) |
63 | 68 |
return; |
64 | 69 |
|
65 |
s->old_data = s->data;
|
|
70 |
s->old_data = out;
|
|
66 | 71 |
for (i = 0; i < 8; i++) { |
67 | 72 |
mask = 1 << i; |
68 |
if ((changed & mask & s->dir) && s->out) {
|
|
69 |
DPRINTF("Set output %d = %d\n", i, (s->data & mask) != 0);
|
|
70 |
qemu_set_irq(s->out[i], (s->data & mask) != 0);
|
|
73 |
if ((changed & mask) && s->out) { |
|
74 |
DPRINTF("Set output %d = %d\n", i, (out & mask) != 0);
|
|
75 |
qemu_set_irq(s->out[i], (out & mask) != 0);
|
|
71 | 76 |
} |
72 | 77 |
} |
73 | 78 |
|
Also available in: Unified diff