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 _APPLERAIDUSERCLIENT_H 24#define _APPLERAIDUSERCLIENT_H 25 26// User Client method names 27enum 28{ 29 kAppleRAIDClientOpen = 0, 30 kAppleRAIDClientClose, // 1 31 kAppleRAIDGetListOfSets, // 2 32 kAppleRAIDGetSetProperties, // 3 33 kAppleRAIDGetMemberProperties, // 4 34 kAppleRAIDUpdateSet, // 5 35 kAppleLVMGetVolumesForGroup, // 6 36 kAppleLVMGetVolumeProperties, // 7 37 kAppleLVMGetVolumeExtents, // 8 38 kAppleLVMUpdateLogicalVolume, // 9 39 kAppleLVMDestroyLogicalVolume, // 10 40 kAppleRAIDUserClientMethodsCount 41}; 42 43#define kAppleRAIDMessageSetChanged ('raid') 44#define kAppleLVMMessageVolumeChanged ('lvol') 45 46enum { 47 kAppleRAIDMaxUUIDStringSize = 64 // 128bit UUID (in ascii hex plus some dashes) "uuidgen | wc" == 37 48}; 49 50// update set sub commands 51enum { 52 kAppleRAIDUpdateResetSet = 1, 53 kAppleRAIDUpdateDestroySet = 2 54}; 55 56#ifdef KERNEL 57 58class AppleRAIDUserClient : public IOUserClient 59{ 60 OSDeclareDefaultStructors(AppleRAIDUserClient) 61 62 protected: 63 AppleRAID * ucController; 64 task_t ucClient; 65 66public: 67 68 virtual bool initWithTask(task_t owningTask, void * security_id, UInt32 type); 69 70 virtual bool start(IOService * provider); 71 72 virtual IOReturn clientClose(void); 73 74 virtual IOReturn externalMethod(uint32_t selector, IOExternalMethodArguments * arguments, 75 IOExternalMethodDispatch * dispatch = 0, 76 OSObject * target = 0, void * reference = 0); 77 78 // IOUserClient shims 79 static IOReturn openShim(OSObject * target, void * reference, IOExternalMethodArguments * args) 80 { return ((AppleRAIDUserClient *)target)->openController(); }; 81 static IOReturn closeShim(OSObject * target, void * reference, IOExternalMethodArguments * args) 82 { return ((AppleRAIDUserClient *)target)->closeController(); }; 83 static IOReturn getListOfSetsShim(OSObject * target, void * reference, IOExternalMethodArguments * args) 84 { return ((AppleRAIDUserClient *)target)->getListOfSets(args); }; 85 static IOReturn getSetPropertiesShim(OSObject * target, void * reference, IOExternalMethodArguments * args) 86 { return ((AppleRAIDUserClient *)target)->getSetProperties(args); }; 87 static IOReturn getMemberPropertiesShim(OSObject * target, void * reference, IOExternalMethodArguments * args) 88 { return ((AppleRAIDUserClient *)target)->getMemberProperties(args); }; 89 static IOReturn updateSetShim(OSObject * target, void * reference, IOExternalMethodArguments * args) 90 { return ((AppleRAIDUserClient *)target)->updateSet(args); }; 91 static IOReturn getVolumesForGroupShim(OSObject * target, void * reference, IOExternalMethodArguments * args) 92 { return ((AppleRAIDUserClient *)target)->getVolumesForGroup(args); }; 93 static IOReturn getVolumePropertiesShim(OSObject * target, void * reference, IOExternalMethodArguments * args) 94 { return ((AppleRAIDUserClient *)target)->getVolumeProperties(args); }; 95 static IOReturn getVolumeExtentsShim(OSObject * target, void * reference, IOExternalMethodArguments * args) 96 { return ((AppleRAIDUserClient *)target)->getVolumeExtents(args); }; 97 static IOReturn updateLogicalVolumeShim(OSObject * target, void * reference, IOExternalMethodArguments * args) 98 { return ((AppleRAIDUserClient *)target)->updateLogicalVolume(args); }; 99 static IOReturn destroyLogicalVolumeShim(OSObject * target, void * reference, IOExternalMethodArguments * args) 100 { return ((AppleRAIDUserClient *)target)->destroyLogicalVolume(args); }; 101 102 // IOUserClient methods 103 virtual IOReturn openController(void); 104 virtual IOReturn closeController(void); 105 virtual IOReturn getListOfSets(IOExternalMethodArguments * args); 106 virtual IOReturn getSetProperties(IOExternalMethodArguments * args); 107 virtual IOReturn getMemberProperties(IOExternalMethodArguments * args); 108 virtual IOReturn updateSet(IOExternalMethodArguments * args); 109 virtual IOReturn getVolumesForGroup(IOExternalMethodArguments * args); 110 virtual IOReturn getVolumeProperties(IOExternalMethodArguments * args); 111 virtual IOReturn getVolumeExtents(IOExternalMethodArguments * args); 112 virtual IOReturn updateLogicalVolume(IOExternalMethodArguments * args); 113 virtual IOReturn destroyLogicalVolume(IOExternalMethodArguments * args); 114}; 115 116#endif KERNEL 117 118#endif _APPLERAIDUSERCLIENT_H 119