iBoot/lib/effaceable/common/include/AppleEffaceableStorageKeys.h

131 lines
4.5 KiB
C

/*
* Copyright (c) 2010-11 Apple Inc. All rights reserved.
*
* This document is the property of Apple Inc.
* It is considered confidential and proprietary.
*
* This document may not be reproduced or transmitted in any form,
* in whole or in part, without the express written permission of
* Apple Inc.
*/
#ifndef _APPLE_EFFACEABLE_STORAGE_KEYS_H
#define _APPLE_EFFACEABLE_STORAGE_KEYS_H
__BEGIN_DECLS
// =============================================================================
// callPlatformFunction methods
//
// GetLocker
// Returns the contents of the locker type_id, if it exists.
//
// SetLocker
// Updates or creates the locker type_id.
//
// Space
// Returns the largest amount of data that could be stored in a locker
// with type_id, accounting for overwriting any current value.
//
// Efface
// Destroys the locker type_id and all its contents.
//
// GenerateNonce
// Populate private nonce locker with random 64-bit value and return its hash.
//
// type_id
// Unique identifier for the locker. Typically a four-byte ASCII value.
//
// data
// Pointer to read/write data buffer.
//
// data_size
// Buffer/operation size in bytes. Note that for GetLocker this is a
// pointer to an IOByteCount that is updated to the actual size of the
// locker, and for Space this is the amount of space available for
// a locker with type_id.
//
// untrusted
// True if the client is untrusted and should not be allowed to operate
// on protected lockers.
//
// hash
// Pointer to 20 byte buffer into which the nonce hash will be copied.
//
#define kAppleEffaceableStorageFunctionGet "GetLocker" // (type_id, *data, *data_size, untrusted)
#define kAppleEffaceableStorageFunctionSet "SetLocker" // (type_id, *data, data_size, untrusted)
#define kAppleEffaceableStorageFunctionEfface "EffaceLocker" // (type_id, untrusted)
#define kAppleEffaceableStorageFunctionGenerateNonce "GenerateNonce" // (*hash)
#define kAppleEffaceableStorageFunctionSpace "Space" // (type_id, *free_size)
// When set on a request's type_id, the locker can only be read, overwritten and
// effaced by a kernel client. Cannot be set by a user client.
#define kAppleEffaceableStorageLockerProtected (1<<31)
// Special type for manipulating nonce locker, which is permitted
// only by the effaceable storage driver
#define kAppleEffaceableStorageLockerPrivate (1<<23)
// These bits must not be set in a locker's type_id.
#define kAppleEffaceableStorageLockerReserved ((1<<15) | (1<<7))
// This type_id is considered a wildcard; passed to Efface it will cause
// every locker to be effaced.
#define kAppleEffaceableStorageLockerWildcard '****'
// =============================================================================
#define kAppleEffaceableStorageClassName "AppleEffaceableStorage"
// DeviceTree properties
#define kAppleEffaceableStoragePropertyVersionMajor "VersionMajor"
#define kAppleEffaceableStoragePropertyVersionMinor "VersionMinor"
#define kAppleEffaceableStoragePropertyIsFormatted "IsFormatted"
// UserClient methods
enum _AppleEffaceableStorageMethod
{
// Maintenance interface.
kAppleEffaceableStorageMethodGetCapacity,
kAppleEffaceableStorageMethodGetBytes,
kAppleEffaceableStorageMethodSetBytes,
kAppleEffaceableStorageMethodIsFormatted,
kAppleEffaceableStorageMethodFormatStorage,
// Userclient locker methods.
//
// The type_id argument is always passed in scalarInput[0].
//
// GetLocker returns the actual size of the locker in scalarOutput[0],
// and if structureOutput/structureOutputSize describe a buffer, as much
// of the locker data as will fit is returned into the buffer.
//
// SetLocker creates or replaces an existing locker with the contents of
// structureInput/structureInputSize.
//
// EffaceLocker destroys the locker.
//
kAppleEffaceableStorageMethodGetLocker,
kAppleEffaceableStorageMethodSetLocker,
kAppleEffaceableStorageMethodEffaceLocker,
kAppleEffaceableStorageMethodSpace,
// Debug-only interface.
kAppleEffaceableStorageMethodWipeStorage,
// Nonce support
kAppleEffaceableStorageMethodGenerateNonce,
kAppleEffaceableStorageMethodCount
};
typedef enum _AppleEffaceableStorageMethod AppleEffaceableStorageMethod;
// =============================================================================
__END_DECLS
#endif /* _APPLE_EFFACEABLE_STORAGE_KEYS_H */