Files
Arquivotheca.SunOS-4.1.4/sys/scsi/conf/autoconf.h
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

131 lines
4.3 KiB
C

/* @(#)autoconf.h 1.1 of 10/31/94 */
/*
* Copyright (c) 1988, 1989 Sun Microsystems, Inc.
*/
#ifndef _scsi_conf_autoconf_h
#define _scsi_conf_autoconf_h
/*
* SCSI subsystem options - global word of options are available
*
* bits 0-2 are reserved for debugging/informational level
* bit 3 reserved for a global disconnect/reconnect switch
* bit 4 reserved for a global linked command capability switch
* bit 5 reserved for a global synchronous SCSI capability switch
*
* the rest of the bits are reserved for future use
*
*/
#define SCSI_DEBUG_TGT 0x1 /* debug statements in target drivers */
#define SCSI_DEBUG_LIB 0x2 /* debug statements in library */
#define SCSI_DEBUG_HA 0x4 /* debug statements in host adapters */
#define SCSI_OPTIONS_DR 0x8 /* Global disconnect/reconnect */
#define SCSI_OPTIONS_LINK 0x10 /* Global linked commands */
#define SCSI_OPTIONS_SYNC 0x20 /* Global synchronous capability */
#define SCSI_OPTIONS_PARITY 0x40 /* Global parity support */
/*
* SCSI configuration table- emitted by config(8) when a configuration
* file specifies a SCSI device located on a SCSI bus and to be found
* in `arch -k`/{CONFIGURATION-NAME}/ioconf.c.
*/
struct scsi_conf {
#ifdef OPENPROMS
struct dev_ops *haops; /* Host Adapter device driver */
struct dev_ops *tgtops; /* Target device driver */
#else OPENPROMS
struct mb_driver *hadriver; /* Host Adapter device driver */
struct mb_driver *tgtdriver; /* Target device driver */
#endif OPENPROMS
char *tname; /* Target device name (e.g. "sd") */
char *hname; /* Host Adapter name (e.g. "si") */
char hunit; /* Host Adapter unit # (e.g. "si0") */
char target; /* SCSI Target address */
char lun; /* SCSI Lun on Target */
char dunit; /* UNIX unit # (e.g. "sd0") */
char busid; /* system SCSI bus number */
};
/*
* SCSI autoconfiguration definitions.
*
* The library routine scsi_slave() is provided as a service to target
* driver to check for bare-bones existence of a SCSI device. It is
* defined as:
*
* int scsi_slave(devp, canwait)
* struct scsi_device *devp;
* int canwait;
*
* where devp is the scsi_device structure passed to the target driver
* at probe time, and where canwait declares whether scsi_slave() can
* sleep awaiting resources or must return an error if it cannot get
* resources (canwait == 1 implies that scsi_slave() can sleep- although
* does not fully guarantee that resources will become available as
* some are allocated from the iopbmap which may just be completely
* full). In the process of determining the existence of a SCSI device,
* scsi_slave will allocate space for the sd_inq field of the scsi_device
* pointed to by devp (if it is non-zero upon entry).
*
* scsi_slave() attempts to follow this sequence in order to determine
* the existence of a SCSI device:
*
* Attempt to send a TEST UNIT READY command to the device.
*
* If that gets a check condition, run a non-extended
* REQUEST SENSE command. Ignore the results of it, as
* a the non-extended sense information contains only
* Vendor Unique error codes (the idea is that during
* probe time the nearly invariant first command to a
* device will get a Check Condition, and the real reason
* is that the device wants to tell you that a SCSI bus
* reset just occurred.
*
* Attempt to allocate an inquiry buffer out of the iopbmap and
* run an INQUIRY command (with response data format 0 set).
*
* If that gets a check condition, run another
* non-extended REQUEST SENSE command.
*
* returns one of the integer values as defined below:
*/
#define SCSIPROBE_EXISTS 0 /* device exists, inquiry data valid */
#define SCSIPROBE_NONCCS 1 /* device exists, no inquiry data */
#define SCSIPROBE_NORESP 2 /* device didn't respond */
#define SCSIPROBE_NOMEM 3 /* no space available for structures */
#define SCSIPROBE_FAILURE 4 /* polled command failure- unspecified */
/*
* Number of commands per device to allocate for.
*/
#define NCMDS_PER_DEV 3
/*
* Kernel references
*/
#ifdef KERNEL
extern struct scsi_conf scsi_conf[];
extern int scsi_options, nscsi_devices;
extern struct scsi_device *sd_root;
extern int scsi_spl;
extern int scsi_ncmds_per_dev, scsi_ncmds;
extern int scsi_reset_delay;
extern void scsi_config();
extern int scsi_slave();
extern void scsi_addcmds();
extern int scsi_add_device();
#endif KERNEL
#endif _scsi_conf_autoconf_h