Diff for /src/sys/dev/sound/usb/uaudio.c between versions 1.4 and 1.5

version 1.4, 2003/08/07 21:17:13 version 1.5, 2004/02/12 00:00:19
Line 60 Line 60
 #include <sys/proc.h>  #include <sys/proc.h>
 #if defined(__NetBSD__) || defined(__OpenBSD__)  #if defined(__NetBSD__) || defined(__OpenBSD__)
 #include <sys/device.h>  #include <sys/device.h>
#elif defined(__FreeBSD__)#elif defined(__DragonFly__)
 #include <sys/module.h>  #include <sys/module.h>
 #include <sys/bus.h>  #include <sys/bus.h>
 #include <sys/conf.h>  #include <sys/conf.h>
Line 73 Line 73
 #include <dev/audio_if.h>  #include <dev/audio_if.h>
 #include <dev/mulaw.h>  #include <dev/mulaw.h>
 #include <dev/auconv.h>  #include <dev/auconv.h>
#elif defined(__FreeBSD__)#elif defined(__DragonFly__)
 #include <dev/sound/pcm/sound.h>        /* XXXXX */  #include <dev/sound/pcm/sound.h>        /* XXXXX */
 #include <dev/sound/chip.h>  #include <dev/sound/chip.h>
 #endif  #endif
Line 117  struct mixerctl { Line 117  struct mixerctl {
         int             minval, maxval;          int             minval, maxval;
         u_int           delta;          u_int           delta;
         u_int           mul;          u_int           mul;
#if defined(__FreeBSD__) /* XXXXX */#if defined(__DragonFly__) /* XXXXX */
         unsigned        ctl;          unsigned        ctl;
 #else  #else
         u_int8_t        class;          u_int8_t        class;
Line 171  struct chan { Line 171  struct chan {
         } chanbufs[UAUDIO_NCHANBUFS];          } chanbufs[UAUDIO_NCHANBUFS];
   
         struct uaudio_softc *sc; /* our softc */          struct uaudio_softc *sc; /* our softc */
#if defined(__FreeBSD__)#if defined(__DragonFly__)
         u_int32_t format;          u_int32_t format;
         int     precision;          int     precision;
         int     channels;          int     channels;
Line 358  Static struct audio_device uaudio_device Line 358  Static struct audio_device uaudio_device
         "uaudio"          "uaudio"
 };  };
   
#elif defined(__FreeBSD__)#elif defined(__DragonFly__)
 Static int      audio_attach_mi(device_t);  Static int      audio_attach_mi(device_t);
 Static void     uaudio_init_params(struct uaudio_softc * sc, struct chan *ch);  Static void     uaudio_init_params(struct uaudio_softc * sc, struct chan *ch);
   
Line 382  Static void uaudio_init_params(struct ua Line 382  Static void uaudio_init_params(struct ua
   
 USB_DECLARE_DRIVER(uaudio);  USB_DECLARE_DRIVER(uaudio);
   
#elif defined(__FreeBSD__)#elif defined(__DragonFly__)
   
 USB_DECLARE_DRIVER_INIT(uaudio,  USB_DECLARE_DRIVER_INIT(uaudio,
                 DEVMETHOD(device_suspend, bus_generic_suspend),                  DEVMETHOD(device_suspend, bus_generic_suspend),
Line 424  USB_ATTACH(uaudio) Line 424  USB_ATTACH(uaudio)
         usbd_devinfo(uaa->device, 0, devinfo);          usbd_devinfo(uaa->device, 0, devinfo);
         USB_ATTACH_SETUP;          USB_ATTACH_SETUP;
   
#if !defined(__FreeBSD__)#if !defined(__DragonFly__)
         printf(": %s\n", devinfo);          printf(": %s\n", devinfo);
 #endif  #endif
   
Line 486  USB_ATTACH(uaudio) Line 486  USB_ATTACH(uaudio)
                 printf("%s: %d mixer controls\n", USBDEVNAME(sc->sc_dev),                  printf("%s: %d mixer controls\n", USBDEVNAME(sc->sc_dev),
                     sc->sc_nctls);                      sc->sc_nctls);
   
#if !defined(__FreeBSD__)#if !defined(__DragonFly__)
         usbd_add_drv_event(USB_EVENT_DRIVER_ATTACH, sc->sc_udev,          usbd_add_drv_event(USB_EVENT_DRIVER_ATTACH, sc->sc_udev,
                            USBDEV(sc->sc_dev));                             USBDEV(sc->sc_dev));
 #endif  #endif
Line 496  USB_ATTACH(uaudio) Line 496  USB_ATTACH(uaudio)
         audio_attach_mi(&uaudio_hw_if, sc, &sc->sc_dev);          audio_attach_mi(&uaudio_hw_if, sc, &sc->sc_dev);
 #elif defined(__NetBSD__)  #elif defined(__NetBSD__)
         sc->sc_audiodev = audio_attach_mi(&uaudio_hw_if, sc, &sc->sc_dev);          sc->sc_audiodev = audio_attach_mi(&uaudio_hw_if, sc, &sc->sc_dev);
#elif defined(__FreeBSD__)#elif defined(__DragonFly__)
         sc->sc_dying = 0;          sc->sc_dying = 0;
         if (audio_attach_mi(sc->sc_dev)) {          if (audio_attach_mi(sc->sc_dev)) {
                 printf("audio_attach_mi failed\n");                  printf("audio_attach_mi failed\n");
Line 547  uaudio_detach(device_ptr_t self, int fla Line 547  uaudio_detach(device_ptr_t self, int fla
   
         return (rv);          return (rv);
 }  }
#elif defined(__FreeBSD__)#elif defined(__DragonFly__)
   
 USB_DETACH(uaudio)  USB_DETACH(uaudio)
 {  {
Line 698  uaudio_mixer_add_ctl(struct uaudio_softc Line 698  uaudio_mixer_add_ctl(struct uaudio_softc
                 DPRINTF(("uaudio_mixer_add_ctl: wValue=%04x",mc->wValue[0]));                  DPRINTF(("uaudio_mixer_add_ctl: wValue=%04x",mc->wValue[0]));
                 for (i = 1; i < mc->nchan; i++)                  for (i = 1; i < mc->nchan; i++)
                         DPRINTF((",%04x", mc->wValue[i]));                          DPRINTF((",%04x", mc->wValue[i]));
#if defined(__FreeBSD__)#if defined(__DragonFly__)
                 DPRINTF((" wIndex=%04x type=%d "                  DPRINTF((" wIndex=%04x type=%d "
                          "min=%d max=%d\n",                           "min=%d max=%d\n",
                          mc->wIndex, mc->type,                            mc->wIndex, mc->type, 
Line 844  uaudio_add_mixer(struct uaudio_softc *sc Line 844  uaudio_add_mixer(struct uaudio_softc *sc
   
         bm = d1->bmControls;          bm = d1->bmControls;
         mix.wIndex = MAKE(d->bUnitId, sc->sc_ac_iface);          mix.wIndex = MAKE(d->bUnitId, sc->sc_ac_iface);
#if !defined(__FreeBSD__)#if !defined(__DragonFly__)
         mix.class = -1;          mix.class = -1;
 #endif  #endif
         mix.type = MIX_SIGNED_16;          mix.type = MIX_SIGNED_16;
#if !defined(__FreeBSD__)     /* XXXXX */#if !defined(__DragonFly__)     /* XXXXX */
         mix.ctlunit = AudioNvolume;          mix.ctlunit = AudioNvolume;
 #endif  #endif
   
Line 875  uaudio_add_mixer(struct uaudio_softc *sc Line 875  uaudio_add_mixer(struct uaudio_softc *sc
                                                 mix.wValue[k++] =                                                   mix.wValue[k++] = 
                                                         MAKE(p+c+1, o+1);                                                          MAKE(p+c+1, o+1);
                                 }                                  }
#if !defined(__FreeBSD__)#if !defined(__DragonFly__)
                         sprintf(mix.ctlname, "mix%d-%s", d->bUnitId,                          sprintf(mix.ctlname, "mix%d-%s", d->bUnitId,
                                 uaudio_id_name(sc, dps, d->baSourceId[i]));                                  uaudio_id_name(sc, dps, d->baSourceId[i]));
 #endif  #endif
Line 912  uaudio_add_feature(struct uaudio_softc * Line 912  uaudio_add_feature(struct uaudio_softc *
         uByte *ctls = d->bmaControls;          uByte *ctls = d->bmaControls;
         int ctlsize = d->bControlSize;          int ctlsize = d->bControlSize;
         int nchan = (d->bLength - 7) / ctlsize;          int nchan = (d->bLength - 7) / ctlsize;
#if !defined(__FreeBSD__)#if !defined(__DragonFly__)
         int srcId = d->bSourceId;          int srcId = d->bSourceId;
 #endif  #endif
         u_int fumask, mmask, cmask;          u_int fumask, mmask, cmask;
Line 930  uaudio_add_feature(struct uaudio_softc * Line 930  uaudio_add_feature(struct uaudio_softc *
                 cmask |= GET(chan);                  cmask |= GET(chan);
         }          }
   
#if !defined(__FreeBSD__)#if !defined(__DragonFly__)
         DPRINTFN(1,("uaudio_add_feature: bUnitId=%d bSourceId=%d, "          DPRINTFN(1,("uaudio_add_feature: bUnitId=%d bSourceId=%d, "
                     "%d channels, mmask=0x%04x, cmask=0x%04x\n",                       "%d channels, mmask=0x%04x, cmask=0x%04x\n", 
                     d->bUnitId, srcId, nchan, mmask, cmask));                      d->bUnitId, srcId, nchan, mmask, cmask));
Line 960  uaudio_add_feature(struct uaudio_softc * Line 960  uaudio_add_feature(struct uaudio_softc *
                 }                  }
 #undef GET  #undef GET
   
#if !defined(__FreeBSD__)#if !defined(__DragonFly__)
                 mix.class = -1; /* XXX */                  mix.class = -1; /* XXX */
 #endif  #endif
                 switch (ctl) {                  switch (ctl) {
                 case MUTE_CONTROL:                  case MUTE_CONTROL:
                         mix.type = MIX_ON_OFF;                          mix.type = MIX_ON_OFF;
#if defined(__FreeBSD__)#if defined(__DragonFly__)
                         mix.ctl = SOUND_MIXER_NRDEVICES;                          mix.ctl = SOUND_MIXER_NRDEVICES;
 #else  #else
                         sprintf(mix.ctlname, "fea%d-%s-%s", unit,                          sprintf(mix.ctlname, "fea%d-%s-%s", unit,
Line 977  uaudio_add_feature(struct uaudio_softc * Line 977  uaudio_add_feature(struct uaudio_softc *
                         break;                          break;
                 case VOLUME_CONTROL:                  case VOLUME_CONTROL:
                         mix.type = MIX_SIGNED_16;                          mix.type = MIX_SIGNED_16;
#if defined(__FreeBSD__)#if defined(__DragonFly__)
                         /* mix.ctl = SOUND_MIXER_VOLUME; */                          /* mix.ctl = SOUND_MIXER_VOLUME; */
                         mix.ctl = SOUND_MIXER_PCM;                          mix.ctl = SOUND_MIXER_PCM;
 #else  #else
Line 989  uaudio_add_feature(struct uaudio_softc * Line 989  uaudio_add_feature(struct uaudio_softc *
                         break;                          break;
                 case BASS_CONTROL:                  case BASS_CONTROL:
                         mix.type = MIX_SIGNED_8;                          mix.type = MIX_SIGNED_8;
#if defined(__FreeBSD__)#if defined(__DragonFly__)
                         mix.ctl = SOUND_MIXER_BASS;                          mix.ctl = SOUND_MIXER_BASS;
 #else  #else
                         sprintf(mix.ctlname, "fea%d-%s-%s", unit,                          sprintf(mix.ctlname, "fea%d-%s-%s", unit,
Line 1000  uaudio_add_feature(struct uaudio_softc * Line 1000  uaudio_add_feature(struct uaudio_softc *
                         break;                          break;
                 case MID_CONTROL:                  case MID_CONTROL:
                         mix.type = MIX_SIGNED_8;                          mix.type = MIX_SIGNED_8;
#if defined(__FreeBSD__)#if defined(__DragonFly__)
                         mix.ctl = SOUND_MIXER_NRDEVICES;        /* XXXXX */                          mix.ctl = SOUND_MIXER_NRDEVICES;        /* XXXXX */
 #else  #else
                         sprintf(mix.ctlname, "fea%d-%s-%s", unit,                          sprintf(mix.ctlname, "fea%d-%s-%s", unit,
Line 1011  uaudio_add_feature(struct uaudio_softc * Line 1011  uaudio_add_feature(struct uaudio_softc *
                         break;                          break;
                 case TREBLE_CONTROL:                  case TREBLE_CONTROL:
                         mix.type = MIX_SIGNED_8;                          mix.type = MIX_SIGNED_8;
#if defined(__FreeBSD__)#if defined(__DragonFly__)
                         mix.ctl = SOUND_MIXER_TREBLE;                          mix.ctl = SOUND_MIXER_TREBLE;
 #else  #else
                         sprintf(mix.ctlname, "fea%d-%s-%s", unit,                          sprintf(mix.ctlname, "fea%d-%s-%s", unit,
Line 1025  uaudio_add_feature(struct uaudio_softc * Line 1025  uaudio_add_feature(struct uaudio_softc *
                         break;                          break;
                 case AGC_CONTROL:                  case AGC_CONTROL:
                         mix.type = MIX_ON_OFF;                          mix.type = MIX_ON_OFF;
#if defined(__FreeBSD__)#if defined(__DragonFly__)
                         mix.ctl = SOUND_MIXER_NRDEVICES;        /* XXXXX */                          mix.ctl = SOUND_MIXER_NRDEVICES;        /* XXXXX */
 #else  #else
                         sprintf(mix.ctlname, "fea%d-%s-%s", unit,                          sprintf(mix.ctlname, "fea%d-%s-%s", unit,
Line 1036  uaudio_add_feature(struct uaudio_softc * Line 1036  uaudio_add_feature(struct uaudio_softc *
                         break;                          break;
                 case DELAY_CONTROL:                  case DELAY_CONTROL:
                         mix.type = MIX_UNSIGNED_16;                          mix.type = MIX_UNSIGNED_16;
#if defined(__FreeBSD__)#if defined(__DragonFly__)
                         mix.ctl = SOUND_MIXER_NRDEVICES;        /* XXXXX */                          mix.ctl = SOUND_MIXER_NRDEVICES;        /* XXXXX */
 #else  #else
                         sprintf(mix.ctlname, "fea%d-%s-%s", unit,                          sprintf(mix.ctlname, "fea%d-%s-%s", unit,
Line 1047  uaudio_add_feature(struct uaudio_softc * Line 1047  uaudio_add_feature(struct uaudio_softc *
                         break;                          break;
                 case BASS_BOOST_CONTROL:                  case BASS_BOOST_CONTROL:
                         mix.type = MIX_ON_OFF;                          mix.type = MIX_ON_OFF;
#if defined(__FreeBSD__)#if defined(__DragonFly__)
                         mix.ctl = SOUND_MIXER_NRDEVICES;        /* XXXXX */                          mix.ctl = SOUND_MIXER_NRDEVICES;        /* XXXXX */
 #else  #else
                         sprintf(mix.ctlname, "fea%d-%s-%s", unit,                          sprintf(mix.ctlname, "fea%d-%s-%s", unit,
Line 1058  uaudio_add_feature(struct uaudio_softc * Line 1058  uaudio_add_feature(struct uaudio_softc *
                         break;                          break;
                 case LOUDNESS_CONTROL:                  case LOUDNESS_CONTROL:
                         mix.type = MIX_ON_OFF;                          mix.type = MIX_ON_OFF;
#if defined(__FreeBSD__)#if defined(__DragonFly__)
                         mix.ctl = SOUND_MIXER_LOUD;     /* Is this correct ? */                          mix.ctl = SOUND_MIXER_LOUD;     /* Is this correct ? */
 #else  #else
                         sprintf(mix.ctlname, "fea%d-%s-%s", unit,                          sprintf(mix.ctlname, "fea%d-%s-%s", unit,
Line 1097  uaudio_add_processing_updown(struct uaud Line 1097  uaudio_add_processing_updown(struct uaud
         mix.wIndex = MAKE(d->bUnitId, sc->sc_ac_iface);          mix.wIndex = MAKE(d->bUnitId, sc->sc_ac_iface);
         mix.nchan = 1;          mix.nchan = 1;
         mix.wValue[0] = MAKE(UD_MODE_SELECT_CONTROL, 0);          mix.wValue[0] = MAKE(UD_MODE_SELECT_CONTROL, 0);
#if !defined(__FreeBSD__)#if !defined(__DragonFly__)
         mix.class = -1;          mix.class = -1;
 #endif  #endif
         mix.type = MIX_ON_OFF;  /* XXX */          mix.type = MIX_ON_OFF;  /* XXX */
#if !defined(__FreeBSD__)#if !defined(__DragonFly__)
         mix.ctlunit = "";          mix.ctlunit = "";
         sprintf(mix.ctlname, "pro%d-mode", d->bUnitId);          sprintf(mix.ctlname, "pro%d-mode", d->bUnitId);
 #endif  #endif
Line 1132  uaudio_add_processing(struct uaudio_soft Line 1132  uaudio_add_processing(struct uaudio_soft
                 mix.wIndex = MAKE(d->bUnitId, sc->sc_ac_iface);                  mix.wIndex = MAKE(d->bUnitId, sc->sc_ac_iface);
                 mix.nchan = 1;                  mix.nchan = 1;
                 mix.wValue[0] = MAKE(XX_ENABLE_CONTROL, 0);                  mix.wValue[0] = MAKE(XX_ENABLE_CONTROL, 0);
#if !defined(__FreeBSD__)#if !defined(__DragonFly__)
                 mix.class = -1;                  mix.class = -1;
 #endif  #endif
                 mix.type = MIX_ON_OFF;                  mix.type = MIX_ON_OFF;
#if !defined(__FreeBSD__)#if !defined(__DragonFly__)
                 mix.ctlunit = "";                  mix.ctlunit = "";
                 sprintf(mix.ctlname, "pro%d.%d-enable", d->bUnitId, ptype);                  sprintf(mix.ctlname, "pro%d.%d-enable", d->bUnitId, ptype);
 #endif  #endif
Line 1181  uaudio_add_extension(struct uaudio_softc Line 1181  uaudio_add_extension(struct uaudio_softc
                 mix.wIndex = MAKE(d->bUnitId, sc->sc_ac_iface);                  mix.wIndex = MAKE(d->bUnitId, sc->sc_ac_iface);
                 mix.nchan = 1;                  mix.nchan = 1;
                 mix.wValue[0] = MAKE(UA_EXT_ENABLE, 0);                  mix.wValue[0] = MAKE(UA_EXT_ENABLE, 0);
#if !defined(__FreeBSD__)#if !defined(__DragonFly__)
                 mix.class = -1;                  mix.class = -1;
 #endif  #endif
                 mix.type = MIX_ON_OFF;                  mix.type = MIX_ON_OFF;
#if !defined(__FreeBSD__)#if !defined(__DragonFly__)
                 mix.ctlunit = "";                  mix.ctlunit = "";
                 sprintf(mix.ctlname, "ext%d-enable", d->bUnitId);                  sprintf(mix.ctlname, "ext%d-enable", d->bUnitId);
 #endif  #endif
Line 2201  uaudio_chan_pintr(usbd_xfer_handle xfer, Line 2201  uaudio_chan_pintr(usbd_xfer_handle xfer,
 #endif  #endif
   
         ch->transferred += cb->size;          ch->transferred += cb->size;
#if defined(__FreeBSD__)#if defined(__DragonFly__)
         /* s = spltty(); */          /* s = spltty(); */
         s = splhigh();          s = splhigh();
         chn_intr(ch->pcm_ch);          chn_intr(ch->pcm_ch);
Line 2320  uaudio_chan_rintr(usbd_xfer_handle xfer, Line 2320  uaudio_chan_rintr(usbd_xfer_handle xfer,
   
         /* Call back to upper layer */          /* Call back to upper layer */
         ch->transferred += cb->size;          ch->transferred += cb->size;
#if defined(__FreeBSD__)#if defined(__DragonFly__)
         s = spltty();          s = spltty();
         chn_intr(ch->pcm_ch);          chn_intr(ch->pcm_ch);
         splx(s);          splx(s);
Line 2547  uaudio_set_speed(struct uaudio_softc *sc Line 2547  uaudio_set_speed(struct uaudio_softc *sc
 }  }
   
   
#if defined(__FreeBSD__)#if defined(__DragonFly__)
 /************************************************************/  /************************************************************/
 void  void
 uaudio_init_params(struct uaudio_softc *sc, struct chan *ch)  uaudio_init_params(struct uaudio_softc *sc, struct chan *ch)

Removed from v.1.4  
changed lines
  Added in v.1.5