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

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

?? pas2_card.c

?? <Linux1.0核心游記>電子書+書后源碼+Linux1.0源碼
?? C
字號:
#define _PAS2_CARD_C_#define SND_SA_INTERRUPT/* * sound/pas2_card.c *  * Detection routine for the Pro Audio Spectrum cards. *  * 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"#if defined(CONFIGURE_SOUNDCARD) && !defined(EXCLUDE_PAS)#define DEFINE_TRANSLATIONS#include "pas.h"/* * The Address Translation code is used to convert I/O register addresses to * be relative to the given base -register */int             translat_code;static int      pas_intr_mask = 0;static int      pas_irq = 0;static char     pas_model;static char    *pas_model_names[] ={"", "Pro AudioSpectrum+", "CDPC", "Pro AudioSpectrum 16", "Pro AudioSpectrum 16D"};/* pas_read() and pas_write() are equivalents of INB() and OUTB() *//* These routines perform the I/O address translation required *//* to support other than the default base address */unsigned charpas_read (int ioaddr){  return INB (ioaddr ^ translat_code);}voidpas_write (unsigned char data, int ioaddr){  OUTB (data, ioaddr ^ translat_code);}voidpas2_msg (char *foo){  printk ("    PAS2: %s.\n", foo);}/******************* Begin of the Interrupt Handler ********************/voidpasintr (int unused){  int             status;  status = pas_read (INTERRUPT_STATUS);  pas_write (status, INTERRUPT_STATUS);	/* Clear interrupt */  if (status & I_S_PCM_SAMPLE_BUFFER_IRQ)    {#ifndef EXCLUDE_AUDIO      pas_pcm_interrupt (status, 1);#endif      status &= ~I_S_PCM_SAMPLE_BUFFER_IRQ;    }  if (status & I_S_MIDI_IRQ)    {#ifndef EXCLUDE_MIDI#ifdef EXCLUDE_PRO_MIDI      pas_midi_interrupt ();#endif#endif      status &= ~I_S_MIDI_IRQ;    }}intpas_set_intr (int mask){  int             err;  if (!mask)    return 0;  if (!pas_intr_mask)    {      if ((err = snd_set_irq_handler (pas_irq, pasintr)) < 0)	return err;    }  pas_intr_mask |= mask;  pas_write (pas_intr_mask, INTERRUPT_MASK);  return 0;}intpas_remove_intr (int mask){  if (!mask)    return 0;  pas_intr_mask &= ~mask;  pas_write (pas_intr_mask, INTERRUPT_MASK);  if (!pas_intr_mask)    {      snd_release_irq (pas_irq);    }  return 0;}/******************* End of the Interrupt handler **********************//******************* Begin of the Initialization Code ******************/intconfig_pas_hw (struct address_info *hw_config){  char            ok = 1;  pas_irq = hw_config->irq;  pas_write (0x00, INTERRUPT_MASK);  pas_write (0x36, SAMPLE_COUNTER_CONTROL);	/* Local timer control						 * register */  pas_write (0x36, SAMPLE_RATE_TIMER);	/* Sample rate timer (16 bit) */  pas_write (0, SAMPLE_RATE_TIMER);  pas_write (0x74, SAMPLE_COUNTER_CONTROL);	/* Local timer control						 * register */  pas_write (0x74, SAMPLE_BUFFER_COUNTER);	/* Sample count register (16						 * bit) */  pas_write (0, SAMPLE_BUFFER_COUNTER);  pas_write (F_F_PCM_BUFFER_COUNTER | F_F_PCM_RATE_COUNTER | F_F_MIXER_UNMUTE | 1, FILTER_FREQUENCY);  pas_write (P_C_PCM_DMA_ENABLE | P_C_PCM_MONO | P_C_PCM_DAC_MODE | P_C_MIXER_CROSS_L_TO_L | P_C_MIXER_CROSS_R_TO_R, PCM_CONTROL);  pas_write (S_M_PCM_RESET | S_M_FM_RESET | S_M_SB_RESET | S_M_MIXER_RESET /* | S_M_OPL3_DUAL_MONO */ , SERIAL_MIXER);  pas_write (I_C_1_BOOT_RESET_ENABLE, IO_CONFIGURATION_1);  if (pas_irq < 0 || pas_irq > 15)    {      printk ("PAS2: Invalid IRQ %d", pas_irq);      ok = 0;    }  else    {      pas_write (I_C_3_PCM_IRQ_translate[pas_irq], IO_CONFIGURATION_3);      if (!I_C_3_PCM_IRQ_translate[pas_irq])	{	  printk ("PAS2: Invalid IRQ %d", pas_irq);	  ok = 0;	}    }  if (hw_config->dma < 0 || hw_config->dma > 7)    {      printk ("PAS2: Invalid DMA selection %d", hw_config->dma);      ok = 0;    }  else    {      pas_write (I_C_2_PCM_DMA_translate[hw_config->dma], IO_CONFIGURATION_2);      if (!I_C_2_PCM_DMA_translate[hw_config->dma])	{	  printk ("PAS2: Invalid DMA selection %d", hw_config->dma);	  ok = 0;	}    }  /* * This fixes the timing problems of the PAS due to the Symphony chipset * as per Media Vision.  Only define this if your PAS doesn't work correctly. */#ifdef SYMPHONY_PAS	OUTB(0x05,0xa8);	OUTB(0x60,0xa9);#endif#ifdef BROKEN_BUS_CLOCK  pas_write (S_C_1_PCS_ENABLE | S_C_1_PCS_STEREO | S_C_1_PCS_REALSOUND | S_C_1_FM_EMULATE_CLOCK, SYSTEM_CONFIGURATION_1);#else  /* pas_write(S_C_1_PCS_ENABLE, SYSTEM_CONFIGURATION_1);     */  pas_write (S_C_1_PCS_ENABLE | S_C_1_PCS_STEREO | S_C_1_PCS_REALSOUND, SYSTEM_CONFIGURATION_1);#endif  pas_write (0x18, SYSTEM_CONFIGURATION_3);	/* ??? */  pas_write (F_F_MIXER_UNMUTE | 0x01, FILTER_FREQUENCY);	/* Sets mute off and								 * selects filter rate								 * of 17.897 kHz */  if (pas_model == PAS_16 || pas_model == PAS_16D)    pas_write (8, PRESCALE_DIVIDER);  else    pas_write (0, PRESCALE_DIVIDER);  pas_write (P_M_MV508_ADDRESS | 5, PARALLEL_MIXER);  pas_write (5, PARALLEL_MIXER);#if !defined(EXCLUDE_SB_EMULATION) || !defined(EXCLUDE_SB)    {	struct address_info *sb_config;	if ((sb_config=sound_getconf(SNDCARD_SB)))        {		unsigned char irq_dma;  /* Turn on Sound Blaster compatibility */  /* bit 1 = SB emulation */  /* bit 0 = MPU401 emulation (CDPC only :-( ) */  pas_write (0x02, COMPATIBILITY_ENABLE);  /* "Emulation address"	 */            pas_write ((sb_config->io_base >> 4) & 0x0f, EMULATION_ADDRESS);	    if (!E_C_SB_DMA_translate[sb_config->dma])                printk("\n\nPAS16 Warning: Invalid SB DMA %d\n\n",			sb_config->dma);	    if (!E_C_SB_IRQ_translate[sb_config->irq])                printk("\n\nPAS16 Warning: Invalid SB IRQ %d\n\n",			sb_config->irq);	    irq_dma = E_C_SB_DMA_translate[sb_config->dma] | 		      E_C_SB_IRQ_translate[sb_config->irq];	    pas_write(irq_dma, EMULATION_CONFIGURATION);        }   }#endif  if (!ok)    pas2_msg ("Driver not enabled");  return ok;}intdetect_pas_hw (struct address_info *hw_config){  unsigned char   board_id, foo;  /*   * WARNING: Setting an option like W:1 or so that disables warm boot reset   * of the card will screw up this detect code something fierce. Adding code   * to handle this means possibly interfering with other cards on the bus if   * you have something on base port 0x388. SO be forewarned.   */  OUTB (0xBC, MASTER_DECODE);	/* Talk to first board */  OUTB (hw_config->io_base >> 2, MASTER_DECODE);	/* Set base address */  translat_code = PAS_DEFAULT_BASE ^ hw_config->io_base;  pas_write (1, WAIT_STATE);	/* One wait-state */  board_id = pas_read (INTERRUPT_MASK);  if (board_id == 0xff)    return 0;  /*   * We probably have a PAS-series board, now check for a PAS2-series board   * by trying to change the board revision bits. PAS2-series hardware won't   * let you do this - the bits are read-only.   */  foo = board_id ^ 0xe0;  pas_write (foo, INTERRUPT_MASK);  foo = INB (INTERRUPT_MASK);  pas_write (board_id, INTERRUPT_MASK);  if (board_id != foo)		/* Not a PAS2 */    return 0;  pas_model = O_M_1_to_card[pas_read (OPERATION_MODE_1) & 0x0f];  return pas_model;}longattach_pas_card (long mem_start, struct address_info *hw_config){  pas_irq = hw_config->irq;  if (detect_pas_hw (hw_config))    {      if ((pas_model = O_M_1_to_card[pas_read (OPERATION_MODE_1) & 0x0f]))	{	  printk (" <%s rev %d>", pas_model_names[(int) pas_model], pas_read (BOARD_REV_ID));	}      if (config_pas_hw (hw_config))	{#ifndef EXCLUDE_AUDIO	  mem_start = pas_pcm_init (mem_start, hw_config);#endif# if !defined(EXCLUDE_SB_EMULATION) && !defined(EXCLUDE_SB)	  sb_dsp_disable_midi ();	/* The SB emulation don't support					 * midi */# endif#ifndef EXCLUDE_YM3812	  enable_opl3_mode (0x388, 0x38a, 0);#endif#ifndef EXCLUDE_MIDI#ifdef EXCLUDE_PRO_MIDI	  mem_start = pas_midi_init (mem_start);#endif#endif	  pas_init_mixer ();	}    }  return mem_start;}intprobe_pas (struct address_info *hw_config){  return detect_pas_hw (hw_config);}#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品中文字幕一区| 日韩欧美一级二级三级久久久| 欧美成人综合网站| 中文字幕日韩精品一区| 麻豆国产精品一区二区三区| 91久久精品一区二区三| 欧美经典一区二区三区| 蜜臀a∨国产成人精品| 在线免费观看日本一区| 亚洲国产精品成人久久综合一区| 国产成人自拍网| 欧美妇女性影城| 亚洲视频免费在线| 国产成人综合视频| 26uuu精品一区二区在线观看| 午夜伦欧美伦电影理论片| 成人av电影在线播放| 国产色产综合色产在线视频| 日韩激情一区二区| 欧美日韩一区 二区 三区 久久精品 | 亚洲男人天堂av网| 成人性生交大片免费看在线播放 | 成人免费高清在线观看| 精品少妇一区二区三区免费观看 | 久久久久久免费毛片精品| 视频一区视频二区中文字幕| 色综合中文字幕国产| 国产精品全国免费观看高清| 久久国产剧场电影| 日韩免费高清视频| 蜜桃视频第一区免费观看| 欧美日韩二区三区| 亚洲成人黄色影院| 欧美唯美清纯偷拍| 亚洲成人av电影| 欧美日韩一级片在线观看| 一区2区3区在线看| 91成人在线精品| 一区二区视频在线| 欧洲精品中文字幕| 一区二区三区免费网站| 日本黄色一区二区| 亚洲在线视频一区| 欧美视频一区二区| 日韩精品免费专区| 日韩午夜在线播放| 精品中文字幕一区二区| 久久亚洲一区二区三区四区| 久久99精品国产| 久久久综合九色合综国产精品| 黄页网站大全一区二区| 久久精品视频免费| 日韩欧美一级在线播放| 日韩高清不卡一区二区| 日韩视频永久免费| 国产揄拍国内精品对白| 日本一区二区视频在线| jlzzjlzz欧美大全| 亚洲色图丝袜美腿| 欧美日韩精品一区二区三区蜜桃| 天天操天天综合网| 欧美本精品男人aⅴ天堂| 韩国在线一区二区| 中文字幕电影一区| 91国产免费观看| 日韩专区在线视频| 亚洲精品在线观看视频| 本田岬高潮一区二区三区| 亚洲啪啪综合av一区二区三区| 91久久精品一区二区三区| 日韩精品亚洲一区| 国产亚洲一本大道中文在线| av午夜一区麻豆| 亚洲成人1区2区| 久久亚洲精品小早川怜子| 国产91高潮流白浆在线麻豆| 亚洲乱码中文字幕综合| 欧美高清www午色夜在线视频| 国内精品伊人久久久久影院对白| 中文一区二区在线观看| 欧美三级在线播放| 激情久久五月天| 亚洲码国产岛国毛片在线| 6080日韩午夜伦伦午夜伦| 国产精品影视在线| 伊人婷婷欧美激情| 精品国产露脸精彩对白| 色婷婷一区二区三区四区| 日韩和欧美一区二区三区| 国产色综合久久| 欧美日本高清视频在线观看| 国产一区高清在线| 亚洲综合视频在线| 国产亚洲自拍一区| 欧美日韩在线三区| 国产一区二区三区不卡在线观看 | 久草中文综合在线| **性色生活片久久毛片| 欧美高清激情brazzers| 成人av在线一区二区| 婷婷夜色潮精品综合在线| 中文字幕av资源一区| 337p亚洲精品色噜噜噜| 国产电影精品久久禁18| 视频一区二区中文字幕| 国产精品久久看| 欧美一区二区在线视频| 99vv1com这只有精品| 黄网站免费久久| 天天综合色天天综合色h| 国产精品久久久久久久久动漫| 日韩限制级电影在线观看| 色综合久久综合网97色综合| 国产一区二区在线影院| 香蕉久久夜色精品国产使用方法| 欧美高清在线视频| 精品久久久久99| 欧美人牲a欧美精品| 不卡的电视剧免费网站有什么| 久久精品国产999大香线蕉| 亚洲精品日日夜夜| 国产精品色呦呦| 久久久久久久久久久久久夜| 制服丝袜中文字幕亚洲| 色中色一区二区| 成人黄色大片在线观看| 韩国v欧美v亚洲v日本v| 日本免费新一区视频| 亚洲国产一区视频| 亚洲欧美日韩中文播放| 国产精品日产欧美久久久久| 久久综合色之久久综合| 欧美一区二区三区婷婷月色| 欧美综合在线视频| 91美女视频网站| 成人免费视频网站在线观看| 国产一区二区三区综合 | 国产精品天干天干在线综合| 91精品国产综合久久久久久久| 日本韩国欧美三级| 日韩欧美亚洲国产精品字幕久久久 | 视频一区二区中文字幕| 亚洲精品视频免费看| 亚洲色图制服丝袜| 中文字幕一区二区在线观看| 国产午夜精品美女毛片视频| 欧美精品一区男女天堂| 日韩美一区二区三区| 欧美一级精品在线| 欧美一二三四在线| 日韩亚洲欧美中文三级| 日韩午夜电影av| 欧美成人video| 日韩欧美精品三级| 欧美成人一区二区三区片免费| 欧美一区二区三区四区五区| 91麻豆精品国产91久久久久 | 国产一区美女在线| 九一九一国产精品| 国产在线日韩欧美| 国产一区二区三区免费观看| 国产综合一区二区| 国产美女精品在线| 风间由美一区二区av101| 国产精品一区二区男女羞羞无遮挡| 美国毛片一区二区| 国模大尺度一区二区三区| 国产一区二区三区| 国产成人免费视频网站高清观看视频| 国产一区视频导航| 成人黄动漫网站免费app| a亚洲天堂av| 日本高清不卡一区| 欧美高清你懂得| 精品国产露脸精彩对白| 欧美国产一区视频在线观看| 亚洲欧洲99久久| 一区二区三区不卡视频在线观看 | 国产日韩欧美精品综合| 中文字幕免费一区| 依依成人综合视频| 喷白浆一区二区| 国内欧美视频一区二区| 成人av影视在线观看| 91麻豆产精品久久久久久| 欧美网站一区二区| 精品国产污网站| 免费在线看一区| 国产精品99久| 99re亚洲国产精品| 欧美日韩在线播放一区| 欧美不卡123| 亚洲视频免费在线观看| 日韩av不卡在线观看| 国产成人亚洲精品青草天美| 91免费观看视频| 欧美一区欧美二区| 国产精品久久久久久亚洲毛片| 亚洲最新视频在线观看| 久久国产婷婷国产香蕉|