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

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

?? seq_oss_readq.c

?? 優龍2410linux2.6.8內核源代碼
?? C
字號:
/* * OSS compatible sequencer driver * * seq_oss_readq.c - MIDI input queue * * Copyright (C) 1998,99 Takashi Iwai <tiwai@suse.de> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA */#include "seq_oss_readq.h"#include "seq_oss_event.h"#include <sound/seq_oss_legacy.h>#include "../seq_lock.h"/* * constants *///#define SNDRV_SEQ_OSS_MAX_TIMEOUT	(unsigned long)(-1)#define SNDRV_SEQ_OSS_MAX_TIMEOUT	(HZ * 3600)/* * prototypes *//* * create a read queue */seq_oss_readq_t *snd_seq_oss_readq_new(seq_oss_devinfo_t *dp, int maxlen){	seq_oss_readq_t *q;	if ((q = snd_kcalloc(sizeof(*q), GFP_KERNEL)) == NULL) {		snd_printk(KERN_ERR "can't malloc read queue\n");		return NULL;	}	if ((q->q = snd_kcalloc(sizeof(evrec_t) * maxlen, GFP_KERNEL)) == NULL) {		snd_printk(KERN_ERR "can't malloc read queue buffer\n");		kfree(q);		return NULL;	}	q->maxlen = maxlen;	q->qlen = 0;	q->head = q->tail = 0;	init_waitqueue_head(&q->midi_sleep);	spin_lock_init(&q->lock);	q->pre_event_timeout = SNDRV_SEQ_OSS_MAX_TIMEOUT;	q->input_time = (unsigned long)-1;	return q;}/* * delete the read queue */voidsnd_seq_oss_readq_delete(seq_oss_readq_t *q){	if (q) {		snd_seq_oss_readq_clear(q);	/* to be sure */		if (q->q)			kfree(q->q);		kfree(q);	}}/* * reset the read queue */voidsnd_seq_oss_readq_clear(seq_oss_readq_t *q){	if (q->qlen) {		q->qlen = 0;		q->head = q->tail = 0;	}	/* if someone sleeping, wake'em up */	if (waitqueue_active(&q->midi_sleep))		wake_up(&q->midi_sleep);	q->input_time = (unsigned long)-1;}/* * put a midi byte */intsnd_seq_oss_readq_puts(seq_oss_readq_t *q, int dev, unsigned char *data, int len){	evrec_t rec;	int result;	rec.c[0] = SEQ_MIDIPUTC;	rec.c[2] = dev;	rec.c[3] = 0;	while (len-- > 0) {		rec.c[1] = *data++;		result = snd_seq_oss_readq_put_event(q, &rec);		if (result < 0)			return result;	}	return 0;}/* * copy an event to input queue: * return zero if enqueued */intsnd_seq_oss_readq_put_event(seq_oss_readq_t *q, evrec_t *ev){	unsigned long flags;	spin_lock_irqsave(&q->lock, flags);	if (q->qlen >= q->maxlen - 1) {		spin_unlock_irqrestore(&q->lock, flags);		return -ENOMEM;	}	memcpy(&q->q[q->tail], ev, ev_length(ev));	q->tail = (q->tail + 1) % q->maxlen;	q->qlen++;	/* wake up sleeper */	if (waitqueue_active(&q->midi_sleep))		wake_up(&q->midi_sleep);	spin_unlock_irqrestore(&q->lock, flags);	return 0;}/* * pop queue */evrec_t *snd_seq_oss_readq_pick(seq_oss_readq_t *q, int blocking, unsigned long *rflags){	evrec_t *p;	spin_lock_irqsave(&q->lock, *rflags);	if (q->qlen == 0) {		if (blocking) {			spin_unlock(&q->lock);			interruptible_sleep_on_timeout(&q->midi_sleep,						       q->pre_event_timeout);			spin_lock(&q->lock);		}		if (q->qlen == 0) {			spin_unlock_irqrestore(&q->lock, *rflags);			return NULL;		}	}	p = q->q + q->head;	return p;}/* * unlock queue */voidsnd_seq_oss_readq_unlock(seq_oss_readq_t *q, unsigned long flags){	spin_unlock_irqrestore(&q->lock, flags);}/* * drain one record and unlock queue */voidsnd_seq_oss_readq_free(seq_oss_readq_t *q, unsigned long flags){	if (q->qlen > 0) {		q->head = (q->head + 1) % q->maxlen;		q->qlen--;	}	spin_unlock_irqrestore(&q->lock, flags);}/* * polling/select: * return non-zero if readq is not empty. */unsigned intsnd_seq_oss_readq_poll(seq_oss_readq_t *q, struct file *file, poll_table *wait){	poll_wait(file, &q->midi_sleep, wait);	return q->qlen;}/* * put a timestamp */intsnd_seq_oss_readq_put_timestamp(seq_oss_readq_t *q, unsigned long curt, int seq_mode){	if (curt != q->input_time) {		evrec_t rec;		switch (seq_mode) {		case SNDRV_SEQ_OSS_MODE_SYNTH:			rec.echo = (curt << 8) | SEQ_WAIT;			snd_seq_oss_readq_put_event(q, &rec);			break;		case SNDRV_SEQ_OSS_MODE_MUSIC:			rec.t.code = EV_TIMING;			rec.t.cmd = TMR_WAIT_ABS;			rec.t.time = curt;			snd_seq_oss_readq_put_event(q, &rec);			break;		}		q->input_time = curt;	}	return 0;}/* * proc interface */voidsnd_seq_oss_readq_info_read(seq_oss_readq_t *q, snd_info_buffer_t *buf){	snd_iprintf(buf, "  read queue [%s] length = %d : tick = %ld\n",		    (waitqueue_active(&q->midi_sleep) ? "sleeping":"running"),		    q->qlen, q->input_time);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天堂资源在线中文精品| 一区二区日韩电影| 欧美男同性恋视频网站| 97超碰欧美中文字幕| 成人妖精视频yjsp地址| 国产精品18久久久| 成人动漫av在线| 99热精品国产| 97se狠狠狠综合亚洲狠狠| 色婷婷国产精品久久包臀| 在线亚洲一区观看| 欧美日韩中文字幕精品| 欧美日韩国产电影| 日韩美女一区二区三区四区| 精品国产乱码久久久久久蜜臀| 久久久久久**毛片大全| 国产精品国产三级国产有无不卡 | 亚洲色欲色欲www| 亚洲激情自拍视频| 日韩不卡一区二区三区| 蜜桃久久av一区| 成人av电影在线观看| 色综合一区二区三区| 欧美日韩亚洲综合在线| 欧美一区二区三区人| 久久综合久久综合久久综合| 国产欧美综合在线| 亚洲自拍都市欧美小说| 久久99久久久久久久久久久| 高清免费成人av| 欧美色网站导航| 日韩欧美视频一区| 亚洲欧洲日韩av| 婷婷开心激情综合| 国产成人三级在线观看| 欧美网站一区二区| 久久久久国产一区二区三区四区| 日韩欧美一二三四区| 亚洲欧美日韩在线不卡| 久久精品噜噜噜成人av农村| 91麻豆蜜桃一区二区三区| 91精品欧美一区二区三区综合在| 国产欧美日韩综合精品一区二区 | 香蕉久久夜色精品国产使用方法| 精品亚洲国内自在自线福利| 91在线看国产| 国产亚洲午夜高清国产拍精品| 亚洲在线中文字幕| 风间由美一区二区三区在线观看 | 成人免费视频国产在线观看| 5月丁香婷婷综合| 一级女性全黄久久生活片免费| 激情图区综合网| 欧美一区二区三区啪啪| 亚洲激情图片小说视频| 国产成人精品一区二区三区网站观看| 欧美视频一区在线| 国产精品妹子av| 国产一区二区h| 欧美成人在线直播| 日本亚洲天堂网| 51久久夜色精品国产麻豆| 一区二区三区在线观看欧美| 99久久免费视频.com| 国产欧美中文在线| 国产成人在线网站| 久久久99精品久久| 久久66热偷产精品| 日韩视频一区二区三区| 樱桃视频在线观看一区| 9人人澡人人爽人人精品| 久久久国产精品不卡| 国产精品主播直播| 欧美不卡一区二区三区| 奇米精品一区二区三区四区| 在线电影院国产精品| 亚洲成人综合在线| 欧美一区二区三区性视频| 亚洲国产一区二区视频| 欧美日产在线观看| 日本中文字幕一区二区视频| 日韩一区二区三区三四区视频在线观看| 五月天久久比比资源色| 欧美一区二区三区四区在线观看| 午夜影视日本亚洲欧洲精品| 欧美人牲a欧美精品| 美女一区二区久久| 国产丝袜欧美中文另类| 亚洲天堂久久久久久久| 国产成人精品亚洲午夜麻豆| 久久先锋影音av鲁色资源网| 国产福利一区二区三区视频在线| 欧美精品一区二区三区很污很色的| 欧美一区二区三区四区视频| 精品影视av免费| 亚洲gay无套男同| 亚洲精品一二三| 日韩一区日韩二区| 国产精品人成在线观看免费| 精品国产乱码久久| 555www色欧美视频| 56国语精品自产拍在线观看| 欧美最猛黑人xxxxx猛交| 风间由美一区二区三区在线观看 | 久久精品国产成人一区二区三区 | 欧美一区二区三区色| 欧美丝袜丝交足nylons| av在线播放成人| 成人a免费在线看| 成人丝袜高跟foot| 成人动漫av在线| www.性欧美| 91丨porny丨户外露出| 97久久超碰国产精品| av电影在线观看完整版一区二区| 成人性生交大片免费看视频在线 | 亚洲一线二线三线视频| 亚洲美女免费在线| 亚洲精品美腿丝袜| 亚洲一二三四在线| 亚洲国产精品一区二区久久恐怖片| 亚洲图片你懂的| 亚洲精品videosex极品| 亚洲高清一区二区三区| 日韩精品91亚洲二区在线观看| 日本伊人精品一区二区三区观看方式| 天天操天天色综合| 极品少妇xxxx精品少妇| 国产在线不卡视频| 高清不卡一区二区| av亚洲精华国产精华精华| 色综合激情五月| 欧美丰满一区二区免费视频 | 欧美色综合久久| 日韩欧美中文字幕精品| 久久一二三国产| 中文字幕日韩欧美一区二区三区| 综合在线观看色| 午夜视频在线观看一区二区| 老司机免费视频一区二区三区| 精品亚洲porn| 成人av免费在线观看| 日本电影欧美片| 日韩欧美123| 中文字幕视频一区| 秋霞午夜鲁丝一区二区老狼| 国产精品亚洲午夜一区二区三区| 99精品一区二区三区| 在线观看91精品国产麻豆| 久久久久久久久久久电影| 亚洲欧美激情插| 久草热8精品视频在线观看| 成人高清视频在线观看| 69久久99精品久久久久婷婷| 国产精品女同一区二区三区| 亚洲第一激情av| 国产.精品.日韩.另类.中文.在线.播放| 色婷婷综合视频在线观看| 51久久夜色精品国产麻豆| 国产女人18毛片水真多成人如厕| 亚洲一级二级在线| 丰满少妇在线播放bd日韩电影| 在线观看国产一区二区| 国产人妖乱国产精品人妖| 亚洲午夜激情av| 成人免费视频视频在线观看免费| 制服丝袜亚洲精品中文字幕| 国产精品电影院| 久久av中文字幕片| 欧美系列一区二区| 国产精品久久免费看| 蜜桃视频在线观看一区| 欧美日韩久久久久久| 中文字幕一区日韩精品欧美| 激情综合网激情| 欧美福利电影网| 一区二区三区成人在线视频| 懂色av一区二区三区免费观看| 678五月天丁香亚洲综合网| 亚洲品质自拍视频| 国产成人免费高清| 久久婷婷成人综合色| 蓝色福利精品导航| 欧美理论电影在线| 婷婷开心久久网| 欧美日韩国产不卡| 亚洲一区二区三区国产| 99re成人精品视频| 国产精品电影院| 91麻豆国产自产在线观看| 中文在线一区二区| 成人av午夜影院| 中文字幕五月欧美| 99re这里只有精品首页| 国产欧美日韩在线看| 国产福利精品导航| 国产精品三级视频| 成人h动漫精品一区二区| 亚洲欧洲一区二区在线播放| 成人av在线影院|