Revision c6d86a33

b/hw/sh.h
42 42
		     qemu_irq tei_source,
43 43
		     qemu_irq bri_source);
44 44

  
45
/* sh7750.c */
46
qemu_irq sh7750_irl(struct SH7750State *s);
47

  
45 48
/* tc58128.c */
46 49
int tc58128_init(struct SH7750State *s, const char *zone1, const char *zone2);
47 50

  
b/hw/sh7750.c
412 412
	UNUSED = 0,
413 413

  
414 414
	/* interrupt sources */
415
	IRL0, IRL1, IRL2, IRL3, /* only IRLM mode supported */
415
	IRL_0, IRL_1, IRL_2, IRL_3, IRL_4, IRL_5, IRL_6, IRL_7,
416
	IRL_8, IRL_9, IRL_A, IRL_B, IRL_C, IRL_D, IRL_E,
417
	IRL0, IRL1, IRL2, IRL3,
416 418
	HUDI, GPIOI,
417 419
	DMAC_DMTE0, DMAC_DMTE1, DMAC_DMTE2, DMAC_DMTE3,
418 420
	DMAC_DMTE4, DMAC_DMTE5, DMAC_DMTE6, DMAC_DMTE7,
......
428 430

  
429 431
	/* interrupt groups */
430 432
	DMAC, PCIC1, TMU2, RTC, SCI1, SCIF, REF,
433
	/* irl bundle */
434
	IRL,
431 435

  
432 436
	NR_SOURCES,
433 437
};
......
529 533
		   PCIC1_PCIDMA0, PCIC1_PCIDMA1, PCIC1_PCIDMA2, PCIC1_PCIDMA3),
530 534
};
531 535

  
536
static struct intc_vect vectors_irl[] = {
537
	INTC_VECT(IRL_0, 0x200),
538
	INTC_VECT(IRL_1, 0x220),
539
	INTC_VECT(IRL_2, 0x240),
540
	INTC_VECT(IRL_3, 0x260),
541
	INTC_VECT(IRL_4, 0x280),
542
	INTC_VECT(IRL_5, 0x2a0),
543
	INTC_VECT(IRL_6, 0x2c0),
544
	INTC_VECT(IRL_7, 0x2e0),
545
	INTC_VECT(IRL_8, 0x300),
546
	INTC_VECT(IRL_9, 0x320),
547
	INTC_VECT(IRL_A, 0x340),
548
	INTC_VECT(IRL_B, 0x360),
549
	INTC_VECT(IRL_C, 0x380),
550
	INTC_VECT(IRL_D, 0x3a0),
551
	INTC_VECT(IRL_E, 0x3c0),
552
};
553

  
554
static struct intc_group groups_irl[] = {
555
	INTC_GROUP(IRL, IRL_0, IRL_1, IRL_2, IRL_3, IRL_4, IRL_5, IRL_6,
556
		IRL_7, IRL_8, IRL_9, IRL_A, IRL_B, IRL_C, IRL_D, IRL_E),
557
};
558

  
532 559
/**********************************************************************
533 560
 Memory mapped cache and TLB
534 561
**********************************************************************/
......
718 745
				 NULL, 0);
719 746
    }
720 747

  
748
    sh_intc_register_sources(&s->intc,
749
				_INTC_ARRAY(vectors_irl),
750
				_INTC_ARRAY(groups_irl));
721 751
    return s;
722 752
}
753

  
754
qemu_irq sh7750_irl(SH7750State *s)
755
{
756
    sh_intc_toggle_source(sh_intc_source(&s->intc, IRL), 1, 0); /* enable */
757
    return qemu_allocate_irqs(sh_intc_set_irl, sh_intc_source(&s->intc, IRL),
758
                               1)[0];
759
}
760

  
b/hw/sh_intc.c
465 465

  
466 466
    return 0;
467 467
}
468

  
469
/* Assert level <n> IRL interrupt. 
470
   0:deassert. 1:lowest priority,... 15:highest priority. */
471
void sh_intc_set_irl(void *opaque, int n, int level)
472
{
473
    struct intc_source *s = opaque;
474
    int i, irl = level ^ 15;
475
    for (i = 0; (s = sh_intc_source(s->parent, s->next_enum_id)); i++) {
476
	if (i == irl)
477
	    sh_intc_toggle_source(s, s->enable_count?0:1, s->asserted?0:1);
478
	else
479
	    if (s->asserted)
480
	        sh_intc_toggle_source(s, 0, -1);
481
    }
482
}
b/hw/sh_intc.h
75 75
		 struct intc_prio_reg *prio_regs,
76 76
		 int nr_prio_regs);
77 77

  
78
void sh_intc_set_irl(void *opaque, int n, int level);
79

  
78 80
#endif /* __SH_INTC_H__ */

Also available in: Unified diff