|
|
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: * IOSCSICommand.h
25: *
26: */
27: #ifndef _IOSCSICOMMAND_H
28: #define _IOSCSICOMMAND_H
29:
30: class IOSCSIDevice;
31: class IOSCSICommand;
32:
33: class IOSCSICommand : public IOCDBCommand
34: {
35: OSDeclareAbstractStructors(IOSCSICommand)
36:
37: /*------------------Methods provided to IOCDBCommand users -------------------------*/
38: public:
39: /*
40: * Set/Get IOMemoryDescriptor object to I/O data buffer or sense data buffer.
41: */
42: virtual void setPointers( IOMemoryDescriptor *desc,
43: UInt32 transferCount,
44: bool isWrite,
45: bool isSense = false ) = 0;
46:
47: virtual void getPointers( IOMemoryDescriptor **desc,
48: UInt32 *transferCount,
49: bool *isWrite,
50: bool isSense = false ) = 0;
51: /*
52: * Set/Get command timeout (mS)
53: */
54: virtual void setTimeout( UInt32 timeoutmS ) = 0;
55: virtual UInt32 getTimeout() = 0;
56:
57: /*
58: * Set async callback routine. Specifying no parameters indicates synchronous call.
59: */
60: virtual void setCallback( void *target = 0, CallbackFn callback = 0, void *refcon = 0 ) = 0;
61:
62: /*
63: * Set/Get CDB information. (Generic CDB version)
64: */
65: virtual void setCDB( CDBInfo *cdbInfo ) = 0;
66: virtual void getCDB( CDBInfo *cdbInfo ) = 0;
67:
68: /*
69: * Get CDB results. (Generic CDB version)
70: */
71: virtual IOReturn getResults( CDBResults *cdbResults ) = 0;
72:
73: /*
74: * Get CDB Device this command is directed to.
75: */
76: virtual IOCDBDevice *getDevice( IOCDBDevice *deviceType ) = 0;
77:
78: /*
79: * Command verbs
80: */
81: virtual bool execute( UInt32 *sequenceNumber = 0 ) = 0;
82: virtual void abort( UInt32 sequenceNumber ) = 0;
83: virtual void complete() = 0;
84:
85: /*
86: * Get pointers to client and command data.
87: */
88: virtual void *getCommandData() = 0;
89: virtual void *getClientData() = 0;
90:
91: /*
92: * Get unique sequence number assigned to command.
93: */
94: virtual UInt32 getSequenceNumber() = 0;
95:
96: /*------------------ Additional methods provided to IOSCSICommand users -------------------------*/
97: public:
98: /*
99: * Set/Get CDB information. (SCSI specific version).
100: */
101: virtual void setCDB( SCSICDBInfo *scsiCmd ) = 0;
102: virtual void getCDB( SCSICDBInfo *scsiCmd ) = 0;
103:
104: /*
105: * Get/Set CDB results. (SCSI specific version).
106: */
107: virtual IOReturn getResults( SCSIResults *results ) = 0;
108: virtual void setResults( SCSIResults *results ) = 0;
109:
110: /*
111: * Get SCSI Device this command is directed to.
112: */
113: virtual IOSCSIDevice *getDevice( IOSCSIDevice *deviceType ) = 0;
114:
115: /*
116: * Get SCSI Target/Lun for this command.
117: */
118: virtual void getTargetLun( SCSITargetLun *targetLun ) = 0;
119:
120: /*
121: * Get/Set queue routing for this command.
122: */
123: virtual void setQueueInfo( UInt32 forQueueType = kQTypeNormalQ, UInt32 forQueuePosition = kQPositionTail ) = 0;
124: virtual void getQueueInfo( UInt32 *forQueueType, UInt32 *forQueuePosition = 0 ) = 0;
125:
126: /*
127: * Get command type / Get original command.
128: *
129: * These methods are provided for the controller class to identify and relate commands.
130: * They are not usually of interest to the client side.
131: */
132: virtual UInt32 getCmdType() = 0;
133: virtual IOSCSICommand *getOriginalCmd() = 0;
134: };
135:
136: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.