Rev 14 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 14 | Rev 362 | ||
---|---|---|---|
Line 153... | Line 153... | ||
153 | } |
153 | } |
154 | 154 | ||
155 | return 0; |
155 | return 0; |
156 | } |
156 | } |
157 | 157 | ||
158 | int VMEopen(const char *cszDeviceName, unsigned char ubAddressModifier, |
158 | int VMEopen(const char *cszDeviceName, unsigned char ubAddressModifier, ptrdiff_t *pnHandle) |
159 | { |
159 | { |
160 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)NULL; |
160 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)NULL; |
161 | int error; |
161 | int error; |
162 | 162 | ||
163 | *pnHandle = 0; |
163 | *pnHandle = 0; |
Line 175... | Line 175... | ||
175 | free(dev); |
175 | free(dev); |
176 | return error; |
176 | return error; |
177 | } |
177 | } |
178 | 178 | ||
179 | dev->cAddressModifier = ubAddressModifier; |
179 | dev->cAddressModifier = ubAddressModifier; |
180 | *pnHandle = ( |
180 | *pnHandle = (ptrdiff_t)dev; |
181 | 181 | ||
182 | error = initHardware(dev); |
182 | error = initHardware(dev); |
183 | if (error) |
183 | if (error) |
184 | return error; |
184 | return error; |
185 | 185 | ||
186 | dev->nLastError = 0; |
186 | dev->nLastError = 0; |
187 | 187 | ||
188 | return setAccessProperties(*pnHandle, dev->cAddressModifier, BYTE_ACCESS); // set access properties to default |
188 | return setAccessProperties(*pnHandle, dev->cAddressModifier, BYTE_ACCESS); // set access properties to default |
189 | } |
189 | } |
190 | 190 | ||
191 | int VMEinit(const char *cszDeviceName, unsigned short nVMEMM, unsigned char ubAddressModifier, |
191 | int VMEinit(const char *cszDeviceName, unsigned short nVMEMM, unsigned char ubAddressModifier, ptrdiff_t *pnHandle) |
192 | { |
192 | { |
193 | char *szLocalDeviceName = szDeviceName(cszDeviceName, nVMEMM); |
193 | char *szLocalDeviceName = szDeviceName(cszDeviceName, nVMEMM); |
194 | 194 | ||
195 | return VMEopen(szLocalDeviceName, ubAddressModifier, pnHandle); |
195 | return VMEopen(szLocalDeviceName, ubAddressModifier, pnHandle); |
196 | } |
196 | } |
197 | 197 | ||
198 | int setAccessProperties( |
198 | int setAccessProperties(ptrdiff_t nHandle, unsigned char bModifier, unsigned char bAccessType) |
199 | { |
199 | { |
200 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
200 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
201 | 201 | ||
202 | PCIVME_ACCESS_COMMAND access_command; |
202 | PCIVME_ACCESS_COMMAND access_command; |
203 | 203 | ||
Line 216... | Line 216... | ||
216 | dev->cAccessWidth = bAccessType; |
216 | dev->cAccessWidth = bAccessType; |
217 | 217 | ||
218 | return 0; |
218 | return 0; |
219 | } |
219 | } |
220 | 220 | ||
221 | int VMEread( |
221 | int VMEread(ptrdiff_t nHandle, unsigned long ulAddress, unsigned char ubAccessWidth, unsigned long ulElementCount, void *pvBuffer) |
222 | { |
222 | { |
223 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
223 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
224 | size_t count = (size_t)(ulElementCount * ubAccessWidth); |
224 | size_t count = (size_t)(ulElementCount * ubAccessWidth); |
225 | ssize_t result; |
225 | ssize_t result; |
226 | int error; |
226 | int error; |
Line 261... | Line 261... | ||
261 | } |
261 | } |
262 | 262 | ||
263 | return 0; |
263 | return 0; |
264 | } |
264 | } |
265 | 265 | ||
266 | int VMEwrite( |
266 | int VMEwrite(ptrdiff_t nHandle, unsigned long ulAddress, unsigned char ubAccessWidth, unsigned long ulElementCount, void *pvBuffer) |
267 | { |
267 | { |
268 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
268 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
269 | size_t count = (size_t)(ulElementCount * ubAccessWidth); |
269 | size_t count = (size_t)(ulElementCount * ubAccessWidth); |
270 | ssize_t result; |
270 | ssize_t result; |
271 | int error; |
271 | int error; |
Line 305... | Line 305... | ||
305 | } |
305 | } |
306 | 306 | ||
307 | return 0; |
307 | return 0; |
308 | } |
308 | } |
309 | 309 | ||
310 | int VMEaccessVIC( |
310 | int VMEaccessVIC(ptrdiff_t nHandle, unsigned char ubAccessMode, unsigned short uwAddress, unsigned char *ubContent) |
311 | { |
311 | { |
312 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
312 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
313 | PCIVME_VIC68A_ACTION vic68a_action; |
313 | PCIVME_VIC68A_ACTION vic68a_action; |
314 | 314 | ||
315 | vic68a_action.bAccessMode = ubAccessMode; |
315 | vic68a_action.bAccessMode = ubAccessMode; |
Line 325... | Line 325... | ||
325 | *ubContent = vic68a_action.bContent; |
325 | *ubContent = vic68a_action.bContent; |
326 | 326 | ||
327 | return 0; |
327 | return 0; |
328 | } |
328 | } |
329 | 329 | ||
330 | int VMEreset( |
330 | int VMEreset(ptrdiff_t nHandle) |
331 | { |
331 | { |
332 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
332 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
333 | PCIVME_RESET_COMMAND reset_command; |
333 | PCIVME_RESET_COMMAND reset_command; |
334 | int i = 10; |
334 | int i = 10; |
335 | 335 | ||
Line 361... | Line 361... | ||
361 | dev->nLastError = 0; |
361 | dev->nLastError = 0; |
362 | 362 | ||
363 | return 0; |
363 | return 0; |
364 | } |
364 | } |
365 | 365 | ||
366 | int VMETAS( |
366 | int VMETAS(ptrdiff_t nHandle, unsigned long ulAddress, unsigned char *ubResult) |
367 | { |
367 | { |
368 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
368 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
369 | PCIVME_TAS_STRUCT tas; |
369 | PCIVME_TAS_STRUCT tas; |
370 | 370 | ||
371 | tas.bContent = *ubResult; |
371 | tas.bContent = *ubResult; |
Line 381... | Line 381... | ||
381 | *ubResult = tas.bContent; |
381 | *ubResult = tas.bContent; |
382 | 382 | ||
383 | return 0; |
383 | return 0; |
384 | } |
384 | } |
385 | 385 | ||
386 | int VMEinterrupt( |
386 | int VMEinterrupt(ptrdiff_t nHandle, unsigned char *ubVector) |
387 | { |
387 | { |
388 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
388 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
389 | PCIVME_VECTOR_LEVEL ubLocalVector; |
389 | PCIVME_VECTOR_LEVEL ubLocalVector; |
390 | 390 | ||
391 | if (ioctl(dev->nFileNo, PCIVME_READ_VECTOR_POLL, &ubLocalVector) < 0) |
391 | if (ioctl(dev->nFileNo, PCIVME_READ_VECTOR_POLL, &ubLocalVector) < 0) |
Line 397... | Line 397... | ||
397 | *ubVector = (__u8)ubLocalVector.dwStatusID; |
397 | *ubVector = (__u8)ubLocalVector.dwStatusID; |
398 | 398 | ||
399 | return 0; |
399 | return 0; |
400 | } |
400 | } |
401 | 401 | ||
402 | int VMEsysfailGet( |
402 | int VMEsysfailGet(ptrdiff_t nHandle, BOOLEAN *bResult) |
403 | { |
403 | { |
404 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
404 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
405 | PCIVME_VIC68A_ACTION sAction; // structure to access vic chip |
405 | PCIVME_VIC68A_ACTION sAction; // structure to access vic chip |
406 | 406 | ||
407 | sAction.wRegisterAddress = EGICR; |
407 | sAction.wRegisterAddress = EGICR; |
Line 417... | Line 417... | ||
417 | *bResult = (sAction.bContent & 0x08) ? FALSE : TRUE; |
417 | *bResult = (sAction.bContent & 0x08) ? FALSE : TRUE; |
418 | 418 | ||
419 | return 0; |
419 | return 0; |
420 | } |
420 | } |
421 | 421 | ||
422 | int VMEsysfailSet( |
422 | int VMEsysfailSet(ptrdiff_t nHandle, BOOLEAN bForce) |
423 | { |
423 | { |
424 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
424 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
425 | PCIVME_VIC68A_ACTION sAction; // structure to access vic chip |
425 | PCIVME_VIC68A_ACTION sAction; // structure to access vic chip |
426 | 426 | ||
427 | sAction.wRegisterAddress = ICR7; |
427 | sAction.wRegisterAddress = ICR7; |
Line 435... | Line 435... | ||
435 | } |
435 | } |
436 | 436 | ||
437 | return 0; |
437 | return 0; |
438 | } |
438 | } |
439 | 439 | ||
440 | int VMEerror( |
440 | int VMEerror(ptrdiff_t nHandle) |
441 | { |
441 | { |
442 | __u8 ubVector; |
442 | __u8 ubVector; |
443 | 443 | ||
444 | VMEinterrupt(nHandle, &ubVector); |
444 | VMEinterrupt(nHandle, &ubVector); |
445 | 445 | ||
Line 447... | Line 447... | ||
447 | return EFAULT; // it's a bus error |
447 | return EFAULT; // it's a bus error |
448 | else |
448 | else |
449 | return 0; |
449 | return 0; |
450 | } |
450 | } |
451 | 451 | ||
452 | int VMEclose( |
452 | int VMEclose(ptrdiff_t nHandle) |
453 | { |
453 | { |
454 | int error = 0; |
454 | int error = 0; |
455 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
455 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
456 | 456 | ||
457 | if (dev != (VMEMM_DEVICE *)NULL) |
457 | if (dev != (VMEMM_DEVICE *)NULL) |
Line 467... | Line 467... | ||
467 | } |
467 | } |
468 | 468 | ||
469 | return error; |
469 | return error; |
470 | } |
470 | } |
471 | 471 | ||
472 | int VMEcontrolInterrupt( |
472 | int VMEcontrolInterrupt(ptrdiff_t nHandle, BOOLEAN *bEnable) |
473 | { |
473 | { |
474 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
474 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
475 | PCIVME_IRQ_CONTROL control; |
475 | PCIVME_IRQ_CONTROL control; |
476 | 476 | ||
477 | control.bEnable = *bEnable; |
477 | control.bEnable = *bEnable; |
Line 486... | Line 486... | ||
486 | *bEnable = control.bEnable; |
486 | *bEnable = control.bEnable; |
487 | 487 | ||
488 | return 0; |
488 | return 0; |
489 | } |
489 | } |
490 | 490 | ||
491 | int GetLastError( |
491 | int GetLastError(ptrdiff_t nHandle) |
492 | { |
492 | { |
493 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
493 | VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle; |
494 | int nLocalError; |
494 | int nLocalError; |
495 | 495 | ||
496 | nLocalError = dev->nLastError; |
496 | nLocalError = dev->nLastError; |