/* ************************************************************************ * * SETTINGS.h * * * Portions Copyright (C) 1996-1998 National Semiconductor Corp. * All rights reserved. * Copyright (C) 1996-1998 Microsoft Corporation. All Rights Reserved. * * * ************************************************************************* */ #ifndef SETTINGS_H #define SETTINGS_H #include "dongle.h" #if DBG /* { */ /* * The DBG_ADD_PKT_ID flag causes the miniport to add/delete a packet * id to each packet. This is only for debugging purposes; it makes * the miniport INCOMPATIBLE with all others. */ //#define DBG_ADD_PKT_ID #ifdef DBG_ADD_PKT_ID extern BOOLEAN addPktIdOn; #endif typedef enum { DBG_ERR = (1 << 0), DBG_STAT = (1 << 1), DBG_MSG = (1 << 2), DBG_OUT = (1 << 2), DBG_BUF = (1 << 3), DBG_PACKET = (1 << 4), DBG_PKT = (1 << 4), // Added so we can look at an ndis buffer. DBG_NDIS_PACKET = (1 << 5), DBG_DUMPLOG = (1 << 6), DBG_LOG = (1 << 7), DBG_ALL = (DBG_ERR|DBG_STAT|DBG_MSG|DBG_BUF|DBG_PACKET), DBG_SIR_MODE = (1 << 8), DBG_FIR_MODE = (1 << 9), DBG_TX = (1 << 10), DBG_RX = (1 << 11), DBG_DMA = (1 << 12), DBG_ISR = (1 << 13), DBG_TRACE_TX = (1 << 14) }; // extern ULONG _cdecl DbgPrint(PCHAR Format, ...); extern UINT dbgOpt; #define DBG_NDIS_RESULT_STR(_ndisResult) \ ((PUCHAR) ((_ndisResult == NDIS_STATUS_SUCCESS) ? \ "NDIS_STATUS_SUCCESS" : (_ndisResult == NDIS_STATUS_FAILURE) ? \ "NDIS_STATUS_FAILURE" : (_ndisResult == NDIS_STATUS_PENDING) ? \ "NDIS_STATUS_PENDING" : "NDIS_STATUS_???")) #define DBGPRINT(dbgprint_params_in_parens) \ { \ DbgPrint("NSC: "); \ DbgPrint dbgprint_params_in_parens; \ DbgPrint("\r\n"); \ } #define DEBUGMSG(flags, dbgprint_params_in_parens) \ if (dbgOpt & (flags)) \ { \ DbgPrint dbgprint_params_in_parens; \ } #define DEBUGFIR(flags, dbgprint_params_in_parens) \ if (dbgOpt & DBG_FIR_MODE && dbgOpt & (flags)) \ { \ DbgPrint dbgprint_params_in_parens; \ } #define DBGOUT(dbgprint_params_in_parens) \ if (dbgOpt & DBG_MSG) { \ if ((DebugSpeed > MAX_SIR_SPEED) && \ (dbgOpt & DBG_FIR_MODE)) { \ DBGPRINT(dbgprint_params_in_parens); \ } \ else if (dbgOpt & DBG_SIR_MODE) { \ DBGPRINT(dbgprint_params_in_parens); \ } \ } #define DBGERR(dbgprint_params_in_parens) \ if (dbgOpt & DBG_ERR) { \ if ((DebugSpeed > MAX_SIR_SPEED) && \ (dbgOpt & DBG_FIR_MODE)) { \ DBGPRINT(dbgprint_params_in_parens); \ } \ else if (dbgOpt & DBG_SIR_MODE) { \ DBGPRINT(dbgprint_params_in_parens); \ } \ } #define DBGSTAT(dbgprint_params_in_parens) \ if (dbgOpt & DBG_STAT) { \ if ((DebugSpeed > MAX_SIR_SPEED) && \ (dbgOpt & DBG_FIR_MODE)) { \ DBGPRINT(dbgprint_params_in_parens); \ } \ else if (dbgOpt & DBG_SIR_MODE) { \ DBGPRINT(dbgprint_params_in_parens); \ } \ } #define DBGPKT(dbgprint_params_in_parens) \ if (dbgOpt & DBG_PACKET) { \ if ((DebugSpeed > MAX_SIR_SPEED) && \ (dbgOpt & DBG_FIR_MODE)) { \ DBGPRINT(dbgprint_params_in_parens); \ } \ else if (dbgOpt & DBG_SIR_MODE) { \ DBGPRINT(dbgprint_params_in_parens); \ } \ } #define DBG_D(i) DbgPrint("IRSIR:"#i"==%d\n", (i)) #define DBG_X(x) DbgPrint("IRSIR:"#x"==0x%0*X\n", sizeof(x)*2, ((ULONG_PTR)(x))&((1<<(sizeof(x)*8))-1) ) #define DBG_UNISTR(s) DbgPrint("IRSIR:"#s"==%wZ\n", (s)) extern VOID DBG_NDIS_Buffer(PNDIS_BUFFER ndisBuf); #define DBG_NDIS_BUFFER(Ndis_buffer) \ if (dbgOpt & DBG_NDIS_PACKET) { \ if ((DebugSpeed > MAX_SIR_SPEED) && \ (dbgOpt & DBG_FIR_MODE)) { \ DBG_NDIS_Buffer(Ndis_buffer); \ } \ else if (dbgOpt & DBG_SIR_MODE) { \ DBG_NDIS_Buffer(Ndis_buffer); \ } \ } extern VOID DBG_PrintBuf(PUCHAR bufptr, UINT buflen); #define DBGPRINTBUF(bufptr, buflen) \ if (dbgOpt & DBG_BUF) { \ if ((DebugSpeed > MAX_SIR_SPEED) && \ (dbgOpt & DBG_FIR_MODE)) { \ DBG_PrintBuf((PUCHAR)(bufptr), (UINT)(buflen)); \ } \ else if (dbgOpt & DBG_SIR_MODE) { \ DBG_PrintBuf((PUCHAR)(bufptr), (UINT)(buflen)); \ } \ } /* * LOGGING stuff */ struct logEntry { char *msg; LONGLONG usec; UINT val; }; #define LOG_LENGTH 10000 extern UINT dbgLogIndex; extern struct logEntry dbgLog[]; #define LOG(logmsg, val) \ { \ if (dbgOpt & DBG_LOG) { \ if ((DebugSpeed > MAX_SIR_SPEED) && \ (dbgOpt & DBG_FIR_MODE)) { \ LogEvent((logmsg), (UINT)(val)); \ } \ else if (dbgOpt & DBG_SIR_MODE) { \ LogEvent((logmsg), (UINT)(val)); \ } \ } \ else if (dbgOpt & DBG_DUMPLOG) { \ if ((DebugSpeed > MAX_SIR_SPEED) && \ (dbgOpt & DBG_FIR_MODE)) { \ DumpLog(); \ } \ else if (dbgOpt & DBG_SIR_MODE) { \ DumpLog(); \ } \ } \ } #else /* } { */ #define DbgBreakPoint() #define DBGOUT(dbgprint_params_in_parens) #define DBGERR(dbgprint_params_in_parens) #define DBGPRINTBUF(bufptr, buflen) #define DBGSTAT(dbgprint_params_in_parens) #define DBGPKT(dbgprint_params_in_parens) #define DBG_NDIS_RESULT_STR(_ndisResult) #define LOG(logmsg, val) #define DEBUGFIR(flags, dbgprint_params_in_parens) #define DEBUGMSG(flags, dbgprint_params_in_parens) #define DBG_D(i) #define DBG_X(x) #define DBG_UNISTR(s) #endif /* } #if DBG */ enum baudRates { /* Slow IR */ BAUDRATE_2400 = 0, BAUDRATE_9600, BAUDRATE_19200, BAUDRATE_38400, BAUDRATE_57600, BAUDRATE_115200, /* Medium IR */ BAUDRATE_576000, BAUDRATE_1152000, /* Fast IR */ BAUDRATE_4000000, NUM_BAUDRATES /* must be last */ }; #define DEFAULT_BAUDRATE BAUDRATE_115200 #define ALL_SLOW_IRDA_SPEEDS ( \ NDIS_IRDA_SPEED_2400 | NDIS_IRDA_SPEED_9600 | \ NDIS_IRDA_SPEED_19200 | NDIS_IRDA_SPEED_38400 | \ NDIS_IRDA_SPEED_57600 | NDIS_IRDA_SPEED_115200) #define ALL_IRDA_SPEEDS ( \ ALL_SLOW_IRDA_SPEEDS | NDIS_IRDA_SPEED_1152K | NDIS_IRDA_SPEED_4M) #define MAX_SIR_SPEED 115200 #define MIN_FIR_SPEED 4000000 #define DEFAULT_BOFS_CODE BOFS_48 #define MAX_NUM_EXTRA_BOFS 48 #define DEFAULT_NUM_EXTRA_BOFS MAX_NUM_EXTRA_BOFS #define DEFAULT_TURNAROUND_usec 1000 typedef struct { enum baudRates tableIndex; UINT bitsPerSec; UINT ndisCode; // bitmask element } baudRateInfo; #define DEFAULT_BAUD_RATE 9600 /* * This is the largest IR packet size (counting _I_ field only, * and not counting ESC characters) that we handle. * * Note: There is an apparent bug with the NSC part. It cannot transfer * more than 2048 bytes TOTAL, including the 2-byte header. Unfortunately, * the actual frame size will be 2 bytes more than what we indicate to the * protocol. We will indicate 2046, but the protocol will actually jump down * to 1024, the next step down in frame sizes. */ #define MAX_I_DATA_SIZE 2048 //#define MAX_I_DATA_SIZE 1024 #define MAX_NDIS_DATA_SIZE (IR_ADDR_SIZE+IR_CONTROL_SIZE+MAX_I_DATA_SIZE) #ifdef DBG_ADD_PKT_ID #pragma message("WARNING: INCOMPATIBLE DEBUG VERSION") #define MAX_RCV_DATA_SIZE (MAX_NDIS_DATA_SIZE+SLOW_IR_FCS_SIZE+2) #define MAX_DMA_XMIT_DATA_SIZE (MAX_NDIS_DATA_SIZE+SLOW_IR_FCS_SIZE+2) #else #define MAX_RCV_DATA_SIZE (MAX_NDIS_DATA_SIZE+SLOW_IR_FCS_SIZE) #define MAX_DMA_XMIT_DATA_SIZE (MAX_NDIS_DATA_SIZE+SLOW_IR_FCS_SIZE) #endif #define MAX_TX_PACKETS 7 #define MAX_RX_PACKETS 7 /* * We loop an extra time in the receive FSM in order to see EOF after the * last data byte; so we need some extra space in readBuf in case we then * get garbage instead. */ #define RCV_BUFFER_SIZE (MAX_RCV_DATA_SIZE +4+sizeof(LIST_ENTRY)) #define RCV_DMA_SIZE ((MAX_RX_PACKETS+2) * (MAX_RCV_DATA_SIZE + FAST_IR_FCS_SIZE)) #define RCV_BUF_TO_LIST_ENTRY(b) ((PLIST_ENTRY)((PUCHAR)(b)-sizeof(LIST_ENTRY))) #define LIST_ENTRY_TO_RCV_BUF(e) ((PVOID)((PUCHAR)(e)+sizeof(LIST_ENTRY))) #if (RCV_DMA_SIZE > 0x10000) #error "RCV_DMA_SIZE can't span physical segments" #endif /* * We allocate buffers twice as large as the max rcv size to accomodate ESC * characters and BOFs, etc. Recall that in the worst possible case, the * data contains all BOF/EOF/ESC characters, in which case we must expand * it to twice its original size. */ #define MAX_POSSIBLE_IR_PACKET_SIZE_FOR_DATA(dataLen) ( \ (dataLen) * 2 + (MAX_NUM_EXTRA_BOFS + 1) * \ SLOW_IR_BOF_SIZE + IR_ADDR_SIZE + IR_CONTROL_SIZE + \ SLOW_IR_FCS_SIZE + SLOW_IR_EOF_SIZE) #define MAX_IRDA_DATA_SIZE \ MAX_POSSIBLE_IR_PACKET_SIZE_FOR_DATA(MAX_I_DATA_SIZE) /* * When FCS is computed on an IR packet with FCS appended, the result * should be this constant. */ #define GOOD_FCS ((USHORT) ~0xf0b8) /* * Sizes of IrLAP frame fields: * Beginning Of Frame (BOF) * End Of Frame (EOF) * Address * Control */ #define IR_ADDR_SIZE 1 #define IR_CONTROL_SIZE 1 #define SLOW_IR_BOF_TYPE UCHAR #define SLOW_IR_BOF_SIZE sizeof(SLOW_IR_BOF_TYPE) #define SLOW_IR_EXTRA_BOF_TYPE UCHAR #define SLOW_IR_EXTRA_BOF_SIZE sizeof(SLOW_IR_EXTRA_BOF_TYPE) #define SLOW_IR_EOF_TYPE UCHAR #define SLOW_IR_EOF_SIZE sizeof(SLOW_IR_EOF_TYPE) #define SLOW_IR_FCS_TYPE USHORT #define SLOW_IR_FCS_SIZE sizeof(SLOW_IR_FCS_TYPE) #define SLOW_IR_BOF 0xC0 /* don't use 0xFF, it breaks some HP printers! */ #define SLOW_IR_EXTRA_BOF 0xC0 #define SLOW_IR_EOF 0xC1 #define SLOW_IR_ESC 0x7D #define SLOW_IR_ESC_COMP 0x20 #define MEDIUM_IR_BOF 0x7E #define MEDIUM_IR_EOF 0x7E #define MEDIUM_IR_FCS_SIZE 2 #define FAST_IR_FCS_SIZE 4 #define FAST_IR_EOF_SIZE 1 #define MIN(a,b) (((a) <= (b)) ? (a) : (b)) #define MAX(a,b) (((a) >= (b)) ? (a) : (b)) #endif SETTINGS_H