Revision 4e7ed2d1 hw/sh_serial.c

b/hw/sh_serial.c
61 61

  
62 62
    CharDriverState *chr;
63 63

  
64
    struct intc_source *eri;
65
    struct intc_source *rxi;
66
    struct intc_source *txi;
67
    struct intc_source *tei;
68
    struct intc_source *bri;
64
    qemu_irq eri;
65
    qemu_irq rxi;
66
    qemu_irq txi;
67
    qemu_irq tei;
68
    qemu_irq bri;
69 69
} sh_serial_state;
70 70

  
71 71
static void sh_serial_clear_fifo(sh_serial_state * s)
......
98 98
        if (!(val & (1 << 5)))
99 99
            s->flags |= SH_SERIAL_FLAG_TEND;
100 100
        if ((s->feat & SH_SERIAL_FEAT_SCIF) && s->txi) {
101
            if ((val & (1 << 7)) && !(s->txi->asserted))
102
                sh_intc_toggle_source(s->txi, 0, 1);
103
            else if (!(val & (1 << 7)) && s->txi->asserted)
104
                sh_intc_toggle_source(s->txi, 0, -1);
101
	    qemu_set_irq(s->txi, val & (1 << 7));
105 102
        }
106
        if (!(val & (1 << 6)) && s->rxi->asserted) {
107
	    sh_intc_toggle_source(s->rxi, 0, -1);
103
        if (!(val & (1 << 6))) {
104
	    qemu_set_irq(s->rxi, 0);
108 105
        }
109 106
        return;
110 107
    case 0x0c: /* FTDR / TDR */
......
136 133
                s->flags &= ~SH_SERIAL_FLAG_DR;
137 134

  
138 135
            if (!(val & (1 << 1)) || !(val & (1 << 0))) {
139
                if (s->rxi && s->rxi->asserted) {
140
                    sh_intc_toggle_source(s->rxi, 0, -1);
136
                if (s->rxi) {
137
                    qemu_set_irq(s->rxi, 0);
141 138
                }
142 139
            }
143 140
            return;
......
309 306
            if (s->rx_cnt >= s->rtrg) {
310 307
                s->flags |= SH_SERIAL_FLAG_RDF;
311 308
                if (s->scr & (1 << 6) && s->rxi) {
312
                    sh_intc_toggle_source(s->rxi, 0, 1);
309
                    qemu_set_irq(s->rxi, 1);
313 310
                }
314 311
            }
315 312
        }
......
370 367

  
371 368
void sh_serial_init (target_phys_addr_t base, int feat,
372 369
		     uint32_t freq, CharDriverState *chr,
373
		     struct intc_source *eri_source,
374
		     struct intc_source *rxi_source,
375
		     struct intc_source *txi_source,
376
		     struct intc_source *tei_source,
377
		     struct intc_source *bri_source)
370
		     qemu_irq eri_source,
371
		     qemu_irq rxi_source,
372
		     qemu_irq txi_source,
373
		     qemu_irq tei_source,
374
		     qemu_irq bri_source)
378 375
{
379 376
    sh_serial_state *s;
380 377
    int s_io_memory;

Also available in: Unified diff