diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc --- a/ObsoleteFiles.inc +++ b/ObsoleteFiles.inc @@ -52,6 +52,9 @@ # xargs -n1 | sort | uniq -d; # done +# 20220127: terasic_mtl.4 removed +OLD_FILES+=usr/share/man/man4/terasic_mtl.4.gz + # 20211229: libc++ moved to /lib MOVED_LIBS+=usr/lib/libc++.so.1 diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile --- a/share/man/man4/Makefile +++ b/share/man/man4/Makefile @@ -546,7 +546,6 @@ tcp.4 \ tcp_bbr.4 \ tdfx.4 \ - terasic_mtl.4 \ termios.4 \ textdump.4 \ ti.4 \ diff --git a/share/man/man4/terasic_mtl.4 b/share/man/man4/terasic_mtl.4 deleted file mode 100644 --- a/share/man/man4/terasic_mtl.4 +++ /dev/null @@ -1,131 +0,0 @@ -.\"- -.\" Copyright (c) 2012 Robert N. M. Watson -.\" All rights reserved. -.\" -.\" This software was developed by SRI International and the University of -.\" Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) -.\" ("CTSRD"), as part of the DARPA CRASH research programme. -.\" -.\" 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. -.\" -.\" 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. -.\" -.\" $FreeBSD$ -.\" -.Dd August 18, 2012 -.Dt TERASIC_MTL 4 -.Os -.Sh NAME -.Nm terasic_mtl -.Nd driver for the Terasic/Cambridge Multi-Touch LCD device -.Sh SYNOPSIS -.Cd "device terasic_mtl" -.Pp -In -.Pa /boot/device.hints : -.Cd hint.terasic_mtl.0.at="nexus0" -.Cd hint.terasic_mtl.0.reg_maddr=0x70400000 -.Cd hint.terasic_mtl.0.reg_msize=0x1000 -.Cd hint.terasic_mtl.0.pixel_maddr=0x70000000 -.Cd hint.terasic_mtl.0.pixel_msize=0x177000 -.Cd hint.terasic_mtl.0.text_maddr=0x70177000 -.Cd hint.terasic_mtl.0.text_msize=0x2000 -.Sh DESCRIPTION -The -.Nm -device driver provides support for the Terasic Multi-Touch LCD combined as -controlled by a University of Cambridge's IP Core. -Three device nodes are instantiated, representing various services supported -by the device: -.Bl -tag -width terasic_pixelX -.It terasic_regX -Memory-mapped register interface, including touch screen input. -.It terasic_pixelX -Memory-mapped pixel-oriented frame buffer. -.It terasic_textX -Memory-mapped text-oriented frame buffer. -.El -.Pp -.Nm -devices are also attached to the -.Xr syscons 4 -framework, which implements a VT-compatible terminal connected to the -.Xr tty 4 -framework. -.Li ttyvX -device nodes may be added to -.Xr ttys 5 -in order to launch -.Xr login 1 -sessions at boot. -.Pp -Register, text, and pixel devices may be accessed using -.Xr read 2 -and -.Xr write 2 -system calls, and also memory mapped using -.Xr mmap 2 . -.Sh SEE ALSO -.Xr login 1 , -.Xr ioctl 2 , -.Xr mmap 2 , -.Xr poll 2 , -.Xr read 2 , -.Xr write 2 , -.Xr syscons 4 , -.Xr tty 4 , -.Xr ttys 5 -.Sh HISTORY -The -.Nm -device driver first appeared in -.Fx 10.0 . -.Sh AUTHORS -The -.Nm -device driver and this manual page were -developed by SRI International and the University of Cambridge Computer -Laboratory under DARPA/AFRL contract -.Pq FA8750-10-C-0237 -.Pq Do CTSRD Dc , -as part of the DARPA CRASH research programme. -This device driver was written by -.An Robert N. M. Watson . -.Sh BUGS -The -.Xr syscons 4 -attachment does not support the hardware cursor feature. -.Pp -A more structured interface to control registers using the -.Xr ioctl 2 -system call, would sometimes be preferable to memory mapping. -For touch screen input, it would be highly desirable to offer a streaming -interface whose events can be managed using -.Xr poll 2 -and related system calls, with the kernel performing polling rather than the -userspace application. -.Pp -.Nm -supports only a -.Li nexus -bus attachment, which is appropriate for system-on-chip busses such as -Altera's Avalon bus. -If the IP core is configured off of another bus type, then additional bus -attachments will be required. diff --git a/sys/dev/terasic/de4led/terasic_de4led.h b/sys/dev/terasic/de4led/terasic_de4led.h deleted file mode 100644 --- a/sys/dev/terasic/de4led/terasic_de4led.h +++ /dev/null @@ -1,79 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2012 Robert N. M. Watson - * All rights reserved. - * - * This software was developed by SRI International and the University of - * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) - * ("CTSRD"), as part of the DARPA CRASH research programme. - * - * 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. - * - * 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. - * - * $FreeBSD$ - */ - -#ifndef _DEV_TERASIC_DE4LED_H_ -#define _DEV_TERASIC_DE4LED_H_ - -#define TERASIC_DE4LED_NUMLEDS 8 -struct terasic_de4led_softc { - device_t tdl_dev; - int tdl_unit; - struct resource *tdl_res; - int tdl_rid; - struct mtx tdl_lock; - uint8_t tdl_bits; - struct cdev *tdl_leds[TERASIC_DE4LED_NUMLEDS]; -}; - -#define TERASIC_DE4LED_LOCK(sc) mtx_lock(&(sc)->tdl_lock) -#define TERASIC_DE4LED_LOCK_ASSERT(sc) mtx_assert(&(sc)->tdl_lock, MA_OWNED) -#define TERASIC_DE4LED_LOCK_DESTROY(sc) mtx_destroy(&(sc)->tdl_lock) -#define TERASIC_DE4LED_LOCK_INIT(sc) mtx_init(&(sc)->tdl_lock, \ - "terasic_de4led", NULL, MTX_DEF) -#define TERASIC_DE4LED_UNLOCK(sc) mtx_unlock(&(sc)->tdl_lock) - -/* - * Setting and clearing LEDs. tdl_bits is in the bit order preferred for I/O. - * The LED elements are labelled 1..8 on the DE-4, so bit 0 is LED 1, and so - * on. - */ -#define TERASIC_DE4LED_CLEARBAR(sc) do { \ - (sc)->tdl_bits = 0; \ -} while (0) -#define TERASIC_DE4LED_SETLED(sc, led, onoff) do { \ - (sc)->tdl_bits &= ~(1 << (led)); \ - (sc)->tdl_bits |= ((onoff != 0) ? 1 : 0) << (led); \ -} while (0) - -/* - * Only one offset matters for this device -- 0. - */ -#define TERASIC_DE4LED_OFF_LED 0 - -void terasic_de4led_attach(struct terasic_de4led_softc *sc); -void terasic_de4led_detach(struct terasic_de4led_softc *sc); - -extern devclass_t terasic_de4led_devclass; - -#endif /* _DEV_TERASIC_DE4LED_H_ */ diff --git a/sys/dev/terasic/de4led/terasic_de4led.c b/sys/dev/terasic/de4led/terasic_de4led.c deleted file mode 100644 --- a/sys/dev/terasic/de4led/terasic_de4led.c +++ /dev/null @@ -1,192 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2012 Robert N. M. Watson - * All rights reserved. - * - * This software was developed by SRI International and the University of - * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) - * ("CTSRD"), as part of the DARPA CRASH research programme. - * - * 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. - * - * 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. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -devclass_t terasic_de4led_devclass; - -static void -terasic_de4led_update(struct terasic_de4led_softc *sc) -{ - - TERASIC_DE4LED_LOCK_ASSERT(sc); - - bus_write_1(sc->tdl_res, TERASIC_DE4LED_OFF_LED, sc->tdl_bits); -} - -static void -led_update(struct terasic_de4led_softc *sc, int bit, int onoff) -{ - - TERASIC_DE4LED_LOCK(sc); - TERASIC_DE4LED_SETLED(sc, bit, onoff); - terasic_de4led_update(sc); - TERASIC_DE4LED_UNLOCK(sc); -} - -static void -led_0(void *arg, int onoff) -{ - - led_update(arg, 0, onoff); -} - -static void -led_1(void *arg, int onoff) -{ - - led_update(arg, 1, onoff); -} - -static void -led_2(void *arg, int onoff) -{ - - led_update(arg, 2, onoff); -} - -static void -led_3(void *arg, int onoff) -{ - - led_update(arg, 3, onoff); -} - -static void -led_4(void *arg, int onoff) -{ - - led_update(arg, 4, onoff); -} - -static void -led_5(void *arg, int onoff) -{ - - led_update(arg, 5, onoff); -} - -static void -led_6(void *arg, int onoff) -{ - - led_update(arg, 6, onoff); -} - -static void -led_7(void *arg, int onoff) -{ - - led_update(arg, 7, onoff); -} - -void -terasic_de4led_attach(struct terasic_de4led_softc *sc) -{ - const char *cmd; - - TERASIC_DE4LED_LOCK_INIT(sc); - - /* - * Clear the LED array before we start. - */ - TERASIC_DE4LED_LOCK(sc); - TERASIC_DE4LED_CLEARBAR(sc); - terasic_de4led_update(sc); - TERASIC_DE4LED_UNLOCK(sc); - - /* - * Register the LED array with led(4). - */ - sc->tdl_leds[0] = led_create(led_0, sc, "de4led_0"); - sc->tdl_leds[1] = led_create(led_1, sc, "de4led_1"); - sc->tdl_leds[2] = led_create(led_2, sc, "de4led_2"); - sc->tdl_leds[3] = led_create(led_3, sc, "de4led_3"); - sc->tdl_leds[4] = led_create(led_4, sc, "de4led_4"); - sc->tdl_leds[5] = led_create(led_5, sc, "de4led_5"); - sc->tdl_leds[6] = led_create(led_6, sc, "de4led_6"); - sc->tdl_leds[7] = led_create(led_7, sc, "de4led_7"); - - if (resource_string_value(device_get_name(sc->tdl_dev), - sc->tdl_unit, "de4led_0_cmd", &cmd) == 0) - led_set("de4led_0", cmd); - if (resource_string_value(device_get_name(sc->tdl_dev), - sc->tdl_unit, "de4led_1_cmd", &cmd) == 0) - led_set("de4led_1", cmd); - if (resource_string_value(device_get_name(sc->tdl_dev), - sc->tdl_unit, "de4led_2_cmd", &cmd) == 0) - led_set("de4led_2", cmd); - if (resource_string_value(device_get_name(sc->tdl_dev), - sc->tdl_unit, "de4led_3_cmd", &cmd) == 0) - led_set("de4led_3", cmd); - if (resource_string_value(device_get_name(sc->tdl_dev), - sc->tdl_unit, "de4led_4_cmd", &cmd) == 0) - led_set("de4led_4", cmd); - if (resource_string_value(device_get_name(sc->tdl_dev), - sc->tdl_unit, "de4led_5_cmd", &cmd) == 0) - led_set("de4led_5", cmd); - if (resource_string_value(device_get_name(sc->tdl_dev), - sc->tdl_unit, "de4led_6_cmd", &cmd) == 0) - led_set("de4led_6", cmd); - if (resource_string_value(device_get_name(sc->tdl_dev), - sc->tdl_unit, "de4led_7_cmd", &cmd) == 0) - led_set("de4led_7", cmd); -} - -void -terasic_de4led_detach(struct terasic_de4led_softc *sc) -{ - int i; - - for (i = 0; i < 8; i++) { - led_destroy(sc->tdl_leds[i]); - sc->tdl_leds[i] = NULL; - } - TERASIC_DE4LED_LOCK(sc); - TERASIC_DE4LED_CLEARBAR(sc); - terasic_de4led_update(sc); - TERASIC_DE4LED_UNLOCK(sc); - TERASIC_DE4LED_LOCK_DESTROY(sc); -} diff --git a/sys/dev/terasic/de4led/terasic_de4led_fdt.c b/sys/dev/terasic/de4led/terasic_de4led_fdt.c deleted file mode 100644 --- a/sys/dev/terasic/de4led/terasic_de4led_fdt.c +++ /dev/null @@ -1,123 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2012 Robert N. M. Watson - * All rights reserved. - * - * This software was developed by SRI International and the University of - * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) - * ("CTSRD"), as part of the DARPA CRASH research programme. - * - * 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. - * - * 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. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include - -/* - * Nexus bus attachment for the 8-element LED on the Terasic DE-4 FPGA board, - * which is hooked up to the processor via a memory-mapped Avalon bus. - */ -static int -terasic_de4led_fdt_probe(device_t dev) -{ - - if (!ofw_bus_status_okay(dev)) - return (ENXIO); - - if (ofw_bus_is_compatible(dev, "sri-cambridge,de4led")) { - device_set_desc(dev, "Terasic DE4 8-element LED"); - return (BUS_PROBE_DEFAULT); - } - return (ENXIO); -} - -static int -terasic_de4led_fdt_attach(device_t dev) -{ - struct terasic_de4led_softc *sc; - - sc = device_get_softc(dev); - sc->tdl_dev = dev; - sc->tdl_unit = device_get_unit(dev); - sc->tdl_rid = 0; - sc->tdl_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, - &sc->tdl_rid, RF_ACTIVE); - if (sc->tdl_res == NULL) { - device_printf(dev, "couldn't map memory\n"); - return (ENXIO); - } - terasic_de4led_attach(sc); - return (0); -} - -static int -terasic_de4led_fdt_detach(device_t dev) -{ - struct terasic_de4led_softc *sc; - - sc = device_get_softc(dev); - KASSERT(sc->tdl_res != NULL, ("%s: resources not allocated", - __func__)); - terasic_de4led_detach(sc); - bus_release_resource(dev, SYS_RES_MEMORY, sc->tdl_rid, sc->tdl_res); - return (0); -} - -static device_method_t terasic_de4led_fdt_methods[] = { - DEVMETHOD(device_probe, terasic_de4led_fdt_probe), - DEVMETHOD(device_attach, terasic_de4led_fdt_attach), - DEVMETHOD(device_detach, terasic_de4led_fdt_detach), - { 0, 0 } -}; - -static driver_t terasic_de4led_fdt_driver = { - "terasic_de4led", - terasic_de4led_fdt_methods, - sizeof(struct terasic_de4led_softc), -}; - -DRIVER_MODULE(terasic_de4led, simplebus, terasic_de4led_fdt_driver, - terasic_de4led_devclass, 0, 0); diff --git a/sys/dev/terasic/de4led/terasic_de4led_nexus.c b/sys/dev/terasic/de4led/terasic_de4led_nexus.c deleted file mode 100644 --- a/sys/dev/terasic/de4led/terasic_de4led_nexus.c +++ /dev/null @@ -1,112 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2012 Robert N. M. Watson - * All rights reserved. - * - * This software was developed by SRI International and the University of - * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) - * ("CTSRD"), as part of the DARPA CRASH research programme. - * - * 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. - * - * 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. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -/* - * Nexus bus attachment for the 8-element LED on the Terasic DE-4 FPGA board, - * which is hooked up to the processor via a memory-mapped Avalon bus. - */ -static int -terasic_de4led_nexus_probe(device_t dev) -{ - - device_set_desc(dev, "Terasic DE4 8-element LED"); - return (BUS_PROBE_NOWILDCARD); -} - -static int -terasic_de4led_nexus_attach(device_t dev) -{ - struct terasic_de4led_softc *sc; - - sc = device_get_softc(dev); - sc->tdl_dev = dev; - sc->tdl_unit = device_get_unit(dev); - sc->tdl_rid = 0; - sc->tdl_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, - &sc->tdl_rid, RF_ACTIVE); - if (sc->tdl_res == NULL) { - device_printf(dev, "couldn't map memory\n"); - return (ENXIO); - } - terasic_de4led_attach(sc); - return (0); -} - -static int -terasic_de4led_nexus_detach(device_t dev) -{ - struct terasic_de4led_softc *sc; - - sc = device_get_softc(dev); - KASSERT(sc->tdl_res != NULL, ("%s: resources not allocated", - __func__)); - terasic_de4led_detach(sc); - bus_release_resource(dev, SYS_RES_MEMORY, sc->tdl_rid, sc->tdl_res); - return (0); -} - -static device_method_t terasic_de4led_nexus_methods[] = { - DEVMETHOD(device_probe, terasic_de4led_nexus_probe), - DEVMETHOD(device_attach, terasic_de4led_nexus_attach), - DEVMETHOD(device_detach, terasic_de4led_nexus_detach), - { 0, 0 } -}; - -static driver_t terasic_de4led_nexus_driver = { - "terasic_de4led", - terasic_de4led_nexus_methods, - sizeof(struct terasic_de4led_softc), -}; - -DRIVER_MODULE(terasic_de4led, nexus, terasic_de4led_nexus_driver, - terasic_de4led_devclass, 0, 0); diff --git a/sys/dev/terasic/mtl/terasic_mtl.h b/sys/dev/terasic/mtl/terasic_mtl.h deleted file mode 100644 --- a/sys/dev/terasic/mtl/terasic_mtl.h +++ /dev/null @@ -1,235 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2012 Robert N. M. Watson - * All rights reserved. - * - * This software was developed by SRI International and the University of - * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) - * ("CTSRD"), as part of the DARPA CRASH research programme. - * - * 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. - * - * 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. - * - * $FreeBSD$ - */ - -#ifndef _DEV_TERASIC_MTL_H_ -#define _DEV_TERASIC_MTL_H_ - -#include "opt_syscons.h" - -struct terasic_mtl_softc { -#if defined(DEV_SC) - /* - * syscons requires that its video_adapter_t be at the front of the - * softc, so place syscons fields first, which we otherwise would - * probably not do. - */ - video_adapter_t mtl_va; -#endif - - /* - * Bus-related fields. - */ - device_t mtl_dev; - int mtl_unit; - - /* - * The MTL driver doesn't require a lot of synchronisation; however, - * the lock is used to protect read-modify-write operations on MTL - * registers. - */ - struct mtx mtl_lock; - - /* - * Control register device -- mappable from userspace. - */ - struct cdev *mtl_reg_cdev; - struct resource *mtl_reg_res; - int mtl_reg_rid; - - /* - * Graphics frame buffer device -- mappable from userspace, and used - * by the vt framebuffer interface. - */ - struct cdev *mtl_pixel_cdev; - struct resource *mtl_pixel_res; - int mtl_pixel_rid; - - /* - * Text frame buffer device -- mappable from userspace, and syscons - * hookup. - */ - struct cdev *mtl_text_cdev; - struct resource *mtl_text_res; - int mtl_text_rid; - uint16_t *mtl_text_soft; - - /* - * Framebuffer hookup for vt(4). - */ - struct fb_info mtl_fb_info; -}; - -#define TERASIC_MTL_LOCK(sc) mtx_lock(&(sc)->mtl_lock) -#define TERASIC_MTL_LOCK_ASSERT(sc) mtx_assert(&(sc)->mtl_lock, MA_OWNED) -#define TERASIC_MTL_LOCK_DESTROY(sc) mtx_destroy(&(sc)->mtl_lock) -#define TERASIC_MTL_LOCK_INIT(sc) mtx_init(&(sc)->mtl_lock, \ - "terasic_mtl", NULL, MTX_DEF) -#define TERASIC_MTL_UNLOCK(sc) mtx_unlock(&(sc)->mtl_lock) - -/* - * Constant properties of the MTL text frame buffer. - */ -#define TERASIC_MTL_COLS 100 -#define TERASIC_MTL_ROWS 40 - -/* - * MTL control register offsets. - */ -#define TERASIC_MTL_OFF_BLEND 0 -#define TERASIC_MTL_OFF_TEXTCURSOR 4 -#define TERASIC_MTL_OFF_TEXTFRAMEBUFADDR 8 -#define TERASIC_MTL_OFF_TOUCHPOINT_X1 12 -#define TERASIC_MTL_OFF_TOUCHPOINT_Y1 16 -#define TERASIC_MTL_OFF_TOUCHPOINT_X2 20 -#define TERASIC_MTL_OFF_TOUCHPOINT_Y2 24 -#define TERASIC_MTL_OFF_TOUCHGESTURE 28 - -/* - * Constants to help interpret various control registers. - */ -#define TERASIC_MTL_BLEND_PIXEL_ENDIAN_SWAP 0x10000000 -#define TERASIC_MTL_BLEND_DEFAULT_MASK 0x0f000000 -#define TERASIC_MTL_BLEND_DEFAULT_SHIFT 24 -#define TERASIC_MTL_BLEND_PIXEL_MASK 0x00ff0000 -#define TERASIC_MTL_BLEND_PIXEL_SHIFT 16 -#define TERASIC_MTL_BLEND_TEXTFG_MASK 0x0000ff00 -#define TERASIC_MTL_BLEND_TEXTFG_SHIFT 8 -#define TERASIC_MTL_BLEND_TEXTBG_MASK 0x000000ff -#define TERASIC_MTL_BLEND_TEXTBG_SHIFT 0 -#define TERASIC_MTL_TEXTCURSOR_COL_MASK 0xff00 -#define TERASIC_MTL_TEXTCURSOR_COL_SHIFT 8 -#define TERASIC_MTL_TEXTCURSOR_ROW_MASK 0xff - -/* - * Colours used both by VGA-like text rendering, and for the default display - * colour. - */ -#define TERASIC_MTL_COLOR_BLACK 0 -#define TERASIC_MTL_COLOR_DARKBLUE 1 -#define TERASIC_MTL_COLOR_DARKGREEN 2 -#define TERASIC_MTL_COLOR_DARKCYAN 3 -#define TERASIC_MTL_COLOR_DARKRED 4 -#define TERASIC_MTL_COLOR_DARKMAGENTA 5 -#define TERASIC_MTL_COLOR_BROWN 6 -#define TERASIC_MTL_COLOR_LIGHTGREY 7 -#define TERASIC_MTL_COLOR_DARKGREY 8 -#define TERASIC_MTL_COLOR_LIGHTBLUE 9 -#define TERASIC_MTL_COLOR_LIGHTGREEN 10 -#define TERASIC_MTL_COLOR_LIGHTCYAN 11 -#define TERASIC_MTL_COLOR_LIGHTRED 12 -#define TERASIC_MTL_COLOR_LIGHTMAGENTA 13 -#define TERASIC_MTL_COLOR_LIGHTYELLOW 14 -#define TERASIC_MTL_COLOR_WHITE 15 -#define TERASIC_MTL_COLORMASK_BLINK 0x80 - -/* - * Constants to help interpret the text frame buffer. - */ -#define TERASIC_MTL_TEXTFRAMEBUF_EXPECTED_ADDR 0x0177000 -#define TERASIC_MTL_TEXTFRAMEBUF_CHAR_SHIFT 0 -#define TERASIC_MTL_TEXTFRAMEBUF_ATTR_SHIFT 8 - -/* - * Framebuffer constants. - */ -#define TERASIC_MTL_FB_WIDTH 800 -#define TERASIC_MTL_FB_HEIGHT 640 - -/* - * Alpha-blending constants. - */ -#define TERASIC_MTL_ALPHA_TRANSPARENT 0 -#define TERASIC_MTL_ALPHA_OPAQUE 255 - -/* - * Driver setup routines from the bus attachment/teardown. - */ -int terasic_mtl_attach(struct terasic_mtl_softc *sc); -void terasic_mtl_detach(struct terasic_mtl_softc *sc); - -extern devclass_t terasic_mtl_devclass; - -/* - * Sub-driver setup routines. - */ -int terasic_mtl_fbd_attach(struct terasic_mtl_softc *sc); -void terasic_mtl_fbd_detach(struct terasic_mtl_softc *sc); -int terasic_mtl_pixel_attach(struct terasic_mtl_softc *sc); -void terasic_mtl_pixel_detach(struct terasic_mtl_softc *sc); -int terasic_mtl_reg_attach(struct terasic_mtl_softc *sc); -void terasic_mtl_reg_detach(struct terasic_mtl_softc *sc); -int terasic_mtl_syscons_attach(struct terasic_mtl_softc *sc); -void terasic_mtl_syscons_detach(struct terasic_mtl_softc *sc); -int terasic_mtl_text_attach(struct terasic_mtl_softc *sc); -void terasic_mtl_text_detach(struct terasic_mtl_softc *sc); - -/* - * Control register I/O routines. - */ -void terasic_mtl_reg_blank(struct terasic_mtl_softc *sc); - -void terasic_mtl_reg_blend_get(struct terasic_mtl_softc *sc, - uint32_t *blendp); -void terasic_mtl_reg_blend_set(struct terasic_mtl_softc *sc, - uint32_t blend); -void terasic_mtl_reg_textcursor_get(struct terasic_mtl_softc *sc, - uint8_t *colp, uint8_t *rowp); -void terasic_mtl_reg_textcursor_set(struct terasic_mtl_softc *sc, - uint8_t col, uint8_t row); -void terasic_mtl_reg_textframebufaddr_get(struct terasic_mtl_softc *sc, - uint32_t *addrp); -void terasic_mtl_reg_textframebufaddr_set(struct terasic_mtl_softc *sc, - uint32_t addr); - -/* - * Read-modify-write updates of sub-bytes of the blend register. - */ -void terasic_mtl_blend_default_set(struct terasic_mtl_softc *sc, - uint8_t colour); -void terasic_mtl_blend_pixel_set(struct terasic_mtl_softc *sc, - uint8_t alpha); -void terasic_mtl_blend_textfg_set(struct terasic_mtl_softc *sc, - uint8_t alpha); -void terasic_mtl_blend_textbg_set(struct terasic_mtl_softc *sc, - uint8_t alpha); -void terasic_mtl_reg_pixel_endian_set(struct terasic_mtl_softc *sc, - int endian_swap); - -/* - * Text frame buffer I/O routines. - */ -void terasic_mtl_text_putc(struct terasic_mtl_softc *sc, u_int x, u_int y, - uint8_t c, uint8_t a); - -#endif /* _DEV_TERASIC_MTL_H_ */ diff --git a/sys/dev/terasic/mtl/terasic_mtl.c b/sys/dev/terasic/mtl/terasic_mtl.c deleted file mode 100644 --- a/sys/dev/terasic/mtl/terasic_mtl.c +++ /dev/null @@ -1,134 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2012 Robert N. M. Watson - * All rights reserved. - * - * This software was developed by SRI International and the University of - * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) - * ("CTSRD"), as part of the DARPA CRASH research programme. - * - * 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. - * - * 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. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include "opt_syscons.h" - -#include -#include -#include -#include -#include /* struct vt_mode */ -#include -#include /* video_adapter_t */ -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -/* - * Device driver for the Terasic Multitouch LCD (MTL). Three separate - * sub-drivers that support, respectively, access to device control registers, - * the pixel frame buffer, and the text frame buffer. The pixel frame buffer - * is hooked up to vt(4), and the text frame buffer to syscons(4). - * - * Eventually, the frame buffer control registers and touch screen input FIFO - * will end up being separate sub-drivers as well. - * - * Note: sub-driver detach routines must check whether or not they have - * attached as they may be called even if the attach routine hasn't been, on - * an error. - */ - -devclass_t terasic_mtl_devclass; - -int -terasic_mtl_attach(struct terasic_mtl_softc *sc) -{ - int error; - - error = terasic_mtl_reg_attach(sc); - if (error) - goto error; - error = terasic_mtl_pixel_attach(sc); - if (error) - goto error; - error = terasic_mtl_text_attach(sc); - if (error) - goto error; - /* - * XXXRW: Once we've attached syscons or vt, we can't detach it, so do - * it last. - */ -#if defined(DEV_VT) - terasic_mtl_reg_pixel_endian_set(sc, BYTE_ORDER == BIG_ENDIAN); - error = terasic_mtl_fbd_attach(sc); - if (error) - goto error; - terasic_mtl_blend_pixel_set(sc, TERASIC_MTL_ALPHA_OPAQUE); - terasic_mtl_blend_textfg_set(sc, TERASIC_MTL_ALPHA_TRANSPARENT); - terasic_mtl_blend_textbg_set(sc, TERASIC_MTL_ALPHA_TRANSPARENT); -#endif -#if defined(DEV_SC) - error = terasic_mtl_syscons_attach(sc); - if (error) - goto error; - terasic_mtl_blend_pixel_set(sc, TERASIC_MTL_ALPHA_TRANSPARENT); - terasic_mtl_blend_textfg_set(sc, TERASIC_MTL_ALPHA_OPAQUE); - terasic_mtl_blend_textbg_set(sc, TERASIC_MTL_ALPHA_OPAQUE); -#endif - terasic_mtl_blend_default_set(sc, TERASIC_MTL_COLOR_BLACK); - return (0); -error: - terasic_mtl_text_detach(sc); - terasic_mtl_pixel_detach(sc); - terasic_mtl_reg_detach(sc); - return (error); -} - -void -terasic_mtl_detach(struct terasic_mtl_softc *sc) -{ - - /* XXXRW: syscons and vt can't detach, but try anyway, only to panic. */ -#if defined(DEV_SC) - terasic_mtl_syscons_detach(sc); -#endif -#if defined(DEV_VT) - terasic_mtl_fbd_detach(sc); -#endif - - /* All other aspects of the driver can detach just fine. */ - terasic_mtl_text_detach(sc); - terasic_mtl_pixel_detach(sc); - terasic_mtl_reg_detach(sc); -} diff --git a/sys/dev/terasic/mtl/terasic_mtl_fdt.c b/sys/dev/terasic/mtl/terasic_mtl_fdt.c deleted file mode 100644 --- a/sys/dev/terasic/mtl/terasic_mtl_fdt.c +++ /dev/null @@ -1,217 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2012-2013 Robert N. M. Watson - * All rights reserved. - * - * This software was developed by SRI International and the University of - * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) - * ("CTSRD"), as part of the DARPA CRASH research programme. - * - * 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. - * - * 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. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include /* struct vt_mode */ -#include /* video_adapter_t */ -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include - -#include "fb_if.h" - -static int -terasic_mtl_fdt_probe(device_t dev) -{ - - if (!ofw_bus_status_okay(dev)) - return (ENXIO); - - if (ofw_bus_is_compatible(dev, "sri-cambridge,mtl")) { - device_set_desc(dev, "Terasic Multi-touch LCD (MTL)"); - return (BUS_PROBE_DEFAULT); - } - return (ENXIO); -} - -static int -terasic_mtl_fdt_attach(device_t dev) -{ - struct terasic_mtl_softc *sc; - int error; - - sc = device_get_softc(dev); - sc->mtl_dev = dev; - sc->mtl_unit = device_get_unit(dev); - - /* - * FDT allows multiple memory resources to be defined for a device; - * query them in the order registers, pixel buffer, text buffer. - * However, we need to sanity-check that they are page-aligned and - * page-sized, so we may still abort. - */ - sc->mtl_reg_rid = 0; - sc->mtl_reg_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, - &sc->mtl_reg_rid, RF_ACTIVE); - if (sc->mtl_reg_res == NULL) { - device_printf(dev, "couldn't map register memory\n"); - error = ENXIO; - goto error; - } - if (rman_get_start(sc->mtl_reg_res) % PAGE_SIZE != 0) { - device_printf(dev, "improper register address\n"); - error = ENXIO; - goto error; - } - if (rman_get_size(sc->mtl_reg_res) % PAGE_SIZE != 0) { - device_printf(dev, "improper register size\n"); - error = ENXIO; - goto error; - } - device_printf(sc->mtl_dev, "registers at mem %p-%p\n", - (void *)rman_get_start(sc->mtl_reg_res), - (void *)(rman_get_start(sc->mtl_reg_res) + - rman_get_size(sc->mtl_reg_res))); - - sc->mtl_pixel_rid = 1; - sc->mtl_pixel_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, - &sc->mtl_pixel_rid, RF_ACTIVE); - if (sc->mtl_pixel_res == NULL) { - device_printf(dev, "couldn't map pixel memory\n"); - error = ENXIO; - goto error; - } - if (rman_get_start(sc->mtl_pixel_res) % PAGE_SIZE != 0) { - device_printf(dev, "improper pixel address\n"); - error = ENXIO; - goto error; - } - if (rman_get_size(sc->mtl_pixel_res) % PAGE_SIZE != 0) { - device_printf(dev, "improper pixel size\n"); - error = ENXIO; - goto error; - } - device_printf(sc->mtl_dev, "pixel frame buffer at mem %p-%p\n", - (void *)rman_get_start(sc->mtl_pixel_res), - (void *)(rman_get_start(sc->mtl_pixel_res) + - rman_get_size(sc->mtl_pixel_res))); - - sc->mtl_text_rid = 2; - sc->mtl_text_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, - &sc->mtl_text_rid, RF_ACTIVE); - if (sc->mtl_text_res == NULL) { - device_printf(dev, "couldn't map text memory\n"); - error = ENXIO; - goto error; - } - if (rman_get_start(sc->mtl_text_res) % PAGE_SIZE != 0) { - device_printf(dev, "improper text address\n"); - error = ENXIO; - goto error; - } - if (rman_get_size(sc->mtl_text_res) % PAGE_SIZE != 0) { - device_printf(dev, "improper text size\n"); - error = ENXIO; - goto error; - } - device_printf(sc->mtl_dev, "text frame buffer at mem %p-%p\n", - (void *)rman_get_start(sc->mtl_text_res), - (void *)(rman_get_start(sc->mtl_text_res) + - rman_get_size(sc->mtl_text_res))); - - error = terasic_mtl_attach(sc); - if (error == 0) - return (0); -error: - if (sc->mtl_text_res != NULL) - bus_release_resource(dev, SYS_RES_MEMORY, sc->mtl_text_rid, - sc->mtl_text_res); - if (sc->mtl_pixel_res != NULL) - bus_release_resource(dev, SYS_RES_MEMORY, sc->mtl_pixel_rid, - sc->mtl_pixel_res); - if (sc->mtl_reg_res != NULL) - bus_release_resource(dev, SYS_RES_MEMORY, sc->mtl_reg_rid, - sc->mtl_reg_res); - return (error); -} - -static int -terasic_mtl_fdt_detach(device_t dev) -{ - struct terasic_mtl_softc *sc; - - sc = device_get_softc(dev); - terasic_mtl_detach(sc); - bus_release_resource(dev, SYS_RES_MEMORY, sc->mtl_text_rid, - sc->mtl_text_res); - bus_release_resource(dev, SYS_RES_MEMORY, sc->mtl_pixel_rid, - sc->mtl_pixel_res); - bus_release_resource(dev, SYS_RES_MEMORY, sc->mtl_reg_rid, - sc->mtl_reg_res); - return (0); -} - -static struct fb_info * -terasic_mtl_fb_getinfo(device_t dev) -{ - struct terasic_mtl_softc *sc; - - sc = device_get_softc(dev); - return (&sc->mtl_fb_info); -} - -static device_method_t terasic_mtl_fdt_methods[] = { - DEVMETHOD(device_probe, terasic_mtl_fdt_probe), - DEVMETHOD(device_attach, terasic_mtl_fdt_attach), - DEVMETHOD(device_detach, terasic_mtl_fdt_detach), - DEVMETHOD(fb_getinfo, terasic_mtl_fb_getinfo), - { 0, 0 } -}; - -static driver_t terasic_mtl_fdt_driver = { - "terasic_mtl", - terasic_mtl_fdt_methods, - sizeof(struct terasic_mtl_softc), -}; - -DRIVER_MODULE(mtl, simplebus, terasic_mtl_fdt_driver, terasic_mtl_devclass, 0, - 0); diff --git a/sys/dev/terasic/mtl/terasic_mtl_nexus.c b/sys/dev/terasic/mtl/terasic_mtl_nexus.c deleted file mode 100644 --- a/sys/dev/terasic/mtl/terasic_mtl_nexus.c +++ /dev/null @@ -1,208 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2012 Robert N. M. Watson - * All rights reserved. - * - * This software was developed by SRI International and the University of - * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) - * ("CTSRD"), as part of the DARPA CRASH research programme. - * - * 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. - * - * 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. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include /* struct vt_mode */ -#include /* video_adapter_t */ -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include "fb_if.h" - -static int -terasic_mtl_nexus_probe(device_t dev) -{ - - device_set_desc(dev, "Terasic Multi-touch LCD (MTL)"); - return (BUS_PROBE_NOWILDCARD); -} - -static int -terasic_mtl_nexus_attach(device_t dev) -{ - struct terasic_mtl_softc *sc; - u_long pixel_maddr, text_maddr, reg_maddr; - u_long pixel_msize, text_msize, reg_msize; - int error; - - sc = device_get_softc(dev); - sc->mtl_dev = dev; - sc->mtl_unit = device_get_unit(dev); - - /* - * Query non-standard hints to find the locations of our two memory - * regions. Enforce certain alignment and size requirements. - */ - if (resource_long_value(device_get_name(dev), device_get_unit(dev), - "reg_maddr", ®_maddr) != 0 || (reg_maddr % PAGE_SIZE != 0)) { - device_printf(dev, "improper register address\n"); - return (ENXIO); - } - if (resource_long_value(device_get_name(dev), device_get_unit(dev), - "reg_msize", ®_msize) != 0 || (reg_msize % PAGE_SIZE != 0)) { - device_printf(dev, "improper register size\n"); - return (ENXIO); - } - if (resource_long_value(device_get_name(dev), device_get_unit(dev), - "pixel_maddr", &pixel_maddr) != 0 || - (pixel_maddr % PAGE_SIZE != 0)) { - device_printf(dev, "improper pixel frame buffer address\n"); - return (ENXIO); - } - if (resource_long_value(device_get_name(dev), device_get_unit(dev), - "pixel_msize", &pixel_msize) != 0 || - (pixel_msize % PAGE_SIZE != 0)) { - device_printf(dev, "improper pixel frame buffer size\n"); - return (ENXIO); - } - if (resource_long_value(device_get_name(dev), device_get_unit(dev), - "text_maddr", &text_maddr) != 0 || - (text_maddr % PAGE_SIZE != 0)) { - device_printf(dev, "improper text frame buffer address\n"); - return (ENXIO); - } - if (resource_long_value(device_get_name(dev), device_get_unit(dev), - "text_msize", &text_msize) != 0 || - (text_msize % PAGE_SIZE != 0)) { - device_printf(dev, "improper text frame buffer size\n"); - return (ENXIO); - } - - /* - * Allocate resources. - */ - sc->mtl_reg_rid = 0; - sc->mtl_reg_res = bus_alloc_resource(dev, SYS_RES_MEMORY, - &sc->mtl_reg_rid, reg_maddr, reg_maddr + reg_msize - 1, - reg_msize, RF_ACTIVE); - if (sc->mtl_reg_res == NULL) { - device_printf(dev, "couldn't map register memory\n"); - error = ENXIO; - goto error; - } - device_printf(sc->mtl_dev, "registers at mem %p-%p\n", - (void *)reg_maddr, (void *)(reg_maddr + reg_msize)); - sc->mtl_pixel_rid = 0; - sc->mtl_pixel_res = bus_alloc_resource(dev, SYS_RES_MEMORY, - &sc->mtl_pixel_rid, pixel_maddr, pixel_maddr + pixel_msize - 1, - pixel_msize, RF_ACTIVE); - if (sc->mtl_pixel_res == NULL) { - device_printf(dev, "couldn't map pixel memory\n"); - error = ENXIO; - goto error; - } - device_printf(sc->mtl_dev, "pixel frame buffer at mem %p-%p\n", - (void *)pixel_maddr, (void *)(pixel_maddr + pixel_msize)); - sc->mtl_text_rid = 0; - sc->mtl_text_res = bus_alloc_resource(dev, SYS_RES_MEMORY, - &sc->mtl_text_rid, text_maddr, text_maddr + text_msize - 1, - text_msize, RF_ACTIVE); - if (sc->mtl_text_res == NULL) { - device_printf(dev, "couldn't map text memory\n"); - error = ENXIO; - goto error; - } - device_printf(sc->mtl_dev, "text frame buffer at mem %p-%p\n", - (void *)text_maddr, (void *)(text_maddr + text_msize)); - error = terasic_mtl_attach(sc); - if (error == 0) - return (0); -error: - if (sc->mtl_text_res != NULL) - bus_release_resource(dev, SYS_RES_MEMORY, sc->mtl_text_rid, - sc->mtl_text_res); - if (sc->mtl_pixel_res != NULL) - bus_release_resource(dev, SYS_RES_MEMORY, sc->mtl_pixel_rid, - sc->mtl_pixel_res); - if (sc->mtl_reg_res != NULL) - bus_release_resource(dev, SYS_RES_MEMORY, sc->mtl_reg_rid, - sc->mtl_reg_res); - return (error); -} - -static int -terasic_mtl_nexus_detach(device_t dev) -{ - struct terasic_mtl_softc *sc; - - sc = device_get_softc(dev); - terasic_mtl_detach(sc); - bus_release_resource(dev, SYS_RES_MEMORY, sc->mtl_text_rid, - sc->mtl_text_res); - bus_release_resource(dev, SYS_RES_MEMORY, sc->mtl_pixel_rid, - sc->mtl_pixel_res); - bus_release_resource(dev, SYS_RES_MEMORY, sc->mtl_reg_rid, - sc->mtl_reg_res); - return (0); -} - -static struct fb_info * -terasic_mtl_fb_getinfo(device_t dev) -{ - struct terasic_mtl_softc *sc; - - sc = device_get_softc(dev); - return (&sc->mtl_fb_info); -} - -static device_method_t terasic_mtl_nexus_methods[] = { - DEVMETHOD(device_probe, terasic_mtl_nexus_probe), - DEVMETHOD(device_attach, terasic_mtl_nexus_attach), - DEVMETHOD(device_detach, terasic_mtl_nexus_detach), - DEVMETHOD(fb_getinfo, terasic_mtl_fb_getinfo), - { 0, 0 } -}; - -static driver_t terasic_mtl_nexus_driver = { - "terasic_mtl", - terasic_mtl_nexus_methods, - sizeof(struct terasic_mtl_softc), -}; - -DRIVER_MODULE(mtl, nexus, terasic_mtl_nexus_driver, terasic_mtl_devclass, 0, - 0); diff --git a/sys/dev/terasic/mtl/terasic_mtl_pixel.c b/sys/dev/terasic/mtl/terasic_mtl_pixel.c deleted file mode 100644 --- a/sys/dev/terasic/mtl/terasic_mtl_pixel.c +++ /dev/null @@ -1,161 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2012 Robert N. M. Watson - * All rights reserved. - * - * This software was developed by SRI International and the University of - * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) - * ("CTSRD"), as part of the DARPA CRASH research programme. - * - * 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. - * - * 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. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include /* struct vt_mode */ -#include /* video_adapter_t */ -#include -#include -#include -#include - -#include -#include -#include - -#include - -static d_mmap_t terasic_mtl_pixel_mmap; -static d_read_t terasic_mtl_pixel_read; -static d_write_t terasic_mtl_pixel_write; - -static struct cdevsw mtl_pixel_cdevsw = { - .d_version = D_VERSION, - .d_mmap = terasic_mtl_pixel_mmap, - .d_read = terasic_mtl_pixel_read, - .d_write = terasic_mtl_pixel_write, - .d_name = "terasic_mtl_pixel", -}; - -/* - * All I/O to/from the MTL pixel device must be 32-bit, and aligned to 32-bit. - */ -static int -terasic_mtl_pixel_read(struct cdev *dev, struct uio *uio, int flag) -{ - struct terasic_mtl_softc *sc; - u_long offset, size; - uint32_t v; - int error; - - if (uio->uio_offset < 0 || uio->uio_offset % 4 != 0 || - uio->uio_resid % 4 != 0) - return (ENODEV); - sc = dev->si_drv1; - size = rman_get_size(sc->mtl_pixel_res); - error = 0; - if ((uio->uio_offset + uio->uio_resid < 0) || - (uio->uio_offset + uio->uio_resid > size)) - return (ENODEV); - while (uio->uio_resid > 0) { - offset = uio->uio_offset; - if (offset + sizeof(v) > size) - return (ENODEV); - v = bus_read_4(sc->mtl_pixel_res, offset); - error = uiomove(&v, sizeof(v), uio); - if (error) - return (error); - } - return (error); -} - -static int -terasic_mtl_pixel_write(struct cdev *dev, struct uio *uio, int flag) -{ - struct terasic_mtl_softc *sc; - u_long offset, size; - uint32_t v; - int error; - - if (uio->uio_offset < 0 || uio->uio_offset % 4 != 0 || - uio->uio_resid % 4 != 0) - return (ENODEV); - sc = dev->si_drv1; - size = rman_get_size(sc->mtl_pixel_res); - error = 0; - while (uio->uio_resid > 0) { - offset = uio->uio_offset; - if (offset + sizeof(v) > size) - return (ENODEV); - error = uiomove(&v, sizeof(v), uio); - if (error) - return (error); - bus_write_4(sc->mtl_pixel_res, offset, v); - } - return (error); -} - -static int -terasic_mtl_pixel_mmap(struct cdev *dev, vm_ooffset_t offset, - vm_paddr_t *paddr, int nprot, vm_memattr_t *memattr) -{ - struct terasic_mtl_softc *sc; - int error; - - sc = dev->si_drv1; - error = 0; - if (trunc_page(offset) == offset && - rman_get_size(sc->mtl_pixel_res) >= offset + PAGE_SIZE) { - *paddr = rman_get_start(sc->mtl_pixel_res) + offset; - *memattr = VM_MEMATTR_UNCACHEABLE; - } else - error = ENODEV; - return (error); -} - -int -terasic_mtl_pixel_attach(struct terasic_mtl_softc *sc) -{ - - sc->mtl_pixel_cdev = make_dev(&mtl_pixel_cdevsw, sc->mtl_unit, - UID_ROOT, GID_WHEEL, 0400, "mtl_pixel%d", sc->mtl_unit); - if (sc->mtl_pixel_cdev == NULL) { - device_printf(sc->mtl_dev, "%s: make_dev failed\n", __func__); - return (ENXIO); - } - /* XXXRW: Slight race between make_dev(9) and here. */ - sc->mtl_pixel_cdev->si_drv1 = sc; - return (0); -} - -void -terasic_mtl_pixel_detach(struct terasic_mtl_softc *sc) -{ - - if (sc->mtl_pixel_cdev != NULL) - destroy_dev(sc->mtl_pixel_cdev); -} diff --git a/sys/dev/terasic/mtl/terasic_mtl_reg.c b/sys/dev/terasic/mtl/terasic_mtl_reg.c deleted file mode 100644 --- a/sys/dev/terasic/mtl/terasic_mtl_reg.c +++ /dev/null @@ -1,296 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2012 Robert N. M. Watson - * All rights reserved. - * - * This software was developed by SRI International and the University of - * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) - * ("CTSRD"), as part of the DARPA CRASH research programme. - * - * 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. - * - * 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. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include /* struct vt_mode */ -#include -#include /* video_adapter_t */ -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -static d_mmap_t terasic_mtl_reg_mmap; -static d_read_t terasic_mtl_reg_read; -static d_write_t terasic_mtl_reg_write; - -static struct cdevsw terasic_mtl_reg_cdevsw = { - .d_version = D_VERSION, - .d_mmap = terasic_mtl_reg_mmap, - .d_read = terasic_mtl_reg_read, - .d_write = terasic_mtl_reg_write, - .d_name = "terasic_mtl_reg", -}; - -/* - * All I/O to/from the MTL register device must be 32-bit, and aligned to - * 32-bit. - */ -static int -terasic_mtl_reg_read(struct cdev *dev, struct uio *uio, int flag) -{ - struct terasic_mtl_softc *sc; - u_long offset, size; - uint32_t v; - int error; - - if (uio->uio_offset < 0 || uio->uio_offset % 4 != 0 || - uio->uio_resid % 4 != 0) - return (ENODEV); - sc = dev->si_drv1; - size = rman_get_size(sc->mtl_reg_res); - error = 0; - if ((uio->uio_offset + uio->uio_resid < 0) || - (uio->uio_offset + uio->uio_resid > size)) - return (ENODEV); - while (uio->uio_resid > 0) { - offset = uio->uio_offset; - if (offset + sizeof(v) > size) - return (ENODEV); - v = bus_read_4(sc->mtl_reg_res, offset); - error = uiomove(&v, sizeof(v), uio); - if (error) - return (error); - } - return (error); -} - -static int -terasic_mtl_reg_write(struct cdev *dev, struct uio *uio, int flag) -{ - struct terasic_mtl_softc *sc; - u_long offset, size; - uint32_t v; - int error; - - if (uio->uio_offset < 0 || uio->uio_offset % 4 != 0 || - uio->uio_resid % 4 != 0) - return (ENODEV); - sc = dev->si_drv1; - size = rman_get_size(sc->mtl_reg_res); - error = 0; - while (uio->uio_resid > 0) { - offset = uio->uio_offset; - if (offset + sizeof(v) > size) - return (ENODEV); - error = uiomove(&v, sizeof(v), uio); - if (error) - return (error); - bus_write_4(sc->mtl_reg_res, offset, v); - } - return (error); -} - -static int -terasic_mtl_reg_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr, - int nprot, vm_memattr_t *memattr) -{ - struct terasic_mtl_softc *sc; - int error; - - sc = dev->si_drv1; - error = 0; - if (trunc_page(offset) == offset && - offset + PAGE_SIZE > offset && - rman_get_size(sc->mtl_reg_res) >= offset + PAGE_SIZE) { - *paddr = rman_get_start(sc->mtl_reg_res) + offset; - *memattr = VM_MEMATTR_UNCACHEABLE; - } else - error = ENODEV; - return (error); -} - -void -terasic_mtl_reg_blend_get(struct terasic_mtl_softc *sc, uint32_t *blendp) -{ - - *blendp = le32toh(bus_read_4(sc->mtl_reg_res, TERASIC_MTL_OFF_BLEND)); -} - -void -terasic_mtl_reg_blend_set(struct terasic_mtl_softc *sc, uint32_t blend) -{ - - bus_write_4(sc->mtl_reg_res, TERASIC_MTL_OFF_BLEND, htole32(blend)); -} - -void -terasic_mtl_blend_default_set(struct terasic_mtl_softc *sc, uint8_t colour) -{ - uint32_t v; - - TERASIC_MTL_LOCK(sc); - terasic_mtl_reg_blend_get(sc, &v); - v &= ~TERASIC_MTL_BLEND_DEFAULT_MASK; - v |= colour << TERASIC_MTL_BLEND_DEFAULT_SHIFT; - terasic_mtl_reg_blend_set(sc, v); - TERASIC_MTL_UNLOCK(sc); -} - -void -terasic_mtl_blend_pixel_set(struct terasic_mtl_softc *sc, uint8_t alpha) -{ - uint32_t v; - - TERASIC_MTL_LOCK(sc); - terasic_mtl_reg_blend_get(sc, &v); - v &= ~TERASIC_MTL_BLEND_PIXEL_MASK; - v |= alpha << TERASIC_MTL_BLEND_PIXEL_SHIFT; - terasic_mtl_reg_blend_set(sc, v); - TERASIC_MTL_UNLOCK(sc); -} - -void -terasic_mtl_blend_textfg_set(struct terasic_mtl_softc *sc, uint8_t alpha) -{ - uint32_t v; - - TERASIC_MTL_LOCK(sc); - terasic_mtl_reg_blend_get(sc, &v); - v &= ~TERASIC_MTL_BLEND_TEXTFG_MASK; - v |= alpha << TERASIC_MTL_BLEND_TEXTFG_SHIFT; - terasic_mtl_reg_blend_set(sc, v); - TERASIC_MTL_UNLOCK(sc); -} - -void -terasic_mtl_blend_textbg_set(struct terasic_mtl_softc *sc, uint8_t alpha) -{ - uint32_t v; - - TERASIC_MTL_LOCK(sc); - terasic_mtl_reg_blend_get(sc, &v); - v &= ~TERASIC_MTL_BLEND_TEXTBG_MASK; - v |= alpha << TERASIC_MTL_BLEND_TEXTBG_SHIFT; - terasic_mtl_reg_blend_set(sc, v); - TERASIC_MTL_UNLOCK(sc); -} - -void -terasic_mtl_reg_pixel_endian_set(struct terasic_mtl_softc *sc, int endian_swap) -{ - uint32_t v; - - TERASIC_MTL_LOCK(sc); - terasic_mtl_reg_blend_get(sc, &v); - if (endian_swap) - v |= TERASIC_MTL_BLEND_PIXEL_ENDIAN_SWAP; - else - v &= ~TERASIC_MTL_BLEND_PIXEL_ENDIAN_SWAP; - terasic_mtl_reg_blend_set(sc, v); - TERASIC_MTL_UNLOCK(sc); -} - -void -terasic_mtl_reg_textcursor_get(struct terasic_mtl_softc *sc, uint8_t *colp, - uint8_t *rowp) -{ - uint32_t v; - - v = bus_read_4(sc->mtl_reg_res, TERASIC_MTL_OFF_TEXTCURSOR); - v = le32toh(v); - *colp = (v & TERASIC_MTL_TEXTCURSOR_COL_MASK) >> - TERASIC_MTL_TEXTCURSOR_COL_SHIFT; - *rowp = (v & TERASIC_MTL_TEXTCURSOR_ROW_MASK); -} - -void -terasic_mtl_reg_textcursor_set(struct terasic_mtl_softc *sc, uint8_t col, - uint8_t row) -{ - uint32_t v; - - v = (col << TERASIC_MTL_TEXTCURSOR_COL_SHIFT) | row; - v = htole32(v); - bus_write_4(sc->mtl_reg_res, TERASIC_MTL_OFF_TEXTCURSOR, v); -} - -void -terasic_mtl_reg_blank(struct terasic_mtl_softc *sc) -{ - - device_printf(sc->mtl_dev, "%s: not yet\n", __func__); -} - -void -terasic_mtl_reg_textframebufaddr_get(struct terasic_mtl_softc *sc, - uint32_t *addrp) -{ - uint32_t addr; - - addr = bus_read_4(sc->mtl_reg_res, TERASIC_MTL_OFF_TEXTFRAMEBUFADDR); - *addrp = le32toh(addr); -} - -void -terasic_mtl_reg_textframebufaddr_set(struct terasic_mtl_softc *sc, - uint32_t addr) -{ - - addr = htole32(addr); - bus_write_4(sc->mtl_reg_res, TERASIC_MTL_OFF_TEXTFRAMEBUFADDR, addr); -} - -int -terasic_mtl_reg_attach(struct terasic_mtl_softc *sc) -{ - - sc->mtl_reg_cdev = make_dev(&terasic_mtl_reg_cdevsw, sc->mtl_unit, - UID_ROOT, GID_WHEEL, 0400, "mtl_reg%d", sc->mtl_unit); - if (sc->mtl_reg_cdev == NULL) { - device_printf(sc->mtl_dev, "%s: make_dev failed\n", __func__); - return (ENXIO); - } - /* XXXRW: Slight race between make_dev(9) and here. */ - sc->mtl_reg_cdev->si_drv1 = sc; - return (0); -} - -void -terasic_mtl_reg_detach(struct terasic_mtl_softc *sc) -{ - - if (sc->mtl_reg_cdev != NULL) - destroy_dev(sc->mtl_reg_cdev); -} diff --git a/sys/dev/terasic/mtl/terasic_mtl_syscons.c b/sys/dev/terasic/mtl/terasic_mtl_syscons.c deleted file mode 100644 --- a/sys/dev/terasic/mtl/terasic_mtl_syscons.c +++ /dev/null @@ -1,476 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2012 Robert N. M. Watson - * All rights reserved. - * - * This software was developed by SRI International and the University of - * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) - * ("CTSRD"), as part of the DARPA CRASH research programme. - * - * 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. - * - * 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. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include - -#include - -#include - -/* - * Terasic Multitouch LCD (MTL) syscons driver. Implement syscons(4)'s - * video_switch_t KPI using MTL's text frame buffer. In principle, we could - * actually implement sc_rndr_sw_t, since the MTL text frame buffer implements - * a VGA-like memory mapping. However, this requires a lot more book-keeping - * with only minor performance improvements (avoiding indirection), as well as - * introducing potential endianness issues. Instead we accept one additional - * memory copy between a software frame buffer and the hardware frame buffer - * and the generic frame buffer (gfb) framework. - */ - -MALLOC_DEFINE(M_TERASIC_MTL, "mtl_syscons", "MTL syscons frame buffer"); - -/* - * Run early so that boot-time console support can be initialised before - * newbus gets around to configuring syscons. - * - * XXXRW: We may need to do more here in order to see earlier boot messages. - */ -static int -terasic_mtl_syscons_configure(int flags) -{ - - printf("%s: not yet\n", __func__); - return (0); -} - -static int -terasic_mtl_vidsw_probe(int unit, video_adapter_t **adp, void *args, - int flags) -{ - - printf("%s: not yet\n", __func__); - return (0); -} - -static int -terasic_mtl_vidsw_init(int unit, video_adapter_t *adp, int flags) -{ - struct terasic_mtl_softc *sc; - video_info_t *vi; - - sc = (struct terasic_mtl_softc *)adp; - - vi = &adp->va_info; - vid_init_struct(adp, "terasic_mtl_syscons", -1, unit); - - vi->vi_width = TERASIC_MTL_COLS; - if (vi->vi_width > COL) - vi->vi_width = COL; - vi->vi_height = TERASIC_MTL_ROWS; - if (vi->vi_height > ROW) - vi->vi_height = ROW; - - /* - * XXXRW: It's not quite clear how these should be initialised. - */ - vi->vi_cwidth = 0; - vi->vi_cheight = 0; - vi->vi_flags = V_INFO_COLOR; - vi->vi_mem_model = V_INFO_MM_OTHER; - - /* - * Software text frame buffer from which we update the actual MTL - * frame buffer when asked to. - */ - adp->va_window = (vm_offset_t)sc->mtl_text_soft; - - /* - * Declare video adapter capabilities -- at this point, simply color - * support, as MTL doesn't support screen borders, font loading, or - * mode changes. - * - * XXXRW: It's unclear if V_ADP_INITIALIZED is needed here; other - * syscons(4) drivers are inconsistent about this and - * V_ADP_REGISTERED. - */ - adp->va_flags |= V_ADP_COLOR | V_ADP_INITIALIZED; - if (vid_register(adp) < 0) { - device_printf(sc->mtl_dev, "%s: vid_register failed\n", - __func__); - return (ENXIO); - } - adp->va_flags |= V_ADP_REGISTERED; - return (0); -} - -static int -terasic_mtl_vidsw_get_info(video_adapter_t *adp, int mode, video_info_t *info) -{ - - bcopy(&adp->va_info, info, sizeof(*info)); - return (0); -} - -static int -terasic_mtl_vidsw_query_mode(video_adapter_t *adp, video_info_t *info) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_set_mode(video_adapter_t *adp, int mode) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_save_font(video_adapter_t *adp, int page, int size, - int width, u_char *data, int c, int count) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_load_font(video_adapter_t *adp, int page, int size, - int width, u_char *data, int c, int count) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_show_font(video_adapter_t *adp, int page) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_save_palette(video_adapter_t *adp, u_char *palette) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_load_palette(video_adapter_t *adp, u_char *palette) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_set_border(video_adapter_t *adp, int border) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_save_state(video_adapter_t *adp, void *p, size_t size) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_load_state(video_adapter_t *adp, void *p) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_set_win_org(video_adapter_t *adp, off_t offset) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_read_hw_cursor(video_adapter_t *adp, int *colp, int *rowp) -{ - struct terasic_mtl_softc *sc; - uint8_t col, row; - - sc = (struct terasic_mtl_softc *)adp; - terasic_mtl_reg_textcursor_get(sc, &col, &row); - *colp = col; - *rowp = row; - return (0); -} - -static int -terasic_mtl_vidsw_set_hw_cursor(video_adapter_t *adp, int col, int row) -{ - struct terasic_mtl_softc *sc; - - sc = (struct terasic_mtl_softc *)adp; - terasic_mtl_reg_textcursor_set(sc, col, row); - return (0); -} - -static int -terasic_mtl_vidsw_set_hw_cursor_shape(video_adapter_t *adp, int base, - int height, int celsize, int blink) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_blank_display(video_adapter_t *adp, int mode) -{ - struct terasic_mtl_softc *sc; - - sc = (struct terasic_mtl_softc *)adp; - terasic_mtl_reg_blank(sc); - return (0); -} - -static int -terasic_mtl_vidsw_mmap(video_adapter_t *adp, vm_ooffset_t offset, - vm_paddr_t *paddr, int prot, vm_memattr_t *memattr) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_ioctl(video_adapter_t *adp, u_long cmd, caddr_t data) -{ - - return (fb_commonioctl(adp, cmd, data)); -} - -static int -terasic_mtl_vidsw_clear(video_adapter_t *adp) -{ - struct terasic_mtl_softc *sc; - - sc = (struct terasic_mtl_softc *)adp; - printf("%s: not yet terasic_mtl_io_clear(sc);\n", __func__); - return (0); -} - -static int -terasic_mtl_vidsw_fill_rect(video_adapter_t *adp, int val, int x, int y, - int cx, int cy) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_bitblt(video_adapter_t *adp, ...) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_diag(video_adapter_t *adp, int level) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_save_cursor_palette(video_adapter_t *adp, u_char *palette) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_load_cursor_palette(video_adapter_t *adp, u_char *palette) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_copy(video_adapter_t *adp, vm_offset_t src, vm_offset_t dst, - int n) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_putp(video_adapter_t *adp, vm_offset_t off, uint32_t p, - uint32_t a, int size, int bpp, int bit_ltor, int byte_ltor) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -static int -terasic_mtl_vidsw_putc(video_adapter_t *adp, vm_offset_t off, uint8_t c, - uint8_t a) -{ - struct terasic_mtl_softc *sc; - u_int col, row; - - sc = (struct terasic_mtl_softc *)adp; - col = (off % adp->va_info.vi_width); - row = (off / adp->va_info.vi_width); - terasic_mtl_text_putc(sc, col, row, c, a); - return (0); -} - -static int -terasic_mtl_vidsw_puts(video_adapter_t *adp, vm_offset_t off, u_int16_t *s, - int len) -{ - int i; - - for (i = 0; i < len; i++) - vidd_putc(adp, off + i, s[i] & 0xff, (s[i] & 0xff00) >> 8); - return (0); -} - -static int -terasic_mtl_vidsw_putm(video_adapter_t *adp, int x, int y, - uint8_t *pixel_image, uint32_t pixel_mask, int size, int width) -{ - - printf("%s: not yet\n", __func__); - return (ENODEV); -} - -int -terasic_mtl_syscons_attach(struct terasic_mtl_softc *sc) -{ - int error; - - sc->mtl_text_soft = - malloc(sizeof(uint16_t) * TERASIC_MTL_ROWS * TERASIC_MTL_COLS, - M_TERASIC_MTL, M_WAITOK | M_ZERO); - error = terasic_mtl_vidsw_init(0, &sc->mtl_va, 0); - if (error) - goto out; - error = sc_attach_unit(sc->mtl_unit, device_get_flags(sc->mtl_dev) | - SC_AUTODETECT_KBD); - if (error) - device_printf(sc->mtl_dev, "%s: sc_attach_unit failed (%d)\n", - __func__, error); -out: - if (error) - free(sc->mtl_text_soft, M_TERASIC_MTL); - return (error); -} - -void -terasic_mtl_syscons_detach(struct terasic_mtl_softc *sc) -{ - - free(sc->mtl_text_soft, M_TERASIC_MTL); - panic("%s: not supported by syscons", __func__); -} - -static video_switch_t terasic_mtl_vidsw = { - .probe = terasic_mtl_vidsw_probe, - .init = terasic_mtl_vidsw_init, - .get_info = terasic_mtl_vidsw_get_info, - .query_mode = terasic_mtl_vidsw_query_mode, - .set_mode = terasic_mtl_vidsw_set_mode, - .save_font = terasic_mtl_vidsw_save_font, - .load_font = terasic_mtl_vidsw_load_font, - .show_font = terasic_mtl_vidsw_show_font, - .save_palette = terasic_mtl_vidsw_save_palette, - .load_palette = terasic_mtl_vidsw_load_palette, - .set_border = terasic_mtl_vidsw_set_border, - .save_state = terasic_mtl_vidsw_save_state, - .load_state = terasic_mtl_vidsw_load_state, - .set_win_org = terasic_mtl_vidsw_set_win_org, - .read_hw_cursor = terasic_mtl_vidsw_read_hw_cursor, - .set_hw_cursor = terasic_mtl_vidsw_set_hw_cursor, - .set_hw_cursor_shape = terasic_mtl_vidsw_set_hw_cursor_shape, - .blank_display = terasic_mtl_vidsw_blank_display, - .mmap = terasic_mtl_vidsw_mmap, - .ioctl = terasic_mtl_vidsw_ioctl, - .clear = terasic_mtl_vidsw_clear, - .fill_rect = terasic_mtl_vidsw_fill_rect, - .bitblt = terasic_mtl_vidsw_bitblt, - .diag = terasic_mtl_vidsw_diag, - .save_cursor_palette = terasic_mtl_vidsw_save_cursor_palette, - .load_cursor_palette = terasic_mtl_vidsw_load_cursor_palette, - .copy = terasic_mtl_vidsw_copy, - .putp = terasic_mtl_vidsw_putp, - .putc = terasic_mtl_vidsw_putc, - .puts = terasic_mtl_vidsw_puts, - .putm = terasic_mtl_vidsw_putm, -}; -VIDEO_DRIVER(terasic_mtl_syscons, terasic_mtl_vidsw, - terasic_mtl_syscons_configure); -extern sc_rndr_sw_t txtrndrsw; -RENDERER(terasic_mtl_syscons, 0, txtrndrsw, gfb_set); -RENDERER_MODULE(terasic_mtl_syscons, gfb_set); diff --git a/sys/dev/terasic/mtl/terasic_mtl_text.c b/sys/dev/terasic/mtl/terasic_mtl_text.c deleted file mode 100644 --- a/sys/dev/terasic/mtl/terasic_mtl_text.c +++ /dev/null @@ -1,196 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2012 Robert N. M. Watson - * All rights reserved. - * - * This software was developed by SRI International and the University of - * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) - * ("CTSRD"), as part of the DARPA CRASH research programme. - * - * 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. - * - * 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. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include /* struct vt_mode */ -#include -#include /* video_adapter_t */ -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -static d_mmap_t terasic_mtl_text_mmap; -static d_read_t terasic_mtl_text_read; -static d_write_t terasic_mtl_text_write; - -static struct cdevsw terasic_mtl_text_cdevsw = { - .d_version = D_VERSION, - .d_mmap = terasic_mtl_text_mmap, - .d_read = terasic_mtl_text_read, - .d_write = terasic_mtl_text_write, - .d_name = "terasic_mtl_text", -}; - -/* - * All I/O to/from the mtl device must be 16-bit, and aligned to 16-bit. - */ -static int -terasic_mtl_text_read(struct cdev *dev, struct uio *uio, int flag) -{ - struct terasic_mtl_softc *sc; - u_long offset, size; - uint16_t v; - int error; - - if (uio->uio_offset < 0 || uio->uio_offset % 2 != 0 || - uio->uio_resid % 2 != 0) - return (ENODEV); - sc = dev->si_drv1; - size = rman_get_size(sc->mtl_text_res); - error = 0; - if ((uio->uio_offset + uio->uio_resid < 0) || - (uio->uio_offset + uio->uio_resid > size)) - return (ENODEV); - while (uio->uio_resid > 0) { - offset = uio->uio_offset; - if (offset + sizeof(v) > size) - return (ENODEV); - v = bus_read_2(sc->mtl_text_res, offset); - error = uiomove(&v, sizeof(v), uio); - if (error) - return (error); - } - return (error); -} - -static int -terasic_mtl_text_write(struct cdev *dev, struct uio *uio, int flag) -{ - struct terasic_mtl_softc *sc; - u_long offset, size; - uint16_t v; - int error; - - if (uio->uio_offset < 0 || uio->uio_offset % 2 != 0 || - uio->uio_resid % 2 != 0) - return (ENODEV); - sc = dev->si_drv1; - size = rman_get_size(sc->mtl_text_res); - error = 0; - while (uio->uio_resid > 0) { - offset = uio->uio_offset; - if (offset + sizeof(v) > size) - return (ENODEV); - error = uiomove(&v, sizeof(v), uio); - if (error) - return (error); - bus_write_2(sc->mtl_text_res, offset, v); - } - return (error); -} - -static int -terasic_mtl_text_mmap(struct cdev *dev, vm_ooffset_t offset, - vm_paddr_t *paddr, int nprot, vm_memattr_t *memattr) -{ - struct terasic_mtl_softc *sc; - int error; - - sc = dev->si_drv1; - error = 0; - if (trunc_page(offset) == offset && - offset + PAGE_SIZE > offset && - rman_get_size(sc->mtl_text_res) >= offset + PAGE_SIZE) { - *paddr = rman_get_start(sc->mtl_text_res) + offset; - *memattr = VM_MEMATTR_UNCACHEABLE; - } else - error = ENODEV; - return (error); -} - -void -terasic_mtl_text_putc(struct terasic_mtl_softc *sc, u_int x, u_int y, - uint8_t c, uint8_t a) -{ - u_int offset; - uint16_t v; - - KASSERT(x < TERASIC_MTL_COLS, ("%s: TERASIC_MTL_COLS", __func__)); - KASSERT(y < TERASIC_MTL_ROWS, ("%s: TERASIC_MTL_ROWS", __func__)); - - offset = sizeof(uint16_t) * (x + y * TERASIC_MTL_COLS); - v = (c << TERASIC_MTL_TEXTFRAMEBUF_CHAR_SHIFT) | - (a << TERASIC_MTL_TEXTFRAMEBUF_ATTR_SHIFT); - v = htole16(v); - bus_write_2(sc->mtl_text_res, offset, v); -} - -int -terasic_mtl_text_attach(struct terasic_mtl_softc *sc) -{ - uint32_t v; - u_int offset; - - terasic_mtl_reg_textframebufaddr_get(sc, &v); - if (v != TERASIC_MTL_TEXTFRAMEBUF_EXPECTED_ADDR) { - device_printf(sc->mtl_dev, "%s: unexpected text frame buffer " - "address (%08x); cannot attach\n", __func__, v); - return (ENXIO); - } - for (offset = 0; offset < rman_get_size(sc->mtl_text_res); - offset += sizeof(uint16_t)) - bus_write_2(sc->mtl_text_res, offset, 0); - - sc->mtl_text_cdev = make_dev(&terasic_mtl_text_cdevsw, sc->mtl_unit, - UID_ROOT, GID_WHEEL, 0400, "mtl_text%d", sc->mtl_unit); - if (sc->mtl_text_cdev == NULL) { - device_printf(sc->mtl_dev, "%s: make_dev failed\n", __func__); - return (ENXIO); - } - /* XXXRW: Slight race between make_dev(9) and here. */ - TERASIC_MTL_LOCK_INIT(sc); - sc->mtl_text_cdev->si_drv1 = sc; - return (0); -} - -void -terasic_mtl_text_detach(struct terasic_mtl_softc *sc) -{ - - if (sc->mtl_text_cdev != NULL) { - destroy_dev(sc->mtl_text_cdev); - TERASIC_MTL_LOCK_DESTROY(sc); - } -} diff --git a/sys/dev/terasic/mtl/terasic_mtl_vt.c b/sys/dev/terasic/mtl/terasic_mtl_vt.c deleted file mode 100644 --- a/sys/dev/terasic/mtl/terasic_mtl_vt.c +++ /dev/null @@ -1,133 +0,0 @@ -/*- - * Copyright (c) 2014 Ed Maste - * All rights reserved. - * - * This software was developed by SRI International and the University of - * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) - * ("CTSRD"), as part of the DARPA CRASH research programme. - * - * 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. - * - * 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. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include - -/* - * Terasic Multitouch LCD (MTL) vt(4) framebuffer driver. - */ - -#include -#include - -static int -terasic_mtl_fbd_panel_info(struct terasic_mtl_softc *sc, struct fb_info *info) -{ - phandle_t node; - pcell_t dts_value[2]; - int len; - - if ((node = ofw_bus_get_node(sc->mtl_dev)) == -1) - return (ENXIO); - - /* panel size */ - if ((len = OF_getproplen(node, "panel-size")) != sizeof(dts_value)) - return (ENXIO); - OF_getencprop(node, "panel-size", dts_value, len); - info->fb_width = dts_value[0]; - info->fb_height = dts_value[1]; - info->fb_bpp = info->fb_depth = 32; - info->fb_stride = info->fb_width * (info->fb_depth / 8); - - /* - * Safety belt to ensure framebuffer params are as expected. May be - * removed when we have full confidence in fdt / hints params. - */ - if (info->fb_width != TERASIC_MTL_FB_WIDTH || - info->fb_height != TERASIC_MTL_FB_HEIGHT || - info->fb_stride != 3200 || - info->fb_bpp != 32 || info->fb_depth != 32) { - device_printf(sc->mtl_dev, - "rejecting invalid panel params width=%u height=%u\n", - (unsigned)info->fb_width, (unsigned)info->fb_height); - return (EINVAL); - } - - return (0); -} - -int -terasic_mtl_fbd_attach(struct terasic_mtl_softc *sc) -{ - struct fb_info *info; - device_t fbd; - - info = &sc->mtl_fb_info; - info->fb_name = device_get_nameunit(sc->mtl_dev); - info->fb_pbase = rman_get_start(sc->mtl_pixel_res); - info->fb_size = rman_get_size(sc->mtl_pixel_res); - info->fb_vbase = (intptr_t)pmap_mapdev(info->fb_pbase, info->fb_size); - if (terasic_mtl_fbd_panel_info(sc, info) != 0) { - device_printf(sc->mtl_dev, "using default panel params\n"); - info->fb_bpp = info->fb_depth = 32; - info->fb_width = 800; - info->fb_height = 480; - info->fb_stride = info->fb_width * (info->fb_depth / 8); - } - - fbd = device_add_child(sc->mtl_dev, "fbd", - device_get_unit(sc->mtl_dev)); - if (fbd == NULL) { - device_printf(sc->mtl_dev, "Failed to attach fbd child\n"); - return (ENXIO); - } - if (device_probe_and_attach(fbd) != 0) { - device_printf(sc->mtl_dev, - "Failed to attach fbd device\n"); - return (ENXIO); - } - return (0); -} - -void -terasic_mtl_fbd_detach(struct terasic_mtl_softc *sc) -{ - panic("%s: detach not implemented", __func__); -} - -extern device_t fbd_driver; -extern devclass_t fbd_devclass; -DRIVER_MODULE(fbd, terasic_mtl, fbd_driver, fbd_devclass, 0, 0);