AppleRAIDConcatSet.h [plain text]
#ifndef _APPLERAIDCONCATSET_H
#define _APPLERAIDCONCATSET_H
#define kAppleRAIDLevelNameConcat "Concat"
extern const OSSymbol * gAppleRAIDConcatName;
class AppleRAIDConcatSet : public AppleRAIDSet
{
OSDeclareDefaultStructors(AppleRAIDConcatSet);
private:
UInt64 * arMemberBlockCounts;
UInt32 arExpectingLiveAdd;
protected:
virtual bool init();
virtual void free();
virtual void unpauseSet(void);
public:
static AppleRAIDSet * createRAIDSet(AppleRAIDMember * firstMember);
virtual bool addSpare(AppleRAIDMember * member);
virtual bool addMember(AppleRAIDMember * member);
virtual bool removeMember(AppleRAIDMember * member, IOOptionBits options);
virtual bool resizeSet(UInt32 newMemberCount);
virtual bool startSet(void);
virtual bool publishSet(void);
virtual UInt64 getMemberSize(UInt32 memberIndex) const;
virtual AppleRAIDMemoryDescriptor * allocateMemoryDescriptor(AppleRAIDStorageRequest *storageRequest, UInt32 memberIndex);
};
class AppleRAIDConcatMemoryDescriptor : public AppleRAIDMemoryDescriptor
{
OSDeclareDefaultStructors(AppleRAIDConcatMemoryDescriptor);
private:
UInt64 mdMemberOffset;
UInt64 mdMemberStart;
UInt64 mdMemberEnd;
protected:
virtual bool initWithStorageRequest(AppleRAIDStorageRequest *storageRequest, UInt32 memberIndex);
virtual bool configureForMemoryDescriptor(IOMemoryDescriptor *memoryDescriptor, UInt64 byteStart, UInt32 activeIndex);
public:
static AppleRAIDMemoryDescriptor *withStorageRequest(AppleRAIDStorageRequest *storageRequest, UInt32 memberIndex);
virtual IOPhysicalAddress getPhysicalSegment(IOByteCount offset, IOByteCount *length);
};
#endif