209 lines
5.9 KiB
C
209 lines
5.9 KiB
C
|
// Copyright (C) 2010 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 _WHIMORY_BOOT_H_
|
||
|
#define _WHIMORY_BOOT_H_
|
||
|
|
||
|
#include "WMRTypes.h"
|
||
|
#include "FTL.h"
|
||
|
#include "VFL.h"
|
||
|
#include "FPart.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif //__cplusplus
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// Public structure definitions
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
typedef enum _WhimoryBootCode
|
||
|
{
|
||
|
kWhimoryOk = 0,
|
||
|
|
||
|
kWhimoryWarning = (1 << 29),
|
||
|
kWhimoryWarningUnformatted,
|
||
|
kWhimoryEpochMismatch_Deprecated,
|
||
|
kWhimoryMinorVersionMismatch,
|
||
|
kWhimoryMajorVersionNotAvailable,
|
||
|
kWhimoryBirthVersionTooNew,
|
||
|
|
||
|
kWhimoryError = (1 << 30),
|
||
|
kWhimoryErrMissingHardware,
|
||
|
kWhimoryErrOutOfMemory,
|
||
|
kWhimoryErrUnsupportedVersion,
|
||
|
kWhimoryErrSetup,
|
||
|
kWhimoryErrUnitTestFailed,
|
||
|
kWhimoryErrCorruptedFormat,
|
||
|
} WhimoryBootCode;
|
||
|
|
||
|
#define kWhimoryBootOptionLowPower (1 << 0)
|
||
|
#define kWhimoryBootOptionForceFtlRecovery (1 << 1)
|
||
|
#define kWhimoryBootOptionFreshOffFTLFormat (1 << 2)
|
||
|
#define kWhimoryBootOptionDisableGCInTrim (1 << 3)
|
||
|
#define kWhimorySetIndexCacheSize (1 << 4)
|
||
|
#define kWhimoryBootOptionReadOnly (1 << 16) // Must align with WMR_INIT_OPEN_READONLY @ bit 16.
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// Public function declarations
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// WMR_Start
|
||
|
//
|
||
|
// WMR_Start will attempt to locate a signature. It will call OAM_Init()
|
||
|
// and FIL_Init(), so those fuctions should be idempotent.
|
||
|
// Possible non-fatal outcomes:
|
||
|
// kWhimoryWarningUnformatted - Run WMR_Initial_Format()
|
||
|
//
|
||
|
// On kWhimoryOk or warnings, callers can request WMR_PPN_GetFPart()
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
WhimoryBootCode
|
||
|
WMR_Start
|
||
|
(UInt32 fpart_major_ver,
|
||
|
UInt32 fpart_options,
|
||
|
UInt32 boot_options);
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// WMR_Open
|
||
|
//
|
||
|
// WMR_Open will open a block device if the media is properly formatted
|
||
|
// and return appropriate warnings if the device needs to be formatted or
|
||
|
// repaired.
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
WhimoryBootCode
|
||
|
WMR_Open
|
||
|
(UInt32 *total_sectors,
|
||
|
UInt32 *sector_size,
|
||
|
UInt32 *index_cache,
|
||
|
UInt32 boot_options);
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// WMR_Format
|
||
|
//
|
||
|
// Format the media with a given set of preferred versions
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
WhimoryBootCode
|
||
|
WMR_Initial_Format
|
||
|
(UInt32 fpart_major_ver,
|
||
|
UInt32 fpart_options,
|
||
|
UInt32 fpart_format_options,
|
||
|
UInt32 vfl_major_ver,
|
||
|
UInt32 vfl_options,
|
||
|
UInt32 ftl_major_ver,
|
||
|
UInt32 ftl_options,
|
||
|
UInt32 num_keepout_blocks,
|
||
|
UInt32 megabytes_for_ftl);
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// WMR_Partition
|
||
|
//
|
||
|
// Re-size the portion of the VFL that is visible to FTL.
|
||
|
// A value of 0 gives the entire media to FTL.
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
WhimoryBootCode
|
||
|
WMR_Partition
|
||
|
(UInt32 megabytes_for_ftl);
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// WMR_Update
|
||
|
//
|
||
|
// Update the physical format if newer format is supported by this software.
|
||
|
// Optionally require backward compatiblity and saving user data
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
WhimoryBootCode
|
||
|
WMR_Update
|
||
|
(const BOOL32 keep_backward_compatibility,
|
||
|
const BOOL32 save_data,
|
||
|
UInt32 vfl_major_ver,
|
||
|
UInt32 vfl_options,
|
||
|
UInt32 ftl_major_ver,
|
||
|
UInt32 ftl_options,
|
||
|
UInt32 num_keepout_blocks);
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// WMR_Close
|
||
|
//
|
||
|
// Gracefully shut down the block device, deallocate all buffers, and return
|
||
|
// static variables to initial state such that WMR_Open can be called again.
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
void
|
||
|
WMR_Close
|
||
|
(void);
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// WMR_PPN_CtrlIO
|
||
|
//
|
||
|
// Generic IOCtl interface to all layers of whimory. Caller must specifiy data
|
||
|
// buffer size in incoming size pointer.
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
BOOL32
|
||
|
WMR_PPN_CtrlIO
|
||
|
(UInt32 ctrlio_type,
|
||
|
void *data,
|
||
|
UInt32 *size);
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// WMR_PPNGetStruct
|
||
|
//
|
||
|
// Get a parameter from RAM
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
BOOL32
|
||
|
WMR_PPNGetStruct
|
||
|
(UInt32 ctrlio_type,
|
||
|
void *data,
|
||
|
UInt32 *size);
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// WMR_PPNGetCurrentSignature
|
||
|
//
|
||
|
// Get the signature representing the current software state
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
const struct WhimorySignature *
|
||
|
WMR_PPNGetSignature
|
||
|
(void);
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// Accessors
|
||
|
//
|
||
|
// Get a parameter from RAM
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
FTLFunctions *WMR_PPN_GetFTL
|
||
|
(void);
|
||
|
VFLFunctions *WMR_PPN_GetVFL
|
||
|
(void);
|
||
|
FPartFunctions *WMR_PPN_GetFPart
|
||
|
(void);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif //__cplusplus
|
||
|
|
||
|
#endif //_WHIMORY_BOOT_H_
|