Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

attach(9E)

probe(9E)

scsi_slave(9F)

scsi_unprobe(9F)

scsi_unslave(9F)

scsi_device(9S)

scsi_inquiry(9S)

scsi_probe(9F)

NAME

scsi_probe − utility for probing a scsi device

SYNOPSIS

#include <sys/scsi/scsi.h>

int scsi_probe(struct scsi_device ∗devp, int (∗waitfunc)());

INTERFACE LEVEL

Solaris DDI specific (Solaris DDI). 

ARGUMENTS

devp Pointer to a scsi_device(9S) structure

waitfunc NULL_FUNC or SLEEP_FUNC

DESCRIPTION

scsi_probe() determines whether a target/lun is present and sets up the scsi_device structure with inquiry data. 

scsi_probe() uses the SCSI Inquiry command to test if the device exists.  It may retry the Inquiry command as appropriate.  If scsi_probe() is successful, it will allocate space for the scsi_inquiry structure and assign the address to the sd_inq member of the scsi_device(9S) structure.  scsi_probe() will then fill in this scsi_inquiry(9S) structure and return SCSIPROBE_EXISTS. 

scsi_unprobe(9F) is used to undo the effect of scsi_probe(). 

If the target is a non-CCS device, SCSIPROBE_NONCCS will be returned. 

waitfunc indicates what the allocator routines should do when resources are not available; the valid values are:

NULL_FUNC Do not wait for resources.  Return SCSIPROBE_NOMEM or SCSIPROBE_FAILURE

SLEEP_FUNC
Wait indefinitely for resources.

RETURN VALUES

scsi_probe() returns:

SCSIPROBE_BUSY Device exists but is currently busy. 

SCSIPROBE_EXISTS Device exists and inquiry data is valid. 

SCSIPROBE_FAILURE Polled command failure. 

SCSIPROBE_NOMEM No space available for structures. 

SCSIPROBE_NONCCS Device exists but inquiry data is not valid. 

SCSIPROBE_NORESP Device does not respond to an INQUIRY. 

CONTEXT

scsi_probe() is normally called from the target driver’s probe(9E) or attach(9E) routine.  If waitfunc is SLEEP_FUNC, then this routine may only be called from user-level code.  Otherwise, it may be called from either user or interrupt level. 

EXAMPLE

    switch (scsi_probe(devp, NULL_FUNC)) {
    default:
    case SCSIPROBE_NORESP:
    case SCSIPROBE_NONCCS:
    case SCSIPROBE_NOMEM:
    case SCSIPROBE_FAILURE:
    case SCSIPROBE_BUSY:
            break;
     case SCSIPROBE_EXISTS:
            switch (devp->sd_inq->inq_dtype) {
            case DTYPE_DIRECT:
                    rval = DDI_PROBE_SUCCESS;
                    break;
            case DTYPE_RODIRECT:
                    rval = DDI_PROBE_SUCCESS;
                    break;
            case DTYPE_NOTPRESENT:
            default:
                    break;
            }
    }
    scsi_unprobe(devp);

SEE ALSO

attach(9E), probe(9E), scsi_slave(9F), scsi_unprobe(9F), scsi_unslave(9F), scsi_device(9S), scsi_inquiry(9S)

ANSI Small Computer System Interface-2 (SCSI-2)

Writing Device Drivers

NOTES

A waitfunc function other than NULL_FUNC or SLEEP_FUNC is not supported and may have unexpected results. 

SunOS 5.5/SPARC  —  Last change: 24 Feb 1994

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026