AJA NTV2 SDK  17.0.1.1246
NTV2 SDK 17.0.1.1246
ntv2linuxdriverinterface.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
9 #include "ntv2utils.h"
10 #include "ajabase/system/debug.h"
11 #include <fcntl.h>
12 #include <sys/ioctl.h>
13 #include <sys/mman.h>
14 
15 using namespace std;
16 
17 
18 // LinuxDriverInterface Logging Macros
19 #define HEX2(__x__) "0x" << hex << setw(2) << setfill('0') << (0xFF & uint8_t (__x__)) << dec
20 #define HEX4(__x__) "0x" << hex << setw(4) << setfill('0') << (0xFFFF & uint16_t(__x__)) << dec
21 #define HEX8(__x__) "0x" << hex << setw(8) << setfill('0') << (0xFFFFFFFF & uint32_t(__x__)) << dec
22 #define HEX16(__x__) "0x" << hex << setw(16) << setfill('0') << uint64_t(__x__) << dec
23 #define INSTP(_p_) HEX16(uint64_t(_p_))
24 
25 #define LDIFAIL(__x__) AJA_sERROR (AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__)
26 #define LDIWARN(__x__) AJA_sWARNING(AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__)
27 #define LDINOTE(__x__) AJA_sNOTICE (AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__)
28 #define LDIINFO(__x__) AJA_sINFO (AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__)
29 #define LDIDBG(__x__) AJA_sDEBUG (AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__)
30 
31 #define AsFrameStampStructPtr(_p_) reinterpret_cast<FRAME_STAMP_STRUCT*>(_p_)
32 #define AsStatusStructPtr(_p_) reinterpret_cast<AUTOCIRCULATE_STATUS_STRUCT*>(_p_)
33 #define AsTransferStatusStruct(_p_) reinterpret_cast<PAUTOCIRCULATE_TRANSFER_STATUS_STRUCT>(_p_)
34 #define AsRoutingTablePtr(_p_) reinterpret_cast<NTV2RoutingTable*>(_p_)
35 #define AsPTaskStruct(_p_) reinterpret_cast<PAUTOCIRCULATE_TASK_STRUCT>(_p_)
36 #define AsPTransferStruct(_p_) reinterpret_cast<PAUTOCIRCULATE_TRANSFER_STRUCT>(_p_)
37 #define AsVoidPtr(_p_) reinterpret_cast<void*>(_p_)
38 
39 
41  : _bitfileDirectory ("../xilinx")
42  ,_hDevice (INVALID_HANDLE_VALUE)
43 #if !defined(NTV2_DEPRECATE_16_0)
44  ,_pDMADriverBufferAddress (AJA_NULL)
45  ,_BA0MemorySize (0)
46  ,_pDNXRegisterBaseAddress (AJA_NULL)
47  ,_BA2MemorySize (0)
48  ,_BA4MemorySize (0)
49 #endif // !defined(NTV2_DEPRECATE_16_0)
50 {
51 }
52 
54 {
55  if (IsOpen())
56  Close();
57 }
58 
59 
60 #if !defined(NTV2_NULL_DEVICE)
61 // Board Open / Close methods
65 {
66  static const string kAJANTV2("ajantv2");
67  NTV2_ASSERT(!IsRemote());
68  NTV2_ASSERT(!IsOpen());
69 
70  ostringstream oss; oss << "/dev/" << kAJANTV2 << DEC(inDeviceIndex);
71  string boardStr(oss.str());
72  _hDevice = HANDLE(open(boardStr.c_str(), O_RDWR));
74  {LDIFAIL("Failed to open '" << boardStr << "'"); return false;}
75 
76  _boardNumber = inDeviceIndex;
78  {
79  LDIFAIL ("ReadRegister failed for 'kRegBoardID': ndx=" << inDeviceIndex << " hDev=" << _hDevice << " id=" << HEX8(_boardID));
81  {
82  LDIFAIL ("ReadReg retry failed for 'kRegBoardID': ndx=" << inDeviceIndex << " hDev=" << _hDevice << " id=" << HEX8(_boardID));
83  Close();
84  return false;
85  }
86  LDIDBG("Retry succeeded: ndx=" << _boardNumber << " hDev=" << _hDevice << " id=" << ::NTV2DeviceIDToString(_boardID));
87  }
88  _boardOpened = true;
89  LDIINFO ("Opened '" << boardStr << "' devID=" << HEX8(_boardID) << " ndx=" << DEC(_boardNumber));
90  return true;
91 }
92 
93 
95 {
96  NTV2_ASSERT(!IsRemote());
97  NTV2_ASSERT(IsOpen());
99 
100 #if !defined(NTV2_DEPRECATE_16_0)
101  UnmapXena2Flash();
103 #endif // !defined(NTV2_DEPRECATE_16_0)
104 
105  LDIINFO ("Closed deviceID=" << HEX8(_boardID) << " ndx=" << DEC(_boardNumber) << " hDev=" << _hDevice);
107  close(int(_hDevice));
109  _boardOpened = false;
110  return true;
111 }
112 #endif // !defined(NTV2_NULL_DEVICE)
113 
114 
116 // Read and Write Register methods
118 
119 
120 bool CNTV2LinuxDriverInterface::ReadRegister (const ULWord inRegNum, ULWord & outValue, const ULWord inMask, const ULWord inShift)
121 {
122  if (inShift >= 32)
123  {
124  LDIFAIL("Shift " << DEC(inShift) << " > 31, reg=" << DEC(inRegNum) << " msk=" << xHEX0N(inMask,8));
125  return false;
126  }
127 #if defined(NTV2_NUB_CLIENT_SUPPORT)
128  if (IsRemote())
129  return CNTV2DriverInterface::ReadRegister (inRegNum, outValue, inMask, inShift);
130 #endif // defined(NTV2_NUB_CLIENT_SUPPORT)
132 
133  REGISTER_ACCESS ra;
134  ra.RegisterNumber = inRegNum;
135  ra.RegisterMask = inMask;
136  ra.RegisterShift = inShift;
137  ra.RegisterValue = 0xDEADBEEF;
139  const int result (ioctl(int(_hDevice), IOCTL_NTV2_READ_REGISTER, &ra));
141  if (result)
142  {LDIFAIL("IOCTL_NTV2_READ_REGISTER failed"); return false;}
143  outValue = ra.RegisterValue;
144  return true;
145 }
146 
147 
148 bool CNTV2LinuxDriverInterface::WriteRegister (const ULWord inRegNum, const ULWord inValue, const ULWord inMask, const ULWord inShift)
149 {
150  if (inShift >= 32)
151  {
152  LDIFAIL("Shift " << DEC(inShift) << " > 31, reg=" << DEC(inRegNum) << " msk=" << xHEX0N(inMask,8));
153  return false;
154  }
155 #if defined(NTV2_WRITEREG_PROFILING) // Register Write Profiling
156  if (mRecordRegWrites)
157  {
158  AJAAutoLock autoLock(&mRegWritesLock);
159  mRegWrites.push_back(NTV2RegInfo(inRegNum, inValue, inMask, inShift));
160  if (mSkipRegWrites)
161  return true;
162  }
163 #endif // defined(NTV2_WRITEREG_PROFILING) // Register Write Profiling
164 #if defined(NTV2_NUB_CLIENT_SUPPORT)
165  if (IsRemote())
166  return CNTV2DriverInterface::WriteRegister(inRegNum, inValue, inMask, inShift);
167 #endif // defined(NTV2_NUB_CLIENT_SUPPORT)
169  REGISTER_ACCESS ra;
170  ra.RegisterNumber = inRegNum;
171  ra.RegisterValue = inValue;
172  ra.RegisterMask = inMask;
173  ra.RegisterShift = inShift;
175  const int result (ioctl(int(_hDevice), IOCTL_NTV2_WRITE_REGISTER, &ra));
177  if (result)
178  {LDIFAIL("IOCTL_NTV2_WRITE_REGISTER failed"); return false;}
179  return true;
180 }
181 
183 {
184  if (IsRemote())
185  return false;
188  {LDIFAIL("IOCTL_NTV2_RESTORE_HARDWARE_PROCAMP_REGISTERS failed"); return false;}
189  return true;
190 }
191 
193 // Interrupt enabling / disabling method
195 
196 // Method: ConfigureInterrupt
197 // Input: bool bEnable (turn on/off interrupt), INTERRUPT_ENUMS eInterruptType
198 // Output: bool status
199 // Purpose: Provides a 1 point connection to driver for interrupt calls
200 bool CNTV2LinuxDriverInterface::ConfigureInterrupt (const bool bEnable, const INTERRUPT_ENUMS eInterruptType)
201 {
202  if (IsRemote())
203  return false;
205  NTV2_INTERRUPT_CONTROL_STRUCT intrControlStruct;
206  memset(&intrControlStruct, 0, sizeof(NTV2_INTERRUPT_CONTROL_STRUCT)); // Suppress valgrind error
207  intrControlStruct.eInterruptType = eInterruptType;
208  intrControlStruct.enable = bEnable;
209  if (ioctl(int(_hDevice), IOCTL_NTV2_INTERRUPT_CONTROL, &intrControlStruct))
210  {
211  LDIFAIL("IOCTL_NTV2_INTERRUPT_CONTROL failed");
212  return false;
213  }
214  return true;
215 }
216 
217 // Method: getInterruptCount
218 // Input: INTERRUPT_ENUMS eInterruptType. Currently only output vertical interrupts are supported.
219 // Output: ULWord or equivalent(i.e. ULWord).
221 {
222  if (IsRemote())
223  return false;
225  if ( eInterruptType != eVerticalInterrupt
226  && eInterruptType != eInput1
227  && eInterruptType != eInput2
228  && eInterruptType != eInput3
229  && eInterruptType != eInput4
230  && eInterruptType != eInput5
231  && eInterruptType != eInput6
232  && eInterruptType != eInput7
233  && eInterruptType != eInput8
234  && eInterruptType != eOutput2
235  && eInterruptType != eOutput3
236  && eInterruptType != eOutput4
237  && eInterruptType != eOutput5
238  && eInterruptType != eOutput6
239  && eInterruptType != eOutput7
240  && eInterruptType != eOutput8
241  && eInterruptType != eAuxVerticalInterrupt
242  )
243  {
244  LDIFAIL("Unsupported interrupt count request. Only vertical input interrupts counted.");
245  return false;
246  }
247 
248  NTV2_INTERRUPT_CONTROL_STRUCT intrControlStruct;
249  memset(&intrControlStruct, 0, sizeof(NTV2_INTERRUPT_CONTROL_STRUCT));// Suppress valgrind error
250  intrControlStruct.eInterruptType = eGetIntCount;
251  intrControlStruct.interruptCount = eInterruptType;
252 
254  const int result (ioctl(int(_hDevice), IOCTL_NTV2_INTERRUPT_CONTROL, &intrControlStruct));
256  if (result)
257  {LDIFAIL("IOCTL_NTV2_INTERRUPT_CONTROL failed"); return false;}
258 
259  outCount = intrControlStruct.interruptCount;
260  return true;
261 }
262 
263 static const uint32_t sIntEnumToStatKeys[] = { AJA_DebugStat_WaitForInterruptOut1, // eOutput1 // 0
265  AJA_DebugStat_WaitForInterruptIn1, // eInput1 // 2
266  AJA_DebugStat_WaitForInterruptIn2, // eInput2 // 3
268  AJA_DebugStat_WaitForInterruptUartTx1, // eUart1Tx // 14
269  AJA_DebugStat_WaitForInterruptUartRx1, // eUart1Rx // 15
271  AJA_DebugStat_WaitForInterruptIn3, // eInput3 // 24
272  AJA_DebugStat_WaitForInterruptIn4, // eInput4 // 25
273  AJA_DebugStat_WaitForInterruptUartTx2, // eUartTx2 // 26
274  AJA_DebugStat_WaitForInterruptUartRx2, // eUartRx2 // 27
276  AJA_DebugStat_WaitForInterruptIn5, // eInput5 // 29
277  AJA_DebugStat_WaitForInterruptIn6, // eInput6 // 30
278  AJA_DebugStat_WaitForInterruptIn7, // eInput7 // 31
279  AJA_DebugStat_WaitForInterruptIn8, // eInput8 // 32
281 
282 // Method: WaitForInterrupt
283 // Output: True on successs, false on failure (ioctl failed or interrupt didn't happen)
285 {
286  if (IsRemote())
287  return CNTV2DriverInterface::WaitForInterrupt(eInterrupt, timeOutMs);
288 
290 
291  NTV2_WAITFOR_INTERRUPT_STRUCT waitIntrStruct;
292  waitIntrStruct.eInterruptType = eInterrupt;
293  waitIntrStruct.timeOutMs = timeOutMs;
294  waitIntrStruct.success = 0; // Assume failure
295 
297  const int result (ioctl(int(_hDevice), IOCTL_NTV2_WAITFOR_INTERRUPT, &waitIntrStruct));
299  if (result)
300  {LDIFAIL("IOCTL_NTV2_WAITFOR_INTERRUPT failed"); return false;}
301  BumpEventCount (eInterrupt);
302  return waitIntrStruct.success != 0;
303 }
304 
305 // Method: ControlDriverDebugMessages
306 // Output: True on successs, false on failure (ioctl failed or interrupt didn't happen)
308 {
309  if (IsRemote())
310  return false;
313  cddmStruct.msgSet = msgSet;
314  cddmStruct.enable = enable;
315  if (ioctl(int(_hDevice), IOCTL_NTV2_CONTROL_DRIVER_DEBUG_MESSAGES, &cddmStruct))
316  {
317  LDIFAIL("IOCTL_NTV2_CONTROL_DRIVER_DEBUG_MESSAGES failed");
318  return false;
319  }
320  return cddmStruct.success != 0;
321 }
322 
323 // Method: SetupBoard
324 // Output: True on successs, false on failure (ioctl failed or interrupt didn't happen)
326 {
327  if (IsRemote())
328  return false;
330  if (ioctl(int(_hDevice), IOCTL_NTV2_SETUP_BOARD, 0, 0)) // Suppress valgrind errors
331  {
332  LDIFAIL("IOCTL_NTV2_SETUP_BOARD failed");
333  return false;
334  }
335  return true;
336 }
337 
339 // OEM Mapping to Userspace Methods
341 
342 #if !defined(NTV2_DEPRECATE_16_0)
343  // Method: MapFrameBuffers
344  // Input: None
345  // Output: bool, and sets member _pBaseFrameAddress
347  {
348  if (!IsOpen())
349  return false;
350  if (!_pFrameBaseAddress)
351  {
352  // Get memory window size from driver
353  ULWord BA1MemorySize;
354  if (!GetBA1MemorySize(&BA1MemorySize))
355  {
356  LDIFAIL ("MapFrameBuffers failed - couldn't get BA1MemorySize");
357  return false;
358  }
359 
360  if (BA1MemorySize == 0)
361  {
362  LDIFAIL ("BA1MemorySize is 0 -- module loaded with MapFrameBuffers=0?");
363  LDIFAIL ("PIO mode not available, only driverbuffer DMA.");
364  return false;
365  }
366 
367  // If BA1MemorySize is 0, then the module was loaded with MapFrameBuffers=0
368  // and PIO mode is not available.
369 
370  // Map the memory. For Xena(da) boards, the window will be the same size as the amount of
371  // memory on the Xena card. For Xena(mm) cards, it will be a window which is selected using
372  // SetPCIAccessFrame().
373  //
374  // the offset of 0 in the call to mmap tells mmap to map BAR1 which is the framebuffers.
375  _pFrameBaseAddress = reinterpret_cast<ULWord*>(mmap(AJA_NULL, BA1MemorySize, PROT_READ | PROT_WRITE, MAP_SHARED, int(_hDevice), 0));
376  if (_pFrameBaseAddress == MAP_FAILED)
377  {
379  LDIFAIL ("MapFrameBuffers failed in call to mmap()");
380  return false;
381  }
382 
383  // Set the CH1 and CH2 frame base addresses for cards that require them.
384  ULWord boardIDRegister;
385  ReadRegister(kRegBoardID, boardIDRegister); //unfortunately GetBoardID is in ntv2card...ooops.
386  if ( ! ::NTV2DeviceIsDirectAddressable(NTV2DeviceID(boardIDRegister)))
388  }
389  return true;
390  }
391 
392  // Method: UnmapFrameBuffers
393  // Input: None
394  // Output: bool status
396  {
397  if (!_pFrameBaseAddress)
398  return true;
399  if (!IsOpen())
400  return false;
401 
402  // Get memory window size from driver
403  ULWord BA1MemorySize;
404  if (!GetBA1MemorySize(&BA1MemorySize))
405  {
406  LDIFAIL ("UnmapFrameBuffers failed - couldn't get BA1MemorySize");
407  return false;
408  }
409  if (_pFrameBaseAddress)
410  munmap(_pFrameBaseAddress, BA1MemorySize);
412  return true;
413  }
414 
415  // Method: MapRegisters
416  // Input: None
417  // Output: bool, and sets member _pBaseFrameAddress
419  {
420  if (!IsOpen())
421  return false;
423  {
424  // Get register window size from driver
426  {
427  LDIFAIL ("MapRegisters failed - couldn't get BA0MemorySize");
429  return false;
430  }
431 
432  if (!_BA0MemorySize)
433  {
434  LDIFAIL ("BA0MemorySize is 0, registers not mapped.");
436  return false;
437  }
438 
439  // the offset of 0x1000 in the call to mmap tells mmap to map BAR0 which is the registers.
440  // 2.4 kernel interprets offset as number of pages, so 0x1000 works. This won't work on a 2.2
441  // kernel
442  _pRegisterBaseAddress = reinterpret_cast<ULWord*>(mmap(AJA_NULL,_BA0MemorySize,PROT_READ | PROT_WRITE,MAP_SHARED,_hDevice,0x1000));
443  if (_pRegisterBaseAddress == MAP_FAILED)
444  {
446  return false;
447  }
448  }
449  return true;
450  }
451 
452  // Method: UnmapRegisters
453  // Input: None
454  // Output: bool status
456  {
457  if (!IsOpen())
458  return false;
460  return true;
464  return true;
465  }
466 
468  {
469  return memSize ? ReadRegister (kVRegBA0MemorySize, *memSize) : false;
470  }
471 
473  {
474  return memSize ? ReadRegister (kVRegBA1MemorySize, *memSize) : false;
475  }
476 
478  {
479  return memSize ? ReadRegister (kVRegBA2MemorySize, *memSize) : false;
480  }
481 
483  {
484  return memSize ? ReadRegister (kVRegBA4MemorySize, *memSize) : false;
485  }
486 
488  {
489  if (!IsOpen())
490  return false;
491  ULWord BA4MemorySize;
493  {
494  if ( !GetBA4MemorySize(&BA4MemorySize) )
495  {
496  LDIFAIL ("MapXena2Flash failed - couldn't get BA4MemorySize");
498  return false;
499  }
500  if (!BA4MemorySize)
501  {
502  LDIFAIL ("MapXena2Flash failed - BA4MemorySize == 0");
504  return false;
505  }
506  _BA4MemorySize = BA4MemorySize;
507  // 0x4000 is a page offset magic token passed into the driver mmap callback that ends up mapping the right stuff
508  _pXena2FlashBaseAddress = reinterpret_cast<ULWord*>(mmap(AJA_NULL, BA4MemorySize,
509  PROT_READ | PROT_WRITE, MAP_SHARED,
510  int(_hDevice), 0x4000));
511  if (_pXena2FlashBaseAddress == MAP_FAILED)
512  {
514  LDIFAIL ("MapXena2Flash(): mmap of BAR4 for PCI Flash failed");
515  return false;
516  }
517  }
518  return true;
519  }
520 
522  {
524  return true;
525  if (!IsOpen())
526  return false;
528  {
530  _BA4MemorySize = 0;
531  }
533  return false;
534  }
535 
537  {
538  ULWord BA2MemorySize;
539  if (!IsOpen())
540  return false;
542  {
543  if (!GetBA2MemorySize(&BA2MemorySize))
544  {
545  LDIFAIL ("MapDNXRegisters failed - couldn't get BA2MemorySize");
546  return false;
547  }
548  if (!BA2MemorySize)
549  {
550  LDIFAIL ("MapDNXRegisters failed - BA2MemorySize == 0");
551  return false;
552  }
553  _BA2MemorySize = BA2MemorySize;
554 
555  // 0x8000 is a page offset magic token passed into the driver mmap callback
556  // that ends up mapping the right stuff
557  _pDNXRegisterBaseAddress = reinterpret_cast<ULWord*>(mmap (AJA_NULL, BA2MemorySize,
558  PROT_READ | PROT_WRITE, MAP_SHARED,
559  int(_hDevice), 0x8000));
560  if (_pDNXRegisterBaseAddress == MAP_FAILED)
561  {
563  _BA2MemorySize = 0;
564  LDIFAIL ("MapDNXRegisters failed - couldn't map BAR2");
565  return false;
566  }
567  }
568  return true;
569  }
570 
572  {
574  return true;
575  if (!IsOpen())
576  return false;
578  {
580  _BA2MemorySize = 0;
581  }
583  return false;
584  }
585 #endif // !defined(NTV2_DEPRECATE_16_0)
586 
587 
589 // DMA
590 //
591 // Note: Asynchronous DMA only available with driver-allocated buffers.
592 
594  const bool inIsRead,
595  const ULWord inFrameNumber,
596  ULWord * pFrameBuffer,
597  const ULWord inOffsetBytes,
598  const ULWord inByteCount,
599  const bool inSynchronous)
600 {
601  if (IsRemote())
602  return CNTV2DriverInterface::DmaTransfer(inDMAEngine, inIsRead, inFrameNumber, pFrameBuffer,
603  inOffsetBytes, inByteCount, inSynchronous);
604  if (!IsOpen())
605  return false;
606 
607  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
608  dmaControlBuf.engine = inDMAEngine;
609  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
610  dmaControlBuf.frameNumber = inFrameNumber;
611  dmaControlBuf.frameBuffer = pFrameBuffer;
612  dmaControlBuf.frameOffsetSrc = inIsRead ? inOffsetBytes : 0;
613  dmaControlBuf.frameOffsetDest = inIsRead ? 0 : inOffsetBytes;
614  dmaControlBuf.numBytes = inByteCount;
615 
616  // The following are used only for driver-created buffers.
617  // Set them to known values.
618  dmaControlBuf.downSample = 0; // Not applicable to this mode
619  dmaControlBuf.linePitch = 1; // Not applicable to this mode
620  dmaControlBuf.poll = 0;
621 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
622  ULWord numDmaDriverBuffers;
623  GetDMANumDriverBuffers(&numDmaDriverBuffers);
624  if (ULWord64(pFrameBuffer) >= ULWord64(numDmaDriverBuffers))
625  {
626  // Can't poll with usermode allocated buffer
627  if (!inSynchronous)
628  return false;
629  dmaControlBuf.poll = 0;
630  }
631 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
632 
633  int request;
634  const char *errMsg(AJA_NULL);
635 #define ERRMSG(s) #s " failed"
636 
637  // Usermode buffer stuff
638  if (inIsRead) // Reading?
639  {
640  if (inOffsetBytes == 0) // Frame ( or field 0? )
641  {
642  request = IOCTL_NTV2_DMA_READ_FRAME;
644  }
645  else // Field 1
646  {
647  request = IOCTL_NTV2_DMA_READ;
648  errMsg = ERRMSG(IOCTL_NTV2_DMA_READ);
649  }
650  }
651  else // Writing
652  {
653  if (inOffsetBytes == 0) // Frame ( or field 0? )
654  {
655  request = IOCTL_NTV2_DMA_WRITE_FRAME;
657  }
658  else // Field 1
659  {
660  request = IOCTL_NTV2_DMA_WRITE;
661  errMsg = ERRMSG(IOCTL_NTV2_DMA_WRITE);
662  }
663  }
664 
665  // TODO: Stick the IOCTL code inside the dmaControlBuf and collapse 4 IOCTLs into one.
667  const int result (ioctl(int(_hDevice), request, &dmaControlBuf));
669  if (result)
670  {
671  LDIFAIL(errMsg);
672  return false;
673  }
674  return true;
675 }
676 
678  const bool inIsRead,
679  const ULWord inFrameNumber,
680  ULWord * pFrameBuffer,
681  const ULWord inOffsetBytes,
682  const ULWord inByteCount,
683  const ULWord inNumSegments,
684  const ULWord inHostPitch,
685  const ULWord inCardPitch,
686  const bool inIsSynchronous)
687 {
688  if (!IsOpen())
689  return false;
690 
691  LDIDBG("FRM=" << inFrameNumber << " ENG=" << inDMAEngine << " NB=" << inByteCount << (inIsRead?" Rd":" Wr"));
692 
693  // NOTE: Linux driver assumes driver buffers to be used if pFrameBuffer < numDmaDriverBuffers
694  NTV2_DMA_SEGMENT_CONTROL_STRUCT dmaControlBuf;
695  dmaControlBuf.engine = inDMAEngine;
696  dmaControlBuf.frameNumber = inFrameNumber;
697  dmaControlBuf.frameBuffer = pFrameBuffer;
698  dmaControlBuf.frameOffsetSrc = inIsRead ? inOffsetBytes : 0;
699  dmaControlBuf.frameOffsetDest = inIsRead ? 0 : inOffsetBytes;
700  dmaControlBuf.numBytes = inByteCount;
701  dmaControlBuf.videoNumSegments = inNumSegments;
702  dmaControlBuf.videoSegmentHostPitch = inHostPitch;
703  dmaControlBuf.videoSegmentCardPitch = inCardPitch;
704  dmaControlBuf.poll = 0;
705 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
706  ULWord numDmaDriverBuffers(0);
707  GetDMANumDriverBuffers(&numDmaDriverBuffers);
708  if (ULWord(ULWord64(pFrameBuffer)) >= numDmaDriverBuffers)
709  {
710  if (!inIsSynchronous)
711  return false; // Async mode requires kernel-allocated buffer
712  }
713 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
714 
715  int request(0);
716  const char *errMsg(AJA_NULL);
717 #define ERRMSG(s) #s " failed"
718 
719  // Usermode buffer stuff
720  // TODO: Stick the IOCTL code inside the dmaControlBuf and collapse 4 IOCTLs into one.
721  if (inIsRead) // Reading?
722  {
723  if (!inOffsetBytes) // Frame ( or field 0? )
724  {
727  }
728  else // Field 1
729  {
730  request = IOCTL_NTV2_DMA_READ_SEGMENT;
732  }
733  }
734  else // Writing
735  {
736  if (!inOffsetBytes) // Frame ( or field 0? )
737  {
740  }
741  else // Field 1
742  {
745  }
746  }
747 
749  const int result (ioctl(int(_hDevice), request, &dmaControlBuf));
751  if (result)
752  {
753  LDIFAIL(errMsg);
754  return false;
755  }
756  return true;
757 }
758 
759 
761  const NTV2Channel inDMAChannel,
762  const bool inIsTarget,
763  const ULWord inFrameNumber,
764  const ULWord inCardOffsetBytes,
765  const ULWord inByteCount,
766  const ULWord inNumSegments,
767  const ULWord inSegmentHostPitch,
768  const ULWord inSegmentCardPitch,
769  const PCHANNEL_P2P_STRUCT & inP2PData)
770 {
771  if (!IsOpen())
772  return false;
773  if (IsRemote())
774  return CNTV2DriverInterface::DmaTransfer (inDMAEngine, inDMAChannel, inIsTarget, inFrameNumber, inCardOffsetBytes, inByteCount,
775  inNumSegments, inSegmentHostPitch, inSegmentCardPitch, inP2PData);
776  if (!inP2PData)
777  {
778  LDIFAIL( "P2PData is NULL" );
779  return false;
780  }
781 
782  // Information to be sent to the driver
783  NTV2_DMA_P2P_CONTROL_STRUCT dmaP2PStruct;
784  ::memset (AsVoidPtr(&dmaP2PStruct), 0, sizeof(dmaP2PStruct));
785  if (inIsTarget)
786  {
787  // reset info to be passed back to the user
788  ::memset (AsVoidPtr(inP2PData), 0, sizeof(CHANNEL_P2P_STRUCT));
789  inP2PData->p2pSize = sizeof(CHANNEL_P2P_STRUCT);
790  }
791  else
792  {
793  // check for valid p2p struct
794  if (inP2PData->p2pSize != sizeof(CHANNEL_P2P_STRUCT))
795  {
796  LDIFAIL("p2pSize=" << DEC(inP2PData->p2pSize) << " != sizeof(CHANNEL_P2P_STRUCT) " << DEC(sizeof(CHANNEL_P2P_STRUCT)));
797  return false;
798  }
799  }
800 
801  dmaP2PStruct.bRead = inIsTarget;
802  dmaP2PStruct.dmaEngine = inDMAEngine;
803  dmaP2PStruct.dmaChannel = inDMAChannel;
804  dmaP2PStruct.ulFrameNumber = inFrameNumber;
805  dmaP2PStruct.ulFrameOffset = inCardOffsetBytes;
806  dmaP2PStruct.ulVidNumBytes = inByteCount;
807  dmaP2PStruct.ulVidNumSegments = inNumSegments;
808  dmaP2PStruct.ulVidSegmentHostPitch = inSegmentHostPitch;
809  dmaP2PStruct.ulVidSegmentCardPitch = inSegmentCardPitch;
810  dmaP2PStruct.ullVideoBusAddress = inP2PData->videoBusAddress;
811  dmaP2PStruct.ullMessageBusAddress = inP2PData->messageBusAddress;
812  dmaP2PStruct.ulVideoBusSize = inP2PData->videoBusSize;
813  dmaP2PStruct.ulMessageData = inP2PData->messageData;
815  const int result (ioctl(int(_hDevice), IOCTL_NTV2_DMA_P2P, &dmaP2PStruct));
817  if (result)
818  {LDIFAIL("IOCTL error"); return false;}
819 
820  // fill in p2p data
821  inP2PData->videoBusAddress = dmaP2PStruct.ullVideoBusAddress;
822  inP2PData->messageBusAddress = dmaP2PStruct.ullMessageBusAddress;
823  inP2PData->videoBusSize = dmaP2PStruct.ulVideoBusSize;
824  inP2PData->messageData = dmaP2PStruct.ulMessageData;
825  return true;
826 }
827 
829 // AutoCirculate
831 {
832  if (IsRemote())
833  return CNTV2DriverInterface::AutoCirculate(autoCircData);
834  if (!IsOpen())
835  return false;
836 
837  int result(1);
838  switch (autoCircData.eCommand)
839  {
840  case eInitAutoCirc:
841  case eStartAutoCirc:
842  case eStopAutoCirc:
843  case eAbortAutoCirc:
844  case ePauseAutoCirc:
845  case eFlushAutoCirculate:
847  // Pass the autoCircData structure to the driver.
848  // The driver knows the implicit meanings of the
849  // members of the structure based on the the
850  // command contained within it.
852  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_CONTROL, &autoCircData);
854  if (result)
855  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_CONTROL failed"); return false;}
856  return true;
857 
858  case eGetAutoCirc:
859  // Pass the autoCircStatus structure to the driver.
860  // It will read the channel spec contained within and
861  // fill out the status structure accordingly.
863  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_STATUS, AsStatusStructPtr(autoCircData.pvVal1));
865  if (result)
866  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_STATUS, failed"); return false;}
867  return true;
868 
869  case eGetFrameStamp:
870  {
871  // Pass the frameStamp structure to the driver.
872  // It will read the channel spec and frame number
873  // contained within and fill out the status structure
874  // accordingly.
875  AUTOCIRCULATE_FRAME_STAMP_COMBO_STRUCT acFrameStampCombo;
876  memset(&acFrameStampCombo, 0, sizeof acFrameStampCombo);
877  FRAME_STAMP_STRUCT* pFrameStamp = AsFrameStampStructPtr(autoCircData.pvVal1);
878  acFrameStampCombo.acFrameStamp = *pFrameStamp;
880  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_FRAMESTAMP, &acFrameStampCombo);
882  if (result)
883  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_FRAMESTAMP failed"); return false;}
884  *pFrameStamp = acFrameStampCombo.acFrameStamp;
885  return true;
886  }
887 
888  case eGetFrameStampEx2:
889  {
890  // Pass the frameStamp structure to the driver.
891  // It will read the channel spec and frame number
892  // contained within and fill out the status structure
893  // accordingly.
894  AUTOCIRCULATE_FRAME_STAMP_COMBO_STRUCT acFrameStampCombo;
895  memset(&acFrameStampCombo, 0, sizeof acFrameStampCombo);
896  FRAME_STAMP_STRUCT* pFrameStamp = AsFrameStampStructPtr(autoCircData.pvVal1);
897  PAUTOCIRCULATE_TASK_STRUCT pTask = AsPTaskStruct(autoCircData.pvVal2);
898  acFrameStampCombo.acFrameStamp = *pFrameStamp;
899  if (pTask)
900  acFrameStampCombo.acTask = *pTask;
902  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_FRAMESTAMP, &acFrameStampCombo);
904  if (result)
905  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_FRAMESTAMP failed"); return false;}
906  *pFrameStamp = acFrameStampCombo.acFrameStamp;
907  if (pTask)
908  *pTask = acFrameStampCombo.acTask;
909  return true;
910  }
911 
913  {
914  PAUTOCIRCULATE_TRANSFER_STRUCT acTransfer = AsPTransferStruct(autoCircData.pvVal1);
915  // If doing audio, insure buffer alignment is OK
916  if (acTransfer->audioBufferSize)
917  {
918  if (acTransfer->audioBufferSize % 4)
919  {LDIFAIL ("TransferAutoCirculate failed - audio buffer size not mod 4"); return false;}
920 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
921  ULWord numDmaDriverBuffers;
922  GetDMANumDriverBuffers(&numDmaDriverBuffers);
923  if (ULWord64(acTransfer->audioBuffer) >= ULWord64(numDmaDriverBuffers) && ULWord64(acTransfer->audioBuffer) % 4)
924  {LDIFAIL ("TransferAutoCirculate failed - audio buffer address not mod 4"); return false;}
925 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
926  }
927 
928  // Can't pass multiple pointers in a single ioctl, so combine
929  // them into a single structure and include channel spec too.
931  memset((void*)&acXferCombo, 0, sizeof acXferCombo);
933  NTV2RoutingTable *pXena2RoutingTable = AsRoutingTablePtr(autoCircData.pvVal3);
934  acXferCombo.channelSpec = autoCircData.channelSpec;
935  acXferCombo.acTransfer = *acTransfer;
936  acXferCombo.acStatus = *acStatus;
937  if (!pXena2RoutingTable)
938  memset(&acXferCombo.acXena2RoutingTable, 0, sizeof(acXferCombo.acXena2RoutingTable));
939  else
940  acXferCombo.acXena2RoutingTable = *pXena2RoutingTable;
941 
942  // Do the transfer
944  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_TRANSFER, &acXferCombo);
946  if (result)
947  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_TRANSFER failed"); return false;}
948  // Copy the results back into the status buffer we were given
949  *acStatus = acXferCombo.acStatus;
950  return true;
951  }
952 
954  {
955  PAUTOCIRCULATE_TRANSFER_STRUCT acTransfer = AsPTransferStruct(autoCircData.pvVal1);
956  // If doing audio, insure buffer alignment is OK
957  if (acTransfer->audioBufferSize)
958  {
959  if (acTransfer->audioBufferSize % 4)
960  {LDIFAIL ("TransferAutoCirculate failed - audio buffer size not mod 4"); return false;}
961 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
962  ULWord numDmaDriverBuffers;
963  GetDMANumDriverBuffers(&numDmaDriverBuffers);
964  if ((unsigned long)acTransfer->audioBuffer >= numDmaDriverBuffers && (unsigned long)acTransfer->audioBuffer % 4)
965  {LDIFAIL ("TransferAutoCirculate failed - audio buffer address not mod 4"); return false;}
966 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
967  }
968 
969  // Can't pass multiple pointers in a single ioctl, so combine
970  // them into a single structure and include channel spec too.
972  memset((void*)&acXferCombo, 0, sizeof acXferCombo);
974  NTV2RoutingTable *pXena2RoutingTable = AsRoutingTablePtr(autoCircData.pvVal3);
975  acXferCombo.channelSpec = autoCircData.channelSpec;
976  acXferCombo.acTransfer = *acTransfer;
977  acXferCombo.acStatus = *acStatus;
978  if (!pXena2RoutingTable)
979  memset(&acXferCombo.acXena2RoutingTable, 0, sizeof(acXferCombo.acXena2RoutingTable));
980  else
981  acXferCombo.acXena2RoutingTable = *pXena2RoutingTable;
982 
983  // Do the transfer
985  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_TRANSFER, &acXferCombo);
987  if (result)
988  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_TRANSFER failed"); return false;}
989  // Copy the results back into the status buffer we were given
990  *acStatus = acXferCombo.acStatus;
991  return true;
992  }
993 
995  {
996  PAUTOCIRCULATE_TRANSFER_STRUCT acTransfer = AsPTransferStruct(autoCircData.pvVal1);
997  // If doing audio, insure buffer alignment is OK
998  if (acTransfer->audioBufferSize)
999  {
1000  if (acTransfer->audioBufferSize % 4)
1001  {LDIFAIL ("TransferAutoCirculate failed - audio buffer size not mod 4"); return false;}
1002 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
1003  ULWord numDmaDriverBuffers;
1004  GetDMANumDriverBuffers(&numDmaDriverBuffers);
1005  if (ULWord64(acTransfer->audioBuffer) >= ULWord64(numDmaDriverBuffers) && ULWord(acTransfer->audioBuffer) % 4)
1006  {LDIFAIL ("TransferAutoCirculate failed - audio buffer address not mod 4"); return false;}
1007 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
1008  }
1009 
1010  // Can't pass multiple pointers in a single ioctl, so combine
1011  // them into a single structure and include channel spec too.
1013  ::memset(AsVoidPtr(&acXferCombo), 0, sizeof(acXferCombo));
1015  NTV2RoutingTable * pXena2RoutingTable = AsRoutingTablePtr(autoCircData.pvVal3);
1016  PAUTOCIRCULATE_TASK_STRUCT pTask = AsPTaskStruct(autoCircData.pvVal4);
1017  acXferCombo.channelSpec = autoCircData.channelSpec;
1018  acXferCombo.acTransfer = *acTransfer;
1019  acXferCombo.acStatus = *acStatus;
1020  if (pXena2RoutingTable)
1021  acXferCombo.acXena2RoutingTable = *pXena2RoutingTable;
1022  if (pTask)
1023  acXferCombo.acTask = *pTask;
1024 
1025  // Do the transfer
1027  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_TRANSFER, &acXferCombo);
1029  if (result)
1030  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_TRANSFER failed"); return false;}
1031  // Copy the results back into the status buffer we were given
1032  *acStatus = acXferCombo.acStatus;
1033  return true;
1034  }
1035 
1036  case eSetCaptureTask:
1037  {
1038  AUTOCIRCULATE_FRAME_STAMP_COMBO_STRUCT acFrameStampCombo;
1039  memset(&acFrameStampCombo, 0, sizeof acFrameStampCombo);
1040  PAUTOCIRCULATE_TASK_STRUCT pTask = AsPTaskStruct(autoCircData.pvVal1);
1041  acFrameStampCombo.acFrameStamp.channelSpec = autoCircData.channelSpec;
1042  acFrameStampCombo.acTask = *pTask;
1044  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_CAPTURETASK, &acFrameStampCombo);
1046  if (result)
1047  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_CAPTURETASK failed"); return false;}
1048  return true;
1049  }
1050 
1051  default:
1052  LDIFAIL("Unsupported AC command type in AutoCirculate()");
1053  break;
1054  } // switch
1055  return false;
1056 }
1057 
1058 
1060 {
1061  if (!pInMessage)
1062  return false; // NULL message pointer
1063 
1064  if (IsRemote())
1065  return CNTV2DriverInterface::NTV2Message(pInMessage); // Implement NTV2Message on nub
1066 
1069  const int result (ioctl(int(_hDevice), IOCTL_AJANTV2_MESSAGE, pInMessage));
1071  if (result)
1072  {LDIFAIL("IOCTL_AJANTV2_MESSAGE failed"); return false;}
1073  return true;
1074 }
1075 
1077 {
1078  if (!pMessage)
1079  return false; // NULL message pointer
1081  return false;
1082  if (_hDevice == 0)
1083  return false;
1085  const int result = ioctl(int(_hDevice), IOCTL_HEVC_MESSAGE, pMessage);
1087  if (result)
1088  {LDIFAIL("IOCTL_AJANTV2_MESSAGE failed"); return false;}
1089  return true;
1090 }
1091 
1092 
1093 #if !defined(NTV2_DEPRECATE_16_0)
1095  {
1096  return physAddr ? ReadRegister (kVRegDMADriverBufferPhysicalAddress, *physAddr) : false;
1097  }
1098 
1100  {
1101  return pNumDmaDriverBuffers ? ReadRegister (kVRegNumDmaDriverBuffers, *pNumDmaDriverBuffers) : false;
1102  }
1103 
1104  // Method: MapDMADriverBuffer(Maps 8 Frames worth of memory from kernel space to user space.
1105  // Input:
1106  // Output:
1108  {
1110  {
1111  ULWord numDmaDriverBuffers;
1112  if (!GetDMANumDriverBuffers(&numDmaDriverBuffers))
1113  {
1114  LDIFAIL("GetDMANumDriverBuffers() failed");
1115  return false;
1116  }
1117 
1118  if (!numDmaDriverBuffers)
1119  {
1120  LDIFAIL("numDmaDriverBuffers == 0");
1121  return false;
1122  }
1123 
1124  // the offset of 0x2000 in the call to mmap tells mmap to map the DMA Buffer into user space
1125  // 2.4 kernel interprets offset as number of pages, so 0x2000 works. This won't work on a 2.2
1126  // kernel
1127  _pDMADriverBufferAddress = reinterpret_cast<ULWord*>(mmap (AJA_NULL, GetFrameBufferSize() * numDmaDriverBuffers,
1128  PROT_READ | PROT_WRITE,MAP_SHARED,
1129  _hDevice, 0x2000));
1130  if (_pDMADriverBufferAddress == MAP_FAILED)
1131  {
1133  return false;
1134  }
1135  }
1136  return true;
1137  }
1138 
1140  {
1142  if (!MapDMADriverBuffer())
1143  return false;
1144  *pDMADriverBufferAddress = _pDMADriverBufferAddress;
1145  return true;
1146  }
1147 
1148  // Method: UnmapDMADriverBuffer
1149  // Input: NONE
1150  // Output: NONE
1152  {
1154  {
1155  ULWord numDmaDriverBuffers;
1156  if (!GetDMANumDriverBuffers(&numDmaDriverBuffers))
1157  {
1158  LDIFAIL("GetDMANumDriverBuffers() failed");
1159  return false;
1160  }
1161  if (!numDmaDriverBuffers)
1162  {
1163 
1164  LDIFAIL("numDmaDriverBuffers == 0");
1165  return false;
1166  }
1167  munmap(_pDMADriverBufferAddress, GetFrameBufferSize() * numDmaDriverBuffers);
1168  }
1170  return true;
1171  }
1172 #endif // !defined(NTV2_DEPRECATE_16_0)
1173 
1175 {
1177 }
1178 
1180 {
1182 }
1183 
1184 #if !defined(NTV2_DEPRECATE_16_0)
1185  // Method: DmaBufferWriteFrameDriverBuffer
1186  // NTV2DMAEngine - DMAEngine
1187  // ULWord frameNumber(0 .. NUM_FRAMEBUFFERS-1)
1188  // ULWord dmaBufferFrame(0 .. numDmaDriverBuffers-1)
1189  // ULWord bytes - number of bytes to dma
1190  // ULWord poll - 0=block 1=return immediately and poll
1191  // via register 48
1192  // When the board is opened the driver allocates
1193  // a user-definable number of frames for dmaing
1194  // This allows dma's to be done without scatter/gather
1195  // which should help performance.
1196  bool CNTV2LinuxDriverInterface::DmaWriteFrameDriverBuffer (NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame, ULWord bytes, ULWord poll)
1197  {
1198  if (IsRemote())
1199  return false;
1200  if (!IsOpen())
1201  return false;
1202 
1203  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
1204  dmaControlBuf.engine = DMAEngine;
1205  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
1206  dmaControlBuf.frameNumber = frameNumber;
1207  dmaControlBuf.frameBuffer = PULWord(dmaBufferFrame);
1208  dmaControlBuf.frameOffsetSrc = 0;
1209  dmaControlBuf.frameOffsetDest = 0;
1210  dmaControlBuf.numBytes = bytes;
1211  dmaControlBuf.downSample = 0;
1212  dmaControlBuf.linePitch = 0;
1213  dmaControlBuf.poll = poll;
1214  if (ioctl(int(_hDevice), IOCTL_NTV2_DMA_WRITE_FRAME, &dmaControlBuf))
1215  {LDIFAIL("IOCTL_NTV2_DMA_WRITE_FRAME failed"); return false;}
1216  return true;
1217  }
1218 
1219  // Method: DmaBufferWriteFrameDriverBuffer
1220  // NTV2DMAEngine - DMAEngine
1221  // ULWord frameNumber(0-NUM_FRAMEBUFFERS-1)
1222  // ULWord dmaBufferFrame(0 .. numDmaDriverBuffers-1)
1223  // ULWord bytes - number of bytes to dma
1224  // ULWord poll - 0=block 1=return immediately and poll
1225  // via register 48
1226  // When the board is opened the driver allocates
1227  // a user-definable number of frames for dmaing
1228  // This allows dma's to be done without scatter/gather
1229  // which should help performance.
1230  bool CNTV2LinuxDriverInterface::DmaWriteFrameDriverBuffer (NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame, ULWord offsetSrc, ULWord offsetDest, ULWord bytes, ULWord poll)
1231  {
1232  if (IsRemote())
1233  return false;
1234  if (!IsOpen())
1235  return false;
1236 
1237  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
1238  dmaControlBuf.engine = DMAEngine;
1239  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
1240  dmaControlBuf.frameNumber = frameNumber;
1241  dmaControlBuf.frameBuffer = PULWord(dmaBufferFrame);
1242  dmaControlBuf.frameOffsetSrc = offsetSrc;
1243  dmaControlBuf.frameOffsetDest = offsetDest;
1244  dmaControlBuf.numBytes = bytes;
1245  dmaControlBuf.downSample = 0;
1246  dmaControlBuf.linePitch = 0;
1247  dmaControlBuf.poll = poll;
1248  if (ioctl(int(_hDevice), IOCTL_NTV2_DMA_WRITE_FRAME, &dmaControlBuf))
1249  {LDIFAIL("IOCTL_NTV2_DMA_WRITE_FRAME failed"); return false;}
1250  return true;
1251  }
1252 
1253 
1254  // Method: DmaBufferReadFrameDriverBuffer
1255  // NTV2DMAEngine - DMAEngine
1256  // ULWord frameNumber(0-NUM_FRAMEBUFFERS-1)
1257  // ULWord dmaBufferFrame(0 .. numDmaDriverBuffers-1)
1258  // ULWord bytes - number of bytes to dma
1259  // ULWord poll - 0=block 1=return immediately and poll
1260  // via register 48
1261  // When the board is opened the driver allocates
1262  // a user-definable number of frames for dmaing
1263  // This allows dma's to be done without scatter/gather
1264  // which should help performance.
1265  bool CNTV2LinuxDriverInterface::DmaReadFrameDriverBuffer (NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame, ULWord bytes, ULWord downSample, ULWord linePitch, ULWord poll)
1266  {
1267  if (IsRemote())
1268  return false;
1269  if (!IsOpen())
1270  return false;
1271 
1272  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
1273  dmaControlBuf.engine = DMAEngine;
1274  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
1275  dmaControlBuf.frameNumber = frameNumber;
1276  dmaControlBuf.frameBuffer = PULWord(dmaBufferFrame);
1277  dmaControlBuf.frameOffsetSrc = 0;
1278  dmaControlBuf.frameOffsetDest = 0;
1279  dmaControlBuf.numBytes = bytes;
1280  dmaControlBuf.downSample = downSample;
1281  dmaControlBuf.linePitch = linePitch == 0 ? 1 : linePitch;
1282  dmaControlBuf.poll = poll;
1283 
1284  static bool bPrintedDownsampleDeprecatedMsg = false;
1285  if (downSample && !bPrintedDownsampleDeprecatedMsg)
1286  {LDIWARN("downSample is deprecated"); bPrintedDownsampleDeprecatedMsg = true;}
1287 
1288  if (ioctl(int(_hDevice), IOCTL_NTV2_DMA_READ_FRAME, &dmaControlBuf))
1289  {LDIFAIL("IOCTL_NTV2_DMA_READ_FRAME failed"); return false;}
1290  return true;
1291  }
1292 
1293  // Method: DmaBufferReadFrameDriverBuffer
1294  // NTV2DMAEngine - DMAEngine
1295  // ULWord frameNumber(0-NUM_FRAMEBUFFERS-1)
1296  // ULWord dmaBufferFrame(0 .. numDmaDriverBuffers-1)
1297  // ULWord bytes - number of bytes to dma
1298  // ULWord poll - 0=block 1=return immediately and poll
1299  // via register 48
1300  // When the board is opened the driver allocates
1301  // a user-definable number of frames for dmaing
1302  // This allows dma's to be done without scatter/gather
1303  // which should help performance.
1304  bool CNTV2LinuxDriverInterface::DmaReadFrameDriverBuffer (NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame,
1305  ULWord offsetSrc, ULWord offsetDest, ULWord bytes,
1306  ULWord downSample, ULWord linePitch, ULWord poll)
1307  {
1308  if (IsRemote())
1309  return false;
1310  if (!IsOpen())
1311  return false;
1312 
1313  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
1314  dmaControlBuf.engine = DMAEngine;
1315  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
1316  dmaControlBuf.frameNumber = frameNumber;
1317  dmaControlBuf.frameBuffer = PULWord(dmaBufferFrame);
1318  dmaControlBuf.frameOffsetSrc = offsetSrc;
1319  dmaControlBuf.frameOffsetDest = offsetDest;
1320  dmaControlBuf.numBytes = bytes;
1321  dmaControlBuf.downSample = downSample;
1322  if( linePitch == 0 ) linePitch = 1;
1323  dmaControlBuf.linePitch = linePitch;
1324  dmaControlBuf.poll = poll;
1325 
1326  static bool bPrintedDownsampleDeprecatedMsg = false;
1327  if (downSample && !bPrintedDownsampleDeprecatedMsg)
1328  {LDIWARN("downSample is deprecated"); bPrintedDownsampleDeprecatedMsg = true;}
1329 
1330  if (ioctl(int(_hDevice), IOCTL_NTV2_DMA_READ_FRAME, &dmaControlBuf))
1331  {LDIFAIL("IOCTL_NTV2_DMA_READ_FRAME failed"); return false;}
1332  return true;
1333  }
1334 #endif // !defined(NTV2_DEPRECATE_16_0)
1335 
1337  ULWord offsetSrc, ULWord offsetDest, ULWord bytes)
1338 {
1339  // return DmaTransfer (DMAEngine, false, frameNumber, pFrameBuffer, (ULWord) 0, bytes, bSync);
1340  if (IsRemote())
1341  return false;
1342  if (!IsOpen())
1343  return false;
1344  // NOTE: Linux driver assumes driver buffers to be used if
1345  // pFrameBuffer < numDmaDriverBuffers
1346  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
1347  dmaControlBuf.engine = DMAEngine;
1348  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
1349  dmaControlBuf.frameNumber = frameNumber;
1350  dmaControlBuf.frameBuffer = pFrameBuffer;
1351  dmaControlBuf.frameOffsetSrc = offsetSrc;
1352  dmaControlBuf.frameOffsetDest = offsetDest;
1353  dmaControlBuf.numBytes = bytes;
1354 
1355  // The following are used only for driver-created buffers.
1356  // Set them to known values.
1357  dmaControlBuf.downSample = 0; // Not applicable to this mode
1358  dmaControlBuf.linePitch = 1; // Not applicable to this mode
1359  dmaControlBuf.poll = 0; // currently can't poll with a usermode allocated dma buffer
1360 
1361  ULWord request;
1362  const char *errMsg = AJA_NULL;
1363 #define ERRMSG(s) #s " failed"
1364 
1365  // Usermode buffer stuff
1366  if (offsetSrc == 0 && offsetDest == 0) // Frame ( or field 0? )
1367  {
1368  request = IOCTL_NTV2_DMA_WRITE_FRAME;
1370  }
1371  else // Field 1 or audio
1372  {
1373  request = IOCTL_NTV2_DMA_WRITE;
1374  errMsg = ERRMSG(IOCTL_NTV2_DMA_WRITE);
1375  }
1376 
1377  if (ioctl(int(_hDevice), request, &dmaControlBuf))
1378  {LDIFAIL(errMsg); return false;}
1379  return true;
1380 }
1381 
1383  ULWord offsetSrc, ULWord offsetDest, ULWord bytes)
1384 {
1385  // return DmaTransfer (DMAEngine, false, frameNumber, pFrameBuffer, (ULWord) 0, bytes, bSync);
1386  if (IsRemote())
1387  return false;
1388  if (!IsOpen())
1389  return false;
1390 
1391  // NOTE: Linux driver assumes driver buffers to be used if
1392  // pFrameBuffer < numDmaDriverBuffers
1393  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
1394  dmaControlBuf.engine = DMAEngine;
1395  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
1396  dmaControlBuf.frameNumber = frameNumber;
1397  dmaControlBuf.frameBuffer = pFrameBuffer;
1398  dmaControlBuf.frameOffsetSrc = offsetSrc;
1399  dmaControlBuf.frameOffsetDest = offsetDest;
1400  dmaControlBuf.numBytes = bytes;
1401 
1402  // The following are used only for driver-created buffers.
1403  // Set them to known values.
1404  dmaControlBuf.downSample = 0; // Not applicable to this mode
1405  dmaControlBuf.linePitch = 1; // Not applicable to this mode
1406  dmaControlBuf.poll = 0; // currently can't poll with a usermode allocated dma buffer
1407  ULWord request;
1408  const char *errMsg = AJA_NULL;
1409 #define ERRMSG(s) #s " failed"
1410 
1411  // Usermode buffer stuff
1412  if (offsetSrc == 0 && offsetDest == 0) // Frame ( or field 0? )
1413  {
1414  request = IOCTL_NTV2_DMA_READ_FRAME;
1416  }
1417  else // Field 1 or audio
1418  {
1419  request = IOCTL_NTV2_DMA_READ;
1420  errMsg = ERRMSG(IOCTL_NTV2_DMA_READ);
1421  }
1422 
1423  if (ioctl(int(_hDevice), request, &dmaControlBuf))
1424  {LDIFAIL(errMsg); return false;}
1425  return true;
1426 #undef ERRMSG
1427 }
CNTV2LinuxDriverInterface::_pDNXRegisterBaseAddress
ULWord * _pDNXRegisterBaseAddress
Definition: ntv2linuxdriverinterface.h:148
AJA_DebugStat_GetInterruptCount
@ AJA_DebugStat_GetInterruptCount
Definition: debugshare.h:240
AJA_DebugStat_DMATransferEx
@ AJA_DebugStat_DMATransferEx
Definition: debugshare.h:242
CNTV2LinuxDriverInterface::MapRegisters
virtual bool MapRegisters(void)
Definition: ntv2linuxdriverinterface.cpp:418
eInput3
@ eInput3
Definition: ntv2publicinterface.h:3739
IOCTL_NTV2_SETUP_BOARD
#define IOCTL_NTV2_SETUP_BOARD
Definition: ntv2baremetalpublicinterface.h:77
AJADebug::StatTimerStop
static AJAStatus StatTimerStop(const uint32_t inKey)
Definition: debug.cpp:1154
AUTOCIRCULATE_DATA::channelSpec
NTV2Crosspoint channelSpec
Definition: ntv2publicinterface.h:4341
NTV2_DMA_CONTROL_STRUCT::frameBuffer
PULWord frameBuffer
Definition: ntv2baremetalpublicinterface.h:154
CNTV2DriverInterface::mSkipRegWrites
bool mSkipRegWrites
True if actual register writes are skipped while recording.
Definition: ntv2driverinterface.h:678
FRAME_STAMP_STRUCT::channelSpec
NTV2Crosspoint channelSpec
Definition: ntv2publicinterface.h:4407
NTV2_DMA_P2P_CONTROL_STRUCT::dmaEngine
NTV2DMAEngine dmaEngine
Definition: ntv2baremetalpublicinterface.h:184
HANDLE
short HANDLE
Definition: ajatypes.h:304
kRegBoardID
@ kRegBoardID
Definition: ntv2publicinterface.h:124
NTV2_WAITFOR_INTERRUPT_STRUCT::eInterruptType
INTERRUPT_ENUMS eInterruptType
Definition: ntv2baremetalpublicinterface.h:209
INTERRUPT_ENUMS
enum _INTERRUPT_ENUMS_ INTERRUPT_ENUMS
ERRMSG
#define ERRMSG(s)
NTV2_DMA_CONTROL_STRUCT::frameOffsetDest
ULWord frameOffsetDest
Definition: ntv2baremetalpublicinterface.h:157
NTV2_INTERRUPT_CONTROL_STRUCT::eInterruptType
INTERRUPT_ENUMS eInterruptType
Definition: ntv2baremetalpublicinterface.h:201
NTV2_DriverDebugMessageSet
NTV2_DriverDebugMessageSet
Definition: ntv2enums.h:3743
CNTV2DriverInterface::_pXena2FlashBaseAddress
ULWord * _pXena2FlashBaseAddress
Definition: ntv2driverinterface.h:692
NTV2_DMA_CONTROL_STRUCT::numBytes
ULWord numBytes
Definition: ntv2baremetalpublicinterface.h:158
eOutput6
@ eOutput6
Definition: ntv2publicinterface.h:3755
IOCTL_NTV2_DMA_READ
#define IOCTL_NTV2_DMA_READ
Definition: ntv2baremetalpublicinterface.h:44
AJA_DebugStat_HEVCSendMessage
@ AJA_DebugStat_HEVCSendMessage
Definition: debugshare.h:247
AsVoidPtr
#define AsVoidPtr(_p_)
Definition: ntv2linuxdriverinterface.cpp:37
NTV2Channel
NTV2Channel
These enum values are mostly used to identify a specific Frame Store. They're also commonly used to i...
Definition: ntv2enums.h:1305
AJA_DebugStat_ReadRegister
@ AJA_DebugStat_ReadRegister
Definition: debugshare.h:224
CNTV2DriverInterface::_boardOpened
bool _boardOpened
True if I'm open and connected to the device.
Definition: ntv2driverinterface.h:675
NTV2_DMA_P2P_CONTROL_STRUCT::ullVideoBusAddress
ULWord64 ullVideoBusAddress
Definition: ntv2baremetalpublicinterface.h:192
AJA_DebugStat_NTV2Message
@ AJA_DebugStat_NTV2Message
Definition: debugshare.h:246
IOCTL_NTV2_AUTOCIRCULATE_TRANSFER
#define IOCTL_NTV2_AUTOCIRCULATE_TRANSFER
Definition: ntv2baremetalpublicinterface.h:107
AJADebug::StatTimerStart
static AJAStatus StatTimerStart(const uint32_t inKey)
Definition: debug.cpp:1134
IOCTL_NTV2_DMA_WRITE_FRAME
#define IOCTL_NTV2_DMA_WRITE_FRAME
Definition: ntv2baremetalpublicinterface.h:34
NTV2_ASSERT
#define NTV2_ASSERT(_expr_)
Definition: ajatypes.h:601
IOCTL_NTV2_DMA_READ_FRAME_SEGMENT
#define IOCTL_NTV2_DMA_READ_FRAME_SEGMENT
Definition: ntv2baremetalpublicinterface.h:37
AJA_DebugStat_AutoCirculate
@ AJA_DebugStat_AutoCirculate
Definition: debugshare.h:244
AJA_DebugStat_WaitForInterruptOthers
@ AJA_DebugStat_WaitForInterruptOthers
Definition: debugshare.h:239
CNTV2DriverInterface::WaitForInterrupt
virtual bool WaitForInterrupt(const INTERRUPT_ENUMS eInterrupt, const ULWord timeOutMs=68)
Definition: ntv2driverinterface.cpp:536
NTV2_DMA_P2P_CONTROL_STRUCT::bRead
bool bRead
Definition: ntv2baremetalpublicinterface.h:183
eInput2
@ eInput2
Definition: ntv2publicinterface.h:3716
AJA_DebugStat_WaitForInterruptIn2
@ AJA_DebugStat_WaitForInterruptIn2
Definition: debugshare.h:227
eInput7
@ eInput7
Definition: ntv2publicinterface.h:3748
NTV2_DMA_CONTROL_STRUCT::poll
ULWord poll
Definition: ntv2baremetalpublicinterface.h:161
kVRegBA1MemorySize
@ kVRegBA1MemorySize
Definition: ntv2virtualregisters.h:257
IOCTL_NTV2_DMA_READ_FRAME
#define IOCTL_NTV2_DMA_READ_FRAME
Definition: ntv2baremetalpublicinterface.h:31
NTV2DeviceID
NTV2DeviceID
Identifies a specific AJA NTV2 device model number. The NTV2DeviceID is actually the PROM part number...
Definition: ntv2enums.h:20
NTV2_DMA_P2P_CONTROL_STRUCT
Definition: ntv2baremetalpublicinterface.h:182
LDIDBG
#define LDIDBG(__x__)
Definition: ntv2linuxdriverinterface.cpp:29
AUTOCIRCULATE_TRANSFER_STRUCT::audioBufferSize
ULWord audioBufferSize
Definition: ntv2publicinterface.h:4549
IOCTL_NTV2_WRITE_REGISTER
#define IOCTL_NTV2_WRITE_REGISTER
Definition: ntv2baremetalpublicinterface.h:22
CNTV2LinuxDriverInterface::NTV2Message
virtual bool NTV2Message(NTV2_HEADER *pInOutMessage)
Sends a message to the NTV2 driver (the new, improved, preferred way).
Definition: ntv2linuxdriverinterface.cpp:1059
CNTV2LinuxDriverInterface::CloseLocalPhysical
virtual bool CloseLocalPhysical(void)
Releases host resources associated with the local/physical device connection.
Definition: ntv2linuxdriverinterface.cpp:94
NTV2_DMA_CONTROL_STRUCT::engine
NTV2DMAEngine engine
Definition: ntv2baremetalpublicinterface.h:151
NTV2_CONTROL_DRIVER_DEBUG_MESSAGES_STRUCT::success
ULWord success
Definition: ntv2baremetalpublicinterface.h:219
PULWord
uint32_t * PULWord
Definition: ajatypes.h:247
CNTV2LinuxDriverInterface::GetInterruptCount
virtual bool GetInterruptCount(const INTERRUPT_ENUMS eInterrupt, ULWord &outCount)
Answers with the number of interrupts of the given type processed by the driver.
Definition: ntv2linuxdriverinterface.cpp:220
CNTV2DriverInterface::_boardNumber
UWord _boardNumber
My device index number.
Definition: ntv2driverinterface.h:673
IOCTL_NTV2_CONTROL_DRIVER_DEBUG_MESSAGES
#define IOCTL_NTV2_CONTROL_DRIVER_DEBUG_MESSAGES
Definition: ntv2baremetalpublicinterface.h:72
NTV2_DMA_P2P_CONTROL_STRUCT::ulFrameOffset
ULWord ulFrameOffset
Definition: ntv2baremetalpublicinterface.h:187
NTV2_CHANNEL1
@ NTV2_CHANNEL1
Specifies channel or Frame Store 1 (or the first item).
Definition: ntv2enums.h:1307
kVRegGlobalAudioPlaybackMode
@ kVRegGlobalAudioPlaybackMode
Definition: ntv2virtualregisters.h:34
LDIINFO
#define LDIINFO(__x__)
Definition: ntv2linuxdriverinterface.cpp:28
CNTV2DriverInterface::WriteRegister
virtual bool WriteRegister(const ULWord inRegNum, const ULWord inValue, const ULWord inMask=0xFFFFFFFF, const ULWord inShift=0)
Updates or replaces all or part of the 32-bit contents of a specific register (real or virtual) on th...
Definition: ntv2driverinterface.cpp:457
CNTV2LinuxDriverInterface::MapXena2Flash
virtual bool MapXena2Flash(void)
Definition: ntv2linuxdriverinterface.cpp:487
CNTV2DriverInterface::_boardID
NTV2DeviceID _boardID
My cached device ID.
Definition: ntv2driverinterface.h:674
ePrerollAutoCirculate
@ ePrerollAutoCirculate
Definition: ntv2publicinterface.h:4220
eGetIntCount
@ eGetIntCount
Definition: ntv2publicinterface.h:3725
IOCTL_NTV2_READ_REGISTER
#define IOCTL_NTV2_READ_REGISTER
Definition: ntv2baremetalpublicinterface.h:27
AJA_DebugStat_WaitForInterruptIn8
@ AJA_DebugStat_WaitForInterruptIn8
Definition: debugshare.h:233
ntv2linuxdriverinterface.h
Declares the CNTV2LinuxDriverInterface class.
CNTV2LinuxDriverInterface::DmaReadWithOffsets
virtual bool DmaReadWithOffsets(NTV2DMAEngine DMAEngine, ULWord frameNumber, ULWord *pFrameBuffer, ULWord offsetSrc, ULWord offsetDest, ULWord bytes)
Definition: ntv2linuxdriverinterface.cpp:1382
CNTV2LinuxDriverInterface::GetAudioOutputMode
virtual bool GetAudioOutputMode(NTV2_GlobalAudioPlaybackMode *mode)
Definition: ntv2linuxdriverinterface.cpp:1179
NTV2_CONTROL_DRIVER_DEBUG_MESSAGES_STRUCT::msgSet
NTV2_DriverDebugMessageSet msgSet
Definition: ntv2baremetalpublicinterface.h:217
eInput4
@ eInput4
Definition: ntv2publicinterface.h:3740
NTV2_DMA_CONTROL_STRUCT::linePitch
ULWord linePitch
Definition: ntv2baremetalpublicinterface.h:160
AUTOCIRCULATE_DATA::pvVal4
void * pvVal4
Definition: ntv2publicinterface.h:4362
NTV2_DMA_CONTROL_STRUCT::frameNumber
ULWord frameNumber
Definition: ntv2baremetalpublicinterface.h:153
AUTOCIRCULATE_DATA::pvVal3
void * pvVal3
Definition: ntv2publicinterface.h:4361
CNTV2DriverInterface::ReadRegister
virtual bool ReadRegister(const ULWord inRegNum, ULWord &outValue, const ULWord inMask=0xFFFFFFFF, const ULWord inShift=0)
Reads all or part of the 32-bit contents of a specific register (real or virtual) on the AJA device....
Definition: ntv2driverinterface.cpp:393
CNTV2LinuxDriverInterface::ControlDriverDebugMessages
virtual bool ControlDriverDebugMessages(NTV2_DriverDebugMessageSet msgSet, bool enable)
Definition: ntv2linuxdriverinterface.cpp:307
NTV2_DMA_SEGMENT_CONTROL_STRUCT::videoSegmentHostPitch
ULWord videoSegmentHostPitch
Definition: ntv2baremetalpublicinterface.h:177
CNTV2DriverInterface::mRegWrites
NTV2RegisterWrites mRegWrites
Stores WriteRegister data.
Definition: ntv2driverinterface.h:685
IOCTL_NTV2_WAITFOR_INTERRUPT
#define IOCTL_NTV2_WAITFOR_INTERRUPT
Definition: ntv2baremetalpublicinterface.h:67
NTV2RoutingTable
Definition: ntv2publicinterface.h:4026
AJA_DebugStat_DMATransferP2P
@ AJA_DebugStat_DMATransferP2P
Definition: debugshare.h:243
eOutput7
@ eOutput7
Definition: ntv2publicinterface.h:3756
NTV2_GlobalAudioPlaybackMode
NTV2_GlobalAudioPlaybackMode
Definition: ntv2enums.h:2047
eAbortAutoCirc
@ eAbortAutoCirc
Definition: ntv2publicinterface.h:4222
eTransferAutoCirculate
@ eTransferAutoCirculate
Definition: ntv2publicinterface.h:4221
NTV2DMAEngine
NTV2DMAEngine
Definition: ntv2enums.h:1801
AUTOCIRCULATE_TRANSFER_COMBO_STRUCT::acTask
AUTOCIRCULATE_TASK_STRUCT acTask
Definition: ntv2baremetalpublicinterface.h:228
LDIWARN
#define LDIWARN(__x__)
Definition: ntv2linuxdriverinterface.cpp:26
AsPTaskStruct
#define AsPTaskStruct(_p_)
Definition: ntv2linuxdriverinterface.cpp:35
NTV2_DMA_P2P_CONTROL_STRUCT::ulVidSegmentCardPitch
ULWord ulVidSegmentCardPitch
Definition: ntv2baremetalpublicinterface.h:191
eGetFrameStamp
@ eGetFrameStamp
Definition: ntv2publicinterface.h:4218
sIntEnumToStatKeys
static const uint32_t sIntEnumToStatKeys[]
Definition: ntv2linuxdriverinterface.cpp:263
FRAME_STAMP_STRUCT
Definition: ntv2publicinterface.h:4405
AUTOCIRCULATE_DATA::eCommand
AUTO_CIRC_COMMAND eCommand
Definition: ntv2publicinterface.h:4340
AsRoutingTablePtr
#define AsRoutingTablePtr(_p_)
Definition: ntv2linuxdriverinterface.cpp:34
NTV2_DMA_SEGMENT_CONTROL_STRUCT::frameOffsetDest
ULWord frameOffsetDest
Definition: ntv2baremetalpublicinterface.h:173
CHANNEL_P2P_STRUCT
struct AUTOCIRCULATE_P2P_STRUCT CHANNEL_P2P_STRUCT
AsStatusStructPtr
#define AsStatusStructPtr(_p_)
Definition: ntv2linuxdriverinterface.cpp:32
ULWord
uint32_t ULWord
Definition: ajatypes.h:246
IOCTL_NTV2_DMA_WRITE
#define IOCTL_NTV2_DMA_WRITE
Definition: ntv2baremetalpublicinterface.h:47
NTV2_DMA_P2P_CONTROL_STRUCT::dmaChannel
NTV2Channel dmaChannel
Definition: ntv2baremetalpublicinterface.h:185
eInput8
@ eInput8
Definition: ntv2publicinterface.h:3749
AUTOCIRCULATE_P2P_STRUCT::videoBusSize
ULWord videoBusSize
Definition: ntv2publicinterface.h:4632
CNTV2DriverInterface::DmaTransfer
virtual bool DmaTransfer(const NTV2DMAEngine inDMAEngine, const bool inIsRead, const ULWord inFrameNumber, ULWord *pFrameBuffer, const ULWord inCardOffsetBytes, const ULWord inTotalByteCount, const bool inSynchronous=(!(0)))
Transfers data between the AJA device and the host. This function will block and not return to the ca...
Definition: ntv2driverinterface.cpp:472
NTV2_DMA_SEGMENT_CONTROL_STRUCT
Definition: ntv2baremetalpublicinterface.h:165
AJA_DebugStat_WaitForInterruptUartTx1
@ AJA_DebugStat_WaitForInterruptUartTx1
Definition: debugshare.h:236
NTV2_DMA_SEGMENT_CONTROL_STRUCT::frameOffsetSrc
ULWord frameOffsetSrc
Definition: ntv2baremetalpublicinterface.h:172
AUTOCIRCULATE_P2P_STRUCT::messageBusAddress
ULWord64 messageBusAddress
Definition: ntv2publicinterface.h:4631
CNTV2LinuxDriverInterface::~CNTV2LinuxDriverInterface
virtual ~CNTV2LinuxDriverInterface()
Definition: ntv2linuxdriverinterface.cpp:53
REGISTER_ACCESS::RegisterValue
ULWord RegisterValue
Definition: ntv2baremetalpublicinterface.h:140
NTV2_DMA_P2P_CONTROL_STRUCT::ulVidSegmentHostPitch
ULWord ulVidSegmentHostPitch
Definition: ntv2baremetalpublicinterface.h:190
AUTOCIRCULATE_TRANSFER_STRUCT
Definition: ntv2publicinterface.h:4542
IOCTL_AJANTV2_MESSAGE
#define IOCTL_AJANTV2_MESSAGE
Definition: ntv2baremetalpublicinterface.h:113
AJA_DebugStat_AutoCirculateXfer
@ AJA_DebugStat_AutoCirculateXfer
Definition: debugshare.h:245
CNTV2LinuxDriverInterface::AutoCirculate
virtual bool AutoCirculate(AUTOCIRCULATE_DATA &autoCircData)
Sends an AutoCirculate command to the NTV2 driver.
Definition: ntv2linuxdriverinterface.cpp:830
NTV2_WAITFOR_INTERRUPT_STRUCT::timeOutMs
ULWord timeOutMs
Definition: ntv2baremetalpublicinterface.h:210
CNTV2LinuxDriverInterface::UnmapDNXRegisters
virtual bool UnmapDNXRegisters(void)
Definition: ntv2linuxdriverinterface.cpp:571
CNTV2LinuxDriverInterface::UnmapFrameBuffers
virtual bool UnmapFrameBuffers(void)
Definition: ntv2linuxdriverinterface.cpp:395
eOutput2
@ eOutput2
Definition: ntv2publicinterface.h:3751
NTV2DeviceIDToString
std::string NTV2DeviceIDToString(const NTV2DeviceID inValue, const bool inForRetailDisplay=false)
Definition: ntv2utils.cpp:4673
eFlushAutoCirculate
@ eFlushAutoCirculate
Definition: ntv2publicinterface.h:4219
kVRegNumDmaDriverBuffers
@ kVRegNumDmaDriverBuffers
Definition: ntv2virtualregisters.h:259
NTV2_WAITFOR_INTERRUPT_STRUCT::success
ULWord success
Definition: ntv2baremetalpublicinterface.h:211
AJA_DebugStat_WaitForInterruptUartTx2
@ AJA_DebugStat_WaitForInterruptUartTx2
Definition: debugshare.h:238
eGetAutoCirc
@ eGetAutoCirc
Definition: ntv2publicinterface.h:4217
kVRegBA2MemorySize
@ kVRegBA2MemorySize
Definition: ntv2virtualregisters.h:261
CNTV2LinuxDriverInterface::DmaWriteWithOffsets
virtual bool DmaWriteWithOffsets(NTV2DMAEngine DMAEngine, ULWord frameNumber, ULWord *pFrameBuffer, ULWord offsetSrc, ULWord offsetDest, ULWord bytes)
Definition: ntv2linuxdriverinterface.cpp:1336
NTV2_DMA_P2P_CONTROL_STRUCT::ulVidNumSegments
ULWord ulVidNumSegments
Definition: ntv2baremetalpublicinterface.h:189
CNTV2LinuxDriverInterface::GetDMADriverBufferPhysicalAddress
virtual bool GetDMADriverBufferPhysicalAddress(ULWord *physAddr)
Definition: ntv2linuxdriverinterface.cpp:1094
AUTOCIRCULATE_FRAME_STAMP_COMBO_STRUCT
Definition: ntv2baremetalpublicinterface.h:231
AUTOCIRCULATE_TRANSFER_STRUCT::audioBuffer
ULWord * audioBuffer
Definition: ntv2publicinterface.h:4548
CNTV2LinuxDriverInterface::DmaTransfer
virtual bool DmaTransfer(const NTV2DMAEngine inDMAEngine, const bool inIsRead, const ULWord inFrameNumber, ULWord *pFrameBuffer, const ULWord inCardOffsetBytes, const ULWord inTotalByteCount, const bool inSynchronous=(!(0)))
Transfers data between the AJA device and the host. This function will block and not return to the ca...
Definition: ntv2linuxdriverinterface.cpp:593
NTV2_HEADER
All new NTV2 structs start with this common header.
Definition: ntv2publicinterface.h:6899
UWord
uint16_t UWord
Definition: ajatypes.h:244
AsFrameStampStructPtr
#define AsFrameStampStructPtr(_p_)
Definition: ntv2linuxdriverinterface.cpp:31
NTV2_DMA_SEGMENT_CONTROL_STRUCT::videoSegmentCardPitch
ULWord videoSegmentCardPitch
Definition: ntv2baremetalpublicinterface.h:178
IOCTL_NTV2_AUTOCIRCULATE_CAPTURETASK
#define IOCTL_NTV2_AUTOCIRCULATE_CAPTURETASK
Definition: ntv2baremetalpublicinterface.h:110
DMAEngine
DMAEngine
Definition: ntv2macpublicinterface.h:103
eInput6
@ eInput6
Definition: ntv2publicinterface.h:3747
ntv2utils.h
Declares numerous NTV2 utility functions.
NTV2_DMA_CONTROL_STRUCT::dmaChannel
NTV2Channel dmaChannel
Definition: ntv2baremetalpublicinterface.h:152
CNTV2LinuxDriverInterface::ConfigureInterrupt
virtual bool ConfigureInterrupt(const bool bEnable, const INTERRUPT_ENUMS eInterruptType)
Definition: ntv2linuxdriverinterface.cpp:200
NTV2_DMA_P2P_CONTROL_STRUCT::ulFrameNumber
ULWord ulFrameNumber
Definition: ntv2baremetalpublicinterface.h:186
CNTV2LinuxDriverInterface::RestoreHardwareProcampRegisters
virtual bool RestoreHardwareProcampRegisters(void)
Definition: ntv2linuxdriverinterface.cpp:182
CNTV2LinuxDriverInterface::WaitForInterrupt
virtual bool WaitForInterrupt(INTERRUPT_ENUMS eInterrupt, ULWord timeOutMs=68)
Definition: ntv2linuxdriverinterface.cpp:284
REGISTER_ACCESS::RegisterMask
ULWord RegisterMask
Definition: ntv2baremetalpublicinterface.h:141
CNTV2LinuxDriverInterface::MapDNXRegisters
virtual bool MapDNXRegisters(void)
Definition: ntv2linuxdriverinterface.cpp:536
NTV2_DMA_P2P_CONTROL_STRUCT::ullMessageBusAddress
ULWord64 ullMessageBusAddress
Definition: ntv2baremetalpublicinterface.h:193
CNTV2LinuxDriverInterface::ReadRegister
virtual bool ReadRegister(const ULWord inRegNum, ULWord &outValue, const ULWord inMask=0xFFFFFFFF, const ULWord inShift=0)
Reads all or part of the 32-bit contents of a specific register (real or virtual) on the AJA device....
Definition: ntv2linuxdriverinterface.cpp:120
eTransferAutoCirculateEx
@ eTransferAutoCirculateEx
Definition: ntv2publicinterface.h:4224
NTV2_DMA_CONTROL_STRUCT::downSample
ULWord downSample
Definition: ntv2baremetalpublicinterface.h:159
NTV2DeviceIsDirectAddressable
bool NTV2DeviceIsDirectAddressable(const NTV2DeviceID inDeviceID)
Definition: ntv2devicefeatures.hpp:7813
eStartAutoCirc
@ eStartAutoCirc
Definition: ntv2publicinterface.h:4214
eSetCaptureTask
@ eSetCaptureTask
Definition: ntv2publicinterface.h:4227
AUTOCIRCULATE_TRANSFER_COMBO_STRUCT::acStatus
AUTOCIRCULATE_TRANSFER_STATUS_STRUCT acStatus
Definition: ntv2baremetalpublicinterface.h:226
CNTV2LinuxDriverInterface::DmaWriteFrameDriverBuffer
virtual bool DmaWriteFrameDriverBuffer(NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame, ULWord bytes, ULWord poll)
Definition: ntv2linuxdriverinterface.cpp:1196
CNTV2LinuxDriverInterface::GetBA2MemorySize
virtual bool GetBA2MemorySize(ULWord *memSize)
Definition: ntv2linuxdriverinterface.cpp:477
hevcMessageHeader
Definition: ntv2publicinterface.h:9761
ntv2linuxpublicinterface.h
Types and defines shared between NTV2 user application interface and Linux device driver.
NTV2_DMA_P2P_CONTROL_STRUCT::ulVideoBusSize
ULWord ulVideoBusSize
Definition: ntv2baremetalpublicinterface.h:194
CNTV2LinuxDriverInterface::CNTV2LinuxDriverInterface
CNTV2LinuxDriverInterface()
Definition: ntv2linuxdriverinterface.cpp:40
AsTransferStatusStruct
#define AsTransferStatusStruct(_p_)
Definition: ntv2linuxdriverinterface.cpp:33
AUTOCIRCULATE_P2P_STRUCT::videoBusAddress
ULWord64 videoBusAddress
Definition: ntv2publicinterface.h:4630
LDIFAIL
#define LDIFAIL(__x__)
Definition: ntv2linuxdriverinterface.cpp:25
NTV2_DMA_SEGMENT_CONTROL_STRUCT::frameBuffer
PULWord frameBuffer
Definition: ntv2baremetalpublicinterface.h:170
NTV2RegInfo
struct NTV2RegInfo NTV2RegInfo
Everything needed to call CNTV2Card::ReadRegister or CNTV2Card::WriteRegister functions.
NTV2_DMA_SEGMENT_CONTROL_STRUCT::videoNumSegments
ULWord videoNumSegments
Definition: ntv2baremetalpublicinterface.h:176
AJA_DebugStat_WaitForInterruptUartRx2
@ AJA_DebugStat_WaitForInterruptUartRx2
Definition: debugshare.h:237
AJA_NULL
#define AJA_NULL
Definition: ajatypes.h:190
CNTV2LinuxDriverInterface::DmaReadFrameDriverBuffer
virtual bool DmaReadFrameDriverBuffer(NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame, ULWord bytes, ULWord downSample, ULWord linePitch, ULWord poll)
Definition: ntv2linuxdriverinterface.cpp:1265
NTV2_CONTROL_DRIVER_DEBUG_MESSAGES_STRUCT
Definition: ntv2baremetalpublicinterface.h:215
IOCTL_NTV2_DMA_WRITE_SEGMENT
#define IOCTL_NTV2_DMA_WRITE_SEGMENT
Definition: ntv2baremetalpublicinterface.h:53
IOCTL_NTV2_DMA_P2P
#define IOCTL_NTV2_DMA_P2P
Definition: ntv2baremetalpublicinterface.h:56
AJAAutoLock
Definition: lock.h:91
IOCTL_NTV2_AUTOCIRCULATE_FRAMESTAMP
#define IOCTL_NTV2_AUTOCIRCULATE_FRAMESTAMP
Definition: ntv2baremetalpublicinterface.h:104
CNTV2LinuxDriverInterface::GetBA4MemorySize
virtual bool GetBA4MemorySize(ULWord *memSize)
Definition: ntv2linuxdriverinterface.cpp:482
AJA_DebugStat_WaitForInterruptIn7
@ AJA_DebugStat_WaitForInterruptIn7
Definition: debugshare.h:232
CNTV2LinuxDriverInterface::_BA2MemorySize
ULWord _BA2MemorySize
Definition: ntv2linuxdriverinterface.h:149
CNTV2LinuxDriverInterface::SetAudioOutputMode
virtual bool SetAudioOutputMode(NTV2_GlobalAudioPlaybackMode mode)
Definition: ntv2linuxdriverinterface.cpp:1174
AJA_DebugStat_WaitForInterruptIn6
@ AJA_DebugStat_WaitForInterruptIn6
Definition: debugshare.h:231
CNTV2LinuxDriverInterface::MapDMADriverBuffer
virtual bool MapDMADriverBuffer()
Definition: ntv2linuxdriverinterface.cpp:1107
AJA_DebugStat_WaitForInterruptUartRx1
@ AJA_DebugStat_WaitForInterruptUartRx1
Definition: debugshare.h:235
DEC
#define DEC(__x__)
Definition: ntv2publicinterface.h:5579
IOCTL_NTV2_INTERRUPT_CONTROL
#define IOCTL_NTV2_INTERRUPT_CONTROL
Definition: ntv2baremetalpublicinterface.h:62
AUTOCIRCULATE_P2P_STRUCT::messageData
ULWord messageData
Definition: ntv2publicinterface.h:4633
eInput1
@ eInput1
Definition: ntv2publicinterface.h:3715
kVRegBA0MemorySize
@ kVRegBA0MemorySize
Definition: ntv2virtualregisters.h:256
CNTV2LinuxDriverInterface::UnmapXena2Flash
virtual bool UnmapXena2Flash(void)
Definition: ntv2linuxdriverinterface.cpp:521
NTV2_INTERRUPT_CONTROL_STRUCT::enable
ULWord enable
Definition: ntv2baremetalpublicinterface.h:202
AUTOCIRCULATE_FRAME_STAMP_COMBO_STRUCT::acFrameStamp
FRAME_STAMP_STRUCT acFrameStamp
Definition: ntv2baremetalpublicinterface.h:233
kVRegDMADriverBufferPhysicalAddress
@ kVRegDMADriverBufferPhysicalAddress
Definition: ntv2virtualregisters.h:260
NTV2_DMA_SEGMENT_CONTROL_STRUCT::poll
ULWord poll
Definition: ntv2baremetalpublicinterface.h:175
AJA_DebugStat_WaitForInterruptOut1
@ AJA_DebugStat_WaitForInterruptOut1
Definition: debugshare.h:234
REGISTER_ACCESS::RegisterShift
ULWord RegisterShift
Definition: ntv2baremetalpublicinterface.h:142
NTV2_DMA_P2P_CONTROL_STRUCT::ulVidNumBytes
ULWord ulVidNumBytes
Definition: ntv2baremetalpublicinterface.h:188
IOCTL_HEVC_MESSAGE
#define IOCTL_HEVC_MESSAGE
Definition: ntv2baremetalpublicinterface.h:251
ULWord64
uint64_t ULWord64
Definition: ajatypes.h:249
NTV2_DMA_P2P_CONTROL_STRUCT::ulMessageData
ULWord ulMessageData
Definition: ntv2baremetalpublicinterface.h:195
AUTOCIRCULATE_TRANSFER_STATUS_STRUCT
Definition: ntv2publicinterface.h:4491
NTV2_DMA_SEGMENT_CONTROL_STRUCT::frameNumber
ULWord frameNumber
Definition: ntv2baremetalpublicinterface.h:169
AUTOCIRCULATE_TRANSFER_COMBO_STRUCT::channelSpec
NTV2Crosspoint channelSpec
Definition: ntv2baremetalpublicinterface.h:224
ePauseAutoCirc
@ ePauseAutoCirc
Definition: ntv2publicinterface.h:4216
CNTV2DriverInterface::_pCh1FrameBaseAddress
ULWord * _pCh1FrameBaseAddress
Definition: ntv2driverinterface.h:693
NTV2_DMA_SEGMENT_CONTROL_STRUCT::engine
NTV2DMAEngine engine
Definition: ntv2baremetalpublicinterface.h:167
eInitAutoCirc
@ eInitAutoCirc
Definition: ntv2publicinterface.h:4213
AUTOCIRCULATE_P2P_STRUCT
Definition: ntv2publicinterface.h:4626
REGISTER_ACCESS
Definition: ntv2baremetalpublicinterface.h:138
HEX8
#define HEX8(__x__)
Definition: ntv2linuxdriverinterface.cpp:21
CNTV2LinuxDriverInterface::UnmapRegisters
virtual bool UnmapRegisters(void)
Definition: ntv2linuxdriverinterface.cpp:455
eStopAutoCirc
@ eStopAutoCirc
Definition: ntv2publicinterface.h:4215
CNTV2LinuxDriverInterface::GetBA0MemorySize
virtual bool GetBA0MemorySize(ULWord *memSize)
Definition: ntv2linuxdriverinterface.cpp:467
NTV2_DMA_CONTROL_STRUCT
Definition: ntv2baremetalpublicinterface.h:149
eOutput4
@ eOutput4
Definition: ntv2publicinterface.h:3753
CNTV2LinuxDriverInterface::HevcSendMessage
virtual bool HevcSendMessage(HevcMessageHeader *pMessage)
Sends an HEVC message to the NTV2 driver.
Definition: ntv2linuxdriverinterface.cpp:1076
eGetFrameStampEx2
@ eGetFrameStampEx2
Definition: ntv2publicinterface.h:4226
AsPTransferStruct
#define AsPTransferStruct(_p_)
Definition: ntv2linuxdriverinterface.cpp:36
CNTV2DriverInterface::GetFrameBufferSize
virtual ULWord GetFrameBufferSize(void) const
Definition: ntv2driverinterface.h:388
IOCTL_NTV2_RESTORE_HARDWARE_PROCAMP_REGISTERS
#define IOCTL_NTV2_RESTORE_HARDWARE_PROCAMP_REGISTERS
Definition: ntv2baremetalpublicinterface.h:81
CNTV2DriverInterface::mRecordRegWrites
bool mRecordRegWrites
True if recording; otherwise false when not recording.
Definition: ntv2driverinterface.h:677
AJA_DebugStat_WriteRegister
@ AJA_DebugStat_WriteRegister
Definition: debugshare.h:225
CNTV2LinuxDriverInterface::WriteRegister
virtual bool WriteRegister(const ULWord inRegNum, const ULWord inValue, const ULWord inMask=0xFFFFFFFF, const ULWord inShift=0)
Updates or replaces all or part of the 32-bit contents of a specific register (real or virtual) on th...
Definition: ntv2linuxdriverinterface.cpp:148
NTV2_INTERRUPT_CONTROL_STRUCT::interruptCount
ULWord interruptCount
Definition: ntv2baremetalpublicinterface.h:203
CNTV2LinuxDriverInterface::_BA4MemorySize
ULWord _BA4MemorySize
Definition: ntv2linuxdriverinterface.h:150
IOCTL_NTV2_DMA_WRITE_FRAME_SEGMENT
#define IOCTL_NTV2_DMA_WRITE_FRAME_SEGMENT
Definition: ntv2baremetalpublicinterface.h:40
AJA_DebugStat_DMATransfer
@ AJA_DebugStat_DMATransfer
Definition: debugshare.h:241
NTV2_DMA_SEGMENT_CONTROL_STRUCT::numBytes
ULWord numBytes
Definition: ntv2baremetalpublicinterface.h:174
AUTOCIRCULATE_TRANSFER_COMBO_STRUCT::acXena2RoutingTable
NTV2RoutingTable acXena2RoutingTable
Definition: ntv2baremetalpublicinterface.h:227
AUTOCIRCULATE_TASK_STRUCT
Definition: ntv2publicinterface.h:4724
CNTV2LinuxDriverInterface::GetDMADriverBufferAddress
virtual bool GetDMADriverBufferAddress(ULWord **pDMADriverBuffer)
Definition: ntv2linuxdriverinterface.cpp:1139
CNTV2LinuxDriverInterface::GetDMANumDriverBuffers
virtual bool GetDMANumDriverBuffers(ULWord *pNumDmaDriverBuffers)
Definition: ntv2linuxdriverinterface.cpp:1099
IOCTL_NTV2_DMA_READ_SEGMENT
#define IOCTL_NTV2_DMA_READ_SEGMENT
Definition: ntv2baremetalpublicinterface.h:50
NTV2_INTERRUPT_CONTROL_STRUCT
Definition: ntv2baremetalpublicinterface.h:199
CNTV2DriverInterface::AutoCirculate
virtual bool AutoCirculate(AUTOCIRCULATE_DATA &pAutoCircData)
Sends an AutoCirculate command to the NTV2 driver.
Definition: ntv2driverinterface.cpp:549
CNTV2LinuxDriverInterface::_hDevice
HANDLE _hDevice
Definition: ntv2linuxdriverinterface.h:144
CNTV2DriverInterface::_pRegisterBaseAddress
ULWord * _pRegisterBaseAddress
Definition: ntv2driverinterface.h:690
kVRegBA4MemorySize
@ kVRegBA4MemorySize
Definition: ntv2virtualregisters.h:258
CNTV2LinuxDriverInterface::_BA0MemorySize
ULWord _BA0MemorySize
Definition: ntv2linuxdriverinterface.h:147
NTV2_WAITFOR_INTERRUPT_STRUCT
Definition: ntv2baremetalpublicinterface.h:207
CNTV2DriverInterface::mRegWritesLock
AJALock mRegWritesLock
Guard mutex for mRegWrites.
Definition: ntv2driverinterface.h:686
eOutput5
@ eOutput5
Definition: ntv2publicinterface.h:3754
eTransferAutoCirculateEx2
@ eTransferAutoCirculateEx2
Definition: ntv2publicinterface.h:4225
CNTV2LinuxDriverInterface::MapFrameBuffers
virtual bool MapFrameBuffers(void)
Definition: ntv2linuxdriverinterface.cpp:346
CNTV2LinuxDriverInterface::_pDMADriverBufferAddress
ULWord * _pDMADriverBufferAddress
Definition: ntv2linuxdriverinterface.h:146
xHEX0N
#define xHEX0N(__x__, __n__)
Definition: ntv2publicinterface.h:5578
CNTV2DriverInterface::BumpEventCount
virtual void BumpEventCount(const INTERRUPT_ENUMS eInterruptType)
Atomically increments the event count tally for the given interrupt type.
Definition: ntv2driverinterface.cpp:1220
AUTOCIRCULATE_TRANSFER_COMBO_STRUCT
Definition: ntv2baremetalpublicinterface.h:222
AUTOCIRCULATE_DATA::pvVal1
void * pvVal1
Definition: ntv2publicinterface.h:4359
IOCTL_NTV2_AUTOCIRCULATE_STATUS
#define IOCTL_NTV2_AUTOCIRCULATE_STATUS
Definition: ntv2baremetalpublicinterface.h:101
AJA_DebugStat_WaitForInterruptIn1
@ AJA_DebugStat_WaitForInterruptIn1
Definition: debugshare.h:226
CNTV2LinuxDriverInterface::OpenLocalPhysical
virtual bool OpenLocalPhysical(const UWord inDeviceIndex)
Opens the local/physical device connection.
Definition: ntv2linuxdriverinterface.cpp:64
AJA_DebugStat_WaitForInterruptIn3
@ AJA_DebugStat_WaitForInterruptIn3
Definition: debugshare.h:228
INVALID_HANDLE_VALUE
#define INVALID_HANDLE_VALUE
Definition: ajatypes.h:318
NTV2_CONTROL_DRIVER_DEBUG_MESSAGES_STRUCT::enable
bool enable
Definition: ntv2baremetalpublicinterface.h:218
AUTOCIRCULATE_DATA::pvVal2
void * pvVal2
Definition: ntv2publicinterface.h:4360
REGISTER_ACCESS::RegisterNumber
ULWord RegisterNumber
Definition: ntv2baremetalpublicinterface.h:139
eInput5
@ eInput5
Definition: ntv2publicinterface.h:3746
CNTV2DriverInterface::NTV2Message
virtual bool NTV2Message(NTV2_HEADER *pInMessage)
Sends a message to the NTV2 driver (the new, improved, preferred way).
Definition: ntv2driverinterface.cpp:573
CNTV2LinuxDriverInterface::GetBA1MemorySize
virtual bool GetBA1MemorySize(ULWord *memSize)
Definition: ntv2linuxdriverinterface.cpp:472
AJA_DebugStat_WaitForInterruptIn4
@ AJA_DebugStat_WaitForInterruptIn4
Definition: debugshare.h:229
CNTV2DriverInterface::_pFrameBaseAddress
ULWord * _pFrameBaseAddress
Definition: ntv2driverinterface.h:689
eVerticalInterrupt
@ eVerticalInterrupt
Definition: ntv2publicinterface.h:3712
CNTV2LinuxDriverInterface::UnmapDMADriverBuffer
virtual bool UnmapDMADriverBuffer()
Definition: ntv2linuxdriverinterface.cpp:1151
eOutput8
@ eOutput8
Definition: ntv2publicinterface.h:3757
AUTOCIRCULATE_FRAME_STAMP_COMBO_STRUCT::acTask
AUTOCIRCULATE_TASK_STRUCT acTask
Definition: ntv2baremetalpublicinterface.h:234
CNTV2DriverInterface::Close
virtual bool Close(void)
Closes me, releasing host resources that may have been allocated in a previous Open call.
Definition: ntv2driverinterface.cpp:196
debug.h
Declares the AJADebug class.
AUTOCIRCULATE_DATA
Definition: ntv2publicinterface.h:4338
eAuxVerticalInterrupt
@ eAuxVerticalInterrupt
Definition: ntv2publicinterface.h:3731
AUTOCIRCULATE_TRANSFER_COMBO_STRUCT::acTransfer
AUTOCIRCULATE_TRANSFER_STRUCT acTransfer
Definition: ntv2baremetalpublicinterface.h:225
AJA_DebugStat_WaitForInterruptIn5
@ AJA_DebugStat_WaitForInterruptIn5
Definition: debugshare.h:230
AUTOCIRCULATE_P2P_STRUCT::p2pSize
ULWord p2pSize
Definition: ntv2publicinterface.h:4628
CNTV2LinuxDriverInterface::SetupBoard
virtual bool SetupBoard(void)
Definition: ntv2linuxdriverinterface.cpp:325
NTV2_DMA_CONTROL_STRUCT::frameOffsetSrc
ULWord frameOffsetSrc
Definition: ntv2baremetalpublicinterface.h:156
IOCTL_NTV2_AUTOCIRCULATE_CONTROL
#define IOCTL_NTV2_AUTOCIRCULATE_CONTROL
Definition: ntv2baremetalpublicinterface.h:98
eOutput3
@ eOutput3
Definition: ntv2publicinterface.h:3752