Rev 23 | Details | Compare with Previous | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 23 | f9daq | 1 | #ifndef __PCICC32_H__ |
| 2 | #define __PCICC32_H__ |
||
| 3 | //------------------------------------------------------------------------- |
||
| 4 | // WINNT driver for PCICC32 interface from ARW Elektronik, Germany -------- |
||
| 5 | // IO definitions and common data structures between application and driver |
||
| 6 | // |
||
| 7 | // (c) 2000,2001 ARW Elektronik |
||
| 8 | // |
||
| 9 | // this source code is published under GPL (Open Source). You can use, redistrubute and |
||
| 10 | // modify it unless this header is not modified or deleted. No warranty is given that |
||
| 11 | // this software will work like expected. |
||
| 12 | // This product is not authorized for use as critical component in life support systems |
||
| 13 | // wihout the express written approval of ARW Elektronik Germany. |
||
| 14 | // |
||
| 15 | // Please announce changes and hints to ARW Elektronik |
||
| 16 | // |
||
| 17 | // what who when |
||
| 18 | // started AR 16.04.2000 |
||
| 19 | // added irq functionality AR 24.02.2001 |
||
| 20 | // added until 'not Q' read/write mode AR 03.03.2001 |
||
| 21 | // added AUTOREAD AR 17.03.2001 |
||
| 22 | // |
||
| 23 | |||
| 24 | //------------------------------------------------------------------------- |
||
| 25 | // INCLUDES |
||
| 26 | // |
||
| 27 | // #include <devioctl.h> must be declared before inclusion when used for driver |
||
| 28 | // #include <winioctl.h> must be declared before inclusion when used for applications |
||
| 29 | |||
| 30 | //------------------------------------------------------------------------- |
||
| 31 | // DEFINES |
||
| 32 | // |
||
| 33 | |||
| 34 | //---------------------------------------------------------------------------------------- |
||
| 35 | // macros for simple CAMAC NAF address calculation |
||
| 36 | // |
||
| 37 | #define NAF(n, a, f) ((ULONG)((n << 10) + (a << 6) + ((f & 0xf) << 2))) |
||
| 38 | |||
| 39 | // to get a compatible view to WIN95 driver |
||
| 40 | #define USER_CONTROL_CODE(x) (x) |
||
| 41 | |||
| 42 | // VPCIC32D_ATTACH_CC32 and VPCIC32D_DETACH_CC32 are incompatible to WINNT - please use read and write commands |
||
| 43 | |||
| 44 | // get the interrupt and timeout status from a CC32 interface (0x00220008) |
||
| 45 | #define PCICC32_GET_STATUS CTL_CODE(\ |
||
| 46 | FILE_DEVICE_UNKNOWN,\ |
||
| 47 | USER_CONTROL_CODE(2),\ |
||
| 48 | METHOD_BUFFERED,\ |
||
| 49 | FILE_ANY_ACCESS) |
||
| 50 | |||
| 51 | // clear the timeout status of a CC32 interface (0x0022000C) |
||
| 52 | #define PCICC32_CLEAR_STATUS CTL_CODE(\ |
||
| 53 | FILE_DEVICE_UNKNOWN,\ |
||
| 54 | USER_CONTROL_CODE(3),\ |
||
| 55 | METHOD_BUFFERED,\ |
||
| 56 | FILE_ANY_ACCESS) |
||
| 57 | |||
| 58 | // set the access parameter for this file (0x00220010) |
||
| 59 | #define PCICC32_SET_ACCESS_PARA CTL_CODE(\ |
||
| 60 | FILE_DEVICE_UNKNOWN,\ |
||
| 61 | USER_CONTROL_CODE(4),\ |
||
| 62 | METHOD_BUFFERED,\ |
||
| 63 | FILE_ANY_ACCESS) |
||
| 64 | |||
| 65 | // allow or inhibit CC32 interrupt requests (0x00220014) |
||
| 66 | #define PCICC32_CONTROL_INTERRUPTS CTL_CODE(\ |
||
| 67 | FILE_DEVICE_UNKNOWN,\ |
||
| 68 | USER_CONTROL_CODE(5),\ |
||
| 69 | METHOD_BUFFERED,\ |
||
| 70 | FILE_ANY_ACCESS) |
||
| 71 | |||
| 72 | // requests thru blocking io the status of a pending or a rising interrupt (0x0022001C) |
||
| 73 | #define PCICC32_INSTALL_IRQ_BLOCK CTL_CODE(\ |
||
| 74 | FILE_DEVICE_UNKNOWN,\ |
||
| 75 | USER_CONTROL_CODE(7),\ |
||
| 76 | METHOD_BUFFERED,\ |
||
| 77 | FILE_ANY_ACCESS) |
||
| 78 | |||
| 79 | // requests to access the PLX LCR for test and debug (0x00220020) |
||
| 80 | #define PCICC32_ACCESS_LCR CTL_CODE(\ |
||
| 81 | FILE_DEVICE_UNKNOWN,\ |
||
| 82 | USER_CONTROL_CODE(8),\ |
||
| 83 | METHOD_BUFFERED,\ |
||
| 84 | FILE_ANY_ACCESS) |
||
| 85 | |||
| 86 | // set to check for control-code overflow |
||
| 87 | #define PCICC32_LAST_CTL_CODE PCICC32_ACCESS_LCR |
||
| 88 | |||
| 89 | // mask bits for interrupt status |
||
| 90 | #define LAM_IRQ 0x00FFFFFF // there was a LAM responible for the timeout |
||
| 91 | #define CONNECTION_TIMEOUT 0x08000000 // irq raised through a connection timout |
||
| 92 | #define LAM_BUS_OR 0x10000000 // a LAM-BUS-OR is pending |
||
| 93 | #define LAM_NOT_OR 0x20000000 // a LAM-NOT-OR is pending |
||
| 94 | #define LAM_AND_OR 0x40000000 // a LAM-AND-OR is pending |
||
| 95 | #define LAM_FF 0x80000000 // the LAM-Flip-Flop was set |
||
| 96 | |||
| 97 | // switches for PCICC32_ACCESS_COMMAND.wAccessType |
||
| 98 | #define WORD_ACCESS (UCHAR)2 // word |
||
| 99 | #define LONG_ACCESS (UCHAR)4 // long |
||
| 100 | |||
| 101 | // define bits for PCICC32_ACCESS_COMMAND.wBlockTransfer |
||
| 102 | #define UNTIL_NOT_Q 0x0001 // read/write unttil 'not Q' switch |
||
| 103 | #define AUTOREAD 0x0002 // PCIADA data pipelining access tuner switch |
||
| 104 | |||
| 105 | // data lane size constants for PCICC32_ACCESS_LCR |
||
| 106 | #define BYTE_ACCESS (UCHAR)1 // write byte wise (illegal) |
||
| 107 | #define WORD_ACCESS (UCHAR)2 // word |
||
| 108 | #define LONG_ACCESS (UCHAR)4 // long |
||
| 109 | |||
| 110 | // PCICC32_ACCESS_LCR access constants |
||
| 111 | #define LCR_READ 0 // read only access |
||
| 112 | #define LCR_WRITE 1 // write and read back access |
||
| 113 | #define LCR_OR 2 // read, bitwise 'or' content and read back access |
||
| 114 | #define LCR_AND 3 // read, bitwise 'and' content and read back access |
||
| 115 | #define LCR_WRITE_ONLY 4 // do not read back after write |
||
| 116 | |||
| 117 | // this structure is output from VPCIC32_GET_STATUS call |
||
| 118 | typedef struct |
||
| 119 | { |
||
| 120 | ULONG dwInterface; // CC32 module number (for compatibility to win95/98 only - not used) |
||
| 121 | USHORT bTimeout; // denotes a pending PCIADA timeout |
||
| 122 | USHORT bInterrupt; // denotes a pending LAM interrupt |
||
| 123 | } PCICC32_STATUS; |
||
| 124 | |||
| 125 | // this structure sets the access parameter for following reads or writes to this path |
||
| 126 | typedef struct |
||
| 127 | { |
||
| 128 | ULONG dwInterface; // CC32 module number (for compatibility to win95/98 only - not used) |
||
| 129 | USHORT wAccessType; // set the current access type (WORD_ACCESS, LONG_ACCESS) |
||
| 130 | USHORT wBlockTransfer; // set AUTOREAD or UNTIL_NOT_Q |
||
| 131 | } PCICC32_ACCESS_COMMAND; |
||
| 132 | |||
| 133 | // this structure is used to control the interrupts |
||
| 134 | typedef struct |
||
| 135 | { |
||
| 136 | ULONG dwInterface; // CC32 module number (for compatibility to win95/98 only - not used) |
||
| 137 | USHORT wEnable; // a 1 allows, a 0 inhibits interrupt requests |
||
| 138 | } PCICC32_IRQ_CONTROL; |
||
| 139 | |||
| 140 | // this structure returns from a blocking interrupt status call |
||
| 141 | typedef struct |
||
| 142 | { |
||
| 143 | ULONG dwInterface; // CC32 module number (for compatibility to win95/98 only - not used) |
||
| 144 | ULONG dwInterruptFlags; // the return status at the return of the blocking call |
||
| 145 | } PCICC32_IRQ_RESPONSE; |
||
| 146 | |||
| 147 | // structure to access the local configuration space of PLX chip (test / debug only) with PCICC32_ACCESS_LCR |
||
| 148 | typedef struct |
||
| 149 | { |
||
| 150 | ULONG dwInterface; // here dummy 'cause of compatibility to WIN95 |
||
| 151 | ULONG dwContent; // content to write, and, or |
||
| 152 | USHORT wRegisterAddress; // address offset of LCR register |
||
| 153 | UCHAR bAccessMode; // LCR_READ, write, or, and |
||
| 154 | UCHAR bBytesLane; // the data access width |
||
| 155 | } PCICC32_LCR_ACCESS; |
||
| 156 | |||
| 157 | #endif // __PCICC32_H__ |