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

📄 mode.h

📁 操作系统SunOS 4.1.3版本的源码
💻 H
字号:
#ident	"@(#)mode.h 1.1 92/07/30 SMI"/* * Copyright (c) 1989, 1990 by Sun Microsystems Inc. */#ifndef	_scsi_generic_mode_h#define	_scsi_generic_mode_h/* * * Defines and Structures for SCSI Mode Sense/Select data - generic * *//* * Structures and defines common for all device types *//* * Mode Sense/Select Header. * * Mode Sense/Select data consists of a header, followed by zero or more * block descriptors, followed by zero or more mode pages. * */struct mode_header {	u_char length;		/* number of bytes following */	u_char medium_type;	/* device specific */	u_char device_specific;	/* device specfic parameters */	u_char bdesc_length;	/* length of block descriptor(s), if any */};#define	MODE_HEADER_LENGTH	(sizeof (struct mode_header))/* * Block Descriptor. Zero, one, or more may normally follow the mode header. * * The density code is device specific. * * The 24-bit value described by blks_{hi, mid, lo} describes the number of * blocks which this block descriptor applies to. A value of zero means * 'the rest of the blocks on the device'. * * The 24-bit value described by blksize_{hi, mid, lo} describes the blocksize * (in bytes) applicable for this block descriptor. For Sequential Access * devices, if this value is zero, the block size will be derived from * the transfer length in I/O operations. * */struct block_descriptor {	u_char density_code;	/* device specific */	u_char blks_hi;		/* hi  */	u_char blks_mid;	/* mid */	u_char blks_lo;		/* low */	u_char reserved;	/* reserved */	u_char blksize_hi;	/* hi  */	u_char blksize_mid;	/* mid */	u_char blksize_lo;	/* low */};/* * Define a macro to take an address of a mode header to the address * of the nth (0..n) block_descriptor, or NULL if there either aren't any * block descriptors or the nth block descriptor doesn't exist. */#define	BLOCK_DESCRIPTOR_ADDR(mhdr, bdnum) \	((mhdr)->bdesc_length && ((unsigned)(bdnum)) < \	((mhdr)->bdesc_length/(sizeof (struct block_descriptor)))) ? \	((struct block_descriptor *)(((u_long)(mhdr))+MODE_HEADER_LENGTH+ \	((bdnum) * sizeof (struct block_descriptor)))) : \	((struct block_descriptor *) 0)/* * Mode page header. Zero or more Mode Pages follow either the block * descriptors (if any), or the Mode Header. * * The 'ps' bit must be zero for mode select operations. * */struct mode_page {	u_char	ps	:1,	/* 'Parameter Saveable' bit */			:1,	/* reserved */		code	:6;	/* page code number */	u_char	length;		/* length of bytes to follow */	/*	 * Mode Page specific data follows right after this...	 */};/* * Define a macro to retrieve the first mode page. Could be more * general (for multiple mode pages). */#define	MODE_PAGE_ADDR(mhdr, type)	\	((type *)(((u_long)(mhdr))+MODE_HEADER_LENGTH+(mhdr)->bdesc_length))/* * Page codes, as defined in the proposed SCSI-2 specification, * Revision 10c, 3/9/90. * * Page codes follow the following backwards compatible specification: * *	Code Value(s)		What *	---------------------------------------------------------------------- *	0x00			Vendor Unique (does not require page format) * *	0x02, 0x09, 0x0A	pages for all Device Types * *	0x01, 0x03-0x08,	pages for specific Device Type *	0x0B-0x1F * *	0x20-0x3E		Vendor Unique (requires page format) * *	0x3F			Return all pages (valid for Mode Sense only) * *//* * Page codes and page length values (all device types) */#define	MODEPAGE_DISCO_RECO	0x02#define	MODEPAGE_PDEVICE	0x09#define	MODEPAGE_CTRL_MODE	0x0A#define	MODEPAGE_ALLPAGES	0x3F/* * Mode Select/Sense page structures (for all device types) *//* * Disconnect/Reconnect Page */struct mode_disco_reco {	struct	mode_page mode_page;	/* common mode page header */	u_char	buffer_full_ratio;	/* write, how full before reconnect? */	u_char	buffer_empty_ratio;	/* read, how full before reconnect? */	u_short	bus_inactivity_limit;	/* how much bus quiet time for BSY- */	u_short	disconect_time_limit;	/* min to remain disconnected */	u_short	connect_time_limit;	/* min to remain connected */	u_short	max_burst_size;		/* max data burst size */	u_char			: 6,			dtdc	: 2;	/* data transfer disconenct control */	u_char	reserved[3];};#define	DTDC_DATADONE	0x01		/*					 * Target may not disconnect once					 * data transfer is started until					 * all data successfully transferred.					 */#define	DTDC_CMDDONE	0x03		/*					 * Target may not disconnect once					 * data transfer is started until					 * command completed.					 *//* * Peripheral Device Page */struct mode_pdevice {	struct	mode_page mode_page;	/* common mode page header */	u_short	if_ident;		/* interface identifier */	u_char	reserved[4];		/* reserved */	u_char	vendor_uniqe[1];	/* vendor unique data */};#define	PDEV_SCSI	0x0000		/* scsi interface */#define	PDEV_SMD	0x0001		/* SMD interface */#define	PDEV_ESDI	0x0002		/* ESDI interface */#define	PDEV_IPI2	0x0003		/* IPI-2 interface */#define	PDEV_IPI3	0x0004		/* IPI-3 interface *//* * Control Mode Page */struct mode_control {	struct	mode_page mode_page;	/* common mode page header */	u_char			: 7,			rlec	: 1;	/* Report Log Exception bit */	u_char		que_mod	: 4,	/* Queue algorithm modifier */				: 2,			que_err	: 1,	/* Queue error */			qdisable: 1;	/* Queue disable */	u_char		eeca	: 1,				: 4,			raenp	: 1,			uaaenp	: 1,			eanp	: 1;	u_char	reserved;	u_short	ready_aen_holdoff;};#define	CTRL_QMOD_RESTRICT	0x0#define	CTRL_QMOD_UNRESTRICT	0x1/* * Include known generic device specific mode definitions and structures */#include <scsi/generic/dad_mode.h>/* * Include implementation specific mode information */#include <scsi/impl/mode.h>#endif	/* !_scsi_generic_mode_h */

⌨️ 快捷键说明

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