V10/sys/sys/scsi.h

#define	SCSICMD		10	/* max cmd size */
#define	SCSIDATA	(4*1024)
#define	SCSIRET		36	/* includes csr&per */
#define	SCSITOHOST	0x10000

#define	OPEN	1		/* somebody has the device open */
#define	USED	2		/* ever opened */
#define	NEXTWR	4		/* next cmd must be write */
#define	DONE	8		/* io done */
#define	PEND	16		/* we expect an interrupt */
#define	ERRSNSE	32		/* do sense on error */

struct bag
{
	struct { short msg_len; short pad; struct mscmd msg; } cmd;
	struct { short msg_len; short pad; struct msend msg; } rsp;
	struct {
		short ca_cmdint;
		short ca_rspint;
		long ca_rspdsc[1];
		long ca_cmddsc[1];
	} ca;
};
/*
	US design
*/
struct scsipkt
{
	long cmd;
	long data;
	long status;
	long count;
	short bus_id;
};
struct playpen
{
	struct scsipkt upkt;		/* must be first */
	unsigned char cmd[SCSICMD];
	unsigned char data[SCSIDATA];
	unsigned char status[SCSIRET];
};

struct scsi {
	int flag;
	struct udadevice *addr;
	uaddr_t u1, u2;
	ubm_t ub1, ub2;
	struct buf *b1, *b2;
	struct bag *junk;
	unsigned char *data;
	short sa;
	short timeout;
	unsigned long tran_id;
	char status[SCSIRET];
	struct scsireg *reg;
	struct playpen pp;
};