palm-os-sdk/sdk-5r4/include/Extensions/ExpansionMgr/SlotDrvrLib.h
2018-08-30 15:18:26 +01:00

216 lines
9.4 KiB
C
Executable File

/******************************************************************************
*
* Copyright (c) 1998-2004 PalmSource, Inc. All rights reserved.
*
* File: SlotDrvrLib.h
*
* Release: eclipse 5 SDK (68K) R4.
*
* Description:
* Sample Slot Driver library implementation.
*
*****************************************************************************/
#ifndef __SlotDrvr_LIB_H__
#define __SlotDrvr_LIB_H__
#include "ExpansionMgr.h"
// BUILDING_APPLICATION
#if BUILDING_APP_OR_LIB
// direct link to library code
#define SlotDrvr_LIB_TRAP(trapNum)
#else
// else someone else is including this public header file; use traps
#define SlotDrvr_LIB_TRAP(trapNum) SYS_TRAP(trapNum)
#endif
#define slotDrvrAPIVersion 0x00000002
// The number of bytes per sector is fixed
#define slotSectorSize 512
/********************************************************************
* Card Metrics
* These structures contains all of the information about the physical
* structure of the card that may be needed by a filesystem in order
* to format volumes on the card.
********************************************************************/
#define slotDrvrPartitionTypeFAT12 (0x01)
#define slotDrvrPartitionTypeFAT16Under32MB (0x04)
#define slotDrvrPartitionTypeFAT16Over32MB (0x06)
#define slotDrvrBootablePartition (0x80)
#define slotDrvrNonBootablePartition (0x00)
typedef struct CardMetricsTag {
UInt32 totalSectors; // The total number of sectors accessable via SlotCardSector[Read/Write]
// (some media may contain extra sectors in case one goes bad,
// or for storing configuration information, but they are handled
// internally to the slot driver, and not accessable)
UInt16 bytesPerSector; // The number of bytes in one sector.
// currently for Palm, this must be the standard 512
UInt16 sectorsPerHead; // The number of Sectors per Head
// as given by guidelines in the specification for this media type
// even though all of our disks accesses are LBA,
// this is for compatibility when filling out MBRs and PBRs
// if the media guidelines don't care, this value is set to 0
UInt16 headsPerCylinder; // The number of Heads per Cylinder
// as given by guidelines in the specification for this media type
// even though all of our disks accesses are LBA,
// this is for compatibility when filling out MBRs and PBRs
// if the media guidelines don't care, this value is set to 0
UInt16 reserved1; // Reserved
UInt8 sectorsPerBlock; // A suggested number of Sectors per Block (Cluster)
// as given by guidelines in the specification for this media type
// if the media guidelines don't care, this value will be set to 0
UInt8 partitionType; // The suggested partition type (System ID) of the first partition
// as given by guidelines in the specification for this media type
// if the media guidelines don't care, this value will be set to 0
UInt8 bootIndicator; // The suggested bootability of the first partition
// as given by guidelines in the specification for this media type
// (generally, 0x80=bootable, default boot partition 0x00=not-bootable)
// if the media guidelines don't care, this value will be set to 0xFF
UInt8 reserved2; // Reserved
UInt32 partitionStart; // The suggested starting sector of the first partition
// as given by guidelines in the specification for this media type
// if this value is set to zero, and the partitionSize value is non-zero
// the media guidelines suggest to not use an MBR, and only use a PBR at sector 0
// if the media guidelines don't care, the partitionSize value will be set to 0
UInt32 partitionSize; // The suggested size of the first partition
// as given by guidelines in the specification for this media type
// if the media guidelines don't care, this value will be set to 0, and
// the partitionStart parameter is also ignored
} CardMetricsType, *CardMetricsPtr;
/********************************************************************
* SlotDrvr library function trap ID's. Each library call gets a trap number:
* SlotDrvrLibTrapXXXX which serves as an index into the library's dispatch table.
* The constant sysLibTrapCustom is the first available trap number after
* the system predefined library traps Open,Close,Sleep & Wake.
*
* WARNING!!! The order of these traps MUST match the order of the dispatch
* table in SlotDrvrLibDispatch.c!!!
********************************************************************/
#define SlotTrapLibAPIVersion (sysLibTrapCustom)
#define SlotTrapCustomControl (sysLibTrapCustom+1)
#define SlotTrapCardPresent (sysLibTrapCustom+2)
#define SlotTrapCardInfo (sysLibTrapCustom+3)
#define SlotTrapCardMediaType (sysLibTrapCustom+4)
#define SlotTrapCardIsFilesystemSupported (sysLibTrapCustom+5)
#define SlotTrapCardMetrics (sysLibTrapCustom+6)
#define SlotTrapCardLowLevelFormat (sysLibTrapCustom+7)
#define SlotTrapCardSectorRead (sysLibTrapCustom+8)
#define SlotTrapCardSectorWrite (sysLibTrapCustom+9)
#define SlotTrapPowerCheck (sysLibTrapCustom+10)
#define SlotTrapMediaType (sysLibTrapCustom+11)
#define SlotTrapCardReserve (sysLibTrapCustom+12)
#define SlotTrapCardRelease (sysLibTrapCustom+13)
#define SlotTrapCardGetSerialPort (sysLibTrapCustom+14)
/********************************************************************
* API Prototypes
********************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
/********************************************************************
* Standard library open, close, sleep and wake functions
********************************************************************/
extern Err SlotOpen(UInt16 slotLibRefNum)
SlotDrvr_LIB_TRAP(sysLibTrapOpen);
extern Err SlotClose(UInt16 slotLibRefNum)
SlotDrvr_LIB_TRAP(sysLibTrapClose);
extern Err SlotSleep(UInt16 slotLibRefNum)
SlotDrvr_LIB_TRAP(sysLibTrapSleep);
extern Err SlotWake(UInt16 slotLibRefNum)
SlotDrvr_LIB_TRAP(sysLibTrapWake);
/********************************************************************
* Custom library API functions
********************************************************************/
extern UInt32 SlotLibAPIVersion(UInt16 slotLibRefNum)
SlotDrvr_LIB_TRAP(SlotTrapLibAPIVersion);
extern Err SlotCustomControl(UInt16 slotLibRefNum, UInt32 apiCreator, UInt16 apiSelector,
void *valueP, UInt16 *valueLenP)
SlotDrvr_LIB_TRAP(SlotTrapCustomControl);
extern Err SlotCardPresent(UInt16 slotLibRefNum, UInt16 slotRefNum)
SlotDrvr_LIB_TRAP(SlotTrapCardPresent);
extern Err SlotCardInfo(UInt16 slotLibRefNum, UInt16 slotRefNum, ExpCardInfoType *infoP)
SlotDrvr_LIB_TRAP(SlotTrapCardInfo);
extern Err SlotCardMediaType(UInt16 slotLibRefNum, UInt16 slotRefNum, UInt32 *mediaTypeP)
SlotDrvr_LIB_TRAP(SlotTrapCardMediaType);
extern Err SlotMediaType(UInt16 slotLibRefNum, UInt16 slotRefNum, UInt32 *mediaTypeP)
SlotDrvr_LIB_TRAP(SlotTrapMediaType);
extern Err SlotCardReserve(UInt16 slotLibRefNum, UInt16 slotRefNum)
SlotDrvr_LIB_TRAP(SlotTrapCardReserve);
extern Err SlotCardRelease(UInt16 slotLibRefNum, UInt16 slotRefNum)
SlotDrvr_LIB_TRAP(SlotTrapCardRelease);
extern Err SlotCardGetSerialPort(UInt16 slotLibRefNum, UInt16 slotRefNum, UInt32* portP)
SlotDrvr_LIB_TRAP(SlotTrapCardGetSerialPort);
/********************************************************************
* SlotDriver Formatting APIs:
********************************************************************/
extern Boolean SlotCardIsFilesystemSupported(UInt16 slotLibRefNum, UInt16 slotRefNum, UInt32 filesystemType)
SlotDrvr_LIB_TRAP(SlotTrapCardIsFilesystemSupported);
extern Err SlotCardMetrics(UInt16 slotLibRefNum, UInt16 slotRefNum, CardMetricsPtr cardMetricsP)
SlotDrvr_LIB_TRAP(SlotTrapCardMetrics);
extern Err SlotCardLowLevelFormat(UInt16 slotLibRefNum, UInt16 slotRefNum)
SlotDrvr_LIB_TRAP(SlotTrapCardLowLevelFormat);
/********************************************************************
* SlotDriver Logical Block Read/Write APIs:
********************************************************************/
extern Err SlotCardSectorRead(UInt16 slotLibRefNum, UInt16 slotRefNum, UInt32 sectorNumber,
UInt8 *bufferP, UInt32 *numSectorsP)
SlotDrvr_LIB_TRAP(SlotTrapCardSectorRead);
extern Err SlotCardSectorWrite(UInt16 slotLibRefNum, UInt16 slotRefNum, UInt32 sectorNumber,
UInt8 *bufferP, UInt32 *numSectorsP)
SlotDrvr_LIB_TRAP(SlotTrapCardSectorWrite);
/********************************************************************
* Power Mgmt APIs:
********************************************************************/
#define slotLibPowerFlag_WakeUp 0x0001 // Add the power required to bring the slot hardware out of low-power mode
#define slotLibPowerFlag_FormatMedia 0x0002 // Add the power required to perform a low-level format of the card media
extern Err SlotPowerCheck(UInt16 slotLibRefNum, UInt16 slotRefNum, UInt16 operationFlags,
UInt16 readBlocks, UInt16 writeBlocks)
SlotDrvr_LIB_TRAP(SlotTrapPowerCheck);
#ifdef __cplusplus
}
#endif
#endif // __SlotDrvr_LIB_H__