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

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

?? mixer.c

?? 講述linux的初始化過程
?? C
?? 第 1 頁 / 共 3 頁
字號:
			case CMD_READPTR:				if(ctl.val[1] >= 0x40)					return -EINVAL;				if((ctl.val[0] & 0x7ff) > 0xff)					return -EINVAL;				if((ctl.val[0] & 0x7ff) > 0x3f)					ctl.val[1] = 0x00;				ctl.val[2] = sblive_readptr(card, ctl.val[0], ctl.val[1]);				if (copy_to_user((void *) arg, &ctl, sizeof(struct mixer_private_ioctl)))					return -EFAULT;				return 0;				break;			case CMD_SETRECSRC:				switch(ctl.val[0]){				case WAVERECORD_AC97:					if(card->isaps)						return -EINVAL;					card->wavein.recsrc = WAVERECORD_AC97;					break;				case WAVERECORD_MIC:						card->wavein.recsrc = WAVERECORD_MIC;					break;				case WAVERECORD_FX:					card->wavein.recsrc = WAVERECORD_FX;					card->wavein.fxwc = ctl.val[1] & 0xffff;					if(!card->wavein.fxwc)						return -EINVAL;					break;				default:					return -EINVAL;				}				return 0;				break;			case CMD_GETRECSRC:				ctl.val[0] = card->wavein.recsrc;				ctl.val[1] = card->wavein.fxwc;				if (copy_to_user((void *) arg, &ctl, sizeof(struct mixer_private_ioctl)))					return -EFAULT;				return 0;				break;			case CMD_GETVOICEPARAM:				ctl.val[0] = card->waveout.send_routing[0];				ctl.val[1] = card->waveout.send_a[0] | card->waveout.send_b[0] << 8 |				             card->waveout.send_c[0] << 16 | card->waveout.send_d[0] << 24;				ctl.val[2] = card->waveout.send_routing[1]; 				ctl.val[3] = card->waveout.send_a[1] | card->waveout.send_b[1] << 8 |					     card->waveout.send_c[1] << 16 | card->waveout.send_d[1] << 24;				ctl.val[4] = card->waveout.send_routing[2]; 				ctl.val[5] = card->waveout.send_a[2] | card->waveout.send_b[2] << 8 |					     card->waveout.send_c[2] << 16 | card->waveout.send_d[2] << 24;				if (copy_to_user((void *) arg, &ctl, sizeof(struct mixer_private_ioctl)))					return -EFAULT;				return 0;				break;			case CMD_SETVOICEPARAM:				card->waveout.send_routing[0] = ctl.val[0] & 0xffff;				card->waveout.send_a[0] = ctl.val[1] & 0xff;				card->waveout.send_b[0] = (ctl.val[1] >> 8) & 0xff;				card->waveout.send_c[0] = (ctl.val[1] >> 16) & 0xff;				card->waveout.send_d[0] = (ctl.val[1] >> 24) & 0xff;				card->waveout.send_routing[1] = ctl.val[2] & 0xffff;				card->waveout.send_a[1] = ctl.val[3] & 0xff;				card->waveout.send_b[1] = (ctl.val[3] >> 8) & 0xff;				card->waveout.send_c[1] = (ctl.val[3] >> 16) & 0xff;				card->waveout.send_d[1] = (ctl.val[3] >> 24) & 0xff;				card->waveout.send_routing[2] = ctl.val[4] & 0xffff;				card->waveout.send_a[2] = ctl.val[5] & 0xff;				card->waveout.send_b[2] = (ctl.val[5] >> 8) & 0xff;				card->waveout.send_c[2] = (ctl.val[5] >> 16) & 0xff;				card->waveout.send_d[2] = (ctl.val[5] >> 24) & 0xff;				return 0;				break;			default:				return -EINVAL;				break;			}		}		break;	case SOUND_MIXER_PRIVATE4:{			u32 size;			int size_reg = 0;			if (copy_from_user(&size, (void *) arg, sizeof(size)))				return -EFAULT;			DPD(2,"External tram size 0x%x\n", size);			if(size > 0x1fffff)				return -EINVAL;			if (size != 0) {					size = (size - 1) >> 14;        	                while (size) {                	                size >>= 1;                        	        size_reg++;                        	}                        	size = 0x4000 << size_reg;			}			DPD(2,"External tram size 0x%x 0x%x\n", size, size_reg);			if (size != card->tankmem.size) {				if (card->tankmem.size > 0) {					emu10k1_writefn0(card, HCFG_LOCKTANKCACHE, 1);					sblive_writeptr_tag(card, 0, TCB, 0,							    TCBS, 0,							    TAGLIST_END);					pci_free_consistent(card->pci_dev, card->tankmem.size,							    card->tankmem.addr, card->tankmem.dma_handle);					card->tankmem.size = 0;				}				if (size != 0) {					if ((card->tankmem.addr = pci_alloc_consistent(card->pci_dev, size,					     &card->tankmem.dma_handle)) == NULL)						return -ENOMEM;					card->tankmem.size = size;					sblive_writeptr_tag(card, 0, TCB, card->tankmem.dma_handle,                        	                            TCBS, size_reg,                                	                    TAGLIST_END);					emu10k1_writefn0(card, HCFG_LOCKTANKCACHE, 0);				}			}			return 0;		}		break;	default:		break;	}	if (_IOC_TYPE(cmd) != 'M' || _IOC_SIZE(cmd) != sizeof(int))		return -EINVAL;	if (_IOC_DIR(cmd) == _IOC_READ) {		switch (_IOC_NR(cmd)) {			case SOUND_MIXER_DEVMASK:       /* Arg contains a bit for each supported device */                        DPF(4, "SOUND_MIXER_READ_DEVMASK\n");			if (card->isaps)#ifdef TONE_CONTROL				return put_user(SOUND_MASK_PCM | SOUND_MASK_VOLUME |						SOUND_MASK_BASS | SOUND_MASK_TREBLE,						(int *) arg); #else				return put_user(SOUND_MASK_PCM | SOUND_MASK_VOLUME,						(int *) arg); #endif		#ifdef TONE_CONTROL			return put_user(SOUND_MASK_LINE | SOUND_MASK_CD |                                        SOUND_MASK_OGAIN | SOUND_MASK_LINE1 |                                        SOUND_MASK_PCM | SOUND_MASK_VOLUME |                                        SOUND_MASK_PHONEIN | SOUND_MASK_MIC |                                        SOUND_MASK_BASS | SOUND_MASK_TREBLE |                                        SOUND_MASK_RECLEV | SOUND_MASK_SPEAKER |                                        SOUND_MASK_LINE3 | SOUND_MASK_DIGITAL1 |                                         SOUND_MASK_DIGITAL2 | SOUND_MASK_LINE2, (int *) arg);#else			return put_user(SOUND_MASK_LINE | SOUND_MASK_CD |                                        SOUND_MASK_OGAIN | SOUND_MASK_LINE1 |                                        SOUND_MASK_PCM | SOUND_MASK_VOLUME |                                        SOUND_MASK_PHONEIN | SOUND_MASK_MIC |                                        SOUND_MASK_RECLEV | SOUND_MASK_SPEAKER |                                        SOUND_MASK_LINE3 | SOUND_MASK_DIGITAL1 |                                         SOUND_MASK_DIGITAL2 | SOUND_MASK_LINE2, (int *) arg);#endif			case SOUND_MIXER_RECMASK:       /* Arg contains a bit for each supported recording source */				DPF(2, "SOUND_MIXER_READ_RECMASK\n");				if (card->isaps)					return put_user(0, (int *) arg);				return put_user(SOUND_MASK_MIC | SOUND_MASK_CD |					SOUND_MASK_LINE1 | SOUND_MASK_LINE |					SOUND_MASK_VOLUME | SOUND_MASK_OGAIN |					SOUND_MASK_PHONEIN, (int *) arg);			case SOUND_MIXER_STEREODEVS:    /* Mixer channels supporting stereo */				DPF(2, "SOUND_MIXER_READ_STEREODEVS\n");				if (card->isaps)#ifdef TONE_CONTROL					return put_user(SOUND_MASK_PCM | SOUND_MASK_VOLUME |                                        		SOUND_MASK_BASS | SOUND_MASK_TREBLE,                                        		(int *) arg);#else					return put_user(SOUND_MASK_PCM | SOUND_MASK_VOLUME,                                         		(int *) arg);#endif#ifdef TONE_CONTROL				return put_user(SOUND_MASK_LINE | SOUND_MASK_CD |					SOUND_MASK_OGAIN | SOUND_MASK_LINE1 |					SOUND_MASK_PCM | SOUND_MASK_VOLUME |					SOUND_MASK_BASS | SOUND_MASK_TREBLE |					SOUND_MASK_RECLEV | SOUND_MASK_LINE3 |					SOUND_MASK_DIGITAL1 | SOUND_MASK_DIGITAL2 |					SOUND_MASK_LINE2, (int *) arg);#else				return put_user(SOUND_MASK_LINE | SOUND_MASK_CD |					SOUND_MASK_OGAIN | SOUND_MASK_LINE1 |					SOUND_MASK_PCM | SOUND_MASK_VOLUME |					SOUND_MASK_RECLEV | SOUND_MASK_LINE3 |					SOUND_MASK_DIGITAL1 | SOUND_MASK_DIGITAL2 |					SOUND_MASK_LINE2, (int *) arg);#endif			case SOUND_MIXER_CAPS:				DPF(2, "SOUND_MIXER_READ_CAPS\n");				return put_user(SOUND_CAP_EXCL_INPUT, (int *) arg);#ifdef PRIVATE_PCM_VOLUME                case SOUND_MIXER_PCM:                        /* needs to be before default: !!*/                        {                                int i;                                for (i = 0; i < MAX_PCM_CHANNELS; i++) {                                        if (sblive_pcm_volume[i].files == current->files) {                                                return put_user((int) sblive_pcm_volume[i].mixer, (int *) arg);                                        }                                }                        }#endif		default:			break;		}		switch (_IOC_NR(cmd)) {		case SOUND_MIXER_RECSRC:	/* Arg contains a bit for each recording source */			DPF(2, "SOUND_MIXER_READ_RECSRC\n");			if (card->isaps)				return put_user(0, (int *) arg);			sblive_readac97(card, AC97_RECORDSELECT, &reg);			return put_user(recsrc[reg & 7], (int *) arg);		default:			i = _IOC_NR(cmd);			DPD(4, "SOUND_MIXER_READ(%d)\n", i);			if (i >= SOUND_MIXER_NRDEVICES)				return -EINVAL;#ifdef OSS_DOCUMENTED_MIXER_SEMANTICS			return mixer_rdch(card, i, (int *) arg);#else				/* OSS_DOCUMENTED_MIXER_SEMANTICS */			if (!volidx[i])				return -EINVAL;			return put_user(card->arrwVol[volidx[i]], (int *) arg);#endif				/* OSS_DOCUMENTED_MIXER_SEMANTICS */		}	}	/* End of _IOC_READ */	if (_IOC_DIR(cmd) != (_IOC_READ | _IOC_WRITE))		return -EINVAL;	/* _IOC_WRITE */	card->modcnt++;	switch (_IOC_NR(cmd)) {	case SOUND_MIXER_RECSRC:	/* Arg contains a bit for each recording source */		DPF(2, "SOUND_MIXER_WRITE_RECSRC\n");		if (card->isaps)			return -EINVAL;		if (get_user(val, (int *) arg))			return -EFAULT;		i = hweight32(val);		if (i == 0)			return 0;	/* val = mixer_recmask(s); */		else if (i > 1) {			sblive_readac97(card, AC97_RECORDSELECT, &reg);			val &= ~recsrc[reg & 7];		}		for (i = 0; i < 8; i++) {			if (val & recsrc[i]) {				DPD(2, "Selecting record source to be 0x%04x\n", 0x0101 * i);				sblive_writeac97(card, AC97_RECORDSELECT, 0x0101 * i);				return 0;			}		}		return 0;	default:		i = _IOC_NR(cmd);		DPD(4, "SOUND_MIXER_WRITE(%d)\n", i);		if (i >= SOUND_MIXER_NRDEVICES)			return -EINVAL;		if (get_user(val, (int *) arg))			return -EFAULT;		if (emu10k1_mixer_wrch(card, i, val))			return -EINVAL;#ifdef OSS_DOCUMENTED_MIXER_SEMANTICS		return mixer_rdch(card, i, (int *) arg);#else				/* OSS_DOCUMENTED_MIXER_SEMANTICS */		return put_user(card->arrwVol[volidx[i]], (int *) arg);#endif				/* OSS_DOCUMENTED_MIXER_SEMANTICS */	}}static int emu10k1_mixer_open(struct inode *inode, struct file *file){	int minor = MINOR(inode->i_rdev);	struct emu10k1_card *card;	struct list_head *entry;	DPF(4, "emu10k1_mixer_open()\n");	list_for_each(entry, &emu10k1_devs) {		card = list_entry(entry, struct emu10k1_card, list);		if (card->mixer_num == minor)			break;	}	if (entry == &emu10k1_devs)		return -ENODEV;	file->private_data = card;	return 0;}static int emu10k1_mixer_release(struct inode *inode, struct file *file){	DPF(4, "emu10k1_mixer_release()\n");	return 0;}struct file_operations emu10k1_mixer_fops = {        owner:		THIS_MODULE,	llseek:		emu10k1_mixer_llseek,	ioctl:		emu10k1_mixer_ioctl,	open:		emu10k1_mixer_open,	release:	emu10k1_mixer_release,};

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区欧美一区| 欧美成人官网二区| 夜夜嗨av一区二区三区中文字幕| 97久久精品人人爽人人爽蜜臀| 国产精品国产精品国产专区不蜜| 99这里只有精品| 亚洲国产综合色| 制服视频三区第一页精品| 日韩av一区二区三区四区| 久久久久久免费| 91蜜桃在线免费视频| 夜夜爽夜夜爽精品视频| 91精品欧美久久久久久动漫| 国产麻豆成人传媒免费观看| ㊣最新国产の精品bt伙计久久| 99久久婷婷国产综合精品电影| 亚洲欧美日韩国产成人精品影院| 欧美在线不卡视频| 精品亚洲免费视频| 亚洲视频小说图片| 欧美一级欧美一级在线播放| 国产精品系列在线播放| 亚洲免费观看在线视频| 欧美一区二区三区免费| 国产成人免费av在线| 一区二区三区国产精品| 精品国产91乱码一区二区三区 | 午夜婷婷国产麻豆精品| 精品国产sm最大网站免费看| 色综合久久久久久久| 日韩av中文字幕一区二区三区| 中文一区在线播放| 4hu四虎永久在线影院成人| 国产suv精品一区二区6| 午夜精品久久久久久久99水蜜桃 | 国产成人精品一区二区三区四区 | 久久久久久久久久久电影| 色久综合一二码| 国产一级精品在线| 亚洲h精品动漫在线观看| 国产欧美一区二区精品秋霞影院| 欧美在线观看视频在线| 成人午夜在线免费| 免费成人在线网站| 亚洲精品久久久蜜桃| 精品1区2区在线观看| 欧美日韩一区 二区 三区 久久精品| 国产成人免费高清| 久久99精品国产麻豆不卡| 亚洲第一在线综合网站| 1024国产精品| 国产精品私人自拍| 精品国产伦一区二区三区免费| 欧美日韩综合在线免费观看| av欧美精品.com| 国产成人在线视频网址| 精品在线免费视频| 日韩电影免费在线| 亚洲成a天堂v人片| 亚洲综合区在线| 亚洲欧美日韩精品久久久久| 国产精品福利一区| 国产精品欧美久久久久一区二区| 久久久久久久久久久黄色| 欧美精品一区二区三区蜜臀| 日韩午夜激情av| 欧美精品 日韩| 91 com成人网| 久久久久久电影| 日韩精品一区二区三区在线观看| 制服丝袜成人动漫| 欧美日精品一区视频| 欧美视频日韩视频在线观看| 欧美色手机在线观看| 欧美亚洲高清一区二区三区不卡| 色综合天天综合网国产成人综合天 | 床上的激情91.| 成人蜜臀av电影| jvid福利写真一区二区三区| 成人免费毛片aaaaa**| 成人激情av网| 色悠悠久久综合| 欧美最猛性xxxxx直播| 欧美日韩一区中文字幕| 91精品国产麻豆| 久久综合色播五月| 中文在线一区二区 | 欧美怡红院视频| 欧美三级一区二区| 欧美一区二区三区电影| 欧美一级黄色片| 久久九九国产精品| 综合激情成人伊人| 亚洲一区av在线| 蜜臀久久99精品久久久久宅男| 久草在线在线精品观看| 成人午夜碰碰视频| 欧美三级乱人伦电影| 精品国产在天天线2019| 国产免费成人在线视频| 樱桃视频在线观看一区| 天堂成人国产精品一区| 国产精品中文欧美| 国产91精品一区二区麻豆亚洲| 色综合天天综合在线视频| 宅男在线国产精品| 国产日韩成人精品| 亚洲伊人伊色伊影伊综合网| 蜜乳av一区二区| 99re免费视频精品全部| 日韩一区二区三区免费观看| 国产精品麻豆欧美日韩ww| 亚洲电影你懂得| 国产不卡高清在线观看视频| 欧美调教femdomvk| 久久综合999| 亚洲精品成a人| 精品一区二区免费| 欧美在线播放高清精品| 久久免费的精品国产v∧| 亚洲国产一区二区三区| 成人妖精视频yjsp地址| 久久婷婷成人综合色| 亚洲免费看黄网站| 国产剧情一区二区| 欧美日韩国产123区| 国产精品乱码久久久久久| 日韩av网站免费在线| 91视视频在线观看入口直接观看www | 日韩主播视频在线| 成人午夜激情影院| 5566中文字幕一区二区电影| 一色屋精品亚洲香蕉网站| 青青草精品视频| 色播五月激情综合网| 久久午夜老司机| 免费观看成人鲁鲁鲁鲁鲁视频| 色婷婷精品久久二区二区蜜臂av | 国产精品免费久久久久| 蜜桃视频在线一区| 色狠狠一区二区三区香蕉| 国产午夜一区二区三区| 天堂久久久久va久久久久| 色狠狠综合天天综合综合| 日本一区二区电影| 国产一区欧美二区| 精品国产一区二区三区不卡| 亚洲成av人片一区二区| 日本韩国一区二区三区| 国产三级精品三级在线专区| 看电影不卡的网站| 日韩一级在线观看| 亚洲mv在线观看| 欧美日韩一区视频| 亚洲成人黄色影院| 欧美色手机在线观看| 亚洲尤物视频在线| 91福利在线播放| 一区二区三区在线免费| 在线视频中文字幕一区二区| 亚洲视频在线一区| 色哟哟国产精品免费观看| 亚洲欧洲成人自拍| 99精品1区2区| 亚洲影院久久精品| 欧美日韩一区久久| 日韩av网站在线观看| 欧美成人艳星乳罩| 99re亚洲国产精品| 最新日韩av在线| 欧美在线看片a免费观看| 污片在线观看一区二区| 337p亚洲精品色噜噜| 久久国产尿小便嘘嘘| 久久香蕉国产线看观看99| 国产91在线|亚洲| 18成人在线观看| 欧美日韩午夜影院| 麻豆91在线观看| 国产人成亚洲第一网站在线播放| 国产白丝精品91爽爽久久| 国产精品美女一区二区三区| 91蜜桃视频在线| 日日摸夜夜添夜夜添国产精品| 欧美大片日本大片免费观看| 国产成都精品91一区二区三| 亚洲私人影院在线观看| 欧美三级电影一区| 精品亚洲aⅴ乱码一区二区三区| 国产日韩欧美精品一区| 色噜噜久久综合| 看电影不卡的网站| 国产精品久久久久久亚洲伦| 欧美中文字幕一区| 激情综合色播激情啊| 亚洲女人****多毛耸耸8| 日韩一级二级三级精品视频| 国产高清视频一区| 亚洲一区在线观看免费| 337p日本欧洲亚洲大胆精品|