diff options
author | Michael Shalayeff <mickey@cvs.openbsd.org> | 2001-10-25 19:03:50 +0000 |
---|---|---|
committer | Michael Shalayeff <mickey@cvs.openbsd.org> | 2001-10-25 19:03:50 +0000 |
commit | 18afe60068a5a19fbc93cd6522eb2882223286ad (patch) | |
tree | 3c742b59833f5a31dfdcc06a8deaeb7eb743ba04 /sys/arch/i386 | |
parent | 1c589a1ec324b977f122cca750b7e1b0b48b3b1f (diff) |
add an ali1543 and fix amd756 icu drivers
Diffstat (limited to 'sys/arch/i386')
-rw-r--r-- | sys/arch/i386/conf/files.i386 | 3 | ||||
-rw-r--r-- | sys/arch/i386/pci/ali1543.c | 230 | ||||
-rw-r--r-- | sys/arch/i386/pci/pci_intr_fixup.c | 7 | ||||
-rw-r--r-- | sys/arch/i386/pci/pcibiosvar.h | 5 |
4 files changed, 241 insertions, 4 deletions
diff --git a/sys/arch/i386/conf/files.i386 b/sys/arch/i386/conf/files.i386 index 7f4a97ac8c9..db309f88c5a 100644 --- a/sys/arch/i386/conf/files.i386 +++ b/sys/arch/i386/conf/files.i386 @@ -1,4 +1,4 @@ -# $OpenBSD: files.i386,v 1.92 2001/08/25 10:13:29 art Exp $ +# $OpenBSD: files.i386,v 1.93 2001/10/25 19:03:49 mickey Exp $ # $NetBSD: files.i386,v 1.73 1996/05/07 00:58:36 thorpej Exp $ # # new style config file for i386 architecture @@ -254,6 +254,7 @@ file arch/i386/pci/piix.c pcibios file arch/i386/pci/sis85c503.c pcibios file arch/i386/pci/via82c586.c pcibios file arch/i386/pci/amd756.c pcibios +file arch/i386/pci/ali1543.c pcibios # # CARDBUS diff --git a/sys/arch/i386/pci/ali1543.c b/sys/arch/i386/pci/ali1543.c new file mode 100644 index 00000000000..12fec3a7ae7 --- /dev/null +++ b/sys/arch/i386/pci/ali1543.c @@ -0,0 +1,230 @@ +/* $OpenBSD: ali1543.c,v 1.1 2001/10/25 19:03:49 mickey Exp $ */ +/* $NetBSD: ali1543.c,v 1.1 2001/08/27 08:21:21 haya Exp $ */ + +/* + * Copyright (c) 2001 + * HAYAKAWA Koichi. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/*- + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, + * NASA Ames Research Center. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Copyright (c) 1999, by UCHIYAMA Yasushi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. The name of the developer may NOT be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* HAYAKAWA Koichi wrote ALi 1543 PCI ICU code basing on VIA82C586 driver */ + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/errno.h> +#include <sys/device.h> +#include <sys/malloc.h> +#include <sys/proc.h> + +#include <machine/intr.h> +#include <machine/bus.h> + +#include <dev/pci/pcivar.h> +#include <dev/pci/pcireg.h> +#include <dev/pci/pcidevs.h> + +#include <i386/pci/pcibiosvar.h> +#include <i386/pci/piixvar.h> + + +int ali1543_getclink (pciintr_icu_handle_t, int, int *); +int ali1543_get_intr (pciintr_icu_handle_t, int, int *); +int ali1543_set_intr (pciintr_icu_handle_t, int, int); + + +const struct pciintr_icu ali1543_icu = { + ali1543_getclink, + ali1543_get_intr, + ali1543_set_intr, + piix_get_trigger, + piix_set_trigger, +}; + + +/* + * Linux source code (linux/arch/i386/kernel/pci-irq.c) says that the + * irq order of ALi PCI ICU is shuffled. + */ +const static int ali1543_intr_shuffle_get[16] = { + 0, 9, 3, 10, 4, 5, 7, 6, 1, 11, 0, 12, 0, 14, 0, 15 +}; +const static int ali1543_intr_shuffle_set[16] = { + 0, 8, 0, 2, 4, 5, 7, 6, 0, 1, 3, 9, 11, 0, 13, 15 +}; + +#define ALI1543_IRQ_MASK 0xdefa + +#define ALI1543_LEGAL_LINK(link) (((link) >= 0) && ((link) <= 7)) +#define ALI1543_LEGAL_IRQ(irq) ((1 << (irq)) & ALI1543_IRQ_MASK) + +#define ALI1543_INTR_CFG_REG 0x48 + +#define ALI1543_INTR_PIRQA_SHIFT 0 +#define ALI1543_INTR_PIRQA_MASK 0x0000000f +#define ALI1543_INTR_PIRQB_SHIFT 4 +#define ALI1543_INTR_PIRQB_MASK 0x000000f0 +#define ALI1543_INTR_PIRQC_SHIFT 8 +#define ALI1543_INTR_PIRQC_MASK 0x00000f00 +#define ALI1543_INTR_PIRQD_SHIFT 12 +#define ALI1543_INTR_PIRQD_MASK 0x0000f000 + +#define ALI1543_INTR_PIRQ_SHIFT(clink) ((clink)*4) +#define ALI1543_INTR_PIRQ_IRQ(reg, clink) \ + (((reg) >> ((clink)*4)) & 0x0f) +#define ALI1543_PIRQ(reg, clink) \ + ali1543_intr_shuffle_get[ALI1543_INTR_PIRQ_IRQ((reg), (clink))] + + +int +ali1543_init(pci_chipset_tag_t pc, bus_space_tag_t iot, pcitag_t tag, + pciintr_icu_tag_t *ptagp, pciintr_icu_handle_t *phandp) +{ + + if (piix_init(pc, iot, tag, ptagp, phandp) == 0) { + *ptagp = &ali1543_icu; + + return (0); + } + + return (1); +} + +int +ali1543_getclink(pciintr_icu_handle_t v, int link, int *clinkp) +{ + + if (ALI1543_LEGAL_LINK(link - 1)) { + *clinkp = link - 1; + return (0); + } + + return (1); +} + +int +ali1543_get_intr(pciintr_icu_handle_t v, int clink, int *irqp) +{ + struct piix_handle *ph = v; + pcireg_t reg; + int val; + + if (ALI1543_LEGAL_LINK(clink) == 0) + return (1); + + reg = pci_conf_read(ph->ph_pc, ph->ph_tag, ALI1543_INTR_CFG_REG); +#ifdef DEBUG_1543 + printf("ali1543: PIRQ reg 0x%08x\n", reg); /* XXX debug */ +#endif /* DEBUG_1543 */ + val = ALI1543_PIRQ(reg, clink); + *irqp = (val == 0) ? + I386_PCI_INTERRUPT_LINE_NO_CONNECTION : val; + + return (0); +} + +int +ali1543_set_intr(pciintr_icu_handle_t v, int clink, int irq) +{ + struct piix_handle *ph = v; + int shift, val; + pcireg_t reg; + + if (ALI1543_LEGAL_LINK(clink) == 0 || ALI1543_LEGAL_IRQ(irq) == 0) + return (1); + + reg = pci_conf_read(ph->ph_pc, ph->ph_tag, ALI1543_INTR_CFG_REG); + ali1543_get_intr(v, clink, &val); + shift = ALI1543_INTR_PIRQ_SHIFT(clink); + reg &= ~(0x0f << shift); + reg |= (ali1543_intr_shuffle_set[irq] << shift); + pci_conf_write(ph->ph_pc, ph->ph_tag, ALI1543_INTR_CFG_REG, reg); + if (ali1543_get_intr(v, clink, &val) != 0 || val != irq) + return (1); + + return (0); +} diff --git a/sys/arch/i386/pci/pci_intr_fixup.c b/sys/arch/i386/pci/pci_intr_fixup.c index 38228166901..601ae60cce2 100644 --- a/sys/arch/i386/pci/pci_intr_fixup.c +++ b/sys/arch/i386/pci/pci_intr_fixup.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pci_intr_fixup.c,v 1.16 2001/05/13 15:33:18 mickey Exp $ */ +/* $OpenBSD: pci_intr_fixup.c,v 1.17 2001/10/25 19:03:49 mickey Exp $ */ /* $NetBSD: pci_intr_fixup.c,v 1.10 2000/08/10 21:18:27 soda Exp $ */ /* @@ -165,9 +165,12 @@ const struct pciintr_icu_table { { PCI_VENDOR_SIS, PCI_PRODUCT_SIS_85C503, sis85c503_init }, - { PCI_VENDOR_AMD, PCI_PRODUCT_AMD_PBC756_ISA, + { PCI_VENDOR_AMD, PCI_PRODUCT_AMD_PBC756_PMC, amd756_init }, + { PCI_VENDOR_ALI, PCI_PRODUCT_ALI_M1543, + ali1543_init }, + { 0, 0, NULL }, }; diff --git a/sys/arch/i386/pci/pcibiosvar.h b/sys/arch/i386/pci/pcibiosvar.h index 4a68d638264..b78e9afdcae 100644 --- a/sys/arch/i386/pci/pcibiosvar.h +++ b/sys/arch/i386/pci/pcibiosvar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pcibiosvar.h,v 1.7 2001/05/12 19:12:44 mickey Exp $ */ +/* $OpenBSD: pcibiosvar.h,v 1.8 2001/10/25 19:03:49 mickey Exp $ */ /* $NetBSD: pcibios.h,v 1.2 2000/04/28 17:15:16 uch Exp $ */ /* @@ -169,3 +169,6 @@ int sis85c503_init __P((pci_chipset_tag_t, bus_space_tag_t, pcitag_t, pciintr_icu_tag_t *, pciintr_icu_handle_t *)); int amd756_init __P((pci_chipset_tag_t, bus_space_tag_t, pcitag_t, pciintr_icu_tag_t *, pciintr_icu_handle_t *)); +int ali1543_init __P((pci_chipset_tag_t, bus_space_tag_t, pcitag_t, + pciintr_icu_tag_t *, pciintr_icu_handle_t *)); + |