IOSerialStreamSync.h [plain text]
#ifndef _SERIAL_IOSERIALSTREAMSYNC_H
#define _SERIAL_IOSERIALSTREAMSYNC_H
#include <IOKit/IOService.h>
#ifdef __LP64__
#define PD_DATA_MASK 0x03U
#define PD_DATA_VOID 0x00U
#define PD_DATA_BYTE 0x01U
#define PD_DATA_WORD 0x02U
#define PD_DATA_LONG 0x03U
#else
#define PD_DATA_MASK 0x03UL
#define PD_DATA_VOID 0x00UL
#define PD_DATA_BYTE 0x01UL
#define PD_DATA_WORD 0x02UL
#define PD_DATA_LONG 0x03UL
#endif
#define PD_OP(x) ((x) << 2)
#define PD_E_MASK (~PD_DATA_MASK)
#define PD_E_EOQ (PD_DATA_VOID|PD_OP( 0)) // Always nextEvent on empty queue
#define PD_E_ACTIVE (PD_DATA_BYTE|PD_OP( 1)) // BOOL start/shutdown chip
#define PD_E_TXQ_SIZE (PD_DATA_LONG|PD_OP( 2))
#define PD_E_RXQ_SIZE (PD_DATA_LONG|PD_OP( 3))
#define PD_E_TXQ_LOW_WATER (PD_DATA_LONG|PD_OP( 4))
#define PD_E_RXQ_LOW_WATER (PD_DATA_LONG|PD_OP( 5))
#define PD_E_TXQ_HIGH_WATER (PD_DATA_LONG|PD_OP( 6))
#define PD_E_RXQ_HIGH_WATER (PD_DATA_LONG|PD_OP( 7))
#define PD_E_TXQ_AVAILABLE (PD_DATA_LONG|PD_OP( 8))
#define PD_E_RXQ_AVAILABLE (PD_DATA_LONG|PD_OP( 9))
#define PD_E_TXQ_FLUSH (PD_DATA_VOID|PD_OP(10))
#define PD_E_RXQ_FLUSH (PD_DATA_LONG|PD_OP(11))
#define PD_E_DATA_RATE (PD_DATA_LONG|PD_OP(12)) // raw bits of symbols per second
#define PD_E_RX_DATA_RATE (PD_DATA_LONG|PD_OP(13))
#define PD_E_DATA_SIZE (PD_DATA_LONG|PD_OP(14)) // raw bits per symbol
#define PD_E_RX_DATA_SIZE (PD_DATA_LONG|PD_OP(15))
#define PD_E_DATA_INTEGRITY (PD_DATA_LONG|PD_OP(16)) // parity or ECC method
#define PD_E_RX_DATA_INTEGRITY (PD_DATA_LONG|PD_OP(17))
#define PD_E_EXTERNAL_CLOCK_MODE (PD_DATA_LONG|PD_OP(28)) // multiplier between clock and data rates
#define PD_E_DELAY (PD_DATA_LONG|PD_OP(18)) // inter-character delay (us)
#define PD_E_DATA_LATENCY (PD_DATA_LONG|PD_OP(19)) // A dequeueData Latency timeout
#define PD_E_FLOW_CONTROL (PD_DATA_LONG|PD_OP(20)) // enable/disable each flow mechanism
#define PD_E_VALID_DATA (PD_DATA_VOID|PD_OP(21)) // A valid frame was received
#define PD_E_VALID_DATA_BYTE (PD_DATA_BYTE|PD_E_VALID_DATA)
#define PD_E_VALID_DATA_WORD (PD_DATA_WORD|PD_E_VALID_DATA)
#define PD_E_VALID_DATA_LONG (PD_DATA_LONG|PD_E_VALID_DATA)
#define PD_E_SPECIAL (PD_DATA_VOID|PD_OP(22)) // valid data received with 'special' value
#define PD_E_SPECIAL_BYTE (PD_DATA_BYTE|PD_E_SPECIAL)
#define PD_E_SPECIAL_WORD (PD_DATA_WORD|PD_E_SPECIAL)
#define PD_E_SPECIAL_LONG (PD_DATA_LONG|PD_E_SPECIAL)
#define PD_E_FRAMING_ERROR (PD_DATA_VOID|PD_OP(23)) // Failure occured assembling frame
#define PD_E_FRAMING_BYTE (PD_DATA_BYTE|PD_E_FRAMING_ERROR)
#define PD_E_FRAMING_WORD (PD_DATA_WORD|PD_E_FRAMING_ERROR)
#define PD_E_FRAMING_LONG (PD_DATA_LONG|PD_E_FRAMING_ERROR)
#define PD_E_INTEGRITY_ERROR (PD_DATA_VOID|PD_OP(24)) // An uncorrectable frame was received
#define PD_E_INTEGRITY_BYTE (PD_DATA_BYTE|PD_E_INTEGRITY_ERROR)
#define PD_E_INTEGRITY_WORD (PD_DATA_WORD|PD_E_INTEGRITY_ERROR)
#define PD_E_INTEGRITY_LONG (PD_DATA_LONG|PD_E_INTEGRITY_ERROR)
#define PD_E_INTEGRITY_WARNING (PD_DATA_VOID|PD_OP(25)) // A correctable frame was received
#define PD_E_HW_OVERRUN_ERROR (PD_DATA_VOID|PD_OP(26)) // Hardware's buffer overflowed, data lost
#define PD_E_SW_OVERRUN_ERROR (PD_DATA_VOID|PD_OP(27)) // Driver's buffer overflowed, data lost
#define PD_S_MASK 0xffff0000UL
#define PD_S_RX_OFFSET 7
#define PD_S_ACQUIRED 0x80000000UL
#define PD_S_ACTIVE 0x40000000UL
#define PD_S_TX_ENABLE 0x20000000UL
#define PD_S_TX_BUSY 0x10000000UL
#define PD_S_TX_EVENT 0x08000000UL
#define PD_S_TXQ_EMPTY 0x04000000UL
#define PD_S_TXQ_LOW_WATER 0x02000000UL
#define PD_S_TXQ_HIGH_WATER 0x01000000UL
#define PD_S_TXQ_FULL 0x00800000UL
#define PD_S_TXQ_MASK ( PD_S_TXQ_EMPTY | PD_S_TXQ_LOW_WATER \
| PD_S_TXQ_FULL | PD_S_TXQ_HIGH_WATER )
#define PD_S_RX_ENABLE (PD_S_TX_ENABLE >> PD_S_RX_OFFSET)
#define PD_S_RX_BUSY (PD_S_TX_BUSY >> PD_S_RX_OFFSET)
#define PD_S_RX_EVENT (PD_S_TX_EVENT >> PD_S_RX_OFFSET)
#define PD_S_RXQ_EMPTY (PD_S_TXQ_EMPTY >> PD_S_RX_OFFSET)
#define PD_S_RXQ_LOW_WATER (PD_S_TXQ_LOW_WATER >> PD_S_RX_OFFSET)
#define PD_S_RXQ_HIGH_WATER (PD_S_TXQ_HIGH_WATER >> PD_S_RX_OFFSET)
#define PD_S_RXQ_FULL (PD_S_TXQ_FULL >> PD_S_RX_OFFSET)
#define PD_S_RXQ_MASK (PD_S_TXQ_MASK >> PD_S_RX_OFFSET)
class IOSerialDriverSync;
class IOSerialStreamSync : public IOService
{
OSDeclareDefaultStructors(IOSerialStreamSync);
protected:
IOSerialDriverSync *fProvider;
void *fRefCon;
public:
virtual IOReturn acquirePort(bool sleep);
virtual IOReturn releasePort();
virtual IOReturn setState(UInt32 state, UInt32 mask);
virtual UInt32 getState();
virtual IOReturn watchState(UInt32 *state, UInt32 mask);
virtual UInt32 nextEvent();
virtual IOReturn executeEvent(UInt32 event, UInt32 data);
virtual IOReturn requestEvent(UInt32 event, UInt32 *data);
virtual IOReturn enqueueEvent(UInt32 event, UInt32 data, bool sleep);
virtual IOReturn dequeueEvent(UInt32 *event, UInt32 *data, bool sleep);
virtual IOReturn enqueueData(UInt8 *buffer, UInt32 size, UInt32 *count, bool sleep );
virtual IOReturn dequeueData(UInt8 *buffer, UInt32 size, UInt32 *count, UInt32 min);
virtual bool init(OSDictionary *dictionary = 0, void *refCon = 0);
virtual bool attach(IOService *provider);
void *getRefCon() const { return fRefCon; }
OSMetaClassDeclareReservedUnused(IOSerialStreamSync, 0);
OSMetaClassDeclareReservedUnused(IOSerialStreamSync, 1);
OSMetaClassDeclareReservedUnused(IOSerialStreamSync, 2);
OSMetaClassDeclareReservedUnused(IOSerialStreamSync, 3);
OSMetaClassDeclareReservedUnused(IOSerialStreamSync, 4);
OSMetaClassDeclareReservedUnused(IOSerialStreamSync, 5);
OSMetaClassDeclareReservedUnused(IOSerialStreamSync, 6);
OSMetaClassDeclareReservedUnused(IOSerialStreamSync, 7);
OSMetaClassDeclareReservedUnused(IOSerialStreamSync, 8);
OSMetaClassDeclareReservedUnused(IOSerialStreamSync, 9);
OSMetaClassDeclareReservedUnused(IOSerialStreamSync, 10);
OSMetaClassDeclareReservedUnused(IOSerialStreamSync, 11);
OSMetaClassDeclareReservedUnused(IOSerialStreamSync, 12);
OSMetaClassDeclareReservedUnused(IOSerialStreamSync, 13);
OSMetaClassDeclareReservedUnused(IOSerialStreamSync, 14);
OSMetaClassDeclareReservedUnused(IOSerialStreamSync, 15);
};
#endif