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

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

?? korg1212.c

?? LINUX2.6.15的源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
	u32 RecDataPhy;	u32 PlayDataPhy;	unsigned long sharedBufferPhy;	u32 VolumeTablePhy;	u32 RoutingTablePhy;	u32 AdatTimeCodePhy;        u32 __iomem * statusRegPtr;	     // address of the interrupt status/control register        u32 __iomem * outDoorbellPtr;	     // address of the host->card doorbell register        u32 __iomem * inDoorbellPtr;	     // address of the card->host doorbell register        u32 __iomem * mailbox0Ptr;	     // address of mailbox 0 on the card        u32 __iomem * mailbox1Ptr;	     // address of mailbox 1 on the card        u32 __iomem * mailbox2Ptr;	     // address of mailbox 2 on the card        u32 __iomem * mailbox3Ptr;	     // address of mailbox 3 on the card        u32 __iomem * controlRegPtr;	     // address of the EEPROM, PCI, I/O, Init ctrl reg        u16 __iomem * sensRegPtr;	     // address of the sensitivity setting register        u32 __iomem * idRegPtr;		     // address of the device and vendor ID registers        size_t periodsize;	int channels;        int currentBuffer;        snd_pcm_substream_t *playback_substream;        snd_pcm_substream_t *capture_substream;	pid_t capture_pid;	pid_t playback_pid; 	CardState cardState;        int running;        int idleMonitorOn;           // indicates whether the card is in idle monitor mode.        u32 cmdRetryCount;           // tracks how many times we have retried sending to the card.        ClockSourceIndex clkSrcRate; // sample rate and clock source        ClockSourceType clkSource;   // clock source        int clkRate;                 // clock rate        int volumePhase[kAudioChannels];        u16 leftADCInSens;           // ADC left channel input sensitivity        u16 rightADCInSens;          // ADC right channel input sensitivity	int opencnt;		     // Open/Close count	int setcnt;		     // SetupForPlay count	int playcnt;		     // TriggerPlay count	int errorcnt;		     // Error Count	unsigned long totalerrorcnt; // Total Error Count	int dsp_is_loaded;	int dsp_stop_is_processed;};MODULE_DESCRIPTION("korg1212");MODULE_LICENSE("GPL");MODULE_SUPPORTED_DEVICE("{{KORG,korg1212}}");static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;     /* Index 0-MAX */static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	   /* ID for this card */static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE; /* Enable this card */module_param_array(index, int, NULL, 0444);MODULE_PARM_DESC(index, "Index value for Korg 1212 soundcard.");module_param_array(id, charp, NULL, 0444);MODULE_PARM_DESC(id, "ID string for Korg 1212 soundcard.");module_param_array(enable, bool, NULL, 0444);MODULE_PARM_DESC(enable, "Enable Korg 1212 soundcard.");MODULE_AUTHOR("Haroldo Gamal <gamal@alternex.com.br>");static struct pci_device_id snd_korg1212_ids[] = {	{		.vendor	   = 0x10b5,		.device	   = 0x906d,		.subvendor = PCI_ANY_ID,		.subdevice = PCI_ANY_ID,	},	{ 0, },};static char* stateName[] = {		        "Non-existent",                        "Uninitialized",                        "DSP download in process",                        "DSP download complete",                        "Ready",                        "Open",                        "Setup for play",                        "Playing",                        "Monitor mode on",			"Calibrating",                        "Invalid"};static char* clockSourceTypeName[] = { "ADAT", "S/PDIF", "local" };static char* clockSourceName[] = {                        "ADAT at 44.1 kHz",                        "ADAT at 48 kHz",                        "S/PDIF at 44.1 kHz",                        "S/PDIF at 48 kHz",                        "local clock at 44.1 kHz",                        "local clock at 48 kHz"};static char* channelName[] = {                        "ADAT-1",                        "ADAT-2",                        "ADAT-3",                        "ADAT-4",                        "ADAT-5",                        "ADAT-6",                        "ADAT-7",                        "ADAT-8",                        "Analog-L",                        "Analog-R",                        "SPDIF-L",                        "SPDIF-R",};static u16 ClockSourceSelector[] =                            {0x8000,   // selects source as ADAT at 44.1 kHz                             0x0000,   // selects source as ADAT at 48 kHz                             0x8001,   // selects source as S/PDIF at 44.1 kHz                             0x0001,   // selects source as S/PDIF at 48 kHz                             0x8002,   // selects source as local clock at 44.1 kHz                             0x0002    // selects source as local clock at 48 kHz                            };static snd_korg1212rc rc;MODULE_DEVICE_TABLE(pci, snd_korg1212_ids);typedef union swap_u32 { unsigned char c[4]; u32 i; } swap_u32;#ifdef SNDRV_BIG_ENDIANstatic u32 LowerWordSwap(u32 swappee)#elsestatic u32 UpperWordSwap(u32 swappee)#endif{   swap_u32 retVal, swapper;   swapper.i = swappee;   retVal.c[2] = swapper.c[3];   retVal.c[3] = swapper.c[2];   retVal.c[1] = swapper.c[1];   retVal.c[0] = swapper.c[0];   return retVal.i;}#ifdef SNDRV_BIG_ENDIANstatic u32 UpperWordSwap(u32 swappee)#elsestatic u32 LowerWordSwap(u32 swappee)#endif{   swap_u32 retVal, swapper;   swapper.i = swappee;   retVal.c[2] = swapper.c[2];   retVal.c[3] = swapper.c[3];   retVal.c[1] = swapper.c[0];   retVal.c[0] = swapper.c[1];   return retVal.i;}#if 0 /* not used */static u32 EndianSwap(u32 swappee){   swap_u32 retVal, swapper;   swapper.i = swappee;   retVal.c[0] = swapper.c[3];   retVal.c[1] = swapper.c[2];   retVal.c[2] = swapper.c[1];   retVal.c[3] = swapper.c[0];   return retVal.i;}#endif /* not used */#define SetBitInWord(theWord,bitPosition)       (*theWord) |= (0x0001 << bitPosition)#define SetBitInDWord(theWord,bitPosition)      (*theWord) |= (0x00000001 << bitPosition)#define ClearBitInWord(theWord,bitPosition)     (*theWord) &= ~(0x0001 << bitPosition)#define ClearBitInDWord(theWord,bitPosition)    (*theWord) &= ~(0x00000001 << bitPosition)static snd_korg1212rc snd_korg1212_Send1212Command(korg1212_t *korg1212, korg1212_dbcnst_t doorbellVal,                            u32 mailBox0Val, u32 mailBox1Val, u32 mailBox2Val, u32 mailBox3Val){        u32 retryCount;        u16 mailBox3Lo;	snd_korg1212rc rc = K1212_CMDRET_Success;        if (!korg1212->outDoorbellPtr) {#if K1212_DEBUG_LEVEL > 1		K1212_DEBUG_PRINTK("K1212_DEBUG: CardUninitialized\n");#endif                return K1212_CMDRET_CardUninitialized;	}#if K1212_DEBUG_LEVEL > 0	K1212_DEBUG_PRINTK("K1212_DEBUG: Card <- 0x%08x 0x%08x [%s]\n", doorbellVal, mailBox0Val, stateName[korg1212->cardState]);#endif        for (retryCount = 0; retryCount < MAX_COMMAND_RETRIES; retryCount++) {		writel(mailBox3Val, korg1212->mailbox3Ptr);                writel(mailBox2Val, korg1212->mailbox2Ptr);                writel(mailBox1Val, korg1212->mailbox1Ptr);                writel(mailBox0Val, korg1212->mailbox0Ptr);                writel(doorbellVal, korg1212->outDoorbellPtr);  // interrupt the card                // --------------------------------------------------------------                // the reboot command will not give an acknowledgement.                // --------------------------------------------------------------                if ( doorbellVal == K1212_DB_RebootCard ||                	doorbellVal == K1212_DB_BootFromDSPPage4 ||                        doorbellVal == K1212_DB_StartDSPDownload ) {                        rc = K1212_CMDRET_Success;                        break;                }                // --------------------------------------------------------------                // See if the card acknowledged the command.  Wait a bit, then                // read in the low word of mailbox3.  If the MSB is set and the                // low byte is equal to the doorbell value, then it ack'd.                // --------------------------------------------------------------                udelay(COMMAND_ACK_DELAY);                mailBox3Lo = readl(korg1212->mailbox3Ptr);                if (mailBox3Lo & COMMAND_ACK_MASK) {                	if ((mailBox3Lo & DOORBELL_VAL_MASK) == (doorbellVal & DOORBELL_VAL_MASK)) {#if K1212_DEBUG_LEVEL > 1				K1212_DEBUG_PRINTK("K1212_DEBUG: Card <- Success\n");#endif                                rc = K1212_CMDRET_Success;				break;                        }                }	}        korg1212->cmdRetryCount += retryCount;	if (retryCount >= MAX_COMMAND_RETRIES) {#if K1212_DEBUG_LEVEL > 1		K1212_DEBUG_PRINTK("K1212_DEBUG: Card <- NoAckFromCard\n");#endif        	rc = K1212_CMDRET_NoAckFromCard;	}	return rc;}/* spinlock already held */static void snd_korg1212_SendStop(korg1212_t *korg1212){	if (! korg1212->stop_pending_cnt) {		korg1212->sharedBufferPtr->cardCommand = 0xffffffff;		/* program the timer */		korg1212->stop_pending_cnt = HZ;		korg1212->timer.expires = jiffies + 1;		add_timer(&korg1212->timer);	}}static void snd_korg1212_SendStopAndWait(korg1212_t *korg1212){	unsigned long flags;	spin_lock_irqsave(&korg1212->lock, flags);	korg1212->dsp_stop_is_processed = 0;	snd_korg1212_SendStop(korg1212);	spin_unlock_irqrestore(&korg1212->lock, flags);	wait_event_timeout(korg1212->wait, korg1212->dsp_stop_is_processed, (HZ * 3) / 2);}/* timer callback for checking the ack of stop request */static void snd_korg1212_timer_func(unsigned long data){        korg1212_t *korg1212 = (korg1212_t *) data;		spin_lock(&korg1212->lock);	if (korg1212->sharedBufferPtr->cardCommand == 0) {		/* ack'ed */		korg1212->stop_pending_cnt = 0;		korg1212->dsp_stop_is_processed = 1;		wake_up(&korg1212->wait);#if K1212_DEBUG_LEVEL > 1		K1212_DEBUG_PRINTK("K1212_DEBUG: Stop ack'ed [%s]\n", stateName[korg1212->cardState]);#endif	} else {		if (--korg1212->stop_pending_cnt > 0) {			/* reprogram timer */			korg1212->timer.expires = jiffies + 1;			add_timer(&korg1212->timer);		} else {			snd_printd("korg1212_timer_func timeout\n");			korg1212->sharedBufferPtr->cardCommand = 0;			korg1212->dsp_stop_is_processed = 1;			wake_up(&korg1212->wait);#if K1212_DEBUG_LEVEL > 0			K1212_DEBUG_PRINTK("K1212_DEBUG: Stop timeout [%s]\n", stateName[korg1212->cardState]);#endif		}	}	spin_unlock(&korg1212->lock);}static void snd_korg1212_TurnOnIdleMonitor(korg1212_t *korg1212){	unsigned long flags;        udelay(INTERCOMMAND_DELAY);	spin_lock_irqsave(&korg1212->lock, flags);        korg1212->idleMonitorOn = 1;        rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SelectPlayMode,					  K1212_MODE_MonitorOn, 0, 0, 0);        spin_unlock_irqrestore(&korg1212->lock, flags);}static void snd_korg1212_TurnOffIdleMonitor(korg1212_t *korg1212){        if (korg1212->idleMonitorOn) {		snd_korg1212_SendStopAndWait(korg1212);                korg1212->idleMonitorOn = 0;        }}static inline void snd_korg1212_setCardState(korg1212_t * korg1212, CardState csState){        korg1212->cardState = csState;}static int snd_korg1212_OpenCard(korg1212_t * korg1212){#if K1212_DEBUG_LEVEL > 0	K1212_DEBUG_PRINTK("K1212_DEBUG: OpenCard [%s] %d\n", stateName[korg1212->cardState], korg1212->opencnt);#endif	down(&korg1212->open_mutex);        if (korg1212->opencnt++ == 0) {		snd_korg1212_TurnOffIdleMonitor(korg1212);		snd_korg1212_setCardState(korg1212, K1212_STATE_OPEN);	}	up(&korg1212->open_mutex);        return 1;}static int snd_korg1212_CloseCard(korg1212_t * korg1212){#if K1212_DEBUG_LEVEL > 0	K1212_DEBUG_PRINTK("K1212_DEBUG: CloseCard [%s] %d\n", stateName[korg1212->cardState], korg1212->opencnt);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
奇米精品一区二区三区在线观看 | 在线电影欧美成精品| 成人欧美一区二区三区白人| 国产精品白丝jk黑袜喷水| 精品国产精品网麻豆系列| 欧美亚洲高清一区| 一区二区三区在线高清| 在线中文字幕一区| 亚洲成a人v欧美综合天堂下载| 欧美午夜精品久久久久久孕妇 | 久久爱www久久做| 欧美xxx久久| 国产乱码字幕精品高清av| 国产亚洲综合av| 一本大道久久a久久精品综合| 一区二区三区中文免费| 欧美日韩三级在线| 国产综合久久久久久久久久久久| 国产日韩欧美在线一区| 成人激情黄色小说| 亚洲bdsm女犯bdsm网站| 精品国产青草久久久久福利| 国产成人精品午夜视频免费| 亚洲另类春色校园小说| 91精品国产一区二区三区蜜臀 | 久久久久久综合| 成人美女视频在线看| 一二三四区精品视频| 日韩午夜中文字幕| 成人禁用看黄a在线| 午夜精品影院在线观看| 久久在线免费观看| 色域天天综合网| 另类成人小视频在线| 中文字幕人成不卡一区| 欧美一区二区三区人| 成人av综合在线| 首页欧美精品中文字幕| 国产精品欧美久久久久一区二区| 欧美伊人久久久久久午夜久久久久| 麻豆精品视频在线观看免费| 国产精品高清亚洲| 日韩欧美成人午夜| 色琪琪一区二区三区亚洲区| 韩国精品在线观看| 亚洲444eee在线观看| 国产精品素人视频| 日韩午夜在线影院| 在线精品视频小说1| 国产高清在线精品| 日本美女一区二区| 一区二区三区欧美日| 国产视频一区二区在线| 欧美日韩卡一卡二| 粉嫩av一区二区三区在线播放| 午夜欧美2019年伦理| 中文字幕一区二区三区精华液| 91精品国产综合久久久蜜臀粉嫩| 不卡av电影在线播放| 黑人巨大精品欧美一区| 亚洲超碰精品一区二区| 亚洲日本护士毛茸茸| 久久久亚洲高清| 日韩欧美在线123| 欧美三级中文字幕在线观看| 99国产精品久久久久| 国产精品1024| 狠狠色丁香九九婷婷综合五月| 天堂久久一区二区三区| 亚洲一区二区美女| 亚洲欧美日韩国产综合在线 | 国产不卡免费视频| 久久99精品一区二区三区三区| 亚洲国产一二三| 亚洲欧美乱综合| 成人免费在线观看入口| 国产精品国产a| 国产精品久久久久久久久免费相片 | 视频一区二区国产| 亚洲福利一二三区| 亚洲风情在线资源站| 亚洲香肠在线观看| 亚洲福中文字幕伊人影院| 一区二区三区四区高清精品免费观看| 国产精品色一区二区三区| 国产精品丝袜一区| 亚洲欧洲av在线| 中文字幕日韩欧美一区二区三区| 国产精品午夜免费| 成人免费一区二区三区在线观看| 国产精品美日韩| ㊣最新国产の精品bt伙计久久| 国产精品久久久久aaaa| 亚洲视频 欧洲视频| 亚洲精品国产无套在线观| 一区二区三区四区在线播放| 亚洲国产一区在线观看| 日韩av中文在线观看| 久久精品72免费观看| 国产在线精品一区二区不卡了| 国产精品一卡二卡在线观看| 高清在线成人网| 97精品久久久午夜一区二区三区 | 精品嫩草影院久久| 国产调教视频一区| 亚洲美女免费视频| 无吗不卡中文字幕| 激情五月播播久久久精品| 丰满亚洲少妇av| 在线观看国产精品网站| 91精品国产综合久久香蕉的特点| 欧美一区2区视频在线观看| www久久精品| 自拍视频在线观看一区二区| 亚洲成国产人片在线观看| 免费视频一区二区| 成人午夜免费视频| 欧美日韩情趣电影| 亚洲精品在线免费观看视频| 中文字幕制服丝袜一区二区三区| 亚洲成人午夜电影| 国产精品亚洲一区二区三区妖精 | 97se亚洲国产综合自在线观| 在线播放91灌醉迷j高跟美女| 久久中文娱乐网| 一区二区三区视频在线观看| 日本亚洲电影天堂| 99久久精品免费| 欧美一区二区美女| 中文字幕日韩一区二区| 蜜臀久久99精品久久久画质超高清| 粉嫩av一区二区三区| 欧美美女一区二区| 中文字幕av一区二区三区免费看 | 欧美剧情片在线观看| 日本一区二区三区久久久久久久久不| 一区二区在线观看视频| 国产一区高清在线| 538prom精品视频线放| 亚洲欧洲国产日本综合| 极品少妇一区二区三区精品视频 | 国产在线播放一区| 欧美人狂配大交3d怪物一区| 国产欧美日韩视频一区二区| 日韩国产在线一| 91小视频在线观看| 国产人成亚洲第一网站在线播放| 亚洲v中文字幕| 91污在线观看| 欧美激情资源网| 国内精品久久久久影院一蜜桃| 欧美日韩一级片网站| 亚洲视频一二区| 成人国产亚洲欧美成人综合网| 欧美刺激脚交jootjob| 亚洲成人免费在线观看| 色呦呦国产精品| 国产精品毛片无遮挡高清| 激情综合一区二区三区| 91精品国产麻豆| 亚洲国产日韩综合久久精品| 91在线丨porny丨国产| 中文字幕不卡在线播放| 高清国产一区二区| 久久精品亚洲精品国产欧美| 久久99日本精品| 日韩欧美三级在线| 免费成人在线视频观看| 在线不卡a资源高清| 午夜精品久久一牛影视| 欧美视频三区在线播放| 夜色激情一区二区| 欧美影视一区二区三区| 亚洲综合清纯丝袜自拍| 欧美亚洲日本国产| 亚洲自拍偷拍综合| 国产精品久久久久久久第一福利| 国产一区二区电影| 久久久精品tv| 成人一区二区三区在线观看| 国产精品人妖ts系列视频| 不卡的电视剧免费网站有什么| 国产精品免费视频观看| 成人av手机在线观看| 亚洲日本一区二区| 欧美少妇性性性| 日本不卡在线视频| 2020国产精品自拍| 成人福利视频在线看| 亚洲精品日韩一| 欧美日韩久久一区| 免费欧美在线视频| 久久久亚洲精品石原莉奈| 成人激情开心网| 亚洲成在线观看| 欧美tickling挠脚心丨vk| 国产激情一区二区三区四区| 中文字幕在线一区二区三区| 在线欧美小视频| 裸体歌舞表演一区二区|