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 <sys/endian.h>
#include <dev/sound/pci/atiixp.h>
Go to the source code of this file.
Data Structures | |
struct | atiixp_dma_op |
struct | atiixp_chinfo |
struct | atiixp_info |
Macros | |
#define | ATI_IXP_DMA_RETRY_MAX 100 |
#define | ATI_IXP_BUFSZ_MIN 4096 |
#define | ATI_IXP_BUFSZ_MAX 65536 |
#define | ATI_IXP_BUFSZ_DEFAULT 16384 |
#define | ATI_IXP_BLK_MIN 32 |
#define | ATI_IXP_BLK_ALIGN (~(ATI_IXP_BLK_MIN - 1)) |
#define | ATI_IXP_CHN_RUNNING 0x00000001 |
#define | ATI_IXP_CHN_SUSPEND 0x00000002 |
#define | atiixp_rd(_sc, _reg) bus_space_read_4((_sc)->st, (_sc)->sh, _reg) |
#define | atiixp_wr(_sc, _reg, _val) bus_space_write_4((_sc)->st, (_sc)->sh, _reg, _val) |
#define | atiixp_lock(_sc) snd_mtxlock((_sc)->lock) |
#define | atiixp_unlock(_sc) snd_mtxunlock((_sc)->lock) |
#define | atiixp_assert(_sc) snd_mtxassert((_sc)->lock) |
#define | atiixp_chan_active(sc) |
Functions | |
SND_DECLARE_FILE ("$FreeBSD$") | |
static void | atiixp_enable_interrupts (struct atiixp_info *) |
static void | atiixp_disable_interrupts (struct atiixp_info *) |
static void | atiixp_reset_aclink (struct atiixp_info *) |
static void | atiixp_flush_dma (struct atiixp_chinfo *) |
static void | atiixp_enable_dma (struct atiixp_chinfo *) |
static void | atiixp_disable_dma (struct atiixp_chinfo *) |
static int | atiixp_waitready_codec (struct atiixp_info *) |
static int | atiixp_rdcd (kobj_t, void *, int) |
static int | atiixp_wrcd (kobj_t, void *, int, uint32_t) |
static void * | atiixp_chan_init (kobj_t, void *, struct snd_dbuf *, struct pcm_channel *, int) |
static int | atiixp_chan_setformat (kobj_t, void *, uint32_t) |
static uint32_t | atiixp_chan_setspeed (kobj_t, void *, uint32_t) |
static int | atiixp_chan_setfragments (kobj_t, void *, uint32_t, uint32_t) |
static uint32_t | atiixp_chan_setblocksize (kobj_t, void *, uint32_t) |
static void | atiixp_buildsgdt (struct atiixp_chinfo *) |
static int | atiixp_chan_trigger (kobj_t, void *, int) |
static __inline uint32_t | atiixp_dmapos (struct atiixp_chinfo *) |
static uint32_t | atiixp_chan_getptr (kobj_t, void *) |
static struct pcmchan_caps * | atiixp_chan_getcaps (kobj_t, void *) |
static void | atiixp_intr (void *) |
static void | atiixp_dma_cb (void *, bus_dma_segment_t *, int, int) |
static void | atiixp_chip_pre_init (struct atiixp_info *) |
static void | atiixp_chip_post_init (void *) |
static void | atiixp_release_resource (struct atiixp_info *) |
static int | atiixp_pci_probe (device_t) |
static int | atiixp_pci_attach (device_t) |
static int | atiixp_pci_detach (device_t) |
static int | atiixp_pci_suspend (device_t) |
static int | atiixp_pci_resume (device_t) |
AC97_DECLARE (atiixp_ac97) | |
static __inline int | atiixp_poll_channel (struct atiixp_chinfo *ch) |
static void | atiixp_poll_callback (void *arg) |
CHANNEL_DECLARE (atiixp_chan) | |
static int | sysctl_atiixp_polling (SYSCTL_HANDLER_ARGS) |
DRIVER_MODULE (snd_atiixp, pci, atiixp_driver, pcm_devclass, 0, 0) | |
MODULE_DEPEND (snd_atiixp, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER) | |
MODULE_VERSION (snd_atiixp, 1) | |
Variables | |
static uint32_t | atiixp_fmt_32bit [] |
static uint32_t | atiixp_fmt [] |
static struct pcmchan_caps | atiixp_caps_32bit |
static struct pcmchan_caps | atiixp_caps |
struct { | |
uint16_t vendor | |
uint16_t devid | |
char * desc | |
} | atiixp_hw [] |
static kobj_method_t | atiixp_ac97_methods [] |
static kobj_method_t | atiixp_chan_methods [] |
static device_method_t | atiixp_methods [] |
static driver_t | atiixp_driver |
#define ATI_IXP_BLK_ALIGN (~(ATI_IXP_BLK_MIN - 1)) |
#define atiixp_assert | ( | _sc | ) | snd_mtxassert((_sc)->lock) |
#define atiixp_chan_active | ( | sc | ) |
#define atiixp_lock | ( | _sc | ) | snd_mtxlock((_sc)->lock) |
#define atiixp_unlock | ( | _sc | ) | snd_mtxunlock((_sc)->lock) |
AC97_DECLARE | ( | atiixp_ac97 | ) |
|
static |
Definition at line 582 of file atiixp.c.
References atiixp_dma_op::addr, addr, atiixp_chinfo::blkcnt, blkcnt, atiixp_chinfo::blksz, blksz, atiixp_chinfo::buffer, atiixp_dma_op::next, atiixp_chinfo::parent, atiixp_info::polling, atiixp_chinfo::sgd_addr, atiixp_chinfo::sgd_table, atiixp_dma_op::size, sndbuf_getbufaddr(), and atiixp_dma_op::status.
Referenced by atiixp_chan_trigger().
|
static |
Definition at line 845 of file atiixp.c.
References atiixp_caps, atiixp_caps_32bit, atiixp_chinfo::caps_32bit, and data.
|
static |
Definition at line 828 of file atiixp.c.
References atiixp_dmapos(), atiixp_lock, atiixp_unlock, data, atiixp_chinfo::parent, atiixp_info::polling, and atiixp_chinfo::ptr.
|
static |
Definition at line 437 of file atiixp.c.
References ATI_IXP_DMA_CHSEGS_MAX, ATI_REG_CMD_IN_DMA_EN, ATI_REG_CMD_OUT_DMA_EN, ATI_REG_CMD_RECEIVE_EN, ATI_REG_CMD_SEND_EN, ATI_REG_FIFO_IN_FLUSH, ATI_REG_FIFO_OUT_FLUSH, ATI_REG_IN_DMA_DT_CUR, ATI_REG_IN_DMA_LINKPTR, ATI_REG_OUT_DMA_DT_CUR, ATI_REG_OUT_DMA_LINKPTR, atiixp_disable_dma(), atiixp_lock, atiixp_unlock, b, atiixp_chinfo::blkcnt, atiixp_info::blkcnt, atiixp_chinfo::blksz, atiixp_chinfo::buffer, atiixp_info::bufsz, c, atiixp_chinfo::caps_32bit, atiixp_chinfo::channel, devinfo, atiixp_chinfo::dir, dir, atiixp_chinfo::dt_cur_bit, atiixp_chinfo::enable_bit, atiixp_chinfo::flush_bit, atiixp_chinfo::linkptr_bit, atiixp_chinfo::parent, atiixp_info::parent_dmat, atiixp_info::pch, PCMDIR_PLAY, atiixp_info::rch, atiixp_info::registered_channels, atiixp_chinfo::sgd_addr, atiixp_info::sgd_addr, atiixp_chinfo::sgd_table, atiixp_info::sgd_table, and sndbuf_alloc().
|
static |
Definition at line 571 of file atiixp.c.
References atiixp_chan_setfragments(), atiixp_info::blkcnt, atiixp_chinfo::blksz, blksz, data, and atiixp_chinfo::parent.
|
static |
Definition at line 488 of file atiixp.c.
References AFMT_32BIT, ATI_REG_6CH_REORDER, ATI_REG_CMD, ATI_REG_CMD_INTERLEAVE_IN, ATI_REG_CMD_INTERLEAVE_OUT, ATI_REG_OUT_DMA_SLOT, ATI_REG_OUT_DMA_SLOT_BIT, ATI_REG_OUT_DMA_THRESHOLD_SHIFT, atiixp_lock, atiixp_rd, atiixp_unlock, atiixp_wr, data, atiixp_chinfo::dir, atiixp_chinfo::fmt, format, atiixp_chinfo::parent, PCMDIR_REC, and value.
Referenced by atiixp_pci_resume().
|
static |
Definition at line 532 of file atiixp.c.
References ATI_IXP_BLK_ALIGN, ATI_IXP_BLK_MIN, ATI_IXP_DMA_CHSEGS_MAX, ATI_IXP_DMA_CHSEGS_MIN, atiixp_chinfo::blkcnt, blkcnt, atiixp_chinfo::blksz, blksz, atiixp_chinfo::buffer, data, atiixp_info::dev, atiixp_chinfo::parent, sndbuf_getblkcnt(), sndbuf_getblksz(), sndbuf_getmaxsize(), and sndbuf_resize().
Referenced by atiixp_chan_setblocksize().
|
static |
Definition at line 525 of file atiixp.c.
References ATI_IXP_BASE_RATE.
|
static |
Definition at line 720 of file atiixp.c.
References ATI_IXP_CHN_RUNNING, ATI_REG_CMD, ATI_REG_CMD_RECEIVE_EN, ATI_REG_CMD_SEND_EN, ATI_REG_CMD_SPDF_OUT_EN, ATI_REG_IER, ATI_REG_IER_SET_BUS_BUSY, ATI_REG_LINKPTR_EN, atiixp_buildsgdt(), atiixp_chan_active, atiixp_disable_dma(), atiixp_enable_dma(), atiixp_flush_dma(), atiixp_lock, atiixp_poll_callback(), atiixp_rd, atiixp_unlock, atiixp_wr, atiixp_chinfo::blksz, atiixp_chinfo::buffer, data, atiixp_info::dev, atiixp_chinfo::flags, go, atiixp_chinfo::linkptr_bit, atiixp_chinfo::parent, atiixp_info::pch, PCMTRIG_ABORT, PCMTRIG_COMMON, PCMTRIG_START, PCMTRIG_STOP, atiixp_info::poll_ticks, atiixp_info::poll_timer, atiixp_info::polling, atiixp_chinfo::prevptr, atiixp_chinfo::ptr, atiixp_info::rch, atiixp_chinfo::sgd_addr, sndbuf_getalign(), sndbuf_getspd(), and value.
Referenced by atiixp_pci_resume(), and atiixp_pci_suspend().
|
static |
Definition at line 1004 of file atiixp.c.
References AC97_CREATE, AC97_F_EAPD_INV, ac97_getflags(), ac97_getmixerclass(), ac97_setflags(), ATI_IXP_NPCHAN, ATI_IXP_NRCHAN, ATI_REG_ISR_CODEC0_NOT_READY, ATI_REG_ISR_CODEC1_NOT_READY, ATI_REG_ISR_CODEC2_NOT_READY, atiixp_disable_interrupts(), atiixp_enable_interrupts(), atiixp_lock, atiixp_release_resource(), atiixp_unlock, atiixp_info::codec, atiixp_info::codec_found, atiixp_info::codec_idx, atiixp_info::codec_not_ready_bits, atiixp_info::delayed_attach, atiixp_info::dev, atiixp_info::irq, atiixp_info::lock, max, mixer_init(), pcm_addchan(), PCM_KLDSTRING, pcm_register(), pcm_setstatus(), PCMDIR_PLAY, PCMDIR_REC, atiixp_info::polling, atiixp_info::reg, SND_STATUSLEN, status, and sysctl_atiixp_polling().
Referenced by atiixp_pci_attach().
|
static |
Definition at line 937 of file atiixp.c.
References ATI_REG_CMD, ATI_REG_CMD_IN_DMA_EN, ATI_REG_CMD_OUT_DMA_EN, ATI_REG_CMD_SPDF_OUT_EN, ATI_REG_IER, atiixp_disable_interrupts(), atiixp_lock, atiixp_rd, atiixp_reset_aclink(), atiixp_unlock, atiixp_wr, CODEC_CHECK_BITS, atiixp_info::codec_not_ready_bits, and value.
Referenced by atiixp_pci_attach().
|
static |
Definition at line 348 of file atiixp.c.
References ATI_REG_CMD, atiixp_rd, atiixp_wr, atiixp_chinfo::enable_bit, atiixp_chinfo::parent, and value.
Referenced by atiixp_chan_init(), and atiixp_chan_trigger().
|
static |
Definition at line 251 of file atiixp.c.
References ATI_REG_IER, ATI_REG_ISR, and atiixp_wr.
Referenced by atiixp_chip_post_init(), atiixp_chip_pre_init(), atiixp_pci_detach(), atiixp_pci_suspend(), and sysctl_atiixp_polling().
|
static |
Definition at line 930 of file atiixp.c.
References atiixp_info::sgd_addr.
Referenced by atiixp_pci_attach().
|
static |
Definition at line 608 of file atiixp.c.
References addr, ATI_IXP_DMA_RETRY_MAX, atiixp_rd, atiixp_chinfo::blkcnt, atiixp_chinfo::blksz, blksz, atiixp_chinfo::buffer, atiixp_info::dev, atiixp_chinfo::dir, atiixp_chinfo::dt_cur_bit, atiixp_chinfo::parent, PCMDIR_PLAY, atiixp_chinfo::prevptr, atiixp_chinfo::ptr, reg, retry, and sndbuf_getbufaddr().
Referenced by atiixp_chan_getptr(), and atiixp_poll_channel().
|
static |
Definition at line 336 of file atiixp.c.
References ATI_REG_CMD, atiixp_rd, atiixp_wr, atiixp_chinfo::enable_bit, atiixp_chinfo::parent, and value.
Referenced by atiixp_chan_trigger().
|
static |
Definition at line 220 of file atiixp.c.
References ATI_REG_IER, ATI_REG_IER_IN_XRUN_EN, ATI_REG_IER_IO_STATUS_EN, ATI_REG_IER_OUT_XRUN_EN, ATI_REG_IER_SPDF_STATUS_EN, ATI_REG_IER_SPDF_XRUN_EN, ATI_REG_ISR, atiixp_rd, atiixp_wr, and value.
Referenced by atiixp_chip_post_init(), atiixp_pci_resume(), and sysctl_atiixp_polling().
|
static |
Definition at line 330 of file atiixp.c.
References ATI_REG_FIFO_FLUSH, atiixp_wr, atiixp_chinfo::flush_bit, and atiixp_chinfo::parent.
Referenced by atiixp_chan_trigger().
|
static |
Definition at line 871 of file atiixp.c.
References ATI_IXP_CHN_RUNNING, ATI_REG_IER, ATI_REG_ISR, ATI_REG_ISR_IN_STATUS, ATI_REG_ISR_IN_XRUN, ATI_REG_ISR_OUT_STATUS, ATI_REG_ISR_OUT_XRUN, atiixp_lock, atiixp_rd, atiixp_unlock, atiixp_wr, atiixp_chinfo::channel, chn_intr(), CODEC_CHECK_BITS, atiixp_info::codec_not_ready_bits, atiixp_info::dev, enable, atiixp_chinfo::flags, atiixp_info::pch, atiixp_info::polling, atiixp_info::rch, status, and trigger.
Referenced by atiixp_pci_attach().
|
static |
Definition at line 1190 of file atiixp.c.
References ATI_IXP_BLK_ALIGN, ATI_IXP_BLK_MIN, ATI_IXP_BUFSZ_DEFAULT, ATI_IXP_BUFSZ_MAX, ATI_IXP_BUFSZ_MIN, ATI_IXP_DMA_CHSEGS, ATI_IXP_DMA_CHSEGS_MAX, ATI_IXP_DMA_CHSEGS_MIN, ATI_IXP_NCHANS, atiixp_chip_post_init(), atiixp_chip_pre_init(), atiixp_dma_cb(), atiixp_intr(), atiixp_release_resource(), atiixp_info::blkcnt, atiixp_info::bufsz, atiixp_info::delayed_attach, atiixp_info::dev, dev, atiixp_info::ih, atiixp_info::irq, atiixp_info::irqid, atiixp_info::lock, atiixp_info::parent_dmat, PCIR_BAR, pcm_getbuffersize(), atiixp_info::poll_ticks, atiixp_info::poll_timer, atiixp_info::polling, atiixp_info::reg, atiixp_info::regid, atiixp_info::regtype, atiixp_info::sgd_dmamap, atiixp_info::sgd_dmat, atiixp_info::sgd_table, atiixp_info::sh, snd_mtxcreate(), snd_setup_intr(), and atiixp_info::st.
|
static |
Definition at line 1312 of file atiixp.c.
References atiixp_disable_interrupts(), atiixp_release_resource(), atiixp_info::codec, dev, pcm_getdevinfo(), pcm_unregister(), r, atiixp_info::sh, and atiixp_info::st.
|
static |
|
static |
Definition at line 1364 of file atiixp.c.
References ATI_IXP_CHN_SUSPEND, atiixp_chan_setformat(), atiixp_chan_trigger(), atiixp_enable_interrupts(), atiixp_lock, atiixp_reset_aclink(), atiixp_unlock, atiixp_chinfo::channel, dev, atiixp_chinfo::flags, atiixp_chinfo::fmt, mixer_reinit(), atiixp_info::pch, pcm_getdevinfo(), PCMTRIG_START, atiixp_info::polling, and atiixp_info::rch.
|
static |
Definition at line 1333 of file atiixp.c.
References ATI_IXP_CHN_RUNNING, ATI_IXP_CHN_SUSPEND, ATI_REG_CMD, ATI_REG_CMD_AC_RESET, ATI_REG_CMD_POWERDOWN, atiixp_chan_trigger(), atiixp_disable_interrupts(), atiixp_lock, atiixp_rd, atiixp_unlock, atiixp_wr, dev, atiixp_chinfo::flags, atiixp_info::pch, pcm_getdevinfo(), PCMTRIG_STOP, atiixp_info::rch, and value.
|
static |
Definition at line 690 of file atiixp.c.
References atiixp_chan_active, atiixp_lock, atiixp_poll_callback(), atiixp_poll_channel(), atiixp_unlock, atiixp_chinfo::channel, chn_intr(), atiixp_info::pch, atiixp_info::poll_timer, atiixp_info::polling, atiixp_info::rch, and trigger.
Referenced by atiixp_chan_trigger(), and atiixp_poll_callback().
|
static |
Definition at line 663 of file atiixp.c.
References ATI_IXP_CHN_RUNNING, atiixp_dmapos(), atiixp_chinfo::blkcnt, atiixp_chinfo::blksz, blksz, atiixp_chinfo::flags, atiixp_chinfo::prevptr, and atiixp_chinfo::ptr.
Referenced by atiixp_poll_callback().
|
static |
Definition at line 378 of file atiixp.c.
References ATI_REG_PHYS_IN_ADDR, ATI_REG_PHYS_IN_DATA_SHIFT, ATI_REG_PHYS_IN_READ_FLAG, ATI_REG_PHYS_OUT_ADDR, ATI_REG_PHYS_OUT_ADDR_EN, ATI_REG_PHYS_OUT_ADDR_SHIFT, ATI_REG_PHYS_OUT_RW, atiixp_rd, atiixp_waitready_codec(), atiixp_wr, atiixp_info::codec_idx, data, atiixp_info::dev, devinfo, and reg.
|
static |
Definition at line 1120 of file atiixp.c.
References ac97_destroy(), atiixp_lock, atiixp_unlock, atiixp_info::codec, atiixp_info::dev, free, atiixp_info::ih, atiixp_info::irq, atiixp_info::irqid, atiixp_info::lock, atiixp_info::parent_dmat, atiixp_info::poll_timer, atiixp_info::polling, atiixp_info::reg, atiixp_info::regid, atiixp_info::registered_channels, atiixp_info::regtype, atiixp_info::sgd_addr, atiixp_info::sgd_dmamap, atiixp_info::sgd_dmat, atiixp_info::sgd_table, and snd_mtxfree().
Referenced by atiixp_chip_post_init(), atiixp_pci_attach(), and atiixp_pci_detach().
|
static |
Definition at line 261 of file atiixp.c.
References ATI_REG_CMD, ATI_REG_CMD_AC_RESET, ATI_REG_CMD_AC_SOFT_RESET, ATI_REG_CMD_AC_SYNC, ATI_REG_CMD_ACLINK_ACTIVE, ATI_REG_CMD_POWERDOWN, atiixp_rd, atiixp_wr, atiixp_info::dev, and value.
Referenced by atiixp_chip_pre_init(), and atiixp_pci_resume().
|
static |
Definition at line 363 of file atiixp.c.
References ATI_REG_PHYS_OUT_ADDR, ATI_REG_PHYS_OUT_ADDR_EN, and atiixp_rd.
Referenced by atiixp_rdcd(), and atiixp_wrcd().
|
static |
Definition at line 410 of file atiixp.c.
References ATI_REG_PHYS_OUT_ADDR, ATI_REG_PHYS_OUT_ADDR_EN, ATI_REG_PHYS_OUT_ADDR_SHIFT, ATI_REG_PHYS_OUT_DATA_SHIFT, atiixp_waitready_codec(), atiixp_wr, atiixp_info::codec_idx, data, devinfo, and reg.
CHANNEL_DECLARE | ( | atiixp_chan | ) |
DRIVER_MODULE | ( | snd_atiixp | , |
pci | , | ||
atiixp_driver | , | ||
pcm_devclass | , | ||
0 | , | ||
0 | |||
) |
MODULE_DEPEND | ( | snd_atiixp | , |
sound | , | ||
SOUND_MINVER | , | ||
SOUND_PREFVER | , | ||
SOUND_MAXVER | |||
) |
MODULE_VERSION | ( | snd_atiixp | , |
1 | |||
) |
SND_DECLARE_FILE | ( | "$FreeBSD$" | ) |
|
static |
Definition at line 964 of file atiixp.c.
References atiixp_chan_active, atiixp_disable_interrupts(), atiixp_enable_interrupts(), atiixp_lock, atiixp_unlock, dev, pcm_getdevinfo(), atiixp_info::polling, req, and val.
Referenced by atiixp_chip_post_init().
|
static |
|
static |
Definition at line 165 of file atiixp.c.
Referenced by atiixp_chan_getcaps().
|
static |
|
static |
|
static |
|
static |
|
static |
const struct { ... } atiixp_hw[] |
Referenced by atiixp_pci_probe().
|
static |
char* desc |
Definition at line 174 of file atiixp.c.
Referenced by ac97_initmixer(), atiixp_pci_probe(), chn_addfeeder(), emu_pci_probe(), feeder_build_eq(), feeder_build_format(), feeder_build_matrix(), feeder_build_mixer(), feeder_build_rate(), feeder_build_volume(), feeder_create(), feeder_getclass(), hdspe_pcm_attach(), mixer_create(), mixer_obj_create(), snd_mtxcreate(), sndbuf_create(), sndstat_dsp_unpack_nvlist(), uaudio20_mixer_add_feature(), uaudio20_mixer_add_selector(), uaudio20_mixer_verify_desc(), uaudio_chan_fill_info_sub(), uaudio_mixer_add_feature(), uaudio_mixer_add_selector(), uaudio_mixer_controls_create_ftu(), uaudio_mixer_fill_info(), and uaudio_mixer_verify_desc().
uint16_t devid |
Definition at line 173 of file atiixp.c.
Referenced by atiixp_pci_probe(), csa_findcard(), es1371_init(), es_init_sysctls(), es_pci_attach(), hdac_attach(), ich_pci_attach(), and ich_pci_probe().
uint16_t vendor |
Definition at line 172 of file atiixp.c.
Referenced by atiixp_pci_probe(), emu_pci_probe(), ich_pci_attach(), and ich_pci_probe().