FreeBSD kernel sound device code
|
#include <dev/sound/pcm/sound.h>
#include <dev/pci/pcireg.h>
#include <dev/pci/pcivar.h>
#include <dev/sound/isa/sb.h>
#include <dev/sound/chip.h>
#include "mixer_if.h"
Go to the source code of this file.
Data Structures | |
struct | ess_chinfo |
struct | ess_info |
Macros | |
#define | SOLO_DEFAULT_BUFSZ 16384 |
#define | ABS(x) (((x) < 0)? -(x) : (x)) |
#define | ESS18XX_DUPLEX 1 |
#define | ESS18XX_NEWSPEED |
#define | ess_lock(_ess) snd_mtxlock((_ess)->lock) |
#define | ess_unlock(_ess) snd_mtxunlock((_ess)->lock) |
#define | ess_lock_assert(_ess) snd_mtxassert((_ess)->lock) |
#define | ESS_PCI_LEGACYCONTROL 0x40 |
#define | ESS_PCI_CONFIG 0x50 |
#define | ESS_PCI_DDMACONTROL 0x60 |
Functions | |
SND_DECLARE_FILE ("$FreeBSD$") | |
static int | ess_rd (struct ess_info *sc, int reg) |
static void | ess_wr (struct ess_info *sc, int reg, u_int8_t val) |
static int | ess_dspready (struct ess_info *sc) |
static int | ess_cmd (struct ess_info *sc, u_char val) |
static int | ess_cmd1 (struct ess_info *sc, u_char cmd, int val) |
static int | ess_get_byte (struct ess_info *sc) |
static void | ess_setmixer (struct ess_info *sc, u_int port, u_int value) |
static int | ess_getmixer (struct ess_info *sc, u_int port) |
static int | ess_reset_dsp (struct ess_info *sc) |
static int | ess_write (struct ess_info *sc, u_char reg, int val) |
static int | ess_read (struct ess_info *sc, u_char reg) |
static void | ess_intr (void *arg) |
static int | ess_setupch (struct ess_info *sc, int ch, int dir, int spd, u_int32_t fmt, int len) |
static int | ess_start (struct ess_chinfo *ch) |
static int | ess_stop (struct ess_chinfo *ch) |
static int | ess_dmasetup (struct ess_info *sc, int ch, u_int32_t base, u_int16_t cnt, int dir) |
static int | ess_dmapos (struct ess_info *sc, int ch) |
static int | ess_dmatrigger (struct ess_info *sc, int ch, int go) |
static int | port_rd (struct resource *port, int regno, int size) |
static void | port_wr (struct resource *port, int regno, u_int32_t data, int size) |
static int | ess_dspwr (struct ess_info *sc, u_char val) |
static u_int8_t | ess_calcspeed8 (int *spd) |
static u_int8_t | ess_calcspeed9 (int *spd) |
static u_int8_t | ess_calcfilter (int spd) |
static void * | esschan_init (kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel *c, int dir) |
static int | esschan_setformat (kobj_t obj, void *data, u_int32_t format) |
static u_int32_t | esschan_setspeed (kobj_t obj, void *data, u_int32_t speed) |
static u_int32_t | esschan_setblocksize (kobj_t obj, void *data, u_int32_t blocksize) |
static int | esschan_trigger (kobj_t obj, void *data, int go) |
static u_int32_t | esschan_getptr (kobj_t obj, void *data) |
static struct pcmchan_caps * | esschan_getcaps (kobj_t obj, void *data) |
CHANNEL_DECLARE (esschan) | |
static int | essmix_init (struct snd_mixer *m) |
static int | essmix_set (struct snd_mixer *m, unsigned dev, unsigned left, unsigned right) |
static u_int32_t | essmix_setrecsrc (struct snd_mixer *m, u_int32_t src) |
MIXER_DECLARE (solomixer) | |
static void | ess_release_resources (struct ess_info *sc, device_t dev) |
static int | ess_alloc_resources (struct ess_info *sc, device_t dev) |
static int | ess_probe (device_t dev) |
static int | ess_suspend (device_t dev) |
static int | ess_resume (device_t dev) |
static int | ess_attach (device_t dev) |
static int | ess_detach (device_t dev) |
DRIVER_MODULE (snd_solo, pci, ess_driver, pcm_devclass, 0, 0) | |
MODULE_DEPEND (snd_solo, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER) | |
MODULE_VERSION (snd_solo, 1) | |
Variables | |
static u_int32_t | ess_playfmt [] |
static struct pcmchan_caps | ess_playcaps = {6000, 48000, ess_playfmt, 0} |
static u_int32_t | ess_recfmt [] |
static struct pcmchan_caps | ess_reccaps = {6000, 48000, ess_recfmt, 0} |
static kobj_method_t | esschan_methods [] |
static kobj_method_t | solomixer_methods [] |
static device_method_t | ess_methods [] |
static driver_t | ess_driver |
#define ess_lock | ( | _ess | ) | snd_mtxlock((_ess)->lock) |
#define ess_lock_assert | ( | _ess | ) | snd_mtxassert((_ess)->lock) |
#define ess_unlock | ( | _ess | ) | snd_mtxunlock((_ess)->lock) |
CHANNEL_DECLARE | ( | esschan | ) |
DRIVER_MODULE | ( | snd_solo | , |
pci | , | ||
ess_driver | , | ||
pcm_devclass | , | ||
0 | , | ||
0 | |||
) |
|
static |
Definition at line 869 of file solo.c.
References dev, ess_info::gp, ess_info::io, ess_info::irq, ess_info::lock, ess_info::mpu, PCIR_BAR, rid, ess_info::sb, snd_mtxcreate(), and ess_info::vc.
Referenced by ess_attach().
|
static |
Definition at line 963 of file solo.c.
References ess_info::bufsz, dev, ess_info::duplex, ess_alloc_resources(), ess_intr(), ESS_PCI_CONFIG, ESS_PCI_DDMACONTROL, ESS_PCI_LEGACYCONTROL, ess_release_resources(), ess_reset_dsp(), ess_setmixer(), ess_info::ih, ess_info::io, ess_info::irq, mixer_init(), ess_info::newspeed, ess_info::parent_dmat, pcm_addchan(), pcm_getbuffersize(), pcm_getflags(), PCM_KLDSTRING, pcm_register(), pcm_setflags(), pcm_setstatus(), PCMDIR_PLAY, PCMDIR_REC, port_wr(), ess_info::sb, SD_F_SIMPLEX, snd_setup_intr(), SND_STATUSLEN, SOLO_DEFAULT_BUFSZ, status, and ess_info::vc.
|
static |
Definition at line 407 of file solo.c.
References spd.
Referenced by ess_setupch().
|
static |
Definition at line 366 of file solo.c.
Referenced by ess_setupch(), and esschan_setspeed().
|
static |
Definition at line 385 of file solo.c.
References ABS, spd, and speed.
Referenced by ess_setupch(), and esschan_setspeed().
|
static |
Definition at line 216 of file solo.c.
References DEB, ess_dspwr(), and val.
Referenced by ess_read(), ess_reset_dsp(), and ess_start().
|
static |
Definition at line 223 of file solo.c.
References DEB, ess_dspwr(), and val.
Referenced by ess_write().
|
static |
Definition at line 1045 of file solo.c.
References dev, ess_release_resources(), pcm_getdevinfo(), pcm_unregister(), and r.
|
static |
Definition at line 780 of file solo.c.
References ess_info::dmasz, ess_dmatrigger(), ess_info::io, port_rd(), and ess_info::vc.
Referenced by esschan_getptr().
|
static |
Definition at line 759 of file solo.c.
References base, dir, ess_info::dmasz, ess_info::io, PCMDIR_PLAY, port_wr(), and ess_info::vc.
Referenced by esschan_trigger().
|
static |
Definition at line 811 of file solo.c.
References go, ess_info::io, port_wr(), and ess_info::vc.
Referenced by ess_dmapos(), ess_intr(), and esschan_trigger().
|
static |
Definition at line 194 of file solo.c.
References ess_rd(), and SBDSP_STATUS.
Referenced by ess_dspwr().
|
static |
Definition at line 200 of file solo.c.
References ess_dspready(), ess_wr(), SBDSP_CMD, and val.
Referenced by ess_cmd(), and ess_cmd1().
|
static |
Definition at line 255 of file solo.c.
References DSP_READ, and ess_rd().
Referenced by ess_read(), and ess_reset_dsp().
|
static |
Definition at line 242 of file solo.c.
References ess_rd(), ess_wr(), SB_MIX_ADDR, SB_MIX_DATA, and val.
Referenced by ess_intr(), ess_start(), and ess_stop().
|
static |
Definition at line 299 of file solo.c.
References ess_chinfo::channel, chn_intr(), DEB, DSP_DATA_AVAIL, ess_info::duplex, ess_dmatrigger(), ess_getmixer(), ess_lock, ess_rd(), ess_read(), ess_setmixer(), ess_unlock, ess_write(), ess_chinfo::hwch, PCMDIR_PLAY, PCMDIR_REC, ess_info::rch, ess_info::simplex_dir, src, and ess_chinfo::stopping.
Referenced by ess_attach().
|
static |
Definition at line 182 of file solo.c.
References port_rd(), reg, and ess_info::sb.
Referenced by ess_dspready(), ess_get_byte(), ess_getmixer(), and ess_intr().
|
static |
Definition at line 275 of file solo.c.
References ess_cmd(), ess_get_byte(), and reg.
Referenced by ess_intr(), ess_setupch(), ess_start(), and ess_stop().
|
static |
Definition at line 822 of file solo.c.
References dev, free, ess_info::gp, ess_info::ih, ess_info::io, ess_info::irq, ess_info::lock, ess_info::mpu, ess_info::parent_dmat, PCIR_BAR, ess_info::sb, snd_mtxfree(), and ess_info::vc.
Referenced by ess_attach(), and ess_detach().
|
static |
Definition at line 281 of file solo.c.
References DEB, ess_cmd(), ess_get_byte(), ess_wr(), and SBDSP_RST.
Referenced by ess_attach(), and ess_resume().
|
static |
Definition at line 932 of file solo.c.
References dev, ess_lock, ESS_PCI_CONFIG, ESS_PCI_DDMACONTROL, ESS_PCI_LEGACYCONTROL, ess_reset_dsp(), ess_setmixer(), ess_unlock, ess_info::io, mixer_reinit(), ess_info::newspeed, pcm_getdevinfo(), port_wr(), and ess_info::vc.
|
static |
Definition at line 232 of file solo.c.
References DEB, ess_wr(), SB_MIX_ADDR, SB_MIX_DATA, and value.
Referenced by ess_attach(), ess_intr(), ess_resume(), ess_setupch(), ess_start(), ess_stop(), essmix_init(), essmix_set(), and essmix_setrecsrc().
|
static |
Definition at line 418 of file solo.c.
References AFMT_16BIT, AFMT_CHANNEL, AFMT_SIGNED, DEB, dir, ess_calcfilter(), ess_calcspeed8(), ess_calcspeed9(), ess_read(), ess_setmixer(), ess_write(), fmt, len, ess_info::newspeed, PCMDIR_PLAY, PCMDIR_REC, ess_info::simplex_dir, spd, and stereo.
Referenced by ess_start().
|
static |
Definition at line 488 of file solo.c.
References ess_chinfo::blksz, DEB, ess_chinfo::dir, ess_cmd(), ess_getmixer(), ess_read(), ess_setmixer(), ess_setupch(), ess_write(), ess_chinfo::fmt, ess_chinfo::hwch, ess_chinfo::parent, PCMDIR_PLAY, ess_chinfo::spd, and ess_chinfo::stopping.
Referenced by esschan_trigger().
|
static |
Definition at line 509 of file solo.c.
References DEB, ess_getmixer(), ess_read(), ess_setmixer(), ess_write(), ess_chinfo::hwch, ess_chinfo::parent, and ess_chinfo::stopping.
Referenced by esschan_trigger().
|
static |
Definition at line 188 of file solo.c.
References port_wr(), reg, ess_info::sb, and val.
Referenced by ess_dspwr(), ess_getmixer(), ess_reset_dsp(), and ess_setmixer().
|
static |
Definition at line 269 of file solo.c.
References ess_cmd1(), reg, and val.
Referenced by ess_intr(), ess_setupch(), ess_start(), and ess_stop().
|
static |
Definition at line 619 of file solo.c.
References data, ess_chinfo::dir, ess_playcaps, ess_reccaps, and PCMDIR_PLAY.
|
static |
Definition at line 606 of file solo.c.
References data, ess_dmapos(), ess_lock, ess_unlock, ess_chinfo::hwch, and ess_chinfo::parent.
|
static |
Definition at line 526 of file solo.c.
References b, ess_chinfo::buffer, ess_info::bufsz, c, ess_chinfo::channel, DEB, devinfo, ess_chinfo::dir, dir, ess_info::duplex, ess_chinfo::hwch, ess_chinfo::parent, ess_info::parent_dmat, PCMDIR_PLAY, ess_info::rch, and sndbuf_alloc().
|
static |
Definition at line 568 of file solo.c.
References ess_chinfo::blksz, blocksize, and data.
|
static |
Definition at line 545 of file solo.c.
References data, ess_chinfo::fmt, and format.
|
static |
Definition at line 554 of file solo.c.
References data, ess_calcspeed8(), ess_calcspeed9(), ess_info::newspeed, ess_chinfo::parent, ess_chinfo::spd, and speed.
|
static |
Definition at line 577 of file solo.c.
References ess_chinfo::buffer, data, DEB, ess_chinfo::dir, ess_dmasetup(), ess_dmatrigger(), ess_lock, ess_start(), ess_stop(), ess_unlock, go, ess_chinfo::hwch, ess_chinfo::parent, PCMTRIG_ABORT, PCMTRIG_COMMON, PCMTRIG_START, PCMTRIG_STOP, sndbuf_getbufaddr(), and sndbuf_getsize().
|
static |
Definition at line 641 of file solo.c.
References ess_setmixer(), m, mix_getdevinfo(), mix_setdevs(), and mix_setrecdevs().
|
static |
Definition at line 658 of file solo.c.
References dev, ess_setmixer(), left, m, mix_getdevinfo(), r, and right.
|
static |
Definition at line 718 of file solo.c.
References ess_setmixer(), m, mix_getdevinfo(), and src.
MIXER_DECLARE | ( | solomixer | ) |
MODULE_DEPEND | ( | snd_solo | , |
sound | , | ||
SOUND_MINVER | , | ||
SOUND_PREFVER | , | ||
SOUND_MAXVER | |||
) |
MODULE_VERSION | ( | snd_solo | , |
1 | |||
) |
|
static |
|
static |
Definition at line 163 of file solo.c.
References data, regno, and size.
Referenced by ess_attach(), ess_dmasetup(), ess_dmatrigger(), ess_resume(), and ess_wr().
SND_DECLARE_FILE | ( | "$FreeBSD$" | ) |
|
static |
|
static |
|
static |
Definition at line 64 of file solo.c.
Referenced by esschan_getcaps().
|
static |
|
static |
Definition at line 80 of file solo.c.
Referenced by esschan_getcaps().
|
static |
|
static |
|
static |