Module Name: src Committed By: khorben Date: Wed Sep 7 01:00:37 UTC 2022
Modified Files: src/sys/dev/pci: emuxki.c Added Files: src/sys/dev/pci: emuxkivar.h Log Message: emuxki(4): place struct emuxki_softc into its own file NFCI To generate a diff of this commit: cvs rdiff -u -r1.74 -r1.75 src/sys/dev/pci/emuxki.c cvs rdiff -u -r0 -r1.15 src/sys/dev/pci/emuxkivar.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/pci/emuxki.c diff -u src/sys/dev/pci/emuxki.c:1.74 src/sys/dev/pci/emuxki.c:1.75 --- src/sys/dev/pci/emuxki.c:1.74 Wed Sep 7 00:44:07 2022 +++ src/sys/dev/pci/emuxki.c Wed Sep 7 01:00:37 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: emuxki.c,v 1.74 2022/09/07 00:44:07 khorben Exp $ */ +/* $NetBSD: emuxki.c,v 1.75 2022/09/07 01:00:37 khorben Exp $ */ /*- * Copyright (c) 2001, 2007 The NetBSD Foundation, Inc. @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: emuxki.c,v 1.74 2022/09/07 00:44:07 khorben Exp $"); +__KERNEL_RCSID(0, "$NetBSD: emuxki.c,v 1.75 2022/09/07 01:00:37 khorben Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -54,16 +54,8 @@ __KERNEL_RCSID(0, "$NetBSD: emuxki.c,v 1 #include <sys/bus.h> #include <sys/intr.h> -#include <dev/audio/audio_if.h> - -#include <dev/ic/ac97reg.h> -#include <dev/ic/ac97var.h> - -#include <dev/pci/pcidevs.h> -#include <dev/pci/pcireg.h> -#include <dev/pci/pcivar.h> - #include <dev/pci/emuxkireg.h> +#include <dev/pci/emuxkivar.h> /* #define EMUXKI_DEBUG 1 */ #ifdef EMUXKI_DEBUG @@ -84,109 +76,6 @@ __KERNEL_RCSID(0, "$NetBSD: emuxki.c,v 1 #define EMU_PCI_CBIO (0x10) #define EMU_SUBSYS_APS (0x40011102) -#define EMU_PTESIZE (4096) -#define EMU_MINPTE (3) -/* - * Hardware limit of PTE is 4096 entry but it's too big for single voice. - * Reasonable candidate is: - * 48kHz * 2ch * 2byte * 1sec * 3buf/EMU_PTESIZE = 141 - * and then round it up to 2^n. - */ -#define EMU_MAXPTE (256) -#define EMU_NUMCHAN (64) - -/* - * Internal recording DMA buffer - */ -/* Recommend the same size as EMU_PTESIZE to be symmetrical for play/rec */ -#define EMU_REC_DMABLKSIZE (4096) -/* must be EMU_REC_DMABLKSIZE * 2 */ -#define EMU_REC_DMASIZE (8192) -/* must be EMU_RECBS_BUFSIZE_(EMU_REC_DMASIZE) */ -#define EMU_REC_BUFSIZE_RECBS EMU_RECBS_BUFSIZE_8192 - -/* - * DMA memory management - */ - -#define EMU_DMA_ALIGN (4096) -#define EMU_DMA_NSEGS (1) - -struct dmamem { - bus_dma_tag_t dmat; - bus_size_t size; - bus_size_t align; - bus_size_t bound; - bus_dma_segment_t *segs; - int nsegs; - int rsegs; - void * kaddr; - bus_dmamap_t map; -}; - -#define KERNADDR(ptr) ((void *)((ptr)->kaddr)) -/* - * (ptr)->segs[] is CPU's PA translated by CPU's MMU. - * (ptr)->map->dm_segs[] is PCI device's PA translated by PCI's MMU. - */ -#define DMASEGADDR(ptr, segno) ((ptr)->map->dm_segs[segno].ds_addr) -#define DMAADDR(ptr) DMASEGADDR(ptr, 0) -#define DMASIZE(ptr) ((ptr)->size) - -struct emuxki_softc { - device_t sc_dev; - device_t sc_audev; - enum { - EMUXKI_SBLIVE = 0x00, - EMUXKI_AUDIGY = 0x01, - EMUXKI_AUDIGY2 = 0x02, - EMUXKI_AUDIGY2_VALUE = 0x04, - EMUXKI_LIVE_5_1 = 0x08, - EMUXKI_APS = 0x10 - } sc_type; - audio_device_t sc_audv; /* for GETDEV */ - - /* Autoconfig parameters */ - bus_space_tag_t sc_iot; - bus_space_handle_t sc_ioh; - bus_addr_t sc_iob; - bus_size_t sc_ios; - pci_chipset_tag_t sc_pc; /* PCI tag */ - bus_dma_tag_t sc_dmat; - void *sc_ih; /* interrupt handler */ - kmutex_t sc_intr_lock; - kmutex_t sc_lock; - kmutex_t sc_index_lock; - - /* register parameters */ - struct dmamem *ptb; /* page table */ - - struct dmamem *pmem; /* play memory */ - void (*pintr)(void *); - void *pintrarg; - audio_params_t play; - uint32_t pframesize; - uint32_t pblksize; - uint32_t plength; - uint32_t poffset; - - struct dmamem *rmem; /* rec internal memory */ - void (*rintr)(void *); - void *rintrarg; - audio_params_t rec; - void *rptr; /* rec MI ptr */ - int rcurrent; /* rec software trans count */ - int rframesize; - int rblksize; - int rlength; - int roffset; - - /* others */ - - struct ac97_host_if hostif; - struct ac97_codec_if *codecif; -}; - /* blackmagic */ #define X1(x) ((sc->sc_type & EMUXKI_AUDIGY) ? EMU_A_##x : EMU_##x) #define X2(x, y) ((sc->sc_type & EMUXKI_AUDIGY) \ Added files: Index: src/sys/dev/pci/emuxkivar.h diff -u /dev/null src/sys/dev/pci/emuxkivar.h:1.15 --- /dev/null Wed Sep 7 01:00:37 2022 +++ src/sys/dev/pci/emuxkivar.h Wed Sep 7 01:00:37 2022 @@ -0,0 +1,153 @@ +/* $NetBSD: emuxkivar.h,v 1.15 2022/09/07 01:00:37 khorben Exp $ */ + +/*- + * Copyright (c) 2001, 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Yannick Montulet, and by Andrew Doran. + * + * 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 NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DEV_PCI_EMUXKIVAR_H_ +#define _DEV_PCI_EMUXKIVAR_H_ + +#include <sys/device.h> +#include <sys/audioio.h> +#include <sys/mutex.h> + +#include <sys/bus.h> + +#include <dev/audio/audio_if.h> + +#include <dev/ic/ac97reg.h> +#include <dev/ic/ac97var.h> + +#include <dev/pci/pcidevs.h> +#include <dev/pci/pcireg.h> +#include <dev/pci/pcivar.h> + +#define EMU_PTESIZE (4096) +#define EMU_MINPTE (3) +/* + * Hardware limit of PTE is 4096 entry but it's too big for single voice. + * Reasonable candidate is: + * 48kHz * 2ch * 2byte * 1sec * 3buf/EMU_PTESIZE = 141 + * and then round it up to 2^n. + */ +#define EMU_MAXPTE (256) +#define EMU_NUMCHAN (64) + +/* + * Internal recording DMA buffer + */ +/* Recommend the same size as EMU_PTESIZE to be symmetrical for play/rec */ +#define EMU_REC_DMABLKSIZE (4096) +/* must be EMU_REC_DMABLKSIZE * 2 */ +#define EMU_REC_DMASIZE (8192) +/* must be EMU_RECBS_BUFSIZE_(EMU_REC_DMASIZE) */ +#define EMU_REC_BUFSIZE_RECBS EMU_RECBS_BUFSIZE_8192 + +/* + * DMA memory management + */ + +#define EMU_DMA_ALIGN (4096) +#define EMU_DMA_NSEGS (1) + +struct dmamem { + bus_dma_tag_t dmat; + bus_size_t size; + bus_size_t align; + bus_size_t bound; + bus_dma_segment_t *segs; + int nsegs; + int rsegs; + void * kaddr; + bus_dmamap_t map; +}; + +#define KERNADDR(ptr) ((void *)((ptr)->kaddr)) +/* + * (ptr)->segs[] is CPU's PA translated by CPU's MMU. + * (ptr)->map->dm_segs[] is PCI device's PA translated by PCI's MMU. + */ +#define DMASEGADDR(ptr, segno) ((ptr)->map->dm_segs[segno].ds_addr) +#define DMAADDR(ptr) DMASEGADDR(ptr, 0) +#define DMASIZE(ptr) ((ptr)->size) + +struct emuxki_softc { + device_t sc_dev; + device_t sc_audev; + enum { + EMUXKI_SBLIVE = 0x00, + EMUXKI_AUDIGY = 0x01, + EMUXKI_AUDIGY2 = 0x02, + EMUXKI_AUDIGY2_VALUE = 0x04, + EMUXKI_LIVE_5_1 = 0x08, + EMUXKI_APS = 0x10 + } sc_type; + audio_device_t sc_audv; /* for GETDEV */ + + /* Autoconfig parameters */ + bus_space_tag_t sc_iot; + bus_space_handle_t sc_ioh; + bus_addr_t sc_iob; + bus_size_t sc_ios; + pci_chipset_tag_t sc_pc; /* PCI tag */ + bus_dma_tag_t sc_dmat; + void *sc_ih; /* interrupt handler */ + kmutex_t sc_intr_lock; + kmutex_t sc_lock; + kmutex_t sc_index_lock; + + /* register parameters */ + struct dmamem *ptb; /* page table */ + + struct dmamem *pmem; /* play memory */ + void (*pintr)(void *); + void *pintrarg; + audio_params_t play; + uint32_t pframesize; + uint32_t pblksize; + uint32_t plength; + uint32_t poffset; + + struct dmamem *rmem; /* rec internal memory */ + void (*rintr)(void *); + void *rintrarg; + audio_params_t rec; + void *rptr; /* rec MI ptr */ + int rcurrent; /* rec software trans count */ + int rframesize; + int rblksize; + int rlength; + int roffset; + + /* others */ + + struct ac97_host_if hostif; + struct ac97_codec_if *codecif; +}; + +#endif /* _DEV_PCI_EMUXKIVAR_H_ */