Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8f0cb147 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa

parents 8e33ba49 b00e8443
Loading
Loading
Loading
Loading
+20 −9
Original line number Original line Diff line number Diff line
@@ -167,7 +167,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
    spdif           - Support SPDIF I/O
    spdif           - Support SPDIF I/O
    		    - Default: disabled
    		    - Default: disabled


    Module supports autoprobe and multiple chips (max 8).
    This module supports one chip and autoprobe.


    The power-management is supported.
    The power-management is supported.


@@ -206,7 +206,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
			  See "AC97 Quirk Option" section below.
			  See "AC97 Quirk Option" section below.
    spdif_aclink	- S/PDIF transfer over AC-link (default = 1)
    spdif_aclink	- S/PDIF transfer over AC-link (default = 1)


    This module supports up to 8 cards and autoprobe.
    This module supports one card and autoprobe.


    ATI IXP has two different methods to control SPDIF output.  One is
    ATI IXP has two different methods to control SPDIF output.  One is
    over AC-link and another is over the "direct" SPDIF output.  The
    over AC-link and another is over the "direct" SPDIF output.  The
@@ -218,7 +218,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.


    Module for ATI IXP 150/200/250 AC97 modem controllers.
    Module for ATI IXP 150/200/250 AC97 modem controllers.


    Module supports up to 8 cards.
    This module supports one card and autoprobe.


    Note: The default index value of this module is -2, i.e. the first
    Note: The default index value of this module is -2, i.e. the first
          slot is excluded.
          slot is excluded.
@@ -637,7 +637,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
    model	- force the model name
    model	- force the model name
    position_fix - Fix DMA pointer (0 = auto, 1 = none, 2 = POSBUF, 3 = FIFO size)
    position_fix - Fix DMA pointer (0 = auto, 1 = none, 2 = POSBUF, 3 = FIFO size)


    Module supports up to 8 cards.
    This module supports one card and autoprobe.


    Each codec may have a model table for different configurations.
    Each codec may have a model table for different configurations.
    If your machine isn't listed there, the default (usually minimal)
    If your machine isn't listed there, the default (usually minimal)
@@ -663,6 +663,10 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
			adjusted.  Appearing only when compiled with
			adjusted.  Appearing only when compiled with
			$CONFIG_SND_DEBUG=y
			$CONFIG_SND_DEBUG=y


	ALC260
	  hp		HP machines
	  fujitsu	Fujitsu S7020

	CMI9880
	CMI9880
	  minimal	3-jack in back
	  minimal	3-jack in back
	  min_fp	3-jack in back, 2-jack in front
	  min_fp	3-jack in back, 2-jack in front
@@ -811,7 +815,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
		    semaphores (e.g. on some ASUS laptops)
		    semaphores (e.g. on some ASUS laptops)
		    (default off)
		    (default off)


    Module supports autoprobe and multiple bus-master chips (max 8).
    This module supports one chip and autoprobe.


    Note: the latest driver supports auto-detection of chip clock.
    Note: the latest driver supports auto-detection of chip clock.
    if you still encounter too fast playback, specify the clock
    if you still encounter too fast playback, specify the clock
@@ -830,7 +834,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.


    ac97_clock	  - AC'97 codec clock base (0 = auto-detect)
    ac97_clock	  - AC'97 codec clock base (0 = auto-detect)


    This module supports up to 8 cards and autoprobe.
    This module supports one card and autoprobe.


    Note: The default index value of this module is -2, i.e. the first
    Note: The default index value of this module is -2, i.e. the first
          slot is excluded.
          slot is excluded.
@@ -950,8 +954,10 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
    use_cache        - 0 or 1 (disabled by default)
    use_cache        - 0 or 1 (disabled by default)
    vaio_hack        - alias buffer_top=0x25a800
    vaio_hack        - alias buffer_top=0x25a800
    reset_workaround - enable AC97 RESET workaround for some laptops
    reset_workaround - enable AC97 RESET workaround for some laptops
    reset_workaround2 - enable extended AC97 RESET workaround for some
		      other laptops


    Module supports autoprobe and multiple chips (max 8).
    This module supports one chip and autoprobe.


    The power-management is supported.
    The power-management is supported.


@@ -980,6 +986,11 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
    workaround is enabled automatically.  For other laptops with a
    workaround is enabled automatically.  For other laptops with a
    hard freeze, you can try reset_workaround=1 option.
    hard freeze, you can try reset_workaround=1 option.


    Note: Dell Latitude CSx laptops have another problem regarding
    AC97 RESET.  On these laptops, reset_workaround2 option is
    turned on as default.  This option is worth to try if the
    previous reset_workaround option doesn't help.

    Note: This driver is really crappy.  It's a porting from the
    Note: This driver is really crappy.  It's a porting from the
    OSS driver, which is a result of black-magic reverse engineering.
    OSS driver, which is a result of black-magic reverse engineering.
    The detection of codec will fail if the driver is loaded *after*
    The detection of codec will fail if the driver is loaded *after*
@@ -1310,7 +1321,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
    ac97_quirk  - AC'97 workaround for strange hardware
    ac97_quirk  - AC'97 workaround for strange hardware
		  See "AC97 Quirk Option" section below.
		  See "AC97 Quirk Option" section below.


    Module supports autoprobe and multiple bus-master chips (max 8).
    This module supports one chip and autoprobe.


    Note: on some SMP motherboards like MSI 694D the interrupts might
    Note: on some SMP motherboards like MSI 694D the interrupts might
          not be generated properly.  In such a case, please try to
          not be generated properly.  In such a case, please try to
@@ -1352,7 +1363,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.


    ac97_clock	- AC'97 codec clock base (default 48000Hz)
    ac97_clock	- AC'97 codec clock base (default 48000Hz)


    Module supports up to 8 cards.
    This module supports one card and autoprobe.


    Note: The default index value of this module is -2, i.e. the first
    Note: The default index value of this module is -2, i.e. the first
          slot is excluded.
          slot is excluded.
+15 −41
Original line number Original line Diff line number Diff line
@@ -18,8 +18,8 @@
      </affiliation>
      </affiliation>
     </author>
     </author>


     <date>March 6, 2005</date>
     <date>October 6, 2005</date>
     <edition>0.3.4</edition>
     <edition>0.3.5</edition>


    <abstract>
    <abstract>
      <para>
      <para>
@@ -30,7 +30,7 @@


    <legalnotice>
    <legalnotice>
    <para>
    <para>
    Copyright (c) 2002-2004  Takashi Iwai <email>tiwai@suse.de</email>
    Copyright (c) 2002-2005  Takashi Iwai <email>tiwai@suse.de</email>
    </para>
    </para>


    <para>
    <para>
@@ -1433,25 +1433,10 @@
        <informalexample>
        <informalexample>
          <programlisting>
          <programlisting>
<![CDATA[
<![CDATA[
  if (chip->res_port) {
  release_and_free_resource(chip->res_port);
          release_resource(chip->res_port);
          kfree_nocheck(chip->res_port);
  }
]]>
]]>
          </programlisting>
          </programlisting>
        </informalexample>
        </informalexample>

      As you can see, the resource pointer is also to be freed
      via <function>kfree_nocheck()</function> after
      <function>release_resource()</function> is called. You
      cannot use <function>kfree()</function> here, because on ALSA,
      <function>kfree()</function> may be a wrapper to its own
      allocator with the memory debugging. Since the resource pointer
      is allocated externally outside the ALSA, it must be released
      via the native
      <function>kfree()</function>.
      <function>kfree_nocheck()</function> is used for that; it calls
      the native <function>kfree()</function> without wrapper. 
      </para>
      </para>


      <para>
      <para>
@@ -2190,8 +2175,7 @@ struct _snd_pcm_runtime {
	unsigned int rate_den;
	unsigned int rate_den;


	/* -- SW params -- */
	/* -- SW params -- */
	int tstamp_timespec;		/* use timeval (0) or timespec (1) */
	struct timespec tstamp_mode;	/* mmap timestamp is updated */
	snd_pcm_tstamp_t tstamp_mode;	/* mmap timestamp is updated */
  	unsigned int period_step;
  	unsigned int period_step;
	unsigned int sleep_min;		/* min ticks to sleep */
	unsigned int sleep_min;		/* min ticks to sleep */
	snd_pcm_uframes_t xfer_align;	/* xfer size need to be a multiple */
	snd_pcm_uframes_t xfer_align;	/* xfer size need to be a multiple */
@@ -3709,8 +3693,7 @@ struct _snd_pcm_runtime {
        <para>
        <para>
          Here, the chip instance is retrieved via
          Here, the chip instance is retrieved via
        <function>snd_kcontrol_chip()</function> macro.  This macro
        <function>snd_kcontrol_chip()</function> macro.  This macro
        converts from kcontrol-&gt;private_data to the type defined by
        just accesses to kcontrol-&gt;private_data. The
        <type>chip_t</type>. The
        kcontrol-&gt;private_data field is 
        kcontrol-&gt;private_data field is 
        given as the argument of <function>snd_ctl_new()</function>
        given as the argument of <function>snd_ctl_new()</function>
        (see the later subsection
        (see the later subsection
@@ -5998,32 +5981,23 @@ struct _snd_pcm_runtime {
        The first argument is the expression to evaluate, and the
        The first argument is the expression to evaluate, and the
      second argument is the action if it fails. When
      second argument is the action if it fails. When
      <constant>CONFIG_SND_DEBUG</constant>, is set, it will show an
      <constant>CONFIG_SND_DEBUG</constant>, is set, it will show an
      error message such as <computeroutput>BUG? (xxx) (called from
      error message such as <computeroutput>BUG? (xxx)</computeroutput>
      yyy)</computeroutput>. When no debug flag is set, this is
      together with stack trace.
      ignored. 
      </para>
      </para>
    </section>

    <section id="useful-functions-snd-runtime-check">
      <title><function>snd_runtime_check()</function></title>
      <para>
      <para>
        This macro is quite similar with
	 When no debug flag is set, this macro is ignored. 
      <function>snd_assert()</function>. Unlike
      <function>snd_assert()</function>, the expression is always
      evaluated regardless of
      <constant>CONFIG_SND_DEBUG</constant>. When
      <constant>CONFIG_SND_DEBUG</constant> is set, the macro will
      show a message like <computeroutput>ERROR (xx) (called from
      yyy)</computeroutput>. 
      </para>
      </para>
    </section>
    </section>


    <section id="useful-functions-snd-bug">
    <section id="useful-functions-snd-bug">
      <title><function>snd_BUG()</function></title>
      <title><function>snd_BUG()</function></title>
      <para>
      <para>
        It calls <function>snd_assert(0,)</function> -- that is, just
        It shows <computeroutput>BUG?</computeroutput> message and
      prints the error message at the point. It's useful to show that
      stack trace as well as <function>snd_assert</function> at the point.
      a fatal error happens there. 
      It's useful to show that a fatal error happens there. 
      </para>
      <para>
	 When no debug flag is set, this macro is ignored. 
      </para>
      </para>
    </section>
    </section>
  </chapter>
  </chapter>
+38 −27
Original line number Original line Diff line number Diff line
@@ -149,8 +149,22 @@ static void get_rtc_alm_time (struct rtc_time *alm_tm);
#ifdef RTC_IRQ
#ifdef RTC_IRQ
static void rtc_dropped_irq(unsigned long data);
static void rtc_dropped_irq(unsigned long data);


static void set_rtc_irq_bit(unsigned char bit);
static void set_rtc_irq_bit_locked(unsigned char bit);
static void mask_rtc_irq_bit(unsigned char bit);
static void mask_rtc_irq_bit_locked(unsigned char bit);

static inline void set_rtc_irq_bit(unsigned char bit)
{
	spin_lock_irq(&rtc_lock);
	set_rtc_irq_bit_locked(bit);
	spin_unlock_irq(&rtc_lock);
}

static void mask_rtc_irq_bit(unsigned char bit)
{
	spin_lock_irq(&rtc_lock);
	mask_rtc_irq_bit_locked(bit);
	spin_unlock_irq(&rtc_lock);
}
#endif
#endif


static int rtc_proc_open(struct inode *inode, struct file *file);
static int rtc_proc_open(struct inode *inode, struct file *file);
@@ -401,18 +415,19 @@ static int rtc_do_ioctl(unsigned int cmd, unsigned long arg, int kernel)
	}
	}
	case RTC_PIE_OFF:	/* Mask periodic int. enab. bit	*/
	case RTC_PIE_OFF:	/* Mask periodic int. enab. bit	*/
	{
	{
		mask_rtc_irq_bit(RTC_PIE);
		unsigned long flags; /* can be called from isr via rtc_control() */
		spin_lock_irqsave (&rtc_lock, flags);
		mask_rtc_irq_bit_locked(RTC_PIE);
		if (rtc_status & RTC_TIMER_ON) {
		if (rtc_status & RTC_TIMER_ON) {
			spin_lock_irq (&rtc_lock);
			rtc_status &= ~RTC_TIMER_ON;
			rtc_status &= ~RTC_TIMER_ON;
			del_timer(&rtc_irq_timer);
			del_timer(&rtc_irq_timer);
			spin_unlock_irq (&rtc_lock);
		}
		}
		spin_unlock_irqrestore (&rtc_lock, flags);
		return 0;
		return 0;
	}
	}
	case RTC_PIE_ON:	/* Allow periodic ints		*/
	case RTC_PIE_ON:	/* Allow periodic ints		*/
	{
	{

		unsigned long flags; /* can be called from isr via rtc_control() */
		/*
		/*
		 * We don't really want Joe User enabling more
		 * We don't really want Joe User enabling more
		 * than 64Hz of interrupts on a multi-user machine.
		 * than 64Hz of interrupts on a multi-user machine.
@@ -421,14 +436,14 @@ static int rtc_do_ioctl(unsigned int cmd, unsigned long arg, int kernel)
			(!capable(CAP_SYS_RESOURCE)))
			(!capable(CAP_SYS_RESOURCE)))
			return -EACCES;
			return -EACCES;


		spin_lock_irqsave (&rtc_lock, flags);
		if (!(rtc_status & RTC_TIMER_ON)) {
		if (!(rtc_status & RTC_TIMER_ON)) {
			spin_lock_irq (&rtc_lock);
			rtc_irq_timer.expires = jiffies + HZ/rtc_freq + 2*HZ/100;
			rtc_irq_timer.expires = jiffies + HZ/rtc_freq + 2*HZ/100;
			add_timer(&rtc_irq_timer);
			add_timer(&rtc_irq_timer);
			rtc_status |= RTC_TIMER_ON;
			rtc_status |= RTC_TIMER_ON;
			spin_unlock_irq (&rtc_lock);
		}
		}
		set_rtc_irq_bit(RTC_PIE);
		set_rtc_irq_bit_locked(RTC_PIE);
		spin_unlock_irqrestore (&rtc_lock, flags);
		return 0;
		return 0;
	}
	}
	case RTC_UIE_OFF:	/* Mask ints from RTC updates.	*/
	case RTC_UIE_OFF:	/* Mask ints from RTC updates.	*/
@@ -609,6 +624,7 @@ static int rtc_do_ioctl(unsigned int cmd, unsigned long arg, int kernel)
	{
	{
		int tmp = 0;
		int tmp = 0;
		unsigned char val;
		unsigned char val;
		unsigned long flags; /* can be called from isr via rtc_control() */


		/* 
		/* 
		 * The max we can do is 8192Hz.
		 * The max we can do is 8192Hz.
@@ -631,9 +647,9 @@ static int rtc_do_ioctl(unsigned int cmd, unsigned long arg, int kernel)
		if (arg != (1<<tmp))
		if (arg != (1<<tmp))
			return -EINVAL;
			return -EINVAL;


		spin_lock_irq(&rtc_lock);
		spin_lock_irqsave(&rtc_lock, flags);
		if (hpet_set_periodic_freq(arg)) {
		if (hpet_set_periodic_freq(arg)) {
			spin_unlock_irq(&rtc_lock);
			spin_unlock_irqrestore(&rtc_lock, flags);
			return 0;
			return 0;
		}
		}
		rtc_freq = arg;
		rtc_freq = arg;
@@ -641,7 +657,7 @@ static int rtc_do_ioctl(unsigned int cmd, unsigned long arg, int kernel)
		val = CMOS_READ(RTC_FREQ_SELECT) & 0xf0;
		val = CMOS_READ(RTC_FREQ_SELECT) & 0xf0;
		val |= (16 - tmp);
		val |= (16 - tmp);
		CMOS_WRITE(val, RTC_FREQ_SELECT);
		CMOS_WRITE(val, RTC_FREQ_SELECT);
		spin_unlock_irq(&rtc_lock);
		spin_unlock_irqrestore(&rtc_lock, flags);
		return 0;
		return 0;
	}
	}
#endif
#endif
@@ -844,12 +860,15 @@ int rtc_control(rtc_task_t *task, unsigned int cmd, unsigned long arg)
#ifndef RTC_IRQ
#ifndef RTC_IRQ
	return -EIO;
	return -EIO;
#else
#else
	spin_lock_irq(&rtc_task_lock);
	unsigned long flags;
	if (cmd != RTC_PIE_ON && cmd != RTC_PIE_OFF && cmd != RTC_IRQP_SET)
		return -EINVAL;
	spin_lock_irqsave(&rtc_task_lock, flags);
	if (rtc_callback != task) {
	if (rtc_callback != task) {
		spin_unlock_irq(&rtc_task_lock);
		spin_unlock_irqrestore(&rtc_task_lock, flags);
		return -ENXIO;
		return -ENXIO;
	}
	}
	spin_unlock_irq(&rtc_task_lock);
	spin_unlock_irqrestore(&rtc_task_lock, flags);
	return rtc_do_ioctl(cmd, arg, 1);
	return rtc_do_ioctl(cmd, arg, 1);
#endif
#endif
}
}
@@ -1306,40 +1325,32 @@ static void get_rtc_alm_time(struct rtc_time *alm_tm)
 * meddles with the interrupt enable/disable bits.
 * meddles with the interrupt enable/disable bits.
 */
 */


static void mask_rtc_irq_bit(unsigned char bit)
static void mask_rtc_irq_bit_locked(unsigned char bit)
{
{
	unsigned char val;
	unsigned char val;


	spin_lock_irq(&rtc_lock);
	if (hpet_mask_rtc_irq_bit(bit))
	if (hpet_mask_rtc_irq_bit(bit)) {
		spin_unlock_irq(&rtc_lock);
		return;
		return;
	}
	val = CMOS_READ(RTC_CONTROL);
	val = CMOS_READ(RTC_CONTROL);
	val &=  ~bit;
	val &=  ~bit;
	CMOS_WRITE(val, RTC_CONTROL);
	CMOS_WRITE(val, RTC_CONTROL);
	CMOS_READ(RTC_INTR_FLAGS);
	CMOS_READ(RTC_INTR_FLAGS);


	rtc_irq_data = 0;
	rtc_irq_data = 0;
	spin_unlock_irq(&rtc_lock);
}
}


static void set_rtc_irq_bit(unsigned char bit)
static void set_rtc_irq_bit_locked(unsigned char bit)
{
{
	unsigned char val;
	unsigned char val;


	spin_lock_irq(&rtc_lock);
	if (hpet_set_rtc_irq_bit(bit))
	if (hpet_set_rtc_irq_bit(bit)) {
		spin_unlock_irq(&rtc_lock);
		return;
		return;
	}
	val = CMOS_READ(RTC_CONTROL);
	val = CMOS_READ(RTC_CONTROL);
	val |= bit;
	val |= bit;
	CMOS_WRITE(val, RTC_CONTROL);
	CMOS_WRITE(val, RTC_CONTROL);
	CMOS_READ(RTC_INTR_FLAGS);
	CMOS_READ(RTC_INTR_FLAGS);


	rtc_irq_data = 0;
	rtc_irq_data = 0;
	spin_unlock_irq(&rtc_lock);
}
}
#endif
#endif


+0 −10
Original line number Original line Diff line number Diff line
@@ -387,15 +387,6 @@
#define AC97_RATES_MIC_ADC	4
#define AC97_RATES_MIC_ADC	4
#define AC97_RATES_SPDIF	5
#define AC97_RATES_SPDIF	5


/* shared controllers */
enum {
	AC97_SHARED_TYPE_NONE,
	AC97_SHARED_TYPE_ICH,
	AC97_SHARED_TYPE_ATIIXP,
	AC97_SHARED_TYPE_VIA,
	AC97_SHARED_TYPES
};

/*
/*
 *
 *
 */
 */
@@ -468,7 +459,6 @@ struct _snd_ac97_bus {
	unsigned short used_slots[2][4]; /* actually used PCM slots */
	unsigned short used_slots[2][4]; /* actually used PCM slots */
	unsigned short pcms_count; /* count of PCMs */
	unsigned short pcms_count; /* count of PCMs */
	struct ac97_pcm *pcms;
	struct ac97_pcm *pcms;
	unsigned int shared_type;	/* type of shared controller betwen audio and modem */
	ac97_t *codec[4];
	ac97_t *codec[4];
	snd_info_entry_t *proc;
	snd_info_entry_t *proc;
};
};
+14 −80
Original line number Original line Diff line number Diff line
@@ -29,7 +29,6 @@
#include <linux/pm.h>			/* pm_message_t */
#include <linux/pm.h>			/* pm_message_t */


/* Typedef's */
/* Typedef's */
typedef struct timespec snd_timestamp_t;
typedef struct sndrv_interval snd_interval_t;
typedef struct sndrv_interval snd_interval_t;
typedef enum sndrv_card_type snd_card_type;
typedef enum sndrv_card_type snd_card_type;
typedef struct sndrv_xferi snd_xferi_t;
typedef struct sndrv_xferi snd_xferi_t;
@@ -256,6 +255,7 @@ typedef struct _snd_minor snd_minor_t;


/* sound.c */
/* sound.c */


extern int snd_major;
extern int snd_ecards_limit;
extern int snd_ecards_limit;


void snd_request_card(int card);
void snd_request_card(int card);
@@ -285,39 +285,6 @@ int snd_oss_init_module(void);


/* memory.c */
/* memory.c */


#ifdef CONFIG_SND_DEBUG_MEMORY
void snd_memory_init(void);
void snd_memory_done(void);
int snd_memory_info_init(void);
int snd_memory_info_done(void);
void *snd_hidden_kmalloc(size_t size, gfp_t flags);
void *snd_hidden_kzalloc(size_t size, gfp_t flags);
void *snd_hidden_kcalloc(size_t n, size_t size, gfp_t flags);
void snd_hidden_kfree(const void *obj);
void *snd_hidden_vmalloc(unsigned long size);
void snd_hidden_vfree(void *obj);
char *snd_hidden_kstrdup(const char *s, gfp_t flags);
#define kmalloc(size, flags) snd_hidden_kmalloc(size, flags)
#define kzalloc(size, flags) snd_hidden_kzalloc(size, flags)
#define kcalloc(n, size, flags) snd_hidden_kcalloc(n, size, flags)
#define kfree(obj) snd_hidden_kfree(obj)
#define vmalloc(size) snd_hidden_vmalloc(size)
#define vfree(obj) snd_hidden_vfree(obj)
#define kmalloc_nocheck(size, flags) snd_wrapper_kmalloc(size, flags)
#define vmalloc_nocheck(size) snd_wrapper_vmalloc(size)
#define kfree_nocheck(obj) snd_wrapper_kfree(obj)
#define vfree_nocheck(obj) snd_wrapper_vfree(obj)
#define kstrdup(s, flags)  snd_hidden_kstrdup(s, flags)
#else
#define snd_memory_init() /*NOP*/
#define snd_memory_done() /*NOP*/
#define snd_memory_info_init() /*NOP*/
#define snd_memory_info_done() /*NOP*/
#define kmalloc_nocheck(size, flags) kmalloc(size, flags)
#define vmalloc_nocheck(size) vmalloc(size)
#define kfree_nocheck(obj) kfree(obj)
#define vfree_nocheck(obj) vfree(obj)
#endif
int copy_to_user_fromio(void __user *dst, const volatile void __iomem *src, size_t count);
int copy_to_user_fromio(void __user *dst, const volatile void __iomem *src, size_t count);
int copy_from_user_toio(volatile void __iomem *dst, const void __user *src, size_t count);
int copy_from_user_toio(volatile void __iomem *dst, const void __user *src, size_t count);


@@ -373,8 +340,9 @@ unsigned int snd_dma_pointer(unsigned long dma, unsigned int size);
#endif
#endif


/* misc.c */
/* misc.c */
struct resource;
void release_and_free_resource(struct resource *res);


int snd_task_name(struct task_struct *task, char *name, size_t size);
#ifdef CONFIG_SND_VERBOSE_PRINTK
#ifdef CONFIG_SND_VERBOSE_PRINTK
void snd_verbose_printk(const char *file, int line, const char *format, ...)
void snd_verbose_printk(const char *file, int line, const char *format, ...)
     __attribute__ ((format (printf, 3, 4)));
     __attribute__ ((format (printf, 3, 4)));
@@ -431,32 +399,22 @@ void snd_verbose_printd(const char *file, int line, const char *format, ...)
 */
 */
#define snd_assert(expr, args...) do {					\
#define snd_assert(expr, args...) do {					\
	if (unlikely(!(expr))) {					\
	if (unlikely(!(expr))) {					\
		snd_printk(KERN_ERR "BUG? (%s) (called from %p)\n", __ASTRING__(expr), __builtin_return_address(0));\
		snd_printk(KERN_ERR "BUG? (%s)\n", __ASTRING__(expr));	\
		dump_stack();						\
		args;							\
		args;							\
	}								\
	}								\
} while (0)
} while (0)
/**

 * snd_runtime_check - run-time assertion macro
#define snd_BUG() do {				\
 * @expr: expression
	snd_printk(KERN_ERR "BUG?\n");		\
 * @args...: the action
	dump_stack();				\
 *
 * This macro checks the expression in run-time and invokes the commands
 * given in the rest arguments if the assertion is failed.
 * Unlike snd_assert(), the action commands are executed even if
 * CONFIG_SND_DEBUG is not set but without any error messages.
 */
#define snd_runtime_check(expr, args...) do {\
	if (unlikely(!(expr))) {				\
		snd_printk(KERN_ERR "ERROR (%s) (called from %p)\n", __ASTRING__(expr), __builtin_return_address(0));\
		args;\
	}\
} while (0)
} while (0)


#else /* !CONFIG_SND_DEBUG */
#else /* !CONFIG_SND_DEBUG */


#define snd_printd(fmt, args...)	/* nothing */
#define snd_printd(fmt, args...)	/* nothing */
#define snd_assert(expr, args...)	(void)(expr)
#define snd_assert(expr, args...)	(void)(expr)
#define snd_runtime_check(expr, args...) do { if (!(expr)) { args; } } while (0)
#define snd_BUG()			/* nothing */


#endif /* CONFIG_SND_DEBUG */
#endif /* CONFIG_SND_DEBUG */


@@ -473,30 +431,6 @@ void snd_verbose_printd(const char *file, int line, const char *format, ...)
#define snd_printdd(format, args...) /* nothing */
#define snd_printdd(format, args...) /* nothing */
#endif
#endif


#define snd_BUG() snd_assert(0, )


static inline void snd_timestamp_now(struct timespec *tstamp, int timespec)
{
	struct timeval val;
	/* FIXME: use a linear time source */
	do_gettimeofday(&val);
	tstamp->tv_sec = val.tv_sec;
	tstamp->tv_nsec = val.tv_usec;
	if (timespec)
		tstamp->tv_nsec *= 1000L;
}

static inline void snd_timestamp_zero(struct timespec *tstamp)
{
	tstamp->tv_sec = 0;
	tstamp->tv_nsec = 0;
}

static inline int snd_timestamp_null(struct timespec *tstamp)
{
	return tstamp->tv_sec == 0 && tstamp->tv_nsec == 0;
}


#define SNDRV_OSS_VERSION         ((3<<16)|(8<<8)|(1<<4)|(0))	/* 3.8.1a */
#define SNDRV_OSS_VERSION         ((3<<16)|(8<<8)|(1<<4)|(0))	/* 3.8.1a */


Loading