1/*
2 * Copyright (c) 2001-2007 Apple 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#ifndef _APPLERAIDSTORAGEREQUEST_H
24#define _APPLERAIDSTORAGEREQUEST_H
25
26#define kAppleRAIDStorageRequestCount (16)
27
28class AppleRAIDStorageRequest : public IOCommand
29{
30    OSDeclareDefaultStructors(AppleRAIDStorageRequest);
31
32    friend class AppleRAIDSet;					// XXX remove this
33    friend class AppleRAIDMirrorSet;				// XXX remove this
34    friend class AppleLVMGroup;					// XXX remove this
35    friend class AppleRAIDEventSource;				// XXX remove this
36    friend class AppleRAIDStripeMemoryDescriptor;		// XXX remove this
37    friend class AppleRAIDMirrorMemoryDescriptor;		// XXX remove this
38    friend class AppleRAIDConcatMemoryDescriptor;		// XXX remove this
39    friend class AppleLVMMemoryDescriptor;			// XXX remove this
40
41protected:
42    AppleRAIDSet		*srRAIDSet;
43    AppleRAIDEventSource	*srEventSource;
44    AppleRAIDMemoryDescriptor	**srMemoryDescriptors;
45    IOReturn			srStatus;
46    UInt64			srSetBlockSize;
47    UInt64			srMemberBaseOffset;
48    UInt32			srActiveCount;
49    UInt32			srMemberCount;
50    UInt32			srRequestCount;
51    UInt32			srRequestsAllocated;
52    IOReturn			*srRequestStatus;
53    UInt64			*srRequestByteCounts;
54    UInt32			srCompletedCount;
55    UInt64			srByteStart;
56    UInt64			srByteCount;
57    AppleRAIDMember		**srActiveMembers;
58    IOService			*srClient;
59    IOStorageCompletion		srClientsCompletion;
60    IOMemoryDescriptor		*srMemoryDescriptor;
61    IODirection			srMemoryDescriptorDirection;
62
63    virtual void free(void);
64
65    virtual void read(IOService *client, UInt64 byteStart, IOMemoryDescriptor *buffer,
66		      IOStorageAttributes *attributes, IOStorageCompletion *completion);
67    virtual void write(IOService *client, UInt64 byteStart, IOMemoryDescriptor *buffer,
68		       IOStorageAttributes *attributes, IOStorageCompletion *completion);
69
70public:
71    static AppleRAIDStorageRequest *withAppleRAIDSet(AppleRAIDSet * set);
72    virtual bool initWithAppleRAIDSet(AppleRAIDSet * set);
73    virtual void extractRequest(IOService **client, UInt64 *byteStart, IOMemoryDescriptor **buffer, IOStorageCompletion *completion);
74};
75
76#endif  /* ! _APPLERAIDSTORAGEREQUEST_H */
77