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 _APPLERAID_H 24#define _APPLERAID_H 25 26#ifdef KERNEL 27 28 29#ifdef DEBUG 30 31#define IOASSERT 1 32 33#define IOLog1 IOLog 34//#define IOLog1 IOSleep(100); IOLog 35//#define IOLog2 IOLog 36//#define IOLogOC IOSleep(100); IOLog // Open Close 37//#define IOLogRW IOSleep(100); IOLog // Read Write 38//#define IOLogUC IOLog // User Client 39 40#endif DEBUG 41 42 43#ifndef IOLog1 44#define IOLog1(args...) 45#endif 46#ifndef IOLog2 47#define IOLog2(args...) 48#endif 49#ifndef IOLogOC 50#define IOLogOC(args...) 51#endif 52#ifndef IOLogRW 53#define IOLogRW(args...) 54#endif 55#ifndef IOLogUC 56#define IOLogUC(args...) 57#endif 58 59 60#include <IOKit/IOTypes.h> 61#include <IOKit/IOService.h> 62#include <IOKit/IOWorkLoop.h> 63#include <IOKit/IOEventSource.h> 64#include <IOKit/IOCommand.h> 65#include <IOKit/IOCommandPool.h> 66#include <IOKit/IOCommandGate.h> 67#include <IOKit/IOBufferMemoryDescriptor.h> 68#include <IOKit/IOMessage.h> 69#include <IOKit/IOKitKeys.h> 70#include <IOKit/IOUserClient.h> 71#include <IOKit/IOBSD.h> 72#include <IOKit/storage/IOMedia.h> 73 74class AppleRAID; 75class AppleRAIDSet; 76class AppleRAIDEventSource; 77class AppleRAIDStorageRequest; 78class AppleLVMStorageRequest; 79 80#include "AppleRAIDGlobals.h" 81#include "AppleRAIDMember.h" 82#include "AppleRAIDMemoryDescriptor.h" 83#include "AppleRAIDStorageRequest.h" 84#include "AppleLVMStorageRequest.h" 85#include "AppleRAIDEventSource.h" 86#include "AppleRAIDSet.h" 87#include "AppleRAIDConcatSet.h" 88#include "AppleRAIDMirrorSet.h" 89#include "AppleRAIDStripeSet.h" 90#include "AppleLVMVolume.h" 91#include "AppleLVMGroup.h" 92#include "AppleRAIDUserClient.h" 93#include "AppleRAIDUserLib.h" 94 95 96class AppleRAID : public IOService 97{ 98 OSDeclareDefaultStructors(AppleRAID); 99 100private: 101 OSDictionary * raidSets; 102 OSDictionary * raidMembers; 103 OSDictionary * logicalVolumes; 104 105 void addSet(AppleRAIDSet * set); 106 void removeSet(AppleRAIDSet * set); 107 108 void addMember(AppleRAIDMember * member); 109 void removeMember(AppleRAIDMember * member); 110 AppleRAIDMember * findMember(const OSString * uuid); 111 112 void startSet(AppleRAIDSet * set); 113 114public: 115 116 bool init(void); 117 void free(void); 118 119 AppleRAIDSet * findSet(const OSString * uuid); 120 AppleRAIDSet * findSet(AppleRAIDMember * member); 121 122 void addLogicalVolume(AppleLVMVolume * volume); 123 void removeLogicalVolume(AppleLVMVolume * volume); 124 AppleLVMVolume * findLogicalVolume(const OSString * uuid); 125 126 IOReturn newMember(IORegistryEntry * child); 127 IOReturn oldMember(IORegistryEntry * child); 128 void recoverMember(IORegistryEntry * child); 129 130 void degradeSet(AppleRAIDSet * set); 131 void restartSet(AppleRAIDSet * set, bool bump); 132 133 IOReturn updateSet(char * setBuffer, uint32_t setBufferSize, char * retBuffer, uint32_t * retBufferSize); 134 135 IOReturn getListOfSets(UInt32 inFlags, char * outList, uint32_t * outListSize); 136 IOReturn getSetProperties(char * setString, uint32_t setStringSize, char * outProp, uint32_t * outPropSize); 137 IOReturn getMemberProperties(char * memberString, uint32_t memberStringSize, char * outProp, uint32_t * outPropSize); 138 139 IOReturn getVolumesForGroup(char * lvgString, uint32_t lvgStringSize, char * outProp, uint32_t * outPropSize); 140 IOReturn getVolumeProperties(char * lvString, uint32_t lvStringSize, char * outProp, uint32_t * outPropSize); 141 IOReturn getVolumeExtents(char * lvString, uint32_t lvStringSize, char * extentsBuffer, uint32_t * extentsSize); 142 IOReturn updateLogicalVolume(char * lveBuffer, uint32_t lveBufferSize, char * retBuffer, uint32_t * retBufferSize); 143 IOReturn destroyLogicalVolume(char * lvString, uint32_t lvStringSize, char * retBuffer, uint32_t * retBufferSize); 144}; 145 146#endif /* KERNEL */ 147 148#endif /* ! _APPLERAID_H */ 149