/* File: PCCardEnablerPlugin.h Contains: Interfacer for PCCard Manager 3.0 Version: Technology: Mac OS 8.5 Release: QuickTime 6.0.2 Copyright: (c) 1997-2001 by Apple Computer, Inc. and SystemSoft Corporation. All rights reserved. Bugs?: For bug reports, consult the following page on the World Wide Web: http://developer.apple.com/bugreporter/ */ #ifndef __PCCARDENABLERPLUGIN__ #define __PCCARDENABLERPLUGIN__ #ifndef __MACTYPES__ #include #endif #ifndef __NAMEREGISTRY__ #include #endif #ifndef __INTERRUPTS__ #include #endif #ifndef __PCCARD__ #include #endif #if PRAGMA_ONCE #pragma once #endif #ifdef __cplusplus extern "C" { #endif #if PRAGMA_IMPORT #pragma import on #endif #if PRAGMA_STRUCT_ALIGN #pragma options align=power #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(push, 2) #elif PRAGMA_STRUCT_PACK #pragma pack(2) #endif #ifndef __CARDSERVICES__ /* NOTE: These prototypes conflict with CardServices.* You cannot use both PCCardEnablerPlugin.h and CardServices.h */ /* Copyright: (c) 1996 SystemSoft Corporation, all rights reserved. */ /*------------------------------------------------------------------------------------ Card Services calls exported by the Family ------------------------------------------------------------------------------------*/ /* Card Services for Card Enablers*/ #if CALL_NOT_IN_CARBON EXTERN_API_C( OSStatus ) CSGetCardServicesInfo (UInt32 * socketCount, UInt32 * complianceLevel, UInt32 * version); /* Function prototypes for tuples calls */ EXTERN_API_C( OSStatus ) CSGetFirstTuple (PCCardSocket socket, UInt32 device, PCCardTupleIterator tupleIterator, Byte desiredTuple, void * tupleData, ByteCount * tupleBufferSize, Byte * foundTuple); EXTERN_API_C( OSStatus ) CSGetNextTuple (PCCardTupleIterator tupleIterator, Byte desiredTuple, void * tupleData, ByteCount * tupleBufferSize, Byte * foundTuple); /* Function prototypes for window calls*/ EXTERN_API_C( OSStatus ) CSRequestWindow (PCCardSocket vSocket, UInt32 device, PCCardWindowAttributes windowAttributes, PCCardAccessSpeed windowSpeed, LogicalAddress * windowBase, PCCardWindowSize * windowSize, PCCardWindowOffset * windowOffset, PCCardWindowID * requestedWindow); EXTERN_API_C( OSStatus ) CSReleaseWindow (PCCardWindowID windowToRelease); EXTERN_API_C( OSStatus ) CSModifyWindow (PCCardWindowID windowToModify, PCCardWindowType windowAttributes, PCCardAccessSpeed memorySpeed, PCCardWindowOffset * windowOffset); EXTERN_API_C( OSStatus ) CSGetWindowBaseAddress (PCCardWindowID window, LogicalAddress * baseAddress); EXTERN_API_C( OSStatus ) CSInquireWindow (PCCardSocket vSocket, UInt32 device, PCCardWindowID windowID, PCCardWindowAttributes * windowAttributes, PCCardAccessSpeed * windowParam, UInt32 * windowBase, PCCardWindowSize * windowSize, PCCardWindowOffset * windowOffset); /* Function prototypes for CIS calls*/ EXTERN_API_C( OSStatus ) CSValidateCIS (PCCardSocket vSocket, UInt32 device, UInt32 * cisChainCount); EXTERN_API_C( OSStatus ) CSGetDeviceCount (PCCardSocket vSocket, UInt32 * deviceCount); /* Function prototypes for Status calls*/ EXTERN_API_C( OSStatus ) CSGetStatus (PCCardSocket vSocket, UInt32 * currentState, UInt32 * changedState, PCCardVoltage * Vcc, PCCardVoltage * Vpp); /* Function prototypes for configuration calls*/ EXTERN_API_C( OSStatus ) CSRequestConfiguration (PCCardSocket vSocket, UInt32 device, PCCardConfigOptions configOptions, PCCardInterfaceType socketInterface, PCCardCustomInterfaceID customInterface, PCCardVoltage vcc, PCCardVoltage vpp, PCCardIRQ IRQ, PCCardDMA DMA, UInt32 configRegBaseAddress, PCCardConfigPresentMask configRegPresentMask, PCCardFunctionConfigReg * configReg); EXTERN_API_C( OSStatus ) CSModifyConfiguration (PCCardSocket vSocket, UInt32 device, PCCardConfigOptions modifyAttributes, PCCardIRQ IRQ, PCCardDMA DMA, PCCardVoltage Vpp); EXTERN_API_C( OSStatus ) CSReleaseConfiguration (PCCardSocket vSocket, UInt32 device); EXTERN_API_C( OSStatus ) CSSetRingIndicate (PCCardSocket vSocket, Boolean setRingIndicate); EXTERN_API_C( OSStatus ) CSResetFunction (PCCardSocket vSocket, UInt32 device); EXTERN_API_C( OSStatus ) CSReadConfigurationRegister (PCCardSocket vSocket, UInt32 device, PCCardConfigPresentMask whichRegister, UInt32 configRegBaseAddress, UInt8 * registerValue); EXTERN_API_C( OSStatus ) CSWriteConfigurationRegister (PCCardSocket vSocket, UInt32 device, PCCardConfigPresentMask whichRegister, UInt32 configRegBaseAddress, UInt8 registerValue); /* Function prototypes for Client Support calls*/ EXTERN_API_C( OSStatus ) CSRegisterClient (PCCardSocket vSocket, PCCardEventMask eventMask, PCCardEventHandler clientCallBack, void * clientParam, PCCardClientID * newClientID); EXTERN_API_C( OSStatus ) CSDeRegisterClient (PCCardClientID theClientID); EXTERN_API_C( OSStatus ) CSSetEventMask (PCCardClientID theClientID, PCCardEventMask newEventMask); EXTERN_API_C( OSStatus ) CSGetEventMask (PCCardClientID theClientID, PCCardEventMask * newEventMask); EXTERN_API_C( OSStatus ) CSRegisterTimer (PCCardClientID registeredClientID, PCCardTimerID * lpNewTimerID, long delay); EXTERN_API_C( OSStatus ) CSDeRegisterTimer (PCCardTimerID timerID); /* Function prototypes for CardBus Config Space access*/ EXTERN_API_C( OSStatus ) CSReadCardBusConfigSpace (PCCardSocket vSocket, UInt32 device, UInt32 configOffset, Byte * data, UInt32 dataSize); EXTERN_API_C( OSStatus ) CSWriteCardBusConfigSpace (PCCardSocket vSocket, UInt32 device, UInt32 configOffset, Byte * data, UInt32 dataSize); /*------------------------------------------------------------------------------------ Card Enabler Types ------------------------------------------------------------------------------------*/ #endif /* CALL_NOT_IN_CARBON */ enum { kUnknownDeviceType = FOUR_CHAR_CODE('unkn'), /* class-code = 0x00 */ kSCSIDeviceType = FOUR_CHAR_CODE('scsi'), /* class-code = 0x01, sub-class = 0x00 */ kBlockDeviceType = FOUR_CHAR_CODE('blok'), /* class-code = 0x01, sub-class = 0xXX */ kNetworkDeviceType = FOUR_CHAR_CODE('netw'), /* class-code = 0x02 */ kDisplayDeviceType = FOUR_CHAR_CODE('dspl'), /* class-code = 0x03 */ kMultimediaDeviceType = FOUR_CHAR_CODE('mmdv'), /* class-code = 0x04 */ kMemoryDeviceType = FOUR_CHAR_CODE('mem '), /* class-code = 0x05 */ kBridgeDeviceType = FOUR_CHAR_CODE('brdg'), /* class-code = 0x06 */ kCommDeviceType = FOUR_CHAR_CODE('comm'), /* class-code = 0x07 */ kPeripheralDeviceType = FOUR_CHAR_CODE('sysp'), /* class-code = 0x08 */ kInputDeviceType = FOUR_CHAR_CODE('inpt'), /* class-code = 0x09 */ kDockingDeviceType = FOUR_CHAR_CODE('dock'), /* class-code = 0x0A */ kProcessorDeviceType = FOUR_CHAR_CODE('proc'), /* class-code = 0x0B */ kFirewireBusDeviceType = FOUR_CHAR_CODE('firw'), /* class-code = 0x0C, sub-class = 0x00 */ kACCESSBusDeviceType = FOUR_CHAR_CODE('accs'), /* class-code = 0x0C, sub-class = 0x01 */ kSSABusDeviceType = FOUR_CHAR_CODE('ssa '), /* class-code = 0x0C, sub-class = 0x02 */ kUSBBusDeviceType = FOUR_CHAR_CODE('usb '), /* class-code = 0x0C, sub-class = 0x03 */ kFibreBusDeviceType = FOUR_CHAR_CODE('fibr'), /* class-code = 0x0C, sub-class = 0x04 */ kByteDeviceType = FOUR_CHAR_CODE('byte'), /* class-code = 0x?? */ kSerialDeviceType = FOUR_CHAR_CODE('ser '), /* class-code = 0x?? */ kParallelDeviceType = FOUR_CHAR_CODE('parl'), /* class-code = 0x?? */ kAIMSDeviceType = FOUR_CHAR_CODE('aims') /* class-code = 0x?? */ }; typedef OSType PCDeviceType; enum { kAttributeType = 0, kMemoryType = 1, kIOType = 2 }; typedef UInt32 PCCardMemoryType; enum { kUnknown = FOUR_CHAR_CODE('unkn'), kPCCard16 = FOUR_CHAR_CODE('pc16'), kCardBus = FOUR_CHAR_CODE('cdbs') }; typedef OSType PCCardArchitectureType; #define kNodeNameName "name" #define k16BitPCCardName "16bitcard" #define kCardbusPropertyName "cardbus" #define kNodeCompatiblePropertyName "compatible" #define kDevice_TypeName "device_type" #define kDriverISTPropertyName "driver-ist" #define kFCRAccessPropertyName "FCRAccess" #define kConfigRegPropertyName "ConfigRegValues" #define kNodeTypePropertyName "PCCardNodeType" #define kDeviceNumberPropertName "DeviceNumber" #define kSocketNumberPropertName "SocketNumber" /*------------------------------------------------------------------------------------ Plugin Dispatch Table ------------------------------------------------------------------------------------*/ enum { kServiceTypePCCardEnabler = FOUR_CHAR_CODE('card'), kPCCardEnablerPluginVersion = 0x00000001, kPCCardEnablerPluginCurrentVersion = kPCCardEnablerPluginVersion }; /* Card Enabler Entrypoints*/ typedef CALLBACK_API_C( OSStatus , CEValidateHardwareProc )(const RegEntryID *cardRef); typedef CALLBACK_API_C( OSStatus , CEInitializeProc )(const RegEntryID *cardRef, Boolean replacingOld); typedef CALLBACK_API_C( OSStatus , CECleanupProc )(const RegEntryID *cardRef, Boolean beingReplaced); typedef CALLBACK_API_C( OSStatus , CEPowerManagementProc )(const RegEntryID *lpCardEntry, PCCardPowerOptions powerLevel); typedef CALLBACK_API_C( OSStatus , CEHandleEventProc )(const RegEntryID *cardRef, PCCardEvent theEvent); typedef CALLBACK_API_C( OSStatus , CEGetCardInfoProc )(const RegEntryID *cardRef, PCCardDevType *cardType, PCCardSubType *cardSubType, StringPtr cardName, StringPtr vendorName); typedef CALLBACK_API_C( OSStatus , CEAddCardPropertiesProc )(const RegEntryID *cardRef); typedef CALLBACK_API_C( OSStatus , CEGetDeviceCountProc )(const RegEntryID *cardRef, ItemCount *numberOfDevices); typedef CALLBACK_API_C( OSStatus , CEGetDeviceNameProc )(UInt32 socketNumber, UInt32 deviceNumber, char *deviceName); typedef CALLBACK_API_C( OSStatus , CEGetDeviceCompatibleProc )(const RegEntryID *deviceRef, UInt32 socketNumber, UInt32 deviceNumber, char *name); typedef CALLBACK_API_C( OSStatus , CEGetDeviceTypeProc )(const RegEntryID *deviceRef, UInt32 socketNumber, UInt32 deviceNumber, PCDeviceType *lpDeviceType); typedef CALLBACK_API_C( OSStatus , CEGetDeviceTypeNameProc )(const RegEntryID *deviceRef, UInt32 socketNumber, UInt32 deviceNumber, char *name); typedef CALLBACK_API_C( OSStatus , CEAddDevicePropertiesProc )(const RegEntryID *deviceRef, UInt32 device); typedef CALLBACK_API_C( OSStatus , CEConfigureDeviceProc )(const RegEntryID *deviceRef, UInt32 deviceNumber); typedef CALLBACK_API_C( OSStatus , CEFinalizeDeviceProc )(UInt32 socket, UInt32 device, const RegEntryID *deviceRef); typedef CALLBACK_API_C( OSStatus , CEValidateCISProc )(UInt32 socket, UInt32 device, UInt32 *lpCISChainCount); typedef CALLBACK_API_C( OSStatus , CEGetFirstTupleProc )(UInt32 socket, UInt32 device, PCCardTupleIterator lpTupleIterator, Byte desiredTuple, void *lptupleData, UInt32 *lpTupleBufferSize, Byte *lpFoundTuple); typedef CALLBACK_API_C( OSStatus , CEGetNextTupleProc )(PCCardTupleIterator lpTupleIterator, Byte desiredTuple, void *lptupleData, UInt32 *lpTupleBufferSize, Byte *lpFoundTuple); struct PCCardEnablerPluginHeader { UInt32 pluginDispatchTableVersion; UInt32 reserved1; UInt32 reserved2; UInt32 reserved3; }; typedef struct PCCardEnablerPluginHeader PCCardEnablerPluginHeader; struct PCCardEnablerPluginDispatchTable { PCCardEnablerPluginHeader header; /* General functions*/ CEValidateHardwareProc validateHardwareProc; CEInitializeProc initializeProc; CECleanupProc cleanUpProc; CEPowerManagementProc setPCCardPowerLevel; /* Card functions*/ CEHandleEventProc handleEventProc; CEGetCardInfoProc getCardInfoProc; CEAddCardPropertiesProc addCardProperties; CEGetDeviceCountProc getDeviceCount; /* Device functions*/ CEGetDeviceNameProc getDeviceName; CEGetDeviceCompatibleProc getDeviceCompatibleNames; CEGetDeviceTypeProc getDeviceType; CEGetDeviceTypeNameProc getDeviceTypeName; CEAddDevicePropertiesProc addDeviceProperties; CEConfigureDeviceProc configureDevice; CEFinalizeDeviceProc finalizeDevice; /* Card Services Overrides...*/ CEValidateCISProc validateCIS; CEGetFirstTupleProc getFirstTuple; CEGetNextTupleProc getNextTuple; /* InterruptHandlers...*/ InterruptHandler cardInterruptHandlerFunction; InterruptEnabler cardInterruptEnableFunction; InterruptDisabler cardInterruptDisableFunction; }; typedef struct PCCardEnablerPluginDispatchTable PCCardEnablerPluginDispatchTable; typedef PCCardEnablerPluginDispatchTable * PCCardEnablerPluginDispatchTablePtr; /*------------------------------------------------------------------------------------ PC Card Enabler Utility calls exported by the Family ------------------------------------------------------------------------------------*/ /* Generic Enabler Entrypoints*/ #if CALL_NOT_IN_CARBON EXTERN_API_C( OSStatus ) CEInitializeCard (const RegEntryID * cardRef, Boolean replacingOld); EXTERN_API_C( OSStatus ) CEFinalizeCard (const RegEntryID * cardRef, Boolean beingReplaced); EXTERN_API_C( OSStatus ) CEPowerManagement (const RegEntryID * lpParentID, PCCardPowerOptions powerLevel); EXTERN_API_C( OSStatus ) CEHandleCardEvent (const RegEntryID * cardRef, PCCardEvent lTheCardEvent); EXTERN_API_C( OSStatus ) CEGetCardInfo (const RegEntryID * cardRef, PCCardDevType * cardType, PCCardSubType * cardSubType, StringPtr cardName, StringPtr vendorName); EXTERN_API_C( OSStatus ) CEAddCardProperties (const RegEntryID * cardRef); EXTERN_API_C( OSStatus ) CEGetDeviceCount (const RegEntryID * cardRef, ItemCount * numberOfDevices); /* device functions*/ EXTERN_API_C( OSStatus ) CEGetDeviceName (UInt32 socketNumber, UInt32 deviceNumber, char * deviceName); EXTERN_API_C( OSStatus ) CEGetDeviceCompatibleNames (const RegEntryID * deviceRef, UInt32 socketNumber, UInt32 deviceNumber, char * name); EXTERN_API_C( OSStatus ) CEGetDeviceType (const RegEntryID * deviceRef, UInt32 socketNumber, UInt32 deviceNumber, PCDeviceType * lpDeviceType); EXTERN_API_C( OSStatus ) CEGetDeviceTypeName (const RegEntryID * deviceRef, UInt32 socketNumber, UInt32 deviceNumber, char * name); EXTERN_API_C( OSStatus ) CEAddDeviceProperties (const RegEntryID * deviceRef, UInt32 deviceNumber); EXTERN_API_C( OSStatus ) CEConfigureDevice (const RegEntryID * deviceRef, UInt32 deviceNumber); EXTERN_API_C( OSStatus ) CEFinalizeDevice (UInt32 socket, UInt32 device, const RegEntryID * deviceRef); /* RegEntryID <-> socket number mapping functions*/ EXTERN_API_C( OSStatus ) CEGetSocketAndDeviceFromRegEntry (const RegEntryID * lpNode, UInt32 * lpSocket, UInt32 * lpDevice); EXTERN_API_C( OSStatus ) CEGetPhysicalSocketNumber (const RegEntryID * socketRef, const RegEntryID * lpDeviceEntry, UInt32 * lpPhysicalSocketNumber); /* Hardware Validation Utilities*/ EXTERN_API_C( OSStatus ) CECompareCISTPL_VERS_1 (const RegEntryID * cardRef, Byte majorVersion, Byte minorVersion, const char * manufacturer, const char * productName, const char * info1, const char * info2, Boolean * identical); EXTERN_API_C( OSStatus ) CECompareCISTPL_MANFID (const RegEntryID * cardRef, UInt16 manufacturerCode, UInt16 manufacturerInfo, Boolean * identical); EXTERN_API_C( OSStatus ) CECompareMemory (const RegEntryID * cardRef, PCCardMemoryType memType, ByteCount offset, ByteCount length, Byte * dataToCompare, Boolean * identical); EXTERN_API_C( OSStatus ) CEValidateCIS (UInt32 socket, UInt32 device, UInt32 * lpCISChainCount); EXTERN_API_C( InterruptMemberNumber ) CEDefaultInterruptHandler (InterruptSetMember ISTmember, void * refCon, UInt32 theIntCount); /*------------------------------------------------------------------------------------ PC Card Customization Resources ------------------------------------------------------------------------------------*/ #endif /* CALL_NOT_IN_CARBON */ enum { kPCCardCustomInfoResType = FOUR_CHAR_CODE('pccd'), kPCCardCustomInfoVersion = 0 }; struct PCCardCustomResource { long version; short customIconID; /* ICN#, etc. resource ID*/ short customStringsID; /* STR# resource ID*/ short customTypeStringIndex; short customHelpStringIndex; OSType customAction; long customActionParam1; long customActionParam2; }; typedef struct PCCardCustomResource PCCardCustomResource; #endif /* !defined(__CARDSERVICES__) */ #if PRAGMA_STRUCT_ALIGN #pragma options align=reset #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(pop) #elif PRAGMA_STRUCT_PACK #pragma pack() #endif #ifdef PRAGMA_IMPORT_OFF #pragma import off #elif PRAGMA_IMPORT #pragma import reset #endif #ifdef __cplusplus } #endif #endif /* __PCCARDENABLERPLUGIN__ */