int
lemote_intr_map(int dev, int fn, int pin)
{
	switch (dev) {
	/* onboard devices, only pin A is wired */
	case 6:
	case 7:
	case 8:
	case 9:
		if (pin == PCI_INTERRUPT_PIN_A)
			return BONITO_DIRECT_IRQ(LOONGSON_INTR_PCIA +
			    (dev - 6));
		break;
	/* PCI slot */
	case 10:
		return BONITO_DIRECT_IRQ(LOONGSON_INTR_PCIA +
		    (pin - PCI_INTERRUPT_PIN_A));
	/* Geode chip */
	case 14:
		switch (fn) {
		case 1:	/* Flash */
			return BONITO_ISA_IRQ(6);
		case 3:	/* AC97 */
			return BONITO_ISA_IRQ(9);
		case 4:	/* OHCI */
		case 5:	/* EHCI */
			return BONITO_ISA_IRQ(11);
		}
		break;
	default:
		break;
	}

	return -1;
}
示例#2
0
int
gdium_intr_map(int dev, int fn, int pin, pci_intr_handle_t *ihp)
{
	switch (dev) {
	/* mini-PCI slot */
	case 13:	/* C D A B */
		*ihp = BONITO_DIRECT_IRQ(LOONGSON_INTR_PCIA + (pin + 1) % 4);
		return 0;
	/* Frame buffer */
	case 14:
		*ihp = BONITO_DIRECT_IRQ(LOONGSON_INTR_PCIA);
		return 0;
	/* USB */
	case 15:
		if (gdium_revision == 0)
			*ihp = BONITO_DIRECT_IRQ(LOONGSON_INTR_PCIA +
			    (pin - 1));
		else
			*ihp = BONITO_DIRECT_IRQ(LOONGSON_INTR_PCIB);
		return 0;
	/* Ethernet */
	case 16:
		*ihp = BONITO_DIRECT_IRQ(LOONGSON_INTR_PCID);
		return 0;
	/* USB, not present in old motherboard revision */
	case 17:
		if (gdium_revision != 0) {
			*ihp = BONITO_DIRECT_IRQ(LOONGSON_INTR_PCIC);
			return 0;
		} else
			break;
	default:
		break;
	}

	return 1;
}