diff options
| -rw-r--r-- | sys/dev/sound/midi/midi.c | 4 | ||||
| -rw-r--r-- | sys/dev/sound/pci/csamidi.c | 290 | ||||
| -rw-r--r-- | sys/modules/sound/driver/csa/Makefile | 4 |
3 files changed, 6 insertions, 292 deletions
diff --git a/sys/dev/sound/midi/midi.c b/sys/dev/sound/midi/midi.c index 7ccc9da533de..325106200320 100644 --- a/sys/dev/sound/midi/midi.c +++ b/sys/dev/sound/midi/midi.c @@ -1467,14 +1467,18 @@ midi_modevent(module_t mod, int type, void *data) switch (type) { case MOD_LOAD: retval = midi_load(); +#if 0 if (retval == 0) retval = seq_modevent(mod, type, data); +#endif break; case MOD_UNLOAD: retval = midi_unload(); +#if 0 if (retval == 0) retval = seq_modevent(mod, type, data); +#endif break; default: diff --git a/sys/dev/sound/pci/csamidi.c b/sys/dev/sound/pci/csamidi.c deleted file mode 100644 index 21543e736e9f..000000000000 --- a/sys/dev/sound/pci/csamidi.c +++ /dev/null @@ -1,290 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - - * Copyright (c) 2015-2018 Tai-hwa Liang <avatar@FreeBSD.org> - * 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. - * - * 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 <sys/param.h> -#include <sys/types.h> -#include <sys/bus.h> -#include <machine/bus.h> -#include <sys/rman.h> -#include <sys/systm.h> -#include <sys/kobj.h> -#include <sys/lock.h> -#include <sys/mutex.h> - -#ifdef HAVE_KERNEL_OPTION_HEADERS -#include "opt_snd.h" -#endif - -#include <dev/pci/pcireg.h> -#include <dev/pci/pcivar.h> - -#include <dev/sound/chip.h> -#include <dev/sound/pcm/sound.h> - -#include <dev/sound/midi/midi.h> -#include <dev/sound/midi/mpu401.h> - -#include <dev/sound/pci/csareg.h> -#include <dev/sound/pci/csavar.h> - -#include "mpufoi_if.h" - -SND_DECLARE_FILE("$FreeBSD$"); - -/* pulled from mpu401.c */ -#define MPU_DATAPORT 0 -#define MPU_CMDPORT 1 -#define MPU_STATPORT 1 -#define MPU_RESET 0xff -#define MPU_UART 0x3f -#define MPU_ACK 0xfe -#define MPU_STATMASK 0xc0 -#define MPU_OUTPUTBUSY 0x40 -#define MPU_INPUTBUSY 0x80 - -/* device private data */ -struct csa_midi_softc { - /* hardware resources */ - int io_rid; /* io rid */ - struct resource *io; /* io */ - - struct mtx mtx; - device_t dev; - struct mpu401 *mpu; - mpu401_intr_t *mpu_intr; - int mflags; /* MIDI flags */ -}; - -static struct kobj_class csamidi_mpu_class; -static devclass_t midicsa_devclass; - -static u_int32_t -csamidi_readio(struct csa_midi_softc *scp, u_long offset) -{ - if (offset < BA0_AC97_RESET) - return bus_space_read_4(rman_get_bustag(scp->io), rman_get_bushandle(scp->io), offset) & 0xffffffff; - else - return (0); -} - -static void -csamidi_writeio(struct csa_midi_softc *scp, u_long offset, u_int32_t data) -{ - if (offset < BA0_AC97_RESET) - bus_space_write_4(rman_get_bustag(scp->io), rman_get_bushandle(scp->io), offset, data); -} - -static void -csamidi_midi_intr(void *arg) -{ - struct csa_midi_softc *scp = (struct csa_midi_softc *)arg; - - if (scp->mpu_intr) - (scp->mpu_intr)(scp->mpu); -} - -static unsigned char -csamidi_mread(struct mpu401 *arg __unused, void *cookie, int reg) -{ - struct csa_midi_softc *scp = cookie; - unsigned int rc; - unsigned int uart_stat; - - rc = 0; - /* hacks to convert hardware status to MPU compatible ones */ - switch (reg) { - case MPU_STATPORT: - uart_stat = csamidi_readio(scp, BA0_MIDSR); - if (uart_stat & MIDSR_TBF) - rc |= MPU_OUTPUTBUSY; /* Tx buffer full */ - if (uart_stat & MIDSR_RBE) - rc |= MPU_INPUTBUSY; - break; - case MPU_DATAPORT: - rc = csamidi_readio(scp, BA0_MIDRP); - break; - default: - printf("csamidi_mread: unknown register %d\n", reg); - break; - } - return (rc); -} - -static void -csamidi_mwrite(struct mpu401 *arg __unused, void *cookie, int reg, unsigned char b) -{ - struct csa_midi_softc *scp = cookie; - unsigned int val; - - switch (reg) { - case MPU_CMDPORT: - switch (b) - { - case MPU_RESET: - /* preserve current operation mode */ - val = csamidi_readio(scp, BA0_MIDCR); - /* reset the MIDI port */ - csamidi_writeio(scp, BA0_MIDCR, MIDCR_MRST); - csamidi_writeio(scp, BA0_MIDCR, MIDCR_MLB); - csamidi_writeio(scp, BA0_MIDCR, 0x00); - /* restore previous operation mode */ - csamidi_writeio(scp, BA0_MIDCR, val); - break; - case MPU_UART: - /* switch to UART mode, no-op */ - default: - break; - } - break; - case MPU_DATAPORT: - /* put the MIDI databyte in the write port */ - csamidi_writeio(scp, BA0_MIDWP, b); - break; - default: - printf("csamidi_mwrite: unknown register %d\n", reg); - break; - } -} - -static int -csamidi_muninit(struct mpu401 *arg __unused, void *cookie) -{ - struct csa_midi_softc *scp = cookie; - - mtx_lock(&scp->mtx); - scp->mpu_intr = NULL; - mtx_unlock(&scp->mtx); - - return (0); -} - -static int -midicsa_probe(device_t dev) -{ - struct sndcard_func *func; - - /* The parent device has already been probed. */ - - func = device_get_ivars(dev); - if (func == NULL || func->func != SCF_MIDI) - return (ENXIO); - - device_set_desc(dev, "CS461x MIDI"); - return (0); -} - -static int -midicsa_attach(device_t dev) -{ - struct csa_midi_softc *scp; - struct sndcard_func *func; - int rc = ENXIO; - - scp = device_get_softc(dev); - func = device_get_ivars(dev); - - bzero(scp, sizeof(struct csa_midi_softc)); - scp->dev = dev; - - /* allocate the required resources */ - scp->io_rid = PCIR_BAR(0); - scp->io = bus_alloc_resource_any(dev, SYS_RES_MEMORY, - &scp->io_rid, RF_ACTIVE); - if (scp->io == NULL) - goto err0; - - /* init the fake MPU401 interface. */ - scp->mpu = mpu401_init(&csamidi_mpu_class, scp, csamidi_midi_intr, - &scp->mpu_intr); - if (scp->mpu == NULL) { - rc = ENOMEM; - goto err1; - } - - mtx_init(&scp->mtx, device_get_nameunit(dev), "csamidi softc", - MTX_DEF); - - /* reset the MIDI port */ - csamidi_writeio(scp, BA0_MIDCR, MIDCR_MRST); - /* MIDI transmit enable, no interrupt */ - csamidi_writeio(scp, BA0_MIDCR, MIDCR_TXE | MIDCR_RXE); - csamidi_writeio(scp, BA0_HICR, HICR_IEV | HICR_CHGM); - - return (0); -err1: - bus_release_resource(dev, SYS_RES_MEMORY, scp->io_rid, scp->io); - scp->io = NULL; -err0: - return (rc); -} - -static int -midicsa_detach(device_t dev) -{ - struct csa_midi_softc *scp; - int rc = 0; - - scp = device_get_softc(dev); - rc = mpu401_uninit(scp->mpu); - if (rc) - return (rc); - if (scp->io != NULL) { - bus_release_resource(dev, SYS_RES_MEMORY, scp->io_rid, - scp->io); - scp->io = NULL; - } - mtx_destroy(&scp->mtx); - return (rc); -} - -static kobj_method_t csamidi_mpu_methods[] = { - KOBJMETHOD(mpufoi_read, csamidi_mread), - KOBJMETHOD(mpufoi_write, csamidi_mwrite), - KOBJMETHOD(mpufoi_uninit, csamidi_muninit), - KOBJMETHOD_END -}; - -static DEFINE_CLASS(csamidi_mpu, csamidi_mpu_methods, 0); - -static device_method_t midicsa_methods[] = { - DEVMETHOD(device_probe, midicsa_probe), - DEVMETHOD(device_attach, midicsa_attach), - DEVMETHOD(device_detach, midicsa_detach), - - DEVMETHOD_END -}; - -static driver_t midicsa_driver = { - "midi", - midicsa_methods, - sizeof(struct csa_midi_softc), -}; -DRIVER_MODULE(snd_csa_midi, csa, midicsa_driver, midicsa_devclass, 0, 0); -MODULE_DEPEND(snd_csa_midi, snd_csa, 1, 1, 1); -MODULE_DEPEND(snd_csa_midi, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER); -MODULE_VERSION(snd_csa_midi, 1); diff --git a/sys/modules/sound/driver/csa/Makefile b/sys/modules/sound/driver/csa/Makefile index b1a3f1fb9df4..af02ef4f4e0d 100644 --- a/sys/modules/sound/driver/csa/Makefile +++ b/sys/modules/sound/driver/csa/Makefile @@ -3,7 +3,7 @@ .PATH: ${SRCTOP}/sys/dev/sound/pci KMOD= snd_csa -SRCS= device_if.h bus_if.h mpufoi_if.h pci_if.h -SRCS+= csa.c csamidi.c csapcm.c +SRCS= device_if.h bus_if.h pci_if.h +SRCS+= csa.c csapcm.c .include <bsd.kmod.mk> |
