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

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

?? os.h

?? LINUX1.0源代碼,代碼條理清晰
?? H
字號:
/*
 *	OS Specific settings for Linux
 * 
 * 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 ALLOW_SELECT

#include <linux/param.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/signal.h>
#include <linux/fcntl.h>
#include <linux/sched.h>
#include <linux/timer.h>
#include <linux/tty.h>
#include <linux/ctype.h>
#include <asm/io.h>
#include <asm/segment.h>
#include <asm/system.h>
#include <asm/dma.h>
#include <sys/kd.h>
#include <linux/wait.h>
#include <linux/malloc.h>
#include <linux/soundcard.h>

typedef char snd_rw_buf;

#define FALSE	0
#define TRUE	1

#define COPY_FROM_USER(d, s, o, c)	memcpy_fromfs((d), &((s)[o]), (c))
#define COPY_TO_USER(d, o, s, c)	memcpy_tofs(&((d)[o]), (s), (c))
#define IOCTL_FROM_USER(d, s, o, c)	memcpy_fromfs((d), &((s)[o]), (c))
#define IOCTL_TO_USER(d, o, s, c)	memcpy_tofs(&((d)[o]), (s), (c))

#define GET_BYTE_FROM_USER(target, addr, offs)	target = get_fs_byte(&((addr)[offs]))
#define GET_SHORT_FROM_USER(target, addr, offs)	target = get_fs_word(&((addr)[offs]))
#define GET_WORD_FROM_USER(target, addr, offs)	target = get_fs_long((long*)&((addr)[offs]))
#define PUT_WORD_TO_USER(addr, offs, data)	put_fs_long(data, (long*)&((addr)[offs]))
#define IOCTL_IN(arg)			get_fs_long((long *)(arg))
#define IOCTL_OUT(arg, ret)		snd_ioctl_return((int *)arg, ret)

struct snd_wait {
	  int mode; int aborting;
	};

#define DEFINE_WAIT_QUEUE(name, flag) static struct wait_queue *name = NULL; \
	static volatile struct snd_wait flag = {0}
#define DEFINE_WAIT_QUEUES(name, flag) static struct wait_queue *name = {NULL}; \
	static volatile struct snd_wait flag = {{0}}
#define RESET_WAIT_QUEUE(q, f) {f.aborting = 0;f.mode = WK_NONE;}
#define PROCESS_ABORTING(q, f) (f.aborting | (current->signal & ~current->blocked))
#define SET_ABORT_FLAG(q, f) f.aborting = 1
#define TIMED_OUT(q, f) (f.mode & WK_TIMEOUT)
#define DO_SLEEP(q, f, time_limit)	\
	{ unsigned long tl;\
	  if (time_limit) tl = current->timeout = jiffies + (time_limit); \
	     else tl = 0xffffffff; \
	  f.mode = WK_SLEEP;interruptible_sleep_on(&q); \
	  if (!(f.mode & WK_WAKEUP)) \
	   { \
	     if (current->signal & ~current->blocked) \
	        f.aborting = 1; \
	     else \
	        if (jiffies >= tl) f.mode |= WK_TIMEOUT; \
	   } \
	  f.mode &= ~WK_SLEEP; \
	}
#define SOMEONE_WAITING(q, f) (f.mode & WK_SLEEP)
#define WAKE_UP(q, f)			{f.mode = WK_WAKEUP;wake_up(&q);}

#define ALLOC_DMA_CHN(chn)		request_dma(chn)
#define RELEASE_DMA_CHN(chn)		free_dma(chn)

#define GET_TIME()			jiffies
#define RELEASE_IRQ			free_irq
#define RET_ERROR(err)			-err

/* DISABLE_INTR is used to disable interrupts.
   These macros store the current flags to the (unsigned long) variable given
   as a parameter. RESTORE_INTR returns the interrupt ebable bit to state
   before DISABLE_INTR or ENABLE_INTR */

#define DISABLE_INTR(flags)	__asm__ __volatile__("pushfl ; popl %0 ; cli":"=r" (flags));
#define RESTORE_INTR(flags)	__asm__ __volatile__("pushl %0 ; popfl": \
							:"r" (flags));
/* 
   KERNEL_MALLOC() allocates requested number of memory  and 
   KERNEL_FREE is used to free it. 
   These macros are never called from interrupt, in addition the
   nbytes will never be more than 4096 bytes. Generally the driver
   will allocate memory in blocks of 4k. If the kernel has just a
   page level memory allocation, 4K can be safely used as the size
   (the nbytes parameter can be ignored).
*/
#define KERNEL_MALLOC(nbytes)	kmalloc(nbytes, GFP_KERNEL)
#define KERNEL_FREE(addr)	kfree(addr)

/*
 * The macro PERMANENT_MALLOC(typecast, mem_ptr, size, linux_ptr)
 * returns size bytes of
 * (kernel virtual) memory which will never get freed by the driver.
 * This macro is called only during boot. The linux_ptr is a linux specific
 * parameter which should be ignored in other operating systems.
 * The mem_ptr is a pointer variable where the macro assigns pointer to the
 * memory area. The type is the type of the mem_ptr.
 */
#define PERMANENT_MALLOC(typecast, mem_ptr, size, linux_ptr) \
  {mem_ptr = (typecast)linux_ptr; \
   linux_ptr += (size);}

/*
 * The macro DEFINE_TIMER defines variables for the ACTIVATE_TIMER if
 * required. The name is the variable/name to be used and the proc is
 * the procedure to be called when the timer expires.
 */

#define DEFINE_TIMER(name, proc) \
  static struct timer_list name = \
  {NULL, NULL, 0, 0, proc}

/*
 * The ACTIVATE_TIMER requests system to call 'proc' after 'time' ticks.
 */

#define ACTIVATE_TIMER(name, proc, time) \
  {name.expires = time; \
  add_timer (&name);}

#define INB	inb
#define OUTB	outb

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区不卡视频| 亚洲女性喷水在线观看一区| 亚洲欧美综合网| 天天av天天翘天天综合网色鬼国产| 国内精品伊人久久久久av一坑 | 一区二区三区自拍| 麻豆精品蜜桃视频网站| 欧美中文一区二区三区| 中文字幕av一区二区三区免费看 | 亚洲色图一区二区三区| 精品在线观看免费| 欧美精品乱码久久久久久| 中文字幕日韩一区| 国产一区二区美女诱惑| 日韩一卡二卡三卡国产欧美| 一区二区三区免费在线观看| 高清不卡一区二区| 欧美国产一区二区| 国产一区啦啦啦在线观看| 欧美一级在线视频| 偷拍一区二区三区四区| 欧美猛男超大videosgay| **欧美大码日韩| 99精品视频一区二区| 国产精品久久久久一区二区三区 | 久久精品99国产精品| 欧美一区三区四区| 青青草一区二区三区| 欧美精品精品一区| 三级久久三级久久久| 欧美在线观看视频在线| 亚洲一区二区三区美女| 欧美无乱码久久久免费午夜一区| ...xxx性欧美| 欧美制服丝袜第一页| 亚洲成人激情自拍| 欧美一区二区高清| 蜜桃精品在线观看| 久久久国产综合精品女国产盗摄| 久久激情五月激情| 久久午夜电影网| 国产精品亚洲第一| 中文在线一区二区| 色综合av在线| 天天亚洲美女在线视频| 91精品国产一区二区三区香蕉| 污片在线观看一区二区| 欧美电视剧免费观看| 狠狠色丁香久久婷婷综合丁香| 久久久噜噜噜久噜久久综合| 夫妻av一区二区| 又紧又大又爽精品一区二区| 欧美日韩精品一区二区三区| 麻豆成人91精品二区三区| 精品国产第一区二区三区观看体验| 国产成人综合在线| 亚洲激情av在线| 91精品国产福利| 成人午夜视频网站| 亚洲国产精品一区二区久久恐怖片 | 亚洲va欧美va天堂v国产综合| 在线成人高清不卡| 国产精品香蕉一区二区三区| 亚洲免费观看高清完整版在线观看熊| 欧美视频一区在线观看| 另类中文字幕网| 国产精品成人免费| 91精品国产91久久久久久一区二区| 国内精品写真在线观看 | 国产三级一区二区| 日本高清不卡视频| 狠狠色丁香久久婷婷综| 一区二区三区四区国产精品| 日韩欧美资源站| 色哟哟日韩精品| 国产精品1区2区3区在线观看| 有坂深雪av一区二区精品| 日韩一区二区三区av| 97精品久久久久中文字幕| 美女被吸乳得到大胸91| 亚洲欧美乱综合| 2020国产成人综合网| 欧美日韩精品一区二区三区四区| 国产福利视频一区二区三区| 三级精品在线观看| 亚洲日本在线a| 久久久久久免费毛片精品| 337p亚洲精品色噜噜| 91黄视频在线| 成人av综合一区| 国产一区二区伦理| 男人的j进女人的j一区| 亚洲永久精品国产| 国产精品久久久久久亚洲伦| www久久精品| 欧美一区二区三区白人| 91成人看片片| 99精品视频在线免费观看| 国产成人8x视频一区二区| 精品午夜一区二区三区在线观看| 午夜久久久久久久久久一区二区| 亚洲免费av观看| 亚洲特黄一级片| 国产精品乱人伦一区二区| 久久综合成人精品亚洲另类欧美 | 男女男精品网站| 无吗不卡中文字幕| 亚洲成人免费影院| 午夜久久久久久电影| 亚洲一区二区三区四区在线| 亚洲精品成人a在线观看| 综合久久久久综合| 一区在线播放视频| 国产精品高潮呻吟| 亚洲欧美影音先锋| 一区二区三区在线视频播放 | 中文字幕免费不卡在线| 久久久蜜桃精品| 久久精品一区二区三区不卡牛牛| 欧美大片在线观看一区二区| 日韩美女天天操| 欧美不卡视频一区| 久久久久久久久久久99999| 久久久久久久综合狠狠综合| 久久欧美中文字幕| 国产精品素人视频| 亚洲欧洲三级电影| 夜夜精品视频一区二区| 亚洲国产成人porn| 日本不卡中文字幕| 精品一区二区三区不卡| 国产美女一区二区三区| 成人小视频免费在线观看| 99麻豆久久久国产精品免费 | 丁香天五香天堂综合| 成人aa视频在线观看| 91国偷自产一区二区三区观看| 欧美三级日韩三级| 精品噜噜噜噜久久久久久久久试看| 欧美精品一区二区在线观看| 中文字幕成人在线观看| 亚洲一区二区三区视频在线| 蜜桃传媒麻豆第一区在线观看| 国产成人免费视频| 欧美日韩国产精选| 日韩欧美国产综合在线一区二区三区 | 日韩电影免费一区| 成人一区在线观看| 欧美三级午夜理伦三级中视频| 欧美一级高清片| 欧美国产日本视频| 日韩二区三区四区| 成人丝袜高跟foot| 欧美色区777第一页| 欧美第一区第二区| 亚洲免费观看视频| 国产露脸91国语对白| 色呦呦日韩精品| 久久综合狠狠综合久久激情| 樱桃国产成人精品视频| 精品中文字幕一区二区| 在线观看一区日韩| 国产欧美一区二区精品婷婷 | 亚洲人成亚洲人成在线观看图片| 天天操天天色综合| 91日韩一区二区三区| 精品欧美乱码久久久久久 | 极品尤物av久久免费看| 欧美艳星brazzers| 国产精品免费久久| 精一区二区三区| 欧美剧在线免费观看网站| 亚洲欧洲日韩在线| 国产xxx精品视频大全| 69精品人人人人| 亚洲欧美一区二区三区极速播放| 国产乱人伦偷精品视频不卡| 9191成人精品久久| 亚洲综合色在线| 成人av资源在线观看| 久久久久久久av麻豆果冻| 奇米色一区二区| 欧美色男人天堂| 亚洲色图一区二区三区| 成人伦理片在线| 久久精品免视看| 国内精品国产成人国产三级粉色| 欧美丰满一区二区免费视频| 亚洲精品国产视频| 一本色道久久加勒比精品| 国产精品麻豆视频| 成人免费看黄yyy456| 国产日韩一级二级三级| 国产精品一区二区在线观看不卡 | 欧美一区二区三级| 人人精品人人爱| 337p亚洲精品色噜噜狠狠| 日韩福利电影在线| 欧美一二三在线| 久久精品国产亚洲高清剧情介绍 |