Revision f114c826 hw/pxa2xx_dma.c

b/hw/pxa2xx_dma.c
426 426
    pxa2xx_dma_write
427 427
};
428 428

  
429
static void pxa2xx_dma_request(void *opaque, int req_num, int on);
429
static void pxa2xx_dma_request(void *opaque, int req_num, int on)
430
{
431
    PXA2xxDMAState *s = opaque;
432
    int ch;
433
    if (req_num < 0 || req_num >= PXA2XX_DMA_NUM_REQUESTS)
434
        hw_error("%s: Bad DMA request %i\n", __FUNCTION__, req_num);
435

  
436
    if (!(s->req[req_num] & DRCMR_MAPVLD))
437
        return;
438
    ch = s->req[req_num] & DRCMR_CHLNUM;
439

  
440
    if (!s->chan[ch].request && on)
441
        s->chan[ch].state |= DCSR_RASINTR;
442
    else
443
        s->chan[ch].state &= ~DCSR_RASINTR;
444
    if (s->chan[ch].request && !on)
445
        s->chan[ch].state |= DCSR_EORINT;
446

  
447
    s->chan[ch].request = on;
448
    if (on) {
449
        pxa2xx_dma_run(s);
450
        pxa2xx_dma_update(s, ch);
451
    }
452
}
430 453

  
431 454
static int pxa2xx_dma_init(SysBusDevice *dev)
432 455
{
......
484 507
    return dev;
485 508
}
486 509

  
487
static void pxa2xx_dma_request(void *opaque, int req_num, int on)
488
{
489
    PXA2xxDMAState *s = opaque;
490
    int ch;
491
    if (req_num < 0 || req_num >= PXA2XX_DMA_NUM_REQUESTS)
492
        hw_error("%s: Bad DMA request %i\n", __FUNCTION__, req_num);
493

  
494
    if (!(s->req[req_num] & DRCMR_MAPVLD))
495
        return;
496
    ch = s->req[req_num] & DRCMR_CHLNUM;
497

  
498
    if (!s->chan[ch].request && on)
499
        s->chan[ch].state |= DCSR_RASINTR;
500
    else
501
        s->chan[ch].state &= ~DCSR_RASINTR;
502
    if (s->chan[ch].request && !on)
503
        s->chan[ch].state |= DCSR_EORINT;
504

  
505
    s->chan[ch].request = on;
506
    if (on) {
507
        pxa2xx_dma_run(s);
508
        pxa2xx_dma_update(s, ch);
509
    }
510
}
511

  
512 510
static bool is_version_0(void *opaque, int version_id)
513 511
{
514 512
    return version_id == 0;

Also available in: Unified diff