AJA NTV2 SDK  17.1.1.1245
NTV2 SDK 17.1.1.1245
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  string boardStr;
71  UWord count = 0;
72  for (UWord index = 0; index < NTV2_MAXBOARDS; index++)
73  {
74  ostringstream oss; oss << "/dev/" << kAJANTV2 << DEC(index);
75  boardStr = oss.str();
76  _hDevice = HANDLE(open(boardStr.c_str(), O_RDWR));
78  {
79  if (count == inDeviceIndex)
80  break;
81  count++;
82  close(int(_hDevice));
84  }
85  }
86 
88  {LDIFAIL("Failed to open device index '" << inDeviceIndex << "'"); return false;}
89 
90  _boardNumber = inDeviceIndex;
92  {
93  LDIFAIL ("ReadRegister failed for 'kRegBoardID': ndx=" << inDeviceIndex << " hDev=" << _hDevice << " id=" << HEX8(_boardID));
95  {
96  LDIFAIL ("ReadReg retry failed for 'kRegBoardID': ndx=" << inDeviceIndex << " hDev=" << _hDevice << " id=" << HEX8(_boardID));
97  close(int(_hDevice));
98  return false;
99  }
100  LDIDBG("Retry succeeded: ndx=" << _boardNumber << " hDev=" << _hDevice << " id=" << ::NTV2DeviceIDToString(_boardID));
101  }
102  _boardOpened = true;
103  LDIINFO ("Opened '" << boardStr << "' devID=" << HEX8(_boardID) << " ndx=" << DEC(_boardNumber));
104  return true;
105 }
106 
107 
109 {
110 #if !defined(NTV2_DEPRECATE_16_0)
111  UnmapXena2Flash();
113 #endif // !defined(NTV2_DEPRECATE_16_0)
114 
115  LDIINFO ("Closed deviceID=" << HEX8(_boardID) << " ndx=" << DEC(_boardNumber) << " hDev=" << _hDevice);
117  close(int(_hDevice));
119  _boardOpened = false;
122  return true;
123 }
124 #endif // !defined(NTV2_NULL_DEVICE)
125 
126 
128 // Read and Write Register methods
130 
131 
132 bool CNTV2LinuxDriverInterface::ReadRegister (const ULWord inRegNum, ULWord & outValue, const ULWord inMask, const ULWord inShift)
133 {
134  if (inShift >= 32)
135  {
136  LDIFAIL("Shift " << DEC(inShift) << " > 31, reg=" << DEC(inRegNum) << " msk=" << xHEX0N(inMask,8));
137  return false;
138  }
139 #if defined(NTV2_NUB_CLIENT_SUPPORT)
140  if (IsRemote())
141  return CNTV2DriverInterface::ReadRegister (inRegNum, outValue, inMask, inShift);
142 #endif // defined(NTV2_NUB_CLIENT_SUPPORT)
143  if ((_hDevice == INVALID_HANDLE_VALUE) || (_hDevice == 0))
144  return false;
145 
146  REGISTER_ACCESS ra;
147  ra.RegisterNumber = inRegNum;
148  ra.RegisterMask = inMask;
149  ra.RegisterShift = inShift;
150  ra.RegisterValue = 0xDEADBEEF;
152  const int result (ioctl(int(_hDevice), IOCTL_NTV2_READ_REGISTER, &ra));
154  if (result)
155  {LDIFAIL("IOCTL_NTV2_READ_REGISTER failed"); return false;}
156  outValue = ra.RegisterValue;
157  return true;
158 }
159 
160 
161 bool CNTV2LinuxDriverInterface::WriteRegister (const ULWord inRegNum, const ULWord inValue, const ULWord inMask, const ULWord inShift)
162 {
163  if (inShift >= 32)
164  {
165  LDIFAIL("Shift " << DEC(inShift) << " > 31, reg=" << DEC(inRegNum) << " msk=" << xHEX0N(inMask,8));
166  return false;
167  }
168 #if defined(NTV2_WRITEREG_PROFILING) // Register Write Profiling
169  if (mRecordRegWrites)
170  {
171  AJAAutoLock autoLock(&mRegWritesLock);
172  mRegWrites.push_back(NTV2RegInfo(inRegNum, inValue, inMask, inShift));
173  if (mSkipRegWrites)
174  return true;
175  }
176 #endif // defined(NTV2_WRITEREG_PROFILING) // Register Write Profiling
177 #if defined(NTV2_NUB_CLIENT_SUPPORT)
178  if (IsRemote())
179  return CNTV2DriverInterface::WriteRegister(inRegNum, inValue, inMask, inShift);
180 #endif // defined(NTV2_NUB_CLIENT_SUPPORT)
181  if ((_hDevice == INVALID_HANDLE_VALUE) || (_hDevice == 0))
182  {LDIFAIL("_hDevice is invalid (0 or -1)"); return false;}
183  REGISTER_ACCESS ra;
184  ra.RegisterNumber = inRegNum;
185  ra.RegisterValue = inValue;
186  ra.RegisterMask = inMask;
187  ra.RegisterShift = inShift;
189  const int result (ioctl(int(_hDevice), IOCTL_NTV2_WRITE_REGISTER, &ra));
191  if (result)
192  {LDIFAIL("IOCTL_NTV2_WRITE_REGISTER failed"); return false;}
193  return true;
194 }
195 
197 {
198  if (IsRemote())
199  return false;
202  {LDIFAIL("IOCTL_NTV2_RESTORE_HARDWARE_PROCAMP_REGISTERS failed"); return false;}
203  return true;
204 }
205 
207 // Interrupt enabling / disabling method
209 
210 // Method: ConfigureInterrupt
211 // Input: bool bEnable (turn on/off interrupt), INTERRUPT_ENUMS eInterruptType
212 // Output: bool status
213 // Purpose: Provides a 1 point connection to driver for interrupt calls
214 bool CNTV2LinuxDriverInterface::ConfigureInterrupt (const bool bEnable, const INTERRUPT_ENUMS eInterruptType)
215 {
216  if (IsRemote())
217  return false;
219  NTV2_INTERRUPT_CONTROL_STRUCT intrControlStruct;
220  memset(&intrControlStruct, 0, sizeof(NTV2_INTERRUPT_CONTROL_STRUCT)); // Suppress valgrind error
221  intrControlStruct.eInterruptType = eInterruptType;
222  intrControlStruct.enable = bEnable;
223  if (ioctl(int(_hDevice), IOCTL_NTV2_INTERRUPT_CONTROL, &intrControlStruct))
224  {
225  LDIFAIL("IOCTL_NTV2_INTERRUPT_CONTROL failed");
226  return false;
227  }
228  return true;
229 }
230 
231 // Method: getInterruptCount
232 // Input: INTERRUPT_ENUMS eInterruptType. Currently only output vertical interrupts are supported.
233 // Output: ULWord or equivalent(i.e. ULWord).
235 {
236  if (IsRemote())
237  return false;
239  if ( eInterruptType != eVerticalInterrupt
240  && eInterruptType != eInput1
241  && eInterruptType != eInput2
242  && eInterruptType != eInput3
243  && eInterruptType != eInput4
244  && eInterruptType != eInput5
245  && eInterruptType != eInput6
246  && eInterruptType != eInput7
247  && eInterruptType != eInput8
248  && eInterruptType != eOutput2
249  && eInterruptType != eOutput3
250  && eInterruptType != eOutput4
251  && eInterruptType != eOutput5
252  && eInterruptType != eOutput6
253  && eInterruptType != eOutput7
254  && eInterruptType != eOutput8
255  && eInterruptType != eAuxVerticalInterrupt
256  )
257  {
258  LDIFAIL("Unsupported interrupt count request. Only vertical input interrupts counted.");
259  return false;
260  }
261 
262  NTV2_INTERRUPT_CONTROL_STRUCT intrControlStruct;
263  memset(&intrControlStruct, 0, sizeof(NTV2_INTERRUPT_CONTROL_STRUCT));// Suppress valgrind error
264  intrControlStruct.eInterruptType = eGetIntCount;
265  intrControlStruct.interruptCount = eInterruptType;
266 
268  const int result (ioctl(int(_hDevice), IOCTL_NTV2_INTERRUPT_CONTROL, &intrControlStruct));
270  if (result)
271  {LDIFAIL("IOCTL_NTV2_INTERRUPT_CONTROL failed"); return false;}
272 
273  outCount = intrControlStruct.interruptCount;
274  return true;
275 }
276 
277 static const uint32_t sIntEnumToStatKeys[] = { AJA_DebugStat_WaitForInterruptOut1, // eOutput1 // 0
279  AJA_DebugStat_WaitForInterruptIn1, // eInput1 // 2
280  AJA_DebugStat_WaitForInterruptIn2, // eInput2 // 3
282  AJA_DebugStat_WaitForInterruptUartTx1, // eUart1Tx // 14
283  AJA_DebugStat_WaitForInterruptUartRx1, // eUart1Rx // 15
285  AJA_DebugStat_WaitForInterruptIn3, // eInput3 // 24
286  AJA_DebugStat_WaitForInterruptIn4, // eInput4 // 25
287  AJA_DebugStat_WaitForInterruptUartTx2, // eUartTx2 // 26
288  AJA_DebugStat_WaitForInterruptUartRx2, // eUartRx2 // 27
290  AJA_DebugStat_WaitForInterruptIn5, // eInput5 // 29
291  AJA_DebugStat_WaitForInterruptIn6, // eInput6 // 30
292  AJA_DebugStat_WaitForInterruptIn7, // eInput7 // 31
293  AJA_DebugStat_WaitForInterruptIn8, // eInput8 // 32
295 
296 // Method: WaitForInterrupt
297 // Output: True on successs, false on failure (ioctl failed or interrupt didn't happen)
299 {
300  if (IsRemote())
301  return CNTV2DriverInterface::WaitForInterrupt(eInterrupt, timeOutMs);
302 
304 
305  NTV2_WAITFOR_INTERRUPT_STRUCT waitIntrStruct;
306  waitIntrStruct.eInterruptType = eInterrupt;
307  waitIntrStruct.timeOutMs = timeOutMs;
308  waitIntrStruct.success = 0; // Assume failure
309 
311  const int result (ioctl(int(_hDevice), IOCTL_NTV2_WAITFOR_INTERRUPT, &waitIntrStruct));
313  if (result)
314  {LDIFAIL("IOCTL_NTV2_WAITFOR_INTERRUPT failed"); return false;}
315  BumpEventCount (eInterrupt);
316  return waitIntrStruct.success != 0;
317 }
318 
319 // Method: ControlDriverDebugMessages
320 // Output: True on successs, false on failure (ioctl failed or interrupt didn't happen)
322 {
323  if (IsRemote())
324  return false;
327  cddmStruct.msgSet = msgSet;
328  cddmStruct.enable = enable;
329  if (ioctl(int(_hDevice), IOCTL_NTV2_CONTROL_DRIVER_DEBUG_MESSAGES, &cddmStruct))
330  {
331  LDIFAIL("IOCTL_NTV2_CONTROL_DRIVER_DEBUG_MESSAGES failed");
332  return false;
333  }
334  return cddmStruct.success != 0;
335 }
336 
337 // Method: SetupBoard
338 // Output: True on successs, false on failure (ioctl failed or interrupt didn't happen)
340 {
341  if (IsRemote())
342  return false;
344  if (ioctl(int(_hDevice), IOCTL_NTV2_SETUP_BOARD, 0, 0)) // Suppress valgrind errors
345  {
346  LDIFAIL("IOCTL_NTV2_SETUP_BOARD failed");
347  return false;
348  }
349  return true;
350 }
351 
353 // OEM Mapping to Userspace Methods
355 
356 #if !defined(NTV2_DEPRECATE_16_0)
357  // Method: MapFrameBuffers
358  // Input: None
359  // Output: bool, and sets member _pBaseFrameAddress
361  {
362  if (!IsOpen())
363  return false;
364  if (!_pFrameBaseAddress)
365  {
366  // Get memory window size from driver
367  ULWord BA1MemorySize;
368  if (!GetBA1MemorySize(&BA1MemorySize))
369  {
370  LDIFAIL ("MapFrameBuffers failed - couldn't get BA1MemorySize");
371  return false;
372  }
373 
374  if (BA1MemorySize == 0)
375  {
376  LDIFAIL ("BA1MemorySize is 0 -- module loaded with MapFrameBuffers=0?");
377  LDIFAIL ("PIO mode not available, only driverbuffer DMA.");
378  return false;
379  }
380 
381  // If BA1MemorySize is 0, then the module was loaded with MapFrameBuffers=0
382  // and PIO mode is not available.
383 
384  // Map the memory. For Xena(da) boards, the window will be the same size as the amount of
385  // memory on the Xena card. For Xena(mm) cards, it will be a window which is selected using
386  // SetPCIAccessFrame().
387  //
388  // the offset of 0 in the call to mmap tells mmap to map BAR1 which is the framebuffers.
389  _pFrameBaseAddress = reinterpret_cast<ULWord*>(mmap(AJA_NULL, BA1MemorySize, PROT_READ | PROT_WRITE, MAP_SHARED, int(_hDevice), 0));
390  if (_pFrameBaseAddress == MAP_FAILED)
391  {
393  LDIFAIL ("MapFrameBuffers failed in call to mmap()");
394  return false;
395  }
396 
397  // Set the CH1 and CH2 frame base addresses for cards that require them.
398  ULWord boardIDRegister;
399  ReadRegister(kRegBoardID, boardIDRegister); //unfortunately GetBoardID is in ntv2card...ooops.
400  if ( ! ::NTV2DeviceIsDirectAddressable(NTV2DeviceID(boardIDRegister)))
402  }
403  return true;
404  }
405 
406  // Method: UnmapFrameBuffers
407  // Input: None
408  // Output: bool status
410  {
411  if (!_pFrameBaseAddress)
412  return true;
413  if (!IsOpen())
414  return false;
415 
416  // Get memory window size from driver
417  ULWord BA1MemorySize;
418  if (!GetBA1MemorySize(&BA1MemorySize))
419  {
420  LDIFAIL ("UnmapFrameBuffers failed - couldn't get BA1MemorySize");
421  return false;
422  }
423  if (_pFrameBaseAddress)
424  munmap(_pFrameBaseAddress, BA1MemorySize);
426  return true;
427  }
428 
429  // Method: MapRegisters
430  // Input: None
431  // Output: bool, and sets member _pBaseFrameAddress
433  {
434  if (!IsOpen())
435  return false;
437  {
438  // Get register window size from driver
440  {
441  LDIFAIL ("MapRegisters failed - couldn't get BA0MemorySize");
443  return false;
444  }
445 
446  if (!_BA0MemorySize)
447  {
448  LDIFAIL ("BA0MemorySize is 0, registers not mapped.");
450  return false;
451  }
452 
453  // the offset of 0x1000 in the call to mmap tells mmap to map BAR0 which is the registers.
454  // 2.4 kernel interprets offset as number of pages, so 0x1000 works. This won't work on a 2.2
455  // kernel
456  _pRegisterBaseAddress = reinterpret_cast<ULWord*>(mmap(AJA_NULL,_BA0MemorySize,PROT_READ | PROT_WRITE,MAP_SHARED,_hDevice,0x1000));
457  if (_pRegisterBaseAddress == MAP_FAILED)
458  {
460  return false;
461  }
462  }
463  return true;
464  }
465 
466  // Method: UnmapRegisters
467  // Input: None
468  // Output: bool status
470  {
471  if (!IsOpen())
472  return false;
474  return true;
478  return true;
479  }
480 
482  {
483  return memSize ? ReadRegister (kVRegBA0MemorySize, *memSize) : false;
484  }
485 
487  {
488  return memSize ? ReadRegister (kVRegBA1MemorySize, *memSize) : false;
489  }
490 
492  {
493  return memSize ? ReadRegister (kVRegBA2MemorySize, *memSize) : false;
494  }
495 
497  {
498  return memSize ? ReadRegister (kVRegBA4MemorySize, *memSize) : false;
499  }
500 
502  {
503  if (!IsOpen())
504  return false;
505  ULWord BA4MemorySize;
507  {
508  if ( !GetBA4MemorySize(&BA4MemorySize) )
509  {
510  LDIFAIL ("MapXena2Flash failed - couldn't get BA4MemorySize");
512  return false;
513  }
514  if (!BA4MemorySize)
515  {
516  LDIFAIL ("MapXena2Flash failed - BA4MemorySize == 0");
518  return false;
519  }
520  _BA4MemorySize = BA4MemorySize;
521  // 0x4000 is a page offset magic token passed into the driver mmap callback that ends up mapping the right stuff
522  _pXena2FlashBaseAddress = reinterpret_cast<ULWord*>(mmap(AJA_NULL, BA4MemorySize,
523  PROT_READ | PROT_WRITE, MAP_SHARED,
524  int(_hDevice), 0x4000));
525  if (_pXena2FlashBaseAddress == MAP_FAILED)
526  {
528  LDIFAIL ("MapXena2Flash(): mmap of BAR4 for PCI Flash failed");
529  return false;
530  }
531  }
532  return true;
533  }
534 
536  {
538  return true;
539  if (!IsOpen())
540  return false;
542  {
544  _BA4MemorySize = 0;
545  }
547  return false;
548  }
549 
551  {
552  ULWord BA2MemorySize;
553  if (!IsOpen())
554  return false;
556  {
557  if (!GetBA2MemorySize(&BA2MemorySize))
558  {
559  LDIFAIL ("MapDNXRegisters failed - couldn't get BA2MemorySize");
560  return false;
561  }
562  if (!BA2MemorySize)
563  {
564  LDIFAIL ("MapDNXRegisters failed - BA2MemorySize == 0");
565  return false;
566  }
567  _BA2MemorySize = BA2MemorySize;
568 
569  // 0x8000 is a page offset magic token passed into the driver mmap callback
570  // that ends up mapping the right stuff
571  _pDNXRegisterBaseAddress = reinterpret_cast<ULWord*>(mmap (AJA_NULL, BA2MemorySize,
572  PROT_READ | PROT_WRITE, MAP_SHARED,
573  int(_hDevice), 0x8000));
574  if (_pDNXRegisterBaseAddress == MAP_FAILED)
575  {
577  _BA2MemorySize = 0;
578  LDIFAIL ("MapDNXRegisters failed - couldn't map BAR2");
579  return false;
580  }
581  }
582  return true;
583  }
584 
586  {
588  return true;
589  if (!IsOpen())
590  return false;
592  {
594  _BA2MemorySize = 0;
595  }
597  return false;
598  }
599 #endif // !defined(NTV2_DEPRECATE_16_0)
600 
601 
603 // DMA
604 //
605 // Note: Asynchronous DMA only available with driver-allocated buffers.
606 
608  const bool inIsRead,
609  const ULWord inFrameNumber,
610  ULWord * pFrameBuffer,
611  const ULWord inOffsetBytes,
612  const ULWord inByteCount,
613  const bool inSynchronous)
614 {
615  if (!IsOpen())
616  return false;
617  if (IsRemote())
618  {
619  NTV2Buffer buffer(pFrameBuffer, inByteCount);
620  return _pRPCAPI->NTV2DMATransferRemote (inDMAEngine, inIsRead, inFrameNumber,
621  buffer, inOffsetBytes, 0/*numSegs*/,
622  0/*hostPitch*/, 0/*cardPitch*/,
623  inSynchronous);
624  }
625  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
626  dmaControlBuf.engine = inDMAEngine;
627  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
628  dmaControlBuf.frameNumber = inFrameNumber;
629  dmaControlBuf.frameBuffer = pFrameBuffer;
630  dmaControlBuf.frameOffsetSrc = inIsRead ? inOffsetBytes : 0;
631  dmaControlBuf.frameOffsetDest = inIsRead ? 0 : inOffsetBytes;
632  dmaControlBuf.numBytes = inByteCount;
633 
634  // The following are used only for driver-created buffers.
635  // Set them to known values.
636  dmaControlBuf.downSample = 0; // Not applicable to this mode
637  dmaControlBuf.linePitch = 1; // Not applicable to this mode
638  dmaControlBuf.poll = 0;
639 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
640  ULWord numDmaDriverBuffers;
641  GetDMANumDriverBuffers(&numDmaDriverBuffers);
642  if (ULWord64(pFrameBuffer) >= ULWord64(numDmaDriverBuffers))
643  {
644  // Can't poll with usermode allocated buffer
645  if (!inSynchronous)
646  return false;
647  dmaControlBuf.poll = 0;
648  }
649 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
650 
651  int request;
652  const char *errMsg(AJA_NULL);
653 #define ERRMSG(s) #s " failed"
654 
655  // Usermode buffer stuff
656  if (inIsRead) // Reading?
657  {
658  if (inOffsetBytes == 0) // Frame ( or field 0? )
659  {
660  request = IOCTL_NTV2_DMA_READ_FRAME;
662  }
663  else // Field 1
664  {
665  request = IOCTL_NTV2_DMA_READ;
666  errMsg = ERRMSG(IOCTL_NTV2_DMA_READ);
667  }
668  }
669  else // Writing
670  {
671  if (inOffsetBytes == 0) // Frame ( or field 0? )
672  {
673  request = IOCTL_NTV2_DMA_WRITE_FRAME;
675  }
676  else // Field 1
677  {
678  request = IOCTL_NTV2_DMA_WRITE;
679  errMsg = ERRMSG(IOCTL_NTV2_DMA_WRITE);
680  }
681  }
682 
683  // TODO: Stick the IOCTL code inside the dmaControlBuf and collapse 4 IOCTLs into one.
685  const int result (ioctl(int(_hDevice), request, &dmaControlBuf));
687  if (result)
688  {
689  LDIFAIL(errMsg << " FRM=" << inFrameNumber << " ENG=" << inDMAEngine << " CNT=" << inByteCount);
690  return false;
691  }
692  return true;
693 }
694 
696  const bool inIsRead,
697  const ULWord inFrameNumber,
698  ULWord * pFrameBuffer,
699  const ULWord inOffsetBytes,
700  const ULWord inByteCount,
701  const ULWord inNumSegments,
702  const ULWord inHostPitch,
703  const ULWord inCardPitch,
704  const bool inIsSynchronous)
705 {
706  if (!IsOpen())
707  return false;
708  if (IsRemote())
709  {
710  NTV2Buffer buffer(pFrameBuffer, inByteCount);
711  return _pRPCAPI->NTV2DMATransferRemote (inDMAEngine, inIsRead, inFrameNumber, buffer, inOffsetBytes,
712  inNumSegments, inHostPitch, inCardPitch, inIsSynchronous);
713  }
714  LDIDBG("FRM=" << inFrameNumber << " ENG=" << inDMAEngine << " NB=" << inByteCount << (inIsRead?" Rd":" Wr"));
715 
716  // NOTE: Linux driver assumes driver buffers to be used if pFrameBuffer < numDmaDriverBuffers
717  NTV2_DMA_SEGMENT_CONTROL_STRUCT dmaControlBuf;
718  dmaControlBuf.engine = inDMAEngine;
719  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
720  dmaControlBuf.frameNumber = inFrameNumber;
721  dmaControlBuf.frameBuffer = pFrameBuffer;
722  dmaControlBuf.frameOffsetSrc = inIsRead ? inOffsetBytes : 0;
723  dmaControlBuf.frameOffsetDest = inIsRead ? 0 : inOffsetBytes;
724  dmaControlBuf.numBytes = inByteCount;
725  dmaControlBuf.videoNumSegments = inNumSegments;
726  dmaControlBuf.videoSegmentHostPitch = inHostPitch;
727  dmaControlBuf.videoSegmentCardPitch = inCardPitch;
728  dmaControlBuf.poll = 0;
729 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
730  ULWord numDmaDriverBuffers(0);
731  GetDMANumDriverBuffers(&numDmaDriverBuffers);
732  if (ULWord(ULWord64(pFrameBuffer)) >= numDmaDriverBuffers)
733  {
734  if (!inIsSynchronous)
735  return false; // Async mode requires kernel-allocated buffer
736  }
737 #else
738  NTV2_UNUSED(inIsSynchronous);
739 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
740 
741  int request(0);
742  const char *errMsg(AJA_NULL);
743 #define ERRMSG(s) #s " failed"
744 
745  // Usermode buffer stuff
746  // TODO: Stick the IOCTL code inside the dmaControlBuf and collapse 4 IOCTLs into one.
747  if (inIsRead) // Reading?
748  {
749  if (!inOffsetBytes) // Frame ( or field 0? )
750  {
753  }
754  else // Field 1
755  {
756  request = IOCTL_NTV2_DMA_READ_SEGMENT;
758  }
759  }
760  else // Writing
761  {
762  if (!inOffsetBytes) // Frame ( or field 0? )
763  {
766  }
767  else // Field 1
768  {
771  }
772  }
773 
775  const int result (ioctl(int(_hDevice), request, &dmaControlBuf));
777  if (result)
778  {
779  LDIFAIL(errMsg << " FRM=" << inFrameNumber << " ENG=" << inDMAEngine << " CNT=" << inByteCount);
780  return false;
781  }
782  return true;
783 }
784 
785 
787  const NTV2Channel inDMAChannel,
788  const bool inIsTarget,
789  const ULWord inFrameNumber,
790  const ULWord inCardOffsetBytes,
791  const ULWord inByteCount,
792  const ULWord inNumSegments,
793  const ULWord inSegmentHostPitch,
794  const ULWord inSegmentCardPitch,
795  const PCHANNEL_P2P_STRUCT & inP2PData)
796 {
797  if (!IsOpen())
798  return false;
799  if (IsRemote())
800  return CNTV2DriverInterface::DmaTransfer (inDMAEngine, inDMAChannel, inIsTarget, inFrameNumber, inCardOffsetBytes, inByteCount,
801  inNumSegments, inSegmentHostPitch, inSegmentCardPitch, inP2PData);
802  if (!inP2PData)
803  {
804  LDIFAIL( "P2PData is NULL" );
805  return false;
806  }
807 
808  // Information to be sent to the driver
809  NTV2_DMA_P2P_CONTROL_STRUCT dmaP2PStruct;
810  ::memset (AsVoidPtr(&dmaP2PStruct), 0, sizeof(dmaP2PStruct));
811  if (inIsTarget)
812  {
813  // reset info to be passed back to the user
814  ::memset (AsVoidPtr(inP2PData), 0, sizeof(CHANNEL_P2P_STRUCT));
815  inP2PData->p2pSize = sizeof(CHANNEL_P2P_STRUCT);
816  }
817  else
818  {
819  // check for valid p2p struct
820  if (inP2PData->p2pSize != sizeof(CHANNEL_P2P_STRUCT))
821  {
822  LDIFAIL("p2pSize=" << DEC(inP2PData->p2pSize) << " != sizeof(CHANNEL_P2P_STRUCT) " << DEC(sizeof(CHANNEL_P2P_STRUCT)));
823  return false;
824  }
825  }
826 
827  dmaP2PStruct.bRead = inIsTarget;
828  dmaP2PStruct.dmaEngine = inDMAEngine;
829  dmaP2PStruct.dmaChannel = inDMAChannel;
830  dmaP2PStruct.ulFrameNumber = inFrameNumber;
831  dmaP2PStruct.ulFrameOffset = inCardOffsetBytes;
832  dmaP2PStruct.ulVidNumBytes = inByteCount;
833  dmaP2PStruct.ulVidNumSegments = inNumSegments;
834  dmaP2PStruct.ulVidSegmentHostPitch = inSegmentHostPitch;
835  dmaP2PStruct.ulVidSegmentCardPitch = inSegmentCardPitch;
836  dmaP2PStruct.ullVideoBusAddress = inP2PData->videoBusAddress;
837  dmaP2PStruct.ullMessageBusAddress = inP2PData->messageBusAddress;
838  dmaP2PStruct.ulVideoBusSize = inP2PData->videoBusSize;
839  dmaP2PStruct.ulMessageData = inP2PData->messageData;
841  const int result (ioctl(int(_hDevice), IOCTL_NTV2_DMA_P2P, &dmaP2PStruct));
843  if (result)
844  {LDIFAIL("IOCTL error"); return false;}
845 
846  // fill in p2p data
847  inP2PData->videoBusAddress = dmaP2PStruct.ullVideoBusAddress;
848  inP2PData->messageBusAddress = dmaP2PStruct.ullMessageBusAddress;
849  inP2PData->videoBusSize = dmaP2PStruct.ulVideoBusSize;
850  inP2PData->messageData = dmaP2PStruct.ulMessageData;
851  return true;
852 }
853 
855 // AutoCirculate
857 {
858  if (IsRemote())
859  return CNTV2DriverInterface::AutoCirculate(autoCircData);
860  if (!IsOpen())
861  return false;
862 
863  int result(1);
864  switch (autoCircData.eCommand)
865  {
866  case eInitAutoCirc:
867  case eStartAutoCirc:
868  case eStopAutoCirc:
869  case eAbortAutoCirc:
870  case ePauseAutoCirc:
871  case eFlushAutoCirculate:
873  // Pass the autoCircData structure to the driver.
874  // The driver knows the implicit meanings of the
875  // members of the structure based on the the
876  // command contained within it.
878  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_CONTROL, &autoCircData);
880  if (result)
881  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_CONTROL failed"); return false;}
882  return true;
883 
884  case eGetAutoCirc:
885  // Pass the autoCircStatus structure to the driver.
886  // It will read the channel spec contained within and
887  // fill out the status structure accordingly.
889  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_STATUS, AsStatusStructPtr(autoCircData.pvVal1));
891  if (result)
892  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_STATUS, failed"); return false;}
893  return true;
894 
895  case eGetFrameStamp:
896  {
897  // Pass the frameStamp structure to the driver.
898  // It will read the channel spec and frame number
899  // contained within and fill out the status structure
900  // accordingly.
901  AUTOCIRCULATE_FRAME_STAMP_COMBO_STRUCT acFrameStampCombo;
902  memset(&acFrameStampCombo, 0, sizeof acFrameStampCombo);
903  FRAME_STAMP_STRUCT* pFrameStamp = AsFrameStampStructPtr(autoCircData.pvVal1);
904  acFrameStampCombo.acFrameStamp = *pFrameStamp;
906  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_FRAMESTAMP, &acFrameStampCombo);
908  if (result)
909  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_FRAMESTAMP failed"); return false;}
910  *pFrameStamp = acFrameStampCombo.acFrameStamp;
911  return true;
912  }
913 
914  case eGetFrameStampEx2:
915  {
916  // Pass the frameStamp structure to the driver.
917  // It will read the channel spec and frame number
918  // contained within and fill out the status structure
919  // accordingly.
920  AUTOCIRCULATE_FRAME_STAMP_COMBO_STRUCT acFrameStampCombo;
921  memset(&acFrameStampCombo, 0, sizeof acFrameStampCombo);
922  FRAME_STAMP_STRUCT* pFrameStamp = AsFrameStampStructPtr(autoCircData.pvVal1);
923  PAUTOCIRCULATE_TASK_STRUCT pTask = AsPTaskStruct(autoCircData.pvVal2);
924  acFrameStampCombo.acFrameStamp = *pFrameStamp;
925  if (pTask)
926  acFrameStampCombo.acTask = *pTask;
928  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_FRAMESTAMP, &acFrameStampCombo);
930  if (result)
931  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_FRAMESTAMP failed"); return false;}
932  *pFrameStamp = acFrameStampCombo.acFrameStamp;
933  if (pTask)
934  *pTask = acFrameStampCombo.acTask;
935  return true;
936  }
937 
939  {
940  PAUTOCIRCULATE_TRANSFER_STRUCT acTransfer = AsPTransferStruct(autoCircData.pvVal1);
941  // If doing audio, insure buffer alignment is OK
942  if (acTransfer->audioBufferSize)
943  {
944  if (acTransfer->audioBufferSize % 4)
945  {LDIFAIL ("TransferAutoCirculate failed - audio buffer size not mod 4"); return false;}
946 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
947  ULWord numDmaDriverBuffers;
948  GetDMANumDriverBuffers(&numDmaDriverBuffers);
949  if (ULWord64(acTransfer->audioBuffer) >= ULWord64(numDmaDriverBuffers) && ULWord64(acTransfer->audioBuffer) % 4)
950  {LDIFAIL ("TransferAutoCirculate failed - audio buffer address not mod 4"); return false;}
951 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
952  }
953 
954  // Can't pass multiple pointers in a single ioctl, so combine
955  // them into a single structure and include channel spec too.
957  memset((void*)&acXferCombo, 0, sizeof acXferCombo);
959  NTV2RoutingTable *pXena2RoutingTable = AsRoutingTablePtr(autoCircData.pvVal3);
960  acXferCombo.channelSpec = autoCircData.channelSpec;
961  acXferCombo.acTransfer = *acTransfer;
962  acXferCombo.acStatus = *acStatus;
963  if (!pXena2RoutingTable)
964  memset(&acXferCombo.acXena2RoutingTable, 0, sizeof(acXferCombo.acXena2RoutingTable));
965  else
966  acXferCombo.acXena2RoutingTable = *pXena2RoutingTable;
967 
968  // Do the transfer
970  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_TRANSFER, &acXferCombo);
972  if (result)
973  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_TRANSFER failed"); return false;}
974  // Copy the results back into the status buffer we were given
975  *acStatus = acXferCombo.acStatus;
976  return true;
977  }
978 
980  {
981  PAUTOCIRCULATE_TRANSFER_STRUCT acTransfer = AsPTransferStruct(autoCircData.pvVal1);
982  // If doing audio, insure buffer alignment is OK
983  if (acTransfer->audioBufferSize)
984  {
985  if (acTransfer->audioBufferSize % 4)
986  {LDIFAIL ("TransferAutoCirculate failed - audio buffer size not mod 4"); return false;}
987 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
988  ULWord numDmaDriverBuffers;
989  GetDMANumDriverBuffers(&numDmaDriverBuffers);
990  if ((unsigned long)acTransfer->audioBuffer >= numDmaDriverBuffers && (unsigned long)acTransfer->audioBuffer % 4)
991  {LDIFAIL ("TransferAutoCirculate failed - audio buffer address not mod 4"); return false;}
992 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
993  }
994 
995  // Can't pass multiple pointers in a single ioctl, so combine
996  // them into a single structure and include channel spec too.
998  memset((void*)&acXferCombo, 0, sizeof acXferCombo);
1000  NTV2RoutingTable *pXena2RoutingTable = AsRoutingTablePtr(autoCircData.pvVal3);
1001  acXferCombo.channelSpec = autoCircData.channelSpec;
1002  acXferCombo.acTransfer = *acTransfer;
1003  acXferCombo.acStatus = *acStatus;
1004  if (!pXena2RoutingTable)
1005  memset(&acXferCombo.acXena2RoutingTable, 0, sizeof(acXferCombo.acXena2RoutingTable));
1006  else
1007  acXferCombo.acXena2RoutingTable = *pXena2RoutingTable;
1008 
1009  // Do the transfer
1011  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_TRANSFER, &acXferCombo);
1013  if (result)
1014  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_TRANSFER failed"); return false;}
1015  // Copy the results back into the status buffer we were given
1016  *acStatus = acXferCombo.acStatus;
1017  return true;
1018  }
1019 
1021  {
1022  PAUTOCIRCULATE_TRANSFER_STRUCT acTransfer = AsPTransferStruct(autoCircData.pvVal1);
1023  // If doing audio, insure buffer alignment is OK
1024  if (acTransfer->audioBufferSize)
1025  {
1026  if (acTransfer->audioBufferSize % 4)
1027  {LDIFAIL ("TransferAutoCirculate failed - audio buffer size not mod 4"); return false;}
1028 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
1029  ULWord numDmaDriverBuffers;
1030  GetDMANumDriverBuffers(&numDmaDriverBuffers);
1031  if (ULWord64(acTransfer->audioBuffer) >= ULWord64(numDmaDriverBuffers) && ULWord(acTransfer->audioBuffer) % 4)
1032  {LDIFAIL ("TransferAutoCirculate failed - audio buffer address not mod 4"); return false;}
1033 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
1034  }
1035 
1036  // Can't pass multiple pointers in a single ioctl, so combine
1037  // them into a single structure and include channel spec too.
1039  ::memset(AsVoidPtr(&acXferCombo), 0, sizeof(acXferCombo));
1041  NTV2RoutingTable * pXena2RoutingTable = AsRoutingTablePtr(autoCircData.pvVal3);
1042  PAUTOCIRCULATE_TASK_STRUCT pTask = AsPTaskStruct(autoCircData.pvVal4);
1043  acXferCombo.channelSpec = autoCircData.channelSpec;
1044  acXferCombo.acTransfer = *acTransfer;
1045  acXferCombo.acStatus = *acStatus;
1046  if (pXena2RoutingTable)
1047  acXferCombo.acXena2RoutingTable = *pXena2RoutingTable;
1048  if (pTask)
1049  acXferCombo.acTask = *pTask;
1050 
1051  // Do the transfer
1053  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_TRANSFER, &acXferCombo);
1055  if (result)
1056  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_TRANSFER failed"); return false;}
1057  // Copy the results back into the status buffer we were given
1058  *acStatus = acXferCombo.acStatus;
1059  return true;
1060  }
1061 
1062  case eSetCaptureTask:
1063  {
1064  AUTOCIRCULATE_FRAME_STAMP_COMBO_STRUCT acFrameStampCombo;
1065  memset(&acFrameStampCombo, 0, sizeof acFrameStampCombo);
1066  PAUTOCIRCULATE_TASK_STRUCT pTask = AsPTaskStruct(autoCircData.pvVal1);
1067  acFrameStampCombo.acFrameStamp.channelSpec = autoCircData.channelSpec;
1068  acFrameStampCombo.acTask = *pTask;
1070  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_CAPTURETASK, &acFrameStampCombo);
1072  if (result)
1073  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_CAPTURETASK failed"); return false;}
1074  return true;
1075  }
1076 
1077  default:
1078  LDIFAIL("Unsupported AC command type in AutoCirculate()");
1079  break;
1080  } // switch
1081  return false;
1082 }
1083 
1084 
1086 {
1087  if (!pInMessage)
1088  return false; // NULL message pointer
1089 
1090  if (IsRemote())
1091  return CNTV2DriverInterface::NTV2Message(pInMessage); // Implement NTV2Message on nub
1092 
1095  const int result (ioctl(int(_hDevice), IOCTL_AJANTV2_MESSAGE, pInMessage));
1097  if (result)
1098  {LDIFAIL("IOCTL_AJANTV2_MESSAGE failed"); return false;}
1099  return true;
1100 }
1101 
1103 {
1104  if (!pMessage)
1105  return false; // NULL message pointer
1107  return false;
1108  if (_hDevice == 0)
1109  return false;
1111  const int result = ioctl(int(_hDevice), IOCTL_HEVC_MESSAGE, pMessage);
1113  if (result)
1114  {LDIFAIL("IOCTL_AJANTV2_MESSAGE failed"); return false;}
1115  return true;
1116 }
1117 
1118 
1119 #if !defined(NTV2_DEPRECATE_16_0)
1121  {
1122  return physAddr ? ReadRegister (kVRegDMADriverBufferPhysicalAddress, *physAddr) : false;
1123  }
1124 
1126  {
1127  return pNumDmaDriverBuffers ? ReadRegister (kVRegNumDmaDriverBuffers, *pNumDmaDriverBuffers) : false;
1128  }
1129 
1130  // Method: MapDMADriverBuffer(Maps 8 Frames worth of memory from kernel space to user space.
1131  // Input:
1132  // Output:
1134  {
1136  {
1137  ULWord numDmaDriverBuffers;
1138  if (!GetDMANumDriverBuffers(&numDmaDriverBuffers))
1139  {
1140  LDIFAIL("GetDMANumDriverBuffers() failed");
1141  return false;
1142  }
1143 
1144  if (!numDmaDriverBuffers)
1145  {
1146  LDIFAIL("numDmaDriverBuffers == 0");
1147  return false;
1148  }
1149 
1150  // the offset of 0x2000 in the call to mmap tells mmap to map the DMA Buffer into user space
1151  // 2.4 kernel interprets offset as number of pages, so 0x2000 works. This won't work on a 2.2
1152  // kernel
1153  _pDMADriverBufferAddress = reinterpret_cast<ULWord*>(mmap (AJA_NULL, GetFrameBufferSize() * numDmaDriverBuffers,
1154  PROT_READ | PROT_WRITE,MAP_SHARED,
1155  _hDevice, 0x2000));
1156  if (_pDMADriverBufferAddress == MAP_FAILED)
1157  {
1159  return false;
1160  }
1161  }
1162  return true;
1163  }
1164 
1166  {
1168  if (!MapDMADriverBuffer())
1169  return false;
1170  *pDMADriverBufferAddress = _pDMADriverBufferAddress;
1171  return true;
1172  }
1173 
1174  // Method: UnmapDMADriverBuffer
1175  // Input: NONE
1176  // Output: NONE
1178  {
1180  {
1181  ULWord numDmaDriverBuffers;
1182  if (!GetDMANumDriverBuffers(&numDmaDriverBuffers))
1183  {
1184  LDIFAIL("GetDMANumDriverBuffers() failed");
1185  return false;
1186  }
1187  if (!numDmaDriverBuffers)
1188  {
1189 
1190  LDIFAIL("numDmaDriverBuffers == 0");
1191  return false;
1192  }
1193  munmap(_pDMADriverBufferAddress, GetFrameBufferSize() * numDmaDriverBuffers);
1194  }
1196  return true;
1197  }
1198 #endif // !defined(NTV2_DEPRECATE_16_0)
1199 
1201 {
1203 }
1204 
1206 {
1208 }
1209 
1210 #if !defined(NTV2_DEPRECATE_16_0)
1211  // Method: DmaBufferWriteFrameDriverBuffer
1212  // NTV2DMAEngine - DMAEngine
1213  // ULWord frameNumber(0 .. NUM_FRAMEBUFFERS-1)
1214  // ULWord dmaBufferFrame(0 .. numDmaDriverBuffers-1)
1215  // ULWord bytes - number of bytes to dma
1216  // ULWord poll - 0=block 1=return immediately and poll
1217  // via register 48
1218  // When the board is opened the driver allocates
1219  // a user-definable number of frames for dmaing
1220  // This allows dma's to be done without scatter/gather
1221  // which should help performance.
1222  bool CNTV2LinuxDriverInterface::DmaWriteFrameDriverBuffer (NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame, ULWord bytes, ULWord poll)
1223  {
1224  if (IsRemote())
1225  return false;
1226  if (!IsOpen())
1227  return false;
1228 
1229  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
1230  dmaControlBuf.engine = DMAEngine;
1231  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
1232  dmaControlBuf.frameNumber = frameNumber;
1233  dmaControlBuf.frameBuffer = PULWord(dmaBufferFrame);
1234  dmaControlBuf.frameOffsetSrc = 0;
1235  dmaControlBuf.frameOffsetDest = 0;
1236  dmaControlBuf.numBytes = bytes;
1237  dmaControlBuf.downSample = 0;
1238  dmaControlBuf.linePitch = 0;
1239  dmaControlBuf.poll = poll;
1240  if (ioctl(int(_hDevice), IOCTL_NTV2_DMA_WRITE_FRAME, &dmaControlBuf))
1241  {LDIFAIL("IOCTL_NTV2_DMA_WRITE_FRAME failed"); return false;}
1242  return true;
1243  }
1244 
1245  // Method: DmaBufferWriteFrameDriverBuffer
1246  // NTV2DMAEngine - DMAEngine
1247  // ULWord frameNumber(0-NUM_FRAMEBUFFERS-1)
1248  // ULWord dmaBufferFrame(0 .. numDmaDriverBuffers-1)
1249  // ULWord bytes - number of bytes to dma
1250  // ULWord poll - 0=block 1=return immediately and poll
1251  // via register 48
1252  // When the board is opened the driver allocates
1253  // a user-definable number of frames for dmaing
1254  // This allows dma's to be done without scatter/gather
1255  // which should help performance.
1256  bool CNTV2LinuxDriverInterface::DmaWriteFrameDriverBuffer (NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame, ULWord offsetSrc, ULWord offsetDest, ULWord bytes, ULWord poll)
1257  {
1258  if (IsRemote())
1259  return false;
1260  if (!IsOpen())
1261  return false;
1262 
1263  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
1264  dmaControlBuf.engine = DMAEngine;
1265  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
1266  dmaControlBuf.frameNumber = frameNumber;
1267  dmaControlBuf.frameBuffer = PULWord(dmaBufferFrame);
1268  dmaControlBuf.frameOffsetSrc = offsetSrc;
1269  dmaControlBuf.frameOffsetDest = offsetDest;
1270  dmaControlBuf.numBytes = bytes;
1271  dmaControlBuf.downSample = 0;
1272  dmaControlBuf.linePitch = 0;
1273  dmaControlBuf.poll = poll;
1274  if (ioctl(int(_hDevice), IOCTL_NTV2_DMA_WRITE_FRAME, &dmaControlBuf))
1275  {LDIFAIL("IOCTL_NTV2_DMA_WRITE_FRAME failed"); return false;}
1276  return true;
1277  }
1278 
1279 
1280  // Method: DmaBufferReadFrameDriverBuffer
1281  // NTV2DMAEngine - DMAEngine
1282  // ULWord frameNumber(0-NUM_FRAMEBUFFERS-1)
1283  // ULWord dmaBufferFrame(0 .. numDmaDriverBuffers-1)
1284  // ULWord bytes - number of bytes to dma
1285  // ULWord poll - 0=block 1=return immediately and poll
1286  // via register 48
1287  // When the board is opened the driver allocates
1288  // a user-definable number of frames for dmaing
1289  // This allows dma's to be done without scatter/gather
1290  // which should help performance.
1291  bool CNTV2LinuxDriverInterface::DmaReadFrameDriverBuffer (NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame, ULWord bytes, ULWord downSample, ULWord linePitch, ULWord poll)
1292  {
1293  if (IsRemote())
1294  return false;
1295  if (!IsOpen())
1296  return false;
1297 
1298  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
1299  dmaControlBuf.engine = DMAEngine;
1300  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
1301  dmaControlBuf.frameNumber = frameNumber;
1302  dmaControlBuf.frameBuffer = PULWord(dmaBufferFrame);
1303  dmaControlBuf.frameOffsetSrc = 0;
1304  dmaControlBuf.frameOffsetDest = 0;
1305  dmaControlBuf.numBytes = bytes;
1306  dmaControlBuf.downSample = downSample;
1307  dmaControlBuf.linePitch = linePitch == 0 ? 1 : linePitch;
1308  dmaControlBuf.poll = poll;
1309 
1310  static bool bPrintedDownsampleDeprecatedMsg = false;
1311  if (downSample && !bPrintedDownsampleDeprecatedMsg)
1312  {LDIWARN("downSample is deprecated"); bPrintedDownsampleDeprecatedMsg = true;}
1313 
1314  if (ioctl(int(_hDevice), IOCTL_NTV2_DMA_READ_FRAME, &dmaControlBuf))
1315  {LDIFAIL("IOCTL_NTV2_DMA_READ_FRAME failed"); return false;}
1316  return true;
1317  }
1318 
1319  // Method: DmaBufferReadFrameDriverBuffer
1320  // NTV2DMAEngine - DMAEngine
1321  // ULWord frameNumber(0-NUM_FRAMEBUFFERS-1)
1322  // ULWord dmaBufferFrame(0 .. numDmaDriverBuffers-1)
1323  // ULWord bytes - number of bytes to dma
1324  // ULWord poll - 0=block 1=return immediately and poll
1325  // via register 48
1326  // When the board is opened the driver allocates
1327  // a user-definable number of frames for dmaing
1328  // This allows dma's to be done without scatter/gather
1329  // which should help performance.
1330  bool CNTV2LinuxDriverInterface::DmaReadFrameDriverBuffer (NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame,
1331  ULWord offsetSrc, ULWord offsetDest, ULWord bytes,
1332  ULWord downSample, ULWord linePitch, ULWord poll)
1333  {
1334  if (IsRemote())
1335  return false;
1336  if (!IsOpen())
1337  return false;
1338 
1339  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
1340  dmaControlBuf.engine = DMAEngine;
1341  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
1342  dmaControlBuf.frameNumber = frameNumber;
1343  dmaControlBuf.frameBuffer = PULWord(dmaBufferFrame);
1344  dmaControlBuf.frameOffsetSrc = offsetSrc;
1345  dmaControlBuf.frameOffsetDest = offsetDest;
1346  dmaControlBuf.numBytes = bytes;
1347  dmaControlBuf.downSample = downSample;
1348  if( linePitch == 0 ) linePitch = 1;
1349  dmaControlBuf.linePitch = linePitch;
1350  dmaControlBuf.poll = poll;
1351 
1352  static bool bPrintedDownsampleDeprecatedMsg = false;
1353  if (downSample && !bPrintedDownsampleDeprecatedMsg)
1354  {LDIWARN("downSample is deprecated"); bPrintedDownsampleDeprecatedMsg = true;}
1355 
1356  if (ioctl(int(_hDevice), IOCTL_NTV2_DMA_READ_FRAME, &dmaControlBuf))
1357  {LDIFAIL("IOCTL_NTV2_DMA_READ_FRAME failed"); return false;}
1358  return true;
1359  }
1360 #endif // !defined(NTV2_DEPRECATE_16_0)
1361 
1363  ULWord offsetSrc, ULWord offsetDest, ULWord bytes)
1364 {
1365  // return DmaTransfer (DMAEngine, false, frameNumber, pFrameBuffer, (ULWord) 0, bytes, bSync);
1366  if (IsRemote())
1367  return false;
1368  if (!IsOpen())
1369  return false;
1370  // NOTE: Linux driver assumes driver buffers to be used if
1371  // pFrameBuffer < numDmaDriverBuffers
1372  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
1373  dmaControlBuf.engine = DMAEngine;
1374  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
1375  dmaControlBuf.frameNumber = frameNumber;
1376  dmaControlBuf.frameBuffer = pFrameBuffer;
1377  dmaControlBuf.frameOffsetSrc = offsetSrc;
1378  dmaControlBuf.frameOffsetDest = offsetDest;
1379  dmaControlBuf.numBytes = bytes;
1380 
1381  // The following are used only for driver-created buffers.
1382  // Set them to known values.
1383  dmaControlBuf.downSample = 0; // Not applicable to this mode
1384  dmaControlBuf.linePitch = 1; // Not applicable to this mode
1385  dmaControlBuf.poll = 0; // currently can't poll with a usermode allocated dma buffer
1386 
1387  ULWord request;
1388  const char *errMsg = AJA_NULL;
1389 #define ERRMSG(s) #s " failed"
1390 
1391  // Usermode buffer stuff
1392  if (offsetSrc == 0 && offsetDest == 0) // Frame ( or field 0? )
1393  {
1394  request = IOCTL_NTV2_DMA_WRITE_FRAME;
1396  }
1397  else // Field 1 or audio
1398  {
1399  request = IOCTL_NTV2_DMA_WRITE;
1400  errMsg = ERRMSG(IOCTL_NTV2_DMA_WRITE);
1401  }
1402 
1403  if (ioctl(int(_hDevice), request, &dmaControlBuf))
1404  {LDIFAIL(errMsg); return false;}
1405  return true;
1406 }
1407 
1409  ULWord offsetSrc, ULWord offsetDest, ULWord bytes)
1410 {
1411  // return DmaTransfer (DMAEngine, false, frameNumber, pFrameBuffer, (ULWord) 0, bytes, bSync);
1412  if (IsRemote())
1413  return false;
1414  if (!IsOpen())
1415  return false;
1416 
1417  // NOTE: Linux driver assumes driver buffers to be used if
1418  // pFrameBuffer < numDmaDriverBuffers
1419  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
1420  dmaControlBuf.engine = DMAEngine;
1421  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
1422  dmaControlBuf.frameNumber = frameNumber;
1423  dmaControlBuf.frameBuffer = pFrameBuffer;
1424  dmaControlBuf.frameOffsetSrc = offsetSrc;
1425  dmaControlBuf.frameOffsetDest = offsetDest;
1426  dmaControlBuf.numBytes = bytes;
1427 
1428  // The following are used only for driver-created buffers.
1429  // Set them to known values.
1430  dmaControlBuf.downSample = 0; // Not applicable to this mode
1431  dmaControlBuf.linePitch = 1; // Not applicable to this mode
1432  dmaControlBuf.poll = 0; // currently can't poll with a usermode allocated dma buffer
1433  ULWord request;
1434  const char *errMsg = AJA_NULL;
1435 #define ERRMSG(s) #s " failed"
1436 
1437  // Usermode buffer stuff
1438  if (offsetSrc == 0 && offsetDest == 0) // Frame ( or field 0? )
1439  {
1440  request = IOCTL_NTV2_DMA_READ_FRAME;
1442  }
1443  else // Field 1 or audio
1444  {
1445  request = IOCTL_NTV2_DMA_READ;
1446  errMsg = ERRMSG(IOCTL_NTV2_DMA_READ);
1447  }
1448 
1449  if (ioctl(int(_hDevice), request, &dmaControlBuf))
1450  {LDIFAIL(errMsg); return false;}
1451  return true;
1452 #undef ERRMSG
1453 }
CNTV2LinuxDriverInterface::_pDNXRegisterBaseAddress
ULWord * _pDNXRegisterBaseAddress
Definition: ntv2linuxdriverinterface.h:136
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:432
NTV2_DMA_SEGMENT_CONTROL_STRUCT::dmaChannel
NTV2Channel dmaChannel
Definition: ntv2baremetalpublicinterface.h:168
eInput3
@ eInput3
Definition: ntv2publicinterface.h:3770
NTV2_MAXBOARDS
#define NTV2_MAXBOARDS
Definition: ntv2enums.h:1768
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:1155
AUTOCIRCULATE_DATA::channelSpec
NTV2Crosspoint channelSpec
Definition: ntv2publicinterface.h:4372
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:683
FRAME_STAMP_STRUCT::channelSpec
NTV2Crosspoint channelSpec
Definition: ntv2publicinterface.h:4438
NTV2_DMA_P2P_CONTROL_STRUCT::dmaEngine
NTV2DMAEngine dmaEngine
Definition: ntv2baremetalpublicinterface.h:184
HANDLE
short HANDLE
Definition: ajatypes.h:315
kRegBoardID
@ kRegBoardID
Definition: ntv2publicinterface.h:153
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:3748
CNTV2DriverInterface::_pXena2FlashBaseAddress
ULWord * _pXena2FlashBaseAddress
Definition: ntv2driverinterface.h:697
NTV2_DMA_CONTROL_STRUCT::numBytes
ULWord numBytes
Definition: ntv2baremetalpublicinterface.h:158
eOutput6
@ eOutput6
Definition: ntv2publicinterface.h:3786
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 widget_framestore. They're also commonly use...
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:680
NTV2Buffer
A generic user-space buffer object that has an address and a length. Used most often to share an arbi...
Definition: ntv2publicinterface.h:5993
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:1135
IOCTL_NTV2_DMA_WRITE_FRAME
#define IOCTL_NTV2_DMA_WRITE_FRAME
Definition: ntv2baremetalpublicinterface.h:34
NTV2_ASSERT
#define NTV2_ASSERT(_expr_)
Definition: ajatypes.h:506
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:546
NTV2_DMA_P2P_CONTROL_STRUCT::bRead
bool bRead
Definition: ntv2baremetalpublicinterface.h:183
eInput2
@ eInput2
Definition: ntv2publicinterface.h:3747
AJA_DebugStat_WaitForInterruptIn2
@ AJA_DebugStat_WaitForInterruptIn2
Definition: debugshare.h:227
eInput7
@ eInput7
Definition: ntv2publicinterface.h:3779
NTV2_DMA_CONTROL_STRUCT::poll
ULWord poll
Definition: ntv2baremetalpublicinterface.h:161
NTV2RPCClientAPI::NTV2DMATransferRemote
virtual bool NTV2DMATransferRemote(const NTV2DMAEngine inDMAEngine, const bool inIsRead, const ULWord inFrameNumber, NTV2Buffer &inOutBuffer, const ULWord inCardOffsetBytes, const ULWord inNumSegments, const ULWord inSegmentHostPitch, const ULWord inSegmentCardPitch, const bool inSynchronous)
Definition: ntv2nubaccess.cpp:2006
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:4580
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:1085
CNTV2LinuxDriverInterface::CloseLocalPhysical
virtual bool CloseLocalPhysical(void)
Releases host resources associated with the local/physical device connection.
Definition: ntv2linuxdriverinterface.cpp:108
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:254
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:234
CNTV2DriverInterface::_boardNumber
UWord _boardNumber
My device index number.
Definition: ntv2driverinterface.h:678
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:467
CNTV2LinuxDriverInterface::MapXena2Flash
virtual bool MapXena2Flash(void)
Definition: ntv2linuxdriverinterface.cpp:501
CNTV2DriverInterface::_boardID
NTV2DeviceID _boardID
My cached device ID.
Definition: ntv2driverinterface.h:679
ePrerollAutoCirculate
@ ePrerollAutoCirculate
Definition: ntv2publicinterface.h:4251
eGetIntCount
@ eGetIntCount
Definition: ntv2publicinterface.h:3756
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:1408
CNTV2LinuxDriverInterface::GetAudioOutputMode
virtual bool GetAudioOutputMode(NTV2_GlobalAudioPlaybackMode *mode)
Definition: ntv2linuxdriverinterface.cpp:1205
NTV2_CONTROL_DRIVER_DEBUG_MESSAGES_STRUCT::msgSet
NTV2_DriverDebugMessageSet msgSet
Definition: ntv2baremetalpublicinterface.h:217
eInput4
@ eInput4
Definition: ntv2publicinterface.h:3771
NTV2_DMA_CONTROL_STRUCT::linePitch
ULWord linePitch
Definition: ntv2baremetalpublicinterface.h:160
AUTOCIRCULATE_DATA::pvVal4
void * pvVal4
Definition: ntv2publicinterface.h:4393
NTV2_DMA_CONTROL_STRUCT::frameNumber
ULWord frameNumber
Definition: ntv2baremetalpublicinterface.h:153
AUTOCIRCULATE_DATA::pvVal3
void * pvVal3
Definition: ntv2publicinterface.h:4392
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:403
CNTV2LinuxDriverInterface::ControlDriverDebugMessages
virtual bool ControlDriverDebugMessages(NTV2_DriverDebugMessageSet msgSet, bool enable)
Definition: ntv2linuxdriverinterface.cpp:321
NTV2_DMA_SEGMENT_CONTROL_STRUCT::videoSegmentHostPitch
ULWord videoSegmentHostPitch
Definition: ntv2baremetalpublicinterface.h:177
CNTV2DriverInterface::mRegWrites
NTV2RegisterWrites mRegWrites
Stores WriteRegister data.
Definition: ntv2driverinterface.h:690
IOCTL_NTV2_WAITFOR_INTERRUPT
#define IOCTL_NTV2_WAITFOR_INTERRUPT
Definition: ntv2baremetalpublicinterface.h:67
NTV2RoutingTable
Definition: ntv2publicinterface.h:4057
AJA_DebugStat_DMATransferP2P
@ AJA_DebugStat_DMATransferP2P
Definition: debugshare.h:243
eOutput7
@ eOutput7
Definition: ntv2publicinterface.h:3787
NTV2_GlobalAudioPlaybackMode
NTV2_GlobalAudioPlaybackMode
Definition: ntv2enums.h:2051
eAbortAutoCirc
@ eAbortAutoCirc
Definition: ntv2publicinterface.h:4253
eTransferAutoCirculate
@ eTransferAutoCirculate
Definition: ntv2publicinterface.h:4252
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:4249
sIntEnumToStatKeys
static const uint32_t sIntEnumToStatKeys[]
Definition: ntv2linuxdriverinterface.cpp:277
FRAME_STAMP_STRUCT
Definition: ntv2publicinterface.h:4436
AUTOCIRCULATE_DATA::eCommand
AUTO_CIRC_COMMAND eCommand
Definition: ntv2publicinterface.h:4371
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:253
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:3780
AUTOCIRCULATE_P2P_STRUCT::videoBusSize
ULWord videoBusSize
Definition: ntv2publicinterface.h:4663
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:482
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:4662
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:4573
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:856
NTV2_WAITFOR_INTERRUPT_STRUCT::timeOutMs
ULWord timeOutMs
Definition: ntv2baremetalpublicinterface.h:210
CNTV2LinuxDriverInterface::UnmapDNXRegisters
virtual bool UnmapDNXRegisters(void)
Definition: ntv2linuxdriverinterface.cpp:585
CNTV2LinuxDriverInterface::UnmapFrameBuffers
virtual bool UnmapFrameBuffers(void)
Definition: ntv2linuxdriverinterface.cpp:409
eOutput2
@ eOutput2
Definition: ntv2publicinterface.h:3782
NTV2DeviceIDToString
std::string NTV2DeviceIDToString(const NTV2DeviceID inValue, const bool inForRetailDisplay=false)
Definition: ntv2utils.cpp:4673
eFlushAutoCirculate
@ eFlushAutoCirculate
Definition: ntv2publicinterface.h:4250
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:4248
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:1362
NTV2_DMA_P2P_CONTROL_STRUCT::ulVidNumSegments
ULWord ulVidNumSegments
Definition: ntv2baremetalpublicinterface.h:189
CNTV2LinuxDriverInterface::GetDMADriverBufferPhysicalAddress
virtual bool GetDMADriverBufferPhysicalAddress(ULWord *physAddr)
Definition: ntv2linuxdriverinterface.cpp:1120
AUTOCIRCULATE_FRAME_STAMP_COMBO_STRUCT
Definition: ntv2baremetalpublicinterface.h:231
AUTOCIRCULATE_TRANSFER_STRUCT::audioBuffer
ULWord * audioBuffer
Definition: ntv2publicinterface.h:4579
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:607
NTV2_HEADER
All new NTV2 structs start with this common header.
Definition: ntv2publicinterface.h:6954
UWord
uint16_t UWord
Definition: ajatypes.h:251
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:104
eInput6
@ eInput6
Definition: ntv2publicinterface.h:3778
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:214
NTV2_DMA_P2P_CONTROL_STRUCT::ulFrameNumber
ULWord ulFrameNumber
Definition: ntv2baremetalpublicinterface.h:186
NTV2_UNUSED
#define NTV2_UNUSED(__p__)
Definition: ajatypes.h:162
CNTV2LinuxDriverInterface::RestoreHardwareProcampRegisters
virtual bool RestoreHardwareProcampRegisters(void)
Definition: ntv2linuxdriverinterface.cpp:196
CNTV2LinuxDriverInterface::WaitForInterrupt
virtual bool WaitForInterrupt(INTERRUPT_ENUMS eInterrupt, ULWord timeOutMs=68)
Definition: ntv2linuxdriverinterface.cpp:298
REGISTER_ACCESS::RegisterMask
ULWord RegisterMask
Definition: ntv2baremetalpublicinterface.h:141
CNTV2LinuxDriverInterface::MapDNXRegisters
virtual bool MapDNXRegisters(void)
Definition: ntv2linuxdriverinterface.cpp:550
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:132
eTransferAutoCirculateEx
@ eTransferAutoCirculateEx
Definition: ntv2publicinterface.h:4255
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:4245
eSetCaptureTask
@ eSetCaptureTask
Definition: ntv2publicinterface.h:4258
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:1222
CNTV2LinuxDriverInterface::GetBA2MemorySize
virtual bool GetBA2MemorySize(ULWord *memSize)
Definition: ntv2linuxdriverinterface.cpp:491
hevcMessageHeader
Definition: ntv2publicinterface.h:9753
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:4661
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:197
CNTV2LinuxDriverInterface::DmaReadFrameDriverBuffer
virtual bool DmaReadFrameDriverBuffer(NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame, ULWord bytes, ULWord downSample, ULWord linePitch, ULWord poll)
Definition: ntv2linuxdriverinterface.cpp:1291
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:496
AJA_DebugStat_WaitForInterruptIn7
@ AJA_DebugStat_WaitForInterruptIn7
Definition: debugshare.h:232
CNTV2LinuxDriverInterface::_BA2MemorySize
ULWord _BA2MemorySize
Definition: ntv2linuxdriverinterface.h:137
CNTV2LinuxDriverInterface::SetAudioOutputMode
virtual bool SetAudioOutputMode(NTV2_GlobalAudioPlaybackMode mode)
Definition: ntv2linuxdriverinterface.cpp:1200
AJA_DebugStat_WaitForInterruptIn6
@ AJA_DebugStat_WaitForInterruptIn6
Definition: debugshare.h:231
CNTV2LinuxDriverInterface::MapDMADriverBuffer
virtual bool MapDMADriverBuffer()
Definition: ntv2linuxdriverinterface.cpp:1133
AJA_DebugStat_WaitForInterruptUartRx1
@ AJA_DebugStat_WaitForInterruptUartRx1
Definition: debugshare.h:235
DEC
#define DEC(__x__)
Definition: ntv2publicinterface.h:5605
IOCTL_NTV2_INTERRUPT_CONTROL
#define IOCTL_NTV2_INTERRUPT_CONTROL
Definition: ntv2baremetalpublicinterface.h:62
AUTOCIRCULATE_P2P_STRUCT::messageData
ULWord messageData
Definition: ntv2publicinterface.h:4664
eInput1
@ eInput1
Definition: ntv2publicinterface.h:3746
kVRegBA0MemorySize
@ kVRegBA0MemorySize
Definition: ntv2virtualregisters.h:256
CNTV2LinuxDriverInterface::UnmapXena2Flash
virtual bool UnmapXena2Flash(void)
Definition: ntv2linuxdriverinterface.cpp:535
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:256
std
Definition: json.hpp:5362
NTV2_DMA_P2P_CONTROL_STRUCT::ulMessageData
ULWord ulMessageData
Definition: ntv2baremetalpublicinterface.h:195
AUTOCIRCULATE_TRANSFER_STATUS_STRUCT
Definition: ntv2publicinterface.h:4522
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:4247
CNTV2DriverInterface::_pCh1FrameBaseAddress
ULWord * _pCh1FrameBaseAddress
Definition: ntv2driverinterface.h:698
NTV2_DMA_SEGMENT_CONTROL_STRUCT::engine
NTV2DMAEngine engine
Definition: ntv2baremetalpublicinterface.h:167
eInitAutoCirc
@ eInitAutoCirc
Definition: ntv2publicinterface.h:4244
AUTOCIRCULATE_P2P_STRUCT
Definition: ntv2publicinterface.h:4657
REGISTER_ACCESS
Definition: ntv2baremetalpublicinterface.h:138
HEX8
#define HEX8(__x__)
Definition: ntv2linuxdriverinterface.cpp:21
CNTV2LinuxDriverInterface::UnmapRegisters
virtual bool UnmapRegisters(void)
Definition: ntv2linuxdriverinterface.cpp:469
eStopAutoCirc
@ eStopAutoCirc
Definition: ntv2publicinterface.h:4246
CNTV2LinuxDriverInterface::GetBA0MemorySize
virtual bool GetBA0MemorySize(ULWord *memSize)
Definition: ntv2linuxdriverinterface.cpp:481
NTV2_DMA_CONTROL_STRUCT
Definition: ntv2baremetalpublicinterface.h:149
eOutput4
@ eOutput4
Definition: ntv2publicinterface.h:3784
CNTV2LinuxDriverInterface::HevcSendMessage
virtual bool HevcSendMessage(HevcMessageHeader *pMessage)
Sends an HEVC message to the NTV2 driver.
Definition: ntv2linuxdriverinterface.cpp:1102
eGetFrameStampEx2
@ eGetFrameStampEx2
Definition: ntv2publicinterface.h:4257
AsPTransferStruct
#define AsPTransferStruct(_p_)
Definition: ntv2linuxdriverinterface.cpp:36
CNTV2DriverInterface::GetFrameBufferSize
virtual ULWord GetFrameBufferSize(void) const
Definition: ntv2driverinterface.h:384
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:682
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:161
NTV2_INTERRUPT_CONTROL_STRUCT::interruptCount
ULWord interruptCount
Definition: ntv2baremetalpublicinterface.h:203
CNTV2LinuxDriverInterface::_BA4MemorySize
ULWord _BA4MemorySize
Definition: ntv2linuxdriverinterface.h:138
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:4755
CNTV2LinuxDriverInterface::GetDMADriverBufferAddress
virtual bool GetDMADriverBufferAddress(ULWord **pDMADriverBuffer)
Definition: ntv2linuxdriverinterface.cpp:1165
CNTV2LinuxDriverInterface::GetDMANumDriverBuffers
virtual bool GetDMANumDriverBuffers(ULWord *pNumDmaDriverBuffers)
Definition: ntv2linuxdriverinterface.cpp:1125
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:559
CNTV2LinuxDriverInterface::_hDevice
HANDLE _hDevice
Definition: ntv2linuxdriverinterface.h:132
CNTV2DriverInterface::_pRegisterBaseAddress
ULWord * _pRegisterBaseAddress
Definition: ntv2driverinterface.h:695
kVRegBA4MemorySize
@ kVRegBA4MemorySize
Definition: ntv2virtualregisters.h:258
CNTV2LinuxDriverInterface::_BA0MemorySize
ULWord _BA0MemorySize
Definition: ntv2linuxdriverinterface.h:135
NTV2_WAITFOR_INTERRUPT_STRUCT
Definition: ntv2baremetalpublicinterface.h:207
CNTV2DriverInterface::mRegWritesLock
AJALock mRegWritesLock
Guard mutex for mRegWrites.
Definition: ntv2driverinterface.h:691
eOutput5
@ eOutput5
Definition: ntv2publicinterface.h:3785
eTransferAutoCirculateEx2
@ eTransferAutoCirculateEx2
Definition: ntv2publicinterface.h:4256
CNTV2LinuxDriverInterface::MapFrameBuffers
virtual bool MapFrameBuffers(void)
Definition: ntv2linuxdriverinterface.cpp:360
CNTV2LinuxDriverInterface::_pDMADriverBufferAddress
ULWord * _pDMADriverBufferAddress
Definition: ntv2linuxdriverinterface.h:134
xHEX0N
#define xHEX0N(__x__, __n__)
Definition: ntv2publicinterface.h:5604
CNTV2DriverInterface::BumpEventCount
virtual void BumpEventCount(const INTERRUPT_ENUMS eInterruptType)
Atomically increments the event count tally for the given interrupt type.
Definition: ntv2driverinterface.cpp:1276
AUTOCIRCULATE_TRANSFER_COMBO_STRUCT
Definition: ntv2baremetalpublicinterface.h:222
AUTOCIRCULATE_DATA::pvVal1
void * pvVal1
Definition: ntv2publicinterface.h:4390
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:329
NTV2_CONTROL_DRIVER_DEBUG_MESSAGES_STRUCT::enable
bool enable
Definition: ntv2baremetalpublicinterface.h:218
AUTOCIRCULATE_DATA::pvVal2
void * pvVal2
Definition: ntv2publicinterface.h:4391
REGISTER_ACCESS::RegisterNumber
ULWord RegisterNumber
Definition: ntv2baremetalpublicinterface.h:139
eInput5
@ eInput5
Definition: ntv2publicinterface.h:3777
CNTV2DriverInterface::NTV2Message
virtual bool NTV2Message(NTV2_HEADER *pInMessage)
Sends a message to the NTV2 driver (the new, improved, preferred way).
Definition: ntv2driverinterface.cpp:584
CNTV2LinuxDriverInterface::GetBA1MemorySize
virtual bool GetBA1MemorySize(ULWord *memSize)
Definition: ntv2linuxdriverinterface.cpp:486
AJA_DebugStat_WaitForInterruptIn4
@ AJA_DebugStat_WaitForInterruptIn4
Definition: debugshare.h:229
CNTV2DriverInterface::_pFrameBaseAddress
ULWord * _pFrameBaseAddress
Definition: ntv2driverinterface.h:694
DEVICE_ID_NOTFOUND
@ DEVICE_ID_NOTFOUND
Invalid or "not found".
Definition: ntv2enums.h:90
eVerticalInterrupt
@ eVerticalInterrupt
Definition: ntv2publicinterface.h:3743
CNTV2LinuxDriverInterface::UnmapDMADriverBuffer
virtual bool UnmapDMADriverBuffer()
Definition: ntv2linuxdriverinterface.cpp:1177
eOutput8
@ eOutput8
Definition: ntv2publicinterface.h:3788
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:199
debug.h
Declares the AJADebug class.
AUTOCIRCULATE_DATA
Definition: ntv2publicinterface.h:4369
CNTV2DriverInterface::_pRPCAPI
NTV2RPCAPI * _pRPCAPI
Points to remote or software device interface; otherwise NULL for local physical device.
Definition: ntv2driverinterface.h:686
eAuxVerticalInterrupt
@ eAuxVerticalInterrupt
Definition: ntv2publicinterface.h:3762
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:4659
CNTV2LinuxDriverInterface::SetupBoard
virtual bool SetupBoard(void)
Definition: ntv2linuxdriverinterface.cpp:339
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:3783