FreeBSD kernel sound device code
|
#include <dev/sound/pcm/sound.h>
#include <dev/sound/pcm/ac97.h>
#include <dev/pci/pcireg.h>
#include <dev/pci/pcivar.h>
#include <sys/sysctl.h>
#include <dev/sound/pci/via8233.h>
Go to the source code of this file.
Data Structures | |
struct | via_dma_op |
struct | via_chinfo |
struct | via_info |
Macros | |
#define | VIA8233_PCI_ID 0x30591106 |
#define | VIA8233_REV_ID_8233PRE 0x10 |
#define | VIA8233_REV_ID_8233C 0x20 |
#define | VIA8233_REV_ID_8233 0x30 |
#define | VIA8233_REV_ID_8233A 0x40 |
#define | VIA8233_REV_ID_8235 0x50 |
#define | VIA8233_REV_ID_8237 0x60 |
#define | VIA8233_REV_ID_8251 0x70 |
#define | SEGS_PER_CHAN 2 /* Segments per channel */ |
#define | NDXSCHANS 4 /* No of DXS channels */ |
#define | NMSGDCHANS 1 /* No of multichannel SGD */ |
#define | NWRCHANS 1 /* No of write channels */ |
#define | NCHANS (NWRCHANS + NDXSCHANS + NMSGDCHANS) |
#define | NSEGS NCHANS * SEGS_PER_CHAN /* Segments in SGD table */ |
#define | VIA_SEGS_MIN 2 |
#define | VIA_SEGS_MAX 64 |
#define | VIA_SEGS_DEFAULT 2 |
#define | VIA_BLK_MIN 32 |
#define | VIA_BLK_ALIGN (~(VIA_BLK_MIN - 1)) |
#define | VIA_DEFAULT_BUFSZ 0x1000 |
#define | VIA_DMAOP_EOL 0x80000000 |
#define | VIA_DMAOP_FLAG 0x40000000 |
#define | VIA_DMAOP_STOP 0x20000000 |
#define | VIA_DMAOP_COUNT(x) ((x)&0x00FFFFFF) |
Functions | |
SND_DECLARE_FILE ("$FreeBSD$") | |
static __inline int | via_chan_active (struct via_info *via) |
static int | sysctl_via8233_spdif_enable (SYSCTL_HANDLER_ARGS) |
static int | sysctl_via8233_dxs_src (SYSCTL_HANDLER_ARGS) |
static int | sysctl_via_polling (SYSCTL_HANDLER_ARGS) |
static void | via_init_sysctls (device_t dev) |
static __inline uint32_t | via_rd (struct via_info *via, int regno, int size) |
static __inline void | via_wr (struct via_info *via, int regno, uint32_t data, int size) |
static int | via_waitready_codec (struct via_info *via) |
static int | via_waitvalid_codec (struct via_info *via) |
static int | via_write_codec (kobj_t obj, void *addr, int reg, uint32_t val) |
static int | via_read_codec (kobj_t obj, void *addr, int reg) |
AC97_DECLARE (via_ac97) | |
static int | via_buildsgdt (struct via_chinfo *ch) |
static int | via8233wr_setformat (kobj_t obj, void *data, uint32_t format) |
static int | via8233dxs_setformat (kobj_t obj, void *data, uint32_t format) |
static int | via8233msgd_setformat (kobj_t obj, void *data, uint32_t format) |
static uint32_t | via8233wr_setspeed (kobj_t obj, void *data, uint32_t speed) |
static uint32_t | via8233dxs_setspeed (kobj_t obj, void *data, uint32_t speed) |
static uint32_t | via8233msgd_setspeed (kobj_t obj, void *data, uint32_t speed) |
static struct pcmchan_caps * | via8233wr_getcaps (kobj_t obj, void *data) |
static struct pcmchan_caps * | via8233dxs_getcaps (kobj_t obj, void *data) |
static struct pcmchan_caps * | via8233msgd_getcaps (kobj_t obj, void *data) |
static int | via8233chan_setfragments (kobj_t obj, void *data, uint32_t blksz, uint32_t blkcnt) |
static uint32_t | via8233chan_setblocksize (kobj_t obj, void *data, uint32_t blksz) |
static uint32_t | via8233chan_getptr (kobj_t obj, void *data) |
static void | via8233chan_reset (struct via_info *via, struct via_chinfo *ch) |
static void | via8233chan_sgdinit (struct via_info *via, struct via_chinfo *ch, int chnum) |
static void * | via8233wr_init (kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel *c, int dir) |
static void * | via8233dxs_init (kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel *c, int dir) |
static void * | via8233msgd_init (kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel *c, int dir) |
static void | via8233chan_mute (struct via_info *via, struct via_chinfo *ch, int muted) |
static __inline int | via_poll_channel (struct via_chinfo *ch) |
static void | via_poll_callback (void *arg) |
static int | via_poll_ticks (struct via_info *via) |
static int | via8233chan_trigger (kobj_t obj, void *data, int go) |
CHANNEL_DECLARE (via8233wr) | |
CHANNEL_DECLARE (via8233dxs) | |
CHANNEL_DECLARE (via8233msgd) | |
static void | via_intr (void *p) |
static int | via_probe (device_t dev) |
static void | dma_cb (void *p, bus_dma_segment_t *bds, int a, int b) |
static int | via_chip_init (device_t dev) |
static int | via_attach (device_t dev) |
static int | via_detach (device_t dev) |
DRIVER_MODULE (snd_via8233, pci, via_driver, pcm_devclass, 0, 0) | |
MODULE_DEPEND (snd_via8233, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER) | |
MODULE_VERSION (snd_via8233, 1) | |
Variables | |
static uint32_t | via_fmt [] |
static struct pcmchan_caps | via_vracaps = { 4000, 48000, via_fmt, 0 } |
static struct pcmchan_caps | via_caps = { 48000, 48000, via_fmt, 0 } |
static kobj_method_t | via_ac97_methods [] |
static kobj_method_t | via8233wr_methods [] |
static kobj_method_t | via8233dxs_methods [] |
static kobj_method_t | via8233msgd_methods [] |
static device_method_t | via_methods [] |
static driver_t | via_driver |
#define NCHANS (NWRCHANS + NDXSCHANS + NMSGDCHANS) |
#define NSEGS NCHANS * SEGS_PER_CHAN /* Segments in SGD table */ |
#define VIA_BLK_ALIGN (~(VIA_BLK_MIN - 1)) |
AC97_DECLARE | ( | via_ac97 | ) |
CHANNEL_DECLARE | ( | via8233dxs | ) |
CHANNEL_DECLARE | ( | via8233msgd | ) |
CHANNEL_DECLARE | ( | via8233wr | ) |
|
static |
Definition at line 1104 of file via8233.c.
References via_info::sgd_addr.
Referenced by via_attach().
DRIVER_MODULE | ( | snd_via8233 | , |
pci | , | ||
via_driver | , | ||
pcm_devclass | , | ||
0 | , | ||
0 | |||
) |
MODULE_DEPEND | ( | snd_via8233 | , |
sound | , | ||
SOUND_MINVER | , | ||
SOUND_PREFVER | , | ||
SOUND_MAXVER | |||
) |
MODULE_VERSION | ( | snd_via8233 | , |
1 | |||
) |
SND_DECLARE_FILE | ( | "$FreeBSD$" | ) |
|
static |
Definition at line 192 of file via8233.c.
References dev, via_info::dxs_src, via_info::lock, pcm_getdevinfo(), req, snd_mtxlock, snd_mtxunlock, and val.
Referenced by via_init_sysctls().
|
static |
Definition at line 160 of file via8233.c.
References dev, via_info::lock, pcm_getdevinfo(), r, req, snd_mtxlock, snd_mtxunlock, VIA_PCI_SPDIF, and VIA_SPDIF_EN.
Referenced by via_init_sysctls().
|
static |
Definition at line 218 of file via8233.c.
References dev, via_info::lock, pcm_getdevinfo(), via_info::polling, req, snd_mtxlock, snd_mtxunlock, val, and via_chan_active().
Referenced by via_init_sysctls().
|
static |
Definition at line 615 of file via8233.c.
References via_chinfo::blkcnt, via_chinfo::blksz, count, data, index, via_info::lock, via_chinfo::parent, via_info::polling, via_chinfo::ptr, via_chinfo::rbase, snd_mtxlock, snd_mtxunlock, via_rd(), and VIA_RP_CURRENT_COUNT.
|
static |
Definition at line 756 of file via8233.c.
References BASE_IS_VIA_DXS_REG, via_info::dev, r, via_chinfo::rbase, VIA8233_DXS_MUTE, VIA8233_RP_DXS_LVOL, VIA8233_RP_DXS_RVOL, via_rd(), and via_wr().
Referenced by via8233chan_trigger().
|
static |
Definition at line 638 of file via8233.c.
References via_chinfo::rbase, SGD_CONTROL_STOP, SGD_STATUS_EOL, SGD_STATUS_FLAG, VIA_RP_CONTROL, VIA_RP_STATUS, and via_wr().
Referenced by via8233chan_trigger(), via8233dxs_init(), via8233msgd_init(), and via8233wr_init().
|
static |
Definition at line 604 of file via8233.c.
References via_info::blkcnt, blksz, via_chinfo::blksz, data, via_chinfo::parent, and via8233chan_setfragments().
|
static |
Definition at line 565 of file via8233.c.
References blkcnt, via_chinfo::blkcnt, blksz, via_chinfo::blksz, via_chinfo::buffer, data, via_info::dev, via_chinfo::parent, sndbuf_getblkcnt(), sndbuf_getblksz(), sndbuf_getmaxsize(), sndbuf_resize(), VIA_BLK_ALIGN, VIA_BLK_MIN, VIA_SEGS_MAX, and VIA_SEGS_MIN.
Referenced by via8233chan_setblocksize().
|
static |
Definition at line 650 of file via8233.c.
References via_chinfo::sgd_addr, via_info::sgd_addr, via_chinfo::sgd_table, via_info::sgd_table, and VIA_SEGS_MAX.
Referenced by via8233dxs_init(), via8233msgd_init(), and via8233wr_init().
|
static |
Definition at line 886 of file via8233.c.
References via_chinfo::active, via_chinfo::blksz, via_chinfo::buffer, data, go, via_info::lock, via_chinfo::parent, PCMTRIG_ABORT, PCMTRIG_COMMON, PCMTRIG_START, PCMTRIG_STOP, via_info::poll_ticks, via_info::poll_timer, via_info::polling, via_chinfo::prevptr, via_chinfo::ptr, via_chinfo::rbase, via_chinfo::sgd_addr, SGD_CONTROL_AUTOSTART, SGD_CONTROL_I_EOL, SGD_CONTROL_I_FLAG, SGD_CONTROL_START, SGD_CONTROL_STOP, snd_mtxlock, snd_mtxunlock, sndbuf_getalign(), sndbuf_getspd(), via8233chan_mute(), via8233chan_reset(), via_buildsgdt(), via_chan_active(), via_poll_callback(), via_poll_ticks(), VIA_RP_CONTROL, VIA_RP_TABLE_PTR, and via_wr().
|
static |
Definition at line 533 of file via8233.c.
References data, via_info::dxs_src, via_chinfo::parent, via_caps, and via_vracaps.
|
static |
Definition at line 689 of file via8233.c.
References b, via_chinfo::blkcnt, via_info::blkcnt, via_chinfo::buffer, via_info::bufsz, c, via_chinfo::channel, devinfo, dir, via_chinfo::dir, via_info::lock, via_info::n_dxs_registered, NDXSCHANS, NWRCHANS, via_chinfo::parent, via_info::parent_dmat, via_info::pch, via_info::play_num, via_chinfo::rbase, snd_mtxlock, snd_mtxunlock, sndbuf_alloc(), via8233chan_reset(), via8233chan_sgdinit(), and VIA_DXS_BASE.
|
static |
Definition at line 424 of file via8233.c.
References AFMT_16BIT, AFMT_CHANNEL, data, format, via_info::lock, via_chinfo::parent, r, via_chinfo::rbase, snd_mtxlock, snd_mtxunlock, VIA8233_DXS_RATEFMT_16BIT, VIA8233_DXS_RATEFMT_STEREO, VIA8233_RP_DXS_RATEFMT, via_rd(), and via_wr().
|
static |
Definition at line 486 of file via8233.c.
References data, via_info::lock, via_chinfo::parent, r, via_chinfo::rbase, snd_mtxlock, snd_mtxunlock, speed, VIA8233_DXS_RATEFMT_48K, VIA8233_RP_DXS_RATEFMT, via_rd(), and via_wr().
|
static |
Definition at line 550 of file via8233.c.
References AC97_EXTCAP_VRA, via_info::codec_caps, data, via_chinfo::parent, via_caps, and via_vracaps.
|
static |
Definition at line 726 of file via8233.c.
References b, via_chinfo::blkcnt, via_info::blkcnt, via_chinfo::buffer, via_info::bufsz, c, via_chinfo::channel, devinfo, dir, via_chinfo::dir, via_info::lock, NWRCHANS, via_chinfo::parent, via_info::parent_dmat, via_info::pch, via_info::play_num, via_chinfo::rbase, snd_mtxlock, snd_mtxunlock, sndbuf_alloc(), via8233chan_reset(), via8233chan_sgdinit(), and VIA_MC_SGD_STATUS.
|
static |
Definition at line 446 of file via8233.c.
References AFMT_CHANNEL, data, format, via_info::lock, MC_SGD_16BIT, MC_SGD_8BIT, MC_SGD_CHANNELS, via_chinfo::parent, SLOT3, SLOT4, snd_mtxlock, snd_mtxunlock, VIA_MC_SGD_FORMAT, VIA_MC_SLOT_SELECT, and via_wr().
|
static |
Definition at line 506 of file via8233.c.
References AC97_EXTCAP_VRA, AC97_REGEXT_FDACRATE, ac97_setrate(), via_info::codec, via_info::codec_caps, data, via_chinfo::parent, and speed.
|
static |
Definition at line 521 of file via8233.c.
References AC97_EXTCAP_VRA, via_info::codec_caps, data, via_chinfo::parent, via_caps, and via_vracaps.
|
static |
Definition at line 658 of file via8233.c.
References b, via_chinfo::blkcnt, via_info::blkcnt, via_chinfo::buffer, via_info::bufsz, c, via_chinfo::channel, devinfo, dir, via_chinfo::dir, via_info::lock, via_chinfo::parent, via_info::parent_dmat, via_chinfo::rbase, via_info::rch, via_info::rec_num, snd_mtxlock, snd_mtxunlock, sndbuf_alloc(), via8233chan_reset(), via8233chan_sgdinit(), via_wr(), VIA_WR_BASE, VIA_WR_RP_SGD_FORMAT, and WR_FIFO_ENABLE.
|
static |
Definition at line 405 of file via8233.c.
References AFMT_CHANNEL, data, format, via_info::lock, via_chinfo::parent, snd_mtxlock, snd_mtxunlock, via_wr(), VIA_WR0_FORMAT, WR_FORMAT_16BIT, WR_FORMAT_STEREO, and WR_FORMAT_STOP_INDEX.
|
static |
Definition at line 474 of file via8233.c.
References AC97_EXTCAP_VRA, AC97_REGEXT_LADCRATE, ac97_setrate(), via_info::codec, via_info::codec_caps, data, via_chinfo::parent, and speed.
|
static |
Definition at line 1166 of file via8233.c.
References AC97_CREATE, ac97_destroy(), AC97_EXTCAP_DRA, AC97_EXTCAP_VRA, AC97_EXTCAP_VRM, ac97_getextcaps(), ac97_getextmode(), ac97_getmixerclass(), ac97_setextmode(), via_info::blkcnt, via_info::bufsz, via_info::codec, via_info::codec_caps, via_info::dev, dev, dma_cb(), via_info::dma_eol_wake, via_info::dxs_src, free, via_info::ih, via_info::irq, via_info::irqid, via_info::lock, mixer_init(), NDXSCHANS, NMSGDCHANS, NWRCHANS, via_info::parent_dmat, PCIR_BAR, pcm_addchan(), pcm_getbuffersize(), PCM_KLDSTRING, pcm_register(), pcm_setstatus(), PCMDIR_PLAY, PCMDIR_REC, via_info::poll_ticks, via_info::poll_timer, via_info::polling, via_info::reg, via_info::regid, revid, via_info::sgd_addr, via_info::sgd_dmamap, via_info::sgd_dmat, via_info::sgd_table, via_info::sh, snd_mtxcreate(), snd_mtxfree(), snd_setup_intr(), SND_STATUSLEN, via_info::st, status, VIA8233_REV_ID_8233A, VIA8233_REV_ID_8251, VIA_BLK_ALIGN, VIA_BLK_MIN, via_chip_init(), VIA_DEFAULT_BUFSZ, via_init_sysctls(), via_intr(), VIA_SEGS_DEFAULT, VIA_SEGS_MAX, and VIA_SEGS_MIN.
|
static |
Definition at line 385 of file via8233.c.
References via_chinfo::blkcnt, via_chinfo::blksz, via_chinfo::buffer, via_dma_op::flags, via_dma_op::ptr, via_chinfo::sgd_table, sndbuf_getbufaddr(), VIA_DMAOP_EOL, and VIA_DMAOP_FLAG.
Referenced by via8233chan_trigger().
|
static |
Definition at line 143 of file via8233.c.
References via_chinfo::active, NDXSCHANS, NMSGDCHANS, NWRCHANS, via_info::pch, and via_info::rch.
Referenced by sysctl_via_polling(), via8233chan_trigger(), and via_poll_callback().
|
static |
Definition at line 1111 of file via8233.c.
References data, dev, VIA_PCI_ACLINK_C00_READY, VIA_PCI_ACLINK_CTRL, VIA_PCI_ACLINK_DESIRED, VIA_PCI_ACLINK_EN, VIA_PCI_ACLINK_NRST, VIA_PCI_ACLINK_STAT, and VIA_PCI_ACLINK_SYNC.
Referenced by via_attach().
|
static |
Definition at line 1399 of file via8233.c.
References dev, free, via_info::ih, via_info::irq, via_info::irqid, via_info::lock, via_info::parent_dmat, pcm_getdevinfo(), pcm_unregister(), via_info::play_num, via_info::poll_timer, via_info::polling, r, via_info::rec_num, via_info::reg, via_info::regid, via_info::sgd_dmamap, via_info::sgd_dmat, via_info::sgd_table, snd_mtxfree(), snd_mtxlock, and snd_mtxunlock.
|
static |
Definition at line 253 of file via8233.c.
References dev, sysctl_via8233_dxs_src(), sysctl_via8233_spdif_enable(), and sysctl_via_polling().
Referenced by via_attach().
|
static |
Definition at line 1010 of file via8233.c.
References via_chinfo::active, via_chinfo::channel, chn_intr(), via_info::dma_eol_wake, via_info::lock, NDXSCHANS, NMSGDCHANS, NWRCHANS, via_info::pch, via_info::polling, via_chinfo::rbase, via_info::rch, reg, SGD_CONTROL_AUTOSTART, SGD_CONTROL_I_EOL, SGD_CONTROL_I_FLAG, SGD_CONTROL_START, SGD_STATUS_ACTIVE, SGD_STATUS_EOL, SGD_STATUS_INTR, snd_mtxlock, snd_mtxunlock, via_rd(), VIA_RP_CONTROL, VIA_RP_STATUS, and via_wr().
Referenced by via_attach().
|
static |
Definition at line 803 of file via8233.c.
References via_chinfo::channel, chn_intr(), via_info::lock, NDXSCHANS, NMSGDCHANS, NWRCHANS, via_info::pch, via_info::poll_timer, via_info::polling, via_info::rch, snd_mtxlock, snd_mtxunlock, via_chan_active(), via_poll_callback(), and via_poll_channel().
Referenced by via8233chan_trigger(), and via_poll_callback().
|
static |
Definition at line 773 of file via8233.c.
References via_chinfo::active, via_chinfo::blkcnt, blksz, via_chinfo::blksz, via_chinfo::channel, count, index, via_chinfo::parent, via_chinfo::prevptr, via_chinfo::ptr, via_chinfo::rbase, via_rd(), and VIA_RP_CURRENT_COUNT.
Referenced by via_poll_callback().
|
static |
Definition at line 843 of file via8233.c.
References via_chinfo::active, via_chinfo::blksz, via_chinfo::buffer, via_chinfo::channel, NDXSCHANS, NMSGDCHANS, NWRCHANS, via_info::pch, via_info::rch, sndbuf_getalign(), and sndbuf_getspd().
Referenced by via8233chan_trigger().
|
static |
Definition at line 1069 of file via8233.c.
References dev, VIA8233_PCI_ID, VIA8233_REV_ID_8233, VIA8233_REV_ID_8233A, VIA8233_REV_ID_8233C, VIA8233_REV_ID_8233PRE, VIA8233_REV_ID_8235, VIA8233_REV_ID_8237, and VIA8233_REV_ID_8251.
|
static |
Definition at line 276 of file via8233.c.
References regno, via_info::sh, size, and via_info::st.
Referenced by via8233chan_getptr(), via8233chan_mute(), via8233dxs_setformat(), via8233dxs_setspeed(), via_intr(), via_poll_channel(), via_read_codec(), via_waitready_codec(), and via_waitvalid_codec().
|
static |
Definition at line 356 of file via8233.c.
References addr, reg, VIA_AC97_CODEC00_VALID, VIA_AC97_CONTROL, VIA_AC97_INDEX, VIA_AC97_READ, via_rd(), via_waitready_codec(), via_waitvalid_codec(), and via_wr().
|
static |
Definition at line 311 of file via8233.c.
References via_info::dev, VIA_AC97_BUSY, VIA_AC97_CONTROL, and via_rd().
Referenced by via_read_codec(), and via_write_codec().
|
static |
Definition at line 326 of file via8233.c.
References via_info::dev, VIA_AC97_CODEC00_VALID, VIA_AC97_CONTROL, and via_rd().
Referenced by via_read_codec().
|
static |
Definition at line 291 of file via8233.c.
References data, regno, via_info::sh, size, and via_info::st.
Referenced by via8233chan_mute(), via8233chan_reset(), via8233chan_trigger(), via8233dxs_setformat(), via8233dxs_setspeed(), via8233msgd_setformat(), via8233wr_init(), via8233wr_setformat(), via_intr(), via_read_codec(), and via_write_codec().
|
static |
Definition at line 341 of file via8233.c.
References addr, reg, val, VIA_AC97_CODEC00_VALID, VIA_AC97_CONTROL, VIA_AC97_DATA, VIA_AC97_INDEX, via_waitready_codec(), and via_wr().
|
static |
|
static |
|
static |
|
static |
|
static |
Definition at line 140 of file via8233.c.
Referenced by via8233dxs_getcaps(), via8233msgd_getcaps(), and via8233wr_getcaps().
|
static |
|
static |
|
static |
|
static |
Definition at line 139 of file via8233.c.
Referenced by via8233dxs_getcaps(), via8233msgd_getcaps(), and via8233wr_getcaps().