⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isicom.h

📁 linux得一些常用命令,以及linux环境下的c编程
💻 H
字号:
#ifndef _LINUX_ISICOM_H#define _LINUX_ISICOM_H/*#define		ISICOM_DEBUG*//*#define		ISICOM_DEBUG_DTR_RTS*//* *	Firmware Loader definitions ... */ #define		__MultiTech		('M'<<8)#define		MIOCTL_LOAD_FIRMWARE	(__MultiTech | 0x01)#define         MIOCTL_READ_FIRMWARE    (__MultiTech | 0x02)#define         MIOCTL_XFER_CTRL	(__MultiTech | 0x03)#define         MIOCTL_RESET_CARD	(__MultiTech | 0x04)#define		DATA_SIZE	16typedef	struct	{		unsigned short	exec_segment;		unsigned short	exec_addr;}	exec_record;typedef	struct	{		int		board;		/* Board to load */		unsigned short	addr;		unsigned short	count;}	bin_header;typedef	struct	{		int		board;		/* Board to load */		unsigned short	addr;		unsigned short	count;		unsigned short	segment;		unsigned char	bin_data[DATA_SIZE];}	bin_frame;#ifdef __KERNEL__#define		YES	1#define		NO	0#define		ISILOAD_MISC_MINOR	155	/* /dev/isctl */#define		ISILOAD_NAME		"ISILoad"/*	 *  ISICOM Driver definitions ... * */#define		ISICOM_NAME	"ISICom"/* *      PCI definitions */ #define        DEVID_COUNT     9 #define        VENDOR_ID       0x10b5/* *	These are now officially allocated numbers */#define		ISICOM_NMAJOR	112	/* normal  */#define		ISICOM_CMAJOR	113	/* callout */#define		ISICOM_MAGIC	(('M' << 8) | 'T')#define		WAKEUP_CHARS	256	/* hard coded for now	*/ #define		TX_SIZE		254  #define		BOARD_COUNT	4#define		PORT_COUNT	(BOARD_COUNT*16)#define		SERIAL_TYPE_NORMAL	1#define		SERIAL_TYPE_CALLOUT	2/*   character sizes  */#define		ISICOM_CS5		0x0000#define		ISICOM_CS6		0x0001#define		ISICOM_CS7		0x0002#define		ISICOM_CS8		0x0003/* stop bits */#define		ISICOM_1SB		0x0000#define		ISICOM_2SB		0x0004/* parity */#define		ISICOM_NOPAR		0x0000#define		ISICOM_ODPAR		0x0008#define		ISICOM_EVPAR		0x0018/* flow control */#define		ISICOM_CTSRTS		0x03#define		ISICOM_INITIATE_XONXOFF	0x04#define		ISICOM_RESPOND_XONXOFF	0x08#define InterruptTheCard(base) (outw(0,(base)+0xc)) #define ClearInterrupt(base) (inw((base)+0x0a))	#define	BOARD(line)  (((line) >> 4) & 0x3)#define MIN(a, b) ( (a) < (b) ? (a) : (b) )	/*	isi kill queue bitmap	*/	#define		ISICOM_KILLTX		0x01#define		ISICOM_KILLRX		0x02	/* isi_board status bitmap */	#define		FIRMWARE_LOADED		0x0001#define		BOARD_ACTIVE		0x0002 	/* isi_port status bitmap  */#define		ISI_CTS			0x1000#define		ISI_DSR			0x2000#define		ISI_RI			0x4000#define		ISI_DCD			0x8000#define		ISI_DTR			0x0100#define		ISI_RTS			0x0200#define		ISI_TXOK		0x0001  struct	isi_board {	unsigned short		base;	unsigned char		irq;	unsigned char		port_count;	unsigned short		status;	unsigned short		port_status; /* each bit represents a single port */	unsigned short		shift_count;	struct isi_port		* ports;	signed char		count;	unsigned char		isa;};struct	isi_port {	unsigned short		magic;	unsigned int		flags;	int			count;	int			blocked_open;	int			close_delay;	unsigned short		channel;	unsigned short		status;	unsigned short		closing_wait;	long 			session;	long			pgrp;	struct isi_board	* card;	struct tty_struct 	* tty;	wait_queue_head_t	close_wait;	wait_queue_head_t	open_wait;	struct tq_struct	hangup_tq;	struct tq_struct	bh_tqueue;	unsigned char		* xmit_buf;	int			xmit_head;	int			xmit_tail;	int			xmit_cnt;	struct termios 		normal_termios;	struct termios		callout_termios;};/* *  ISI Card specific ops ... */ static inline void raise_dtr(struct isi_port * port){	struct isi_board * card = port->card;	unsigned short base = card->base;	unsigned char channel = port->channel;	short wait=400;	while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0));	if (wait <= 0) {		printk(KERN_WARNING "ISICOM: Card found busy in raise_dtr.\n");		return;	}#ifdef ISICOM_DEBUG_DTR_RTS		printk(KERN_DEBUG "ISICOM: raise_dtr.\n");#endif		outw(0x8000 | (channel << card->shift_count) | 0x02 , base);	outw(0x0504, base);	InterruptTheCard(base);	port->status |= ISI_DTR;}static inline void drop_dtr(struct isi_port * port){		struct isi_board * card = port->card;	unsigned short base = card->base;	unsigned char channel = port->channel;	short wait=400;	while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0));	if (wait <= 0) {		printk(KERN_WARNING "ISICOM: Card found busy in drop_dtr.\n");		return;	}#ifdef ISICOM_DEBUG_DTR_RTS		printk(KERN_DEBUG "ISICOM: drop_dtr.\n");#endif		outw(0x8000 | (channel << card->shift_count) | 0x02 , base);	outw(0x0404, base);	InterruptTheCard(base);		port->status &= ~ISI_DTR;}static inline void raise_rts(struct isi_port * port){	struct isi_board * card = port->card;	unsigned short base = card->base;	unsigned char channel = port->channel;	short wait=400;	while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0));	if (wait <= 0) {		printk(KERN_WARNING "ISICOM: Card found busy in raise_rts.\n");		return;	}#ifdef ISICOM_DEBUG_DTR_RTS		printk(KERN_DEBUG "ISICOM: raise_rts.\n");#endif		outw(0x8000 | (channel << card->shift_count) | 0x02 , base);	outw(0x0a04, base);	InterruptTheCard(base);		port->status |= ISI_RTS;}static inline void drop_rts(struct isi_port * port){	struct isi_board * card = port->card;	unsigned short base = card->base;	unsigned char channel = port->channel;	short wait=400;	while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0));	if (wait <= 0) {		printk(KERN_WARNING "ISICOM: Card found busy in drop_rts.\n");		return;	}#ifdef ISICOM_DEBUG_DTR_RTS		printk(KERN_DEBUG "ISICOM: drop_rts.\n");#endif		outw(0x8000 | (channel << card->shift_count) | 0x02 , base);	outw(0x0804, base);	InterruptTheCard(base);		port->status &= ~ISI_RTS;}static inline void raise_dtr_rts(struct isi_port * port){	struct isi_board * card = port->card;	unsigned short base = card->base;	unsigned char channel = port->channel;	short wait=400;	while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0));	if (wait <= 0) {		printk(KERN_WARNING "ISICOM: Card found busy in raise_dtr_rts.\n");		return;	}#ifdef ISICOM_DEBUG_DTR_RTS		printk(KERN_DEBUG "ISICOM: raise_dtr_rts.\n");#endif		outw(0x8000 | (channel << card->shift_count) | 0x02 , base);	outw(0x0f04, base);	InterruptTheCard(base);	port->status |= (ISI_DTR | ISI_RTS);}static inline void drop_dtr_rts(struct isi_port * port){	struct isi_board * card = port->card;	unsigned short base = card->base;	unsigned char channel = port->channel;	short wait=400;	while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0));	if (wait <= 0) {		printk(KERN_WARNING "ISICOM: Card found busy in drop_dtr_rts.\n");		return;	}#ifdef ISICOM_DEBUG_DTR_RTS		printk(KERN_DEBUG "ISICOM: drop_dtr_rts.\n");#endif		outw(0x8000 | (channel << card->shift_count) | 0x02 , base);	outw(0x0c04, base);	InterruptTheCard(base);		port->status &= ~(ISI_RTS | ISI_DTR);}static inline void kill_queue(struct isi_port * port, short queue){	struct isi_board * card = port->card;	unsigned short base = card->base;	unsigned char channel = port->channel;	short wait=400;	while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0));	if (wait <= 0) {		printk(KERN_WARNING "ISICOM: Card found busy in kill_queue.\n");		return;	}#ifdef ISICOM_DEBUG		printk(KERN_DEBUG "ISICOM: kill_queue 0x%x.\n", queue);#endif		outw(0x8000 | (channel << card->shift_count) | 0x02 , base);	outw((queue << 8) | 0x06, base);	InterruptTheCard(base);	}#endif	/*	__KERNEL__	*/#endif	/*	ISICOM_H	*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -