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

📄 pkt_wrapper.h

📁 操作系统SunOS 4.1.3版本的源码
💻 H
字号:
/*	@(#)pkt_wrapper.h 1.1 92/07/30 SMI	*/#ifndef	_scsi_impl_pktwrapper_h#define	_scsi_impl_pktwrapper_h/* * Copyright (c) 1989 Sun Microsystems, Inc. *//* * Implementation specific SCSI definitions for wrapping around * the generic scsi command packet. */#include	<scsi/scsi_types.h>struct dataseg {	u_long	d_base;		/* base of current segment */	u_long	d_count;	/* length of current segment */	struct dataseg *d_next;	/* pointer to next segment */};struct scsi_cmd {	struct scsi_pkt		cmd_pkt;	/* the generic packet itself */	caddr_t			cmd_cdbp;	/* active command pointer */	caddr_t			cmd_scbp;	/* active status pointer */	u_long			cmd_data;	/* active data 'pointer' */	u_long			cmd_saved_data;	/* saved data 'pointer' */	struct dataseg		cmd_mapseg;	/* mapped in data segment */	struct dataseg		cmd_subseg;	/* initial data sub-segment */	struct dataseg		*cmd_cursubseg;	/* current data sub-segment */	u_long			cmd_timeout;	/* command timeout */	u_short			cmd_flags;	/* private flags */	u_char			cmd_scblen;	/* length of scb */	u_char			cmd_scb[STATUS_SIZE];	/* 3 byte scb */	u_char			cmd_cdblen;	/* length of cdb */	u_char			cmd_cdb[CDB_SIZE];	/* 'generic' Sun cdb */};/* * compatibility defines- if only one data segment is mapped in (default case) * this will suffice. */#define	cmd_mapping	cmd_mapseg.d_base#define	cmd_dmacount	cmd_mapseg.d_count/* * A note about dataseg structures: * *	The cmd_mapseg is the beginning of a list of mapped in memory *	(mapped in by dma allocation routines). This mapping is what *	is appropriate for I/O devices on a given architecture. For *	most current Sun platforms, this will be a single mapping *	established in DVMA space. * *	The cmd_subseg and cmd_cursubseg tags are for use by the host *	adapter to keep track of data transfers to and from the memory *	mappings described in cmd_mapseg. If a SCSI target uses the *	MODIFY DATA POINTER message, or some combination of the SAVE *	DATA POINTER/RESTORE POINTERS messages, this mechanism allows *	the host adapter to keep track of whether data was retransmitted *	by the target, or whether the host adapter picked up or sent only *	bits and pieces of the data. *	 * A note about the data 'pointers': * *	In this implementation, these pointers are actually  *	DVMA mapping cookies- that is, they specify the mapping *	register and offset from the beginning of DVMA. On many *	baseline Sun machines DVMA hardware refers to specific set *	of mapping registers that translate Multibus or VME dma *	requests (in the range of 0 to 256kb or 0 to 1 mb resp.) *	into physical OBMEM references. On those machines, the *	SunOS kernel maintains alias addressing of the same *	physical locations by wiring down the same amount of space *	that can then be referenced through the kernel addresses *	DVMA[0..mmu_ptob(ndvmapages)]. On some other Sun machines, *	the actual hardware implementation may be different (i.e., *	there is no actual specific extra hardware- the dma *	requests may actually use the same MMU mapping as the *	kernel), but for all Sun machines to date, there is *	always some meaning to DVMA. Each specific host adapter, *	if it assumes dma information (i.e., data 'pointers' *	here) is a DVMA mapping cookie, can provide the appropriate *	and specific translation to that required by its own *	dma engine. * * * A note about the cmd_cdb && cmd_scb structures: * * 	If the command allocation requested exceeds the size of c_cdb, *	the cdb will be allocated outside this structure (via kmem_alloc) *	The same applies to cmd_scb. * *//* * These are the defined flags for this structure */#define	CFLAG_DMAVALID	0x01		/* dma mapping valid */#define	CFLAG_DMASEND	0x02		/* data is going 'out' */#define	CFLAG_DMAKEEP	0x04		/* don't unmap on dma free */#define	CFLAG_CMDDISC	0x10		/* cmd currently disconnected */#define	CFLAG_WATCH	0x20		/* watchdog time for this command */#define	CFLAG_CDBEXTERN	0x40		/* cdb kmem_alloc'd */#define	CFLAG_SCBEXTERN	0x80		/* scb kmem_alloc'd */#define	CFLAG_CMDPROXY	0x100		/*					 * cmd is a 'proxy' command -					 * i.e., run by the host adapter					 * for specific message reasons					 * (e.g., ABORT or RESET operations)					 */#define	CFLAG_NEEDSEG	0x1000		/*					 * Need a new dma segment on next					 * data phase.					 */#ifdef	KERNELextern int scsi_chkdma();#endif#endif	_scsi_impl_pktwrapper_h

⌨️ 快捷键说明

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