diff --git a/sys/dev/isa/pas.c b/sys/dev/isa/pas.c index 21f6b7812fa3..691e6521448c 100644 --- a/sys/dev/isa/pas.c +++ b/sys/dev/isa/pas.c @@ -1,4 +1,4 @@ -/* $NetBSD: pas.c,v 1.60 2004/10/29 12:57:17 yamt Exp $ */ +/* $NetBSD: pas.c,v 1.61 2005/01/14 03:41:45 kent Exp $ */ /* * Copyright (c) 1991-1993 Regents of the University of California. @@ -34,7 +34,7 @@ * */ /* - * jfw 7/13/97 - The soundblaster code requires the generic bus-space + * jfw 7/13/97 - The soundblaster code requires the generic bus-space * structures to be set up properly. Rather than go to the effort of making * code for a dead line fully generic, properly set up the SB structures and * leave the rest x86/ISA/default-configuration specific. If you have a @@ -42,8 +42,8 @@ */ /* * Todo: - * - look at other PAS drivers (for PAS native suport) - * - use common sb.c once emulation is setup + * - look at other PAS drivers (for PAS native suport) + * - use common sb.c once emulation is setup */ /* * jfw 6/21/98 - WARNING: the PAS native IO ports are scattered all around @@ -57,7 +57,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pas.c,v 1.60 2004/10/29 12:57:17 yamt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pas.c,v 1.61 2005/01/14 03:41:45 kent Exp $"); #include #include @@ -108,14 +108,14 @@ int pasdebug = 0; */ struct pas_softc { struct sbdsp_softc sc_sbdsp; /* base device, &c. */ - bus_space_handle_t pas_port_handle; /* the pas-specific port */ + bus_space_handle_t pas_port_handle; /* the pas-specific port */ int model; int rev; }; -int pas_getdev __P((void *, struct audio_device *)); -void pasconf __P((int, int, int, int)); +int pas_getdev(void *, struct audio_device *); +void pasconf(int, int, int, int); /* @@ -145,7 +145,7 @@ const struct audio_hw_if pas_hw_if = { sb_malloc, sb_free, sb_round_buffersize, - sb_mappage, + sb_mappage, sbdsp_get_props, sbdsp_trigger_output, sbdsp_trigger_input, @@ -155,7 +155,7 @@ const struct audio_hw_if pas_hw_if = { /* The Address Translation code is used to convert I/O register addresses to be relative to the given base -register */ -static char *pasnames[] = { +static const char *pasnames[] = { "", "Plus", "CDPC", @@ -174,12 +174,9 @@ static struct audio_device pas_device = { #define paswrite(d, p) outb((p), (d)) void -pasconf(model, sbbase, sbirq, sbdrq) - int model; - int sbbase; - int sbirq; - int sbdrq; +pasconf(int model, int sbbase, int sbirq, int sbdrq) { + paswrite(0x00, INTERRUPT_MASK); /* Local timer control register */ paswrite(0x36, SAMPLE_COUNTER_CONTROL); @@ -193,23 +190,23 @@ pasconf(model, sbbase, sbirq, sbdrq) paswrite(0, SAMPLE_BUFFER_COUNTER); paswrite(P_C_PCM_MONO | P_C_PCM_DAC_MODE | - P_C_MIXER_CROSS_L_TO_L | P_C_MIXER_CROSS_R_TO_R, - PCM_CONTROL); + P_C_MIXER_CROSS_L_TO_L | P_C_MIXER_CROSS_R_TO_R, + PCM_CONTROL); paswrite(S_M_PCM_RESET | S_M_FM_RESET | - S_M_SB_RESET | S_M_MIXER_RESET, SERIAL_MIXER); + S_M_SB_RESET | S_M_MIXER_RESET, SERIAL_MIXER); /*XXX*/ paswrite(I_C_1_BOOT_RESET_ENABLE|1, IO_CONFIGURATION_1); paswrite(I_C_2_PCM_DMA_DISABLED, IO_CONFIGURATION_2); paswrite(I_C_3_PCM_IRQ_DISABLED, IO_CONFIGURATION_3); - -#ifdef BROKEN_BUS_CLOCK + +#ifdef BROKEN_BUS_CLOCK paswrite(S_C_1_PCS_ENABLE | S_C_1_PCS_STEREO | S_C_1_PCS_REALSOUND | - S_C_1_FM_EMULATE_CLOCK, SYSTEM_CONFIGURATION_1); + S_C_1_FM_EMULATE_CLOCK, SYSTEM_CONFIGURATION_1); #else paswrite(S_C_1_PCS_ENABLE | S_C_1_PCS_STEREO | S_C_1_PCS_REALSOUND, - SYSTEM_CONFIGURATION_1); + SYSTEM_CONFIGURATION_1); #endif /*XXX*/ @@ -226,37 +223,39 @@ pasconf(model, sbbase, sbirq, sbdrq) paswrite(P_M_MV508_ADDRESS | P_M_MV508_PCM, PARALLEL_MIXER); paswrite(5, PARALLEL_MIXER); - + /* * Setup SoundBlaster emulation. */ paswrite((sbbase >> 4) & 0xf, EMULATION_ADDRESS); paswrite(E_C_SB_IRQ_translate[sbirq] | E_C_SB_DMA_translate[sbdrq], - EMULATION_CONFIGURATION); + EMULATION_CONFIGURATION); paswrite(C_E_SB_ENABLE, COMPATIBILITY_ENABLE); /* * Set mid-range levels. */ paswrite(P_M_MV508_ADDRESS | P_M_MV508_MODE, PARALLEL_MIXER); - paswrite(P_M_MV508_LOUDNESS | P_M_MV508_ENHANCE_NONE, PARALLEL_MIXER); + paswrite(P_M_MV508_LOUDNESS | P_M_MV508_ENHANCE_NONE, PARALLEL_MIXER); paswrite(P_M_MV508_ADDRESS | P_M_MV508_MASTER_A, PARALLEL_MIXER); paswrite(50, PARALLEL_MIXER); paswrite(P_M_MV508_ADDRESS | P_M_MV508_MASTER_B, PARALLEL_MIXER); paswrite(50, PARALLEL_MIXER); - paswrite(P_M_MV508_ADDRESS | P_M_MV508_MIXER | P_M_MV508_SB, PARALLEL_MIXER); + paswrite(P_M_MV508_ADDRESS | P_M_MV508_MIXER | P_M_MV508_SB, + PARALLEL_MIXER); paswrite(P_M_MV508_OUTPUTMIX | 30, PARALLEL_MIXER); - paswrite(P_M_MV508_ADDRESS | P_M_MV508_MIXER | P_M_MV508_MIC, PARALLEL_MIXER); + paswrite(P_M_MV508_ADDRESS | P_M_MV508_MIXER | P_M_MV508_MIC, + PARALLEL_MIXER); paswrite(P_M_MV508_INPUTMIX | 30, PARALLEL_MIXER); } -int pasprobe __P((struct device *, struct cfdata *, void *)); -void pasattach __P((struct device *, struct device *, void *)); -static int pasfind __P((struct device *, struct pas_softc *, - struct isa_attach_args *, int)); +int pasprobe(struct device *, struct cfdata *, void *); +void pasattach(struct device *, struct device *, void *); +static int pasfind(struct device *, struct pas_softc *, + struct isa_attach_args *, int); /* argument to pasfind */ #define PASPROBE 1 #define PASATTACH 0 @@ -269,23 +268,22 @@ CFATTACH_DECL(pas, sizeof(struct pas_softc), */ int -pasprobe(parent, match, aux) - struct device *parent; - struct cfdata *match; - void *aux; +pasprobe(struct device *parent, struct cfdata *match, void *aux) { - struct isa_attach_args *ia = aux; - struct pas_softc probesc, *sc = &probesc; + struct isa_attach_args *ia; + struct pas_softc probesc, *sc; + ia = aux; + sc = &probesc; if (ia->ia_nio < 1) - return (0); + return 0; if (ia->ia_nirq < 1) - return (0); + return 0; if (ia->ia_ndrq < 1) - return (0); + return 0; if (ISA_DIRECT_CONFIG(ia)) - return (0); + return 0; memset(sc, 0, sizeof *sc); sc->sc_sbdsp.sc_dev.dv_cfdata = match; @@ -297,27 +295,25 @@ pasprobe(parent, match, aux) * Probe for the soundblaster hardware. */ static int -pasfind(parent, sc, ia, probing) - struct device *parent; - struct pas_softc *sc; - struct isa_attach_args *ia; - int probing; +pasfind(struct device *parent, struct pas_softc *sc, + struct isa_attach_args *ia, int probing) { int iobase; u_char id, t; - int rc = 0; /* failure */ + int rc; - /* ensure we can set this up as a sound blaster */ - if (!SB_BASE_VALID(ia->ia_io[0].ir_addr)) { + rc = 0; /* failure */ + /* ensure we can set this up as a sound blaster */ + if (!SB_BASE_VALID(ia->ia_io[0].ir_addr)) { printf("pas: configured SB iobase 0x%x invalid\n", ia->ia_io[0].ir_addr); return 0; } if (bus_space_map(sc->sc_sbdsp.sc_iot, PAS_DEFAULT_BASE, 1, 0, - &sc->pas_port_handle)) { + &sc->pas_port_handle)) { printf("pas: can't map base register %x in probe\n", - PAS_DEFAULT_BASE); + PAS_DEFAULT_BASE); return 0; } @@ -326,7 +322,7 @@ pasfind(parent, sc, ia, probing) * warm boot reset of the card will screw up this detect code * something fierce. Adding code to handle this means possibly * interfering with other cards on the bus if you have something - * on base port 0x388. SO be forewarned. + * on base port 0x388. SO be forewarned. */ /* Talk to first board */ outb(MASTER_DECODE, 0xbc); @@ -375,23 +371,22 @@ pasfind(parent, sc, ia, probing) sc->model = O_M_1_to_card[t]; if (sc->model != 0) { sc->rev = pasread(BOARD_REV_ID); - } - else { + } else { DPRINTF(("pas: bogus model id\n")); goto unmap1; } - if (sc->model >= 0) { - if (ia->ia_irq[0].ir_irq == ISA_UNKNOWN_IRQ) { - printf("pas: sb emulation requires known irq\n"); + if (sc->model >= 0) { + if (ia->ia_irq[0].ir_irq == ISA_UNKNOWN_IRQ) { + printf("pas: sb emulation requires known irq\n"); goto unmap1; - } - pasconf(sc->model, ia->ia_io[0].ir_addr, - ia->ia_irq[0].ir_irq, 1); - } else { - DPRINTF(("pas: could not probe pas\n")); + } + pasconf(sc->model, ia->ia_io[0].ir_addr, + ia->ia_irq[0].ir_irq, 1); + } else { + DPRINTF(("pas: could not probe pas\n")); goto unmap1; - } + } /* Now a SoundBlaster, so set up proper bus-space hooks * appropriately @@ -430,7 +425,7 @@ pasfind(parent, sc, ia, probing) sc->sc_sbdsp.sc_irq = ia->ia_irq[0].ir_irq; sc->sc_sbdsp.sc_drq8 = ia->ia_drq[0].ir_drq; sc->sc_sbdsp.sc_drq16 = -1; /* XXX */ - + if (sbdsp_probe(&sc->sc_sbdsp) == 0) { DPRINTF(("pas: sbdsp probe failed\n")); goto unmap; @@ -450,11 +445,11 @@ pasfind(parent, sc, ia, probing) unmap: if (rc == 0 || probing) - bus_space_unmap(sc->sc_sbdsp.sc_iot, sc->sc_sbdsp.sc_ioh, - SBP_NPORT); + bus_space_unmap(sc->sc_sbdsp.sc_iot, sc->sc_sbdsp.sc_ioh, + SBP_NPORT); unmap1: if (rc == 0 || probing) - bus_space_unmap(sc->sc_sbdsp.sc_iot, PAS_DEFAULT_BASE, 1); + bus_space_unmap(sc->sc_sbdsp.sc_iot, PAS_DEFAULT_BASE, 1); return rc; } @@ -463,14 +458,15 @@ pasfind(parent, sc, ia, probing) * pseudo-device driver . */ void -pasattach(parent, self, aux) - struct device *parent, *self; - void *aux; +pasattach(struct device *parent, struct device *self, void *aux) { - struct pas_softc *sc = (struct pas_softc *)self; - struct isa_attach_args *ia = (struct isa_attach_args *)aux; - int iobase = ia->ia_io[0].ir_addr; - + struct pas_softc *sc; + struct isa_attach_args *ia; + int iobase; + + sc = (struct pas_softc *)self; + ia = (struct isa_attach_args *)aux; + iobase = ia->ia_io[0].ir_addr; if (!pasfind(parent, sc, ia, PASATTACH)) { printf("%s: pasfind failed\n", sc->sc_sbdsp.sc_dev.dv_xname); return; @@ -483,7 +479,7 @@ pasattach(parent, self, aux) printf(" ProAudio Spectrum %s [rev %d] ", pasnames[sc->model], sc->rev); - + sbdsp_attach(&sc->sc_sbdsp); snprintf(pas_device.name, sizeof(pas_device.name), "pas,%s", @@ -495,10 +491,9 @@ pasattach(parent, self, aux) } int -pas_getdev(addr, retp) - void *addr; - struct audio_device *retp; +pas_getdev(void *addr, struct audio_device *retp) { + *retp = pas_device; return 0; } diff --git a/sys/dev/isa/wss.c b/sys/dev/isa/wss.c index af428316dbaf..2de744a1af78 100644 --- a/sys/dev/isa/wss.c +++ b/sys/dev/isa/wss.c @@ -1,4 +1,4 @@ -/* $NetBSD: wss.c,v 1.61 2004/10/29 12:57:17 yamt Exp $ */ +/* $NetBSD: wss.c,v 1.62 2005/01/14 03:41:45 kent Exp $ */ /* * Copyright (c) 1994 John Brezak @@ -36,7 +36,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: wss.c,v 1.61 2004/10/29 12:57:17 yamt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: wss.c,v 1.62 2005/01/14 03:41:45 kent Exp $"); #include #include @@ -74,11 +74,11 @@ struct audio_device wss_device = { "WSS" }; -int wss_getdev __P((void *, struct audio_device *)); +int wss_getdev(void *, struct audio_device *); -int wss_mixer_set_port __P((void *, mixer_ctrl_t *)); -int wss_mixer_get_port __P((void *, mixer_ctrl_t *)); -int wss_query_devinfo __P((void *, mixer_devinfo_t *)); +int wss_mixer_set_port(void *, mixer_ctrl_t *); +int wss_mixer_get_port(void *, mixer_ctrl_t *); +int wss_query_devinfo(void *, mixer_devinfo_t *); /* * Define our interface to the higher level audio driver. @@ -119,27 +119,24 @@ const struct audio_hw_if wss_hw_if = { * pseudo-device driver . */ void -wssattach(sc) - struct wss_softc *sc; +wssattach(struct wss_softc *sc) { - struct ad1848_softc *ac = &sc->sc_ad1848.sc_ad1848; - + struct ad1848_softc *ac; #if 0 /* loses on CS423X chips */ int version; #endif - + + ac = &sc->sc_ad1848.sc_ad1848; madattach(sc); sc->sc_ad1848.sc_ih = isa_intr_establish(sc->wss_ic, sc->wss_irq, - IST_EDGE, - IPL_AUDIO, ad1848_isa_intr, - &sc->sc_ad1848); + IST_EDGE, IPL_AUDIO, ad1848_isa_intr, &sc->sc_ad1848); ad1848_isa_attach(&sc->sc_ad1848); - + #if 0 /* loses on CS423X chips */ - version = bus_space_read_1(sc->sc_iot, sc->sc_ioh, WSS_STATUS) - & WSS_VERSMASK; + version = bus_space_read_1(sc->sc_iot, sc->sc_ioh, WSS_STATUS) + & WSS_VERSMASK; printf(" (vers %d)", version); #endif @@ -175,10 +172,9 @@ wssattach(sc) } int -wss_getdev(addr, retp) - void *addr; - struct audio_device *retp; +wss_getdev(void *addr, struct audio_device *retp) { + *retp = wss_device; return 0; } @@ -199,32 +195,28 @@ static ad1848_devmap_t mappings[] = { static int nummap = sizeof(mappings) / sizeof(mappings[0]); int -wss_mixer_set_port(addr, cp) - void *addr; - mixer_ctrl_t *cp; +wss_mixer_set_port(void *addr, mixer_ctrl_t *cp) { - struct ad1848_softc *ac = addr; + struct ad1848_softc *ac; - return (ad1848_mixer_set_port(ac, mappings, nummap, cp)); + ac = addr; + return ad1848_mixer_set_port(ac, mappings, nummap, cp); } int -wss_mixer_get_port(addr, cp) - void *addr; - mixer_ctrl_t *cp; +wss_mixer_get_port(void *addr, mixer_ctrl_t *cp) { - struct ad1848_softc *ac = addr; + struct ad1848_softc *ac; - return (ad1848_mixer_get_port(ac, mappings, nummap, cp)); + ac = addr; + return ad1848_mixer_get_port(ac, mappings, nummap, cp); } int -wss_query_devinfo(addr, dip) - void *addr; - mixer_devinfo_t *dip; +wss_query_devinfo(void *addr, mixer_devinfo_t *dip) { + DPRINTF(("wss_query_devinfo: index=%d\n", dip->index)); - switch(dip->index) { case WSS_MIC_IN_LVL: /* Microphone */ dip->type = AUDIO_MIXER_VALUE; @@ -235,7 +227,7 @@ wss_query_devinfo(addr, dip) dip->un.v.num_channels = 2; strcpy(dip->un.v.units.name, AudioNvolume); break; - + case WSS_LINE_IN_LVL: /* line/CD */ dip->type = AUDIO_MIXER_VALUE; dip->mixer_class = WSS_INPUT_CLASS; @@ -245,7 +237,7 @@ wss_query_devinfo(addr, dip) dip->un.v.num_channels = 2; strcpy(dip->un.v.units.name, AudioNvolume); break; - + case WSS_DAC_LVL: /* dacout */ dip->type = AUDIO_MIXER_VALUE; dip->mixer_class = WSS_INPUT_CLASS; @@ -255,7 +247,7 @@ wss_query_devinfo(addr, dip) dip->un.v.num_channels = 2; strcpy(dip->un.v.units.name, AudioNvolume); break; - + case WSS_REC_LVL: /* record level */ dip->type = AUDIO_MIXER_VALUE; dip->mixer_class = WSS_RECORD_CLASS; @@ -265,7 +257,7 @@ wss_query_devinfo(addr, dip) dip->un.v.num_channels = 2; strcpy(dip->un.v.units.name, AudioNvolume); break; - + case WSS_MONITOR_LVL: /* monitor level */ dip->type = AUDIO_MIXER_VALUE; dip->mixer_class = WSS_MONITOR_CLASS; @@ -275,42 +267,42 @@ wss_query_devinfo(addr, dip) dip->un.v.num_channels = 1; strcpy(dip->un.v.units.name, AudioNvolume); break; - + case WSS_INPUT_CLASS: /* input class descriptor */ dip->type = AUDIO_MIXER_CLASS; dip->mixer_class = WSS_INPUT_CLASS; dip->next = dip->prev = AUDIO_MIXER_LAST; strcpy(dip->label.name, AudioCinputs); break; - + case WSS_MONITOR_CLASS: /* monitor class descriptor */ dip->type = AUDIO_MIXER_CLASS; dip->mixer_class = WSS_MONITOR_CLASS; dip->next = dip->prev = AUDIO_MIXER_LAST; strcpy(dip->label.name, AudioCmonitor); break; - + case WSS_RECORD_CLASS: /* record source class */ dip->type = AUDIO_MIXER_CLASS; dip->mixer_class = WSS_RECORD_CLASS; dip->next = dip->prev = AUDIO_MIXER_LAST; strcpy(dip->label.name, AudioCrecord); break; - + case WSS_MIC_IN_MUTE: dip->mixer_class = WSS_INPUT_CLASS; dip->type = AUDIO_MIXER_ENUM; dip->prev = WSS_MIC_IN_LVL; dip->next = AUDIO_MIXER_LAST; goto mute; - + case WSS_LINE_IN_MUTE: dip->mixer_class = WSS_INPUT_CLASS; dip->type = AUDIO_MIXER_ENUM; dip->prev = WSS_LINE_IN_LVL; dip->next = AUDIO_MIXER_LAST; goto mute; - + case WSS_DAC_MUTE: dip->mixer_class = WSS_INPUT_CLASS; dip->type = AUDIO_MIXER_ENUM; @@ -331,7 +323,7 @@ wss_query_devinfo(addr, dip) strcpy(dip->un.e.member[1].label.name, AudioNon); dip->un.e.member[1].ord = 1; break; - + case WSS_RECORD_SOURCE: dip->mixer_class = WSS_RECORD_CLASS; dip->type = AUDIO_MIXER_ENUM; @@ -352,7 +344,7 @@ wss_query_devinfo(addr, dip) /*NOTREACHED*/ } DPRINTF(("AUDIO_MIXER_DEVINFO: name=%s\n", dip->label.name)); - + return 0; } @@ -391,14 +383,12 @@ wss_query_devinfo(addr, dip) */ u_int -mad_read(sc, port) - struct wss_softc *sc; - int port; +mad_read(struct wss_softc *sc, int port) { u_int tmp; int pwd; int s; - + switch (sc->mad_chip_type) { /* Output password */ case MAD_82C928: case MAD_OTI601D: @@ -421,14 +411,11 @@ mad_read(sc, port) } void -mad_write(sc, port, value) - struct wss_softc *sc; - int port; - int value; +mad_write(struct wss_softc *sc, int port, int value) { int pwd; int s; - + switch (sc->mad_chip_type) { /* Output password */ case MAD_82C928: case MAD_OTI601D: @@ -450,28 +437,28 @@ mad_write(sc, port, value) } void -madattach(sc) - struct wss_softc *sc; +madattach(struct wss_softc *sc) { - struct ad1848_softc *ac = (struct ad1848_softc *)&sc->sc_ad1848; + struct ad1848_softc *ac; unsigned char cs4231_mode; int joy; - + + ac = (struct ad1848_softc *)&sc->sc_ad1848; if (sc->mad_chip_type == MAD_NONE) return; - + /* Do we want the joystick disabled? */ joy = ac->sc_dev.dv_cfdata->cf_flags & 2 ? MC1_JOYDISABLE : 0; - + /* enable WSS emulation at the I/O port */ mad_write(sc, MC1_PORT, M_WSS_PORT_SELECT(sc->mad_ioindex) | joy); mad_write(sc, MC2_PORT, MC2_NO_CD_DRQ); /* disable CD */ mad_write(sc, MC3_PORT, 0xf0); /* Disable SB */ - - cs4231_mode = + + cs4231_mode = strncmp(ac->chip_name, "CS4248", 6) == 0 || strncmp(ac->chip_name, "CS4231", 6) == 0 ? 0x02 : 0; - + if (sc->mad_chip_type == MAD_82C929) { mad_write(sc, MC4_PORT, 0x92); mad_write(sc, MC5_PORT, 0xA5 | cs4231_mode); @@ -480,12 +467,12 @@ madattach(sc) mad_write(sc, MC4_PORT, 0x02); mad_write(sc, MC5_PORT, 0x30 | cs4231_mode); } - + #ifdef AUDIO_DEBUG if (wssdebug) { int i; for (i = MC1_PORT; i <= MC7_PORT; i++) - DPRINTF(("port %03x after init = %02x\n", + DPRINTF(("port %03x after init = %02x\n", i, mad_read(sc, i))); } #endif diff --git a/sys/dev/isa/wss_isa.c b/sys/dev/isa/wss_isa.c index 27c2d5390e3a..a303079bb52c 100644 --- a/sys/dev/isa/wss_isa.c +++ b/sys/dev/isa/wss_isa.c @@ -1,4 +1,4 @@ -/* $NetBSD: wss_isa.c,v 1.17 2004/09/14 20:20:49 drochner Exp $ */ +/* $NetBSD: wss_isa.c,v 1.18 2005/01/14 03:41:45 kent Exp $ */ /* * Copyright (c) 1994 John Brezak @@ -41,7 +41,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: wss_isa.c,v 1.17 2004/09/14 20:20:49 drochner Exp $"); +__KERNEL_RCSID(0, "$NetBSD: wss_isa.c,v 1.18 2005/01/14 03:41:45 kent Exp $"); #include #include @@ -71,15 +71,15 @@ extern int wssdebug; #define DPRINTF(x) #endif -static int wssfind __P((struct device *, struct wss_softc *, int, - struct isa_attach_args *)); +static int wssfind(struct device *, struct wss_softc *, int, + struct isa_attach_args *); -static void madprobe __P((struct wss_softc *, int)); -static void madunmap __P((struct wss_softc *)); -static int detect_mad16 __P((struct wss_softc *, int)); +static void madprobe(struct wss_softc *, int); +static void madunmap(struct wss_softc *); +static int detect_mad16(struct wss_softc *, int); -int wss_isa_probe __P((struct device *, struct cfdata *, void *)); -void wss_isa_attach __P((struct device *, struct device *, void *)); +int wss_isa_probe(struct device *, struct cfdata *, void *); +void wss_isa_attach(struct device *, struct device *, void *); CFATTACH_DECL(wss_isa, sizeof(struct wss_softc), wss_isa_probe, wss_isa_attach, NULL, NULL); @@ -88,145 +88,143 @@ CFATTACH_DECL(wss_isa, sizeof(struct wss_softc), * Probe for the Microsoft Sound System hardware. */ int -wss_isa_probe(parent, match, aux) - struct device *parent; - struct cfdata *match; - void *aux; +wss_isa_probe(struct device *parent, struct cfdata *match, void *aux) { - struct isa_attach_args *ia = aux; - struct wss_softc probesc, *sc = &probesc; - struct ad1848_softc *ac = (struct ad1848_softc *)&sc->sc_ad1848; + struct isa_attach_args *ia; + struct wss_softc probesc, *sc; + struct ad1848_softc *ac; - if (ia->ia_nio < 1) - return 0; - if (ia->ia_nirq < 1) - return 0; - if (ia->ia_ndrq < 1) - return 0; + ia = aux; + sc = &probesc; + ac = (struct ad1848_softc *)&sc->sc_ad1848; + if (ia->ia_nio < 1) + return 0; + if (ia->ia_nirq < 1) + return 0; + if (ia->ia_ndrq < 1) + return 0; - if (ISA_DIRECT_CONFIG(ia)) - return 0; + if (ISA_DIRECT_CONFIG(ia)) + return 0; - memset(sc, 0, sizeof *sc); - ac->sc_dev.dv_cfdata = match; - if (wssfind(parent, sc, 1, aux)) { - bus_space_unmap(sc->sc_iot, sc->sc_ioh, WSS_CODEC); - ad1848_isa_unmap(&sc->sc_ad1848); - madunmap(sc); - return 1; - } else - /* Everything is already unmapped */ - return 0; + memset(sc, 0, sizeof *sc); + ac->sc_dev.dv_cfdata = match; + if (wssfind(parent, sc, 1, aux)) { + bus_space_unmap(sc->sc_iot, sc->sc_ioh, WSS_CODEC); + ad1848_isa_unmap(&sc->sc_ad1848); + madunmap(sc); + return 1; + } else + /* Everything is already unmapped */ + return 0; } static int -wssfind(parent, sc, probing, ia) - struct device *parent; - struct wss_softc *sc; - int probing; - struct isa_attach_args *ia; +wssfind(struct device *parent, struct wss_softc *sc, int probing, + struct isa_attach_args *ia) { - struct ad1848_softc *ac = &sc->sc_ad1848.sc_ad1848; - static u_char interrupt_bits[12] = { - -1, -1, -1, -1, -1, -1, -1, 0x08, -1, 0x10, 0x18, 0x20 - }; - static u_char dma_bits[4] = {1, 2, 0, 3}; - int ndrq, playdrq, recdrq; + static u_char interrupt_bits[12] = { + -1, -1, -1, -1, -1, -1, -1, 0x08, -1, 0x10, 0x18, 0x20 + }; + static u_char dma_bits[4] = {1, 2, 0, 3}; + struct ad1848_softc *ac; + int ndrq, playdrq, recdrq; - sc->sc_iot = ia->ia_iot; - if (ac->sc_dev.dv_cfdata->cf_flags & 1) - madprobe(sc, ia->ia_io[0].ir_addr); - else - sc->mad_chip_type = MAD_NONE; + ac = &sc->sc_ad1848.sc_ad1848; + sc->sc_iot = ia->ia_iot; + if (ac->sc_dev.dv_cfdata->cf_flags & 1) + madprobe(sc, ia->ia_io[0].ir_addr); + else + sc->mad_chip_type = MAD_NONE; #if 0 - if (!WSS_BASE_VALID(ia->ia_io[0].ir_addr)) { - DPRINTF(("wss: configured iobase %x invalid\n", ia->ia_iobase)); - goto bad1; - } + if (!WSS_BASE_VALID(ia->ia_io[0].ir_addr)) { + DPRINTF(("wss: configured iobase %x invalid\n", ia->ia_iobase)); + goto bad1; + } #endif - /* Map the ports upto the AD1848 port */ - if (bus_space_map(sc->sc_iot, ia->ia_io[0].ir_addr, WSS_CODEC, - 0, &sc->sc_ioh)) - goto bad1; + /* Map the ports upto the AD1848 port */ + if (bus_space_map(sc->sc_iot, ia->ia_io[0].ir_addr, WSS_CODEC, + 0, &sc->sc_ioh)) + goto bad1; - ac->sc_iot = sc->sc_iot; + ac->sc_iot = sc->sc_iot; - /* Is there an ad1848 chip at (WSS iobase + WSS_CODEC)? */ - if (ad1848_isa_mapprobe(&sc->sc_ad1848, - ia->ia_io[0].ir_addr + WSS_CODEC) == 0) - goto bad; + /* Is there an ad1848 chip at (WSS iobase + WSS_CODEC)? */ + if (ad1848_isa_mapprobe(&sc->sc_ad1848, + ia->ia_io[0].ir_addr + WSS_CODEC) == 0) + goto bad; #if 0 - /* Setup WSS interrupt and DMA */ - if (!WSS_DRQ_VALID(ia->ia_drq[0].ir_drq)) { - DPRINTF(("wss: configured DMA chan %d invalid\n", - ia->ia_drq[0].ir_drq)); - goto bad; - } + /* Setup WSS interrupt and DMA */ + if (!WSS_DRQ_VALID(ia->ia_drq[0].ir_drq)) { + DPRINTF(("wss: configured DMA chan %d invalid\n", + ia->ia_drq[0].ir_drq)); + goto bad; + } #endif - sc->wss_playdrq = ia->ia_drq[0].ir_drq; - sc->wss_ic = ia->ia_ic; + sc->wss_playdrq = ia->ia_drq[0].ir_drq; + sc->wss_ic = ia->ia_ic; - if (sc->wss_playdrq != ISA_UNKNOWN_DRQ && - !isa_drq_isfree(sc->wss_ic, sc->wss_playdrq)) - goto bad; + if (sc->wss_playdrq != ISA_UNKNOWN_DRQ && + !isa_drq_isfree(sc->wss_ic, sc->wss_playdrq)) + goto bad; #if 0 - if (!WSS_IRQ_VALID(ia->ia_irq[0].ir_irq)) { - DPRINTF(("wss: configured interrupt %d invalid\n", - ia->ia_irq[0].ir_irq)); - goto bad; - } + if (!WSS_IRQ_VALID(ia->ia_irq[0].ir_irq)) { + DPRINTF(("wss: configured interrupt %d invalid\n", + ia->ia_irq[0].ir_irq)); + goto bad; + } #endif - sc->wss_irq = ia->ia_irq[0].ir_irq; + sc->wss_irq = ia->ia_irq[0].ir_irq; - playdrq = ia->ia_drq[0].ir_drq; - if (ia->ia_ndrq > 1) { - ndrq = 2; - recdrq = ia->ia_drq[1].ir_drq; - } else { - ndrq = 1; - recdrq = ISA_UNKNOWN_DRQ; - } + playdrq = ia->ia_drq[0].ir_drq; + if (ia->ia_ndrq > 1) { + ndrq = 2; + recdrq = ia->ia_drq[1].ir_drq; + } else { + ndrq = 1; + recdrq = ISA_UNKNOWN_DRQ; + } - if (ac->mode <= 1) - ndrq = 1; - sc->wss_recdrq = - ac->mode > 1 && ndrq > 1 && - recdrq != ISA_UNKNOWN_DRQ ? recdrq : playdrq; - if (sc->wss_recdrq != sc->wss_playdrq && !isa_drq_isfree(sc->wss_ic, - sc->wss_recdrq)) - goto bad; + if (ac->mode <= 1) + ndrq = 1; + sc->wss_recdrq = + ac->mode > 1 && ndrq > 1 && + recdrq != ISA_UNKNOWN_DRQ ? recdrq : playdrq; + if (sc->wss_recdrq != sc->wss_playdrq && !isa_drq_isfree(sc->wss_ic, + sc->wss_recdrq)) + goto bad; - if (probing) { - ia->ia_nio = 1; - ia->ia_io[0].ir_size = WSS_NPORT; + if (probing) { + ia->ia_nio = 1; + ia->ia_io[0].ir_size = WSS_NPORT; - ia->ia_nirq = 1; + ia->ia_nirq = 1; - ia->ia_ndrq = ndrq; - ia->ia_drq[0].ir_drq = playdrq; - if (ndrq > 1) - ia->ia_drq[1].ir_drq = recdrq; + ia->ia_ndrq = ndrq; + ia->ia_drq[0].ir_drq = playdrq; + if (ndrq > 1) + ia->ia_drq[1].ir_drq = recdrq; - ia->ia_niomem = 0; - } + ia->ia_niomem = 0; + } - /* XXX recdrq */ - bus_space_write_1(sc->sc_iot, sc->sc_ioh, WSS_CONFIG, - (interrupt_bits[ia->ia_irq[0].ir_irq] | - dma_bits[ia->ia_drq[0].ir_drq])); + /* XXX recdrq */ + bus_space_write_1(sc->sc_iot, sc->sc_ioh, WSS_CONFIG, + (interrupt_bits[ia->ia_irq[0].ir_irq] | + dma_bits[ia->ia_drq[0].ir_drq])); - return 1; + return 1; bad: - bus_space_unmap(sc->sc_iot, sc->sc_ioh, WSS_CODEC); + bus_space_unmap(sc->sc_iot, sc->sc_ioh, WSS_CODEC); bad1: - madunmap(sc); - return 0; + madunmap(sc); + return 0; } /* @@ -234,22 +232,23 @@ bad1: * pseudo-device driver . */ void -wss_isa_attach(parent, self, aux) - struct device *parent, *self; - void *aux; +wss_isa_attach(struct device *parent, struct device *self, void *aux) { - struct wss_softc *sc = (struct wss_softc *)self; - struct ad1848_softc *ac = (struct ad1848_softc *)&sc->sc_ad1848; - struct isa_attach_args *ia = (struct isa_attach_args *)aux; - - if (!wssfind(parent, sc, 0, ia)) { - printf("%s: wssfind failed\n", ac->sc_dev.dv_xname); - return; - } + struct wss_softc *sc; + struct ad1848_softc *ac; + struct isa_attach_args *ia; - sc->wss_ic = ia->ia_ic; + sc = (struct wss_softc *)self; + ac = (struct ad1848_softc *)&sc->sc_ad1848; + ia = (struct isa_attach_args *)aux; + if (!wssfind(parent, sc, 0, ia)) { + printf("%s: wssfind failed\n", ac->sc_dev.dv_xname); + return; + } - wssattach(sc); + sc->wss_ic = ia->ia_ic; + + wssattach(sc); } /* @@ -287,125 +286,121 @@ wss_isa_attach(parent, self, aux) */ static int -detect_mad16(sc, chip_type) - struct wss_softc *sc; - int chip_type; +detect_mad16(struct wss_softc *sc, int chip_type) { - unsigned char tmp, tmp2; + unsigned char tmp, tmp2; - sc->mad_chip_type = chip_type; - /* - * Check that reading a register doesn't return bus float (0xff) - * when the card is accessed using password. This may fail in case - * the card is in low power mode. Normally at least the power saving mode - * bit should be 0. - */ - if ((tmp = mad_read(sc, MC1_PORT)) == 0xff) { - DPRINTF(("MC1_PORT returned 0xff\n")); - return 0; - } + sc->mad_chip_type = chip_type; + /* + * Check that reading a register doesn't return bus float (0xff) + * when the card is accessed using password. This may fail in case + * the card is in low power mode. Normally at least the power saving mode + * bit should be 0. + */ + if ((tmp = mad_read(sc, MC1_PORT)) == 0xff) { + DPRINTF(("MC1_PORT returned 0xff\n")); + return 0; + } - /* - * Now check that the gate is closed on first I/O after writing - * the password. (This is how a MAD16 compatible card works). - */ - if ((tmp2 = bus_space_read_1(sc->sc_iot, sc->mad_ioh, MC1_PORT)) == tmp) { - DPRINTF(("MC1_PORT didn't close after read (0x%02x)\n", tmp2)); - return 0; - } + /* + * Now check that the gate is closed on first I/O after writing + * the password. (This is how a MAD16 compatible card works). + */ + if ((tmp2 = bus_space_read_1(sc->sc_iot, sc->mad_ioh, MC1_PORT)) == tmp) { + DPRINTF(("MC1_PORT didn't close after read (0x%02x)\n", tmp2)); + return 0; + } - mad_write(sc, MC1_PORT, tmp ^ 0x80); /* Toggle a bit */ + mad_write(sc, MC1_PORT, tmp ^ 0x80); /* Toggle a bit */ + + /* Compare the bit */ + if ((tmp2 = mad_read(sc, MC1_PORT)) != (tmp ^ 0x80)) { + mad_write(sc, MC1_PORT, tmp); /* Restore */ + DPRINTF(("Bit revert test failed (0x%02x, 0x%02x)\n", tmp, tmp2)); + return 0; + } - /* Compare the bit */ - if ((tmp2 = mad_read(sc, MC1_PORT)) != (tmp ^ 0x80)) { mad_write(sc, MC1_PORT, tmp); /* Restore */ - DPRINTF(("Bit revert test failed (0x%02x, 0x%02x)\n", tmp, tmp2)); - return 0; - } - - mad_write(sc, MC1_PORT, tmp); /* Restore */ - return 1; + return 1; } static void -madprobe(sc, iobase) - struct wss_softc *sc; - int iobase; +madprobe(struct wss_softc *sc, int iobase) { - static int valid_ports[M_WSS_NPORTS] = - { M_WSS_PORT0, M_WSS_PORT1, M_WSS_PORT2, M_WSS_PORT3 }; - int i; + static int valid_ports[M_WSS_NPORTS] = + { M_WSS_PORT0, M_WSS_PORT1, M_WSS_PORT2, M_WSS_PORT3 }; + int i; - /* Allocate bus space that the MAD chip wants */ - if (bus_space_map(sc->sc_iot, MAD_BASE, MAD_NPORT, 0, &sc->mad_ioh)) - goto bad0; - if (bus_space_map(sc->sc_iot, MAD_REG1, MAD_LEN1, 0, &sc->mad_ioh1)) - goto bad1; - if (bus_space_map(sc->sc_iot, MAD_REG2, MAD_LEN2, 0, &sc->mad_ioh2)) - goto bad2; - if (bus_space_map(sc->sc_iot, MAD_REG3, MAD_LEN3, 0, &sc->sc_opl_ioh)) - goto bad3; + /* Allocate bus space that the MAD chip wants */ + if (bus_space_map(sc->sc_iot, MAD_BASE, MAD_NPORT, 0, &sc->mad_ioh)) + goto bad0; + if (bus_space_map(sc->sc_iot, MAD_REG1, MAD_LEN1, 0, &sc->mad_ioh1)) + goto bad1; + if (bus_space_map(sc->sc_iot, MAD_REG2, MAD_LEN2, 0, &sc->mad_ioh2)) + goto bad2; + if (bus_space_map(sc->sc_iot, MAD_REG3, MAD_LEN3, 0, &sc->sc_opl_ioh)) + goto bad3; - DPRINTF(("mad: Detect using password = 0xE2\n")); - if (!detect_mad16(sc, MAD_82C928)) { - /* No luck. Try different model */ - DPRINTF(("mad: Detect using password = 0xE3\n")); - if (!detect_mad16(sc, MAD_82C929)) - goto bad; - sc->mad_chip_type = MAD_82C929; - DPRINTF(("mad: 82C929 detected\n")); - } else { - sc->mad_chip_type = MAD_82C928; - if ((mad_read(sc, MC3_PORT) & 0x03) == 0x03) { - DPRINTF(("mad: Mozart detected\n")); - sc->mad_chip_type = MAD_OTI601D; + DPRINTF(("mad: Detect using password = 0xE2\n")); + if (!detect_mad16(sc, MAD_82C928)) { + /* No luck. Try different model */ + DPRINTF(("mad: Detect using password = 0xE3\n")); + if (!detect_mad16(sc, MAD_82C929)) + goto bad; + sc->mad_chip_type = MAD_82C929; + DPRINTF(("mad: 82C929 detected\n")); } else { - DPRINTF(("mad: 82C928 detected?\n")); - sc->mad_chip_type = MAD_82C928; + sc->mad_chip_type = MAD_82C928; + if ((mad_read(sc, MC3_PORT) & 0x03) == 0x03) { + DPRINTF(("mad: Mozart detected\n")); + sc->mad_chip_type = MAD_OTI601D; + } else { + DPRINTF(("mad: 82C928 detected?\n")); + sc->mad_chip_type = MAD_82C928; + } } - } #ifdef AUDIO_DEBUG - if (wssdebug) - for (i = MC1_PORT; i <= MC7_PORT; i++) - printf("mad: port %03x = %02x\n", i, mad_read(sc, i)); + if (wssdebug) + for (i = MC1_PORT; i <= MC7_PORT; i++) + printf("mad: port %03x = %02x\n", i, mad_read(sc, i)); #endif - /* Set the WSS address. */ - for (i = 0; i < M_WSS_NPORTS; i++) - if (valid_ports[i] == iobase) - break; - if (i >= M_WSS_NPORTS) { /* Not a valid port */ - printf("mad: Bad WSS base address 0x%x\n", iobase); - goto bad; - } - sc->mad_ioindex = i; - /* enable WSS emulation at the I/O port, no joystick */ - mad_write(sc, MC1_PORT, M_WSS_PORT_SELECT(i) | MC1_JOYDISABLE); - mad_write(sc, MC2_PORT, 0x03); /* ? */ - mad_write(sc, MC3_PORT, 0xf0); /* Disable SB */ - return; + /* Set the WSS address. */ + for (i = 0; i < M_WSS_NPORTS; i++) + if (valid_ports[i] == iobase) + break; + if (i >= M_WSS_NPORTS) { /* Not a valid port */ + printf("mad: Bad WSS base address 0x%x\n", iobase); + goto bad; + } + sc->mad_ioindex = i; + /* enable WSS emulation at the I/O port, no joystick */ + mad_write(sc, MC1_PORT, M_WSS_PORT_SELECT(i) | MC1_JOYDISABLE); + mad_write(sc, MC2_PORT, 0x03); /* ? */ + mad_write(sc, MC3_PORT, 0xf0); /* Disable SB */ + return; bad: - bus_space_unmap(sc->sc_iot, sc->sc_opl_ioh, MAD_LEN3); + bus_space_unmap(sc->sc_iot, sc->sc_opl_ioh, MAD_LEN3); bad3: - bus_space_unmap(sc->sc_iot, sc->mad_ioh2, MAD_LEN2); + bus_space_unmap(sc->sc_iot, sc->mad_ioh2, MAD_LEN2); bad2: - bus_space_unmap(sc->sc_iot, sc->mad_ioh1, MAD_LEN1); + bus_space_unmap(sc->sc_iot, sc->mad_ioh1, MAD_LEN1); bad1: - bus_space_unmap(sc->sc_iot, sc->mad_ioh, MAD_NPORT); + bus_space_unmap(sc->sc_iot, sc->mad_ioh, MAD_NPORT); bad0: - sc->mad_chip_type = MAD_NONE; + sc->mad_chip_type = MAD_NONE; } static void -madunmap(sc) - struct wss_softc *sc; +madunmap(struct wss_softc *sc) { - if (sc->mad_chip_type == MAD_NONE) - return; - bus_space_unmap(sc->sc_iot, sc->mad_ioh, MAD_NPORT); - bus_space_unmap(sc->sc_iot, sc->mad_ioh1, MAD_LEN1); - bus_space_unmap(sc->sc_iot, sc->mad_ioh2, MAD_LEN2); - bus_space_unmap(sc->sc_iot, sc->sc_opl_ioh, MAD_LEN3); + + if (sc->mad_chip_type == MAD_NONE) + return; + bus_space_unmap(sc->sc_iot, sc->mad_ioh, MAD_NPORT); + bus_space_unmap(sc->sc_iot, sc->mad_ioh1, MAD_LEN1); + bus_space_unmap(sc->sc_iot, sc->mad_ioh2, MAD_LEN2); + bus_space_unmap(sc->sc_iot, sc->sc_opl_ioh, MAD_LEN3); } diff --git a/sys/dev/isa/wssvar.h b/sys/dev/isa/wssvar.h index cdc0edfdbdd3..da0d42bc2434 100644 --- a/sys/dev/isa/wssvar.h +++ b/sys/dev/isa/wssvar.h @@ -1,4 +1,4 @@ -/* $NetBSD: wssvar.h,v 1.7 1999/08/14 21:19:29 augustss Exp $ */ +/* $NetBSD: wssvar.h,v 1.8 2005/01/14 03:41:45 kent Exp $ */ /* * Copyright (c) 1994 John Brezak @@ -67,7 +67,7 @@ struct wss_softc { bus_space_handle_t sc_opl_ioh; /* OPL handle */ - int mic_mute, cd_mute, dac_mute; + int mic_mute, cd_mute, dac_mute; int mad_chip_type; /* chip type if MAD emulation of WSS */ int mad_ioindex; @@ -75,8 +75,8 @@ struct wss_softc { bus_space_handle_t mad_ioh1, mad_ioh2; }; -void wssattach __P((struct wss_softc *)); +void wssattach(struct wss_softc *); -u_int mad_read __P((struct wss_softc *, int)); -void mad_write __P((struct wss_softc *, int, int)); -void madattach __P((struct wss_softc *)); +u_int mad_read(struct wss_softc *, int); +void mad_write(struct wss_softc *, int, int); +void madattach(struct wss_softc *); diff --git a/sys/dev/isa/ym.c b/sys/dev/isa/ym.c index 211230e93795..f9ff1fbbf496 100644 --- a/sys/dev/isa/ym.c +++ b/sys/dev/isa/ym.c @@ -1,4 +1,4 @@ -/* $NetBSD: ym.c,v 1.23 2004/10/29 12:57:17 yamt Exp $ */ +/* $NetBSD: ym.c,v 1.24 2005/01/14 03:41:45 kent Exp $ */ /*- * Copyright (c) 1999-2002 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: ym.c,v 1.23 2004/10/29 12:57:17 yamt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ym.c,v 1.24 2005/01/14 03:41:45 kent Exp $"); #include "mpu_ym.h" #include "opt_ym.h" @@ -151,29 +151,29 @@ int ymdebug = 0; #endif #define DVNAME(softc) ((softc)->sc_ad1848.sc_ad1848.sc_dev.dv_xname) -int ym_getdev __P((void *, struct audio_device *)); -int ym_mixer_set_port __P((void *, mixer_ctrl_t *)); -int ym_mixer_get_port __P((void *, mixer_ctrl_t *)); -int ym_query_devinfo __P((void *, mixer_devinfo_t *)); -int ym_intr __P((void *)); +int ym_getdev(void *, struct audio_device *); +int ym_mixer_set_port(void *, mixer_ctrl_t *); +int ym_mixer_get_port(void *, mixer_ctrl_t *); +int ym_query_devinfo(void *, mixer_devinfo_t *); +int ym_intr(void *); #ifndef AUDIO_NO_POWER_CTL -static void ym_save_codec_regs __P((struct ym_softc *)); -static void ym_restore_codec_regs __P((struct ym_softc *)); -void ym_power_hook __P((int, void *)); -int ym_codec_power_ctl __P((void *, int)); -static void ym_chip_powerdown __P((struct ym_softc *)); -static void ym_chip_powerup __P((struct ym_softc *, int)); -void ym_powerdown_blocks __P((void *)); -void ym_power_ctl __P((struct ym_softc *, int, int)); +static void ym_save_codec_regs(struct ym_softc *); +static void ym_restore_codec_regs(struct ym_softc *); +void ym_power_hook(int, void *); +int ym_codec_power_ctl(void *, int); +static void ym_chip_powerdown(struct ym_softc *); +static void ym_chip_powerup(struct ym_softc *, int); +void ym_powerdown_blocks(void *); +void ym_power_ctl(struct ym_softc *, int, int); #endif -static void ym_init __P((struct ym_softc *)); -static void ym_mute __P((struct ym_softc *, int, int)); -static void ym_set_master_gain __P((struct ym_softc *, struct ad1848_volume*)); -static void ym_hvol_to_master_gain __P((struct ym_softc *)); -static void ym_set_mic_gain __P((struct ym_softc *, int)); -static void ym_set_3d __P((struct ym_softc *, mixer_ctrl_t *, - struct ad1848_volume *, int)); +static void ym_init(struct ym_softc *); +static void ym_mute(struct ym_softc *, int, int); +static void ym_set_master_gain(struct ym_softc *, struct ad1848_volume*); +static void ym_hvol_to_master_gain(struct ym_softc *); +static void ym_set_mic_gain(struct ym_softc *, int); +static void ym_set_3d(struct ym_softc *, mixer_ctrl_t *, + struct ad1848_volume *, int); const struct audio_hw_if ym_hw_if = { @@ -206,20 +206,20 @@ const struct audio_hw_if ym_hw_if = { NULL, }; -static __inline int ym_read __P((struct ym_softc *, int)); -static __inline void ym_write __P((struct ym_softc *, int, int)); +static __inline int ym_read(struct ym_softc *, int); +static __inline void ym_write(struct ym_softc *, int, int); void -ym_attach(sc) - struct ym_softc *sc; +ym_attach(struct ym_softc *sc) { - struct ad1848_softc *ac = &sc->sc_ad1848.sc_ad1848; static struct ad1848_volume vol_master = {YM_VOL_MASTER, YM_VOL_MASTER}; static struct ad1848_volume vol_dac = {YM_VOL_DAC, YM_VOL_DAC}; static struct ad1848_volume vol_opl3 = {YM_VOL_OPL3, YM_VOL_OPL3}; + struct ad1848_softc *ac; mixer_ctrl_t mctl; struct audio_attach_args arg; + ac = &sc->sc_ad1848.sc_ad1848; callout_init(&sc->sc_powerdown_ch); /* Mute the output to reduce noise during initialization. */ @@ -230,8 +230,7 @@ ym_attach(sc) ac->chip_name = YM_IS_SA3(sc) ? "OPL3-SA3" : "OPL3-SA2"; sc->sc_ad1848.sc_ih = isa_intr_establish(sc->sc_ic, sc->ym_irq, - IST_EDGE, IPL_AUDIO, - ym_intr, sc); + IST_EDGE, IPL_AUDIO, ym_intr, sc); #ifndef AUDIO_NO_POWER_CTL sc->sc_ad1848.powerctl = ym_codec_power_ctl; @@ -299,9 +298,9 @@ ym_attach(sc) sc->sc_pow_timeout = YM_POWER_OFF_SEC; sc->sc_on_blocks = sc->sc_turning_off = - YM_POWER_CODEC_P | YM_POWER_CODEC_R | - YM_POWER_OPL3 | YM_POWER_MPU401 | YM_POWER_3D | - YM_POWER_CODEC_DA | YM_POWER_CODEC_AD | YM_POWER_OPL3_DA; + YM_POWER_CODEC_P | YM_POWER_CODEC_R | + YM_POWER_OPL3 | YM_POWER_MPU401 | YM_POWER_3D | + YM_POWER_CODEC_DA | YM_POWER_CODEC_AD | YM_POWER_OPL3_DA; #if NJOY > 0 sc->sc_on_blocks |= YM_POWER_JOYSTICK; /* prevents chip powerdown */ #endif @@ -330,39 +329,35 @@ ym_attach(sc) } static __inline int -ym_read(sc, reg) - struct ym_softc *sc; - int reg; +ym_read(struct ym_softc *sc, int reg) { + bus_space_write_1(sc->sc_iot, sc->sc_controlioh, - SA3_CTL_INDEX, (reg & 0xff)); - return (bus_space_read_1(sc->sc_iot, sc->sc_controlioh, SA3_CTL_DATA)); + SA3_CTL_INDEX, (reg & 0xff)); + return bus_space_read_1(sc->sc_iot, sc->sc_controlioh, SA3_CTL_DATA); } static __inline void -ym_write(sc, reg, data) - struct ym_softc *sc; - int reg; - int data; +ym_write(struct ym_softc *sc, int reg, int data) { + bus_space_write_1(sc->sc_iot, sc->sc_controlioh, - SA3_CTL_INDEX, (reg & 0xff)); + SA3_CTL_INDEX, (reg & 0xff)); bus_space_write_1(sc->sc_iot, sc->sc_controlioh, - SA3_CTL_DATA, (data & 0xff)); + SA3_CTL_DATA, (data & 0xff)); } static void -ym_init(sc) - struct ym_softc *sc; +ym_init(struct ym_softc *sc) { - u_int8_t dpd, apd; + uint8_t dpd, apd; /* Mute SoundBlaster output if possible. */ if (sc->sc_sb_ioh) { bus_space_write_1(sc->sc_iot, sc->sc_sb_ioh, SBP_MIXER_ADDR, - SBP_MASTER_VOL); + SBP_MASTER_VOL); bus_space_write_1(sc->sc_iot, sc->sc_sb_ioh, SBP_MIXER_DATA, - 0x00); + 0x00); } if (!YM_IS_SA3(sc)) { @@ -376,20 +371,20 @@ ym_init(sc) /* Figure out which part can be power down. */ dpd = SA3_DPWRDWN_SB /* we never use SB */ #if NMPU_YM > 0 - | (sc->sc_mpu_ioh ? 0 : SA3_DPWRDWN_MPU) + | (sc->sc_mpu_ioh ? 0 : SA3_DPWRDWN_MPU) #else - | SA3_DPWRDWN_MPU + | SA3_DPWRDWN_MPU #endif #if NJOY == 0 - | SA3_DPWRDWN_JOY + | SA3_DPWRDWN_JOY #endif - | SA3_DPWRDWN_PNP /* ISA Plug and Play is done */ - /* - * The master clock is for external wavetable synthesizer - * OPL4-ML (YMF704) or OPL4-ML2 (YMF721), - * and is currently unused. - */ - | SA3_DPWRDWN_MCLKO; + | SA3_DPWRDWN_PNP /* ISA Plug and Play is done */ + /* + * The master clock is for external wavetable synthesizer + * OPL4-ML (YMF704) or OPL4-ML2 (YMF721), + * and is currently unused. + */ + | SA3_DPWRDWN_MCLKO; apd = SA3_APWRDWN_SBDAC; /* we never use SB */ @@ -409,13 +404,13 @@ ym_init(sc) int -ym_getdev(addr, retp) - void *addr; - struct audio_device *retp; +ym_getdev(void *addr, struct audio_device *retp) { - struct ym_softc *sc = addr; - struct ad1848_softc *ac = &sc->sc_ad1848.sc_ad1848; + struct ym_softc *sc; + struct ad1848_softc *ac; + sc = addr; + ac = &sc->sc_ad1848.sc_ad1848; strlcpy(retp->name, ac->chip_name, sizeof(retp->name)); snprintf(retp->version, sizeof(retp->version), "%d", sc->sc_version); strlcpy(retp->config, "ym", sizeof(retp->config)); @@ -445,12 +440,9 @@ static ad1848_devmap_t mappings[] = { static void -ym_mute(sc, left_reg, mute) - struct ym_softc *sc; - int left_reg; - int mute; +ym_mute(struct ym_softc *sc, int left_reg, int mute) { - u_int8_t reg; + uint8_t reg; reg = ym_read(sc, left_reg); if (mute) @@ -461,9 +453,7 @@ ym_mute(sc, left_reg, mute) static void -ym_set_master_gain(sc, vol) - struct ym_softc *sc; - struct ad1848_volume *vol; +ym_set_master_gain(struct ym_softc *sc, struct ad1848_volume *vol) { u_int atten; @@ -486,12 +476,12 @@ ym_set_master_gain(sc, vol) * [SA3] This function clears hardware volume interrupt. */ static void -ym_hvol_to_master_gain(sc) - struct ym_softc *sc; +ym_hvol_to_master_gain(struct ym_softc *sc) { u_int prevval, val; - int changed = 0; + int changed; + changed = 0; val = SA3_VOL_MV & ~ym_read(sc, SA3_VOL_L); prevval = (sc->master_gain.left * (SA3_VOL_MV + 1)) / (AUDIO_MAX_GAIN + 1); @@ -518,9 +508,7 @@ ym_hvol_to_master_gain(sc) } static void -ym_set_mic_gain(sc, vol) - struct ym_softc *sc; - int vol; +ym_set_mic_gain(struct ym_softc *sc, int vol) { u_int atten; @@ -534,13 +522,10 @@ ym_set_mic_gain(sc, vol) } static void -ym_set_3d(sc, cp, val, reg) - struct ym_softc *sc; - mixer_ctrl_t *cp; - struct ad1848_volume *val; - int reg; +ym_set_3d(struct ym_softc *sc, mixer_ctrl_t *cp, + struct ad1848_volume *val, int reg) { - u_int8_t l, r, e; + uint8_t l, r, e; ad1848_to_vol(cp, val); @@ -553,9 +538,9 @@ ym_set_3d(sc, cp, val, reg) } e = (l * (SA3_3D_BITS + 1) + (SA3_3D_BITS + 1) / 2) / - (AUDIO_MAX_GAIN + 1) << SA3_3D_LSHIFT | + (AUDIO_MAX_GAIN + 1) << SA3_3D_LSHIFT | (r * (SA3_3D_BITS + 1) + (SA3_3D_BITS + 1) / 2) / - (AUDIO_MAX_GAIN + 1) << SA3_3D_RSHIFT; + (AUDIO_MAX_GAIN + 1) << SA3_3D_RSHIFT; #ifndef AUDIO_NO_POWER_CTL /* turn wide stereo on if necessary */ @@ -574,16 +559,17 @@ ym_set_3d(sc, cp, val, reg) } int -ym_mixer_set_port(addr, cp) - void *addr; - mixer_ctrl_t *cp; +ym_mixer_set_port(void *addr, mixer_ctrl_t *cp) { - struct ad1848_softc *ac = addr; - struct ym_softc *sc = ac->parent; + struct ad1848_softc *ac; + struct ym_softc *sc; struct ad1848_volume vol; - int error = 0; - u_int8_t extsources; + int error; + uint8_t extsources; + ac = addr; + sc = ac->parent; + error = 0; DPRINTF(("%s: ym_mixer_set_port: dev 0x%x, type 0x%x, 0x%x (%d; %d, %d)\n", DVNAME(sc), cp->dev, cp->type, cp->un.ord, cp->un.value.num_channels, cp->un.value.level[0], @@ -615,13 +601,13 @@ ym_mixer_set_port(addr, cp) error = EINVAL; else ym_set_mic_gain(sc, - cp->un.value.level[AUDIO_MIXER_LEVEL_MONO]); + cp->un.value.level[AUDIO_MIXER_LEVEL_MONO]); goto out; case YM_MASTER_EQMODE: sc->sc_eqmode = cp->un.ord & SA3_SYS_CTL_YMODE; ym_write(sc, SA3_SYS_CTL, (ym_read(sc, SA3_SYS_CTL) & - ~SA3_SYS_CTL_YMODE) | sc->sc_eqmode); + ~SA3_SYS_CTL_YMODE) | sc->sc_eqmode); goto out; case YM_MASTER_TREBLE: @@ -649,7 +635,7 @@ ym_mixer_set_port(addr, cp) error = EINVAL; else sc->sc_pow_timeout = - cp->un.value.level[AUDIO_MIXER_LEVEL_MONO]; + cp->un.value.level[AUDIO_MIXER_LEVEL_MONO]; goto out; /* @@ -685,7 +671,7 @@ ym_mixer_set_port(addr, cp) case YM_MONITOR_MUTE: if ((ac->open_mode & (FREAD | FWRITE)) == FREAD) ym_power_ctl(sc, YM_POWER_CODEC_P | YM_POWER_CODEC_DA, - cp->un.ord == 0); + cp->un.ord == 0); break; /* fall to ad1848_mixer_set_port() */ #endif } @@ -714,18 +700,18 @@ out: ym_power_ctl(sc, YM_POWER_CODEC_CTL, 0); #endif - return (error); + return error; } int -ym_mixer_get_port(addr, cp) - void *addr; - mixer_ctrl_t *cp; +ym_mixer_get_port(void *addr, mixer_ctrl_t *cp) { - struct ad1848_softc *ac = addr; - struct ym_softc *sc = ac->parent; + struct ad1848_softc *ac; + struct ym_softc *sc; int error; + ac = addr; + sc = ac->parent; /* SA2 doesn't have equalizer */ if (!YM_IS_SA3(sc) && YM_MIXER_SA3_ONLY(cp->dev)) return ENXIO; @@ -792,7 +778,7 @@ ym_mixer_get_port(addr, cp) error = ad1848_mixer_get_port(ac, mappings, NUMMAP, cp); if (error != ENXIO) - return (error); + return error; error = 0; @@ -806,7 +792,7 @@ ym_mixer_get_port(addr, cp) break; } - return(error); + return error; } static char *mixer_classes[] = { @@ -818,17 +804,17 @@ static char *mixer_classes[] = { }; int -ym_query_devinfo(addr, dip) - void *addr; - mixer_devinfo_t *dip; +ym_query_devinfo(void *addr, mixer_devinfo_t *dip) { static char *mixer_port_names[] = { AudioNdac, AudioNmidi, AudioNcd, AudioNline, AudioNspeaker, AudioNmicrophone, AudioNmonitor }; - struct ad1848_softc *ac = addr; - struct ym_softc *sc = ac->parent; + struct ad1848_softc *ac; + struct ym_softc *sc; + ac = addr; + sc = ac->parent; /* SA2 doesn't have equalizer */ if (!YM_IS_SA3(sc) && YM_MIXER_SA3_ONLY(dip->index)) return ENXIO; @@ -1032,13 +1018,13 @@ ym_query_devinfo(addr, dip) } int -ym_intr(arg) - void *arg; +ym_intr(void *arg) { - struct ym_softc *sc = arg; + struct ym_softc *sc; u_int8_t ist; int processed; + sc = arg; /* OPL3 timer is currently unused. */ if (((ist = ym_read(sc, SA3_IRQA_STAT)) & ~(SA3_IRQ_STAT_SB|SA3_IRQ_STAT_OPL3)) == 0) { @@ -1081,27 +1067,25 @@ ym_intr(arg) #ifndef AUDIO_NO_POWER_CTL static void -ym_save_codec_regs(sc) - struct ym_softc *sc; +ym_save_codec_regs(struct ym_softc *sc) { - struct ad1848_softc *ac = &sc->sc_ad1848.sc_ad1848; + struct ad1848_softc *ac; int i; DPRINTF(("%s: ym_save_codec_regs\n", DVNAME(sc))); - + ac = &sc->sc_ad1848.sc_ad1848; for (i = 0; i <= 0x1f; i++) sc->sc_codec_scan[i] = ad_read(ac, i); } static void -ym_restore_codec_regs(sc) - struct ym_softc *sc; +ym_restore_codec_regs(struct ym_softc *sc) { - struct ad1848_softc *ac = &sc->sc_ad1848.sc_ad1848; + struct ad1848_softc *ac; int i, t; DPRINTF(("%s: ym_restore_codec_regs\n", DVNAME(sc))); - + ac = &sc->sc_ad1848.sc_ad1848; for (i = 0; i <= 0x1f; i++) { /* * Wait til the chip becomes ready. @@ -1127,14 +1111,13 @@ ym_restore_codec_regs(sc) * DMA state should also be restored. FIXME. */ void -ym_power_hook(why, v) - int why; - void *v; +ym_power_hook(int why, void *v) { - struct ym_softc *sc = v; + struct ym_softc *sc; int i, max; int s; + sc = v; DPRINTF(("%s: ym_power_hook: why = %d\n", DVNAME(sc), why)); s = splaudio(); @@ -1200,14 +1183,14 @@ ym_power_hook(why, v) } int -ym_codec_power_ctl(arg, flags) - void *arg; - int flags; +ym_codec_power_ctl(void *arg, int flags) { - struct ym_softc *sc = arg; - struct ad1848_softc *ac = &sc->sc_ad1848.sc_ad1848; + struct ym_softc *sc; + struct ad1848_softc *ac; int parts; + sc = arg; + ac = &sc->sc_ad1848.sc_ad1848; DPRINTF(("%s: ym_codec_power_ctl: flags = 0x%x\n", DVNAME(sc), flags)); if (flags != 0) { @@ -1235,8 +1218,7 @@ ym_codec_power_ctl(arg, flags) * This must be called at splaudio(). */ static void -ym_chip_powerdown(sc) - struct ym_softc *sc; +ym_chip_powerdown(struct ym_softc *sc) { int i, max; @@ -1262,12 +1244,10 @@ ym_chip_powerdown(sc) * in power-down mode (or should be blocked by splaudio()). */ static void -ym_chip_powerup(sc, nosleep) - struct ym_softc *sc; - int nosleep; +ym_chip_powerup(struct ym_softc *sc, int nosleep) { int wchan; - u_int8_t pw; + uint8_t pw; DPRINTF(("%s: ym_chip_powerup\n", DVNAME(sc))); @@ -1301,15 +1281,16 @@ ym_chip_powerup(sc, nosleep) /* callout handler for power-down */ void -ym_powerdown_blocks(arg) - void *arg; +ym_powerdown_blocks(void *arg) { - struct ym_softc *sc = arg; - u_int16_t parts; - u_int16_t on_blocks = sc->sc_on_blocks; - u_int8_t sv; + struct ym_softc *sc; + uint16_t parts; + uint16_t on_blocks; + uint8_t sv; int s; + sc = arg; + on_blocks = sc->sc_on_blocks; DPRINTF(("%s: ym_powerdown_blocks: turning_off 0x%x\n", DVNAME(sc), sc->sc_turning_off)); @@ -1366,9 +1347,7 @@ ym_powerdown_blocks(arg) * Power control entry point. */ void -ym_power_ctl(sc, parts, onoff) - struct ym_softc *sc; - int parts, onoff; +ym_power_ctl(struct ym_softc *sc, int parts, int onoff) { int s; int need_restore_codec; diff --git a/sys/dev/isa/ymvar.h b/sys/dev/isa/ymvar.h index e0b2e9a7a0ea..8914e565b28a 100644 --- a/sys/dev/isa/ymvar.h +++ b/sys/dev/isa/ymvar.h @@ -1,4 +1,4 @@ -/* $NetBSD: ymvar.h,v 1.8 2002/03/10 13:57:11 itohy Exp $ */ +/* $NetBSD: ymvar.h,v 1.9 2005/01/14 03:41:45 kent Exp $ */ /*- * Copyright (c) 1999-2000, 2002 The NetBSD Foundation, Inc. @@ -165,15 +165,15 @@ struct ym_softc { int master_mute, mic_mute; struct ad1848_volume master_gain; - u_int8_t mic_gain; + uint8_t mic_gain; - u_int8_t sc_external_sources; /* non-zero value prevents power down */ + uint8_t sc_external_sources; /* non-zero value prevents power down */ - u_int8_t sc_version; /* hardware version */ + uint8_t sc_version; /* hardware version */ #define YM_IS_SA3(sc) ((sc)->sc_version > SA3_MISC_VER_711) /* 3D encehamcement */ - u_int8_t sc_eqmode; + uint8_t sc_eqmode; struct ad1848_volume sc_treble, sc_bass, sc_wide; /* * The equalizer of OPL3-SA3 is ``flat'' if it is turned off. @@ -204,13 +204,13 @@ struct ym_softc { } sc_pow_mode; int sc_pow_timeout; - u_int8_t sc_codec_scan[0x20]; + uint8_t sc_codec_scan[0x20]; #define YM_SAVE_REG_MAX_SA3 SA3_HVOL_INTR_CNF #define YM_SAVE_REG_MAX_SA2 SA3_DMA_CNT_REC_HIGH - u_int8_t sc_sa3_scan[YM_SAVE_REG_MAX_SA3 + 1]; + uint8_t sc_sa3_scan[YM_SAVE_REG_MAX_SA3 + 1]; - u_int16_t sc_on_blocks; - u_int16_t sc_turning_off; + uint16_t sc_on_blocks; + uint16_t sc_turning_off; int sc_in_power_ctl; #define YM_POWER_CTL_INUSE 1 @@ -252,10 +252,10 @@ struct ym_softc { #define YM_MIXER_TO_XS(m) (1 << ((m) - YM_CD_MUTE)) #ifdef _KERNEL -void ym_power_ctl __P((struct ym_softc *, int, int)); +void ym_power_ctl(struct ym_softc *, int, int); #endif #endif /* not AUDIO_NO_POWER_CTL */ #ifdef _KERNEL -void ym_attach __P((struct ym_softc *)); +void ym_attach(struct ym_softc *); #endif