亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? sound_switch.c

?? <Linux1.0核心游記>電子書(shū)+書(shū)后源碼+Linux1.0源碼
?? C
字號(hào):
/* * sound/sound_switch.c *  * The system call switch *  * Copyright by Hannu Savolainen 1993 *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. 2. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. *  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. *  */#include "sound_config.h"#ifdef CONFIGURE_SOUNDCARDstruct sbc_device{  int             usecount;};static struct sbc_device sbc_devices[SND_NDEVS] = {{0}};static int      in_use = 0;	/* Total # of open device files (excluding				 * minor 0) *//* * /dev/sndstatus -device */static char    *status_buf = NULL;static int      status_len, status_ptr;static int      status_busy = 0;static intput_status (char *s){  int             l;  for (l=0;l<256,s[l];l++);	/* l=strlen(s); */  if (status_len + l >= 4000)    return 0;  memcpy (&status_buf[status_len], s, l);  status_len += l;  return 1;}static intput_status_int (unsigned int val, int radix){  int             l, v;  static char hx[] = "0123456789abcdef";  char buf[11];  if (!val) return put_status("0");  l = 0;  buf[10]=0;  while (val)  {  	v = val % radix;  	val = val / radix;  	buf[9-l] = hx[v];  	l++;  }  if (status_len + l >= 4000)    return 0;  memcpy (&status_buf[status_len], &buf[10-l], l);  status_len += l;  return 1;}static voidinit_status (void){  /*   * Write the status information to the status_buf and update status_len.   * There is a limit of 4000 bytes for the data.   */  int             i;  status_ptr = 0;  put_status ("Sound Driver:" SOUND_VERSION_STRING	      " (" SOUND_CONFIG_DATE " " SOUND_CONFIG_BY "@"	      SOUND_CONFIG_HOST "." SOUND_CONFIG_DOMAIN ")"	      "\n");  if (!put_status ("Config options: "))    return;  if (!put_status_int(SELECTED_SOUND_OPTIONS, 16))     return;  if (!put_status ("\n\nHW config: \n"))    return;  for (i = 0; i < (num_sound_drivers - 1); i++)    {      if (!supported_drivers[i].enabled)       if (!put_status ("("))	return;      if (!put_status ("Type ")) return;      if (!put_status_int(supported_drivers[i].card_type, 10)) return;      if (!put_status (": ")) return;      if (!put_status (supported_drivers[i].name)) return;      if (!put_status (" at 0x")) return;      if (!put_status_int(supported_drivers[i].config.io_base, 16)) return;      if (!put_status (" irq ")) return;      if (!put_status_int(supported_drivers[i].config.irq, 10)) return;      if (!put_status (" drq ")) return;      if (!put_status_int(supported_drivers[i].config.dma, 10)) return;      if (!supported_drivers[i].enabled)       if (!put_status (")"))	return;      if (!put_status ("\n"))	return;    }  if (!put_status ("\nPCM devices:\n"))    return;  for (i = 0; i < num_dspdevs; i++)    {      if (!put_status_int(i, 10)) return;      if (!put_status(": "))return;      if (!put_status(dsp_devs[i]->name))return;      if (!put_status("\n"))return;    }  if (!put_status ("\nSynth devices:\n"))    return;  for (i = 0; i < num_synths; i++)    {      if (!put_status_int(i, 10)) return;      if (!put_status(": "))return;      if (!put_status(synth_devs[i]->info->name))return;      if (!put_status("\n"))return;    }  if (!put_status ("\nMidi devices:\n"))    return;  for (i = 0; i < num_midis; i++)    {      if (!put_status_int(i, 10)) return;      if (!put_status(": "))return;      if (!put_status(midi_devs[i]->info.name))return;      if (!put_status("\n"))return;    }  if (num_mixers)    {      if (!put_status ("\nMixer(s) installed\n"))	return;    }  else    {      if (!put_status ("\nNo mixers installed\n"))	return;    }}static intread_status (snd_rw_buf *buf, int count){  /*   * Return at most 'count' bytes from the status_buf.   */  int             l, c;  l = count;  c = status_len - status_ptr;  if (l > c)    l = c;  if (l <= 0)    return 0;  COPY_TO_USER(buf, 0, &status_buf[status_ptr], l);  status_ptr += l;  return l;}intsound_read_sw (int dev, struct fileinfo *file, snd_rw_buf *buf, int count){  DEB (printk ("sound_read_sw(dev=%d, count=%d)\n", dev, count));  switch (dev & 0x0f)    {    case SND_DEV_STATUS:      return read_status (buf, count);      break;    case SND_DEV_DSP:    case SND_DEV_DSP16:    case SND_DEV_AUDIO:      return audio_read (dev, file, buf, count);      break;    case SND_DEV_SEQ:      return sequencer_read (dev, file, buf, count);      break;#ifndef EXCLUDE_MPU401    case SND_DEV_MIDIN:      return MIDIbuf_read (dev, file, buf, count);#endif    default:      printk ("Sound: Undefined minor device %d\n", dev);    }  return RET_ERROR (EPERM);}intsound_write_sw (int dev, struct fileinfo *file, snd_rw_buf *buf, int count){  DEB (printk ("sound_write_sw(dev=%d, count=%d)\n", dev, count));  switch (dev & 0x0f)    {    case SND_DEV_SEQ:      return sequencer_write (dev, file, buf, count);      break;    case SND_DEV_DSP:    case SND_DEV_DSP16:    case SND_DEV_AUDIO:      return audio_write (dev, file, buf, count);      break;    default:      return RET_ERROR (EPERM);    }  return count;}intsound_open_sw (int dev, struct fileinfo *file){  int             retval;  DEB (printk ("sound_open_sw(dev=%d) : usecount=%d\n", dev, sbc_devices[dev].usecount));  if ((dev >= SND_NDEVS) || (dev < 0))    {      printk ("Invalid minor device %d\n", dev);      return RET_ERROR (ENXIO);    }  switch (dev & 0x0f)    {    case SND_DEV_STATUS:      if (status_busy)	return RET_ERROR (EBUSY);      status_busy = 1;      if ((status_buf = (char *) KERNEL_MALLOC (4000)) == NULL)	return RET_ERROR (EIO);      status_len = status_ptr = 0;      init_status ();      break;    case SND_DEV_CTL:      return 0;      break;    case SND_DEV_SEQ:      if ((retval = sequencer_open (dev, file)) < 0)	return retval;      break;#ifndef EXCLUDE_MPU401    case SND_DEV_MIDIN:      if ((retval = MIDIbuf_open (dev, file)) < 0)	return retval;      break;#endif    case SND_DEV_DSP:    case SND_DEV_DSP16:    case SND_DEV_AUDIO:      if ((retval = audio_open (dev, file)) < 0)	return retval;      break;    default:      printk ("Invalid minor device %d\n", dev);      return RET_ERROR (ENXIO);    }  sbc_devices[dev].usecount++;  in_use++;  return 0;}voidsound_release_sw (int dev, struct fileinfo *file){  DEB (printk ("sound_release_sw(dev=%d)\n", dev));  switch (dev & 0x0f)    {    case SND_DEV_STATUS:      if (status_buf)	KERNEL_FREE (status_buf);      status_buf = NULL;      status_busy = 0;      break;    case SND_DEV_CTL:      break;    case SND_DEV_SEQ:      sequencer_release (dev, file);      break;#ifndef EXCLUDE_MPU401    case SND_DEV_MIDIN:      MIDIbuf_release (dev, file);      break;#endif    case SND_DEV_DSP:    case SND_DEV_DSP16:    case SND_DEV_AUDIO:      audio_release (dev, file);      break;    default:      printk ("Sound error: Releasing unknown device 0x%02x\n", dev);    }  sbc_devices[dev].usecount--;  in_use--;}intsound_ioctl_sw (int dev, struct fileinfo *file,	     unsigned int cmd, unsigned long arg){  DEB (printk ("sound_ioctl_sw(dev=%d, cmd=0x%x, arg=0x%x)\n", dev, cmd, arg));  switch (dev & 0x0f)    {    case SND_DEV_CTL:      if (!num_mixers)	return RET_ERROR (ENXIO);      if ((dev >> 4) >= num_mixers)	return RET_ERROR (ENXIO);      return mixer_devs[dev >> 4]->ioctl (dev >> 4, cmd, arg);      break;    case SND_DEV_SEQ:      return sequencer_ioctl (dev, file, cmd, arg);      break;    case SND_DEV_DSP:    case SND_DEV_DSP16:    case SND_DEV_AUDIO:      return audio_ioctl (dev, file, cmd, arg);      break;#ifndef EXCLUDE_MPU401    case SND_DEV_MIDIN:      return MIDIbuf_ioctl (dev, file, cmd, arg);      break;#endif    default:      return RET_ERROR (EPERM);      break;    }  return RET_ERROR (EPERM);}#endif

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91国产成人在线| 亚洲色图视频网| 在线成人免费观看| 欧美在线视频不卡| 欧美午夜在线观看| 欧美亚洲综合另类| 欧美日韩一二三| 欧美色图片你懂的| 欧美亚洲免费在线一区| 欧美日韩在线电影| 欧美日韩二区三区| 日韩三级高清在线| 欧美精品一区二| 国产欧美精品区一区二区三区| 国产三级三级三级精品8ⅰ区| 亚洲国产精品v| 1024精品合集| 亚洲国产日韩一区二区| 亚洲成人黄色小说| 蜜桃视频一区二区| 国产精品一区二区免费不卡| 欧美猛男男办公室激情| 成熟亚洲日本毛茸茸凸凹| 国产成人99久久亚洲综合精品| 成人午夜精品在线| 色一情一伦一子一伦一区| 欧美日韩一级视频| 欧美大胆一级视频| 国产欧美精品区一区二区三区| 综合精品久久久| 亚洲国产成人va在线观看天堂| 免费人成黄页网站在线一区二区 | 亚洲国产日韩在线一区模特| 亚洲国产一区二区视频| 毛片av一区二区| 国产成人综合精品三级| 91在线精品一区二区| 欧美三级电影一区| 欧美精品一区二区在线观看| 国产精品久久久久9999吃药| 亚洲最新在线观看| 久久99热99| 成人av一区二区三区| 欧美色大人视频| www久久精品| 亚洲蜜臀av乱码久久精品蜜桃| 亚洲gay无套男同| 国产一区二区三区综合| 91麻豆swag| 精品久久久久久久人人人人传媒 | 国产一区二区三区精品欧美日韩一区二区三区 | 久久综合九色欧美综合狠狠 | 亚洲成av人在线观看| 国产自产高清不卡| 色婷婷综合五月| 日韩欧美久久一区| 国产精品第五页| 久久精品国产亚洲高清剧情介绍| 99免费精品视频| 日韩一本二本av| 亚洲乱码国产乱码精品精可以看| 青青草91视频| 色一区在线观看| 国产三级欧美三级日产三级99| 亚洲国产日产av| 成人在线一区二区三区| 欧美另类高清zo欧美| 中文字幕在线免费不卡| 久久黄色级2电影| 欧美天天综合网| 国产精品久久看| 激情综合网天天干| 欧美日韩日本视频| 亚洲天堂精品在线观看| 国产一区二区三区美女| 91精品国产综合久久香蕉的特点| 亚洲同性同志一二三专区| 国产主播一区二区| 欧美军同video69gay| 日韩码欧中文字| 懂色av一区二区三区蜜臀 | 亚洲精品v日韩精品| 国产一区二区三区免费| 日韩欧美国产精品| 一区二区三区在线视频免费| 成人一区二区在线观看| 26uuu久久综合| 日本免费在线视频不卡一不卡二| 欧美伊人久久久久久久久影院| 国产精品国产三级国产| 国产高清不卡一区二区| www亚洲一区| 久久国产麻豆精品| 欧美一区二区三区不卡| 午夜精品aaa| 欧美日韩国产高清一区二区| 一区二区三区视频在线观看| 99精品视频在线免费观看| 久久精品夜色噜噜亚洲aⅴ| 激情深爱一区二区| 久久综合九色综合欧美98 | 欧美在线综合视频| 亚洲综合激情网| 欧美色男人天堂| 亚洲无人区一区| 在线观看亚洲专区| 亚洲国产成人高清精品| 欧美乱妇23p| 日韩av中文字幕一区二区三区| 欧美精品一二三区| 日韩精品一二三| 欧美一区二视频| 麻豆精品视频在线观看视频| 日韩三级免费观看| 国产综合色在线| 国产欧美一区二区三区网站| 成人精品视频一区二区三区| 国产精品素人一区二区| 99视频在线观看一区三区| 1024成人网| 欧美视频一区二| 日韩电影一二三区| 久久亚洲私人国产精品va媚药| 国产精品一区在线| 中文一区二区完整视频在线观看| www.成人网.com| 亚洲免费在线电影| 欧美日韩一区视频| 免费观看日韩av| 久久久91精品国产一区二区三区| 成人午夜电影小说| 一区2区3区在线看| 日韩三级视频在线观看| 福利电影一区二区| 亚洲麻豆国产自偷在线| 欧美日韩国产免费| 国产一区二区在线观看视频| 国产精品国产a级| 欧美视频一区在线观看| 美女视频一区二区三区| 国产精品麻豆99久久久久久| 欧美性生活一区| 狠狠狠色丁香婷婷综合激情| 国产精品免费视频一区| 欧美午夜精品久久久| 久久国产精品99久久人人澡| 国产精品初高中害羞小美女文| 欧美亚洲一区二区在线观看| 激情深爱一区二区| 亚洲免费观看高清完整版在线观看 | 国产一区二区三区av电影| 中文字幕一区二区三区在线不卡 | 日韩精品亚洲一区二区三区免费| 精品成人免费观看| 色久优优欧美色久优优| 极品销魂美女一区二区三区| 亚洲图片激情小说| 欧美精品一区二区三| 在线视频国内一区二区| 国产精品77777| 亚洲成人精品影院| 欧美高清在线视频| 欧美一区二视频| 一本一道久久a久久精品| 久久国产福利国产秒拍| 一区二区三区四区中文字幕| 精品88久久久久88久久久| 色婷婷国产精品| 国产精品99久久久久久似苏梦涵 | 国产精品久久久久三级| 日韩欧美国产三级电影视频| 色系网站成人免费| 粉嫩aⅴ一区二区三区四区 | 91精品国产色综合久久ai换脸| 成人国产精品免费网站| 麻豆91在线观看| 午夜精品aaa| 亚洲精品菠萝久久久久久久| 欧美激情艳妇裸体舞| 日韩欧美一区二区三区在线| 欧美自拍偷拍一区| 成人午夜电影久久影院| 国内久久精品视频| 天天色综合天天| 亚洲一区二区在线免费看| 国产精品国产三级国产aⅴ中文| 精品福利视频一区二区三区| 欧美日韩国产在线播放网站| 色先锋aa成人| 91老师国产黑色丝袜在线| 国产91在线观看丝袜| 狠狠色狠狠色合久久伊人| 免播放器亚洲一区| 天堂久久久久va久久久久| 亚洲综合男人的天堂| 亚洲女爱视频在线| 日韩毛片精品高清免费| 中文字幕一区二区三区视频| 国产欧美一区二区在线观看| 久久精品网站免费观看|