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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pas2_pcm.c

?? <Linux1.0核心游記>電子書+書后源碼+Linux1.0源碼
?? C
字號:
#define _PAS2_PCM_C_/* * sound/pas2_pcm.c *  * The low level driver for the Pro Audio Spectrum ADC/DAC. *  * 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_SOUNDCARD#include "pas.h"#if !defined(EXCLUDE_PAS) && !defined(EXCLUDE_AUDIO)#define TRACE(WHAT)		/* (WHAT) */#define PAS_PCM_INTRBITS (0x08)/* Sample buffer timer interrupt enable */#define PCM_NON	0#define PCM_DAC	1#define PCM_ADC	2static unsigned long pcm_speed = 0;	/* sampling rate */static unsigned char pcm_channels = 1;	/* channels/sample (1 or 2) */static unsigned char pcm_bits = 8;	/* bits/sample (8 or 16) */static unsigned char pcm_filter = 0;	/* filter FLAG */static unsigned char pcm_mode = PCM_NON;static unsigned long pcm_count = 0;static unsigned short pcm_bitsok = 8;	/* mask of OK bits */static int      my_devnum = 0;intpcm_set_speed (int arg){  int             foo, tmp;  unsigned long   flags;  if (arg > 44100)    arg = 44100;  if (arg < 5000)    arg = 5000;  foo = 1193180 / arg;  arg = 1193180 / foo;  if (pcm_channels & 2)    foo = foo >> 1;  pcm_speed = arg;  tmp = pas_read (FILTER_FREQUENCY);  DISABLE_INTR (flags);  pas_write (tmp & ~(F_F_PCM_RATE_COUNTER | F_F_PCM_BUFFER_COUNTER), FILTER_FREQUENCY);  pas_write (S_C_C_SAMPLE_RATE | S_C_C_LSB_THEN_MSB | S_C_C_SQUARE_WAVE, SAMPLE_COUNTER_CONTROL);  pas_write (foo & 0xff, SAMPLE_RATE_TIMER);  pas_write ((foo >> 8) & 0xff, SAMPLE_RATE_TIMER);  pas_write (tmp, FILTER_FREQUENCY);  RESTORE_INTR (flags);  return pcm_speed;}intpcm_set_channels (int arg){  if ((arg != 1) && (arg != 2))    return pcm_channels;  if (arg != pcm_channels)    {      pas_write (pas_read (PCM_CONTROL) ^ P_C_PCM_MONO, PCM_CONTROL);      pcm_channels = arg;      pcm_set_speed (pcm_speed);/* The speed must be reinitialized */    }  return pcm_channels;}intpcm_set_bits (int arg){  if ((arg & pcm_bitsok) != arg)    return pcm_bits;  if (arg != pcm_bits)    {      pas_write (pas_read (SYSTEM_CONFIGURATION_2) ^ S_C_2_PCM_16_BIT, SYSTEM_CONFIGURATION_2);      pcm_bits = arg;    }  return pcm_bits;}static intpas_pcm_ioctl (int dev, unsigned int cmd, unsigned int arg, int local){  TRACE (printk ("pas2_pcm.c: static int pas_pcm_ioctl(unsigned int cmd = %X, unsigned int arg = %X)\n", cmd, arg));  switch (cmd)    {    case SOUND_PCM_WRITE_RATE:      if (local)	return pcm_set_speed (arg);      return IOCTL_OUT (arg, pcm_set_speed (IOCTL_IN (arg)));      break;    case SOUND_PCM_READ_RATE:      if (local)	return pcm_speed;      return IOCTL_OUT (arg, pcm_speed);      break;    case SNDCTL_DSP_STEREO:      if (local)	return pcm_set_channels (arg + 1) - 1;      return IOCTL_OUT (arg, pcm_set_channels (IOCTL_IN (arg) + 1) - 1);      break;    case SOUND_PCM_WRITE_CHANNELS:      if (local)         return pcm_set_channels (arg);      return IOCTL_OUT (arg, pcm_set_channels (IOCTL_IN (arg)));      break;    case SOUND_PCM_READ_CHANNELS:      if (local)	return pcm_channels;      return IOCTL_OUT (arg, pcm_channels);      break;    case SNDCTL_DSP_SAMPLESIZE:      if (local)	return pcm_set_bits (arg);      return IOCTL_OUT (arg, pcm_set_bits (IOCTL_IN (arg)));      break;    case SOUND_PCM_READ_BITS:      if (local)	return pcm_bits;      return IOCTL_OUT (arg, pcm_bits);    case SOUND_PCM_WRITE_FILTER:	/* NOT YET IMPLEMENTED */      if (IOCTL_IN (arg) > 1)	return IOCTL_OUT (arg, RET_ERROR (EINVAL));      break;      pcm_filter = IOCTL_IN (arg);    case SOUND_PCM_READ_FILTER:      return IOCTL_OUT (arg, pcm_filter);      break;    default:      return RET_ERROR (EINVAL);    }  return RET_ERROR (EINVAL);}static voidpas_pcm_reset (int dev){  TRACE (printk ("pas2_pcm.c: static void pas_pcm_reset(void)\n"));  pas_write (pas_read (PCM_CONTROL) & ~P_C_PCM_ENABLE, PCM_CONTROL);}static intpas_pcm_open (int dev, int mode){  int             err;  TRACE (printk ("pas2_pcm.c: static int pas_pcm_open(int mode = %X)\n", mode));  if ((err = pas_set_intr (PAS_PCM_INTRBITS)) < 0)    return err;  if (!DMAbuf_open_dma (dev))    {      pas_remove_intr (PAS_PCM_INTRBITS);      return RET_ERROR (EBUSY);    }  pcm_count = 0;  return 0;}static voidpas_pcm_close (int dev){  unsigned long   flags;  TRACE (printk ("pas2_pcm.c: static void pas_pcm_close(void)\n"));  DISABLE_INTR (flags);  pas_pcm_reset (dev);  DMAbuf_close_dma (dev);  pas_remove_intr (PAS_PCM_INTRBITS);  pcm_mode = PCM_NON;  RESTORE_INTR (flags);}static voidpas_pcm_output_block (int dev, unsigned long buf, int count, 		      int intrflag, int restart_dma){  unsigned long   flags, cnt;  TRACE (printk ("pas2_pcm.c: static void pas_pcm_output_block(char *buf = %P, int count = %X)\n", buf, count));  cnt = count;  if (sound_dsp_dmachan[dev] > 3)    cnt >>= 1;  if (sound_dma_automode[dev] &&      intrflag &&      cnt == pcm_count)    return;			/* Auto mode on. No need to react */  DISABLE_INTR (flags);  pas_write (pas_read (PCM_CONTROL) & ~P_C_PCM_ENABLE,	     PCM_CONTROL);  if (restart_dma)      DMAbuf_start_dma (dev, buf, count, DMA_MODE_WRITE);  if (sound_dsp_dmachan[dev] > 3)    count >>= 1;  if (count != pcm_count)    {      pas_write (pas_read (FILTER_FREQUENCY) & ~F_F_PCM_BUFFER_COUNTER, FILTER_FREQUENCY);      pas_write (S_C_C_SAMPLE_BUFFER | S_C_C_LSB_THEN_MSB | S_C_C_SQUARE_WAVE, SAMPLE_COUNTER_CONTROL);      pas_write (count & 0xff, SAMPLE_BUFFER_COUNTER);      pas_write ((count >> 8) & 0xff, SAMPLE_BUFFER_COUNTER);      pas_write (pas_read (FILTER_FREQUENCY) | F_F_PCM_BUFFER_COUNTER, FILTER_FREQUENCY);      pcm_count = count;    }  pas_write (pas_read (FILTER_FREQUENCY) | F_F_PCM_BUFFER_COUNTER | F_F_PCM_RATE_COUNTER, FILTER_FREQUENCY);  pas_write (pas_read (PCM_CONTROL) | P_C_PCM_ENABLE | P_C_PCM_DAC_MODE, PCM_CONTROL);  pcm_mode = PCM_DAC;  RESTORE_INTR (flags);}static voidpas_pcm_start_input (int dev, unsigned long buf, int count, 		     int intrflag, int restart_dma){  unsigned long   flags;  int             cnt;  TRACE (printk ("pas2_pcm.c: static void pas_pcm_start_input(char *buf = %P, int count = %X)\n", buf, count));  cnt = count;  if (sound_dsp_dmachan[dev] > 3)    cnt >>= 1;  if (sound_dma_automode[my_devnum] &&      intrflag &&      cnt == pcm_count)    return;			/* Auto mode on. No need to react */  DISABLE_INTR (flags);  if (restart_dma)     DMAbuf_start_dma (dev, buf, count, DMA_MODE_READ);  if (sound_dsp_dmachan[dev] > 3)    count >>= 1;  if (count != pcm_count)    {      pas_write (pas_read (FILTER_FREQUENCY) & ~F_F_PCM_BUFFER_COUNTER, FILTER_FREQUENCY);      pas_write (S_C_C_SAMPLE_BUFFER | S_C_C_LSB_THEN_MSB | S_C_C_SQUARE_WAVE, SAMPLE_COUNTER_CONTROL);      pas_write (count & 0xff, SAMPLE_BUFFER_COUNTER);      pas_write ((count >> 8) & 0xff, SAMPLE_BUFFER_COUNTER);      pas_write (pas_read (FILTER_FREQUENCY) | F_F_PCM_BUFFER_COUNTER, FILTER_FREQUENCY);      pcm_count = count;    }  pas_write (pas_read (FILTER_FREQUENCY) | F_F_PCM_BUFFER_COUNTER | F_F_PCM_RATE_COUNTER, FILTER_FREQUENCY);  pas_write ((pas_read (PCM_CONTROL) | P_C_PCM_ENABLE) & ~P_C_PCM_DAC_MODE, PCM_CONTROL);  pcm_mode = PCM_ADC;  RESTORE_INTR (flags);}static intpas_pcm_prepare_for_input (int dev, int bsize, int bcount){  return 0;}static intpas_pcm_prepare_for_output (int dev, int bsize, int bcount){  return 0;}static struct audio_operations pas_pcm_operations ={  "Pro Audio Spectrum",  pas_pcm_open,			/* */  pas_pcm_close,		/* */  pas_pcm_output_block,		/* */  pas_pcm_start_input,		/* */  pas_pcm_ioctl,		/* */  pas_pcm_prepare_for_input,	/* */  pas_pcm_prepare_for_output,	/* */  pas_pcm_reset,		/* */  pas_pcm_reset,		/* halt_xfer */  NULL,				/* has_output_drained */  NULL				/* copy_from_user */};longpas_pcm_init (long mem_start, struct address_info *hw_config){  TRACE (printk ("pas2_pcm.c: long pas_pcm_init(long mem_start = %X)\n", mem_start));  pcm_bitsok = 8;  if (pas_read (OPERATION_MODE_1) & O_M_1_PCM_TYPE)    pcm_bitsok |= 16;  pcm_set_speed (DSP_DEFAULT_SPEED);  if (num_dspdevs < MAX_DSP_DEV)    {      dsp_devs[my_devnum = num_dspdevs++] = &pas_pcm_operations;      sound_dsp_dmachan[my_devnum] = hw_config->dma;#ifndef PAS_NO_AUTODMA      if (hw_config->dma > 3)	{	  sound_buffcounts[my_devnum] = 1;	  sound_buffsizes[my_devnum] = 2 * 65536;	  sound_dma_automode[my_devnum] = 1;	}      else	{	  sound_buffcounts[my_devnum] = 1;	  sound_buffsizes[my_devnum] = DSP_BUFFSIZE;	  sound_dma_automode[my_devnum] = 1;	}#else	  sound_buffcounts[my_devnum] = 2;	  sound_buffsizes[my_devnum] = DSP_BUFFSIZE;	  sound_dma_automode[my_devnum] = 0;#endif    }  else    printk ("PAS2: Too many PCM devices available\n");  return mem_start;}voidpas_pcm_interrupt (unsigned char status, int cause){  if (cause == 1)		/* PCM buffer done */    {      /*       * Halt the PCM first. Otherwise we don't have time to start a new       * block before the PCM chip proceeds to the next sample       */      if (!sound_dma_automode[my_devnum])	{	  pas_write (pas_read (PCM_CONTROL) & ~P_C_PCM_ENABLE,		     PCM_CONTROL);	}      switch (pcm_mode)	{	case PCM_DAC:	  DMAbuf_outputintr (my_devnum, 1);	  break;	case PCM_ADC:	  DMAbuf_inputintr (my_devnum);	  break;	default:	  printk ("PAS: Unexpected PCM interrupt\n");	}    }}#endif#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲美州欧州综合国| 欧美一区午夜视频在线观看| 国产精品国产三级国产aⅴ入口| 国产美女精品人人做人人爽| 精品国偷自产国产一区| 精品一区二区三区在线观看| 精品sm在线观看| 成人黄色片在线观看| 亚洲人成网站色在线观看| 欧美在线视频全部完| 天天综合日日夜夜精品| 日韩精品中文字幕在线一区| 国产毛片精品国产一区二区三区| 国产精品系列在线| 色婷婷综合中文久久一本| 亚洲18色成人| 国产视频一区在线观看 | 久久精品男人天堂av| 9i在线看片成人免费| 亚洲国产精品人人做人人爽| 欧美一区二区三区电影| 成人午夜视频福利| 亚洲一区二区在线观看视频 | 亚洲欧洲中文日韩久久av乱码| 在线观看一区二区视频| 日韩高清一区二区| 国产精品免费aⅴ片在线观看| 欧美日韩视频在线第一区| 韩国av一区二区| 一区二区三区四区激情| 精品国产乱子伦一区| 色婷婷国产精品综合在线观看| 蜜臀av性久久久久蜜臀aⅴ| 国产精品久久久久久久久快鸭| 欧美剧情电影在线观看完整版免费励志电影| 免费亚洲电影在线| 亚洲欧洲日韩av| 精品国产乱码久久久久久蜜臀| 91丨九色丨国产丨porny| 国内精品免费在线观看| 亚洲伊人伊色伊影伊综合网| 亚洲精品一区在线观看| 欧洲人成人精品| voyeur盗摄精品| 国产综合色视频| 午夜欧美电影在线观看| 国产精品免费久久| 欧美成人精品二区三区99精品| 一道本成人在线| 国产91清纯白嫩初高中在线观看| 日本成人在线网站| 亚洲国产综合91精品麻豆| 中文字幕制服丝袜成人av| 国产偷国产偷精品高清尤物| 成人午夜精品在线| 国产色综合久久| 91精品麻豆日日躁夜夜躁| 91麻豆123| 国产91在线|亚洲| 国产一区二区三区免费| 老司机一区二区| 午夜av电影一区| 亚洲影院在线观看| 亚洲一区二区欧美| 亚洲综合精品自拍| 亚洲一区二区三区小说| 亚洲欧美日韩在线播放| 1区2区3区欧美| 亚洲啪啪综合av一区二区三区| 国产精品剧情在线亚洲| 国产精品每日更新| 国产精品第13页| 专区另类欧美日韩| 亚洲精品亚洲人成人网 | 欧美丝袜丝nylons| 欧美体内she精高潮| 欧美午夜影院一区| 欧美猛男男办公室激情| 欧美丰满美乳xxx高潮www| 欧美电影在线免费观看| 欧美日韩国产精品自在自线| 91 com成人网| 日韩一区二区三区视频在线观看| 欧美精品久久久久久久久老牛影院| 欧美日韩在线免费视频| 欧美精品丝袜久久久中文字幕| 欧美另类高清zo欧美| 在线播放日韩导航| 欧美一级黄色录像| 久久久国产精品不卡| 国产精品三级av在线播放| 国产精品成人免费精品自在线观看| 亚洲欧洲成人精品av97| 亚洲综合在线电影| 日韩精品久久理论片| 久久不见久久见中文字幕免费| 国产成人无遮挡在线视频| gogogo免费视频观看亚洲一| 一本久道久久综合中文字幕 | av在线一区二区三区| 91蜜桃传媒精品久久久一区二区| 在线视频一区二区三区| 欧美老女人第四色| 久久天堂av综合合色蜜桃网| 国产欧美视频一区二区| 亚洲精品成a人| 久久激情五月激情| 成人一区在线观看| 欧美色图在线观看| 久久先锋影音av鲁色资源| 亚洲欧洲另类国产综合| 喷白浆一区二区| 成人avav影音| 欧美一级二级三级蜜桃| 国产精品久久久久久户外露出 | 欧美色视频一区| 精品国产伦一区二区三区免费| 欧美国产精品专区| 五月婷婷色综合| 97国产一区二区| 精品成a人在线观看| 亚洲自拍都市欧美小说| 毛片基地黄久久久久久天堂| 99精品视频免费在线观看| 日韩欧美精品在线| 亚洲激情网站免费观看| 国产一二精品视频| 91麻豆精品国产综合久久久久久 | 国产精品久久久久久久久免费相片 | 国产精品毛片高清在线完整版| 亚洲成人激情自拍| 91天堂素人约啪| 国产亚洲美州欧州综合国| 日韩av电影天堂| 日本高清视频一区二区| 国产欧美一区二区精品婷婷| 日本aⅴ亚洲精品中文乱码| 在线视频综合导航| 国产精品欧美综合在线| 国产一区二区三区视频在线播放| 欧美性生交片4| 中文字幕一区二| 成人一区二区三区中文字幕| 日韩欧美成人激情| 午夜成人免费视频| 欧洲精品在线观看| 亚洲人成网站色在线观看| 成人免费看视频| 国产婷婷色一区二区三区四区| 久久99精品久久久久久动态图| 欧美高清精品3d| 天堂一区二区在线| 欧美日韩国产综合一区二区三区| 亚洲欧美另类小说视频| 国产激情视频一区二区三区欧美 | 8x8x8国产精品| 亚洲一区自拍偷拍| 色欲综合视频天天天| 亚洲欧洲日韩一区二区三区| 成人激情校园春色| 国产精品每日更新| av一区二区不卡| 亚洲四区在线观看| 色婷婷久久久综合中文字幕| 亚洲欧洲日产国产综合网| av激情成人网| 亚洲激情av在线| 日本高清视频一区二区| 亚洲综合免费观看高清完整版 | 精品理论电影在线| 蜜桃视频第一区免费观看| 91精品国产欧美一区二区| 日韩av午夜在线观看| 日韩三级.com| 国产剧情一区二区| 国产欧美日韩另类视频免费观看| 国产成人av电影在线播放| 中文一区二区完整视频在线观看| 国产福利一区二区三区在线视频| 国产欧美精品区一区二区三区| 成人网男人的天堂| 亚洲精品成人少妇| 欧美猛男男办公室激情| 久久精品999| 国产精品乱子久久久久| 一本大道久久精品懂色aⅴ| 亚洲bt欧美bt精品777| 日韩精品专区在线影院重磅| 国产一区二区免费看| 国产精品国产三级国产普通话99| 91电影在线观看| 免费成人结看片| 亚洲国产精品精华液ab| 欧美自拍偷拍一区| 日本欧美一区二区在线观看| 26uuu国产在线精品一区二区| 风间由美一区二区三区在线观看| 亚洲精品第1页| 欧美va亚洲va| 97精品国产露脸对白|