2  *      ALI  ali5455 and friends ICH driver for Linux
 
   3  *      LEI HU <Lei_Hu@ali.com.tw>
 
   6  *      drivers/sound/i810_audio
 
   8  *      The ALi 5455 is similar but not quite identical to the Intel ICH
 
   9  *      series of controllers. Its easier to keep the driver separated from
 
  12  *      This program is free software; you can redistribute it and/or modify
 
  13  *      it under the terms of the GNU General Public License as published by
 
  14  *      the Free Software Foundation; either version 2 of the License, or
 
  15  *      (at your option) any later version.
 
  17  *      This program is distributed in the hope that it will be useful,
 
  18  *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 
  19  *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
  20  *      GNU General Public License for more details.
 
  22  *      You should have received a copy of the GNU General Public License
 
  23  *      along with this program; if not, write to the Free Software
 
  24  *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
  27  *      ALi 5455 theory of operation
 
  29  *      The chipset provides three DMA channels that talk to an AC97
 
  30  *      CODEC (AC97 is a digital/analog mixer standard). At its simplest
 
  31  *      you get 48Khz audio with basic volume and mixer controls. At the
 
  32  *      best you get rate adaption in the codec. We set the card up so
 
  33  *      that we never take completion interrupts but instead keep the card
 
  34  *      chasing its tail around a ring buffer. This is needed for mmap
 
  35  *      mode audio and happens to work rather well for non-mmap modes too.
 
  37  *      The board has one output channel for PCM audio (supported) and
 
  38  *      a stereo line in and mono microphone input. Again these are normally
 
  39  *      locked to 48Khz only. Right now recording is not finished.
 
  41  *      There is no midi support, no synth support. Use timidity. To get
 
  42  *      esd working you need to use esd -r 48000 as it won't probe 48KHz
 
  43  *      by default. mpg123 can't handle 48Khz only audio so use xmms.
 
  45  *      If you need to force a specific rate set the clocking= option
 
  49 #include <linux/module.h>
 
  50 #include <linux/string.h>
 
  51 #include <linux/ctype.h>
 
  52 #include <linux/ioport.h>
 
  53 #include <linux/sched.h>
 
  54 #include <linux/delay.h>
 
  55 #include <linux/sound.h>
 
  56 #include <linux/slab.h>
 
  57 #include <linux/soundcard.h>
 
  58 #include <linux/pci.h>
 
  61 #include <linux/init.h>
 
  62 #include <linux/poll.h>
 
  63 #include <linux/spinlock.h>
 
  64 #include <linux/smp_lock.h>
 
  65 #include <linux/ac97_codec.h>
 
  66 #include <linux/interrupt.h>
 
  67 #include <asm/uaccess.h>
 
  69 #ifndef PCI_DEVICE_ID_ALI_5455
 
  70 #define PCI_DEVICE_ID_ALI_5455  0x5455
 
  73 #ifndef PCI_VENDOR_ID_ALI
 
  74 #define PCI_VENDOR_ID_ALI       0x10b9
 
  77 static int strict_clocking = 0;
 
  78 static unsigned int clocking = 0;
 
  79 static unsigned int codec_pcmout_share_spdif_locked = 0;
 
  80 static unsigned int codec_independent_spdif_locked = 0;
 
  81 static unsigned int controller_pcmout_share_spdif_locked = 0;
 
  82 static unsigned int controller_independent_spdif_locked = 0;
 
  83 static unsigned int globel = 0;
 
  87 #define CODEC_SPDIFOUT_RUNNING 8
 
  88 #define CONTROLLER_SPDIFOUT_RUNNING 4
 
  90 #define SPDIF_ENABLE_OUTPUT     4       /* bits 0,1 are PCM */
 
  92 #define ALI5455_FMT_16BIT       1
 
  93 #define ALI5455_FMT_STEREO      2
 
  94 #define ALI5455_FMT_MASK        3
 
  96 #define SPDIF_ON        0x0004
 
  97 #define SURR_ON         0x0010
 
  98 #define CENTER_LFE_ON   0x0020
 
  99 #define VOL_MUTED       0x8000
 
 102 #define ALI_SPDIF_OUT_CH_STATUS 0xbf
 
 103 /* the 810's array of pointers to data buffers */
 
 106 #define BUSADDR_MASK    0xFFFFFFFE
 
 108 #define CON_IOC         0x80000000      /* interrupt on completion */
 
 109 #define CON_BUFPAD      0x40000000      /* pad underrun with last sample, else 0 */
 
 110 #define CON_BUFLEN_MASK 0x0000ffff      /* buffer length in samples */
 
 114 /* an instance of the ali channel */
 
 117         /* these sg guys should probably be allocated
 
 118            separately as nocache. Must be 8 byte aligned */
 
 119         struct sg_item sg[SG_LEN];      /* 32*8 */
 
 127  * we have 3 separate dma engines.  pcm in, pcm out, and mic.
 
 128  * each dma engine has controlling registers.  These goofy
 
 129  * names are from the datasheet, but make it easy to write
 
 130  * code while leafing through it.
 
 133 #define ENUM_ENGINE(PRE,DIG)                                                                    \
 
 135         PRE##_BDBAR =   0x##DIG##0,             /* Buffer Descriptor list Base Address */       \
 
 136         PRE##_CIV =     0x##DIG##4,             /* Current Index Value */                       \
 
 137         PRE##_LVI =     0x##DIG##5,             /* Last Valid Index */                          \
 
 138         PRE##_SR =      0x##DIG##6,             /* Status Register */                           \
 
 139         PRE##_PICB =    0x##DIG##8,             /* Position In Current Buffer */                \
 
 140         PRE##_CR =      0x##DIG##b              /* Control Register */                          \
 
 143 ENUM_ENGINE(OFF, 0);            /* Offsets */
 
 144 ENUM_ENGINE(PI, 4);             /* PCM In */
 
 145 ENUM_ENGINE(PO, 5);             /* PCM Out */
 
 146 ENUM_ENGINE(MC, 6);             /* Mic In */
 
 147 ENUM_ENGINE(CODECSPDIFOUT, 7);  /* CODEC SPDIF OUT  */
 
 148 ENUM_ENGINE(CONTROLLERSPDIFIN, A);      /* CONTROLLER SPDIF In */
 
 149 ENUM_ENGINE(CONTROLLERSPDIFOUT, B);     /* CONTROLLER SPDIF OUT */
 
 153         ALI_SCR = 0x00,         /* System Control Register */
 
 154         ALI_SSR = 0x04,         /* System Status Register  */
 
 155         ALI_DMACR = 0x08,       /* DMA Control Register    */
 
 156         ALI_FIFOCR1 = 0x0c,     /* FIFO Control Register 1  */
 
 157         ALI_INTERFACECR = 0x10, /* Interface Control Register */
 
 158         ALI_INTERRUPTCR = 0x14, /* Interrupt control Register */
 
 159         ALI_INTERRUPTSR = 0x18, /* Interrupt  Status Register */
 
 160         ALI_FIFOCR2 = 0x1c,     /* FIFO Control Register 2   */
 
 161         ALI_CPR = 0x20,         /* Command Port Register     */
 
 162         ALI_SPR = 0x24,         /* Status Port Register      */
 
 163         ALI_FIFOCR3 = 0x2c,     /* FIFO Control Register 3  */
 
 164         ALI_TTSR = 0x30,        /* Transmit Tag Slot Register */
 
 165         ALI_RTSR = 0x34,        /* Receive Tag Slot  Register */
 
 166         ALI_CSPSR = 0x38,       /* Command/Status Port Status Register */
 
 167         ALI_CAS = 0x3c,         /* Codec Write Semaphore Register */
 
 168         ALI_SPDIFCSR = 0xf8,    /* spdif channel status register  */
 
 169         ALI_SPDIFICS = 0xfc     /* spdif interface control/status  */
 
 172 // x-status register(x:pcm in ,pcm out, mic in,)
 
 173 /* interrupts for a dma engine */
 
 174 #define DMA_INT_FIFO            (1<<4)  /* fifo under/over flow */
 
 175 #define DMA_INT_COMPLETE        (1<<3)  /* buffer read/write complete and ioc set */
 
 176 #define DMA_INT_LVI             (1<<2)  /* last valid done */
 
 177 #define DMA_INT_CELV            (1<<1)  /* last valid is current */
 
 178 #define DMA_INT_DCH             (1)     /* DMA Controller Halted (happens on LVI interrupts) */ //not eqult intel
 
 179 #define DMA_INT_MASK (DMA_INT_FIFO|DMA_INT_COMPLETE|DMA_INT_LVI)
 
 181 /* interrupts for the whole chip */// by interrupt status register finish
 
 183 #define INT_SPDIFOUT   (1<<23)  /* controller spdif out INTERRUPT */
 
 184 #define INT_SPDIFIN   (1<<22)
 
 185 #define INT_CODECSPDIFOUT   (1<<19)
 
 186 #define INT_MICIN   (1<<18)
 
 187 #define INT_PCMOUT   (1<<17)
 
 188 #define INT_PCMIN   (1<<16)
 
 189 #define INT_CPRAIS   (1<<7)
 
 190 #define INT_SPRAIS   (1<<5)
 
 191 #define INT_GPIO    (1<<1)
 
 192 #define INT_MASK   (INT_SPDIFOUT|INT_CODECSPDIFOUT|INT_MICIN|INT_PCMOUT|INT_PCMIN)
 
 194 #define DRIVER_VERSION "0.02ac"
 
 196 /* magic numbers to protect our data structures */
 
 197 #define ALI5455_CARD_MAGIC              0x5072696E      /* "Prin" */
 
 198 #define ALI5455_STATE_MAGIC             0x63657373      /* "cess" */
 
 199 #define ALI5455_DMA_MASK                0xffffffff      /* DMA buffer mask for pci_alloc_consist */
 
 200 #define NR_HW_CH                        5       //I think 5 channel
 
 202 /* maxinum number of AC97 codecs connected, AC97 2.0 defined 4 */
 
 205 /* Please note that an 8bit mono stream is not valid on this card, you must have a 16bit */
 
 206 /* stream at a minimum for this card to be happy */
 
 207 static const unsigned sample_size[] = { 1, 2, 2, 4 };
 
 208 /* Samples are 16bit values, so we are shifting to a word, not to a byte, hence shift */
 
 209 /* values are one less than might be expected */
 
 210 static const unsigned sample_shift[] = { -1, 0, 0, 1 };
 
 213 static char *card_names[] = {
 
 217 static struct pci_device_id ali_pci_tbl[] = {
 
 218         {PCI_VENDOR_ID_ALI, PCI_DEVICE_ID_ALI_5455,
 
 219          PCI_ANY_ID, PCI_ANY_ID, 0, 0, ALI5455},
 
 223 MODULE_DEVICE_TABLE(pci, ali_pci_tbl);
 
 226 #define PM_SUSPENDED(card) (card->pm_suspended)
 
 228 #define PM_SUSPENDED(card) (0)
 
 231 /* "software" or virtual channel, an instance of opened /dev/dsp */
 
 234         struct ali_card *card;  /* Card info */
 
 236         /* single open lock mechanism, only used for recording */
 
 237         struct semaphore open_sem;
 
 238         wait_queue_head_t open_wait;
 
 243         /* virtual channel number */
 
 247         unsigned int pm_saved_dac_rate, pm_saved_adc_rate;
 
 250                 /* wave sample stuff */
 
 252                 unsigned char fmt, enable, trigger;
 
 254                 /* hardware channel */
 
 255                 struct ali_channel *read_channel;
 
 256                 struct ali_channel *write_channel;
 
 257                 struct ali_channel *codec_spdifout_channel;
 
 258                 struct ali_channel *controller_spdifout_channel;
 
 260                 /* OSS buffer management stuff */
 
 262                 dma_addr_t dma_handle;
 
 267                 /* our buffer acts like a circular ring */
 
 268                 unsigned hwptr; /* where dma last started, updated by update_ptr */
 
 269                 unsigned swptr; /* where driver last clear/filled, updated by read/write */
 
 270                 int count;      /* bytes to be consumed or been generated by dma machine */
 
 271                 unsigned total_bytes;   /* total bytes dmaed by hardware */
 
 273                 unsigned error; /* number of over/underruns */
 
 274                 wait_queue_head_t wait; /* put process on wait queue when no more space in buffer */
 
 276                 /* redundant, but makes calculations easier */
 
 277                 /* what the hardware uses */
 
 280                 unsigned fragsamples;
 
 282                 /* what we tell the user to expect */
 
 284                 unsigned userfragsize;
 
 289                 unsigned update_flag;
 
 290                 unsigned ossfragsize;
 
 291                 unsigned ossmaxfrags;
 
 292                 unsigned subdivision;
 
 298         struct ali_channel channel[5];
 
 301         /* We keep ali5455 cards in a linked list */
 
 302         struct ali_card *next;
 
 304         /* The ali has a certain amount of cross channel interaction
 
 305            so we use a single per card lock */
 
 307         spinlock_t ac97_lock;
 
 309         /* PCI device stuff */
 
 310         struct pci_dev *pci_dev;
 
 314         int pm_saved_mixer_settings[SOUND_MIXER_NRDEVICES][NR_AC97];
 
 316         /* soundcore stuff */
 
 319         /* structures for abstraction of hardware facilities, codecs, banks and channels */
 
 320         struct ac97_codec *ac97_codec[NR_AC97];
 
 321         struct ali_state *states[NR_HW_CH];
 
 327         /* hardware resources */
 
 328         unsigned long iobase;
 
 332         /* Function support */
 
 333         struct ali_channel *(*alloc_pcm_channel) (struct ali_card *);
 
 334         struct ali_channel *(*alloc_rec_pcm_channel) (struct ali_card *);
 
 335         struct ali_channel *(*alloc_rec_mic_channel) (struct ali_card *);
 
 336         struct ali_channel *(*alloc_codec_spdifout_channel) (struct ali_card *);
 
 337         struct ali_channel *(*alloc_controller_spdifout_channel) (struct  ali_card *);
 
 338         void (*free_pcm_channel) (struct ali_card *, int chan);
 
 340         /* We have a *very* long init time possibly, so use this to block */
 
 341         /* attempts to open our devices before we are ready (stops oops'es) */
 
 346 static struct ali_card *devs = NULL;
 
 348 static int ali_open_mixdev(struct inode *inode, struct file *file);
 
 349 static int ali_ioctl_mixdev(struct inode *inode, struct file *file,
 
 350                             unsigned int cmd, unsigned long arg);
 
 351 static u16 ali_ac97_get(struct ac97_codec *dev, u8 reg);
 
 352 static void ali_ac97_set(struct ac97_codec *dev, u8 reg, u16 data);
 
 354 static struct ali_channel *ali_alloc_pcm_channel(struct ali_card *card)
 
 356         if (card->channel[1].used == 1)
 
 358         card->channel[1].used = 1;
 
 359         return &card->channel[1];
 
 362 static struct ali_channel *ali_alloc_rec_pcm_channel(struct ali_card *card)
 
 364         if (card->channel[0].used == 1)
 
 366         card->channel[0].used = 1;
 
 367         return &card->channel[0];
 
 370 static struct ali_channel *ali_alloc_rec_mic_channel(struct ali_card *card)
 
 372         if (card->channel[2].used == 1)
 
 374         card->channel[2].used = 1;
 
 375         return &card->channel[2];
 
 378 static struct ali_channel *ali_alloc_codec_spdifout_channel(struct ali_card *card)
 
 380         if (card->channel[3].used == 1)
 
 382         card->channel[3].used = 1;
 
 383         return &card->channel[3];
 
 386 static struct ali_channel *ali_alloc_controller_spdifout_channel(struct ali_card *card)
 
 388         if (card->channel[4].used == 1)
 
 390         card->channel[4].used = 1;
 
 391         return &card->channel[4];
 
 393 static void ali_free_pcm_channel(struct ali_card *card, int channel)
 
 395         card->channel[channel].used = 0;
 
 399 //add support  codec spdif out 
 
 400 static int ali_valid_spdif_rate(struct ac97_codec *codec, int rate)
 
 402         unsigned long id = 0L;
 
 404         id = (ali_ac97_get(codec, AC97_VENDOR_ID1) << 16);
 
 405         id |= ali_ac97_get(codec, AC97_VENDOR_ID2) & 0xffff;
 
 407         case 0x41445361:        /* AD1886 */
 
 412         case 0x414c4720:        /* ALC650 */
 
 417         default:                /* all other codecs, until we know otherwiae */
 
 418                 if (rate == 48000 || rate == 44100 || rate == 32000) {
 
 426 /* ali_set_spdif_output
 
 428  *  Configure the S/PDIF output transmitter. When we turn on
 
 429  *  S/PDIF, we turn off the analog output. This may not be
 
 430  *  the right thing to do.
 
 433  *     The DSP sample rate must already be set to a supported
 
 434  *     S/PDIF rate (32kHz, 44.1kHz, or 48kHz) or we abort.
 
 436 static void ali_set_spdif_output(struct ali_state *state, int slots,
 
 441         struct ac97_codec *codec = state->card->ac97_codec[0];
 
 443         if (!(state->card->ac97_features & 4)) {
 
 444                 state->card->ac97_status &= ~SPDIF_ON;
 
 446                 if (slots == -1) {      /* Turn off S/PDIF */
 
 447                         aud_reg = ali_ac97_get(codec, AC97_EXTENDED_STATUS);
 
 448                         ali_ac97_set(codec, AC97_EXTENDED_STATUS, (aud_reg & ~AC97_EA_SPDIF));
 
 450                         /* If the volume wasn't muted before we turned on S/PDIF, unmute it */
 
 451                         if (!(state->card->ac97_status & VOL_MUTED)) {
 
 452                                 aud_reg = ali_ac97_get(codec, AC97_MASTER_VOL_STEREO);
 
 453                                 ali_ac97_set(codec, AC97_MASTER_VOL_STEREO,
 
 454                                              (aud_reg & ~VOL_MUTED));
 
 456                         state->card->ac97_status &= ~(VOL_MUTED | SPDIF_ON);
 
 460                 vol = ali_ac97_get(codec, AC97_MASTER_VOL_STEREO);
 
 461                 state->card->ac97_status = vol & VOL_MUTED;
 
 463                 /* Set S/PDIF transmitter sample rate */
 
 464                 aud_reg = ali_ac97_get(codec, AC97_SPDIF_CONTROL);
 
 467                         aud_reg = (aud_reg & AC97_SC_SPSR_MASK) | AC97_SC_SPSR_32K;
 
 470                         aud_reg = (aud_reg & AC97_SC_SPSR_MASK) | AC97_SC_SPSR_44K;
 
 473                         aud_reg = (aud_reg & AC97_SC_SPSR_MASK) | AC97_SC_SPSR_48K;
 
 476                         /* turn off S/PDIF */
 
 477                         aud_reg = ali_ac97_get(codec, AC97_EXTENDED_STATUS);
 
 478                         ali_ac97_set(codec, AC97_EXTENDED_STATUS, (aud_reg & ~AC97_EA_SPDIF));
 
 479                         state->card->ac97_status &= ~SPDIF_ON;
 
 483                 ali_ac97_set(codec, AC97_SPDIF_CONTROL, aud_reg);
 
 485                 aud_reg = ali_ac97_get(codec, AC97_EXTENDED_STATUS);
 
 486                 aud_reg = (aud_reg & AC97_EA_SLOT_MASK) | slots | AC97_EA_SPDIF;
 
 487                 ali_ac97_set(codec, AC97_EXTENDED_STATUS, aud_reg);
 
 489                 aud_reg = ali_ac97_get(codec, AC97_POWER_CONTROL);
 
 491                 ali_ac97_set(codec, AC97_POWER_CONTROL, aud_reg);
 
 494                 state->card->ac97_status |= SPDIF_ON;
 
 496                 /* Check to make sure the configuration is valid */
 
 497                 aud_reg = ali_ac97_get(codec, AC97_EXTENDED_STATUS);
 
 498                 if (!(aud_reg & 0x0400)) {
 
 499                         /* turn off S/PDIF */
 
 500                         ali_ac97_set(codec, AC97_EXTENDED_STATUS, (aud_reg & ~AC97_EA_SPDIF));
 
 501                         state->card->ac97_status &= ~SPDIF_ON;
 
 504                 if (codec_independent_spdif_locked > 0) {
 
 505                         aud_reg = ali_ac97_get(codec, 0x6a);
 
 506                         ali_ac97_set(codec, 0x6a, (aud_reg & 0xefff));
 
 508                 /* Mute the analog output */
 
 509                 /* Should this only mute the PCM volume??? */
 
 513 /* ali_set_dac_channels
 
 515  *  Configure the codec's multi-channel DACs
 
 517  *  The logic is backwards. Setting the bit to 1 turns off the DAC. 
 
 519  *  What about the ICH? We currently configure it using the
 
 520  *  SNDCTL_DSP_CHANNELS ioctl.  If we're turnning on the DAC, 
 
 521  *  does that imply that we want the ICH set to support
 
 525  *    vailidate that the codec really supports these DACs
 
 526  *    before turning them on. 
 
 528 static void ali_set_dac_channels(struct ali_state *state, int channel)
 
 531         struct ac97_codec *codec = state->card->ac97_codec[0];
 
 533         aud_reg = ali_ac97_get(codec, AC97_EXTENDED_STATUS);
 
 534         aud_reg |= AC97_EA_PRI | AC97_EA_PRJ | AC97_EA_PRK;
 
 535         state->card->ac97_status &= ~(SURR_ON | CENTER_LFE_ON);
 
 538         case 2:         /* always enabled */
 
 541                 aud_reg &= ~AC97_EA_PRJ;
 
 542                 state->card->ac97_status |= SURR_ON;
 
 545                 aud_reg &= ~(AC97_EA_PRJ | AC97_EA_PRI | AC97_EA_PRK);
 
 546                 state->card->ac97_status |= SURR_ON | CENTER_LFE_ON;
 
 551         ali_ac97_set(codec, AC97_EXTENDED_STATUS, aud_reg);
 
 555 /* set playback sample rate */
 
 556 static unsigned int ali_set_dac_rate(struct ali_state *state,
 
 559         struct dmabuf *dmabuf = &state->dmabuf;
 
 561         struct ac97_codec *codec = state->card->ac97_codec[0];
 
 563         if (!(state->card->ac97_features & 0x0001)) {
 
 564                 dmabuf->rate = clocking;
 
 575          *      Adjust for misclocked crap
 
 578         rate = (rate * clocking) / 48000;
 
 580         if (strict_clocking && rate < 8000) {
 
 582                 dmabuf->rate = (rate * 48000) / clocking;
 
 585         new_rate = ac97_set_dac_rate(codec, rate);
 
 586         if (new_rate != rate) {
 
 587                 dmabuf->rate = (new_rate * 48000) / clocking;
 
 593 /* set recording sample rate */
 
 594 static unsigned int ali_set_adc_rate(struct ali_state *state,
 
 597         struct dmabuf *dmabuf = &state->dmabuf;
 
 599         struct ac97_codec *codec = state->card->ac97_codec[0];
 
 601         if (!(state->card->ac97_features & 0x0001)) {
 
 602                 dmabuf->rate = clocking;
 
 613          *      Adjust for misclocked crap
 
 616         rate = (rate * clocking) / 48000;
 
 617         if (strict_clocking && rate < 8000) {
 
 619                 dmabuf->rate = (rate * 48000) / clocking;
 
 622         new_rate = ac97_set_adc_rate(codec, rate);
 
 624         if (new_rate != rate) {
 
 625                 dmabuf->rate = (new_rate * 48000) / clocking;
 
 631 /* set codec independent spdifout sample rate */
 
 632 static unsigned int ali_set_codecspdifout_rate(struct ali_state *state,
 
 635         struct dmabuf *dmabuf = &state->dmabuf;
 
 637         if (!(state->card->ac97_features & 0x0001)) {
 
 638                 dmabuf->rate = clocking;
 
 651 /* set  controller independent spdif out function sample rate */
 
 652 static void ali_set_spdifout_rate(struct ali_state *state,
 
 655         unsigned char ch_st_sel;
 
 656         unsigned short status_rate;
 
 671         ch_st_sel = inb(state->card->iobase + ALI_SPDIFICS) & ALI_SPDIF_OUT_CH_STATUS;  //select spdif_out
 
 673         ch_st_sel |= 0x80;      //select right
 
 674         outb(ch_st_sel, (state->card->iobase + ALI_SPDIFICS));
 
 675         outb(status_rate | 0x20, (state->card->iobase + ALI_SPDIFCSR + 2));
 
 677         ch_st_sel &= (~0x80);   //select left
 
 678         outb(ch_st_sel, (state->card->iobase + ALI_SPDIFICS));
 
 679         outw(status_rate | 0x10, (state->card->iobase + ALI_SPDIFCSR + 2));
 
 682 /* get current playback/recording dma buffer pointer (byte offset from LBA),
 
 683    called with spinlock held! */
 
 685 static inline unsigned ali_get_dma_addr(struct ali_state *state, int rec)
 
 687         struct dmabuf *dmabuf = &state->dmabuf;
 
 688         unsigned int civ, offset, port, port_picb;
 
 695                 port = state->card->iobase + dmabuf->read_channel->port;
 
 697                 port = state->card->iobase + dmabuf->codec_spdifout_channel->port;
 
 699                 port = state->card->iobase + dmabuf->controller_spdifout_channel->port;
 
 701                 port = state->card->iobase + dmabuf->write_channel->port;
 
 703         port_picb = port + OFF_PICB;
 
 706                 civ = inb(port + OFF_CIV) & 31;
 
 707                 offset = inw(port_picb);
 
 708                 /* Must have a delay here! */
 
 712                 /* Reread both registers and make sure that that total
 
 713                  * offset from the first reading to the second is 0.
 
 714                  * There is an issue with SiS hardware where it will count
 
 715                  * picb down to 0, then update civ to the next value,
 
 716                  * then set the new picb to fragsize bytes.  We can catch
 
 717                  * it between the civ update and the picb update, making
 
 718                  * it look as though we are 1 fragsize ahead of where we
 
 719                  * are.  The next to we get the address though, it will
 
 720                  * be back in thdelay is more than long enough
 
 721                  * that we won't have to worry about the chip still being
 
 722                  * out of sync with reality ;-)
 
 724         } while (civ != (inb(port + OFF_CIV) & 31) || offset != inw(port_picb));
 
 726         data = ((civ + 1) * dmabuf->fragsize - (2 * offset)) % dmabuf->dmasize;
 
 727         if (inw(port_picb) == 0)
 
 733 /* Stop recording (lock held) */
 
 734 static inline void __stop_adc(struct ali_state *state)
 
 736         struct dmabuf *dmabuf = &state->dmabuf;
 
 737         struct ali_card *card = state->card;
 
 739         dmabuf->enable &= ~ADC_RUNNING;
 
 741         outl((1 << 18) | (1 << 16), card->iobase + ALI_DMACR);
 
 744         outb(0, card->iobase + PI_CR);
 
 745         while (inb(card->iobase + PI_CR) != 0);
 
 747         // now clear any latent interrupt bits (like the halt bit)
 
 748         outb(inb(card->iobase + PI_SR) | 0x001e, card->iobase + PI_SR);
 
 749         outl(inl(card->iobase + ALI_INTERRUPTSR) & INT_PCMIN, card->iobase + ALI_INTERRUPTSR);
 
 752 static void stop_adc(struct ali_state *state)
 
 754         struct ali_card *card = state->card;
 
 756         spin_lock_irqsave(&card->lock, flags);
 
 758         spin_unlock_irqrestore(&card->lock, flags);
 
 761 static inline void __start_adc(struct ali_state *state)
 
 763         struct dmabuf *dmabuf = &state->dmabuf;
 
 765         if (dmabuf->count < dmabuf->dmasize && dmabuf->ready
 
 766             && !dmabuf->enable && (dmabuf->trigger & PCM_ENABLE_INPUT)) {
 
 767                 dmabuf->enable |= ADC_RUNNING;
 
 768                 outb((1 << 4) | (1 << 2), state->card->iobase + PI_CR);
 
 769                 if (state->card->channel[0].used == 1)
 
 770                         outl(1, state->card->iobase + ALI_DMACR);       // DMA CONTROL REGISTRER
 
 772                 if (state->card->channel[2].used == 1)
 
 773                         outl((1 << 2), state->card->iobase + ALI_DMACR);        //DMA CONTROL REGISTER
 
 778 static void start_adc(struct ali_state *state)
 
 780         struct ali_card *card = state->card;
 
 783         spin_lock_irqsave(&card->lock, flags);
 
 785         spin_unlock_irqrestore(&card->lock, flags);
 
 788 /* stop playback (lock held) */
 
 789 static inline void __stop_dac(struct ali_state *state)
 
 791         struct dmabuf *dmabuf = &state->dmabuf;
 
 792         struct ali_card *card = state->card;
 
 794         dmabuf->enable &= ~DAC_RUNNING;
 
 795         outl(0x00020000, card->iobase + 0x08);
 
 796         outb(0, card->iobase + PO_CR);
 
 797         while (inb(card->iobase + PO_CR) != 0)
 
 800         outb(inb(card->iobase + PO_SR) | 0x001e, card->iobase + PO_SR);
 
 802         outl(inl(card->iobase + ALI_INTERRUPTSR) & INT_PCMOUT, card->iobase + ALI_INTERRUPTSR);
 
 805 static void stop_dac(struct ali_state *state)
 
 807         struct ali_card *card = state->card;
 
 809         spin_lock_irqsave(&card->lock, flags);
 
 811         spin_unlock_irqrestore(&card->lock, flags);
 
 814 static inline void __start_dac(struct ali_state *state)
 
 816         struct dmabuf *dmabuf = &state->dmabuf;
 
 817         if (dmabuf->count > 0 && dmabuf->ready && !dmabuf->enable &&
 
 818             (dmabuf->trigger & PCM_ENABLE_OUTPUT)) {
 
 819                 dmabuf->enable |= DAC_RUNNING;
 
 820                 outb((1 << 4) | (1 << 2), state->card->iobase + PO_CR);
 
 821                 outl((1 << 1), state->card->iobase + 0x08);     //dma control register
 
 825 static void start_dac(struct ali_state *state)
 
 827         struct ali_card *card = state->card;
 
 829         spin_lock_irqsave(&card->lock, flags);
 
 831         spin_unlock_irqrestore(&card->lock, flags);
 
 834 /* stop codec and controller spdif out  (lock held) */
 
 835 static inline void __stop_spdifout(struct ali_state *state)
 
 837         struct dmabuf *dmabuf = &state->dmabuf;
 
 838         struct ali_card *card = state->card;
 
 840         if (codec_independent_spdif_locked > 0) {
 
 841                 dmabuf->enable &= ~CODEC_SPDIFOUT_RUNNING;
 
 842                 outl((1 << 19), card->iobase + 0x08);
 
 843                 outb(0, card->iobase + CODECSPDIFOUT_CR);
 
 845                 while (inb(card->iobase + CODECSPDIFOUT_CR) != 0)
 
 848                 outb(inb(card->iobase + CODECSPDIFOUT_SR) | 0x001e, card->iobase + CODECSPDIFOUT_SR);
 
 849                 outl(inl(card->iobase + ALI_INTERRUPTSR) & INT_CODECSPDIFOUT, card->iobase + ALI_INTERRUPTSR);
 
 851                 if (controller_independent_spdif_locked > 0) {
 
 852                         dmabuf->enable &= ~CONTROLLER_SPDIFOUT_RUNNING;
 
 853                         outl((1 << 23), card->iobase + 0x08);
 
 854                         outb(0, card->iobase + CONTROLLERSPDIFOUT_CR);
 
 855                         while (inb(card->iobase + CONTROLLERSPDIFOUT_CR) != 0)
 
 857                         outb(inb(card->iobase + CONTROLLERSPDIFOUT_SR) | 0x001e, card->iobase + CONTROLLERSPDIFOUT_SR);
 
 858                         outl(inl(card->iobase + ALI_INTERRUPTSR) & INT_SPDIFOUT, card->iobase + ALI_INTERRUPTSR);
 
 863 static void stop_spdifout(struct ali_state *state)
 
 865         struct ali_card *card = state->card;
 
 867         spin_lock_irqsave(&card->lock, flags);
 
 868         __stop_spdifout(state);
 
 869         spin_unlock_irqrestore(&card->lock, flags);
 
 872 static inline void __start_spdifout(struct ali_state *state)
 
 874         struct dmabuf *dmabuf = &state->dmabuf;
 
 875         if (dmabuf->count > 0 && dmabuf->ready && !dmabuf->enable &&
 
 876             (dmabuf->trigger & SPDIF_ENABLE_OUTPUT)) {
 
 877                 if (codec_independent_spdif_locked > 0) {
 
 878                         dmabuf->enable |= CODEC_SPDIFOUT_RUNNING;
 
 879                         outb((1 << 4) | (1 << 2), state->card->iobase + CODECSPDIFOUT_CR);
 
 880                         outl((1 << 3), state->card->iobase + 0x08);     //dma control register
 
 882                         if (controller_independent_spdif_locked > 0) {
 
 883                                 dmabuf->enable |= CONTROLLER_SPDIFOUT_RUNNING;
 
 884                                 outb((1 << 4) | (1 << 2), state->card->iobase + CONTROLLERSPDIFOUT_CR);
 
 885                                 outl((1 << 7), state->card->iobase + 0x08);     //dma control register
 
 891 static void start_spdifout(struct ali_state *state)
 
 893         struct ali_card *card = state->card;
 
 895         spin_lock_irqsave(&card->lock, flags);
 
 896         __start_spdifout(state);
 
 897         spin_unlock_irqrestore(&card->lock, flags);
 
 900 #define DMABUF_DEFAULTORDER (16-PAGE_SHIFT)
 
 901 #define DMABUF_MINORDER 1
 
 903 /* allocate DMA buffer, playback , recording,spdif out  buffer should be allocated separately */
 
 904 static int alloc_dmabuf(struct ali_state *state)
 
 906         struct dmabuf *dmabuf = &state->dmabuf;
 
 909         struct page *page, *pend;
 
 911         /* If we don't have any oss frag params, then use our default ones */
 
 912         if (dmabuf->ossmaxfrags == 0)
 
 913                 dmabuf->ossmaxfrags = 4;
 
 914         if (dmabuf->ossfragsize == 0)
 
 915                 dmabuf->ossfragsize = (PAGE_SIZE << DMABUF_DEFAULTORDER) / dmabuf->ossmaxfrags;
 
 916         size = dmabuf->ossfragsize * dmabuf->ossmaxfrags;
 
 918         if (dmabuf->rawbuf && (PAGE_SIZE << dmabuf->buforder) == size)
 
 920         /* alloc enough to satisfy the oss params */
 
 921         for (order = DMABUF_DEFAULTORDER; order >= DMABUF_MINORDER; order--) {
 
 922                 if ((PAGE_SIZE << order) > size)
 
 924                 if ((rawbuf = pci_alloc_consistent(state->card->pci_dev,
 
 926                                                    &dmabuf->dma_handle)))
 
 932         dmabuf->ready = dmabuf->mapped = 0;
 
 933         dmabuf->rawbuf = rawbuf;
 
 934         dmabuf->buforder = order;
 
 936         /* now mark the pages as reserved; otherwise remap_pfn_range doesn't do what we want */
 
 937         pend = virt_to_page(rawbuf + (PAGE_SIZE << order) - 1);
 
 938         for (page = virt_to_page(rawbuf); page <= pend; page++)
 
 939                 SetPageReserved(page);
 
 943 /* free DMA buffer */
 
 944 static void dealloc_dmabuf(struct ali_state *state)
 
 946         struct dmabuf *dmabuf = &state->dmabuf;
 
 947         struct page *page, *pend;
 
 949         if (dmabuf->rawbuf) {
 
 950                 /* undo marking the pages as reserved */
 
 951                 pend = virt_to_page(dmabuf->rawbuf + (PAGE_SIZE << dmabuf->buforder) - 1);
 
 952                 for (page = virt_to_page(dmabuf->rawbuf); page <= pend; page++)
 
 953                         ClearPageReserved(page);
 
 954                 pci_free_consistent(state->card->pci_dev,
 
 955                                     PAGE_SIZE << dmabuf->buforder,
 
 956                                     dmabuf->rawbuf, dmabuf->dma_handle);
 
 958         dmabuf->rawbuf = NULL;
 
 959         dmabuf->mapped = dmabuf->ready = 0;
 
 962 static int prog_dmabuf(struct ali_state *state, unsigned rec)
 
 964         struct dmabuf *dmabuf = &state->dmabuf;
 
 965         struct ali_channel *c = NULL;
 
 972         spin_lock_irqsave(&state->card->lock, flags);
 
 973         if (dmabuf->enable & DAC_RUNNING)
 
 975         if (dmabuf->enable & ADC_RUNNING)
 
 977         if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
 
 978                 __stop_spdifout(state);
 
 979         if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
 
 980                 __stop_spdifout(state);
 
 982         dmabuf->total_bytes = 0;
 
 983         dmabuf->count = dmabuf->error = 0;
 
 984         dmabuf->swptr = dmabuf->hwptr = 0;
 
 985         spin_unlock_irqrestore(&state->card->lock, flags);
 
 987         /* allocate DMA buffer, let alloc_dmabuf determine if we are already
 
 988          * allocated well enough or if we should replace the current buffer
 
 989          * (assuming one is already allocated, if it isn't, then allocate it).
 
 991         if ((ret = alloc_dmabuf(state)))
 
 994         /* FIXME: figure out all this OSS fragment stuff */
 
 995         /* I did, it now does what it should according to the OSS API.  DL */
 
 996         /* We may not have realloced our dmabuf, but the fragment size to
 
 997          * fragment number ratio may have changed, so go ahead and reprogram
 
1001         dmabuf->dmasize = PAGE_SIZE << dmabuf->buforder;
 
1002         dmabuf->numfrag = SG_LEN;
 
1003         dmabuf->fragsize = dmabuf->dmasize / dmabuf->numfrag;
 
1004         dmabuf->fragsamples = dmabuf->fragsize >> 1;
 
1005         dmabuf->userfragsize = dmabuf->ossfragsize;
 
1006         dmabuf->userfrags = dmabuf->dmasize / dmabuf->ossfragsize;
 
1008         memset(dmabuf->rawbuf, 0, dmabuf->dmasize);
 
1010         if (dmabuf->ossmaxfrags == 4) {
 
1012                 dmabuf->fragshift = 2;
 
1013         } else if (dmabuf->ossmaxfrags == 8) {
 
1015                 dmabuf->fragshift = 3;
 
1016         } else if (dmabuf->ossmaxfrags == 16) {
 
1018                 dmabuf->fragshift = 4;
 
1021                 dmabuf->fragshift = 5;
 
1024          *      Now set up the ring 
 
1028                 c = dmabuf->read_channel;
 
1030                 c = dmabuf->codec_spdifout_channel;
 
1032                 c = dmabuf->controller_spdifout_channel;
 
1034                 c = dmabuf->write_channel;
 
1038                  *      Load up 32 sg entries and take an interrupt at half
 
1039                  *      way (we might want more interrupts later..) 
 
1041                 for (i = 0; i < dmabuf->numfrag; i++) {
 
1043                             virt_to_bus(dmabuf->rawbuf +
 
1044                                         dmabuf->fragsize * i);
 
1045                         // the card will always be doing 16bit stereo
 
1046                         sg->control = dmabuf->fragsamples;
 
1047                         sg->control |= CON_BUFPAD;      //I modify
 
1048                         // set us up to get IOC interrupts as often as needed to
 
1049                         // satisfy numfrag requirements, no more
 
1050                         if (((i + 1) % fragint) == 0) {
 
1051                                 sg->control |= CON_IOC;
 
1055                 spin_lock_irqsave(&state->card->lock, flags);
 
1056                 outb(2, state->card->iobase + c->port + OFF_CR);        /* reset DMA machine */
 
1057                 outl(virt_to_bus(&c->sg[0]), state->card->iobase + c->port + OFF_BDBAR);
 
1058                 outb(0, state->card->iobase + c->port + OFF_CIV);
 
1059                 outb(0, state->card->iobase + c->port + OFF_LVI);
 
1060                 spin_unlock_irqrestore(&state->card->lock, flags);
 
1062         /* set the ready flag for the dma buffer */
 
1067 static void __ali_update_lvi(struct ali_state *state, int rec)
 
1069         struct dmabuf *dmabuf = &state->dmabuf;
 
1071         port = state->card->iobase;
 
1073                 port += dmabuf->read_channel->port;
 
1075                 port += dmabuf->codec_spdifout_channel->port;
 
1077                 port += dmabuf->controller_spdifout_channel->port;
 
1079                 port += dmabuf->write_channel->port;
 
1080         /* if we are currently stopped, then our CIV is actually set to our
 
1081          * *last* sg segment and we are ready to wrap to the next.  However,
 
1082          * if we set our LVI to the last sg segment, then it won't wrap to
 
1083          * the next sg segment, it won't even get a start.  So, instead, when
 
1084          * we are stopped, we set both the LVI value and also we increment
 
1085          * the CIV value to the next sg segment to be played so that when
 
1086          * we call start_{dac,adc}, things will operate properly
 
1088         if (!dmabuf->enable && dmabuf->ready) {
 
1089                 if (rec && dmabuf->count < dmabuf->dmasize && (dmabuf->trigger & PCM_ENABLE_INPUT)) {
 
1090                         outb((inb(port + OFF_CIV) + 1) & 31, port + OFF_LVI);
 
1092                         while (! (inb(port + OFF_CR) & ((1 << 4) | (1 << 2))))
 
1094                 } else if (!rec && dmabuf->count && (dmabuf->trigger & PCM_ENABLE_OUTPUT)) {
 
1095                         outb((inb(port + OFF_CIV) + 1) & 31, port + OFF_LVI);
 
1097                         while (!(inb(port + OFF_CR) & ((1 << 4) | (1 << 2))))
 
1099                 } else if (rec && dmabuf->count && (dmabuf->trigger & SPDIF_ENABLE_OUTPUT)) {
 
1100                         if (codec_independent_spdif_locked > 0) {
 
1101                                 // outb((inb(port+OFF_CIV))&31, port+OFF_LVI);
 
1102                                 outb((inb(port + OFF_CIV) + 1) & 31, port + OFF_LVI);
 
1103                                 __start_spdifout(state);
 
1104                                 while (!(inb(port + OFF_CR) & ((1 << 4) | (1 << 2))))
 
1107                                 if (controller_independent_spdif_locked > 0) {
 
1108                                         outb((inb(port + OFF_CIV) + 1) & 31, port + OFF_LVI);
 
1109                                         __start_spdifout(state);
 
1110                                         while (!(inb(port + OFF_CR) & ((1 << 4) | (1 << 2))))
 
1117         /* swptr - 1 is the tail of our transfer */
 
1118         x = (dmabuf->dmasize + dmabuf->swptr - 1) % dmabuf->dmasize;
 
1119         x /= dmabuf->fragsize;
 
1120         outb(x, port + OFF_LVI);
 
1123 static void ali_update_lvi(struct ali_state *state, int rec)
 
1125         struct dmabuf *dmabuf = &state->dmabuf;
 
1126         unsigned long flags;
 
1129         spin_lock_irqsave(&state->card->lock, flags);
 
1130         __ali_update_lvi(state, rec);
 
1131         spin_unlock_irqrestore(&state->card->lock, flags);
 
1134 /* update buffer manangement pointers, especially, dmabuf->count and dmabuf->hwptr */
 
1135 static void ali_update_ptr(struct ali_state *state)
 
1137         struct dmabuf *dmabuf = &state->dmabuf;
 
1141         /* error handling and process wake up for DAC */
 
1142         if (dmabuf->enable == ADC_RUNNING) {
 
1143                 /* update hardware pointer */
 
1144                 hwptr = ali_get_dma_addr(state, 1);
 
1145                 diff = (dmabuf->dmasize + hwptr - dmabuf->hwptr) % dmabuf->dmasize;
 
1146                 dmabuf->hwptr = hwptr;
 
1147                 dmabuf->total_bytes += diff;
 
1148                 dmabuf->count += diff;
 
1149                 if (dmabuf->count > dmabuf->dmasize) {
 
1150                         /* buffer underrun or buffer overrun */
 
1151                         /* this is normal for the end of a read */
 
1152                         /* only give an error if we went past the */
 
1153                         /* last valid sg entry */
 
1154                         if ((inb(state->card->iobase + PI_CIV) & 31) != (inb(state->card->iobase + PI_LVI) & 31)) {
 
1155                                 printk(KERN_WARNING "ali_audio: DMA overrun on read\n");
 
1159                 if (dmabuf->count > dmabuf->userfragsize)
 
1160                         wake_up(&dmabuf->wait);
 
1162         /* error handling and process wake up for DAC */
 
1163         if (dmabuf->enable == DAC_RUNNING) {
 
1164                 /* update hardware pointer */
 
1165                 hwptr = ali_get_dma_addr(state, 0);
 
1167                     (dmabuf->dmasize + hwptr -
 
1168                      dmabuf->hwptr) % dmabuf->dmasize;
 
1169 #if defined(DEBUG_INTERRUPTS) || defined(DEBUG_MMAP)
 
1170                 printk("DAC HWP %d,%d,%d\n", hwptr, dmabuf->hwptr, diff);
 
1172                 dmabuf->hwptr = hwptr;
 
1173                 dmabuf->total_bytes += diff;
 
1174                 dmabuf->count -= diff;
 
1175                 if (dmabuf->count < 0) {
 
1176                         /* buffer underrun or buffer overrun */
 
1177                         /* this is normal for the end of a write */
 
1178                         /* only give an error if we went past the */
 
1179                         /* last valid sg entry */
 
1180                         if ((inb(state->card->iobase + PO_CIV) & 31) != (inb(state->card->iobase + PO_LVI) & 31)) {
 
1181                                 printk(KERN_WARNING "ali_audio: DMA overrun on write\n");
 
1182                                 printk(KERN_DEBUG "ali_audio: CIV %d, LVI %d, hwptr %x, count %d\n",
 
1183                                                         inb(state->card->iobase + PO_CIV) & 31,
 
1184                                                         inb(state->card->iobase + PO_LVI) & 31, 
 
1190                 if (dmabuf->count < (dmabuf->dmasize - dmabuf->userfragsize))
 
1191                         wake_up(&dmabuf->wait);
 
1194         /* error handling and process wake up for CODEC SPDIF OUT */
 
1195         if (dmabuf->enable == CODEC_SPDIFOUT_RUNNING) {
 
1196                 /* update hardware pointer */
 
1197                 hwptr = ali_get_dma_addr(state, 2);
 
1198                 diff = (dmabuf->dmasize + hwptr - dmabuf->hwptr) % dmabuf->dmasize;
 
1199                 dmabuf->hwptr = hwptr;
 
1200                 dmabuf->total_bytes += diff;
 
1201                 dmabuf->count -= diff;
 
1202                 if (dmabuf->count < 0) {
 
1203                         /* buffer underrun or buffer overrun */
 
1204                         /* this is normal for the end of a write */
 
1205                         /* only give an error if we went past the */
 
1206                         /* last valid sg entry */
 
1207                         if ((inb(state->card->iobase + CODECSPDIFOUT_CIV) & 31) != (inb(state->card->iobase + CODECSPDIFOUT_LVI) & 31)) {
 
1208                                 printk(KERN_WARNING "ali_audio: DMA overrun on write\n");
 
1209                                 printk(KERN_DEBUG "ali_audio: CIV %d, LVI %d, hwptr %x, count %d\n", 
 
1210                                         inb(state->card->iobase + CODECSPDIFOUT_CIV) & 31,
 
1211                                         inb(state->card->iobase + CODECSPDIFOUT_LVI) & 31,
 
1212                                         dmabuf->hwptr, dmabuf->count);
 
1216                 if (dmabuf->count < (dmabuf->dmasize - dmabuf->userfragsize))
 
1217                         wake_up(&dmabuf->wait);
 
1219         /* error handling and process wake up for CONTROLLER SPDIF OUT */
 
1220         if (dmabuf->enable == CONTROLLER_SPDIFOUT_RUNNING) {
 
1221                 /* update hardware pointer */
 
1222                 hwptr = ali_get_dma_addr(state, 3);
 
1223                 diff = (dmabuf->dmasize + hwptr - dmabuf->hwptr) % dmabuf->dmasize;
 
1224                 dmabuf->hwptr = hwptr;
 
1225                 dmabuf->total_bytes += diff;
 
1226                 dmabuf->count -= diff;
 
1227                 if (dmabuf->count < 0) {
 
1228                         /* buffer underrun or buffer overrun */
 
1229                         /* this is normal for the end of a write */
 
1230                         /* only give an error if we went past the */
 
1231                         /* last valid sg entry */
 
1232                         if ((inb(state->card->iobase + CONTROLLERSPDIFOUT_CIV) & 31) != (inb(state->card->iobase + CONTROLLERSPDIFOUT_LVI) & 31)) {
 
1234                                        "ali_audio: DMA overrun on write\n");
 
1235                                 printk("ali_audio: CIV %d, LVI %d, hwptr %x, "
 
1237                                                 inb(state->card->iobase + CONTROLLERSPDIFOUT_CIV) & 31,
 
1238                                                 inb(state->card->iobase + CONTROLLERSPDIFOUT_LVI) & 31,
 
1239                                                 dmabuf->hwptr, dmabuf->count);
 
1243                 if (dmabuf->count < (dmabuf->dmasize - dmabuf->userfragsize))
 
1244                         wake_up(&dmabuf->wait);
 
1248 static inline int ali_get_free_write_space(struct
 
1252         struct dmabuf *dmabuf = &state->dmabuf;
 
1255         if (dmabuf->count < 0) {
 
1257                 dmabuf->swptr = dmabuf->hwptr;
 
1259         free = dmabuf->dmasize - dmabuf->swptr;
 
1260         if ((dmabuf->count + free) > dmabuf->dmasize){
 
1261                 free = dmabuf->dmasize - dmabuf->count;
 
1266 static inline int ali_get_available_read_data(struct
 
1270         struct dmabuf *dmabuf = &state->dmabuf;
 
1272         ali_update_ptr(state);
 
1273         // catch overruns during record
 
1274         if (dmabuf->count > dmabuf->dmasize) {
 
1275                 dmabuf->count = dmabuf->dmasize;
 
1276                 dmabuf->swptr = dmabuf->hwptr;
 
1278         avail = dmabuf->count;
 
1279         avail -= (dmabuf->hwptr % dmabuf->fragsize);
 
1285 static int drain_dac(struct ali_state *state, int signals_allowed)
 
1288         DECLARE_WAITQUEUE(wait, current);
 
1289         struct dmabuf *dmabuf = &state->dmabuf;
 
1290         unsigned long flags;
 
1295         if (dmabuf->mapped) {
 
1299         add_wait_queue(&dmabuf->wait, &wait);
 
1302                 spin_lock_irqsave(&state->card->lock, flags);
 
1303                 ali_update_ptr(state);
 
1304                 count = dmabuf->count;
 
1305                 spin_unlock_irqrestore(&state->card->lock, flags);
 
1309                  * This will make sure that our LVI is correct, that our
 
1310                  * pointer is updated, and that the DAC is running.  We
 
1311                  * have to force the setting of dmabuf->trigger to avoid
 
1312                  * any possible deadlocks.
 
1314                 if (!dmabuf->enable) {
 
1315                         dmabuf->trigger = PCM_ENABLE_OUTPUT;
 
1316                         ali_update_lvi(state, 0);
 
1318                 if (signal_pending(current) && signals_allowed) {
 
1322                 /* It seems that we have to set the current state to
 
1323                  * TASK_INTERRUPTIBLE every time to make the process
 
1324                  * really go to sleep.  This also has to be *after* the
 
1325                  * update_ptr() call because update_ptr is likely to
 
1326                  * do a wake_up() which will unset this before we ever
 
1327                  * try to sleep, resuling in a tight loop in this code
 
1328                  * instead of actually sleeping and waiting for an
 
1329                  * interrupt to wake us up!
 
1331                 set_current_state(TASK_INTERRUPTIBLE);
 
1333                  * set the timeout to significantly longer than it *should*
 
1334                  * take for the DAC to drain the DMA buffer
 
1336                 tmo = (count * HZ) / (dmabuf->rate);
 
1337                 if (!schedule_timeout(tmo >= 2 ? tmo : 2)) {
 
1338                         printk(KERN_ERR "ali_audio: drain_dac, dma timeout?\n");
 
1343         set_current_state(TASK_RUNNING);
 
1344         remove_wait_queue(&dmabuf->wait, &wait);
 
1345         if (count > 0 && signal_pending(current) && signals_allowed)
 
1346                 return -ERESTARTSYS;
 
1352 static int drain_spdifout(struct ali_state *state, int signals_allowed)
 
1355         DECLARE_WAITQUEUE(wait, current);
 
1356         struct dmabuf *dmabuf = &state->dmabuf;
 
1357         unsigned long flags;
 
1362         if (dmabuf->mapped) {
 
1363                 stop_spdifout(state);
 
1366         add_wait_queue(&dmabuf->wait, &wait);
 
1369                 spin_lock_irqsave(&state->card->lock, flags);
 
1370                 ali_update_ptr(state);
 
1371                 count = dmabuf->count;
 
1372                 spin_unlock_irqrestore(&state->card->lock, flags);
 
1376                  * This will make sure that our LVI is correct, that our
 
1377                  * pointer is updated, and that the DAC is running.  We
 
1378                  * have to force the setting of dmabuf->trigger to avoid
 
1379                  * any possible deadlocks.
 
1381                 if (!dmabuf->enable) {
 
1382                         if (codec_independent_spdif_locked > 0) {
 
1383                                 dmabuf->trigger = SPDIF_ENABLE_OUTPUT;
 
1384                                 ali_update_lvi(state, 2);
 
1386                                 if (controller_independent_spdif_locked > 0) {
 
1387                                         dmabuf->trigger = SPDIF_ENABLE_OUTPUT;
 
1388                                         ali_update_lvi(state, 3);
 
1392                 if (signal_pending(current) && signals_allowed) {
 
1396                 /* It seems that we have to set the current state to
 
1397                  * TASK_INTERRUPTIBLE every time to make the process
 
1398                  * really go to sleep.  This also has to be *after* the
 
1399                  * update_ptr() call because update_ptr is likely to
 
1400                  * do a wake_up() which will unset this before we ever
 
1401                  * try to sleep, resuling in a tight loop in this code
 
1402                  * instead of actually sleeping and waiting for an
 
1403                  * interrupt to wake us up!
 
1405                 set_current_state(TASK_INTERRUPTIBLE);
 
1407                  * set the timeout to significantly longer than it *should*
 
1408                  * take for the DAC to drain the DMA buffer
 
1410                 tmo = (count * HZ) / (dmabuf->rate);
 
1411                 if (!schedule_timeout(tmo >= 2 ? tmo : 2)) {
 
1412                         printk(KERN_ERR "ali_audio: drain_spdifout, dma timeout?\n");
 
1417         set_current_state(TASK_RUNNING);
 
1418         remove_wait_queue(&dmabuf->wait, &wait);
 
1419         if (count > 0 && signal_pending(current) && signals_allowed)
 
1420                 return -ERESTARTSYS;
 
1421         stop_spdifout(state);
 
1425 static void ali_channel_interrupt(struct ali_card *card)
 
1429         for (i = 0; i < NR_HW_CH; i++) {
 
1430                 struct ali_state *state = card->states[i];
 
1431                 struct ali_channel *c = NULL;
 
1432                 struct dmabuf *dmabuf;
 
1433                 unsigned long port = card->iobase;
 
1437                 if (!state->dmabuf.ready)
 
1439                 dmabuf = &state->dmabuf;
 
1440                 if (codec_independent_spdif_locked > 0) {
 
1441                         if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING) {
 
1442                                 c = dmabuf->codec_spdifout_channel;
 
1445                         if (controller_independent_spdif_locked > 0) {
 
1446                                 if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
 
1447                                         c = dmabuf->controller_spdifout_channel;
 
1449                                 if (dmabuf->enable & DAC_RUNNING) {
 
1450                                         c = dmabuf->write_channel;
 
1451                                 } else if (dmabuf->enable & ADC_RUNNING) {
 
1452                                         c = dmabuf->read_channel;
 
1459                 status = inw(port + OFF_SR);
 
1461                 if (status & DMA_INT_COMPLETE) {
 
1462                         /* only wake_up() waiters if this interrupt signals
 
1463                          * us being beyond a userfragsize of data open or
 
1464                          * available, and ali_update_ptr() does that for
 
1467                         ali_update_ptr(state);
 
1470                 if (status & DMA_INT_LVI) {
 
1471                         ali_update_ptr(state);
 
1472                         wake_up(&dmabuf->wait);
 
1474                         if (dmabuf->enable & DAC_RUNNING)
 
1475                                 count = dmabuf->count;
 
1476                         else if (dmabuf->enable & ADC_RUNNING)
 
1477                                 count = dmabuf->dmasize - dmabuf->count;
 
1478                         else if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
 
1479                                 count = dmabuf->count;
 
1480                         else if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
 
1481                                 count = dmabuf->count;
 
1485                                 if (dmabuf->enable & DAC_RUNNING)
 
1486                                         outl((1 << 1), state->card->iobase + ALI_DMACR);
 
1487                                 else if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
 
1488                                                 outl((1 << 3), state->card->iobase + ALI_DMACR);
 
1489                                 else if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
 
1490                                         outl((1 << 7), state->card->iobase + ALI_DMACR);
 
1492                                 if (dmabuf->enable & DAC_RUNNING)
 
1494                                 if (dmabuf->enable & ADC_RUNNING)
 
1496                                 if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
 
1497                                         __stop_spdifout(state);
 
1498                                 if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
 
1499                                         __stop_spdifout(state);
 
1501                                 wake_up(&dmabuf->wait);
 
1505                 if (!(status & DMA_INT_DCH)) {
 
1506                         ali_update_ptr(state);
 
1507                         wake_up(&dmabuf->wait);
 
1508                         if (dmabuf->enable & DAC_RUNNING)
 
1509                                 count = dmabuf->count;
 
1510                         else if (dmabuf->enable & ADC_RUNNING)
 
1511                                 count = dmabuf->dmasize - dmabuf->count;
 
1512                         else if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
 
1513                                 count = dmabuf->count;
 
1514                         else if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
 
1515                                 count = dmabuf->count;
 
1520                                 if (dmabuf->enable & DAC_RUNNING)
 
1521                                         outl((1 << 1), state->card->iobase + ALI_DMACR);
 
1522                                 else if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
 
1523                                         outl((1 << 3), state->card->iobase + ALI_DMACR);
 
1524                                 else if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
 
1525                                         outl((1 << 7), state->card->iobase + ALI_DMACR);
 
1527                                 if (dmabuf->enable & DAC_RUNNING)
 
1529                                 if (dmabuf->enable & ADC_RUNNING)
 
1531                                 if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
 
1532                                         __stop_spdifout(state);
 
1533                                 if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
 
1534                                         __stop_spdifout(state);
 
1536                                 wake_up(&dmabuf->wait);
 
1539                 outw(status & DMA_INT_MASK, port + OFF_SR);
 
1543 static irqreturn_t ali_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 
1545         struct ali_card *card = (struct ali_card *) dev_id;
 
1549         spin_lock(&card->lock);
 
1550         status = inl(card->iobase + ALI_INTERRUPTSR);
 
1551         if (!(status & INT_MASK)) {
 
1552                 spin_unlock(&card->lock);
 
1553                 return IRQ_NONE;                /* not for us */
 
1556         if (codec_independent_spdif_locked > 0) {
 
1559                         status2 = inw(card->iobase + 0x76);
 
1560                         outw(status2 | 0x000c, card->iobase + 0x76);
 
1562                         if (status & (INT_PCMOUT | INT_PCMIN | INT_MICIN | INT_SPDIFOUT | INT_CODECSPDIFOUT))
 
1563                                 ali_channel_interrupt(card);
 
1566                 if (status & (INT_PCMOUT | INT_PCMIN | INT_MICIN | INT_SPDIFOUT | INT_CODECSPDIFOUT))
 
1567                         ali_channel_interrupt(card);
 
1571         outl(status & INT_MASK, card->iobase + ALI_INTERRUPTSR);
 
1572         spin_unlock(&card->lock);
 
1576 /* in this loop, dmabuf.count signifies the amount of data that is
 
1577    waiting to be copied to the user's buffer.  It is filled by the dma
 
1578    machine and drained by this loop. */
 
1580 static ssize_t ali_read(struct file *file, char __user *buffer,
 
1581                         size_t count, loff_t * ppos)
 
1583         struct ali_state *state = (struct ali_state *) file->private_data;
 
1584         struct ali_card *card = state ? state->card : NULL;
 
1585         struct dmabuf *dmabuf = &state->dmabuf;
 
1587         unsigned long flags;
 
1590         DECLARE_WAITQUEUE(waita, current);
 
1592         printk("ali_audio: ali_read called, count = %d\n", count);
 
1596         if (dmabuf->enable & DAC_RUNNING)
 
1598         if (!dmabuf->read_channel) {
 
1600                 dmabuf->read_channel = card->alloc_rec_pcm_channel(card);
 
1601                 if (!dmabuf->read_channel) {
 
1605         if (!dmabuf->ready && (ret = prog_dmabuf(state, 1)))
 
1607         if (!access_ok(VERIFY_WRITE, buffer, count))
 
1610         add_wait_queue(&dmabuf->wait, &waita);
 
1612                 set_current_state(TASK_INTERRUPTIBLE);
 
1613                 spin_lock_irqsave(&card->lock, flags);
 
1614                 if (PM_SUSPENDED(card)) {
 
1615                         spin_unlock_irqrestore(&card->lock, flags);
 
1617                         if (signal_pending(current)) {
 
1624                 swptr = dmabuf->swptr;
 
1625                 cnt = ali_get_available_read_data(state);
 
1626                 // this is to make the copy_to_user simpler below
 
1627                 if (cnt > (dmabuf->dmasize - swptr))
 
1628                         cnt = dmabuf->dmasize - swptr;
 
1629                 spin_unlock_irqrestore(&card->lock, flags);
 
1632                 /* Lop off the last two bits to force the code to always
 
1633                  * write in full samples.  This keeps software that sets
 
1634                  * O_NONBLOCK but doesn't check the return value of the
 
1635                  * write call from getting things out of state where they
 
1636                  * think a full 4 byte sample was written when really only
 
1637                  * a portion was, resulting in odd sound and stereo
 
1644                          * Don't let us deadlock.  The ADC won't start if
 
1645                          * dmabuf->trigger isn't set.  A call to SETTRIGGER
 
1646                          * could have turned it off after we set it to on
 
1649                         dmabuf->trigger = PCM_ENABLE_INPUT;
 
1651                          * This does three things.  Updates LVI to be correct,
 
1652                          * makes sure the ADC is running, and updates the
 
1655                         ali_update_lvi(state, 1);
 
1656                         if (file->f_flags & O_NONBLOCK) {
 
1661                         /* Set the timeout to how long it would take to fill
 
1662                          * two of our buffers.  If we haven't been woke up
 
1663                          * by then, then we know something is wrong.
 
1665                         tmo = (dmabuf->dmasize * HZ * 2) / (dmabuf->rate * 4);
 
1667                         /* There are two situations when sleep_on_timeout returns, one is when
 
1668                            the interrupt is serviced correctly and the process is waked up by
 
1669                            ISR ON TIME. Another is when timeout is expired, which means that
 
1670                            either interrupt is NOT serviced correctly (pending interrupt) or it
 
1671                            is TOO LATE for the process to be scheduled to run (scheduler latency)
 
1672                            which results in a (potential) buffer overrun. And worse, there is
 
1673                            NOTHING we can do to prevent it. */
 
1674                         if (!schedule_timeout(tmo >= 2 ? tmo : 2)) {
 
1676                                        "ali_audio: recording schedule timeout, "
 
1677                                        "dmasz %u fragsz %u count %i hwptr %u swptr %u\n",
 
1678                                        dmabuf->dmasize, dmabuf->fragsize,
 
1679                                        dmabuf->count, dmabuf->hwptr,
 
1681                                 /* a buffer overrun, we delay the recovery until next time the
 
1682                                    while loop begin and we REALLY have space to record */
 
1684                         if (signal_pending(current)) {
 
1685                                 ret = ret ? ret : -ERESTARTSYS;
 
1691                 if (copy_to_user(buffer, dmabuf->rawbuf + swptr, cnt)) {
 
1697                 swptr = (swptr + cnt) % dmabuf->dmasize;
 
1698                 spin_lock_irqsave(&card->lock, flags);
 
1699                 if (PM_SUSPENDED(card)) {
 
1700                         spin_unlock_irqrestore(&card->lock, flags);
 
1703                 dmabuf->swptr = swptr;
 
1704                 dmabuf->count -= cnt;
 
1705                 spin_unlock_irqrestore(&card->lock, flags);
 
1711         ali_update_lvi(state, 1);
 
1712         set_current_state(TASK_RUNNING);
 
1713         remove_wait_queue(&dmabuf->wait, &waita);
 
1717 /* in this loop, dmabuf.count signifies the amount of data that is waiting to be dma to
 
1718    the soundcard.  it is drained by the dma machine and filled by this loop. */
 
1719 static ssize_t ali_write(struct file *file,
 
1720                          const char __user *buffer, size_t count, loff_t * ppos)
 
1722         struct ali_state *state = (struct ali_state *) file->private_data;
 
1723         struct ali_card *card = state ? state->card : NULL;
 
1724         struct dmabuf *dmabuf = &state->dmabuf;
 
1726         unsigned long flags;
 
1727         unsigned int swptr = 0;
 
1729         DECLARE_WAITQUEUE(waita, current);
 
1731         printk("ali_audio: ali_write called, count = %d\n", count);
 
1735         if (dmabuf->enable & ADC_RUNNING)
 
1737         if (codec_independent_spdif_locked > 0) {
 
1738                 if (!dmabuf->codec_spdifout_channel) {
 
1740                         dmabuf->codec_spdifout_channel = card->alloc_codec_spdifout_channel(card);
 
1741                         if (!dmabuf->codec_spdifout_channel)
 
1745                 if (controller_independent_spdif_locked > 0) {
 
1746                         if (!dmabuf->controller_spdifout_channel) {
 
1748                                 dmabuf->controller_spdifout_channel = card->alloc_controller_spdifout_channel(card);
 
1749                                 if (!dmabuf->controller_spdifout_channel)
 
1753                         if (!dmabuf->write_channel) {
 
1755                                 dmabuf->write_channel =
 
1756                                     card->alloc_pcm_channel(card);
 
1757                                 if (!dmabuf->write_channel)
 
1763         if (codec_independent_spdif_locked > 0) {
 
1764                 if (!dmabuf->ready && (ret = prog_dmabuf(state, 2)))
 
1767                 if (controller_independent_spdif_locked > 0) {
 
1768                         if (!dmabuf->ready && (ret = prog_dmabuf(state, 3)))
 
1772                         if (!dmabuf->ready && (ret = prog_dmabuf(state, 0)))
 
1776         if (!access_ok(VERIFY_READ, buffer, count))
 
1779         add_wait_queue(&dmabuf->wait, &waita);
 
1781                 set_current_state(TASK_INTERRUPTIBLE);
 
1782                 spin_lock_irqsave(&state->card->lock, flags);
 
1783                 if (PM_SUSPENDED(card)) {
 
1784                         spin_unlock_irqrestore(&card->lock, flags);
 
1786                         if (signal_pending(current)) {
 
1794                 swptr = dmabuf->swptr;
 
1795                 cnt = ali_get_free_write_space(state);
 
1796                 /* Bound the maximum size to how much we can copy to the
 
1797                  * dma buffer before we hit the end.  If we have more to
 
1798                  * copy then it will get done in a second pass of this
 
1799                  * loop starting from the beginning of the buffer.
 
1801                 if (cnt > (dmabuf->dmasize - swptr))
 
1802                         cnt = dmabuf->dmasize - swptr;
 
1803                 spin_unlock_irqrestore(&state->card->lock, flags);
 
1806                        "ali_audio: ali_write: %d bytes available space\n",
 
1811                 /* Lop off the last two bits to force the code to always
 
1812                  * write in full samples.  This keeps software that sets
 
1813                  * O_NONBLOCK but doesn't check the return value of the
 
1814                  * write call from getting things out of state where they
 
1815                  * think a full 4 byte sample was written when really only
 
1816                  * a portion was, resulting in odd sound and stereo
 
1822                         // There is data waiting to be played
 
1824                          * Force the trigger setting since we would
 
1825                          * deadlock with it set any other way
 
1827                         if (codec_independent_spdif_locked > 0) {
 
1828                                 dmabuf->trigger = SPDIF_ENABLE_OUTPUT;
 
1829                                 ali_update_lvi(state, 2);
 
1831                                 if (controller_independent_spdif_locked > 0) {
 
1832                                         dmabuf->trigger = SPDIF_ENABLE_OUTPUT;
 
1833                                         ali_update_lvi(state, 3);
 
1836                                         dmabuf->trigger = PCM_ENABLE_OUTPUT;
 
1837                                         ali_update_lvi(state, 0);
 
1840                         if (file->f_flags & O_NONBLOCK) {
 
1845                         /* Not strictly correct but works */
 
1846                         tmo = (dmabuf->dmasize * HZ * 2) / (dmabuf->rate * 4);
 
1847                         /* There are two situations when sleep_on_timeout returns, one is when
 
1848                            the interrupt is serviced correctly and the process is waked up by
 
1849                            ISR ON TIME. Another is when timeout is expired, which means that
 
1850                            either interrupt is NOT serviced correctly (pending interrupt) or it
 
1851                            is TOO LATE for the process to be scheduled to run (scheduler latency)
 
1852                            which results in a (potential) buffer underrun. And worse, there is
 
1853                            NOTHING we can do to prevent it. */
 
1855                         /* FIXME - do timeout handling here !! */
 
1856                         schedule_timeout(tmo >= 2 ? tmo : 2);
 
1858                         if (signal_pending(current)) {
 
1865                 if (copy_from_user(dmabuf->rawbuf + swptr, buffer, cnt)) {
 
1871                 swptr = (swptr + cnt) % dmabuf->dmasize;
 
1872                 spin_lock_irqsave(&state->card->lock, flags);
 
1873                 if (PM_SUSPENDED(card)) {
 
1874                         spin_unlock_irqrestore(&card->lock, flags);
 
1878                 dmabuf->swptr = swptr;
 
1879                 dmabuf->count += cnt;
 
1883                 spin_unlock_irqrestore(&state->card->lock, flags);
 
1885         if (swptr % dmabuf->fragsize) {
 
1886                 x = dmabuf->fragsize - (swptr % dmabuf->fragsize);
 
1887                 memset(dmabuf->rawbuf + swptr, '\0', x);
 
1890         if (codec_independent_spdif_locked > 0) {
 
1891                 ali_update_lvi(state, 2);
 
1893                 if (controller_independent_spdif_locked > 0) {
 
1894                         ali_update_lvi(state, 3);
 
1896                         ali_update_lvi(state, 0);
 
1899         set_current_state(TASK_RUNNING);
 
1900         remove_wait_queue(&dmabuf->wait, &waita);
 
1904 /* No kernel lock - we have our own spinlock */
 
1905 static unsigned int ali_poll(struct file *file, struct poll_table_struct
 
1908         struct ali_state *state = (struct ali_state *) file->private_data;
 
1909         struct dmabuf *dmabuf = &state->dmabuf;
 
1910         unsigned long flags;
 
1911         unsigned int mask = 0;
 
1914         poll_wait(file, &dmabuf->wait, wait);
 
1915         spin_lock_irqsave(&state->card->lock, flags);
 
1916         ali_update_ptr(state);
 
1917         if (file->f_mode & FMODE_READ && dmabuf->enable & ADC_RUNNING) {
 
1918                 if (dmabuf->count >= (signed) dmabuf->fragsize)
 
1919                         mask |= POLLIN | POLLRDNORM;
 
1921         if (file->f_mode & FMODE_WRITE  && (dmabuf->enable & (DAC_RUNNING|CODEC_SPDIFOUT_RUNNING|CONTROLLER_SPDIFOUT_RUNNING))) {
 
1922                 if ((signed) dmabuf->dmasize >= dmabuf->count + (signed) dmabuf->fragsize)
 
1923                         mask |= POLLOUT | POLLWRNORM;
 
1925         spin_unlock_irqrestore(&state->card->lock, flags);
 
1929 static int ali_mmap(struct file *file, struct vm_area_struct *vma)
 
1931         struct ali_state *state = (struct ali_state *) file->private_data;
 
1932         struct dmabuf *dmabuf = &state->dmabuf;
 
1936         if (vma->vm_flags & VM_WRITE) {
 
1937                 if (!dmabuf->write_channel && (dmabuf->write_channel = state->card->alloc_pcm_channel(state->card)) == NULL) {
 
1942         if (vma->vm_flags & VM_READ) {
 
1943                 if (!dmabuf->read_channel && (dmabuf->read_channel = state->card->alloc_rec_pcm_channel(state->card)) == NULL) {
 
1948         if ((ret = prog_dmabuf(state, 0)) != 0)
 
1951         if (vma->vm_pgoff != 0)
 
1953         size = vma->vm_end - vma->vm_start;
 
1954         if (size > (PAGE_SIZE << dmabuf->buforder))
 
1957         if (remap_pfn_range(vma, vma->vm_start,
 
1958                                 virt_to_phys(dmabuf->rawbuf) >> PAGE_SHIFT,
 
1959                                 size, vma->vm_page_prot))
 
1962         dmabuf->trigger = 0;
 
1969 static int ali_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
 
1971         struct ali_state *state = (struct ali_state *) file->private_data;
 
1972         struct ali_channel *c = NULL;
 
1973         struct dmabuf *dmabuf = &state->dmabuf;
 
1974         unsigned long flags;
 
1975         audio_buf_info abinfo;
 
1979         struct ac97_codec *codec = state->card->ac97_codec[0];
 
1980         void __user *argp = (void __user *)arg;
 
1981         int __user *p = argp;
 
1984         printk("ali_audio: ali_ioctl, arg=0x%x, cmd=",
 
1988         case OSS_GETVERSION:
 
1990                 printk("OSS_GETVERSION\n");
 
1992                 return put_user(SOUND_VERSION, p);
 
1993         case SNDCTL_DSP_RESET:
 
1995                 printk("SNDCTL_DSP_RESET\n");
 
1997                 spin_lock_irqsave(&state->card->lock, flags);
 
1998                 if (dmabuf->enable == DAC_RUNNING) {
 
1999                         c = dmabuf->write_channel;
 
2002                 if (dmabuf->enable == ADC_RUNNING) {
 
2003                         c = dmabuf->read_channel;
 
2006                 if (dmabuf->enable == CODEC_SPDIFOUT_RUNNING) {
 
2007                         c = dmabuf->codec_spdifout_channel;
 
2008                         __stop_spdifout(state);
 
2010                 if (dmabuf->enable == CONTROLLER_SPDIFOUT_RUNNING) {
 
2011                         c = dmabuf->controller_spdifout_channel;
 
2012                         __stop_spdifout(state);
 
2015                         outb(2, state->card->iobase + c->port + OFF_CR);        /* reset DMA machine */
 
2016                         outl(virt_to_bus(&c->sg[0]),
 
2017                              state->card->iobase + c->port + OFF_BDBAR);
 
2018                         outb(0, state->card->iobase + c->port + OFF_CIV);
 
2019                         outb(0, state->card->iobase + c->port + OFF_LVI);
 
2022                 spin_unlock_irqrestore(&state->card->lock, flags);
 
2023                 synchronize_irq(state->card->pci_dev->irq);
 
2025                 dmabuf->swptr = dmabuf->hwptr = 0;
 
2026                 dmabuf->count = dmabuf->total_bytes = 0;
 
2028         case SNDCTL_DSP_SYNC:
 
2030                 printk("SNDCTL_DSP_SYNC\n");
 
2032                 if (codec_independent_spdif_locked > 0) {
 
2033                         if (dmabuf->enable != CODEC_SPDIFOUT_RUNNING
 
2034                             || file->f_flags & O_NONBLOCK)
 
2036                         if ((val = drain_spdifout(state, 1)))
 
2039                         if (controller_independent_spdif_locked > 0) {
 
2040                                 if (dmabuf->enable !=
 
2041                                     CONTROLLER_SPDIFOUT_RUNNING
 
2042                                     || file->f_flags & O_NONBLOCK)
 
2044                                 if ((val = drain_spdifout(state, 1)))
 
2047                                 if (dmabuf->enable != DAC_RUNNING
 
2048                                     || file->f_flags & O_NONBLOCK)
 
2050                                 if ((val = drain_dac(state, 1)))
 
2054                 dmabuf->total_bytes = 0;
 
2056         case SNDCTL_DSP_SPEED:  /* set smaple rate */
 
2058                 printk("SNDCTL_DSP_SPEED\n");
 
2060                 if (get_user(val, p))
 
2063                         if (file->f_mode & FMODE_WRITE) {
 
2064                                 if ((state->card->ac97_status & SPDIF_ON)) {    /* S/PDIF Enabled */
 
2065                                         /* RELTEK ALC650 only support 48000, need to check that */
 
2066                                         if (ali_valid_spdif_rate(codec, val)) {
 
2067                                                 if (codec_independent_spdif_locked > 0) {
 
2068                                                         ali_set_spdif_output(state, -1, 0);
 
2069                                                         stop_spdifout(state);
 
2071                                                         /* I add test codec independent spdif out */
 
2072                                                         spin_lock_irqsave(&state->card->lock, flags);
 
2073                                                         ali_set_codecspdifout_rate(state, val); // I modified
 
2074                                                         spin_unlock_irqrestore(&state->card->lock, flags);
 
2075                                                         /* Set S/PDIF transmitter rate. */
 
2076                                                         i_scr = inl(state->card->iobase + ALI_SCR);
 
2077                                                         if ((i_scr & 0x00300000) == 0x00100000) {
 
2078                                                                 ali_set_spdif_output(state, AC97_EA_SPSA_7_8, codec_independent_spdif_locked);
 
2080                                                                 if ((i_scr&0x00300000)  == 0x00200000)
 
2082                                                                         ali_set_spdif_output(state, AC97_EA_SPSA_6_9, codec_independent_spdif_locked);
 
2084                                                                         if ((i_scr & 0x00300000) == 0x00300000) {
 
2085                                                                                 ali_set_spdif_output(state, AC97_EA_SPSA_10_11, codec_independent_spdif_locked);
 
2087                                                                                 ali_set_spdif_output(state, AC97_EA_SPSA_7_8, codec_independent_spdif_locked);
 
2092                                                         if (!(state->card->ac97_status & SPDIF_ON)) {
 
2096                                                         if (controller_independent_spdif_locked > 0) 
 
2098                                                                 stop_spdifout(state);
 
2100                                                                 spin_lock_irqsave(&state->card->lock, flags);
 
2101                                                                 ali_set_spdifout_rate(state, controller_independent_spdif_locked);
 
2102                                                                 spin_unlock_irqrestore(&state->card->lock, flags);
 
2105                                                                 ali_set_spdif_output(state, -1, 0);
 
2108                                                                 spin_lock_irqsave(&state->card->lock, flags);
 
2109                                                                 ali_set_dac_rate(state, val);
 
2110                                                                 spin_unlock_irqrestore(&state->card->lock, flags);
 
2111                                                                 /* Set S/PDIF transmitter rate. */
 
2112                                                                 ali_set_spdif_output(state, AC97_EA_SPSA_3_4, val);
 
2113                                                                 if (!(state->card->ac97_status & SPDIF_ON))
 
2119                                         } else {        /* Not a valid rate for S/PDIF, ignore it */
 
2125                                         spin_lock_irqsave(&state->card->lock, flags);
 
2126                                         ali_set_dac_rate(state, val);
 
2127                                         spin_unlock_irqrestore(&state->card->lock, flags);
 
2130                         if (file->f_mode & FMODE_READ) {
 
2133                                 spin_lock_irqsave(&state->card->lock, flags);
 
2134                                 ali_set_adc_rate(state, val);
 
2135                                 spin_unlock_irqrestore(&state->card->lock, flags);
 
2138                 return put_user(dmabuf->rate, p);
 
2139         case SNDCTL_DSP_STEREO: /* set stereo or mono channel */
 
2141                 printk("SNDCTL_DSP_STEREO\n");
 
2143                 if (dmabuf->enable & DAC_RUNNING) {
 
2146                 if (dmabuf->enable & ADC_RUNNING) {
 
2149                 if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING) {
 
2150                         stop_spdifout(state);
 
2152                 if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING) {
 
2153                         stop_spdifout(state);
 
2155                 return put_user(1, p);
 
2156         case SNDCTL_DSP_GETBLKSIZE:
 
2157                 if (file->f_mode & FMODE_WRITE) {
 
2158                         if (codec_independent_spdif_locked > 0) {
 
2159                                 if (!dmabuf->ready && (val = prog_dmabuf(state, 2)))
 
2162                                 if (controller_independent_spdif_locked > 0) {
 
2163                                         if (!dmabuf->ready && (val = prog_dmabuf(state, 3)))
 
2166                                         if (!dmabuf->ready && (val = prog_dmabuf(state, 0)))
 
2172                 if (file->f_mode & FMODE_READ) {
 
2173                         if (!dmabuf->ready && (val = prog_dmabuf(state, 1)))
 
2177                 printk("SNDCTL_DSP_GETBLKSIZE %d\n", dmabuf->userfragsize);
 
2179                 return put_user(dmabuf->userfragsize, p);
 
2180         case SNDCTL_DSP_GETFMTS:        /* Returns a mask of supported sample format */
 
2182                 printk("SNDCTL_DSP_GETFMTS\n");
 
2184                 return put_user(AFMT_S16_LE, p);
 
2185         case SNDCTL_DSP_SETFMT: /* Select sample format */
 
2187                 printk("SNDCTL_DSP_SETFMT\n");
 
2189                 return put_user(AFMT_S16_LE, p);
 
2190         case SNDCTL_DSP_CHANNELS:       // add support 4,6 channel 
 
2192                 printk("SNDCTL_DSP_CHANNELS\n");
 
2194                 if (get_user(val, p))
 
2197                         if (dmabuf->enable & DAC_RUNNING) {
 
2200                         if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING) {
 
2201                                 stop_spdifout(state);
 
2203                         if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING) {
 
2204                                 stop_spdifout(state);
 
2206                         if (dmabuf->enable & ADC_RUNNING) {
 
2210                         return put_user(state->card->channels, p);
 
2213                 i_scr = inl(state->card->iobase + ALI_SCR);
 
2214                 /* Current # of channels enabled */
 
2215                 if (i_scr & 0x00000100)
 
2217                 else if (i_scr & 0x00000200)
 
2222                 case 2: /* 2 channels is always supported */
 
2223                         if (codec_independent_spdif_locked > 0) {
 
2224                                 outl(((i_scr & 0xfffffcff) | 0x00100000), (state->card->iobase + ALI_SCR));
 
2226                                 outl((i_scr & 0xfffffcff), (state->card->iobase + ALI_SCR));
 
2227                         /* Do we need to change mixer settings????  */
 
2229                 case 4: /* Supported on some chipsets, better check first */
 
2230                         if (codec_independent_spdif_locked > 0) {
 
2231                                 outl(((i_scr & 0xfffffcff) | 0x00000100 | 0x00200000), (state->card->iobase + ALI_SCR));
 
2233                                 outl(((i_scr & 0xfffffcff) | 0x00000100), (state->card->iobase + ALI_SCR));
 
2235                 case 6: /* Supported on some chipsets, better check first */
 
2236                         if (codec_independent_spdif_locked > 0) {
 
2237                                 outl(((i_scr & 0xfffffcff) | 0x00000200 | 0x00008000 | 0x00300000), (state->card->iobase + ALI_SCR));
 
2239                                 outl(((i_scr & 0xfffffcff) | 0x00000200 | 0x00008000), (state->card->iobase + ALI_SCR));
 
2241                 default:        /* nothing else is ever supported by the chipset */
 
2245                 return put_user(val, p);
 
2246         case SNDCTL_DSP_POST:   /* the user has sent all data and is notifying us */
 
2247                 /* we update the swptr to the end of the last sg segment then return */
 
2249                 printk("SNDCTL_DSP_POST\n");
 
2251                 if (codec_independent_spdif_locked > 0) {
 
2252                         if (!dmabuf->ready || (dmabuf->enable != CODEC_SPDIFOUT_RUNNING))
 
2255                         if (controller_independent_spdif_locked > 0) {
 
2256                                 if (!dmabuf->ready || (dmabuf->enable != CONTROLLER_SPDIFOUT_RUNNING))
 
2259                                 if (!dmabuf->ready || (dmabuf->enable != DAC_RUNNING))
 
2263                 if ((dmabuf->swptr % dmabuf->fragsize) != 0) {
 
2264                         val = dmabuf->fragsize - (dmabuf->swptr % dmabuf->fragsize);
 
2265                         dmabuf->swptr += val;
 
2266                         dmabuf->count += val;
 
2269         case SNDCTL_DSP_SUBDIVIDE:
 
2270                 if (dmabuf->subdivision)
 
2272                 if (get_user(val, p))
 
2274                 if (val != 1 && val != 2 && val != 4)
 
2277                 printk("SNDCTL_DSP_SUBDIVIDE %d\n", val);
 
2279                 dmabuf->subdivision = val;
 
2282         case SNDCTL_DSP_SETFRAGMENT:
 
2283                 if (get_user(val, p))
 
2285                 dmabuf->ossfragsize = 1 << (val & 0xffff);
 
2286                 dmabuf->ossmaxfrags = (val >> 16) & 0xffff;
 
2287                 if (!dmabuf->ossfragsize || !dmabuf->ossmaxfrags)
 
2290                  * Bound the frag size into our allowed range of 256 - 4096
 
2292                 if (dmabuf->ossfragsize < 256)
 
2293                         dmabuf->ossfragsize = 256;
 
2294                 else if (dmabuf->ossfragsize > 4096)
 
2295                         dmabuf->ossfragsize = 4096;
 
2297                  * The numfrags could be something reasonable, or it could
 
2298                  * be 0xffff meaning "Give me as much as possible".  So,
 
2299                  * we check the numfrags * fragsize doesn't exceed our
 
2300                  * 64k buffer limit, nor is it less than our 8k minimum.
 
2301                  * If it fails either one of these checks, then adjust the
 
2302                  * number of fragments, not the size of them.  It's OK if
 
2303                  * our number of fragments doesn't equal 32 or anything
 
2304                  * like our hardware based number now since we are using
 
2305                  * a different frag count for the hardware.  Before we get
 
2306                  * into this though, bound the maxfrags to avoid overflow
 
2307                  * issues.  A reasonable bound would be 64k / 256 since our
 
2308                  * maximum buffer size is 64k and our minimum frag size is
 
2309                  * 256.  On the other end, our minimum buffer size is 8k and
 
2310                  * our maximum frag size is 4k, so the lower bound should
 
2313                 if (dmabuf->ossmaxfrags > 256)
 
2314                         dmabuf->ossmaxfrags = 256;
 
2315                 else if (dmabuf->ossmaxfrags < 2)
 
2316                         dmabuf->ossmaxfrags = 2;
 
2317                 val = dmabuf->ossfragsize * dmabuf->ossmaxfrags;
 
2318                 while (val < 8192) {
 
2320                         dmabuf->ossmaxfrags <<= 1;
 
2322                 while (val > 65536) {
 
2324                         dmabuf->ossmaxfrags >>= 1;
 
2328                 printk("SNDCTL_DSP_SETFRAGMENT 0x%x, %d, %d\n", val,
 
2329                        dmabuf->ossfragsize, dmabuf->ossmaxfrags);
 
2332         case SNDCTL_DSP_GETOSPACE:
 
2333                 if (!(file->f_mode & FMODE_WRITE))
 
2335                 if (codec_independent_spdif_locked > 0) {
 
2336                         if (!dmabuf->ready && (val = prog_dmabuf(state, 2)) != 0)
 
2339                         if (controller_independent_spdif_locked > 0) {
 
2340                                 if (!dmabuf->ready && (val = prog_dmabuf(state, 3)) != 0)
 
2343                                 if (!dmabuf->ready && (val = prog_dmabuf(state, 0)) != 0)
 
2347                 spin_lock_irqsave(&state->card->lock, flags);
 
2348                 ali_update_ptr(state);
 
2349                 abinfo.fragsize = dmabuf->userfragsize;
 
2350                 abinfo.fragstotal = dmabuf->userfrags;
 
2352                         abinfo.bytes = dmabuf->dmasize;
 
2354                         abinfo.bytes = ali_get_free_write_space(state);
 
2355                 abinfo.fragments = abinfo.bytes / dmabuf->userfragsize;
 
2356                 spin_unlock_irqrestore(&state->card->lock, flags);
 
2357 #if defined(DEBUG) || defined(DEBUG_MMAP)
 
2358                 printk("SNDCTL_DSP_GETOSPACE %d, %d, %d, %d\n",
 
2359                        abinfo.bytes, abinfo.fragsize, abinfo.fragments,
 
2362                 return copy_to_user(argp, &abinfo,
 
2363                                     sizeof(abinfo)) ? -EFAULT : 0;
 
2364         case SNDCTL_DSP_GETOPTR:
 
2365                 if (!(file->f_mode & FMODE_WRITE))
 
2367                 if (codec_independent_spdif_locked > 0) {
 
2368                         if (!dmabuf->ready && (val = prog_dmabuf(state, 2)) != 0)
 
2371                         if (controller_independent_spdif_locked > 0) {
 
2372                                 if (!dmabuf->ready && (val = prog_dmabuf(state, 3)) != 0)
 
2375                                 if (!dmabuf->ready && (val = prog_dmabuf(state, 0)) != 0)
 
2379                 spin_lock_irqsave(&state->card->lock, flags);
 
2380                 val = ali_get_free_write_space(state);
 
2381                 cinfo.bytes = dmabuf->total_bytes;
 
2382                 cinfo.ptr = dmabuf->hwptr;
 
2383                 cinfo.blocks = val / dmabuf->userfragsize;
 
2384                 if (codec_independent_spdif_locked > 0) {
 
2385                         if (dmabuf->mapped && (dmabuf->trigger & SPDIF_ENABLE_OUTPUT)) {
 
2386                                 dmabuf->count += val;
 
2387                                 dmabuf->swptr = (dmabuf->swptr + val) % dmabuf->dmasize;
 
2388                                 __ali_update_lvi(state, 2);
 
2391                         if (controller_independent_spdif_locked > 0) {
 
2392                                 if (dmabuf->mapped && (dmabuf->trigger & SPDIF_ENABLE_OUTPUT)) {
 
2393                                         dmabuf->count += val;
 
2394                                         dmabuf->swptr = (dmabuf->swptr + val) % dmabuf->dmasize;
 
2395                                         __ali_update_lvi(state, 3);
 
2398                                 if (dmabuf->mapped && (dmabuf->trigger & PCM_ENABLE_OUTPUT)) {
 
2399                                         dmabuf->count += val;
 
2400                                         dmabuf->swptr = (dmabuf->swptr + val) % dmabuf->dmasize;
 
2401                                         __ali_update_lvi(state, 0);
 
2405                 spin_unlock_irqrestore(&state->card->lock, flags);
 
2406 #if defined(DEBUG) || defined(DEBUG_MMAP)
 
2407                 printk("SNDCTL_DSP_GETOPTR %d, %d, %d, %d\n", cinfo.bytes,
 
2408                        cinfo.blocks, cinfo.ptr, dmabuf->count);
 
2410                 return copy_to_user(argp, &cinfo, sizeof(cinfo))? -EFAULT : 0;
 
2411         case SNDCTL_DSP_GETISPACE:
 
2412                 if (!(file->f_mode & FMODE_READ))
 
2414                 if (!dmabuf->ready && (val = prog_dmabuf(state, 1)) != 0)
 
2416                 spin_lock_irqsave(&state->card->lock, flags);
 
2417                 abinfo.bytes = ali_get_available_read_data(state);
 
2418                 abinfo.fragsize = dmabuf->userfragsize;
 
2419                 abinfo.fragstotal = dmabuf->userfrags;
 
2420                 abinfo.fragments = abinfo.bytes / dmabuf->userfragsize;
 
2421                 spin_unlock_irqrestore(&state->card->lock, flags);
 
2422 #if defined(DEBUG) || defined(DEBUG_MMAP)
 
2423                 printk("SNDCTL_DSP_GETISPACE %d, %d, %d, %d\n",
 
2424                        abinfo.bytes, abinfo.fragsize, abinfo.fragments,
 
2427                 return copy_to_user(argp, &abinfo,
 
2428                                     sizeof(abinfo)) ? -EFAULT : 0;
 
2429         case SNDCTL_DSP_GETIPTR:
 
2430                 if (!(file->f_mode & FMODE_READ))
 
2432                 if (!dmabuf->ready && (val = prog_dmabuf(state, 0)) != 0)
 
2434                 spin_lock_irqsave(&state->card->lock, flags);
 
2435                 val = ali_get_available_read_data(state);
 
2436                 cinfo.bytes = dmabuf->total_bytes;
 
2437                 cinfo.blocks = val / dmabuf->userfragsize;
 
2438                 cinfo.ptr = dmabuf->hwptr;
 
2439                 if (dmabuf->mapped && (dmabuf->trigger & PCM_ENABLE_INPUT)) {
 
2440                         dmabuf->count -= val;
 
2441                         dmabuf->swptr = (dmabuf->swptr + val) % dmabuf->dmasize;
 
2442                         __ali_update_lvi(state, 1);
 
2444                 spin_unlock_irqrestore(&state->card->lock, flags);
 
2445 #if defined(DEBUG) || defined(DEBUG_MMAP)
 
2446                 printk("SNDCTL_DSP_GETIPTR %d, %d, %d, %d\n", cinfo.bytes,
 
2447                        cinfo.blocks, cinfo.ptr, dmabuf->count);
 
2449                 return copy_to_user(argp, &cinfo, sizeof(cinfo))? -EFAULT: 0;
 
2450         case SNDCTL_DSP_NONBLOCK:
 
2452                 printk("SNDCTL_DSP_NONBLOCK\n");
 
2454                 file->f_flags |= O_NONBLOCK;
 
2456         case SNDCTL_DSP_GETCAPS:
 
2458                 printk("SNDCTL_DSP_GETCAPS\n");
 
2460                 return put_user(DSP_CAP_REALTIME | DSP_CAP_TRIGGER |
 
2461                                 DSP_CAP_MMAP | DSP_CAP_BIND, p);
 
2462         case SNDCTL_DSP_GETTRIGGER:
 
2465                 printk("SNDCTL_DSP_GETTRIGGER 0x%x\n", dmabuf->trigger);
 
2467                 return put_user(dmabuf->trigger, p);
 
2468         case SNDCTL_DSP_SETTRIGGER:
 
2469                 if (get_user(val, p))
 
2471 #if defined(DEBUG) || defined(DEBUG_MMAP)
 
2472                 printk("SNDCTL_DSP_SETTRIGGER 0x%x\n", val);
 
2474                 if (!(val & PCM_ENABLE_INPUT) && dmabuf->enable == ADC_RUNNING) {
 
2477                 if (!(val & PCM_ENABLE_OUTPUT) && dmabuf->enable == DAC_RUNNING) {
 
2480                 if (!(val & SPDIF_ENABLE_OUTPUT) && dmabuf->enable == CODEC_SPDIFOUT_RUNNING) {
 
2481                         stop_spdifout(state);
 
2483                 if (!(val & SPDIF_ENABLE_OUTPUT) && dmabuf->enable == CONTROLLER_SPDIFOUT_RUNNING) {
 
2484                         stop_spdifout(state);
 
2486                 dmabuf->trigger = val;
 
2487                 if (val & PCM_ENABLE_OUTPUT && !(dmabuf->enable & DAC_RUNNING)) {
 
2488                         if (!dmabuf->write_channel) {
 
2490                                 dmabuf->write_channel = state->card->alloc_pcm_channel(state->card);
 
2491                                 if (!dmabuf->write_channel)
 
2494                         if (!dmabuf->ready && (ret = prog_dmabuf(state, 0)))
 
2496                         if (dmabuf->mapped) {
 
2497                                 spin_lock_irqsave(&state->card->lock, flags);
 
2498                                 ali_update_ptr(state);
 
2500                                 dmabuf->swptr = dmabuf->hwptr;
 
2501                                 dmabuf->count = ali_get_free_write_space(state);
 
2502                                 dmabuf->swptr = (dmabuf->swptr + dmabuf->count) % dmabuf->dmasize;
 
2503                                 __ali_update_lvi(state, 0);
 
2504                                 spin_unlock_irqrestore(&state->card->lock,
 
2509                 if (val & SPDIF_ENABLE_OUTPUT && !(dmabuf->enable & CODEC_SPDIFOUT_RUNNING)) {
 
2510                         if (!dmabuf->codec_spdifout_channel) {
 
2512                                 dmabuf->codec_spdifout_channel = state->card->alloc_codec_spdifout_channel(state->card);
 
2513                                 if (!dmabuf->codec_spdifout_channel)
 
2516                         if (!dmabuf->ready && (ret = prog_dmabuf(state, 2)))
 
2518                         if (dmabuf->mapped) {
 
2519                                 spin_lock_irqsave(&state->card->lock, flags);
 
2520                                 ali_update_ptr(state);
 
2522                                 dmabuf->swptr = dmabuf->hwptr;
 
2523                                 dmabuf->count = ali_get_free_write_space(state);
 
2524                                 dmabuf->swptr = (dmabuf->swptr + dmabuf->count) % dmabuf->dmasize;
 
2525                                 __ali_update_lvi(state, 2);
 
2526                                 spin_unlock_irqrestore(&state->card->lock,
 
2529                                 start_spdifout(state);
 
2531                 if (val & SPDIF_ENABLE_OUTPUT && !(dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)) {
 
2532                         if (!dmabuf->controller_spdifout_channel) {
 
2534                                 dmabuf->controller_spdifout_channel = state->card->alloc_controller_spdifout_channel(state->card);
 
2535                                 if (!dmabuf->controller_spdifout_channel)
 
2538                         if (!dmabuf->ready && (ret = prog_dmabuf(state, 3)))
 
2540                         if (dmabuf->mapped) {
 
2541                                 spin_lock_irqsave(&state->card->lock, flags);
 
2542                                 ali_update_ptr(state);
 
2544                                 dmabuf->swptr = dmabuf->hwptr;
 
2545                                 dmabuf->count = ali_get_free_write_space(state);
 
2546                                 dmabuf->swptr = (dmabuf->swptr + dmabuf->count) % dmabuf->dmasize;
 
2547                                 __ali_update_lvi(state, 3);
 
2548                                 spin_unlock_irqrestore(&state->card->lock, flags);
 
2550                                 start_spdifout(state);
 
2552                 if (val & PCM_ENABLE_INPUT && !(dmabuf->enable & ADC_RUNNING)) {
 
2553                         if (!dmabuf->read_channel) {
 
2555                                 dmabuf->read_channel = state->card->alloc_rec_pcm_channel(state->card);
 
2556                                 if (!dmabuf->read_channel)
 
2559                         if (!dmabuf->ready && (ret = prog_dmabuf(state, 1)))
 
2561                         if (dmabuf->mapped) {
 
2562                                 spin_lock_irqsave(&state->card->lock,
 
2564                                 ali_update_ptr(state);
 
2565                                 dmabuf->swptr = dmabuf->hwptr;
 
2567                                 spin_unlock_irqrestore(&state->card->lock, flags);
 
2569                         ali_update_lvi(state, 1);
 
2573         case SNDCTL_DSP_SETDUPLEX:
 
2575                 printk("SNDCTL_DSP_SETDUPLEX\n");
 
2578         case SNDCTL_DSP_GETODELAY:
 
2579                 if (!(file->f_mode & FMODE_WRITE))
 
2581                 spin_lock_irqsave(&state->card->lock, flags);
 
2582                 ali_update_ptr(state);
 
2583                 val = dmabuf->count;
 
2584                 spin_unlock_irqrestore(&state->card->lock, flags);
 
2586                 printk("SNDCTL_DSP_GETODELAY %d\n", dmabuf->count);
 
2588                 return put_user(val, p);
 
2589         case SOUND_PCM_READ_RATE:
 
2591                 printk("SOUND_PCM_READ_RATE %d\n", dmabuf->rate);
 
2593                 return put_user(dmabuf->rate, p);
 
2594         case SOUND_PCM_READ_CHANNELS:
 
2596                 printk("SOUND_PCM_READ_CHANNELS\n");
 
2598                 return put_user(2, p);
 
2599         case SOUND_PCM_READ_BITS:
 
2601                 printk("SOUND_PCM_READ_BITS\n");
 
2603                 return put_user(AFMT_S16_LE, p);
 
2604         case SNDCTL_DSP_SETSPDIF:       /* Set S/PDIF Control register */
 
2606                 printk("SNDCTL_DSP_SETSPDIF\n");
 
2608                 if (get_user(val, p))
 
2610                 /* Check to make sure the codec supports S/PDIF transmitter */
 
2611                 if ((state->card->ac97_features & 4)) {
 
2612                         /* mask out the transmitter speed bits so the user can't set them */
 
2614                         /* Add the current transmitter speed bits to the passed value */
 
2615                         ret = ali_ac97_get(codec, AC97_SPDIF_CONTROL);
 
2616                         val |= (ret & 0x3000);
 
2617                         ali_ac97_set(codec, AC97_SPDIF_CONTROL, val);
 
2618                         if (ali_ac97_get(codec, AC97_SPDIF_CONTROL) != val) {
 
2619                                 printk(KERN_ERR "ali_audio: Unable to set S/PDIF configuration to 0x%04x.\n", val);
 
2625                         printk(KERN_WARNING "ali_audio: S/PDIF transmitter not avalible.\n");
 
2627                 return put_user(val, p);
 
2628         case SNDCTL_DSP_GETSPDIF:       /* Get S/PDIF Control register */
 
2630                 printk("SNDCTL_DSP_GETSPDIF\n");
 
2632                 if (get_user(val, p))
 
2634                 /* Check to make sure the codec supports S/PDIF transmitter */
 
2635                 if (!(state->card->ac97_features & 4)) {
 
2637                         printk(KERN_WARNING "ali_audio: S/PDIF transmitter not avalible.\n");
 
2641                         val = ali_ac97_get(codec, AC97_SPDIF_CONTROL);
 
2644                 return put_user(val, p);
 
2645 //end add support spdif out
 
2646 //add support 4,6 channel
 
2647         case SNDCTL_DSP_GETCHANNELMASK:
 
2649                 printk("SNDCTL_DSP_GETCHANNELMASK\n");
 
2651                 if (get_user(val, p))
 
2653                 /* Based on AC'97 DAC support, not ICH hardware */
 
2654                 val = DSP_BIND_FRONT;
 
2655                 if (state->card->ac97_features & 0x0004)
 
2656                         val |= DSP_BIND_SPDIF;
 
2657                 if (state->card->ac97_features & 0x0080)
 
2658                         val |= DSP_BIND_SURR;
 
2659                 if (state->card->ac97_features & 0x0140)
 
2660                         val |= DSP_BIND_CENTER_LFE;
 
2661                 return put_user(val, p);
 
2662         case SNDCTL_DSP_BIND_CHANNEL:
 
2664                 printk("SNDCTL_DSP_BIND_CHANNEL\n");
 
2666                 if (get_user(val, p))
 
2668                 if (val == DSP_BIND_QUERY) {
 
2669                         val = DSP_BIND_FRONT;   /* Always report this as being enabled */
 
2670                         if (state->card->ac97_status & SPDIF_ON)
 
2671                                 val |= DSP_BIND_SPDIF;
 
2673                                 if (state->card->ac97_status & SURR_ON)
 
2674                                         val |= DSP_BIND_SURR;
 
2676                                     ac97_status & CENTER_LFE_ON)
 
2677                                         val |= DSP_BIND_CENTER_LFE;
 
2679                 } else {        /* Not a query, set it */
 
2680                         if (!(file->f_mode & FMODE_WRITE))
 
2682                         if (dmabuf->enable == DAC_RUNNING) {
 
2685                         if (val & DSP_BIND_SPDIF) {     /* Turn on SPDIF */
 
2686                                 /*  Ok, this should probably define what slots
 
2687                                  *  to use. For now, we'll only set it to the
 
2690                                  *   non multichannel codec maps to slots 3&4
 
2691                                  *   2 channel codec maps to slots 7&8
 
2692                                  *   4 channel codec maps to slots 6&9
 
2693                                  *   6 channel codec maps to slots 10&11
 
2695                                  *  there should be some way for the app to
 
2696                                  *  select the slot assignment.
 
2698                                 i_scr = inl(state->card->iobase + ALI_SCR);
 
2699                                 if (codec_independent_spdif_locked > 0) {
 
2701                                         if ((i_scr & 0x00300000) == 0x00100000) {
 
2702                                                 ali_set_spdif_output(state, AC97_EA_SPSA_7_8, codec_independent_spdif_locked);
 
2704                                                 if ((i_scr & 0x00300000) == 0x00200000) {
 
2705                                                         ali_set_spdif_output(state, AC97_EA_SPSA_6_9, codec_independent_spdif_locked);
 
2707                                                         if ((i_scr & 0x00300000) == 0x00300000) {
 
2708                                                                 ali_set_spdif_output(state, AC97_EA_SPSA_10_11, codec_independent_spdif_locked);
 
2712                                 } else {        /* codec spdif out (pcm out share ) */
 
2713                                         ali_set_spdif_output(state, AC97_EA_SPSA_3_4, dmabuf->rate);    //I do not modify
 
2716                                 if (!(state->card->ac97_status & SPDIF_ON))
 
2717                                         val &= ~DSP_BIND_SPDIF;
 
2721                                 /* Turn off S/PDIF if it was on */
 
2722                                 if (state->card->ac97_status & SPDIF_ON)
 
2723                                         ali_set_spdif_output(state, -1, 0);
 
2725                                     val & (DSP_BIND_FRONT | DSP_BIND_SURR |
 
2726                                            DSP_BIND_CENTER_LFE);
 
2728                                 case DSP_BIND_FRONT:
 
2731                                 case DSP_BIND_FRONT | DSP_BIND_SURR:
 
2734                                 case DSP_BIND_FRONT | DSP_BIND_SURR | DSP_BIND_CENTER_LFE:
 
2738                                         val = DSP_BIND_FRONT;
 
2742                                 ali_set_dac_channels(state, channels);
 
2743                                 /* check that they really got turned on */
 
2744                                 if (!state->card->ac97_status & SURR_ON)
 
2745                                         val &= ~DSP_BIND_SURR;
 
2747                                     ac97_status & CENTER_LFE_ON)
 
2748                                         val &= ~DSP_BIND_CENTER_LFE;
 
2751                 return put_user(val, p);
 
2752         case SNDCTL_DSP_MAPINBUF:
 
2753         case SNDCTL_DSP_MAPOUTBUF:
 
2754         case SNDCTL_DSP_SETSYNCRO:
 
2755         case SOUND_PCM_WRITE_FILTER:
 
2756         case SOUND_PCM_READ_FILTER:
 
2762 static int ali_open(struct inode *inode, struct file *file)
 
2765         struct ali_card *card = devs;
 
2766         struct ali_state *state = NULL;
 
2767         struct dmabuf *dmabuf = NULL;
 
2770         /* find an available virtual channel (instance of /dev/dsp) */
 
2772         while (card != NULL) {
 
2775                  * If we are initializing and then fail, card could go
 
2776                  * away unuexpectedly while we are in the for() loop.
 
2777                  * So, check for card on each iteration before we check
 
2778                  * for card->initializing to avoid a possible oops.
 
2779                  * This usually only matters for times when the driver is
 
2780                  * autoloaded by kmod.
 
2782                 for (i = 0; i < 50 && card && card->initializing; i++) {
 
2783                         set_current_state(TASK_UNINTERRUPTIBLE);
 
2784                         schedule_timeout(HZ / 20);
 
2787                 for (i = 0; i < NR_HW_CH && card && !card->initializing; i++) {
 
2788                         if (card->states[i] == NULL) {
 
2789                                 state = card->states[i] = (struct ali_state *) kmalloc(sizeof(struct ali_state), GFP_KERNEL);
 
2792                                 memset(state, 0, sizeof(struct ali_state));
 
2793                                 dmabuf = &state->dmabuf;
 
2800         /* no more virtual channel avaiable */
 
2804         /* initialize the virtual channel */
 
2808         state->magic = ALI5455_STATE_MAGIC;
 
2809         init_waitqueue_head(&dmabuf->wait);
 
2810         init_MUTEX(&state->open_sem);
 
2811         file->private_data = state;
 
2812         dmabuf->trigger = 0;
 
2813         /* allocate hardware channels */
 
2814         if (file->f_mode & FMODE_READ) {
 
2815                 if ((dmabuf->read_channel =
 
2816                      card->alloc_rec_pcm_channel(card)) == NULL) {
 
2817                         kfree(card->states[i]);
 
2818                         card->states[i] = NULL;
 
2821                 dmabuf->trigger |= PCM_ENABLE_INPUT;
 
2822                 ali_set_adc_rate(state, 8000);
 
2824         if (file->f_mode & FMODE_WRITE) {
 
2825                 if (codec_independent_spdif_locked > 0) {
 
2826                         if ((dmabuf->codec_spdifout_channel = card->alloc_codec_spdifout_channel(card)) == NULL) {
 
2827                                 kfree(card->states[i]);
 
2828                                 card->states[i] = NULL;
 
2831                         dmabuf->trigger |= SPDIF_ENABLE_OUTPUT;
 
2832                         ali_set_codecspdifout_rate(state, codec_independent_spdif_locked);      //It must add
 
2833                         i_scr = inl(state->card->iobase + ALI_SCR);
 
2834                         if ((i_scr & 0x00300000) == 0x00100000) {
 
2835                                 ali_set_spdif_output(state, AC97_EA_SPSA_7_8, codec_independent_spdif_locked);
 
2837                                 if ((i_scr & 0x00300000) == 0x00200000) {
 
2838                                         ali_set_spdif_output(state, AC97_EA_SPSA_6_9, codec_independent_spdif_locked);
 
2840                                         if ((i_scr & 0x00300000) == 0x00300000) {
 
2841                                                 ali_set_spdif_output(state, AC97_EA_SPSA_10_11, codec_independent_spdif_locked);
 
2843                                                 ali_set_spdif_output(state, AC97_EA_SPSA_7_8, codec_independent_spdif_locked);
 
2849                         if (controller_independent_spdif_locked > 0) {
 
2850                                 if ((dmabuf->controller_spdifout_channel = card->alloc_controller_spdifout_channel(card)) == NULL) {
 
2851                                         kfree(card->states[i]);
 
2852                                         card->states[i] = NULL;
 
2855                                 dmabuf->trigger |= SPDIF_ENABLE_OUTPUT;
 
2856                                 ali_set_spdifout_rate(state, controller_independent_spdif_locked);
 
2858                                 if ((dmabuf->write_channel = card->alloc_pcm_channel(card)) == NULL) {
 
2859                                         kfree(card->states[i]);
 
2860                                         card->states[i] = NULL;
 
2863                                 /* Initialize to 8kHz?  What if we don't support 8kHz? */
 
2864                                 /*  Let's change this to check for S/PDIF stuff */
 
2866                                 dmabuf->trigger |= PCM_ENABLE_OUTPUT;
 
2867                                 if (codec_pcmout_share_spdif_locked) {
 
2868                                         ali_set_dac_rate(state, codec_pcmout_share_spdif_locked);
 
2869                                         ali_set_spdif_output(state, AC97_EA_SPSA_3_4, codec_pcmout_share_spdif_locked);
 
2871                                         ali_set_dac_rate(state, 8000);
 
2878         /* set default sample format. According to OSS Programmer's Guide  /dev/dsp
 
2879            should be default to unsigned 8-bits, mono, with sample rate 8kHz and
 
2880            /dev/dspW will accept 16-bits sample, but we don't support those so we
 
2881            set it immediately to stereo and 16bit, which is all we do support */
 
2882         dmabuf->fmt |= ALI5455_FMT_16BIT | ALI5455_FMT_STEREO;
 
2883         dmabuf->ossfragsize = 0;
 
2884         dmabuf->ossmaxfrags = 0;
 
2885         dmabuf->subdivision = 0;
 
2886         state->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
 
2887         outl(0x00000000, card->iobase + ALI_INTERRUPTCR);
 
2888         outl(0x00000000, card->iobase + ALI_INTERRUPTSR);
 
2889         return nonseekable_open(inode, file);
 
2892 static int ali_release(struct inode *inode, struct file *file)
 
2894         struct ali_state *state = (struct ali_state *) file->private_data;
 
2895         struct ali_card *card = state->card;
 
2896         struct dmabuf *dmabuf = &state->dmabuf;
 
2897         unsigned long flags;
 
2900         /* stop DMA state machine and free DMA buffers/channels */
 
2901         if (dmabuf->trigger & PCM_ENABLE_OUTPUT)
 
2902                 drain_dac(state, 0);
 
2904         if (dmabuf->trigger & SPDIF_ENABLE_OUTPUT)
 
2905                 drain_spdifout(state, 0);
 
2907         if (dmabuf->trigger & PCM_ENABLE_INPUT)
 
2910         spin_lock_irqsave(&card->lock, flags);
 
2911         dealloc_dmabuf(state);
 
2912         if (file->f_mode & FMODE_WRITE) {
 
2913                 if (codec_independent_spdif_locked > 0) {
 
2914                         state->card->free_pcm_channel(state->card, dmabuf->codec_spdifout_channel->num);
 
2916                         if (controller_independent_spdif_locked > 0)
 
2917                                 state->card->free_pcm_channel(state->card,
 
2918                                                               dmabuf->controller_spdifout_channel->num);
 
2919                         else state->card->free_pcm_channel(state->card,
 
2920                                                               dmabuf->write_channel->num);
 
2923         if (file->f_mode & FMODE_READ)
 
2924                 state->card->free_pcm_channel(state->card, dmabuf->read_channel->num);
 
2926         state->card->states[state->virt] = NULL;
 
2928         spin_unlock_irqrestore(&card->lock, flags);
 
2933 static /*const */ struct file_operations ali_audio_fops = {
 
2934         .owner          = THIS_MODULE, 
 
2935         .llseek         = no_llseek, 
 
2942         .release        = ali_release,
 
2945 /* Read AC97 codec registers */
 
2946 static u16 ali_ac97_get(struct ac97_codec *dev, u8 reg)
 
2948         struct ali_card *card = dev->private_data;
 
2951         unsigned short int data = 0, count, addr1, addr2 = 0;
 
2953         spin_lock(&card->ac97_lock);
 
2954         while (count1-- && (inl(card->iobase + ALI_CAS) & 0x80000000))
 
2959         for (count = 0; count < 0x7f; count++) {
 
2960                 val = inb(card->iobase + ALI_CSPSR);
 
2966                 spin_unlock(&card->ac97_lock);
 
2969         outw(reg, (card->iobase + ALI_CPR) + 2);
 
2970         for (count = 0; count < 0x7f; count++) {
 
2971                 val = inb(card->iobase + ALI_CSPSR);
 
2973                         data = inw(card->iobase + ALI_SPR);
 
2974                         addr2 = inw((card->iobase + ALI_SPR) + 2);
 
2978         spin_unlock(&card->ac97_lock);
 
2983         return ((u16) data);
 
2986 /* write ac97 codec register   */
 
2988 static void ali_ac97_set(struct ac97_codec *dev, u8 reg, u16 data)
 
2990         struct ali_card *card = dev->private_data;
 
2993         unsigned short int count;
 
2995         spin_lock(&card->ac97_lock);
 
2996         while (count1-- && (inl(card->iobase + ALI_CAS) & 0x80000000))
 
2999         for (count = 0; count < 0x7f; count++) {
 
3000                 val = inb(card->iobase + ALI_CSPSR);
 
3004         if (count == 0x7f) {
 
3005                 printk(KERN_WARNING "ali_ac97_set: AC97 codec register access timed out. \n");
 
3006                 spin_unlock(&card->ac97_lock);
 
3009         outw(data, (card->iobase + ALI_CPR));
 
3010         outb(reg, (card->iobase + ALI_CPR) + 2);
 
3011         for (count = 0; count < 0x7f; count++) {
 
3012                 val = inb(card->iobase + ALI_CSPSR);
 
3016         spin_unlock(&card->ac97_lock);
 
3018                 printk(KERN_WARNING "ali_ac97_set: AC97 codec register access timed out. \n");
 
3022 /* OSS /dev/mixer file operation methods */
 
3024 static int ali_open_mixdev(struct inode *inode, struct file *file)
 
3027         int minor = iminor(inode);
 
3028         struct ali_card *card = devs;
 
3029         for (card = devs; card != NULL; card = card->next) {
 
3031                  * If we are initializing and then fail, card could go
 
3032                  * away unuexpectedly while we are in the for() loop.
 
3033                  * So, check for card on each iteration before we check
 
3034                  * for card->initializing to avoid a possible oops.
 
3035                  * This usually only matters for times when the driver is
 
3036                  * autoloaded by kmod.
 
3038                 for (i = 0; i < 50 && card && card->initializing; i++) {
 
3039                         set_current_state(TASK_UNINTERRUPTIBLE);
 
3040                         schedule_timeout(HZ / 20);
 
3042                 for (i = 0; i < NR_AC97 && card && !card->initializing; i++)
 
3043                         if (card->ac97_codec[i] != NULL
 
3044                             && card->ac97_codec[i]->dev_mixer == minor) {
 
3045                                 file->private_data = card->ac97_codec[i];
 
3046                                 return nonseekable_open(inode, file);
 
3052 static int ali_ioctl_mixdev(struct inode *inode,
 
3054                             unsigned int cmd, unsigned long arg)
 
3056         struct ac97_codec *codec = (struct ac97_codec *) file->private_data;
 
3057         return codec->mixer_ioctl(codec, cmd, arg);
 
3060 static /*const */ struct file_operations ali_mixer_fops = {
 
3061         .owner  = THIS_MODULE, 
 
3062         .llseek = no_llseek, 
 
3063         .ioctl  = ali_ioctl_mixdev,
 
3064         .open   = ali_open_mixdev,
 
3067 /* AC97 codec initialisation.  These small functions exist so we don't
 
3068    duplicate code between module init and apm resume */
 
3070 static inline int ali_ac97_exists(struct ali_card *card, int ac97_number)
 
3073         u32 reg = inl(card->iobase + ALI_RTSR);
 
3077                         reg = inl(card->iobase + ALI_RTSR);
 
3081                                 outl(reg | 0x00000040,
 
3082                                      card->iobase + 0x34);
 
3090                         reg = inl(card->iobase + ALI_RTSR);
 
3094                                 outl(reg | 0x00000080,
 
3095                                      card->iobase + 0x34);
 
3108 static inline int ali_ac97_enable_variable_rate(struct ac97_codec *codec)
 
3110         ali_ac97_set(codec, AC97_EXTENDED_STATUS, 9);
 
3111         ali_ac97_set(codec, AC97_EXTENDED_STATUS, ali_ac97_get(codec, AC97_EXTENDED_STATUS) | 0xE800);
 
3112         return (ali_ac97_get(codec, AC97_EXTENDED_STATUS) & 1);
 
3116 static int ali_ac97_probe_and_powerup(struct ali_card *card, struct ac97_codec *codec)
 
3118         /* Returns 0 on failure */
 
3121         if (ac97_probe_codec(codec) == 0)
 
3123         /* ac97_probe_codec is success ,then begin to init codec */
 
3124         ali_ac97_set(codec, AC97_RESET, 0xffff);
 
3125         if (card->channel[0].used == 1) {
 
3126                 ali_ac97_set(codec, AC97_RECORD_SELECT, 0x0000);
 
3127                 ali_ac97_set(codec, AC97_LINEIN_VOL, 0x0808);
 
3128                 ali_ac97_set(codec, AC97_RECORD_GAIN, 0x0F0F);
 
3131         if (card->channel[2].used == 1) //if MICin then init codec
 
3133                 ali_ac97_set(codec, AC97_RECORD_SELECT, 0x0000);
 
3134                 ali_ac97_set(codec, AC97_MIC_VOL, 0x8808);
 
3135                 ali_ac97_set(codec, AC97_RECORD_GAIN, 0x0F0F);
 
3136                 ali_ac97_set(codec, AC97_RECORD_GAIN_MIC, 0x0000);
 
3139         ali_ac97_set(codec, AC97_MASTER_VOL_STEREO, 0x0000);
 
3140         ali_ac97_set(codec, AC97_HEADPHONE_VOL, 0x0000);
 
3141         ali_ac97_set(codec, AC97_PCMOUT_VOL, 0x0000);
 
3142         ali_ac97_set(codec, AC97_CD_VOL, 0x0808);
 
3143         ali_ac97_set(codec, AC97_VIDEO_VOL, 0x0808);
 
3144         ali_ac97_set(codec, AC97_AUX_VOL, 0x0808);
 
3145         ali_ac97_set(codec, AC97_PHONE_VOL, 0x8048);
 
3146         ali_ac97_set(codec, AC97_PCBEEP_VOL, 0x0000);
 
3147         ali_ac97_set(codec, AC97_GENERAL_PURPOSE, AC97_GP_MIX);
 
3148         ali_ac97_set(codec, AC97_MASTER_VOL_MONO, 0x0000);
 
3149         ali_ac97_set(codec, 0x38, 0x0000);
 
3150         addr = ali_ac97_get(codec, 0x2a);
 
3151         ali_ac97_set(codec, 0x2a, addr | 0x0001);
 
3152         addr = ali_ac97_get(codec, 0x2a);
 
3153         addr = ali_ac97_get(codec, 0x28);
 
3154         ali_ac97_set(codec, 0x2c, 0xbb80);
 
3155         addr = ali_ac97_get(codec, 0x2c);
 
3156         /* power it all up */
 
3157         ali_ac97_set(codec, AC97_POWER_CONTROL,
 
3158                      ali_ac97_get(codec, AC97_POWER_CONTROL) & ~0x7f00);
 
3159         /* wait for analog ready */
 
3160         for (i = 10; i && ((ali_ac97_get(codec, AC97_POWER_CONTROL) & 0xf) != 0xf); i--) {
 
3161                 set_current_state(TASK_UNINTERRUPTIBLE);
 
3162                 schedule_timeout(HZ / 20);
 
3170 /* I clone ali5455(2.4.7 )  not clone i810_audio(2.4.18)  */
 
3172 static int ali_reset_5455(struct ali_card *card)
 
3174         outl(0x80000003, card->iobase + ALI_SCR);
 
3175         outl(0x83838383, card->iobase + ALI_FIFOCR1);
 
3176         outl(0x83838383, card->iobase + ALI_FIFOCR2);
 
3177         if (controller_pcmout_share_spdif_locked > 0) {
 
3178                 outl((inl(card->iobase + ALI_SPDIFICS) | 0x00000001),
 
3179                      card->iobase + ALI_SPDIFICS);
 
3180                 outl(0x0408000a, card->iobase + ALI_INTERFACECR);
 
3182                 if (codec_independent_spdif_locked > 0) {
 
3183                         outl((inl(card->iobase + ALI_SCR) | 0x00100000), card->iobase + ALI_SCR);       // now I select slot 7 & 8
 
3184                         outl(0x00200000, card->iobase + ALI_INTERFACECR);       //enable codec independent spdifout 
 
3186                         outl(0x04080002, card->iobase + ALI_INTERFACECR);
 
3189         outl(0x00000000, card->iobase + ALI_INTERRUPTCR);
 
3190         outl(0x00000000, card->iobase + ALI_INTERRUPTSR);
 
3191         if (controller_independent_spdif_locked > 0)
 
3192                 outl((inl(card->iobase + ALI_SPDIFICS) | 0x00000001),
 
3193                      card->iobase + ALI_SPDIFICS);
 
3198 static int ali_ac97_random_init_stuff(struct ali_card
 
3201         u32 reg = inl(card->iobase + ALI_SCR);
 
3203         reg = inl(card->iobase + ALI_SCR);
 
3204         if ((reg & 2) == 0)     /* Cold required */
 
3207                 reg |= 1;       /* Warm */
 
3208         reg &= ~0x80000000;     /* ACLink on */
 
3209         outl(reg, card->iobase + ALI_SCR);
 
3212                 if ((inl(card->iobase + 0x18) & (1 << 1)) == 0)
 
3214                 current->state = TASK_UNINTERRUPTIBLE;
 
3215                 schedule_timeout(HZ / 20);
 
3219                 printk(KERN_ERR "ali_audio: AC'97 reset failed.\n");
 
3223         set_current_state(TASK_UNINTERRUPTIBLE);
 
3224         schedule_timeout(HZ / 2);
 
3228 /* AC97 codec initialisation. */
 
3230 static int __devinit ali_ac97_init(struct ali_card *card)
 
3233         int total_channels = 0;
 
3234         struct ac97_codec *codec;
 
3237         if (!ali_ac97_random_init_stuff(card))
 
3240         /* Number of channels supported */
 
3241         /* What about the codec?  Just because the ICH supports */
 
3242         /* multiple channels doesn't mean the codec does.       */
 
3243         /* we'll have to modify this in the codec section below */
 
3244         /* to reflect what the codec has.                       */
 
3245         /* ICH and ICH0 only support 2 channels so don't bother */
 
3247         inl(card->iobase + ALI_CPR);
 
3250         for (num_ac97 = 0; num_ac97 < NR_AC97; num_ac97++) {
 
3252                 /* Assume codec isn't available until we go through the
 
3254                 card->ac97_codec[num_ac97] = NULL;
 
3255                 /* The ICH programmer's reference says you should   */
 
3256                 /* check the ready status before probing. So we chk */
 
3257                 /*   What do we do if it's not ready?  Wait and try */
 
3258                 /*   again, or abort?                               */
 
3259                 if (!ali_ac97_exists(card, num_ac97)) {
 
3261                                 printk(KERN_ERR "ali_audio: Primary codec not ready.\n");
 
3265                 if ((codec = ac97_alloc_codec()) == NULL)
 
3267                 /* initialize some basic codec information, other fields will be filled
 
3268                    in ac97_probe_codec */
 
3269                 codec->private_data = card;
 
3270                 codec->id = num_ac97;
 
3271                 codec->codec_read = ali_ac97_get;
 
3272                 codec->codec_write = ali_ac97_set;
 
3273                 if (!ali_ac97_probe_and_powerup(card, codec)) {
 
3274                         printk(KERN_ERR "ali_audio: timed out waiting for codec %d analog ready",
 
3277                         break;  /* it didn't work */
 
3280                 /* Store state information about S/PDIF transmitter */
 
3281                 card->ac97_status = 0;
 
3282                 /* Don't attempt to get eid until powerup is complete */
 
3283                 eid = ali_ac97_get(codec, AC97_EXTENDED_ID);
 
3284                 if (eid == 0xFFFF) {
 
3285                         printk(KERN_ERR "ali_audio: no codec attached ?\n");
 
3290                 card->ac97_features = eid;
 
3291                 /* Now check the codec for useful features to make up for
 
3292                    the dumbness of the ali5455 hardware engine */
 
3293                 if (!(eid & 0x0001))
 
3295                                "ali_audio: only 48Khz playback available.\n");
 
3297                         if (!ali_ac97_enable_variable_rate(codec)) {
 
3299                                        "ali_audio: Codec refused to allow VRA, using 48Khz only.\n");
 
3300                                 card->ac97_features &= ~1;
 
3304                 /* Determine how many channels the codec(s) support   */
 
3305                 /*   - The primary codec always supports 2            */
 
3306                 /*   - If the codec supports AMAP, surround DACs will */
 
3307                 /*     automaticlly get assigned to slots.            */
 
3308                 /*     * Check for surround DACs and increment if     */
 
3310                 /*   - Else check if the codec is revision 2.2        */
 
3311                 /*     * If surround DACs exist, assign them to slots */
 
3312                 /*       and increment channel count.                 */
 
3314                 /* All of this only applies to ICH2 and above. ICH    */
 
3315                 /* and ICH0 only support 2 channels.  ICH2 will only  */
 
3316                 /* support multiple codecs in a "split audio" config. */
 
3317                 /* as described above.                                */
 
3319                 /* TODO: Remove all the debugging messages!           */
 
3321                 if ((eid & 0xc000) == 0)        /* primary codec */
 
3322                         total_channels += 2;
 
3323                 if ((codec->dev_mixer = register_sound_mixer(&ali_mixer_fops, -1)) < 0) {
 
3324                         printk(KERN_ERR "ali_audio: couldn't register mixer!\n");
 
3328                 card->ac97_codec[num_ac97] = codec;
 
3330         /* pick the minimum of channels supported by ICHx or codec(s) */
 
3331         card->channels = (card->channels > total_channels) ? total_channels : card->channels;
 
3335 static void __devinit ali_configure_clocking(void)
 
3337         struct ali_card *card;
 
3338         struct ali_state *state;
 
3339         struct dmabuf *dmabuf;
 
3340         unsigned int i, offset, new_offset;
 
3341         unsigned long flags;
 
3344         /* We could try to set the clocking for multiple cards, but can you even have
 
3345          * more than one ali in a machine?  Besides, clocking is global, so unless
 
3346          * someone actually thinks more than one ali in a machine is possible and
 
3347          * decides to rewrite that little bit, setting the rate for more than one card
 
3348          * is a waste of time.
 
3351                 state = card->states[0] = (struct ali_state *)
 
3352                     kmalloc(sizeof(struct ali_state), GFP_KERNEL);
 
3355                 memset(state, 0, sizeof(struct ali_state));
 
3356                 dmabuf = &state->dmabuf;
 
3357                 dmabuf->write_channel = card->alloc_pcm_channel(card);
 
3360                 state->magic = ALI5455_STATE_MAGIC;
 
3361                 init_waitqueue_head(&dmabuf->wait);
 
3362                 init_MUTEX(&state->open_sem);
 
3363                 dmabuf->fmt = ALI5455_FMT_STEREO | ALI5455_FMT_16BIT;
 
3364                 dmabuf->trigger = PCM_ENABLE_OUTPUT;
 
3365                 ali_set_dac_rate(state, 48000);
 
3366                 if (prog_dmabuf(state, 0) != 0)
 
3367                         goto config_out_nodmabuf;
 
3369                 if (dmabuf->dmasize < 16384)
 
3372                 dmabuf->count = dmabuf->dmasize;
 
3373                 outb(31, card->iobase + dmabuf->write_channel->port + OFF_LVI);
 
3375                 local_irq_save(flags);
 
3377                 offset = ali_get_dma_addr(state, 0);
 
3379                 new_offset = ali_get_dma_addr(state, 0);
 
3382                 outb(2, card->iobase + dmabuf->write_channel->port + OFF_CR);
 
3383                 local_irq_restore(flags);
 
3385                 i = new_offset - offset;
 
3390                 if (i > 48500 || i < 47500) {
 
3391                         clocking = clocking * clocking / i;
 
3394                 dealloc_dmabuf(state);
 
3395 config_out_nodmabuf:
 
3396                 state->card->free_pcm_channel(state->card, state->dmabuf. write_channel->num);
 
3398                 card->states[0] = NULL;
 
3402 /* install the driver, we do not allocate hardware channel nor DMA buffer now, they are defered 
 
3403    until "ACCESS" time (in prog_dmabuf called by open/read/write/ioctl/mmap) */
 
3405 static int __devinit ali_probe(struct pci_dev *pci_dev,
 
3406                                const struct pci_device_id *pci_id)
 
3408         struct ali_card *card;
 
3409         if (pci_enable_device(pci_dev))
 
3411         if (pci_set_dma_mask(pci_dev, ALI5455_DMA_MASK)) {
 
3412                 printk(KERN_ERR "ali5455: architecture does not support"
 
3413                        " 32bit PCI busmaster DMA\n");
 
3417         if ((card = kmalloc(sizeof(struct ali_card), GFP_KERNEL)) == NULL) {
 
3418                 printk(KERN_ERR "ali_audio: out of memory\n");
 
3421         memset(card, 0, sizeof(*card));
 
3422         card->initializing = 1;
 
3423         card->iobase = pci_resource_start(pci_dev, 0);
 
3424         card->pci_dev = pci_dev;
 
3425         card->pci_id = pci_id->device;
 
3426         card->irq = pci_dev->irq;
 
3428         card->magic = ALI5455_CARD_MAGIC;
 
3430         card->pm_suspended = 0;
 
3432         spin_lock_init(&card->lock);
 
3433         spin_lock_init(&card->ac97_lock);
 
3435         pci_set_master(pci_dev);
 
3436         printk(KERN_INFO "ali: %s found at IO 0x%04lx, IRQ %d\n",
 
3437                card_names[pci_id->driver_data], card->iobase, card->irq);
 
3438         card->alloc_pcm_channel = ali_alloc_pcm_channel;
 
3439         card->alloc_rec_pcm_channel = ali_alloc_rec_pcm_channel;
 
3440         card->alloc_rec_mic_channel = ali_alloc_rec_mic_channel;
 
3441         card->alloc_codec_spdifout_channel = ali_alloc_codec_spdifout_channel;
 
3442         card->alloc_controller_spdifout_channel = ali_alloc_controller_spdifout_channel;
 
3443         card->free_pcm_channel = ali_free_pcm_channel;
 
3444         card->channel[0].offset = 0;
 
3445         card->channel[0].port = 0x40;
 
3446         card->channel[0].num = 0;
 
3447         card->channel[1].offset = 0;
 
3448         card->channel[1].port = 0x50;
 
3449         card->channel[1].num = 1;
 
3450         card->channel[2].offset = 0;
 
3451         card->channel[2].port = 0x60;
 
3452         card->channel[2].num = 2;
 
3453         card->channel[3].offset = 0;
 
3454         card->channel[3].port = 0x70;
 
3455         card->channel[3].num = 3;
 
3456         card->channel[4].offset = 0;
 
3457         card->channel[4].port = 0xb0;
 
3458         card->channel[4].num = 4;
 
3459         /* claim our iospace and irq */
 
3460         request_region(card->iobase, 256, card_names[pci_id->driver_data]);
 
3461         if (request_irq(card->irq, &ali_interrupt, SA_SHIRQ,
 
3462                         card_names[pci_id->driver_data], card)) {
 
3463                 printk(KERN_ERR "ali_audio: unable to allocate irq %d\n",
 
3465                 release_region(card->iobase, 256);
 
3470         if (ali_reset_5455(card) <= 0) {
 
3471                 unregister_sound_dsp(card->dev_audio);
 
3472                 release_region(card->iobase, 256);
 
3473                 free_irq(card->irq, card);
 
3478         /* initialize AC97 codec and register /dev/mixer */
 
3479         if (ali_ac97_init(card) < 0) {
 
3480                 release_region(card->iobase, 256);
 
3481                 free_irq(card->irq, card);
 
3486         pci_set_drvdata(pci_dev, card);
 
3488         if (clocking == 0) {
 
3490                 ali_configure_clocking();
 
3493         /* register /dev/dsp */
 
3494         if ((card->dev_audio = register_sound_dsp(&ali_audio_fops, -1)) < 0) {
 
3496                 printk(KERN_ERR"ali_audio: couldn't register DSP device!\n");
 
3497                 release_region(card->iobase, 256);
 
3498                 free_irq(card->irq, card);
 
3499                 for (i = 0; i < NR_AC97; i++)
 
3500                         if (card->ac97_codec[i] != NULL) {
 
3501                                 unregister_sound_mixer(card->ac97_codec[i]->dev_mixer);
 
3502                                 kfree(card->ac97_codec[i]);
 
3507         card->initializing = 0;
 
3511 static void __devexit ali_remove(struct pci_dev *pci_dev)
 
3514         struct ali_card *card = pci_get_drvdata(pci_dev);
 
3515         /* free hardware resources */
 
3516         free_irq(card->irq, devs);
 
3517         release_region(card->iobase, 256);
 
3518         /* unregister audio devices */
 
3519         for (i = 0; i < NR_AC97; i++)
 
3520                 if (card->ac97_codec[i] != NULL) {
 
3521                         unregister_sound_mixer(card->ac97_codec[i]->
 
3523                         ac97_release_codec(card->ac97_codec[i]);
 
3524                         card->ac97_codec[i] = NULL;
 
3526         unregister_sound_dsp(card->dev_audio);
 
3531 static int ali_pm_suspend(struct pci_dev *dev, pm_message_t pm_state)
 
3533         struct ali_card *card = pci_get_drvdata(dev);
 
3534         struct ali_state *state;
 
3535         unsigned long flags;
 
3536         struct dmabuf *dmabuf;
 
3541         spin_lock_irqsave(&card->lock, flags);
 
3542         card->pm_suspended = 1;
 
3543         for (i = 0; i < NR_HW_CH; i++) {
 
3544                 state = card->states[i];
 
3547                 /* this happens only if there are open files */
 
3548                 dmabuf = &state->dmabuf;
 
3549                 if (dmabuf->enable & DAC_RUNNING ||
 
3551                      && (dmabuf->trigger & PCM_ENABLE_OUTPUT))) {
 
3552                         state->pm_saved_dac_rate = dmabuf->rate;
 
3555                         state->pm_saved_dac_rate = 0;
 
3557                 if (dmabuf->enable & ADC_RUNNING) {
 
3558                         state->pm_saved_adc_rate = dmabuf->rate;
 
3561                         state->pm_saved_adc_rate = 0;
 
3564                 dmabuf->swptr = dmabuf->hwptr = 0;
 
3565                 dmabuf->count = dmabuf->total_bytes = 0;
 
3568         spin_unlock_irqrestore(&card->lock, flags);
 
3569         /* save mixer settings */
 
3570         for (num_ac97 = 0; num_ac97 < NR_AC97; num_ac97++) {
 
3571                 struct ac97_codec *codec = card->ac97_codec[num_ac97];
 
3574                 for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
 
3575                         if ((supported_mixer(codec, i)) && (codec->read_mixer)) {
 
3576                                 card->pm_saved_mixer_settings[i][num_ac97] = codec->read_mixer(codec, i);
 
3580         pci_save_state(dev);    /* XXX do we need this? */
 
3581         pci_disable_device(dev);        /* disable busmastering */
 
3582         pci_set_power_state(dev, 3);    /* Zzz. */
 
3587 static int ali_pm_resume(struct pci_dev *dev)
 
3589         int num_ac97, i = 0;
 
3590         struct ali_card *card = pci_get_drvdata(dev);
 
3591         pci_enable_device(dev);
 
3592         pci_restore_state(dev);
 
3593         /* observation of a toshiba portege 3440ct suggests that the 
 
3594            hardware has to be more or less completely reinitialized from
 
3595            scratch after an apm suspend.  Works For Me.   -dan */
 
3596         ali_ac97_random_init_stuff(card);
 
3597         for (num_ac97 = 0; num_ac97 < NR_AC97; num_ac97++) {
 
3598                 struct ac97_codec *codec = card->ac97_codec[num_ac97];
 
3599                 /* check they haven't stolen the hardware while we were
 
3601                 if (!codec || !ali_ac97_exists(card, num_ac97)) {
 
3607                 if (!ali_ac97_probe_and_powerup(card, codec))
 
3609                 if ((card->ac97_features & 0x0001)) {
 
3610                         /* at probe time we found we could do variable
 
3611                            rates, but APM suspend has made it forget
 
3612                            its magical powers */
 
3613                         if (!ali_ac97_enable_variable_rate(codec))
 
3616                 /* we lost our mixer settings, so restore them */
 
3617                 for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
 
3618                         if (supported_mixer(codec, i)) {
 
3619                                 int val = card->pm_saved_mixer_settings[i][num_ac97];
 
3620                                 codec->mixer_state[i] = val;
 
3621                                 codec->write_mixer(codec, i,
 
3623                                                    ((val >> 8) & 0xff));
 
3628         /* we need to restore the sample rate from whatever it was */
 
3629         for (i = 0; i < NR_HW_CH; i++) {
 
3630                 struct ali_state *state = card->states[i];
 
3632                         if (state->pm_saved_adc_rate)
 
3633                                 ali_set_adc_rate(state, state->pm_saved_adc_rate);
 
3634                         if (state->pm_saved_dac_rate)
 
3635                                 ali_set_dac_rate(state, state->pm_saved_dac_rate);
 
3639         card->pm_suspended = 0;
 
3640         /* any processes that were reading/writing during the suspend
 
3641            probably ended up here */
 
3642         for (i = 0; i < NR_HW_CH; i++) {
 
3643                 struct ali_state *state = card->states[i];
 
3645                         wake_up(&state->dmabuf.wait);
 
3649 #endif                          /* CONFIG_PM */
 
3652 MODULE_DESCRIPTION("ALI 5455 audio support");
 
3653 MODULE_LICENSE("GPL");
 
3654 module_param(clocking, int, 0);
 
3656 module_param(strict_clocking, uint, 0);
 
3657 module_param(codec_pcmout_share_spdif_locked, uint, 0);
 
3658 module_param(codec_independent_spdif_locked, uint, 0);
 
3659 module_param(controller_pcmout_share_spdif_locked, uint, 0);
 
3660 module_param(controller_independent_spdif_locked, uint, 0);
 
3661 #define ALI5455_MODULE_NAME "ali5455"
 
3662 static struct pci_driver ali_pci_driver = {
 
3663         .name           = ALI5455_MODULE_NAME,
 
3664         .id_table       = ali_pci_tbl,
 
3666         .remove         = __devexit_p(ali_remove),
 
3668         .suspend        = ali_pm_suspend,
 
3669         .resume         = ali_pm_resume,
 
3670 #endif                          /* CONFIG_PM */
 
3673 static int __init ali_init_module(void)
 
3675         printk(KERN_INFO "ALI 5455 + AC97 Audio, version "
 
3676                DRIVER_VERSION ", " __TIME__ " " __DATE__ "\n");
 
3678         if (codec_independent_spdif_locked > 0) {
 
3679                 if (codec_independent_spdif_locked == 32000
 
3680                     || codec_independent_spdif_locked == 44100
 
3681                     || codec_independent_spdif_locked == 48000) {
 
3682                         printk(KERN_INFO "ali_audio: Enabling S/PDIF at sample rate %dHz.\n", codec_independent_spdif_locked);
 
3684                         printk(KERN_INFO "ali_audio: S/PDIF can only be locked to 32000, 44100, or 48000Hz.\n");
 
3685                         codec_independent_spdif_locked = 0;
 
3688         if (controller_independent_spdif_locked > 0) {
 
3689                 if (controller_independent_spdif_locked == 32000
 
3690                     || controller_independent_spdif_locked == 44100
 
3691                     || controller_independent_spdif_locked == 48000) {
 
3692                         printk(KERN_INFO "ali_audio: Enabling S/PDIF at sample rate %dHz.\n", controller_independent_spdif_locked);
 
3694                         printk(KERN_INFO "ali_audio: S/PDIF can only be locked to 32000, 44100, or 48000Hz.\n");
 
3695                         controller_independent_spdif_locked = 0;
 
3699         if (codec_pcmout_share_spdif_locked > 0) {
 
3700                 if (codec_pcmout_share_spdif_locked == 32000
 
3701                     || codec_pcmout_share_spdif_locked == 44100
 
3702                     || codec_pcmout_share_spdif_locked == 48000) {
 
3703                         printk(KERN_INFO "ali_audio: Enabling S/PDIF at sample rate %dHz.\n", codec_pcmout_share_spdif_locked);
 
3705                         printk(KERN_INFO "ali_audio: S/PDIF can only be locked to 32000, 44100, or 48000Hz.\n");
 
3706                         codec_pcmout_share_spdif_locked = 0;
 
3709         if (controller_pcmout_share_spdif_locked > 0) {
 
3710                 if (controller_pcmout_share_spdif_locked == 32000
 
3711                     || controller_pcmout_share_spdif_locked == 44100
 
3712                     || controller_pcmout_share_spdif_locked == 48000) {
 
3713                         printk(KERN_INFO "ali_audio: Enabling controller S/PDIF at sample rate %dHz.\n", controller_pcmout_share_spdif_locked);
 
3715                         printk(KERN_INFO "ali_audio: S/PDIF can only be locked to 32000, 44100, or 48000Hz.\n");
 
3716                         controller_pcmout_share_spdif_locked = 0;
 
3719         return pci_register_driver(&ali_pci_driver);
 
3722 static void __exit ali_cleanup_module(void)
 
3724         pci_unregister_driver(&ali_pci_driver);
 
3727 module_init(ali_init_module);
 
3728 module_exit(ali_cleanup_module);