Revision f114c826
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