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

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

?? patmgr.c

?? LINUX1.0源代碼,代碼條理清晰
?? C
字號:
/*
 * sound/patmgr.c
 * 
 * The patch maneger interface for the /dev/sequencer
 * 
 * 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.
 * 
 */

#define PATMGR_C
#include "sound_config.h"

#if defined(CONFIGURE_SOUNDCARD) && !defined(EXCLUDE_SEQUENCER)

DEFINE_WAIT_QUEUES (server_procs[MAX_SYNTH_DEV],
		    server_wait_flag[MAX_SYNTH_DEV]);

static struct patmgr_info *mbox[MAX_SYNTH_DEV] =
{NULL};
static volatile int msg_direction[MAX_SYNTH_DEV] =
{0};

static int      pmgr_opened[MAX_SYNTH_DEV] =
{0};

#define A_TO_S	1
#define S_TO_A 	2

DEFINE_WAIT_QUEUE (appl_proc, appl_wait_flag);

int
pmgr_open (int dev)
{
  if (dev < 0 || dev >= num_synths)
    return RET_ERROR (ENXIO);

  if (pmgr_opened[dev])
    return RET_ERROR (EBUSY);
  pmgr_opened[dev] = 1;

  RESET_WAIT_QUEUE (server_procs[dev], server_wait_flag[dev]);

  return 0;
}

void
pmgr_release (int dev)
{

  if (mbox[dev])		/* Killed in action. Inform the client */
    {

      mbox[dev]->key = PM_ERROR;
      mbox[dev]->parm1 = RET_ERROR (EIO);

      if (SOMEONE_WAITING (appl_proc, appl_wait_flag))
	WAKE_UP (appl_proc, appl_wait_flag);
    }

  pmgr_opened[dev] = 0;
}

int
pmgr_read (int dev, struct fileinfo *file, snd_rw_buf * buf, int count)
{
  unsigned long   flags;
  int             ok = 0;

  if (count != sizeof (struct patmgr_info))
    {
      printk ("PATMGR%d: Invalid read count\n", dev);
      return RET_ERROR (EIO);
    }

  while (!ok && !PROCESS_ABORTING (server_procs[dev], server_wait_flag[dev]))
    {
      DISABLE_INTR (flags);

      while (!(mbox[dev] && msg_direction[dev] == A_TO_S) &&
	     !PROCESS_ABORTING (server_procs[dev], server_wait_flag[dev]))
	{
	  DO_SLEEP (server_procs[dev], server_wait_flag[dev], 0);
	}

      if (mbox[dev] && msg_direction[dev] == A_TO_S)
	{
	  COPY_TO_USER (buf, 0, (char *) mbox[dev], count);
	  msg_direction[dev] = 0;
	  ok = 1;
	}

      RESTORE_INTR (flags);

    }

  if (!ok)
    return RET_ERROR (EINTR);
  return count;
}

int
pmgr_write (int dev, struct fileinfo *file, snd_rw_buf * buf, int count)
{
  unsigned long   flags;

  if (count < 4)
    {
      printk ("PATMGR%d: Write count < 4\n", dev);
      return RET_ERROR (EIO);
    }

  COPY_FROM_USER (mbox[dev], buf, 0, 4);

  if (*(unsigned char *) mbox[dev] == SEQ_FULLSIZE)
    {
      int             tmp_dev;

      tmp_dev = ((unsigned short *) mbox[dev])[2];
      if (tmp_dev != dev)
	return RET_ERROR (ENXIO);

      return synth_devs[dev]->load_patch (dev, *(unsigned short *) mbox[dev],
					  buf, 4, count, 1);
    }

  if (count != sizeof (struct patmgr_info))
    {
      printk ("PATMGR%d: Invalid write count\n", dev);
      return RET_ERROR (EIO);
    }

  /*
   * If everything went OK, there should be a preallocated buffer in the
   * mailbox and a client waiting.
   */

  DISABLE_INTR (flags);

  if (mbox[dev] && !msg_direction[dev])
    {
      COPY_FROM_USER (&((char *) mbox[dev])[4], buf, 4, count - 4);
      msg_direction[dev] = S_TO_A;

      if (SOMEONE_WAITING (appl_proc, appl_wait_flag))
	{
	  WAKE_UP (appl_proc, appl_wait_flag);
	}
    }

  RESTORE_INTR (flags);

  return count;
}

int
pmgr_access (int dev, struct patmgr_info *rec)
{
  unsigned long   flags;
  int             err = 0;

  DISABLE_INTR (flags);

  if (mbox[dev])
    printk ("  PATMGR: Server %d mbox full. Why?\n", dev);
  else
    {
      rec->key = PM_K_COMMAND;
      mbox[dev] = rec;
      msg_direction[dev] = A_TO_S;

      if (SOMEONE_WAITING (server_procs[dev], server_wait_flag[dev]))
	{
	  WAKE_UP (server_procs[dev], server_wait_flag[dev]);
	}

      DO_SLEEP (appl_proc, appl_wait_flag, 0);

      if (msg_direction[dev] != S_TO_A)
	{
	  rec->key = PM_ERROR;
	  rec->parm1 = RET_ERROR (EIO);
	}
      else if (rec->key == PM_ERROR)
	{
	  err = rec->parm1;
	  if (err > 0)
	    err = -err;
	}

      mbox[dev] = NULL;
      msg_direction[dev] = 0;
    }

  RESTORE_INTR (flags);

  return err;
}

int
pmgr_inform (int dev, int event, unsigned long p1, unsigned long p2,
	     unsigned long p3, unsigned long p4)
{
  unsigned long   flags;
  int             err = 0;

  if (!pmgr_opened[dev])
    return 0;

  DISABLE_INTR (flags);

  if (mbox[dev])
    printk ("  PATMGR: Server %d mbox full. Why?\n", dev);
  else
    {
      mbox[dev] =
	(struct patmgr_info *) KERNEL_MALLOC (sizeof (struct patmgr_info));

      mbox[dev]->key = PM_K_EVENT;
      mbox[dev]->command = event;
      mbox[dev]->parm1 = p1;
      mbox[dev]->parm2 = p2;
      mbox[dev]->parm3 = p3;
      msg_direction[dev] = A_TO_S;

      if (SOMEONE_WAITING (server_procs[dev], server_wait_flag[dev]))
	{
	  WAKE_UP (server_procs[dev], server_wait_flag[dev]);
	}

      DO_SLEEP (appl_proc, appl_wait_flag, 0);
      if (mbox[dev])
	KERNEL_FREE (mbox[dev]);
      mbox[dev] = NULL;
      msg_direction[dev] = 0;
    }

  RESTORE_INTR (flags);

  return err;
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人久久18免费网站麻豆| 91视频免费观看| 成年人国产精品| 欧美精品第一页| 国产精品午夜在线观看| 亚洲国产精品久久不卡毛片| 国产乱人伦偷精品视频不卡| 91精品91久久久中77777| 精品国产一区二区三区忘忧草| 国产精品久久久久三级| 久久狠狠亚洲综合| 欧美日韩一区不卡| 亚洲精品精品亚洲| 99久久er热在这里只有精品15| 欧美一级久久久久久久大片| 亚洲精品ww久久久久久p站| 国产精品1区2区| 欧美一区二区三区成人| 亚洲国产视频一区二区| 99精品视频在线观看| 国产人久久人人人人爽| 久久99国产精品免费| 欧美精品三级在线观看| 亚洲一区在线电影| av亚洲精华国产精华精华| 国产亚洲精品福利| 紧缚奴在线一区二区三区| 91精品国产综合久久蜜臀| 亚洲不卡在线观看| 欧美视频一区二区三区| 亚洲男同性视频| 成人黄色综合网站| 亚洲欧洲av色图| 91一区在线观看| 亚洲欧美区自拍先锋| 色综合天天天天做夜夜夜夜做| 国产精品国产自产拍高清av王其| 国产精品亚洲成人| 国产精品色婷婷久久58| proumb性欧美在线观看| 一区精品在线播放| 欧美亚洲国产一区二区三区 | 久久久久亚洲蜜桃| 美脚の诱脚舐め脚责91| 精品乱人伦一区二区三区| 久久99久久久久久久久久久| 久久久91精品国产一区二区三区| 国产91精品一区二区| 中文欧美字幕免费| 国产suv精品一区二区三区| 精品久久久久香蕉网| 国产高清在线精品| 国产午夜亚洲精品理论片色戒| 另类小说欧美激情| 2021中文字幕一区亚洲| 国产一区亚洲一区| 国产亚洲午夜高清国产拍精品| 韩国女主播一区二区三区| 日韩三级精品电影久久久| 久久99久久久久| 国产欧美一区二区三区沐欲| 国产69精品久久久久777| 国产视频一区不卡| 成人av在线播放网址| 国产精品夫妻自拍| 91高清视频免费看| 亚洲v日本v欧美v久久精品| 欧美高清视频一二三区| 看电影不卡的网站| 久久一二三国产| 99精品欧美一区二区蜜桃免费| 亚洲免费资源在线播放| 欧美最新大片在线看| 日韩国产欧美在线视频| 2023国产精品视频| 成人免费av资源| 午夜欧美2019年伦理| 精品国精品国产| 99久久免费视频.com| 亚洲444eee在线观看| 欧美v亚洲v综合ⅴ国产v| 成人网男人的天堂| 亚洲第一会所有码转帖| 精品国产99国产精品| 不卡av在线免费观看| 亚洲综合一二区| 久久综合久久综合九色| 91免费版pro下载短视频| 日韩精品国产精品| 日本一区免费视频| 欧美一级片在线| 久久爱www久久做| 亚洲免费在线视频| 精品少妇一区二区三区视频免付费 | 日韩伦理免费电影| 91精品国产综合久久香蕉麻豆| 五月激情六月综合| 2023国产精品视频| 精品剧情在线观看| 欧美中文字幕亚洲一区二区va在线| 老汉av免费一区二区三区| 伊人一区二区三区| 久久精品人人做人人爽97| 欧美人妇做爰xxxⅹ性高电影| 国产成人综合在线播放| 丝瓜av网站精品一区二区| 国产精品不卡在线观看| 日韩一区二区电影在线| 91免费看片在线观看| 久久国产精品色婷婷| 一卡二卡欧美日韩| 欧美精品一区二区三| 日韩免费视频线观看| 欧美撒尿777hd撒尿| 99久久精品国产麻豆演员表| 国产一区在线精品| 久久成人综合网| 日韩精品成人一区二区三区| 一个色综合av| 亚洲男人的天堂在线aⅴ视频| 在线不卡免费av| 欧美一区二区成人| 精品视频一区二区三区免费| 99在线热播精品免费| 国产成人在线网站| 色悠悠久久综合| 亚洲综合久久av| 精品国产一二三区| 久久综合九色综合欧美98| 99国产精品久久久| 成人av在线电影| 国产91精品露脸国语对白| 国产一区美女在线| 久久精品国产999大香线蕉| 日韩制服丝袜先锋影音| 日韩av中文字幕一区二区三区| 中文字幕一区av| 亚洲一区二区三区四区在线观看 | 精品久久人人做人人爱| 制服丝袜激情欧洲亚洲| 在线观看不卡一区| 国产精品一区二区无线| 成人免费视频视频在线观看免费| 日韩欧美视频在线| 精品精品欲导航| 精品裸体舞一区二区三区| 亚洲精品在线三区| 日韩亚洲欧美在线| 日韩欧美精品在线| 国产午夜精品一区二区| 国产精品乱子久久久久| 亚洲免费在线视频一区 二区| 亚洲人成7777| 日本亚洲三级在线| 国产一区视频在线看| 成人国产一区二区三区精品| 韩国欧美国产1区| 91在线观看地址| 欧美一区二区三区在线电影| 精品久久久久久久久久久久久久久| 久久久精品国产免费观看同学| xnxx国产精品| 一区二区三区美女| 久久成人久久爱| 不卡一区二区三区四区| 欧美色视频在线观看| 欧美成人一区二区三区片免费 | 一区二区三区资源| 亚洲小说欧美激情另类| 国产精品污网站| 一本久久综合亚洲鲁鲁五月天| 一本高清dvd不卡在线观看| 欧美亚洲自拍偷拍| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 欧美三区免费完整视频在线观看| 欧美日韩国产美女| 国产欧美日韩在线观看| 亚洲va中文字幕| 国产乱码精品一品二品| 在线这里只有精品| 国产欧美视频一区二区三区| 亚洲国产成人tv| 粉嫩13p一区二区三区| 欧美在线综合视频| 久久影院午夜论| 亚洲成人激情社区| 不卡av电影在线播放| 日韩欧美一区电影| 亚洲国产欧美在线| 成人激情免费电影网址| 欧美成人女星排名| 亚洲国产美女搞黄色| 成人一区二区三区在线观看| 欧美欧美欧美欧美首页| 亚洲欧洲日韩综合一区二区| 国产一区二区女| 日韩免费视频一区二区| 日日夜夜精品免费视频| 成人avav影音| 成人免费在线观看入口|