cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

sis7019.c (38666B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 *  Driver for SiS7019 Audio Accelerator
      4 *
      5 *  Copyright (C) 2004-2007, David Dillow
      6 *  Written by David Dillow <dave@thedillows.org>
      7 *  Inspired by the Trident 4D-WaveDX/NX driver.
      8 *
      9 *  All rights reserved.
     10 */
     11
     12#include <linux/init.h>
     13#include <linux/pci.h>
     14#include <linux/time.h>
     15#include <linux/slab.h>
     16#include <linux/module.h>
     17#include <linux/interrupt.h>
     18#include <linux/delay.h>
     19#include <sound/core.h>
     20#include <sound/ac97_codec.h>
     21#include <sound/initval.h>
     22#include "sis7019.h"
     23
     24MODULE_AUTHOR("David Dillow <dave@thedillows.org>");
     25MODULE_DESCRIPTION("SiS7019");
     26MODULE_LICENSE("GPL");
     27
     28static int index = SNDRV_DEFAULT_IDX1;	/* Index 0-MAX */
     29static char *id = SNDRV_DEFAULT_STR1;	/* ID for this card */
     30static bool enable = 1;
     31static int codecs = 1;
     32
     33module_param(index, int, 0444);
     34MODULE_PARM_DESC(index, "Index value for SiS7019 Audio Accelerator.");
     35module_param(id, charp, 0444);
     36MODULE_PARM_DESC(id, "ID string for SiS7019 Audio Accelerator.");
     37module_param(enable, bool, 0444);
     38MODULE_PARM_DESC(enable, "Enable SiS7019 Audio Accelerator.");
     39module_param(codecs, int, 0444);
     40MODULE_PARM_DESC(codecs, "Set bit to indicate that codec number is expected to be present (default 1)");
     41
     42static const struct pci_device_id snd_sis7019_ids[] = {
     43	{ PCI_DEVICE(PCI_VENDOR_ID_SI, 0x7019) },
     44	{ 0, }
     45};
     46
     47MODULE_DEVICE_TABLE(pci, snd_sis7019_ids);
     48
     49/* There are three timing modes for the voices.
     50 *
     51 * For both playback and capture, when the buffer is one or two periods long,
     52 * we use the hardware's built-in Mid-Loop Interrupt and End-Loop Interrupt
     53 * to let us know when the periods have ended.
     54 *
     55 * When performing playback with more than two periods per buffer, we set
     56 * the "Stop Sample Offset" and tell the hardware to interrupt us when we
     57 * reach it. We then update the offset and continue on until we are
     58 * interrupted for the next period.
     59 *
     60 * Capture channels do not have a SSO, so we allocate a playback channel to
     61 * use as a timer for the capture periods. We use the SSO on the playback
     62 * channel to clock out virtual periods, and adjust the virtual period length
     63 * to maintain synchronization. This algorithm came from the Trident driver.
     64 *
     65 * FIXME: It'd be nice to make use of some of the synth features in the
     66 * hardware, but a woeful lack of documentation is a significant roadblock.
     67 */
     68struct voice {
     69	u16 flags;
     70#define 	VOICE_IN_USE		1
     71#define 	VOICE_CAPTURE		2
     72#define 	VOICE_SSO_TIMING	4
     73#define 	VOICE_SYNC_TIMING	8
     74	u16 sync_cso;
     75	u16 period_size;
     76	u16 buffer_size;
     77	u16 sync_period_size;
     78	u16 sync_buffer_size;
     79	u32 sso;
     80	u32 vperiod;
     81	struct snd_pcm_substream *substream;
     82	struct voice *timing;
     83	void __iomem *ctrl_base;
     84	void __iomem *wave_base;
     85	void __iomem *sync_base;
     86	int num;
     87};
     88
     89/* We need four pages to store our wave parameters during a suspend. If
     90 * we're not doing power management, we still need to allocate a page
     91 * for the silence buffer.
     92 */
     93#ifdef CONFIG_PM_SLEEP
     94#define SIS_SUSPEND_PAGES	4
     95#else
     96#define SIS_SUSPEND_PAGES	1
     97#endif
     98
     99struct sis7019 {
    100	unsigned long ioport;
    101	void __iomem *ioaddr;
    102	int irq;
    103	int codecs_present;
    104
    105	struct pci_dev *pci;
    106	struct snd_pcm *pcm;
    107	struct snd_card *card;
    108	struct snd_ac97 *ac97[3];
    109
    110	/* Protect against more than one thread hitting the AC97
    111	 * registers (in a more polite manner than pounding the hardware
    112	 * semaphore)
    113	 */
    114	struct mutex ac97_mutex;
    115
    116	/* voice_lock protects allocation/freeing of the voice descriptions
    117	 */
    118	spinlock_t voice_lock;
    119
    120	struct voice voices[64];
    121	struct voice capture_voice;
    122
    123	/* Allocate pages to store the internal wave state during
    124	 * suspends. When we're operating, this can be used as a silence
    125	 * buffer for a timing channel.
    126	 */
    127	void *suspend_state[SIS_SUSPEND_PAGES];
    128
    129	int silence_users;
    130	dma_addr_t silence_dma_addr;
    131};
    132
    133/* These values are also used by the module param 'codecs' to indicate
    134 * which codecs should be present.
    135 */
    136#define SIS_PRIMARY_CODEC_PRESENT	0x0001
    137#define SIS_SECONDARY_CODEC_PRESENT	0x0002
    138#define SIS_TERTIARY_CODEC_PRESENT	0x0004
    139
    140/* The HW offset parameters (Loop End, Stop Sample, End Sample) have a
    141 * documented range of 8-0xfff8 samples. Given that they are 0-based,
    142 * that places our period/buffer range at 9-0xfff9 samples. That makes the
    143 * max buffer size 0xfff9 samples * 2 channels * 2 bytes per sample, and
    144 * max samples / min samples gives us the max periods in a buffer.
    145 *
    146 * We'll add a constraint upon open that limits the period and buffer sample
    147 * size to values that are legal for the hardware.
    148 */
    149static const struct snd_pcm_hardware sis_playback_hw_info = {
    150	.info = (SNDRV_PCM_INFO_MMAP |
    151		 SNDRV_PCM_INFO_MMAP_VALID |
    152		 SNDRV_PCM_INFO_INTERLEAVED |
    153		 SNDRV_PCM_INFO_BLOCK_TRANSFER |
    154		 SNDRV_PCM_INFO_SYNC_START |
    155		 SNDRV_PCM_INFO_RESUME),
    156	.formats = (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_U8 |
    157		    SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_U16_LE),
    158	.rates = SNDRV_PCM_RATE_8000_48000 | SNDRV_PCM_RATE_CONTINUOUS,
    159	.rate_min = 4000,
    160	.rate_max = 48000,
    161	.channels_min = 1,
    162	.channels_max = 2,
    163	.buffer_bytes_max = (0xfff9 * 4),
    164	.period_bytes_min = 9,
    165	.period_bytes_max = (0xfff9 * 4),
    166	.periods_min = 1,
    167	.periods_max = (0xfff9 / 9),
    168};
    169
    170static const struct snd_pcm_hardware sis_capture_hw_info = {
    171	.info = (SNDRV_PCM_INFO_MMAP |
    172		 SNDRV_PCM_INFO_MMAP_VALID |
    173		 SNDRV_PCM_INFO_INTERLEAVED |
    174		 SNDRV_PCM_INFO_BLOCK_TRANSFER |
    175		 SNDRV_PCM_INFO_SYNC_START |
    176		 SNDRV_PCM_INFO_RESUME),
    177	.formats = (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_U8 |
    178		    SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_U16_LE),
    179	.rates = SNDRV_PCM_RATE_48000,
    180	.rate_min = 4000,
    181	.rate_max = 48000,
    182	.channels_min = 1,
    183	.channels_max = 2,
    184	.buffer_bytes_max = (0xfff9 * 4),
    185	.period_bytes_min = 9,
    186	.period_bytes_max = (0xfff9 * 4),
    187	.periods_min = 1,
    188	.periods_max = (0xfff9 / 9),
    189};
    190
    191static void sis_update_sso(struct voice *voice, u16 period)
    192{
    193	void __iomem *base = voice->ctrl_base;
    194
    195	voice->sso += period;
    196	if (voice->sso >= voice->buffer_size)
    197		voice->sso -= voice->buffer_size;
    198
    199	/* Enforce the documented hardware minimum offset */
    200	if (voice->sso < 8)
    201		voice->sso = 8;
    202
    203	/* The SSO is in the upper 16 bits of the register. */
    204	writew(voice->sso & 0xffff, base + SIS_PLAY_DMA_SSO_ESO + 2);
    205}
    206
    207static void sis_update_voice(struct voice *voice)
    208{
    209	if (voice->flags & VOICE_SSO_TIMING) {
    210		sis_update_sso(voice, voice->period_size);
    211	} else if (voice->flags & VOICE_SYNC_TIMING) {
    212		int sync;
    213
    214		/* If we've not hit the end of the virtual period, update
    215		 * our records and keep going.
    216		 */
    217		if (voice->vperiod > voice->period_size) {
    218			voice->vperiod -= voice->period_size;
    219			if (voice->vperiod < voice->period_size)
    220				sis_update_sso(voice, voice->vperiod);
    221			else
    222				sis_update_sso(voice, voice->period_size);
    223			return;
    224		}
    225
    226		/* Calculate our relative offset between the target and
    227		 * the actual CSO value. Since we're operating in a loop,
    228		 * if the value is more than half way around, we can
    229		 * consider ourselves wrapped.
    230		 */
    231		sync = voice->sync_cso;
    232		sync -= readw(voice->sync_base + SIS_CAPTURE_DMA_FORMAT_CSO);
    233		if (sync > (voice->sync_buffer_size / 2))
    234			sync -= voice->sync_buffer_size;
    235
    236		/* If sync is positive, then we interrupted too early, and
    237		 * we'll need to come back in a few samples and try again.
    238		 * There's a minimum wait, as it takes some time for the DMA
    239		 * engine to startup, etc...
    240		 */
    241		if (sync > 0) {
    242			if (sync < 16)
    243				sync = 16;
    244			sis_update_sso(voice, sync);
    245			return;
    246		}
    247
    248		/* Ok, we interrupted right on time, or (hopefully) just
    249		 * a bit late. We'll adjst our next waiting period based
    250		 * on how close we got.
    251		 *
    252		 * We need to stay just behind the actual channel to ensure
    253		 * it really is past a period when we get our interrupt --
    254		 * otherwise we'll fall into the early code above and have
    255		 * a minimum wait time, which makes us quite late here,
    256		 * eating into the user's time to refresh the buffer, esp.
    257		 * if using small periods.
    258		 *
    259		 * If we're less than 9 samples behind, we're on target.
    260		 * Otherwise, shorten the next vperiod by the amount we've
    261		 * been delayed.
    262		 */
    263		if (sync > -9)
    264			voice->vperiod = voice->sync_period_size + 1;
    265		else
    266			voice->vperiod = voice->sync_period_size + sync + 10;
    267
    268		if (voice->vperiod < voice->buffer_size) {
    269			sis_update_sso(voice, voice->vperiod);
    270			voice->vperiod = 0;
    271		} else
    272			sis_update_sso(voice, voice->period_size);
    273
    274		sync = voice->sync_cso + voice->sync_period_size;
    275		if (sync >= voice->sync_buffer_size)
    276			sync -= voice->sync_buffer_size;
    277		voice->sync_cso = sync;
    278	}
    279
    280	snd_pcm_period_elapsed(voice->substream);
    281}
    282
    283static void sis_voice_irq(u32 status, struct voice *voice)
    284{
    285	int bit;
    286
    287	while (status) {
    288		bit = __ffs(status);
    289		status >>= bit + 1;
    290		voice += bit;
    291		sis_update_voice(voice);
    292		voice++;
    293	}
    294}
    295
    296static irqreturn_t sis_interrupt(int irq, void *dev)
    297{
    298	struct sis7019 *sis = dev;
    299	unsigned long io = sis->ioport;
    300	struct voice *voice;
    301	u32 intr, status;
    302
    303	/* We only use the DMA interrupts, and we don't enable any other
    304	 * source of interrupts. But, it is possible to see an interrupt
    305	 * status that didn't actually interrupt us, so eliminate anything
    306	 * we're not expecting to avoid falsely claiming an IRQ, and an
    307	 * ensuing endless loop.
    308	 */
    309	intr = inl(io + SIS_GISR);
    310	intr &= SIS_GISR_AUDIO_PLAY_DMA_IRQ_STATUS |
    311		SIS_GISR_AUDIO_RECORD_DMA_IRQ_STATUS;
    312	if (!intr)
    313		return IRQ_NONE;
    314
    315	do {
    316		status = inl(io + SIS_PISR_A);
    317		if (status) {
    318			sis_voice_irq(status, sis->voices);
    319			outl(status, io + SIS_PISR_A);
    320		}
    321
    322		status = inl(io + SIS_PISR_B);
    323		if (status) {
    324			sis_voice_irq(status, &sis->voices[32]);
    325			outl(status, io + SIS_PISR_B);
    326		}
    327
    328		status = inl(io + SIS_RISR);
    329		if (status) {
    330			voice = &sis->capture_voice;
    331			if (!voice->timing)
    332				snd_pcm_period_elapsed(voice->substream);
    333
    334			outl(status, io + SIS_RISR);
    335		}
    336
    337		outl(intr, io + SIS_GISR);
    338		intr = inl(io + SIS_GISR);
    339		intr &= SIS_GISR_AUDIO_PLAY_DMA_IRQ_STATUS |
    340			SIS_GISR_AUDIO_RECORD_DMA_IRQ_STATUS;
    341	} while (intr);
    342
    343	return IRQ_HANDLED;
    344}
    345
    346static u32 sis_rate_to_delta(unsigned int rate)
    347{
    348	u32 delta;
    349
    350	/* This was copied from the trident driver, but it seems its gotten
    351	 * around a bit... nevertheless, it works well.
    352	 *
    353	 * We special case 44100 and 8000 since rounding with the equation
    354	 * does not give us an accurate enough value. For 11025 and 22050
    355	 * the equation gives us the best answer. All other frequencies will
    356	 * also use the equation. JDW
    357	 */
    358	if (rate == 44100)
    359		delta = 0xeb3;
    360	else if (rate == 8000)
    361		delta = 0x2ab;
    362	else if (rate == 48000)
    363		delta = 0x1000;
    364	else
    365		delta = DIV_ROUND_CLOSEST(rate << 12, 48000) & 0x0000ffff;
    366	return delta;
    367}
    368
    369static void __sis_map_silence(struct sis7019 *sis)
    370{
    371	/* Helper function: must hold sis->voice_lock on entry */
    372	if (!sis->silence_users)
    373		sis->silence_dma_addr = dma_map_single(&sis->pci->dev,
    374						sis->suspend_state[0],
    375						4096, DMA_TO_DEVICE);
    376	sis->silence_users++;
    377}
    378
    379static void __sis_unmap_silence(struct sis7019 *sis)
    380{
    381	/* Helper function: must hold sis->voice_lock on entry */
    382	sis->silence_users--;
    383	if (!sis->silence_users)
    384		dma_unmap_single(&sis->pci->dev, sis->silence_dma_addr, 4096,
    385					DMA_TO_DEVICE);
    386}
    387
    388static void sis_free_voice(struct sis7019 *sis, struct voice *voice)
    389{
    390	unsigned long flags;
    391
    392	spin_lock_irqsave(&sis->voice_lock, flags);
    393	if (voice->timing) {
    394		__sis_unmap_silence(sis);
    395		voice->timing->flags &= ~(VOICE_IN_USE | VOICE_SSO_TIMING |
    396						VOICE_SYNC_TIMING);
    397		voice->timing = NULL;
    398	}
    399	voice->flags &= ~(VOICE_IN_USE | VOICE_SSO_TIMING | VOICE_SYNC_TIMING);
    400	spin_unlock_irqrestore(&sis->voice_lock, flags);
    401}
    402
    403static struct voice *__sis_alloc_playback_voice(struct sis7019 *sis)
    404{
    405	/* Must hold the voice_lock on entry */
    406	struct voice *voice;
    407	int i;
    408
    409	for (i = 0; i < 64; i++) {
    410		voice = &sis->voices[i];
    411		if (voice->flags & VOICE_IN_USE)
    412			continue;
    413		voice->flags |= VOICE_IN_USE;
    414		goto found_one;
    415	}
    416	voice = NULL;
    417
    418found_one:
    419	return voice;
    420}
    421
    422static struct voice *sis_alloc_playback_voice(struct sis7019 *sis)
    423{
    424	struct voice *voice;
    425	unsigned long flags;
    426
    427	spin_lock_irqsave(&sis->voice_lock, flags);
    428	voice = __sis_alloc_playback_voice(sis);
    429	spin_unlock_irqrestore(&sis->voice_lock, flags);
    430
    431	return voice;
    432}
    433
    434static int sis_alloc_timing_voice(struct snd_pcm_substream *substream,
    435					struct snd_pcm_hw_params *hw_params)
    436{
    437	struct sis7019 *sis = snd_pcm_substream_chip(substream);
    438	struct snd_pcm_runtime *runtime = substream->runtime;
    439	struct voice *voice = runtime->private_data;
    440	unsigned int period_size, buffer_size;
    441	unsigned long flags;
    442	int needed;
    443
    444	/* If there are one or two periods per buffer, we don't need a
    445	 * timing voice, as we can use the capture channel's interrupts
    446	 * to clock out the periods.
    447	 */
    448	period_size = params_period_size(hw_params);
    449	buffer_size = params_buffer_size(hw_params);
    450	needed = (period_size != buffer_size &&
    451			period_size != (buffer_size / 2));
    452
    453	if (needed && !voice->timing) {
    454		spin_lock_irqsave(&sis->voice_lock, flags);
    455		voice->timing = __sis_alloc_playback_voice(sis);
    456		if (voice->timing)
    457			__sis_map_silence(sis);
    458		spin_unlock_irqrestore(&sis->voice_lock, flags);
    459		if (!voice->timing)
    460			return -ENOMEM;
    461		voice->timing->substream = substream;
    462	} else if (!needed && voice->timing) {
    463		sis_free_voice(sis, voice);
    464		voice->timing = NULL;
    465	}
    466
    467	return 0;
    468}
    469
    470static int sis_playback_open(struct snd_pcm_substream *substream)
    471{
    472	struct sis7019 *sis = snd_pcm_substream_chip(substream);
    473	struct snd_pcm_runtime *runtime = substream->runtime;
    474	struct voice *voice;
    475
    476	voice = sis_alloc_playback_voice(sis);
    477	if (!voice)
    478		return -EAGAIN;
    479
    480	voice->substream = substream;
    481	runtime->private_data = voice;
    482	runtime->hw = sis_playback_hw_info;
    483	snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_PERIOD_SIZE,
    484						9, 0xfff9);
    485	snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_SIZE,
    486						9, 0xfff9);
    487	snd_pcm_set_sync(substream);
    488	return 0;
    489}
    490
    491static int sis_substream_close(struct snd_pcm_substream *substream)
    492{
    493	struct sis7019 *sis = snd_pcm_substream_chip(substream);
    494	struct snd_pcm_runtime *runtime = substream->runtime;
    495	struct voice *voice = runtime->private_data;
    496
    497	sis_free_voice(sis, voice);
    498	return 0;
    499}
    500
    501static int sis_pcm_playback_prepare(struct snd_pcm_substream *substream)
    502{
    503	struct snd_pcm_runtime *runtime = substream->runtime;
    504	struct voice *voice = runtime->private_data;
    505	void __iomem *ctrl_base = voice->ctrl_base;
    506	void __iomem *wave_base = voice->wave_base;
    507	u32 format, dma_addr, control, sso_eso, delta, reg;
    508	u16 leo;
    509
    510	/* We rely on the PCM core to ensure that the parameters for this
    511	 * substream do not change on us while we're programming the HW.
    512	 */
    513	format = 0;
    514	if (snd_pcm_format_width(runtime->format) == 8)
    515		format |= SIS_PLAY_DMA_FORMAT_8BIT;
    516	if (!snd_pcm_format_signed(runtime->format))
    517		format |= SIS_PLAY_DMA_FORMAT_UNSIGNED;
    518	if (runtime->channels == 1)
    519		format |= SIS_PLAY_DMA_FORMAT_MONO;
    520
    521	/* The baseline setup is for a single period per buffer, and
    522	 * we add bells and whistles as needed from there.
    523	 */
    524	dma_addr = runtime->dma_addr;
    525	leo = runtime->buffer_size - 1;
    526	control = leo | SIS_PLAY_DMA_LOOP | SIS_PLAY_DMA_INTR_AT_LEO;
    527	sso_eso = leo;
    528
    529	if (runtime->period_size == (runtime->buffer_size / 2)) {
    530		control |= SIS_PLAY_DMA_INTR_AT_MLP;
    531	} else if (runtime->period_size != runtime->buffer_size) {
    532		voice->flags |= VOICE_SSO_TIMING;
    533		voice->sso = runtime->period_size - 1;
    534		voice->period_size = runtime->period_size;
    535		voice->buffer_size = runtime->buffer_size;
    536
    537		control &= ~SIS_PLAY_DMA_INTR_AT_LEO;
    538		control |= SIS_PLAY_DMA_INTR_AT_SSO;
    539		sso_eso |= (runtime->period_size - 1) << 16;
    540	}
    541
    542	delta = sis_rate_to_delta(runtime->rate);
    543
    544	/* Ok, we're ready to go, set up the channel.
    545	 */
    546	writel(format, ctrl_base + SIS_PLAY_DMA_FORMAT_CSO);
    547	writel(dma_addr, ctrl_base + SIS_PLAY_DMA_BASE);
    548	writel(control, ctrl_base + SIS_PLAY_DMA_CONTROL);
    549	writel(sso_eso, ctrl_base + SIS_PLAY_DMA_SSO_ESO);
    550
    551	for (reg = 0; reg < SIS_WAVE_SIZE; reg += 4)
    552		writel(0, wave_base + reg);
    553
    554	writel(SIS_WAVE_GENERAL_WAVE_VOLUME, wave_base + SIS_WAVE_GENERAL);
    555	writel(delta << 16, wave_base + SIS_WAVE_GENERAL_ARTICULATION);
    556	writel(SIS_WAVE_CHANNEL_CONTROL_FIRST_SAMPLE |
    557			SIS_WAVE_CHANNEL_CONTROL_AMP_ENABLE |
    558			SIS_WAVE_CHANNEL_CONTROL_INTERPOLATE_ENABLE,
    559			wave_base + SIS_WAVE_CHANNEL_CONTROL);
    560
    561	/* Force PCI writes to post. */
    562	readl(ctrl_base);
    563
    564	return 0;
    565}
    566
    567static int sis_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
    568{
    569	struct sis7019 *sis = snd_pcm_substream_chip(substream);
    570	unsigned long io = sis->ioport;
    571	struct snd_pcm_substream *s;
    572	struct voice *voice;
    573	void *chip;
    574	int starting;
    575	u32 record = 0;
    576	u32 play[2] = { 0, 0 };
    577
    578	/* No locks needed, as the PCM core will hold the locks on the
    579	 * substreams, and the HW will only start/stop the indicated voices
    580	 * without changing the state of the others.
    581	 */
    582	switch (cmd) {
    583	case SNDRV_PCM_TRIGGER_START:
    584	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
    585	case SNDRV_PCM_TRIGGER_RESUME:
    586		starting = 1;
    587		break;
    588	case SNDRV_PCM_TRIGGER_STOP:
    589	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
    590	case SNDRV_PCM_TRIGGER_SUSPEND:
    591		starting = 0;
    592		break;
    593	default:
    594		return -EINVAL;
    595	}
    596
    597	snd_pcm_group_for_each_entry(s, substream) {
    598		/* Make sure it is for us... */
    599		chip = snd_pcm_substream_chip(s);
    600		if (chip != sis)
    601			continue;
    602
    603		voice = s->runtime->private_data;
    604		if (voice->flags & VOICE_CAPTURE) {
    605			record |= 1 << voice->num;
    606			voice = voice->timing;
    607		}
    608
    609		/* voice could be NULL if this a recording stream, and it
    610		 * doesn't have an external timing channel.
    611		 */
    612		if (voice)
    613			play[voice->num / 32] |= 1 << (voice->num & 0x1f);
    614
    615		snd_pcm_trigger_done(s, substream);
    616	}
    617
    618	if (starting) {
    619		if (record)
    620			outl(record, io + SIS_RECORD_START_REG);
    621		if (play[0])
    622			outl(play[0], io + SIS_PLAY_START_A_REG);
    623		if (play[1])
    624			outl(play[1], io + SIS_PLAY_START_B_REG);
    625	} else {
    626		if (record)
    627			outl(record, io + SIS_RECORD_STOP_REG);
    628		if (play[0])
    629			outl(play[0], io + SIS_PLAY_STOP_A_REG);
    630		if (play[1])
    631			outl(play[1], io + SIS_PLAY_STOP_B_REG);
    632	}
    633	return 0;
    634}
    635
    636static snd_pcm_uframes_t sis_pcm_pointer(struct snd_pcm_substream *substream)
    637{
    638	struct snd_pcm_runtime *runtime = substream->runtime;
    639	struct voice *voice = runtime->private_data;
    640	u32 cso;
    641
    642	cso = readl(voice->ctrl_base + SIS_PLAY_DMA_FORMAT_CSO);
    643	cso &= 0xffff;
    644	return cso;
    645}
    646
    647static int sis_capture_open(struct snd_pcm_substream *substream)
    648{
    649	struct sis7019 *sis = snd_pcm_substream_chip(substream);
    650	struct snd_pcm_runtime *runtime = substream->runtime;
    651	struct voice *voice = &sis->capture_voice;
    652	unsigned long flags;
    653
    654	/* FIXME: The driver only supports recording from one channel
    655	 * at the moment, but it could support more.
    656	 */
    657	spin_lock_irqsave(&sis->voice_lock, flags);
    658	if (voice->flags & VOICE_IN_USE)
    659		voice = NULL;
    660	else
    661		voice->flags |= VOICE_IN_USE;
    662	spin_unlock_irqrestore(&sis->voice_lock, flags);
    663
    664	if (!voice)
    665		return -EAGAIN;
    666
    667	voice->substream = substream;
    668	runtime->private_data = voice;
    669	runtime->hw = sis_capture_hw_info;
    670	runtime->hw.rates = sis->ac97[0]->rates[AC97_RATES_ADC];
    671	snd_pcm_limit_hw_rates(runtime);
    672	snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_PERIOD_SIZE,
    673						9, 0xfff9);
    674	snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_SIZE,
    675						9, 0xfff9);
    676	snd_pcm_set_sync(substream);
    677	return 0;
    678}
    679
    680static int sis_capture_hw_params(struct snd_pcm_substream *substream,
    681					struct snd_pcm_hw_params *hw_params)
    682{
    683	struct sis7019 *sis = snd_pcm_substream_chip(substream);
    684	int rc;
    685
    686	rc = snd_ac97_set_rate(sis->ac97[0], AC97_PCM_LR_ADC_RATE,
    687						params_rate(hw_params));
    688	if (rc)
    689		goto out;
    690
    691	rc = sis_alloc_timing_voice(substream, hw_params);
    692
    693out:
    694	return rc;
    695}
    696
    697static void sis_prepare_timing_voice(struct voice *voice,
    698					struct snd_pcm_substream *substream)
    699{
    700	struct sis7019 *sis = snd_pcm_substream_chip(substream);
    701	struct snd_pcm_runtime *runtime = substream->runtime;
    702	struct voice *timing = voice->timing;
    703	void __iomem *play_base = timing->ctrl_base;
    704	void __iomem *wave_base = timing->wave_base;
    705	u16 buffer_size, period_size;
    706	u32 format, control, sso_eso, delta;
    707	u32 vperiod, sso, reg;
    708
    709	/* Set our initial buffer and period as large as we can given a
    710	 * single page of silence.
    711	 */
    712	buffer_size = 4096 / runtime->channels;
    713	buffer_size /= snd_pcm_format_size(runtime->format, 1);
    714	period_size = buffer_size;
    715
    716	/* Initially, we want to interrupt just a bit behind the end of
    717	 * the period we're clocking out. 12 samples seems to give a good
    718	 * delay.
    719	 *
    720	 * We want to spread our interrupts throughout the virtual period,
    721	 * so that we don't end up with two interrupts back to back at the
    722	 * end -- this helps minimize the effects of any jitter. Adjust our
    723	 * clocking period size so that the last period is at least a fourth
    724	 * of a full period.
    725	 *
    726	 * This is all moot if we don't need to use virtual periods.
    727	 */
    728	vperiod = runtime->period_size + 12;
    729	if (vperiod > period_size) {
    730		u16 tail = vperiod % period_size;
    731		u16 quarter_period = period_size / 4;
    732
    733		if (tail && tail < quarter_period) {
    734			u16 loops = vperiod / period_size;
    735
    736			tail = quarter_period - tail;
    737			tail += loops - 1;
    738			tail /= loops;
    739			period_size -= tail;
    740		}
    741
    742		sso = period_size - 1;
    743	} else {
    744		/* The initial period will fit inside the buffer, so we
    745		 * don't need to use virtual periods -- disable them.
    746		 */
    747		period_size = runtime->period_size;
    748		sso = vperiod - 1;
    749		vperiod = 0;
    750	}
    751
    752	/* The interrupt handler implements the timing synchronization, so
    753	 * setup its state.
    754	 */
    755	timing->flags |= VOICE_SYNC_TIMING;
    756	timing->sync_base = voice->ctrl_base;
    757	timing->sync_cso = runtime->period_size;
    758	timing->sync_period_size = runtime->period_size;
    759	timing->sync_buffer_size = runtime->buffer_size;
    760	timing->period_size = period_size;
    761	timing->buffer_size = buffer_size;
    762	timing->sso = sso;
    763	timing->vperiod = vperiod;
    764
    765	/* Using unsigned samples with the all-zero silence buffer
    766	 * forces the output to the lower rail, killing playback.
    767	 * So ignore unsigned vs signed -- it doesn't change the timing.
    768	 */
    769	format = 0;
    770	if (snd_pcm_format_width(runtime->format) == 8)
    771		format = SIS_CAPTURE_DMA_FORMAT_8BIT;
    772	if (runtime->channels == 1)
    773		format |= SIS_CAPTURE_DMA_FORMAT_MONO;
    774
    775	control = timing->buffer_size - 1;
    776	control |= SIS_PLAY_DMA_LOOP | SIS_PLAY_DMA_INTR_AT_SSO;
    777	sso_eso = timing->buffer_size - 1;
    778	sso_eso |= timing->sso << 16;
    779
    780	delta = sis_rate_to_delta(runtime->rate);
    781
    782	/* We've done the math, now configure the channel.
    783	 */
    784	writel(format, play_base + SIS_PLAY_DMA_FORMAT_CSO);
    785	writel(sis->silence_dma_addr, play_base + SIS_PLAY_DMA_BASE);
    786	writel(control, play_base + SIS_PLAY_DMA_CONTROL);
    787	writel(sso_eso, play_base + SIS_PLAY_DMA_SSO_ESO);
    788
    789	for (reg = 0; reg < SIS_WAVE_SIZE; reg += 4)
    790		writel(0, wave_base + reg);
    791
    792	writel(SIS_WAVE_GENERAL_WAVE_VOLUME, wave_base + SIS_WAVE_GENERAL);
    793	writel(delta << 16, wave_base + SIS_WAVE_GENERAL_ARTICULATION);
    794	writel(SIS_WAVE_CHANNEL_CONTROL_FIRST_SAMPLE |
    795			SIS_WAVE_CHANNEL_CONTROL_AMP_ENABLE |
    796			SIS_WAVE_CHANNEL_CONTROL_INTERPOLATE_ENABLE,
    797			wave_base + SIS_WAVE_CHANNEL_CONTROL);
    798}
    799
    800static int sis_pcm_capture_prepare(struct snd_pcm_substream *substream)
    801{
    802	struct snd_pcm_runtime *runtime = substream->runtime;
    803	struct voice *voice = runtime->private_data;
    804	void __iomem *rec_base = voice->ctrl_base;
    805	u32 format, dma_addr, control;
    806	u16 leo;
    807
    808	/* We rely on the PCM core to ensure that the parameters for this
    809	 * substream do not change on us while we're programming the HW.
    810	 */
    811	format = 0;
    812	if (snd_pcm_format_width(runtime->format) == 8)
    813		format = SIS_CAPTURE_DMA_FORMAT_8BIT;
    814	if (!snd_pcm_format_signed(runtime->format))
    815		format |= SIS_CAPTURE_DMA_FORMAT_UNSIGNED;
    816	if (runtime->channels == 1)
    817		format |= SIS_CAPTURE_DMA_FORMAT_MONO;
    818
    819	dma_addr = runtime->dma_addr;
    820	leo = runtime->buffer_size - 1;
    821	control = leo | SIS_CAPTURE_DMA_LOOP;
    822
    823	/* If we've got more than two periods per buffer, then we have
    824	 * use a timing voice to clock out the periods. Otherwise, we can
    825	 * use the capture channel's interrupts.
    826	 */
    827	if (voice->timing) {
    828		sis_prepare_timing_voice(voice, substream);
    829	} else {
    830		control |= SIS_CAPTURE_DMA_INTR_AT_LEO;
    831		if (runtime->period_size != runtime->buffer_size)
    832			control |= SIS_CAPTURE_DMA_INTR_AT_MLP;
    833	}
    834
    835	writel(format, rec_base + SIS_CAPTURE_DMA_FORMAT_CSO);
    836	writel(dma_addr, rec_base + SIS_CAPTURE_DMA_BASE);
    837	writel(control, rec_base + SIS_CAPTURE_DMA_CONTROL);
    838
    839	/* Force the writes to post. */
    840	readl(rec_base);
    841
    842	return 0;
    843}
    844
    845static const struct snd_pcm_ops sis_playback_ops = {
    846	.open = sis_playback_open,
    847	.close = sis_substream_close,
    848	.prepare = sis_pcm_playback_prepare,
    849	.trigger = sis_pcm_trigger,
    850	.pointer = sis_pcm_pointer,
    851};
    852
    853static const struct snd_pcm_ops sis_capture_ops = {
    854	.open = sis_capture_open,
    855	.close = sis_substream_close,
    856	.hw_params = sis_capture_hw_params,
    857	.prepare = sis_pcm_capture_prepare,
    858	.trigger = sis_pcm_trigger,
    859	.pointer = sis_pcm_pointer,
    860};
    861
    862static int sis_pcm_create(struct sis7019 *sis)
    863{
    864	struct snd_pcm *pcm;
    865	int rc;
    866
    867	/* We have 64 voices, and the driver currently records from
    868	 * only one channel, though that could change in the future.
    869	 */
    870	rc = snd_pcm_new(sis->card, "SiS7019", 0, 64, 1, &pcm);
    871	if (rc)
    872		return rc;
    873
    874	pcm->private_data = sis;
    875	strcpy(pcm->name, "SiS7019");
    876	sis->pcm = pcm;
    877
    878	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &sis_playback_ops);
    879	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &sis_capture_ops);
    880
    881	/* Try to preallocate some memory, but it's not the end of the
    882	 * world if this fails.
    883	 */
    884	snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_DEV,
    885				       &sis->pci->dev, 64*1024, 128*1024);
    886
    887	return 0;
    888}
    889
    890static unsigned short sis_ac97_rw(struct sis7019 *sis, int codec, u32 cmd)
    891{
    892	unsigned long io = sis->ioport;
    893	unsigned short val = 0xffff;
    894	u16 status;
    895	u16 rdy;
    896	int count;
    897	static const u16 codec_ready[3] = {
    898		SIS_AC97_STATUS_CODEC_READY,
    899		SIS_AC97_STATUS_CODEC2_READY,
    900		SIS_AC97_STATUS_CODEC3_READY,
    901	};
    902
    903	rdy = codec_ready[codec];
    904
    905
    906	/* Get the AC97 semaphore -- software first, so we don't spin
    907	 * pounding out IO reads on the hardware semaphore...
    908	 */
    909	mutex_lock(&sis->ac97_mutex);
    910
    911	count = 0xffff;
    912	while ((inw(io + SIS_AC97_SEMA) & SIS_AC97_SEMA_BUSY) && --count)
    913		udelay(1);
    914
    915	if (!count)
    916		goto timeout;
    917
    918	/* ... and wait for any outstanding commands to complete ...
    919	 */
    920	count = 0xffff;
    921	do {
    922		status = inw(io + SIS_AC97_STATUS);
    923		if ((status & rdy) && !(status & SIS_AC97_STATUS_BUSY))
    924			break;
    925
    926		udelay(1);
    927	} while (--count);
    928
    929	if (!count)
    930		goto timeout_sema;
    931
    932	/* ... before sending our command and waiting for it to finish ...
    933	 */
    934	outl(cmd, io + SIS_AC97_CMD);
    935	udelay(10);
    936
    937	count = 0xffff;
    938	while ((inw(io + SIS_AC97_STATUS) & SIS_AC97_STATUS_BUSY) && --count)
    939		udelay(1);
    940
    941	/* ... and reading the results (if any).
    942	 */
    943	val = inl(io + SIS_AC97_CMD) >> 16;
    944
    945timeout_sema:
    946	outl(SIS_AC97_SEMA_RELEASE, io + SIS_AC97_SEMA);
    947timeout:
    948	mutex_unlock(&sis->ac97_mutex);
    949
    950	if (!count) {
    951		dev_err(&sis->pci->dev, "ac97 codec %d timeout cmd 0x%08x\n",
    952					codec, cmd);
    953	}
    954
    955	return val;
    956}
    957
    958static void sis_ac97_write(struct snd_ac97 *ac97, unsigned short reg,
    959				unsigned short val)
    960{
    961	static const u32 cmd[3] = {
    962		SIS_AC97_CMD_CODEC_WRITE,
    963		SIS_AC97_CMD_CODEC2_WRITE,
    964		SIS_AC97_CMD_CODEC3_WRITE,
    965	};
    966	sis_ac97_rw(ac97->private_data, ac97->num,
    967			(val << 16) | (reg << 8) | cmd[ac97->num]);
    968}
    969
    970static unsigned short sis_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
    971{
    972	static const u32 cmd[3] = {
    973		SIS_AC97_CMD_CODEC_READ,
    974		SIS_AC97_CMD_CODEC2_READ,
    975		SIS_AC97_CMD_CODEC3_READ,
    976	};
    977	return sis_ac97_rw(ac97->private_data, ac97->num,
    978					(reg << 8) | cmd[ac97->num]);
    979}
    980
    981static int sis_mixer_create(struct sis7019 *sis)
    982{
    983	struct snd_ac97_bus *bus;
    984	struct snd_ac97_template ac97;
    985	static const struct snd_ac97_bus_ops ops = {
    986		.write = sis_ac97_write,
    987		.read = sis_ac97_read,
    988	};
    989	int rc;
    990
    991	memset(&ac97, 0, sizeof(ac97));
    992	ac97.private_data = sis;
    993
    994	rc = snd_ac97_bus(sis->card, 0, &ops, NULL, &bus);
    995	if (!rc && sis->codecs_present & SIS_PRIMARY_CODEC_PRESENT)
    996		rc = snd_ac97_mixer(bus, &ac97, &sis->ac97[0]);
    997	ac97.num = 1;
    998	if (!rc && (sis->codecs_present & SIS_SECONDARY_CODEC_PRESENT))
    999		rc = snd_ac97_mixer(bus, &ac97, &sis->ac97[1]);
   1000	ac97.num = 2;
   1001	if (!rc && (sis->codecs_present & SIS_TERTIARY_CODEC_PRESENT))
   1002		rc = snd_ac97_mixer(bus, &ac97, &sis->ac97[2]);
   1003
   1004	/* If we return an error here, then snd_card_free() should
   1005	 * free up any ac97 codecs that got created, as well as the bus.
   1006	 */
   1007	return rc;
   1008}
   1009
   1010static void sis_chip_free(struct snd_card *card)
   1011{
   1012	struct sis7019 *sis = card->private_data;
   1013
   1014	/* Reset the chip, and disable all interrputs.
   1015	 */
   1016	outl(SIS_GCR_SOFTWARE_RESET, sis->ioport + SIS_GCR);
   1017	udelay(25);
   1018	outl(0, sis->ioport + SIS_GCR);
   1019	outl(0, sis->ioport + SIS_GIER);
   1020
   1021	/* Now, free everything we allocated.
   1022	 */
   1023	if (sis->irq >= 0)
   1024		free_irq(sis->irq, sis);
   1025}
   1026
   1027static int sis_chip_init(struct sis7019 *sis)
   1028{
   1029	unsigned long io = sis->ioport;
   1030	void __iomem *ioaddr = sis->ioaddr;
   1031	unsigned long timeout;
   1032	u16 status;
   1033	int count;
   1034	int i;
   1035
   1036	/* Reset the audio controller
   1037	 */
   1038	outl(SIS_GCR_SOFTWARE_RESET, io + SIS_GCR);
   1039	udelay(25);
   1040	outl(0, io + SIS_GCR);
   1041
   1042	/* Get the AC-link semaphore, and reset the codecs
   1043	 */
   1044	count = 0xffff;
   1045	while ((inw(io + SIS_AC97_SEMA) & SIS_AC97_SEMA_BUSY) && --count)
   1046		udelay(1);
   1047
   1048	if (!count)
   1049		return -EIO;
   1050
   1051	outl(SIS_AC97_CMD_CODEC_COLD_RESET, io + SIS_AC97_CMD);
   1052	udelay(250);
   1053
   1054	count = 0xffff;
   1055	while ((inw(io + SIS_AC97_STATUS) & SIS_AC97_STATUS_BUSY) && --count)
   1056		udelay(1);
   1057
   1058	/* Command complete, we can let go of the semaphore now.
   1059	 */
   1060	outl(SIS_AC97_SEMA_RELEASE, io + SIS_AC97_SEMA);
   1061	if (!count)
   1062		return -EIO;
   1063
   1064	/* Now that we've finished the reset, find out what's attached.
   1065	 * There are some codec/board combinations that take an extremely
   1066	 * long time to come up. 350+ ms has been observed in the field,
   1067	 * so we'll give them up to 500ms.
   1068	 */
   1069	sis->codecs_present = 0;
   1070	timeout = msecs_to_jiffies(500) + jiffies;
   1071	while (time_before_eq(jiffies, timeout)) {
   1072		status = inl(io + SIS_AC97_STATUS);
   1073		if (status & SIS_AC97_STATUS_CODEC_READY)
   1074			sis->codecs_present |= SIS_PRIMARY_CODEC_PRESENT;
   1075		if (status & SIS_AC97_STATUS_CODEC2_READY)
   1076			sis->codecs_present |= SIS_SECONDARY_CODEC_PRESENT;
   1077		if (status & SIS_AC97_STATUS_CODEC3_READY)
   1078			sis->codecs_present |= SIS_TERTIARY_CODEC_PRESENT;
   1079
   1080		if (sis->codecs_present == codecs)
   1081			break;
   1082
   1083		msleep(1);
   1084	}
   1085
   1086	/* All done, check for errors.
   1087	 */
   1088	if (!sis->codecs_present) {
   1089		dev_err(&sis->pci->dev, "could not find any codecs\n");
   1090		return -EIO;
   1091	}
   1092
   1093	if (sis->codecs_present != codecs) {
   1094		dev_warn(&sis->pci->dev, "missing codecs, found %0x, expected %0x\n",
   1095					 sis->codecs_present, codecs);
   1096	}
   1097
   1098	/* Let the hardware know that the audio driver is alive,
   1099	 * and enable PCM slots on the AC-link for L/R playback (3 & 4) and
   1100	 * record channels. We're going to want to use Variable Rate Audio
   1101	 * for recording, to avoid needlessly resampling from 48kHZ.
   1102	 */
   1103	outl(SIS_AC97_CONF_AUDIO_ALIVE, io + SIS_AC97_CONF);
   1104	outl(SIS_AC97_CONF_AUDIO_ALIVE | SIS_AC97_CONF_PCM_LR_ENABLE |
   1105		SIS_AC97_CONF_PCM_CAP_MIC_ENABLE |
   1106		SIS_AC97_CONF_PCM_CAP_LR_ENABLE |
   1107		SIS_AC97_CONF_CODEC_VRA_ENABLE, io + SIS_AC97_CONF);
   1108
   1109	/* All AC97 PCM slots should be sourced from sub-mixer 0.
   1110	 */
   1111	outl(0, io + SIS_AC97_PSR);
   1112
   1113	/* There is only one valid DMA setup for a PCI environment.
   1114	 */
   1115	outl(SIS_DMA_CSR_PCI_SETTINGS, io + SIS_DMA_CSR);
   1116
   1117	/* Reset the synchronization groups for all of the channels
   1118	 * to be asynchronous. If we start doing SPDIF or 5.1 sound, etc.
   1119	 * we'll need to change how we handle these. Until then, we just
   1120	 * assign sub-mixer 0 to all playback channels, and avoid any
   1121	 * attenuation on the audio.
   1122	 */
   1123	outl(0, io + SIS_PLAY_SYNC_GROUP_A);
   1124	outl(0, io + SIS_PLAY_SYNC_GROUP_B);
   1125	outl(0, io + SIS_PLAY_SYNC_GROUP_C);
   1126	outl(0, io + SIS_PLAY_SYNC_GROUP_D);
   1127	outl(0, io + SIS_MIXER_SYNC_GROUP);
   1128
   1129	for (i = 0; i < 64; i++) {
   1130		writel(i, SIS_MIXER_START_ADDR(ioaddr, i));
   1131		writel(SIS_MIXER_RIGHT_NO_ATTEN | SIS_MIXER_LEFT_NO_ATTEN |
   1132				SIS_MIXER_DEST_0, SIS_MIXER_ADDR(ioaddr, i));
   1133	}
   1134
   1135	/* Don't attenuate any audio set for the wave amplifier.
   1136	 *
   1137	 * FIXME: Maximum attenuation is set for the music amp, which will
   1138	 * need to change if we start using the synth engine.
   1139	 */
   1140	outl(0xffff0000, io + SIS_WEVCR);
   1141
   1142	/* Ensure that the wave engine is in normal operating mode.
   1143	 */
   1144	outl(0, io + SIS_WECCR);
   1145
   1146	/* Go ahead and enable the DMA interrupts. They won't go live
   1147	 * until we start a channel.
   1148	 */
   1149	outl(SIS_GIER_AUDIO_PLAY_DMA_IRQ_ENABLE |
   1150		SIS_GIER_AUDIO_RECORD_DMA_IRQ_ENABLE, io + SIS_GIER);
   1151
   1152	return 0;
   1153}
   1154
   1155#ifdef CONFIG_PM_SLEEP
   1156static int sis_suspend(struct device *dev)
   1157{
   1158	struct snd_card *card = dev_get_drvdata(dev);
   1159	struct sis7019 *sis = card->private_data;
   1160	void __iomem *ioaddr = sis->ioaddr;
   1161	int i;
   1162
   1163	snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
   1164	if (sis->codecs_present & SIS_PRIMARY_CODEC_PRESENT)
   1165		snd_ac97_suspend(sis->ac97[0]);
   1166	if (sis->codecs_present & SIS_SECONDARY_CODEC_PRESENT)
   1167		snd_ac97_suspend(sis->ac97[1]);
   1168	if (sis->codecs_present & SIS_TERTIARY_CODEC_PRESENT)
   1169		snd_ac97_suspend(sis->ac97[2]);
   1170
   1171	/* snd_pcm_suspend_all() stopped all channels, so we're quiescent.
   1172	 */
   1173	if (sis->irq >= 0) {
   1174		free_irq(sis->irq, sis);
   1175		sis->irq = -1;
   1176	}
   1177
   1178	/* Save the internal state away
   1179	 */
   1180	for (i = 0; i < 4; i++) {
   1181		memcpy_fromio(sis->suspend_state[i], ioaddr, 4096);
   1182		ioaddr += 4096;
   1183	}
   1184
   1185	return 0;
   1186}
   1187
   1188static int sis_resume(struct device *dev)
   1189{
   1190	struct pci_dev *pci = to_pci_dev(dev);
   1191	struct snd_card *card = dev_get_drvdata(dev);
   1192	struct sis7019 *sis = card->private_data;
   1193	void __iomem *ioaddr = sis->ioaddr;
   1194	int i;
   1195
   1196	if (sis_chip_init(sis)) {
   1197		dev_err(&pci->dev, "unable to re-init controller\n");
   1198		goto error;
   1199	}
   1200
   1201	if (request_irq(pci->irq, sis_interrupt, IRQF_SHARED,
   1202			KBUILD_MODNAME, sis)) {
   1203		dev_err(&pci->dev, "unable to regain IRQ %d\n", pci->irq);
   1204		goto error;
   1205	}
   1206
   1207	/* Restore saved state, then clear out the page we use for the
   1208	 * silence buffer.
   1209	 */
   1210	for (i = 0; i < 4; i++) {
   1211		memcpy_toio(ioaddr, sis->suspend_state[i], 4096);
   1212		ioaddr += 4096;
   1213	}
   1214
   1215	memset(sis->suspend_state[0], 0, 4096);
   1216
   1217	sis->irq = pci->irq;
   1218
   1219	if (sis->codecs_present & SIS_PRIMARY_CODEC_PRESENT)
   1220		snd_ac97_resume(sis->ac97[0]);
   1221	if (sis->codecs_present & SIS_SECONDARY_CODEC_PRESENT)
   1222		snd_ac97_resume(sis->ac97[1]);
   1223	if (sis->codecs_present & SIS_TERTIARY_CODEC_PRESENT)
   1224		snd_ac97_resume(sis->ac97[2]);
   1225
   1226	snd_power_change_state(card, SNDRV_CTL_POWER_D0);
   1227	return 0;
   1228
   1229error:
   1230	snd_card_disconnect(card);
   1231	return -EIO;
   1232}
   1233
   1234static SIMPLE_DEV_PM_OPS(sis_pm, sis_suspend, sis_resume);
   1235#define SIS_PM_OPS	&sis_pm
   1236#else
   1237#define SIS_PM_OPS	NULL
   1238#endif /* CONFIG_PM_SLEEP */
   1239
   1240static int sis_alloc_suspend(struct sis7019 *sis)
   1241{
   1242	int i;
   1243
   1244	/* We need 16K to store the internal wave engine state during a
   1245	 * suspend, but we don't need it to be contiguous, so play nice
   1246	 * with the memory system. We'll also use this area for a silence
   1247	 * buffer.
   1248	 */
   1249	for (i = 0; i < SIS_SUSPEND_PAGES; i++) {
   1250		sis->suspend_state[i] = devm_kmalloc(&sis->pci->dev, 4096,
   1251						     GFP_KERNEL);
   1252		if (!sis->suspend_state[i])
   1253			return -ENOMEM;
   1254	}
   1255	memset(sis->suspend_state[0], 0, 4096);
   1256
   1257	return 0;
   1258}
   1259
   1260static int sis_chip_create(struct snd_card *card,
   1261			   struct pci_dev *pci)
   1262{
   1263	struct sis7019 *sis = card->private_data;
   1264	struct voice *voice;
   1265	int rc;
   1266	int i;
   1267
   1268	rc = pcim_enable_device(pci);
   1269	if (rc)
   1270		return rc;
   1271
   1272	rc = dma_set_mask(&pci->dev, DMA_BIT_MASK(30));
   1273	if (rc < 0) {
   1274		dev_err(&pci->dev, "architecture does not support 30-bit PCI busmaster DMA");
   1275		return -ENXIO;
   1276	}
   1277
   1278	mutex_init(&sis->ac97_mutex);
   1279	spin_lock_init(&sis->voice_lock);
   1280	sis->card = card;
   1281	sis->pci = pci;
   1282	sis->irq = -1;
   1283	sis->ioport = pci_resource_start(pci, 0);
   1284
   1285	rc = pci_request_regions(pci, "SiS7019");
   1286	if (rc) {
   1287		dev_err(&pci->dev, "unable request regions\n");
   1288		return rc;
   1289	}
   1290
   1291	sis->ioaddr = devm_ioremap(&pci->dev, pci_resource_start(pci, 1), 0x4000);
   1292	if (!sis->ioaddr) {
   1293		dev_err(&pci->dev, "unable to remap MMIO, aborting\n");
   1294		return -EIO;
   1295	}
   1296
   1297	rc = sis_alloc_suspend(sis);
   1298	if (rc < 0) {
   1299		dev_err(&pci->dev, "unable to allocate state storage\n");
   1300		return rc;
   1301	}
   1302
   1303	rc = sis_chip_init(sis);
   1304	if (rc)
   1305		return rc;
   1306	card->private_free = sis_chip_free;
   1307
   1308	rc = request_irq(pci->irq, sis_interrupt, IRQF_SHARED, KBUILD_MODNAME,
   1309			 sis);
   1310	if (rc) {
   1311		dev_err(&pci->dev, "unable to allocate irq %d\n", sis->irq);
   1312		return rc;
   1313	}
   1314
   1315	sis->irq = pci->irq;
   1316	card->sync_irq = sis->irq;
   1317	pci_set_master(pci);
   1318
   1319	for (i = 0; i < 64; i++) {
   1320		voice = &sis->voices[i];
   1321		voice->num = i;
   1322		voice->ctrl_base = SIS_PLAY_DMA_ADDR(sis->ioaddr, i);
   1323		voice->wave_base = SIS_WAVE_ADDR(sis->ioaddr, i);
   1324	}
   1325
   1326	voice = &sis->capture_voice;
   1327	voice->flags = VOICE_CAPTURE;
   1328	voice->num = SIS_CAPTURE_CHAN_AC97_PCM_IN;
   1329	voice->ctrl_base = SIS_CAPTURE_DMA_ADDR(sis->ioaddr, voice->num);
   1330
   1331	return 0;
   1332}
   1333
   1334static int __snd_sis7019_probe(struct pci_dev *pci,
   1335			       const struct pci_device_id *pci_id)
   1336{
   1337	struct snd_card *card;
   1338	struct sis7019 *sis;
   1339	int rc;
   1340
   1341	if (!enable)
   1342		return -ENOENT;
   1343
   1344	/* The user can specify which codecs should be present so that we
   1345	 * can wait for them to show up if they are slow to recover from
   1346	 * the AC97 cold reset. We default to a single codec, the primary.
   1347	 *
   1348	 * We assume that SIS_PRIMARY_*_PRESENT matches bits 0-2.
   1349	 */
   1350	codecs &= SIS_PRIMARY_CODEC_PRESENT | SIS_SECONDARY_CODEC_PRESENT |
   1351		  SIS_TERTIARY_CODEC_PRESENT;
   1352	if (!codecs)
   1353		codecs = SIS_PRIMARY_CODEC_PRESENT;
   1354
   1355	rc = snd_devm_card_new(&pci->dev, index, id, THIS_MODULE,
   1356			       sizeof(*sis), &card);
   1357	if (rc < 0)
   1358		return rc;
   1359
   1360	strcpy(card->driver, "SiS7019");
   1361	strcpy(card->shortname, "SiS7019");
   1362	rc = sis_chip_create(card, pci);
   1363	if (rc)
   1364		return rc;
   1365
   1366	sis = card->private_data;
   1367
   1368	rc = sis_mixer_create(sis);
   1369	if (rc)
   1370		return rc;
   1371
   1372	rc = sis_pcm_create(sis);
   1373	if (rc)
   1374		return rc;
   1375
   1376	snprintf(card->longname, sizeof(card->longname),
   1377			"%s Audio Accelerator with %s at 0x%lx, irq %d",
   1378			card->shortname, snd_ac97_get_short_name(sis->ac97[0]),
   1379			sis->ioport, sis->irq);
   1380
   1381	rc = snd_card_register(card);
   1382	if (rc)
   1383		return rc;
   1384
   1385	pci_set_drvdata(pci, card);
   1386	return 0;
   1387}
   1388
   1389static int snd_sis7019_probe(struct pci_dev *pci,
   1390			     const struct pci_device_id *pci_id)
   1391{
   1392	return snd_card_free_on_error(&pci->dev, __snd_sis7019_probe(pci, pci_id));
   1393}
   1394
   1395static struct pci_driver sis7019_driver = {
   1396	.name = KBUILD_MODNAME,
   1397	.id_table = snd_sis7019_ids,
   1398	.probe = snd_sis7019_probe,
   1399	.driver = {
   1400		.pm = SIS_PM_OPS,
   1401	},
   1402};
   1403
   1404module_pci_driver(sis7019_driver);