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

📄 ul_hdep.h

📁 linux下的RS485的驱动 值得一看
💻 H
📖 第 1 页 / 共 2 页
字号:
  #define uld_kwt_confirm(udrv) \	uld_atomic_clear_dfl(udrv,ASK_ISR)  #define uld_kwt_test_and_set_prepared(udrv) \	uld_test_and_set_dfl(udrv,KWTRUN)  #define uld_kwt_kill(udrv) \	do { uld_atomic_set_dfl(udrv,KWTKILL); \	     uld_atomic_set_dfl(udrv,ASK_ISR); wake_up(&(udrv)->kwt_wq); } while(0)  #define uld_kwt_set_stopped(udrv) \	do { uld_atomic_clear_dfl(udrv,KWTRUN); wake_up(&(udrv)->kwt_wq); } while(0)  #define uld_kwt_wait_stopped(udrv) \  	wait_event(udrv->kwt_wq, !uld_test_dfl(udrv,KWTRUN))  #define uld_kwt_is_running(udrv) \  	uld_test_dfl(udrv,KWTRUN)	#elif defined(_WIN32)			/* must be used only at IRQL >= DISPATCH_LEVEL */  #define SCHEDULE_BH(udrv) \    do{ \	(udrv)->flag_ASK_BOTTOM=1; \	KeInsertQueueDpc(&(udrv)->bottom_dpc,NULL,NULL); \    }while(0)  #define INIT_UDRV_BH(udrv) /* not used search Dpc */  #define KILL_UDRV_BH(udrv)  #define DECLARE_UDRV_BH	/* not used search for Dpc */  PIRP xch_pending_irp(PIRP *irp_ptr, PIRP new_irp); /* for user app waitting */  void wake_and_xch_pending_irp(PIRP *irp_ptr, PIRP new_irp, NTSTATUS status);  #define uld_test_dfl(udrv,_DFL_flag) \    ((udrv)->flag_##_DFL_flag)  #define uld_set_dfl(udrv,_DFL_flag) \    ((udrv)->flag_##_DFL_flag=1)  #define uld_clear_dfl(udrv,_DFL_flag) \    ((udrv)->flag_##_DFL_flag=0)  #define uld_test_and_set_dfl(udrv,_DFL_flag) \    (InterlockedExchange(&(udrv)->flag_##_DFL_flag,1))  #define uld_atomic_test_dfl(udrv,_DFL_flag) \    ((udrv)->flag_##_DFL_flag)  #define uld_atomic_clear_dfl(udrv,_DFL_flag) \    (InterlockedExchange(&(udrv)->flag_##_DFL_flag,0))  #define uld_atomic_set_dfl(udrv,_DFL_flag) \    (InterlockedExchange(&(udrv)->flag_##_DFL_flag,1))      #define uld_kwt_wq_init(udrv) \	do { \	  KeInitializeEvent( &(udrv)->kwt_wake, NotificationEvent, FALSE); \          KeInitializeEvent( &(udrv)->kwt_stopped, NotificationEvent, TRUE); \	  uld_atomic_clear_dfl(udrv,KWTKILL); \	} while(0)  #define uld_kwt_wake(udrv) \	KeSetEvent( &(udrv)->kwt_wake, 1, FALSE)  #define uld_kwt_wait(udrv) \	KeWaitForSingleObject( &(udrv)->kwt_wake, Executive, KernelMode, FALSE, NULL)  #define uld_kwt_confirm(udrv) \	KeClearEvent(&(udrv)->kwt_wake)  #define uld_kwt_test_and_set_prepared(udrv) \	(!KeResetEvent(&(udrv)->kwt_stopped))  #define uld_kwt_kill(udrv) \	do { uld_atomic_set_dfl(udrv,KWTKILL); \	     KeSetEvent( &(udrv)->kwt_wake, 1, FALSE); } while(0)  #define uld_kwt_set_stopped(udrv) \	do { uld_atomic_clear_dfl(udrv,KWTKILL); \	     KeSetEvent( &(udrv)->kwt_stopped, 1, FALSE) ; } while(0)  #define uld_kwt_wait_stopped(udrv) \  	KeWaitForSingleObject( &(udrv)->kwt_stopped, Executive, KernelMode, FALSE, NULL)  /* KeReadStateEvent cannot be used on Win98 */  //#define uld_kwt_is_running(udrv) (!KeReadStateEvent(&(udrv)->kwt_stopped))  #define uld_kwt_is_running(udrv) \  	(STATUS_SUCCESS != KeWaitForSingleObject( &(udrv)->kwt_stopped, Executive, KernelMode, FALSE, &ULD_LARGE_INTEGER_0))  // This variable has to be initialized by RtlConvertLongToLargeInteger(0) in DriverEntry  extern LARGE_INTEGER ULD_LARGE_INTEGER_0;#else  typedef void * ulan_do_bh_data_type;  #define SCHEDULE_BH(udrv) \    do{set_bit(UL_DFLB_ASK_BOTTOM,&(udrv->flags));}while(0)  #define INIT_UDRV_BH(udrv)  #define KILL_UDRV_BH(udrv)  #define DECLARE_UDRV_BH  #define uld_test_dfl(udrv,_DFL_flag) \    test_bit(UL_DFLB_##_DFL_flag,&(udrv)->flags)  #define uld_set_dfl(udrv,_DFL_flag) \    set_bit(UL_DFLB_##_DFL_flag,&(udrv)->flags)  #define uld_clear_dfl(udrv,_DFL_flag) \    clear_bit(UL_DFLB_##_DFL_flag,&(udrv)->flags)  #define uld_test_and_set_dfl(udrv,_DFL_flag) \    test_and_set_bit(UL_DFLB_##_DFL_flag,&(udrv)->flags)  #define uld_atomic_test_dfl(udrv,_DFL_flag) \    test_bit(UL_DFLB_##_DFL_flag,&(udrv)->flags)  #define uld_atomic_clear_dfl(udrv,_DFL_flag) \    clear_bit(UL_DFLB_##_DFL_flag,&(udrv)->flags)  #define uld_atomic_set_dfl(udrv,_DFL_flag) \    set_bit(UL_DFLB_##_DFL_flag,&(udrv)->flags)#endif/* link watchdog timer definitions */#ifdef FOR_LINUX_KERNEL  void ulan_do_wd_timer(unsigned long data);  #define SCHEDULE_UDRV_WDTIM(udrv,expires) \       mod_timer(&(udrv)->wd_timer,expires);  #define INIT_UDRV_WDTIM(udrv) \    do{ \       init_timer(&(udrv)->wd_timer); \       (udrv)->wd_timer.function=ulan_do_wd_timer; \       (udrv)->wd_timer.data=(unsigned long)udrv; \    }while(0)  #define DONE_UDRV_WDTIM(udrv) \       del_timer(&(udrv)->wd_timer)  #define DECLARE_UDRV_WDTIM struct timer_list wd_timer#elif defined(_WIN32)  #define SCHEDULE_UDRV_WDTIM(udrv,expires)  #define INIT_UDRV_WDTIM(udrv)  #define DONE_UDRV_WDTIM(udrv)  #define DECLARE_UDRV_WDTIM#else  #define SCHEDULE_UDRV_WDTIM(udrv,expires) \    (udrv->wd_timer_expires=expires,\     set_bit(UL_DFLB_WDSCHED,&(udrv->flags)))  #define INIT_UDRV_WDTIM(udrv) \    (clear_bit(UL_DFLB_WDSCHED,&(udrv->flags)))  #define DONE_UDRV_WDTIM(udrv) \    (clear_bit(UL_DFLB_WDSCHED,&(udrv->flags)))  #define DECLARE_UDRV_WDTIM#endif/* compatible generic io-ports access */#ifdef _WIN32 #define ul_inb(port)	 READ_PORT_UCHAR((PVOID)(port)) #define ul_outb(port,val) WRITE_PORT_UCHAR((PVOID)(port),val)#elif defined(__DJGPP__) #include <pc.h> #define ul_inb(port)	 inportb(port) #define ul_outb(port,val) outportb(port,val)#elif defined(CONFIG_OC_UL_DRV_SYSLESS) #define ul_inb(port)	 inb(port) #define ul_outb(port,val) outb(port,val)#else #define ul_inb(port)	 inb(port) #define ul_outb(port,val) outb(val,port)#endif/*******************************************************************//* PCI support types */#if !defined(FOR_LINUX_KERNEL) && defined(UL_WITH_PCI)#ifndef PCI_ANY_ID#define PCI_ANY_ID 0xfffftypedef struct pci_device_id {  USHORT vendor;  USHORT device;  USHORT subvendor;  USHORT subdevice;  USHORT class_val,clask_mask;  ULONG  driver_data;} pci_device_id_t;#endif /*PCI_ANY_ID*/typedef struct usb_device_id {  USHORT idVendor;  USHORT idProduct;  ULONG  driver_info;} usb_device_id_t;		#endif /*!FOR_LINUX_KERNEL && UL_WITH_PCI*//*******************************************************************//* ulan file access structure */#define ULOP_MAGIC 0x754c2233struct	ul_opchain;/* uLan driver operator/user structure pointed by file private/extension */typedef struct ul_opdata {	int	magic;		/* magic number */	ul_drv	*udrv;		/* uLan driver pointer */	struct ul_opdata *opnext, *opprew; /* per udrv clients bll */  #ifdef FOR_LINUX_KERNEL	struct file *file;	/* back ptr to file */  #elif defined(_WIN32)	PFILE_OBJECT  file;    PIRP   wait_irp;		/* IRP waitting for nonempty recchain */   #endif /* _WIN32 */	ul_mem_blk *message;	/* first block of prepared message */ 	ul_data_it data;	/* ul_mem_blk data iterator */  #ifdef FOR_LINUX_KERNEL	wait_queue_head_t wqrec; /* wait queue for received packet */  #endif	struct ul_opchain *recchain; /* received messages */	struct ul_opchain *filtchain; /* filter for incoming messages */} ul_opdata;/* list of filtered mesage types also used for per operator receive queue */typedef struct	ul_opchain {	struct	ul_opchain *next; /* Cyklic BLL of received mesages */	struct	ul_opchain *prev; /* or input filters */	ul_mem_blk *message;	/* first block of waiting message */ 	unsigned stamp;		/* unigue message number */	uchar    cmd;		/* command or service */	uchar    dadr;		/* destination address */	uchar    sadr;		/* source address */	uchar    state;		/* state of filtering */} ul_opchain;#define UL_OPST_FREE	0	/* free ul_opchain block */#define UL_OPST_ONCE	1	/* wait for message only once */#define UL_OPST_FILT	2	/* filter incomming messages */#define UL_OPST_MES	3	/* message on recchain list */#define UL_OPST_FILTNEW	4	/* new filter check for repeat */typedef int ul_chip_init_fnc(ul_drv *udrv, int port, int irq, int baud,                             long baudbase, int options);typedef struct ul_chip_type_ent {	char *chip_name;	ul_chip_init_fnc *chip_init;	int chip_flags;	int chip_chans;	int chip_options;}ul_chip_type_ent;#define UL_CHIPT_RQPORT	1	/* port number requested */#define UL_CHIPT_RQIRQ	2	/* irq umber requested */#define UL_CHIPT_PCI	4	/* pci type */#define UL_CHIPT_NOPROBE 8	/* do not probe if type undefined *//*******************************************************************//* user space visible structures */typedef struct ul_msginfo {	int	dadr;		/* destignation address */	int	sadr;		/* source address */	int	cmd;		/* command/socket number */	int	flg;		/* message flags */	int	len;		/* length of frame */	unsigned stamp;		/* unigue message number */} ul_msginfo;/*******************************************************************//* ioctl definitions */#ifdef _WIN32/* 32768-65535 are reserved for use by customers.*/#define FILE_DEVICE_ULAN  0x0000A000/* function codes 2048-4095 are reserved for customers. */#define UL_IOCTL_INDEX  0xA00#define UL_IO(function) \	CTL_CODE(FILE_DEVICE_ULAN,UL_IOCTL_INDEX+function,METHOD_BUFFERED,FILE_ANY_ACCESS)#define UL_IOR(function,size) \	CTL_CODE(FILE_DEVICE_ULAN,UL_IOCTL_INDEX+function,METHOD_BUFFERED,FILE_ANY_ACCESS)#define UL_IOW(function,size) \	CTL_CODE(FILE_DEVICE_ULAN,UL_IOCTL_INDEX+function,METHOD_BUFFERED,FILE_ANY_ACCESS)#else /* _WIN32 */#define	UL_IOCTL	0x75#define UL_IO(function)        _IO(UL_IOCTL,function)#define UL_IOR(function,size)  _IOR(UL_IOCTL,function,size)#define UL_IOW(function,size)  _IOW(UL_IOCTL,function,size)#endif /* _WIN32 */#define UL_DRV_VER	UL_IO(0x10)#define UL_NEWMSG	UL_IOW(0x11,ul_msginfo)#define UL_TAILMSG	UL_IOW(0x12,ul_msginfo)#define UL_FREEMSG	UL_IO(0x13)#define UL_ACCEPTMSG	UL_IOR(0x14,ul_msginfo)#define UL_ACTAILMSG	UL_IOR(0x15,ul_msginfo)#define UL_ADDFILT	UL_IOW(0x16,ul_msginfo)#define UL_ABORTMSG	UL_IO(0x17)#define UL_REWMSG	UL_IO(0x18)#define UL_INEPOLL	UL_IO(0x19)#define UL_WAITREC	UL_IO(0x1A)#define UL_SETMYADR	UL_IO(0x1B)  /* arg = new station address */#define UL_SETIDSTR	UL_IO(0x1C)  /* arg = "C" string */#define UL_KLOGBLL	UL_IO(0x41)#define UL_STROKE	UL_IO(0x42)#define UL_DEBFLG	UL_IO(0x43)  /* arg = new debug mask */#define UL_HWTEST	UL_IO(0x44)  /* arg = test subcommand *//*******************************************************************//* define unix error codes */#ifdef _WIN32#define ENOMEM (-STATUS_NO_MEMORY)#define EPERM  (-STATUS_PRIVILEGE_NOT_HELD)#define ENOMSG (-STATUS_END_OF_FILE)#define EINVAL (-STATUS_INVALID_PARAMETER)#define ENODEV (-STATUS_INVALID_PARAMETER)#endif /* _WIN32 */#ifdef __DJGPP__#define ENOMSG ENOENT#endif /* _WIN32 *//*******************************************************************//* debug support *//* initial value for uld_debug_flg */#ifndef ULD_DEBUG_DEFAULT   #ifndef UL_DRV_IN_LIB    #define ULD_DEBUG_DEFAULT (0x01|0x10|0x40)  #else    #define ULD_DEBUG_DEFAULT (0x01|0x40)  #endif#endif /* ULD_DEBUG_DEFAULT */#ifdef FOR_LINUX_KERNEL #define UL_PRINTF printk#elif defined(_WIN32) #define UL_PRINTF DbgPrint#elif defined(UL_DRV_IN_LIB) #ifdef UL_LOG_ENABLE   int uld_printk(const char *format, ...) __attribute__((format(printf,1,2)));   void uld_printk_flush(void);   #define UL_PRINTF uld_printk #else   #define uld_printk_flush(x)   #define UL_PRINTF(x,args...)  #endif#else #define UL_PRINTF printf#endif#ifdef UL_LOG_ENABLE #define LOG_FATAL	if(uld_debug_flg&0x01) UL_PRINTF #define LOG_CHIO	if(uld_debug_flg&0x02) UL_PRINTF #define LOG_IRQ	if(uld_debug_flg&0x04) UL_PRINTF #define LOG_MESSAGES	if(uld_debug_flg&0x08) UL_PRINTF #define LOG_FAILS	if(uld_debug_flg&0x10) UL_PRINTF #define LOG_SEQNUM	if(uld_debug_flg&0x20) UL_PRINTF #define LOG_PORTS	if(uld_debug_flg&0x40) UL_PRINTF #define LOG_FILEIO	if(uld_debug_flg&0x80) UL_PRINTF #define LOG_FILTS	if(uld_debug_flg&0x100) UL_PRINTF #define LOG_IAC	if(uld_debug_flg&0x200) UL_PRINTF #define LOG_MSK_DISABLE  0x10000   /* for use with UL_DRV_IN_LIB */#else #define LOG_FATAL(x,args...) #define LOG_CHIO(x,args...) #define LOG_IRQ(x,args...) #define LOG_MESSAGES(x,args...) #define LOG_FAILS(x,args...) #define LOG_SEQNUM(x,args...) #define LOG_PORTS(x,args...) #define LOG_FILEIO(x,args...) #define LOG_FILTS(x,args...) #define LOG_IAC(x,args...)#endif#ifndef KERN_CRIT  #define KERN_CRIT#endif#ifndef KERN_ERR  #define KERN_ERR#endif#ifndef KERN_WARNING  #define KERN_WARNING#endif#ifndef KERN_INFO  #define KERN_INFO#endif#if (defined(CPU)&&(CPU>=586)||\     defined(CONFIG_X86_TSC))&&!defined(_WIN32) #define RDTSC \   ({unsigned long l,h;\    asm volatile ("rdtsc" : "=a" (l), "=d" (h));\    l;\   })#else #define RDTSC 0#endif#endif /* _LINUX_UL_HDEP_H */

⌨️ 快捷键说明

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