diff options
author | phk <phk@FreeBSD.org> | 1998-05-30 18:28:12 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 1998-05-30 18:28:12 +0000 |
commit | ffb1c27bb8046bb622ea6bbcdbc7bfab553ef7bc (patch) | |
tree | c4acd7571696e0b098d4dc0a3a6eebf48c2838f4 /sys | |
parent | 2d935787458821361e4de86955c4f4f4154b94da (diff) | |
download | FreeBSD-src-ffb1c27bb8046bb622ea6bbcdbc7bfab553ef7bc.zip FreeBSD-src-ffb1c27bb8046bb622ea6bbcdbc7bfab553ef7bc.tar.gz |
Add minimum driver for XC6200 based cards. Currently it knows about
the HOT1 from www.vcc.com.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/conf/NOTES | 5 | ||||
-rw-r--r-- | sys/conf/files | 1 | ||||
-rw-r--r-- | sys/i386/conf/LINT | 5 | ||||
-rw-r--r-- | sys/i386/conf/NOTES | 5 | ||||
-rw-r--r-- | sys/pci/xrpu.c | 110 |
5 files changed, 123 insertions, 3 deletions
diff --git a/sys/conf/NOTES b/sys/conf/NOTES index 6c4d1a8..7642cc6 100644 --- a/sys/conf/NOTES +++ b/sys/conf/NOTES @@ -2,7 +2,7 @@ # LINT -- config file for checking all the sources, tries to pull in # as much of the source tree as it can. # -# $Id: LINT,v 1.433 1998/05/19 23:23:09 julian Exp $ +# $Id: LINT,v 1.434 1998/05/21 03:22:20 wpaul Exp $ # # NB: You probably don't want to try running a kernel built from this # file. Instead, you should start from GENERIC, and add options from @@ -1252,7 +1252,10 @@ device asc0 at isa? port IO_ASC1 tty drq 3 irq 10 vector ascintr device bqu0 at isa? port 0x150 device stl0 at isa? port 0x2a0 tty irq 10 vector stlintr device stli0 at isa? port 0x2a0 tty iomem 0xcc000 flags 23 iosiz 0x1000 +# You are unlikely to have the hardware for loran0 <phk@FreeBSD.org> device loran0 at isa? port ? tty irq 5 vector loranintr +# HOT1 Xilinx 6200 card (www.vcc.com) +device xrpu0 # # EISA devices: diff --git a/sys/conf/files b/sys/conf/files index cf55d1e..74e8553 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -403,6 +403,7 @@ pci/pci_compat.c optional pci pci/pcisupport.c optional pci pci/tek390.c optional amd device-driver pci/wdc_p.c optional wdc device-driver +pci/xrpu.c optional xrpu device-driver posix4/posix4_mib.c standard posix4/p1003_1b.c standard posix4/ksched.c optional _kposix_priority_scheduling diff --git a/sys/i386/conf/LINT b/sys/i386/conf/LINT index 6c4d1a8..7642cc6 100644 --- a/sys/i386/conf/LINT +++ b/sys/i386/conf/LINT @@ -2,7 +2,7 @@ # LINT -- config file for checking all the sources, tries to pull in # as much of the source tree as it can. # -# $Id: LINT,v 1.433 1998/05/19 23:23:09 julian Exp $ +# $Id: LINT,v 1.434 1998/05/21 03:22:20 wpaul Exp $ # # NB: You probably don't want to try running a kernel built from this # file. Instead, you should start from GENERIC, and add options from @@ -1252,7 +1252,10 @@ device asc0 at isa? port IO_ASC1 tty drq 3 irq 10 vector ascintr device bqu0 at isa? port 0x150 device stl0 at isa? port 0x2a0 tty irq 10 vector stlintr device stli0 at isa? port 0x2a0 tty iomem 0xcc000 flags 23 iosiz 0x1000 +# You are unlikely to have the hardware for loran0 <phk@FreeBSD.org> device loran0 at isa? port ? tty irq 5 vector loranintr +# HOT1 Xilinx 6200 card (www.vcc.com) +device xrpu0 # # EISA devices: diff --git a/sys/i386/conf/NOTES b/sys/i386/conf/NOTES index 6c4d1a8..7642cc6 100644 --- a/sys/i386/conf/NOTES +++ b/sys/i386/conf/NOTES @@ -2,7 +2,7 @@ # LINT -- config file for checking all the sources, tries to pull in # as much of the source tree as it can. # -# $Id: LINT,v 1.433 1998/05/19 23:23:09 julian Exp $ +# $Id: LINT,v 1.434 1998/05/21 03:22:20 wpaul Exp $ # # NB: You probably don't want to try running a kernel built from this # file. Instead, you should start from GENERIC, and add options from @@ -1252,7 +1252,10 @@ device asc0 at isa? port IO_ASC1 tty drq 3 irq 10 vector ascintr device bqu0 at isa? port 0x150 device stl0 at isa? port 0x2a0 tty irq 10 vector stlintr device stli0 at isa? port 0x2a0 tty iomem 0xcc000 flags 23 iosiz 0x1000 +# You are unlikely to have the hardware for loran0 <phk@FreeBSD.org> device loran0 at isa? port ? tty irq 5 vector loranintr +# HOT1 Xilinx 6200 card (www.vcc.com) +device xrpu0 # # EISA devices: diff --git a/sys/pci/xrpu.c b/sys/pci/xrpu.c new file mode 100644 index 0000000..4a78d60 --- /dev/null +++ b/sys/pci/xrpu.c @@ -0,0 +1,110 @@ +/* + * ---------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * <phk@FreeBSD.org> wrote this file. As long as you retain this notice you + * can do whatever you want with this stuff. If we meet some day, and you think + * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp + * ---------------------------------------------------------------------------- + * + * $Id$ + * + * A very simple device driver for PCI cards based on Xilinx 6200 series + * FPGA/RPU devices. Current Functionality is to allow you to open and + * mmap the entire thing into your program. + * + * Hardware currently supported: + * www.vcc.com HotWorks 1 6216 based card. + * + */ + +#ifndef DEVFS +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/conf.h> +#include <sys/kernel.h> +#include <sys/devfsext.h> +#include <pci/pcireg.h> +#include <pci/pcivar.h> + +static char* xrpu_probe (pcici_t tag, pcidi_t type); +static void xrpu_attach (pcici_t tag, int unit); +static u_long xrpu_count; + +static vm_offset_t virbase, physbase; + +static int +xrpuopen(dev_t dev, int flag, int mode, struct proc *p) +{ + return (0); +} + +static int +xrpuclose(dev_t dev, int flag, int mode, struct proc *p) +{ + return (0); +} + +static int +xrpummap(dev_t dev, int offset, int nprot) +{ + if (offset >= 0x1000000) + return (-1); + return (i386_btop(physbase + offset)); +} + +/* + * Device driver initialization stuff + */ + +#define CDEV_MAJOR 100 +static struct cdevsw xrpudevsw = { + xrpuopen, xrpuclose, noread, nowrite, + noioctl, nullstop, noreset, nodevtotty, + seltrue, xrpummap, nostrategy, "xrpu", + NULL, -1 +}; + +/* + * PCI initialization stuff + */ + +static struct pci_device xrpu_device = { + "xrpu", + xrpu_probe, + xrpu_attach, + &xrpu_count, + NULL +}; + +DATA_SET (pcidevice_set, xrpu_device); + +static char* +xrpu_probe (pcici_t tag, pcidi_t typea) +{ + int data = pci_conf_read(tag, PCI_CLASS_REG); + u_int id = pci_conf_read(tag, PCI_ID_REG); + const char *vendor, *chip, *type; + + vendor = chip = type = 0; + + if (id == 0x6216133e) { + return "VCC Hotworks-I xc6216"; + } + return 0; +} + +static void +xrpu_attach (pcici_t tag, int unit) +{ + dev_t cdev = makedev(CDEV_MAJOR, 0); + + pci_map_mem(tag, PCI_MAP_REG_START, &virbase, &physbase); + + printf("Mapped physbase %p to virbase %p\n", physbase, virbase); + + cdevsw_add(&cdev, &xrpudevsw, NULL); + + devfs_add_devswf(&xrpudevsw, 0, DV_CHR, UID_ROOT, GID_WHEEL, 0600, + "xrpu0", 0); +} +#endif /* DEVFS */ |