Dear Ronald,
I found a file named "pci-irq.c" in linux OS kernel
code(linux/arch/i386/kernel/pci-irq.c).
Following is part of this file. It is initializing irq routing of our chipset.
But it seem not be
executed during boot.
Do you know more about this file? Thanks!
Regards,
Collins
static int pirq_ali_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
{
static unsigned char irqmap[16] = { 0, 9, 3, 10, 4, 5, 7, 6, 1, 11, 0, 12,
0, 14, 0, 15 };
switch (pirq) {
case 0x00:
return 0;
default:
return irqmap[read_config_nybble(router, 0x48, pirq-1)];
case 0xfe:
return irqmap[read_config_nybble(router, 0x44, 0)];
case 0xff:
return irqmap[read_config_nybble(router, 0x75, 0)];
}
}
static void pirq_ali_ide_interrupt(struct pci_dev *router, unsigned reg,
unsigned val, unsigned irq)
{
u8 x;
pci_read_config_byte(router, reg, &x);
x = (x & 0xe0) | val; /* clear the level->edge transform */
pci_write_config_byte(router, reg, x);
}
static int pirq_ali_set(struct pci_dev *router, struct pci_dev *dev, int pirq,
int irq)
{
static unsigned char irqmap[16] = { 0, 8, 0, 2, 4, 5, 7, 6, 0, 1, 3, 9, 11,
0, 13, 15 };
unsigned int val = irqmap[irq];
if (val) {
switch (pirq) {
default:
write_config_nybble(router, 0x48, pirq-1, val);
break;
case 0xfe:
pirq_ali_ide_interrupt(router, 0x44, val, irq);
break;
case 0xff:
pirq_ali_ide_interrupt(router, 0x75, val, irq);
break;
}
return 1;
}
return 0;
}