/************************************************************************************************************************** * STIR4200.H - SigmaTel STIr4200 hardware (register) specific definitions ************************************************************************************************************************** * (C) Unpublished Copyright of Sigmatel, Inc. All Rights Reserved. * * * Created: 04/06/2000 * Version 0.9 * Edited: 04/27/2000 * Version 0.92 * Edited: 05/03/2000 * Version 0.93 * Edited: 05/12/2000 * Version 0.94 * Edited: 05/19/2000 * Version 0.95 * Edited: 06/29/2000 * Version 0.97 * Edited: 08/22/2000 * Version 1.02 * Edited: 09/16/2000 * Version 1.03 * Edited: 09/25/2000 * Version 1.10 * Edited: 11/10/2000 * Version 1.12 * Edited: 12/29/2000 * Version 1.13 * Edited: 01/16/2001 * Version 1.14 * * **************************************************************************************************************************/ #ifndef __STIR4200_H__ #define __STIR4200_H__ #define STIR4200_FIFO_SIZE 4096 // // Some useful macros // #define MAKEUSHORT(lo, hi) ((unsigned short)(((unsigned char)(lo)) | ((unsigned short)((unsigned char)(hi))) << 8)) #define MAKEULONG(lo, hi) ((unsigned long)(((unsigned short)(lo)) | ((unsigned long)((unsigned short)(hi))) << 16)) #ifndef LOWORD #define LOWORD(l) ((unsigned short)(l)) #endif #ifndef HIWORD #define HIWORD(l) ((unsigned short)(((unsigned long)(l) >> 16) & 0xFFFF)) #endif #ifndef LOBYTE #define LOBYTE(w) ((unsigned char)(w)) #endif #ifndef HIBYTE #define HIBYTE(w) ((unsigned char)(((unsigned short)(w) >> 8) & 0xFF)) #endif /**************************************************************************************************************************/ /* STIr4200 Tranceiver Hardware Model Definitions */ /**************************************************************************************************************************/ typedef struct _STIR4200_TRANCEIVER { UCHAR FifoDataReg; UCHAR ModeReg; UCHAR BaudrateReg; UCHAR ControlReg; UCHAR SensitivityReg; UCHAR StatusReg; UCHAR FifoCntLsbReg; UCHAR FifoCntMsbReg; UCHAR DpllTuneReg; UCHAR IrdigSetupReg; UCHAR Reserved1Reg; UCHAR Reserved2Reg; UCHAR Reserved3Reg; UCHAR Reserved4Reg; UCHAR Reserved5Reg; UCHAR TestReg; } STIR4200_TRANCEIVER, *PSTIR4200_TRANCEIVER; /**************************************************************************************************************************/ /* STIr4200 Receiver State */ /**************************************************************************************************************************/ typedef enum { STATE_INIT = 0, STATE_GOT_FIR_BOF, STATE_GOT_BOF, STATE_ACCEPTING, STATE_ESC_SEQUENCE, STATE_SAW_FIR_BOF, STATE_SAW_EOF, STATE_CLEANUP } PORT_RCV_STATE; #define STATE_GOT_MIR_BOF STATE_GOT_FIR_BOF #define STATE_SAW_MIR_BOF STATE_SAW_FIR_BOF /**************************************************************************************************************************/ /* Register Offsets */ /**************************************************************************************************************************/ #define STIR4200_FIFO_DATA_REG 0 #define STIR4200_MODE_REG 1 #define STIR4200_BAUDRATE_REG 2 #define STIR4200_CONTROL_REG 3 #define STIR4200_SENSITIVITY_REG 4 #define STIR4200_STATUS_REG 5 #define STIR4200_FIFOCNT_LSB_REG 6 #define STIR4200_FIFOCNT_MSB_REG 7 #define STIR4200_DPLLTUNE_REG 8 #define STIR4200_IRDIG_SETUP_REG 9 #define STIR4200_RESERVE1_REG 10 #define STIR4200_RESERVE2_REG 11 #define STIR4200_RESERVE3_REG 12 #define STIR4200_RESERVE4_REG 13 #define STIR4200_RESERVE5_REG 14 #define STIR4200_TEST_REG 15 #define STIR4200_MAX_REG STIR4200_TEST_REG /**************************************************************************************************************************/ /* Register Bit Definitions */ /**************************************************************************************************************************/ #define STIR4200_MODE_PDLCK8 0x01 #define STIR4200_MODE_RESET_OFF 0x02 #define STIR4200_MODE_AUTO_RESET 0x04 #define STIR4200_MODE_BULKIN_FIX 0x08 #define STIR4200_MODE_FIR 0x80 #define STIR4200_MODE_MIR 0x40 #define STIR4200_MODE_SIR 0x20 #define STIR4200_MODE_ASK 0x10 #define STIR4200_MODE_MASK (STIR4200_MODE_FIR | STIR4200_MODE_MIR | STIR4200_MODE_SIR | STIR4200_MODE_ASK) #define STIR4200_CTRL_SDMODE 0x80 #define STIR4200_CTRL_RXSLOW 0x40 #define STIR4200_CTRL_DLOOP1 0x20 #define STIR4200_CTRL_TXPWD 0x10 #define STIR4200_CTRL_RXPWD 0x08 #define STIR4200_CTRL_SRESET 0x01 #define STIR4200_SENS_IDMASK 0x07 #define STIR4200_SENS_SPWIDTH 0x08 #define STIR4200_SENS_BSTUFF 0x10 #define STIR4200_SENS_RXDSNS_DEFAULT 0x20 #define STIR4200_SENS_RXDSNS_4012_SIR_9600 0x20 #define STIR4200_SENS_RXDSNS_4012_SIR 0x00 #define STIR4200_SENS_RXDSNS_4012_FIR 0x20 #define STIR4200_SENS_RXDSNS_INFI_SIR 0x07 #define STIR4200_SENS_RXDSNS_INFI_FIR 0x07 #define STIR4200_SENS_RXDSNS_HP_SIR 0x07 #define STIR4200_SENS_RXDSNS_HP_FIR 0x07 #define STIR4200_SENS_RXDSNS_VISHAY_6102F_FIR 0x07 #define STIR4200_SENS_RXDSNS_VISHAY_6102F_SIR 0x07 #define STIR4200_SENS_RXDSNS_CUSTOM_SIR_9600 0x20 #define STIR4200_SENS_RXDSNS_CUSTOM_SIR 0x00 #define STIR4200_SENS_RXDSNS_CUSTOM_FIR 0x20 #define STIR4200_STAT_EOFRAME 0x80 #define STIR4200_STAT_FFUNDER 0x40 #define STIR4200_STAT_FFOVER 0x20 #define STIR4200_STAT_FFDIR 0x10 #define STIR4200_STAT_FFCLR 0x08 #define STIR4200_STAT_FFEMPTY 0x04 #define STIR4200_STAT_FFRXERR 0x02 #define STIR4200_STAT_FFTXERR 0x01 #define STIR4200_DPLL_DESIRED_4012 0x05 #define STIR4200_DPLL_DESIRED_4012_SIR 0x06 #define STIR4200_DPLL_DESIRED_4012_FIR 0x05 #define STIR4200_DPLL_DESIRED_4000 0x15 #define STIR4200_DPLL_DESIRED_VISHAY 0x15 #define STIR4200_DPLL_DESIRED_INFI 0x06 #define STIR4200_DPLL_DESIRED_HP 0x06 #define STIR4200_DPLL_DESIRED_VISHAY_6102F 0x04 #define STIR4200_DPLL_DEFAULT 0x52 #define STIR4200_DPLL_DESIRED_CUSTOM 0x05 #define STIR4200_DPLL_DESIRED_CUSTOM_SIR 0x06 #define STIR4200_DPLL_DESIRED_CUSTOM_FIR 0x05 #define STIR4200_TEST_EN_OSC_SUSPEND 0x10 /**************************************************************************************************************************/ /* Vendor Specific Device Requests */ /**************************************************************************************************************************/ #define STIR4200_WRITE_REGS_REQ 0 #define STIR4200_READ_REGS_REQ 1 #define STIR4200_READ_ROM_REQ 2 #define STIR4200_WRITE_REG_REQ 3 #define STIR4200_CLEAR_STALL_REQ 1 /**************************************************************************************************************************/ /* STIr4200 Frame Header ID Definitions */ /**************************************************************************************************************************/ #define STIR4200_HEADERID_BYTE1 0x55 #define STIR4200_HEADERID_BYTE2 0xAA typedef struct _STIR4200_FRAME_HEADER { UCHAR id1; // header id byte 1 UCHAR id2; // header id byte 2 UCHAR sizlsb; // frame size LSB UCHAR sizmsb; // frame size MSB } STIR4200_FRAME_HEADER, *PSTIR4200_FRAME_HEADER; /**************************************************************************************************************************/ /* STIr4200 Frame Definitions */ /**************************************************************************************************************************/ #define STIR4200_FIR_PREAMBLE 0x7f #define STIR4200_FIR_PREAMBLE_SIZ 16 #define STIR4200_FIR_BOF 0x7E #define STIR4200_FIR_EOF 0x7E #define STIR4200_FIR_BOF_SIZ 2 #define STIR4200_FIR_EOF_SIZ 2 #define STIR4200_FIR_ESC_CHAR 0x7d #define STIR4200_FIR_ESC_DATA_7D 0x5d #define STIR4200_FIR_ESC_DATA_7E 0x5e #define STIR4200_FIR_ESC_DATA_7F 0x5f #define STIR4200_MIR_BOF 0x7E #define STIR4200_MIR_EOF 0x7E #define STIR4200_MIR_BOF_SIZ 2 #define STIR4200_MIR_EOF_SIZ 2 #define STIR4200_MIR_ESC_CHAR 0x7d #define STIR4200_MIR_ESC_DATA_7D 0x5d #define STIR4200_MIR_ESC_DATA_7E 0x5e // // A few workaroud definitions // #define STIR4200_READ_DELAY 3000 #define STIR4200_MULTIPLE_READ_DELAY 2500 #define STIR4200_DELTA_DELAY 250 #define STIR4200_MAX_BOOST_DELAY 1000 #define STIR4200_MULTIPLE_READ_THREHOLD 2048 #define STIR4200_WRITE_DELAY 2000 #define STIR4200_ESC_PACKET_SIZE 3072 #define STIR4200_SMALL_PACKET_MAX_SIZE 32 #define STIR4200_LARGE_PACKET_MIN_SIZE 1024 #define STIR4200_ACK_WINDOW 20 #define STIR4200_FIFO_OVERRUN_THRESHOLD 100 #define STIR4200_SEND_TIMEOUT 2000 /**************************************************************************************************************************/ /* Prototypes of functions that access the hardware */ /**************************************************************************************************************************/ NTSTATUS St4200ResetFifo( IN PVOID pDevice ); NTSTATUS St4200DoubleResetFifo( IN PVOID pDevice ); NTSTATUS St4200SoftReset( IN PVOID pDevice ); NTSTATUS St4200SetSpeed( IN OUT PVOID pDevice ); NTSTATUS St4200SetIrMode( IN OUT PVOID pDevice, ULONG mode ); NTSTATUS St4200GetFifoCount( IN PVOID pDevice, OUT PULONG pCountFifo ); NTSTATUS St4200TuneDpllAndSensitivity( IN OUT PVOID pDevice, ULONG Speed ); NTSTATUS St4200TurnOffReceiver( IN OUT PVOID pDevice ); NTSTATUS St4200TurnOnReceiver( IN OUT PVOID pDevice ); NTSTATUS St4200EnableOscillatorPowerDown( IN OUT PVOID pDevice ); NTSTATUS St4200TurnOnSuspend( IN OUT PVOID pDevice ); NTSTATUS St4200TurnOffSuspend( IN OUT PVOID pDevice ); NTSTATUS St4200WriteMultipleRegisters( IN PVOID pDevice, UCHAR FirstRegister, UCHAR RegistersToWrite ); NTSTATUS St4200WriteRegister( IN PVOID pDevice, UCHAR RegisterToWrite ); NTSTATUS St4200ReadRegisters( IN OUT PVOID pDevice, UCHAR FirstRegister, UCHAR RegistersToRead ); NTSTATUS St4200FakeSend( IN PVOID pDevice, PUCHAR pData, ULONG DataSize ); NTSTATUS St4200FakeReceive( IN PVOID pDevice, PUCHAR pData, ULONG DataSize ); NTSTATUS St4200CompleteReadWriteRequest( IN PDEVICE_OBJECT pUsbDevObj, IN PIRP pIrp, IN PVOID Context ); /**************************************************************************************************************************/ #endif // __STIR4200_H__