#ifndef _IOKIT_IOPEFLOADER_H
#define _IOKIT_IOPEFLOADER_H
#include <IOKit/ndrvsupport/IOMacOSTypes.h>
#include <IOKit/ndrvsupport/IONDRVSupport.h>
#ifdef __cplusplus
extern "C" {
#endif
enum {
cfragFirstErrCode = -2800,
cfragContextIDErr = -2800,
cfragConnectionIDErr = -2801,
cfragNoSymbolErr = -2802,
cfragNoSectionErr = -2803,
cfragNoLibraryErr = -2804,
cfragDupRegistrationErr = -2805,
cfragFragmentFormatErr = -2806,
cfragUnresolvedErr = -2807,
cfragNoPositionErr = -2808,
cfragNoPrivateMemErr = -2809,
cfragNoClientMemErr = -2810,
cfragNoIDsErr = -2811,
cfragInitOrderErr = -2812,
cfragImportTooOldErr = -2813,
cfragImportTooNewErr = -2814,
cfragInitLoopErr = -2815,
cfragInitAtBootErr = -2816,
cfragLibConnErr = -2817,
cfragCFMStartupErr = -2818,
cfragCFMInternalErr = -2819,
cfragFragmentCorruptErr = -2820,
cfragInitFunctionErr = -2821,
cfragNoApplicationErr = -2822,
cfragArchitectureErr = -2823,
cfragFragmentUsageErr = -2824,
cfragFileSizeErr = -2825,
cfragNotClosureErr = -2826,
cfragNoRegistrationErr = -2827,
cfragContainerIDErr = -2828,
cfragClosureIDErr = -2829,
cfragAbortClosureErr = -2830
};
enum {
paramErr = -50,
unimpErr = -4
};
typedef UInt32 CFragVersionNumber;
enum {
kNullCFragVersion = 0,
kWildcardCFragVersion = 0xFFFFFFFF
};
typedef UInt8 CFragSymbolClass;
enum {
kCodeCFragSymbol = 0,
kDataCFragSymbol = 1,
kTVectorCFragSymbol = 2,
kTOCCFragSymbol = 3,
kGlueCFragSymbol = 4
};
enum {
kUnresolvedCFragSymbolAddress = 0
};
typedef UInt32 CFragShortVersionPair;
#define ComposeCFragShortVersionPair(current,older) (current << 16 | older)
#define GetCFragShortVersionCurrent(version) (version >> 16)
#define GetCFragShortVersionOlder(version) (version & 0xFFFF)
enum {
kMainCFragSymbolIndex = -1,
kInitCFragSymbolIndex = -2,
kTermCFragSymbolIndex = -3
};
typedef void * PCodeInstance;
OSStatus
PCodeOpen( LogicalAddress container, ByteCount containerSize,
PCodeInstance * instance, UInt32 * createDate );
OSStatus
PCodeClose( PCodeInstance instance );
OSStatus
PCodeInstantiate( PCodeInstance instance,
IONDRVUndefinedSymbolHandler handler, void * self );
OSStatus
PCodeFindExport( PCodeInstance instance, const char * symbolName, LogicalAddress * address, CFragSymbolClass * symbolClass );
OSStatus
PCodeFindMain( PCodeInstance instance, LogicalAddress * mainAddress );
static __inline__ unsigned int get_R2(void)
{
unsigned int result;
__asm__ volatile("mr %0, r2" : "=r" (result));
return result;
}
static __inline__ void set_R2(unsigned int val)
{
__asm__ volatile("mr r2,%0" : : "r" (val));
return;
}
#ifdef __cplusplus
}
#endif
#endif