00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 #ifndef VMEDRV_H
00054 #define VMEDRV_H
00055
00056 #define VMEDRV_REV 0x0301
00057
00058 #define VME_MINOR_TYPE_MASK 0xF0
00059 #define VME_MINOR_OUT 0x00
00060 #define VME_MINOR_DMA 0x10
00061 #define VME_MINOR_MISC 0x20
00062 #define VME_MINOR_SLOTS1 0x30
00063 #define VME_MINOR_SLOTS2 0x40
00064
00065 #define VME_MINOR_CTL 0x20
00066 #define VME_MINOR_REGS 0x21
00067 #define VME_MINOR_RMW 0x22
00068 #define VME_MINOR_LM 0x23
00069 #ifndef PAGESIZE
00070 #define PAGESIZE 4096
00071 #endif
00072 #ifndef LINESIZE
00073 #define LINESIZE 0x20
00074 #endif
00075 #define VME_MAX_WINDOWS 8
00076 #ifndef PCI_DEVICE_ID_TUNDRA_TEMPE
00077 #define PCI_DEVICE_ID_TUNDRA_TEMPE 0x148
00078 #endif
00079
00080
00081 #ifdef PPC
00082 #define longswap(x) (x)
00083 #else
00084 #define longswap(x) ((uint32_t) ( \
00085 ((x<<24) & 0xff000000) | \
00086 ((x<<8) & 0x00ff0000) | \
00087 ((x>>8) & 0x0000ff00) | \
00088 ((x>>24) & 0x000000ff) \
00089 ))
00090 #endif
00091
00092 #ifndef iowrite32
00093 #define iowrite32 writel
00094 #endif
00095 #ifndef iowrite16
00096 #define iowrite16 writew
00097 #endif
00098 #ifndef iowrite8
00099 #define iowrite8 writeb
00100 #endif
00101
00102 #ifndef ioread32
00103 #define ioread32 readl
00104 #endif
00105 #ifndef ioread16
00106 #define ioread16 readw
00107 #endif
00108 #ifndef ioread8
00109 #define ioread8 readb
00110 #endif
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120 #define VME_DATA 1
00121 #define VME_PROG 2
00122 #define VME_USER 4
00123 #define VME_SUPER 8
00124
00125
00126
00127
00128 typedef enum {
00129 VME_A16,
00130 VME_A24,
00131 VME_A32,
00132 VME_A64,
00133 VME_CRCSR,
00134 VME_USER1,
00135 VME_USER2,
00136 VME_USER3,
00137 VME_USER4
00138 } addressMode_t;
00139
00140
00141
00142
00143 #define VME_SCT 0x1
00144 #define VME_BLT 0x2
00145 #define VME_MBLT 0x4
00146 #define VME_2eVME 0x8
00147 #define VME_2eSST 0x10
00148 #define VME_2eSSTB 0x20
00149
00150
00151
00152
00153 typedef enum {
00154 VME_D8 = 8,
00155 VME_D16 = 16,
00156 VME_D32 = 32,
00157 VME_D64 = 64
00158 } dataWidth_t;
00159
00160
00161
00162
00163 typedef enum {
00164 VME_SSTNONE = 0,
00165 VME_SST160 = 160,
00166 VME_SST267 = 267,
00167 VME_SST320 = 320
00168 } vme2esstRate_t;
00169
00170
00171
00172
00173
00174 typedef enum {
00175 VME_R_ROBIN_MODE,
00176 VME_PRIORITY_MODE
00177 } vme2ArbMode_t;
00178
00179
00180
00181
00182
00183 #define VME_IOCTL_SET_OUTBOUND 0x10
00184 #define VME_IOCTL_GET_OUTBOUND 0x11
00185
00186
00187
00188
00189
00190
00191 struct vmeOutWindowCfg
00192 {
00193 int windowNbr;
00194 char windowEnable;
00195 unsigned int pciBusAddrU;
00196 unsigned int pciBusAddrL;
00197 unsigned int windowSizeU;
00198 unsigned int windowSizeL;
00199 unsigned int xlatedAddrU;
00200 unsigned int xlatedAddrL;
00201 int bcastSelect2esst;
00202 char wrPostEnable;
00203 char prefetchEnable;
00204 int prefetchSize;
00205 vme2esstRate_t xferRate2esst;
00206 addressMode_t addrSpace;
00207 dataWidth_t maxDataWidth;
00208 int xferProtocol;
00209 int userAccessType;
00210 int dataAccessType;
00211 int reserved;
00212
00213 };
00214 typedef struct vmeOutWindowCfg vmeOutWindowCfg_t;
00215
00216
00217
00218
00219
00220
00221 #define VME_IOCTL_START_DMA 0x30
00222 #define VME_IOCTL_PAUSE_DMA 0x31
00223 #define VME_IOCTL_CONTINUE_DMA 0x32
00224 #define VME_IOCTL_ABORT_DMA 0x33
00225 #define VME_IOCTL_WAIT_DMA 0x34
00226
00227 typedef enum {
00228
00229 VME_DMA_PATTERN_BYTE,
00230 VME_DMA_PATTERN_BYTE_INCREMENT,
00231 VME_DMA_PATTERN_WORD,
00232 VME_DMA_PATTERN_WORD_INCREMENT,
00233 VME_DMA_USER,
00234 VME_DMA_KERNEL,
00235 VME_DMA_PCI,
00236 VME_DMA_VME
00237 } dmaData_t;
00238
00239
00240
00241
00242 struct vmeAttr
00243 {
00244 dataWidth_t maxDataWidth;
00245 vme2esstRate_t xferRate2esst;
00246 int bcastSelect2esst;
00247 addressMode_t addrSpace;
00248 int userAccessType;
00249 int dataAccessType;
00250 int xferProtocol;
00251 int reserved;
00252 };
00253 typedef struct vmeAttr vmeAttr_t;
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266 typedef struct vmeDmaPacket
00267 {
00268 int vmeDmaToken;
00269 int vmeDmaWait;
00270 unsigned int vmeDmaStartTick;
00271 unsigned int vmeDmaStopTick;
00272 unsigned int vmeDmaElapsedTime;
00273 int vmeDmaStatus;
00274
00275 int byteCount;
00276 int bcastSelect2esst;
00277
00278
00279
00280
00281 dmaData_t srcBus;
00282 unsigned int srcAddrU;
00283 unsigned int srcAddr;
00284 int pciReadCmd;
00285 struct vmeAttr srcVmeAttr;
00286 char srcfifoEnable;
00287
00288
00289
00290
00291 dmaData_t dstBus;
00292 unsigned int dstAddrU;
00293 unsigned int dstAddr;
00294 int pciWriteCmd;
00295 struct vmeAttr dstVmeAttr;
00296 char dstfifoEnable;
00297
00298
00299
00300
00301
00302 int maxCpuBusBlkSz;
00303 int maxPciBlockSize;
00304 int pciBackOffTimer;
00305 int maxVmeBlockSize;
00306 int vmeBackOffTimer;
00307
00308 int channel_number;
00309 int reserved;
00310
00311
00312
00313
00314 struct vmeDmaPacket * pNextPacket;
00315
00316 } vmeDmaPacket_t;
00317
00318
00319
00320
00321
00322 #define VME_IOCTL_GET_SLOT_VME_INFO 0x41
00323
00324
00325
00326 struct vmeInfoCfg
00327 {
00328 int vmeSlotNum;
00329 int boardResponded;
00330 char sysConFlag;
00331 int vmeControllerID;
00332 int vmeControllerRev;
00333 char osName[8];
00334 int vmeSharedDataValid;
00335 int vmeDriverRev;
00336 unsigned int vmeAddrHi[8];
00337 unsigned int vmeAddrLo[8];
00338 unsigned int vmeSize[8];
00339 unsigned int vmeAm[8];
00340 int reserved;
00341 };
00342 typedef struct vmeInfoCfg vmeInfoCfg_t;
00343
00344 #define VME_IOCTL_SET_REQUESTOR 0x42
00345 #define VME_IOCTL_GET_REQUESTOR 0x43
00346
00347
00348
00349 struct vmeRequesterCfg
00350 {
00351 int requestLevel;
00352 char fairMode;
00353 int releaseMode;
00354 int timeonTimeoutTimer;
00355 int timeoffTimeoutTimer;
00356 int reserved;
00357 };
00358 typedef struct vmeRequesterCfg vmeRequesterCfg_t;
00359
00360 #define VME_IOCTL_SET_CONTROLLER 0x44
00361 #define VME_IOCTL_GET_CONTROLLER 0x45
00362
00363
00364
00365 struct vmeArbiterCfg
00366 {
00367 vme2ArbMode_t arbiterMode;
00368 char arbiterTimeoutFlag;
00369 int globalTimeoutTimer;
00370 char noEarlyReleaseFlag;
00371 int reserved;
00372 };
00373 typedef struct vmeArbiterCfg vmeArbiterCfg_t;
00374
00375 #define VME_IOCTL_GENERATE_IRQ 0x46
00376 #define VME_IOCTL_GET_IRQ_STATUS 0x47
00377 #define VME_IOCTL_CLR_IRQ_STATUS 0x48
00378
00379
00380
00381 typedef struct virqInfo
00382 {
00383
00384
00385
00386 short waitTime;
00387 short timeOutFlag;
00388
00389
00390
00391
00392 int level;
00393 int vector;
00394 int reserved;
00395
00396 } virqInfo_t;
00397
00398 #define VME_IOCTL_SET_INBOUND 0x49
00399 #define VME_IOCTL_GET_INBOUND 0x50
00400
00401
00402
00403
00404
00405
00406
00407 struct vmeInWindowCfg
00408 {
00409 int windowNbr;
00410 char windowEnable;
00411 unsigned int vmeAddrU;
00412 unsigned int vmeAddrL;
00413 unsigned int windowSizeU;
00414 unsigned int windowSizeL;
00415 unsigned int pciAddrU;
00416 unsigned int pciAddrL;
00417 char wrPostEnable;
00418 char prefetchEnable;
00419 char prefetchThreshold;
00420 int prefetchSize;
00421 char rmwLock;
00422 char data64BitCapable;
00423 addressMode_t addrSpace;
00424 int userAccessType;
00425 int dataAccessType;
00426 int xferProtocol;
00427 vme2esstRate_t xferRate2esst;
00428 char bcastRespond2esst;
00429 int reserved;
00430
00431 };
00432 typedef struct vmeInWindowCfg vmeInWindowCfg_t;
00433
00434
00435
00436
00437
00438 #define VME_IOCTL_DO_RMW 0x60
00439
00440
00441
00442 struct vmeRmwCfg
00443 {
00444 unsigned int targetAddrU;
00445 unsigned int targetAddr;
00446 addressMode_t addrSpace;
00447 int enableMask;
00448 int compareData;
00449 int swapData;
00450 int maxAttempts;
00451 int numAttempts;
00452 int reserved;
00453
00454 } ;
00455 typedef struct vmeRmwCfg vmeRmwCfg_t;
00456
00457
00458
00459
00460
00461 #define VME_IOCTL_SETUP_LM 0x70
00462 #define VME_IOCTL_WAIT_LM 0x71
00463
00464
00465
00466 struct vmeLmCfg
00467 {
00468 unsigned int addrU;
00469 unsigned int addr;
00470 addressMode_t addrSpace;
00471 int userAccessType;
00472 int dataAccessType;
00473 int lmWait;
00474 int lmEvents;
00475 int reserved;
00476 };
00477 typedef struct vmeLmCfg vmeLmCfg_t;
00478
00479
00480
00481
00482 struct vmeSharedData {
00483
00484
00485
00486 char validity1[4];
00487 char validity2[4];
00488 int structureRev;
00489 int reserved1;
00490
00491 char osname[8];
00492 int driverRev;
00493 int reserved2;
00494
00495 char boardString[16];
00496
00497 int vmeControllerType;
00498 int vmeControllerRev;
00499 int boardSemaphore[8];
00500 unsigned int inBoundVmeAddrHi[8];
00501 unsigned int inBoundVmeAddrLo[8];
00502 addressMode_t inBoundVmeAM[8];
00503 int inBoundVmeSize[8];
00504 char reserved3[0x1000-248];
00505
00506 int readTestPatterns[1024];
00507 int remoteScratchArea[24][256];
00508
00509
00510
00511 char driverScratch[4096];
00512 struct {
00513 char Eye[4];
00514 int Offset;
00515 int Head;
00516 int Tail;
00517 int Size;
00518 int Reserved1;
00519 int Reserved2;
00520 int Reserved3;
00521 char Data[4096-32];
00522 } boardFifo[23];
00523 };
00524
00525
00526
00527
00528
00529
00530 #define VME_ERR_VERR 1
00531 #define VME_ERR_PERR 2
00532
00533 #endif
00534