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

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

?? parport.c

?? 自己根據lkd和情境分析
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* $Id: parport.c,v 1.1.1.1 2004/02/04 12:55:28 laputa Exp $ *  * Elinux parallel port driver * NOTE! *   Since par0 shares DMA with ser2 and par 1 shares DMA with ser3 *   this should be handled if both are enabled at the same time. *   THIS IS NOT HANDLED YET! * * Copyright (c) 2001 Axis Communications AB *  * Author: Fredrik Hugosson * */#include <linux/module.h>#include <linux/init.h>#include <linux/parport.h>#include <linux/ioport.h>#include <linux/config.h>#include <linux/errno.h>#include <linux/kernel.h>#include <linux/major.h>#include <linux/sched.h>#include <linux/slab.h>#include <linux/interrupt.h>#include <asm/setup.h>#include <asm/irq.h>#include <asm/io.h>#include <asm/segment.h>#include <asm/system.h>#include <asm/svinto.h>#undef DEBUG#ifdef DEBUG#define DPRINTK printk#elsestatic inline int DPRINTK(void *nothing, ...) {return 0;}#endif/* * Etrax100 DMAchannels: * Par0 out : DMA2 * Par0 in  : DMA3 * Par1 out : DMA4 * Par1 in  : DMA5 * NOTE! par0 is shared with ser2 and par1 is shared with ser3 regarding *       DMA and DMA irq *///#define CONFIG_PAR0_INT 1//#define CONFIG_PAR1_INT 1#define SETF(var, reg, field, val) \	var = (var & ~IO_MASK(##reg##, field)) | IO_FIELD(##reg##, field, val)#define SETS(var, reg, field, val) \	var = (var & ~IO_MASK(##reg##, field)) | IO_STATE(##reg##, field, val)struct etrax100par_struct {	/* parallell port control */	volatile u32 *reg_ctrl_data; /* R_PARx_CTRL_DATA */	const volatile u32 *reg_status_data; /* R_PARx_STATUS_DATA */	volatile u32 *reg_config; /* R_PARx_CONFIG */	volatile u32 *reg_delay; /* R_PARx_DELAY */		/* DMA control */	int odma;	unsigned long dma_irq;  /* bitnr in R_IRQ_MASK2 for dmaX_descr */	volatile char *oclrintradr; /* adr to R_DMA_CHx_CLR_INTR, output */	volatile u32 *ofirstadr;   /* adr to R_DMA_CHx_FIRST, output */	volatile char *ocmdadr;     /* adr to R_DMA_CHx_CMD, output */		volatile char *iclrintradr; /* adr to R_DMA_CHx_CLR_INTR, input */	volatile u32 *ifirstadr;   /* adr to R_DMA_CHx_FIRST, input */	volatile char *icmdadr;     /* adr to R_DMA_CHx_CMD, input */	/* Non DMA interrupt stuff */	unsigned long int_irq; /* R_VECT_MASK_RD */	const volatile u32 *irq_mask_rd; /* R_IRQ_MASKX_RD */	volatile u32 *irq_mask_clr; /* R_IRQ_MASKX_RD */	const volatile u32 *irq_read; /* R_IRQ_READX */	volatile u32 *irq_mask_set; /* R_IRQ_MASKX_SET */	unsigned long irq_mask_tx;  /* bitmask in R_IRQ_ for tx (ready) int */	unsigned long irq_mask_rx;  /* bitmask in R_IRQ_ for rx (data) int */	unsigned long irq_mask_ecp_cmd;  /* mask in R_IRQ_ for ecp_cmd int */	unsigned long irq_mask_peri;  /* bitmask in R_IRQ_ for peri int */	int portnr;  	/* ----- end of fields initialised in port_table[] below ----- */	struct parport *port;  	/* Shadow registers */	volatile unsigned long reg_ctrl_data_shadow; /* for R_PARx_CTRL_DATA */	volatile unsigned long reg_config_shadow;    /* for R_PARx_CONFIG */	volatile unsigned long reg_delay_shadow;    /* for R_PARx_DELAY */};/* Always have the complete structs here, even if the port is not used! *  (that way we can index this by the port number) */static struct etrax100par_struct port_table[] = {	{ 		R_PAR0_CTRL_DATA,		R_PAR0_STATUS_DATA,		R_PAR0_CONFIG,		R_PAR0_DELAY,		/* DMA interrupt stuff */		2,		1U << 4, /* uses DMA 2 and 3 */		R_DMA_CH2_CLR_INTR,		R_DMA_CH2_FIRST,		R_DMA_CH2_CMD,		R_DMA_CH3_CLR_INTR,		R_DMA_CH3_FIRST,		R_DMA_CH3_CMD,		/* Non DMA interrupt stuff */		IO_BITNR(R_VECT_MASK_RD, par0),		R_IRQ_MASK0_RD,		R_IRQ_MASK0_CLR,		R_IRQ_READ0,		R_IRQ_MASK0_SET,		IO_FIELD(R_IRQ_MASK0_RD, par0_ready, 1U), /* tx (ready)*/		IO_FIELD(R_IRQ_MASK0_RD, par0_data, 1U), /* rx (data)*/		IO_FIELD(R_IRQ_MASK0_RD, par0_ecp_cmd, 1U), /* ecp_cmd */		IO_FIELD(R_IRQ_MASK0_RD, par0_peri, 1U), /* peri */		0	},	{		R_PAR1_CTRL_DATA,		R_PAR1_STATUS_DATA,		R_PAR1_CONFIG,		R_PAR1_DELAY,		/* DMA interrupt stuff */		4,		1U << 8, /* uses DMA 4 and 5 */				R_DMA_CH4_CLR_INTR,		R_DMA_CH4_FIRST,		R_DMA_CH4_CMD,		R_DMA_CH5_CLR_INTR,		R_DMA_CH5_FIRST,		R_DMA_CH5_CMD,		/* Non DMA interrupt stuff */		IO_BITNR(R_VECT_MASK_RD, par1),		R_IRQ_MASK1_RD,		R_IRQ_MASK1_CLR,		R_IRQ_READ1,		R_IRQ_MASK1_SET,		IO_FIELD(R_IRQ_MASK1_RD, par1_ready, 1U), /* tx (ready)*/		IO_FIELD(R_IRQ_MASK1_RD, par1_data, 1U), /* rx (data)*/		IO_FIELD(R_IRQ_MASK1_RD, par1_ecp_cmd, 1U), /* ecp_cmd */		IO_FIELD(R_IRQ_MASK1_RD, par1_peri, 1U), /* peri */		1	}};#define NR_PORTS (sizeof(port_table)/sizeof(struct etrax100par_struct))static voidparport_etrax_write_data(struct parport *p, unsigned char value){	struct etrax100par_struct *info =		(struct etrax100par_struct *)p->private_data;	DPRINTK("* E100 PP %d: etrax_write_data %02X\n", p->portnum, value);	SETF(info->reg_ctrl_data_shadow, R_PAR0_CTRL_DATA, data, value);	*info->reg_ctrl_data = info->reg_ctrl_data_shadow;}static unsigned charparport_etrax_read_data(struct parport *p){	unsigned char ret;	struct etrax100par_struct *info =		(struct etrax100par_struct *)p->private_data;	ret = IO_EXTRACT(R_PAR0_STATUS_DATA, data, *info->reg_status_data);	DPRINTK("* E100 PP %d: etrax_read_data %02X\n", p->portnum, ret);	return ret;}static voidparport_etrax_write_control(struct parport *p, unsigned char control){	struct etrax100par_struct *info =		(struct etrax100par_struct *)p->private_data;	DPRINTK("* E100 PP %d: etrax_write_control %02x\n", p->portnum, control);  	SETF(info->reg_ctrl_data_shadow, R_PAR0_CTRL_DATA, strb,	     (control & PARPORT_CONTROL_STROBE) > 0);	SETF(info->reg_ctrl_data_shadow, R_PAR0_CTRL_DATA, autofd,	     (control & PARPORT_CONTROL_AUTOFD) > 0);	SETF(info->reg_ctrl_data_shadow, R_PAR0_CTRL_DATA, init,	     (control & PARPORT_CONTROL_INIT) > 0);	SETF(info->reg_ctrl_data_shadow, R_PAR0_CTRL_DATA, seli,	     (control & PARPORT_CONTROL_SELECT) > 0);	*info->reg_ctrl_data = info->reg_ctrl_data_shadow;}static unsigned charparport_etrax_read_control( struct parport *p){	unsigned char ret = 0;	struct etrax100par_struct *info =		(struct etrax100par_struct *)p->private_data;	if (IO_EXTRACT(R_PAR0_CTRL_DATA, strb, info->reg_ctrl_data_shadow))		ret |= PARPORT_CONTROL_STROBE;	if (IO_EXTRACT(R_PAR0_CTRL_DATA, autofd, info->reg_ctrl_data_shadow))		ret |= PARPORT_CONTROL_AUTOFD;	if (IO_EXTRACT(R_PAR0_CTRL_DATA, init, info->reg_ctrl_data_shadow))		ret |= PARPORT_CONTROL_INIT;	if (IO_EXTRACT(R_PAR0_CTRL_DATA, seli, info->reg_ctrl_data_shadow))		ret |= PARPORT_CONTROL_SELECT;	DPRINTK("* E100 PP %d: etrax_read_control %02x\n", p->portnum, ret);	return ret;}static unsigned charparport_etrax_frob_control(struct parport *p, unsigned char mask,                           unsigned char val){	unsigned char old;	DPRINTK("* E100 PP %d: frob_control mask %02x, value %02x\n",		p->portnum, mask, val);	old = parport_etrax_read_control(p);	parport_etrax_write_control(p, (old & ~mask) ^ val);	return old;}static unsigned charparport_etrax_read_status(struct parport *p){	unsigned char ret = 0;	struct etrax100par_struct *info =		(struct etrax100par_struct *)p->private_data;	if (IO_EXTRACT(R_PAR0_STATUS_DATA, fault, *info->reg_status_data))		ret |= PARPORT_STATUS_ERROR;	if (IO_EXTRACT(R_PAR0_STATUS_DATA, sel, *info->reg_status_data))		ret |= PARPORT_STATUS_SELECT;	if (!IO_EXTRACT(R_PAR0_STATUS_DATA, perr, *info->reg_status_data))		ret |= PARPORT_STATUS_PAPEROUT;	if (IO_EXTRACT(R_PAR0_STATUS_DATA, ack, *info->reg_status_data))		ret |= PARPORT_STATUS_ACK;	if (!IO_EXTRACT(R_PAR0_STATUS_DATA, busy, *info->reg_status_data))		ret |= PARPORT_STATUS_BUSY;	DPRINTK("* E100 PP %d: status register %04x\n",		p->portnum, *info->reg_status_data);	DPRINTK("* E100 PP %d: read_status %02x\n", p->portnum, ret);	return ret;}static voidparport_etrax_enable_irq(struct parport *p){	struct etrax100par_struct *info =		(struct etrax100par_struct *)p->private_data;	*info->irq_mask_set = info->irq_mask_tx;	DPRINTK("* E100 PP %d: enable irq\n", p->portnum);}static voidparport_etrax_disable_irq(struct parport *p){

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合婷婷久久| xfplay精品久久| 久久久久久久精| 日韩综合在线视频| 在线观看av一区二区| 亚洲欧美色一区| 精品一区二区三区av| 欧美一区二区三区日韩视频| 日韩精品午夜视频| a4yy欧美一区二区三区| 国产精品水嫩水嫩| 国产91精品精华液一区二区三区| 日韩欧美你懂的| 九九视频精品免费| 久久久综合激的五月天| 高清国产午夜精品久久久久久| 精品国产91久久久久久久妲己| 懂色av一区二区三区免费看| 日本一区二区三区国色天香| 国产一区二区三区在线观看精品| 久久日一线二线三线suv| 精品一区二区免费看| 精品国产电影一区二区| 国产一区二区剧情av在线| 久久夜色精品国产欧美乱极品| 午夜精品久久久| 欧美精品在欧美一区二区少妇| 天使萌一区二区三区免费观看| 在线看不卡av| 日本强好片久久久久久aaa| 欧美巨大另类极品videosbest | 中文字幕在线一区免费| 国产精品一区二区在线看| 中文字幕乱码亚洲精品一区| 不卡一区在线观看| 一区二区三区 在线观看视频| 国产精品2024| 伊人性伊人情综合网| 7777精品伊人久久久大香线蕉经典版下载 | 一区二区三区中文在线| 911精品国产一区二区在线| 丝瓜av网站精品一区二区| 精品欧美乱码久久久久久| 久久草av在线| 亚洲欧洲精品一区二区三区| 欧美日韩不卡在线| 经典三级视频一区| 亚洲另类色综合网站| 日韩欧美在线不卡| 成人av综合在线| 午夜激情一区二区| 国产校园另类小说区| 欧美亚洲一区二区在线| 欧美三级韩国三级日本三斤| 91麻豆精品国产| 欧美国产激情一区二区三区蜜月| 2022国产精品视频| a4yy欧美一区二区三区| 91麻豆精品在线观看| 欧美韩国日本不卡| 欧美一区二区成人6969| 99国产欧美另类久久久精品| 国产在线日韩欧美| 久久国产精品第一页| 午夜精品福利一区二区蜜股av| 亚洲欧美日韩一区二区| 国产午夜三级一区二区三| 欧美成人福利视频| 91精选在线观看| 欧美高清dvd| 欧美久久久久久蜜桃| 欧美性xxxxxx少妇| 91成人在线观看喷潮| 91婷婷韩国欧美一区二区| av中文字幕不卡| av网站免费线看精品| 粉嫩av一区二区三区| 处破女av一区二区| 成熟亚洲日本毛茸茸凸凹| 国产成人鲁色资源国产91色综| 国内精品伊人久久久久av一坑 | 亚洲精品国产第一综合99久久| 国产精品色哟哟| 国产精品色在线观看| 国产精品伦理一区二区| 亚洲色图在线播放| 一个色在线综合| 亚洲成av人片观看| 日韩avvvv在线播放| 久久超级碰视频| 国产精品18久久久| av综合在线播放| 色激情天天射综合网| 欧美精品乱码久久久久久| 4438成人网| 国产精品免费观看视频| 亚洲免费在线播放| 午夜影院久久久| 久久电影网电视剧免费观看| 国产精品一区二区你懂的| 成人av免费在线播放| 色老汉av一区二区三区| 日韩一区二区免费视频| 欧美国产一区在线| 夜夜精品视频一区二区| 肉色丝袜一区二区| 国产一区二区三区综合 | 成人av在线资源| 色哟哟在线观看一区二区三区| 欧美优质美女网站| 久久一夜天堂av一区二区三区| 亚洲欧美在线另类| 偷拍日韩校园综合在线| 国产激情视频一区二区三区欧美| 五月天欧美精品| 成人午夜电影网站| 欧美精品在线观看播放| 国产日产精品1区| 1000部国产精品成人观看| 色哟哟国产精品| 精品卡一卡二卡三卡四在线| 久久影院午夜论| 欧洲一区二区三区在线| 这里只有精品视频在线观看| 久久美女艺术照精彩视频福利播放| 亚洲色图在线播放| 精品一区二区精品| 欧美性xxxxx极品少妇| 91精品一区二区三区在线观看| 国产精品国产自产拍高清av王其| 日韩中文字幕不卡| 成人免费福利片| 日韩精品专区在线| 亚洲精品欧美激情| 福利91精品一区二区三区| 制服丝袜成人动漫| 亚洲人成影院在线观看| 精品一区二区三区在线观看 | 九九热在线视频观看这里只有精品| 99re视频这里只有精品| 精品国产一区二区三区四区四| 亚洲蜜臀av乱码久久精品| 极品美女销魂一区二区三区免费| 99re热视频这里只精品| 久久久久久久国产精品影院| 天堂成人免费av电影一区| 91免费看`日韩一区二区| 日韩一区二区三区四区 | 久久免费偷拍视频| 首页综合国产亚洲丝袜| caoporn国产精品| 欧美国产日本韩| 国内不卡的二区三区中文字幕| 欧美精品 国产精品| 亚洲男人的天堂在线aⅴ视频| 国产精品一区二区免费不卡 | 久久伊99综合婷婷久久伊| 三级在线观看一区二区| 欧美丝袜自拍制服另类| 亚洲尤物视频在线| 91久久精品一区二区| 国产精品不卡在线| 成人h动漫精品| 欧美国产在线观看| 国产成人综合在线观看| 国产校园另类小说区| 国产成人免费视| 亚洲国产精品t66y| 成人精品国产福利| 国产精品理伦片| 色婷婷av一区二区三区之一色屋| 国产精品不卡在线观看| 99re视频精品| 一区二区三区毛片| 欧美日韩一区二区三区在线| 亚洲妇熟xx妇色黄| 7777精品伊人久久久大香线蕉最新版| 婷婷丁香久久五月婷婷| 91精品免费在线观看| 免费成人av资源网| 26uuu精品一区二区在线观看| 国产一区二区三区免费播放| 久久久九九九九| 不卡的av在线| 一区二区三区成人| 欧美性大战xxxxx久久久| 亚洲mv在线观看| 欧美不卡视频一区| 国产精品一区三区| 亚洲欧美日韩中文字幕一区二区三区 | www.色综合.com| 亚洲图片自拍偷拍| 精品嫩草影院久久| 成人禁用看黄a在线| 一区二区三区日韩在线观看| 欧美一区二区三区啪啪| 九九热在线视频观看这里只有精品| 国产日韩欧美在线一区| 91视频在线观看| 日韩在线观看一区二区|