Revision cadae95f hw/cuda.c

b/hw/cuda.c
120 120
    int data_in_index;
121 121
    int data_out_index;
122 122

  
123
    SetIRQFunc *set_irq;
123 124
    int irq;
124
    openpic_t *openpic;
125
    void *irq_opaque;
125 126
    uint8_t autopoll;
126 127
    uint8_t data_in[128];
127 128
    uint8_t data_out[16];
......
140 141
static void cuda_update_irq(CUDAState *s)
141 142
{
142 143
    if (s->ifr & s->ier & (SR_INT | T1_INT)) {
143
        openpic_set_irq(s->openpic, s->irq, 1);
144
        s->set_irq(s->irq_opaque, s->irq, 1);
144 145
    } else {
145
        openpic_set_irq(s->openpic, s->irq, 0);
146
        s->set_irq(s->irq_opaque, s->irq, 0);
146 147
    }
147 148
}
148 149

  
......
356 357
        cuda_update_irq(s);
357 358
        break;
358 359
    case 14:
360
#if 0
359 361
        if (val & IER_SET) {
360 362
            /* set bits */
361 363
            s->ier |= val & 0x7f;
......
363 365
            /* reset bits */
364 366
            s->ier &= ~val;
365 367
        }
368
#else
369
        /* XXX: please explain me why the SPEC is not correct ! */
370
        s->ier = val;
371
#endif
366 372
        cuda_update_irq(s);
367 373
        break;
368 374
    default:
......
545 551
#ifdef DEBUG_CUDA_PACKET
546 552
    {
547 553
        int i;
548
        printf("cuda_receive_packet_to_host:\n");
554
        printf("cuda_receive_packet_from_host:\n");
549 555
        for(i = 0; i < len; i++)
550 556
            printf(" %02x", data[i]);
551 557
        printf("\n");
......
605 611
    &cuda_readl,
606 612
};
607 613

  
608
int cuda_init(openpic_t *openpic, int irq)
614
int cuda_init(SetIRQFunc *set_irq, void *irq_opaque, int irq)
609 615
{
610 616
    CUDAState *s = &cuda_state;
611 617
    int cuda_mem_index;
612 618

  
613
    s->openpic = openpic;
619
    s->set_irq = set_irq;
620
    s->irq_opaque = irq_opaque;
614 621
    s->irq = irq;
615 622

  
616 623
    s->timers[0].timer = qemu_new_timer(vm_clock, cuda_timer1, s);
617 624
    s->timers[0].latch = 0x10000;
618 625
    set_counter(s, &s->timers[0], 0xffff);
619 626
    s->timers[1].latch = 0x10000;
620
    s->ier = T1_INT | SR_INT;
627
    //    s->ier = T1_INT | SR_INT;
628
    s->ier = 0;
621 629
    set_counter(s, &s->timers[1], 0xffff);
622 630

  
623 631
    s->adb_poll_timer = qemu_new_timer(vm_clock, cuda_adb_poll, s);

Also available in: Unified diff