Annotation of XNU/iokit/IOKit/scsi/scsi-parallel/IOSCSIParallelDevice.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*
                     23:  *
                     24:  *     IOSCSIParallelDevice.h
                     25:  *
                     26:  *
                     27:  *     Methods in this header provide information about the SCSI device 
                     28:  *      the device client driver is submitting the SCSICommand(s) to.
                     29:  *
                     30:  *     Note: SCSICommand(s) are allocated and freed by methods in this class. 
                     31:  *            The remaining methods to setup and submit SCSICommands are defined in
                     32:  *            IOSCSICommand.h
                     33:  */
                     34:  
                     35: #ifndef _IOSCSIPARALLELDEVICE_H
                     36: #define _IOSCSIPARALLELDEVICE_H
                     37: 
                     38: class IOSCSIParallelController;
                     39:  
                     40: class IOSCSIParallelDevice : public IOSCSIDevice
                     41: {
                     42:     OSDeclareDefaultStructors(IOSCSIParallelDevice)
                     43:     
                     44:     friend class IOSCSIParallelCommand;
                     45:     friend class IOSCSIParallelController;
                     46: 
                     47: /*------------------Methods provided to IOCDBDevice clients-----------------------*/
                     48: public:
                     49: 
                     50:     /*
                     51:      * Allocate a CDB Command
                     52:      */
                     53:      IOCDBCommand              *allocCommand( IOCDBDevice *deviceType, UInt32 clientDataSize = 0 );
                     54: 
                     55:     /*
                     56:      * Abort all outstanding commands on this device
                     57:      */
                     58:      void                      abort();
                     59:     
                     60:     /*
                     61:      * Reset device (also aborts all outstanding commands)
                     62:      */
                     63:      void                      reset();
                     64: 
                     65:     /*
                     66:      * Obtain information about this device
                     67:      */
                     68:      void                      getInquiryData( void    *inquiryBuffer, 
                     69:                                                 UInt32  inquiryBufSize, 
                     70:                                                 UInt32  *inquiryDataSize );
                     71: 
                     72: /*------------------Additional methods provided to IOSCSIDevice clients-----------------------*/
                     73: public:
                     74:     /*
                     75:      * Allocate a SCSICommand
                     76:      */
                     77:      IOSCSICommand             *allocCommand( IOSCSIDevice *deviceType, UInt32 clientDataSize = 0 );
                     78: 
                     79:     /*
                     80:      * Target management commands
                     81:      */
                     82:      bool                      setTargetParms( SCSITargetParms *targetParms );
                     83:      void                      getTargetParms( SCSITargetParms *targetParms );
                     84: 
                     85:     /* 
                     86:      * Lun management commands
                     87:      */
                     88:      bool                      setLunParms( SCSILunParms *lunParms );
                     89:      void                      getLunParms( SCSILunParms *lunParms );
                     90: 
                     91:     /* 
                     92:      * Queue management commands
                     93:      */
                     94:     void                       holdQueue( UInt32 queueType );
                     95:     void                       releaseQueue( UInt32 queueType );
                     96:     void                       flushQueue( UInt32 queueType, IOReturn rc );
                     97:     void                       notifyIdle(  void *target = 0, CallbackFn callback = 0, void *refcon = 0 );
                     98: 
                     99:     /* 
                    100:      *
                    101:      */
                    102:      IOWorkLoop                        *getWorkLoop() const; 
                    103: 
                    104: /*------------------Methods private to the IOSCSIDevice class----------------*/
                    105: public:
                    106:     bool                       open(  IOService *forClient, IOOptionBits options = 0, void *arg = 0 );
                    107:     void                       close( IOService *forClient, IOOptionBits options = 0 );
                    108:     IOReturn                   message( UInt32 clientMsg, IOService *forProvider, void *forArg = 0 );
                    109:     bool                       init( IOSCSIParallelController *forController, SCSITargetLun forTargetLun );
                    110:     void                       free();
                    111: 
                    112:     bool                       matchPropertyTable( OSDictionary * table );
                    113:     IOService                  *matchLocation( IOService * client );
                    114: 
                    115: private:
                    116:     void                       submitCommand(  UInt32 cmdType, IOSCSIParallelCommand *scsiCmd, UInt32 cmdSequenceNumber = 0 );
                    117:     void                       receiveCommand( UInt32 cmdType, IOSCSIParallelCommand *scsiCmd, UInt32 cmdSequenceNumber, void *p3 );
                    118: 
                    119:     IOReturn                   probeTargetLun();
                    120:     void                       setupTarget();
                    121: 
                    122:     void                       dispatchRequest();
                    123:     bool                       dispatch( UInt32 *dispatchAction );
                    124: 
                    125:     void                       abortAllCommands( SCSICommandType abortCmdType );
                    126: 
                    127:     IOSCSIParallelCommand       *findCommandWithNexus( UInt32 tagValue );
                    128: 
                    129:     void                       abortCommand( IOSCSIParallelCommand *scsiCmd, UInt32 cmdSequenceNumber );
                    130:     void                       completeCommand( IOSCSIParallelCommand *cmd );
                    131: 
                    132:     void                       checkIdleNotify();
                    133: 
                    134:     void                       executeCommandDone(  IOSCSIParallelCommand *scsiCmd );
                    135:     void                       executeReqSenseDone( IOSCSIParallelCommand *scsiCmd );
                    136:     void                       abortCommandDone(    IOSCSIParallelCommand *scsiCmd );
                    137:     void                       cancelCommandDone(   IOSCSIParallelCommand *scsiCmd );
                    138:     void                       finishCommand(       IOSCSIParallelCommand *scsiCmd );
                    139: 
                    140:     OSDictionary               *createProperties();
                    141:     bool                       addToRegistry( OSDictionary *propTable, OSObject *regObj, char *key );
                    142:     void                       stripBlanks( char *d, char *s, UInt32 l );
                    143: 
                    144:     bool                       checkDeviceQueue( UInt32 *dispatchAction );
                    145:     void                       checkNegotiate( IOSCSIParallelCommand *scsiCmd );
                    146:     bool                       checkTag( IOSCSIParallelCommand *scsiCmd );
                    147:     bool                       checkReqSense();
                    148:     bool                       checkAbortQueue();
                    149:     void                       checkCancelQueue();
                    150: 
                    151:     bool                       allocTag( UInt32 *tagId );
                    152:     void                       freeTag( UInt32 tagId );
                    153:     
                    154:     void                       timer();
                    155:     
                    156:     void                       resetOccurred( SCSIClientMessage clientMsg );
                    157:     void                       resetComplete();
                    158: 
                    159:     void                       rescheduleCommand( IOSCSIParallelCommand *scsiCmd );
                    160: 
                    161:     void                       addCommand( queue_head_t *list, IOSCSIParallelCommand *scsiCmd );
                    162:     void                       stackCommand( queue_head_t *list, IOSCSIParallelCommand *scsiCmd );
                    163:     void                       deleteCommand( queue_head_t *list, IOSCSIParallelCommand *scsiCmd, IOReturn rc = kIOReturnSuccess );
                    164:     IOSCSIParallelCommand      *checkCommand( queue_head_t *list );
                    165:     IOSCSIParallelCommand      *getCommand( queue_head_t *list );
                    166:     void                       moveCommand(    queue_head_t            *fromList, 
                    167:                                                queue_head_t            *toList, 
                    168:                                                IOSCSIParallelCommand   *scsiCmd, 
                    169:                                                IOReturn                rc = kIOReturnSuccess );
                    170:     void                       moveAllCommands( queue_head_t *fromList, queue_head_t *toList, IOReturn rc = kIOReturnSuccess );
                    171:     bool                       findCommand( queue_head_t *list, IOSCSIParallelCommand *findScsiCmd );
                    172:     void                       purgeAllCommands( queue_head_t *list, IOReturn rc );
                    173: 
                    174:     IOSCSIParallelCommand      *allocCommand( IOSCSIParallelDevice *deviceType, UInt32 clientDataSize = 0 );
                    175: 
                    176: private:
                    177:     queue_chain_t              nextDevice;
                    178: 
                    179:     SCSITargetLun              targetLun;
                    180:     
                    181:     SCSITarget                 *target;
                    182: 
                    183:     IOSCSIParallelController   *controller;
                    184:     IOCommandGate               *deviceGate;    
                    185: 
                    186:     IOService                  *client;
                    187:     IORWLock *                 clientSem;
                    188: 
                    189:     queue_head_t               deviceList;
                    190:     queue_head_t               bypassList;
                    191:     queue_head_t               activeList;
                    192:     queue_head_t               abortList;
                    193:     queue_head_t               cancelList;
                    194:     
                    195:     SCSICommandType            abortCmdPending;
                    196: 
                    197:     UInt32                     reqSenseState;
                    198:     UInt32                     abortState;
                    199:     UInt32                     cancelState;
                    200:     UInt32                     negotiateState;
                    201:     
                    202:     IOSCSIParallelCommand      *reqSenseOrigCmd;
                    203: 
                    204:     IOSCSIParallelCommand      *reqSenseCmd;
                    205:     IOSCSIParallelCommand      *abortCmd;
                    206:     IOSCSIParallelCommand      *cancelCmd;
                    207:     IOSCSIParallelCommand       *probeCmd;
                    208: 
                    209:     bool                       normalQHeld;
                    210:     bool                       bypassQHeld;
                    211: 
                    212:     bool                       idleNotifyActive;
                    213:     CallbackFn                 idleNotifyCallback;
                    214:     void                       *idleNotifyTarget;
                    215:     void                       *idleNotifyRefcon;    
                    216: 
                    217:     UInt32                     commandCount;
                    218:     UInt32                     commandLimit;
                    219:     UInt32                     commandLimitSave;
                    220: 
                    221:     bool                       disableDisconnect;
                    222: 
                    223:     UInt32                     *tagArray;
                    224: 
                    225:     SCSILunParms               lunParmsNew;
                    226:     
                    227:     SCSIInquiry                        *inquiryData;
                    228:     UInt32                     inquiryDataSize;
                    229: 
                    230:     void                       *devicePrivateData;
                    231: };
                    232: 
                    233: #define kIOSCSIParallelDevice  ((IOSCSIParallelDevice *)0)
                    234: 
                    235: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.