Coherent4.2.10/include/sys/scsiwork.h
/* (-lgl
* Coherent 386 release 4.2
* Copyright (c) 1982, 1993 by Mark Williams Company.
* All rights reserved. May not be copied without permission.
* For copying permission and licensing info, write licensing@mwc.com
-lgl) */
#ifndef __SYS_SCSIWORK_H__
#define __SYS_SCSIWORK_H__
/*
* Common SCSI portions of Adaptec and Seagate device drivers.
*/
#include <kernel/__buf.h>
#define MAX_SCSI_ID 8
#define MAX_LUN 4 /* limited by minor device number */
/*
* drive_info contains the "per drive" flags
*/
#define D_DISK 0x01 /* disk-type device (random) */
#define D_TAPE 0x02 /* tape-type device (sequential) */
#define D_PRINTER 0x04 /* printer-type device */
#define D_PROCESSOR 0x08 /* processor-type device */
#define D_REMOVEABLE 0x10 /* media can be changed */
#define D_WORM 0x20 /* WORM-type characteristics */
/*
* Per disk controller data.
* Only one per host adapter; no more, no less.
*/
struct scsi_work {
struct scsi_work *sw_actf; /* Link to first */
struct scsi_work *sw_actl; /* Link to last */
__buf_t * sw_bp; /* block request */
long sw_bno;
char sw_drv; /* 000sssll s=SCSI_ID l=LUN */
char sw_type;
char sw_retry;
};
typedef struct scsi_work scsi_work_t;
#define ScmdTESTREADY 0x00
#define ScmdREZERO 0x01
#define ScmdREQUESTSENSE 0x03
#define ScmdINQUIRY 0x12
#define ScmdMODESENSE 0x1A
#define ScmdREADCAPACITY 0x25
#define ScmdREADEXTENDED 0x28
#define ScmdWRITEXTENDED 0x2A
struct scsi_cmd {
long block, buffer;
short blklen, buflen;
char unit; /* 000sssll s=SCSI_ID l=LUN */
char cmd;
};
typedef struct scsi_cmd scsi_cmd_t;
#define G0CMDLEN 6 /* Group 0 commands are 6 bytes long */
#define G1CMDLEN 10 /* Group 1 commands are 10 bytes long */
#define SENSELEN 22 /* number of bytes returned w/ req sense */
#define INQUIRYLEN 54 /* number of bytes returned w/ inquiry */
#define MODESENSELEN 92 /* number of bytes returned w/ mode sense */
#define READCAPLEN 8 /* number of bytes returned w/read capacity */
/* Message types */
#define MSG_CMD_CMPLT 0x00 /* Command Complete */
#define MSG_SAVE_DPTR 0x02 /* Save SCSI data pointer */
#define MSG_RSTOR_DPTR 0x03 /* Restore SCSI pointers */
#define MSG_DISCONNECT 0x04 /* Target is about to disconnect */
#define MSG_ABORT 0x06 /* End the current SCSI bus cycle */
#define MSG_NOP 0x08 /* no-op */
#define MSG_DEV_RESET 0x0C /* Bus Device Reset */
#define MSG_IDENTIFY 0x80 /* Identify, with no Disconnect */
#define MSG_IDENT_DC 0xC0 /* Identify, with Disconnect allowed */
#define CS_GOOD 0x00 /* Command Status from the drive */
#define CS_CHECK 0x02
#define CS_BUSY 0x08
#define CS_RESERVED 0x18
/*
* Information Transfer Phase masks -
* setting of RS_MESSAGE, RS_I_O, and RS_CTRL_DATA determines which of six
* possible info transfer phases is occurring.
*/
#define XP_MSG_IN (RS_MESSAGE | RS_I_O | RS_CTRL_DATA)
#define XP_MSG_OUT (RS_MESSAGE | RS_CTRL_DATA)
#define XP_STAT_IN ( RS_I_O | RS_CTRL_DATA)
#define XP_CMD_OUT ( RS_CTRL_DATA)
#define XP_DATA_IN ( RS_I_O )
#define XP_DATA_OUT ( 0)
#define VTOP2(a1, a2) vtop(a1,a2)
typedef struct {
unsigned int ncyl;
unsigned int nhead;
unsigned int nspt;
} _drv_parm_t;
#if _KERNEL
extern char _aha_drive_info[MAX_SCSI_ID * MAX_LUN];
#endif
#endif /* ! defined (__SYS_SCSIWORK_H__) */