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

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

?? v_midi.c

?? linux和2410結(jié)合開發(fā) 用他可以生成2410所需的zImage文件
?? C
字號:
/* * sound/v_midi.c * * The low level driver for the Sound Blaster DS chips. * * * Copyright (C) by Hannu Savolainen 1993-1996 * * USS/Lite for Linux is distributed under the GNU GENERAL PUBLIC LICENSE (GPL) * Version 2 (June 1991). See the "COPYING" file distributed with this software * for more info. * ?? * * Changes *	Alan Cox		Modularisation, changed memory allocations *	Christoph Hellwig	Adapted to module_init/module_exit * * Status *	Untested */#include <linux/init.h>#include <linux/module.h>#include "sound_config.h"#include "v_midi.h"static vmidi_devc *v_devc[2] = { NULL, NULL};static int midi1,midi2;static void *midi_mem = NULL;/* * The DSP channel can be used either for input or output. Variable * 'sb_irq_mode' will be set when the program calls read or write first time * after open. Current version doesn't support mode changes without closing * and reopening the device. Support for this feature may be implemented in a * future version of this driver. */void            (*midi_input_intr) (int dev, unsigned char data);static int v_midi_open (int dev, int mode,	      void            (*input) (int dev, unsigned char data),	      void            (*output) (int dev)){	vmidi_devc *devc = midi_devs[dev]->devc;	unsigned long flags;	if (devc == NULL)		return -(ENXIO);	save_flags (flags);	cli();	if (devc->opened)	{		restore_flags (flags);		return -(EBUSY);	}	devc->opened = 1;	restore_flags (flags);	devc->intr_active = 1;	if (mode & OPEN_READ)	{		devc->input_opened = 1;		devc->midi_input_intr = input;	}	return 0;}static void v_midi_close (int dev){	vmidi_devc *devc = midi_devs[dev]->devc;	unsigned long flags;	if (devc == NULL)		return;	save_flags (flags);	cli ();	devc->intr_active = 0;	devc->input_opened = 0;	devc->opened = 0;	restore_flags (flags);}static int v_midi_out (int dev, unsigned char midi_byte){	vmidi_devc *devc = midi_devs[dev]->devc;	vmidi_devc *pdevc = midi_devs[devc->pair_mididev]->devc;	if (devc == NULL)		return -(ENXIO);	if (pdevc->input_opened > 0){		if (MIDIbuf_avail(pdevc->my_mididev) > 500)			return 0;		pdevc->midi_input_intr (pdevc->my_mididev, midi_byte);	}	return 1;}static inline int v_midi_start_read (int dev){	return 0;}static int v_midi_end_read (int dev){	vmidi_devc *devc = midi_devs[dev]->devc;	if (devc == NULL)		return -ENXIO;	devc->intr_active = 0;	return 0;}/* why -EPERM and not -EINVAL?? */static inline int v_midi_ioctl (int dev, unsigned cmd, caddr_t arg){	return -EPERM;}#define MIDI_SYNTH_NAME	"Loopback MIDI"#define MIDI_SYNTH_CAPS	SYNTH_CAP_INPUT#include "midi_synth.h"static struct midi_operations v_midi_operations ={	owner:		THIS_MODULE,	info:		{"Loopback MIDI Port 1", 0, 0, SNDCARD_VMIDI},	converter:	&std_midi_synth,	in_info:	{0},	open:		v_midi_open,	close:		v_midi_close,	ioctl:		v_midi_ioctl,	outputc:	v_midi_out,	start_read:	v_midi_start_read,	end_read:	v_midi_end_read,};static struct midi_operations v_midi_operations2 ={	owner:		THIS_MODULE,	info:		{"Loopback MIDI Port 2", 0, 0, SNDCARD_VMIDI},	converter:	&std_midi_synth,	in_info:	{0},	open:		v_midi_open,	close:		v_midi_close,	ioctl:		v_midi_ioctl,	outputc:	v_midi_out,	start_read:	v_midi_start_read,	end_read:	v_midi_end_read,};/* *	We kmalloc just one of these - it makes life simpler and the code *	cleaner and the memory handling far more efficient */ struct vmidi_memory{	/* Must be first */	struct midi_operations m_ops[2];	struct synth_operations s_ops[2];	struct vmidi_devc v_ops[2];};static void __init attach_v_midi (struct address_info *hw_config){	struct vmidi_memory *m;	/* printk("Attaching v_midi device.....\n"); */	midi1 = sound_alloc_mididev();	if (midi1 == -1)	{		printk(KERN_ERR "v_midi: Too many midi devices detected\n");		return;	}		m=(struct vmidi_memory *)kmalloc(sizeof(struct vmidi_memory), GFP_KERNEL);	if (m == NULL)	{		printk(KERN_WARNING "Loopback MIDI: Failed to allocate memory\n");		sound_unload_mididev(midi1);		return;	}		midi_mem = m;		midi_devs[midi1] = &m->m_ops[0];		midi2 = sound_alloc_mididev();	if (midi2 == -1)	{		printk (KERN_ERR "v_midi: Too many midi devices detected\n");		kfree(m);		sound_unload_mididev(midi1);		return;	}	midi_devs[midi2] = &m->m_ops[1];	/* printk("VMIDI1: %d   VMIDI2: %d\n",midi1,midi2); */	/* for MIDI-1 */	v_devc[0] = &m->v_ops[0];	memcpy ((char *) midi_devs[midi1], (char *) &v_midi_operations,		sizeof (struct midi_operations));	v_devc[0]->my_mididev = midi1;	v_devc[0]->pair_mididev = midi2;	v_devc[0]->opened = v_devc[0]->input_opened = 0;	v_devc[0]->intr_active = 0;	v_devc[0]->midi_input_intr = NULL;	midi_devs[midi1]->devc = v_devc[0];	midi_devs[midi1]->converter = &m->s_ops[0];	std_midi_synth.midi_dev = midi1;	memcpy ((char *) midi_devs[midi1]->converter, (char *) &std_midi_synth,		sizeof (struct synth_operations));	midi_devs[midi1]->converter->id = "V_MIDI 1";	/* for MIDI-2 */	v_devc[1] = &m->v_ops[1];	memcpy ((char *) midi_devs[midi2], (char *) &v_midi_operations2,		sizeof (struct midi_operations));	v_devc[1]->my_mididev = midi2;	v_devc[1]->pair_mididev = midi1;	v_devc[1]->opened = v_devc[1]->input_opened = 0;	v_devc[1]->intr_active = 0;	v_devc[1]->midi_input_intr = NULL;	midi_devs[midi2]->devc = v_devc[1];	midi_devs[midi2]->converter = &m->s_ops[1];	std_midi_synth.midi_dev = midi2;	memcpy ((char *) midi_devs[midi2]->converter, (char *) &std_midi_synth,		sizeof (struct synth_operations));	midi_devs[midi2]->converter->id = "V_MIDI 2";	sequencer_init();	/* printk("Attached v_midi device\n"); */}static inline int __init probe_v_midi(struct address_info *hw_config){	return(1);	/* always OK */}static void __exit unload_v_midi(struct address_info *hw_config){	sound_unload_mididev(midi1);	sound_unload_mididev(midi2);	kfree(midi_mem);}static struct address_info cfg; /* dummy */static int __init init_vmidi(void){	printk("MIDI Loopback device driver\n");	if (!probe_v_midi(&cfg))		return -ENODEV;	attach_v_midi(&cfg);	return 0;}static void __exit cleanup_vmidi(void){	unload_v_midi(&cfg);}module_init(init_vmidi);module_exit(cleanup_vmidi);MODULE_LICENSE("GPL");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91偷拍与自偷拍精品| 日韩精品成人一区二区三区| 成人免费视频视频| 国产精品久久久久aaaa樱花| 91亚洲男人天堂| 亚洲国产视频一区| 91精品国产乱码| 国产在线精品国自产拍免费| 精品国产91九色蝌蚪| 欧美成人三级在线| 国产99久久久久久免费看农村| 国产精品久久久久久久久免费桃花 | 色欧美日韩亚洲| 亚洲一区精品在线| 精品国产一区二区三区av性色| 国产黄色精品网站| 亚洲香肠在线观看| 精品国产乱码久久久久久久| 成人va在线观看| 日本在线观看不卡视频| 久久精品一区二区三区四区| 91丨porny丨首页| 日韩中文字幕区一区有砖一区| 精品久久一区二区| 91蜜桃网址入口| 久久99久久久欧美国产| 亚洲视频一区二区在线| 精品粉嫩aⅴ一区二区三区四区| 成人av在线播放网址| 日韩精品电影一区亚洲| 国产精品久久久久久亚洲毛片| 在线电影国产精品| 成人天堂资源www在线| 日韩中文字幕亚洲一区二区va在线| 久久久久99精品国产片| 欧美综合欧美视频| 成人午夜视频福利| 精品一区二区三区在线观看| 亚洲乱码精品一二三四区日韩在线| 精品电影一区二区| 欧美日韩高清一区二区三区| 成人爽a毛片一区二区免费| 日本欧美在线观看| 亚洲黄色录像片| 国产精品视频一二三| 精品欧美一区二区久久| 欧美在线你懂的| 93久久精品日日躁夜夜躁欧美| 久久99精品久久久久久| 日韩极品在线观看| 一区二区三区在线观看视频| 国产精品天美传媒沈樵| 91精品免费在线观看| 欧洲国内综合视频| 色综合天天综合狠狠| 国产成人丝袜美腿| 久久97超碰色| 日本免费新一区视频| 香蕉久久一区二区不卡无毒影院| 亚洲欧美二区三区| 亚洲天堂免费看| 国产精品久久久爽爽爽麻豆色哟哟 | 免费在线观看视频一区| 亚洲精品亚洲人成人网在线播放| 国产精品久久久久久亚洲毛片 | 色婷婷精品大视频在线蜜桃视频| 国产精品一级二级三级| 欧美视频一区二区三区四区| 色婷婷综合久久久久中文| av在线不卡电影| 成人午夜看片网址| 成人免费高清在线| bt7086福利一区国产| 国产99久久久精品| 国产麻豆午夜三级精品| 国产又粗又猛又爽又黄91精品| 久久69国产一区二区蜜臀| 久久综合综合久久综合| 美国十次综合导航| 国产精品一品二品| aaa欧美色吧激情视频| 99麻豆久久久国产精品免费优播| 成人精品免费视频| 色又黄又爽网站www久久| 色婷婷亚洲婷婷| 日本高清不卡视频| 欧美日韩美少妇| 日韩一区二区三| 国产婷婷色一区二区三区四区| 国产校园另类小说区| 最好看的中文字幕久久| 亚洲最新视频在线播放| 天天影视网天天综合色在线播放| 亚洲3atv精品一区二区三区| 日本成人在线电影网| 国产乱对白刺激视频不卡| 国产91精品一区二区| 91丝袜国产在线播放| 欧美午夜宅男影院| 欧美刺激午夜性久久久久久久| 久久久无码精品亚洲日韩按摩| 国产精品久久一卡二卡| 亚洲一区二区精品久久av| 久久国产精品色婷婷| 成人a免费在线看| 欧美男同性恋视频网站| 国产亚洲精品资源在线26u| 亚洲精品中文字幕乱码三区| 奇米精品一区二区三区四区 | 国产精品素人一区二区| 亚洲一区二区三区四区在线| 日韩国产精品91| 国产黑丝在线一区二区三区| 中文字幕欧美一| 亚洲午夜国产一区99re久久| 久久草av在线| 色综合天天综合色综合av| 欧美一级久久久| 国产精品乱码人人做人人爱| 婷婷夜色潮精品综合在线| 国产美女娇喘av呻吟久久| 欧美亚洲国产一区二区三区| 久久噜噜亚洲综合| 亚洲成人免费av| 成人综合婷婷国产精品久久蜜臀| 欧美男男青年gay1069videost| 中文字幕 久热精品 视频在线| 日欧美一区二区| av在线一区二区三区| 精品成人a区在线观看| 亚洲精品水蜜桃| 国产高清在线精品| 日韩三级视频在线观看| 亚洲免费观看高清完整版在线观看熊 | 99精品视频在线观看免费| 666欧美在线视频| 亚洲免费观看高清完整版在线观看熊| 884aa四虎影成人精品一区| 亚洲欧洲日本在线| 国产在线精品一区二区夜色| 欧美在线你懂的| 椎名由奈av一区二区三区| 国产精品亚洲一区二区三区妖精| 欧美精品精品一区| 亚洲一卡二卡三卡四卡五卡| 成人网男人的天堂| 久久免费电影网| 精品在线亚洲视频| 在线不卡的av| 日韩在线观看一区二区| 一本到一区二区三区| 日本一区二区三区dvd视频在线| 久久激情五月婷婷| 精品少妇一区二区三区在线视频| 亚洲成人av资源| 欧美专区在线观看一区| 亚洲蜜桃精久久久久久久| 99久久综合精品| 中文字幕免费观看一区| 国产成人h网站| 国产亚洲欧美激情| 国产乱码精品一区二区三 | 成人在线视频一区二区| 久久久噜噜噜久噜久久综合| 国产一区三区三区| 久久久精品2019中文字幕之3| 激情小说欧美图片| 久久久综合视频| 国产成人精品网址| 国产女人18水真多18精品一级做 | 亚洲精品高清在线| 色中色一区二区| 亚洲综合免费观看高清完整版 | 欧美日韩一区中文字幕| 亚洲午夜影视影院在线观看| 欧美视频一二三区| 三级在线观看一区二区| 日韩欧美国产精品一区| 国产一区二区在线观看视频| 久久久久久一级片| 91在线一区二区三区| 亚洲综合免费观看高清在线观看| 欧美亚日韩国产aⅴ精品中极品| 亚洲aaa精品| 精品福利av导航| 成人福利电影精品一区二区在线观看| 亚洲人成影院在线观看| 在线免费观看日本欧美| 美女mm1313爽爽久久久蜜臀| 国产欧美视频一区二区| 91女人视频在线观看| 香蕉久久一区二区不卡无毒影院| 欧美刺激午夜性久久久久久久| 国产不卡在线视频| 亚洲乱码国产乱码精品精98午夜 | 色综合久久99| 日本不卡1234视频| 国产精品久久看| 7777精品伊人久久久大香线蕉| 国产一区二区在线视频|