24 #if !defined (NTV2_NULL_DEVICE) 27 #include <mach/mach.h> 29 #endif // !defined (NTV2_NULL_DEVICE) 34 static const char *
GetKernErrStr (
const kern_return_t inError);
43 #define HEX2(__x__) xHEX0N(0xFF & uint8_t (__x__),2) 44 #define HEX4(__x__) xHEX0N(0xFFFF & uint16_t(__x__),4) 45 #define HEX8(__x__) xHEX0N(0xFFFFFFFF & uint32_t(__x__),8) 46 #define HEX16(__x__) xHEX0N(uint64_t(__x__),16) 47 #define KR(_kr_) "kernResult=" << HEX8(_kr_) << "(" << GetKernErrStr(_kr_) << ")" 48 #define INSTP(_p_) HEX0N(uint64_t(_p_),16) 50 #define DIFAIL(__x__) AJA_sERROR (AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__) 51 #define DIWARN(__x__) AJA_sWARNING(AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__) 52 #define DINOTE(__x__) AJA_sNOTICE (AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__) 53 #define DIINFO(__x__) AJA_sINFO (AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__) 54 #define DIDBG(__x__) AJA_sDEBUG (AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__) 56 #define MDIFAIL(__x__) AJA_sERROR (AJA_DebugUnit_DriverInterface, AJAFUNC << ": " << __x__) 57 #define MDIWARN(__x__) AJA_sWARNING(AJA_DebugUnit_DriverInterface, AJAFUNC << ": " << __x__) 58 #define MDINOTE(__x__) AJA_sNOTICE (AJA_DebugUnit_DriverInterface, AJAFUNC << ": " << __x__) 59 #define MDIINFO(__x__) AJA_sINFO (AJA_DebugUnit_DriverInterface, AJAFUNC << ": " << __x__) 60 #define MDIDBG(__x__) AJA_sDEBUG (AJA_DebugUnit_DriverInterface, AJAFUNC << ": " << __x__) 63 #if !defined (NTV2_NULL_DEVICE) 65 #define OS_IOMasterPort(_x_,_y_) ::IOMasterPort ((_x_), (_y_)) 66 #define OS_IOServiceOpen(_w_,_x_,_y_,_z_) ::IOServiceOpen((_w_), (_x_), (_y_), (_z_)) 67 #define OS_IOServiceClose(_x_) ::IOServiceClose ((_x_)) 68 #define OS_IOServiceMatching(_x_) ::IOServiceMatching ((_x_)) 69 #define OS_IOServiceNameMatching(_x_) ::IOServiceNameMatching((_x_)) 70 #define OS_IOServiceGetMatchingServices(_x_,_y_,_z_) ::IOServiceGetMatchingServices ((_x_), (_y_), (_z_)) 71 #define OS_IOIteratorNext(_x_) ::IOIteratorNext ((_x_)) 72 #define OS_IOObjectRelease(_x_) ::IOObjectRelease ((_x_)) 73 #define OS_IORegistryEntryCreateCFProperty(_w_,_x_,_y_,_z_) ::IORegistryEntryCreateCFProperty ((_w_), (_x_), (_y_), (_z_)) 74 #define OS_IOConnectCallMethod(_q_,_r_,_s_,_t_,_u_,_v_,_w_,_x_,_y_,_z_) ::IOConnectCallMethod ((_q_), (_r_), (_s_), (_t_), (_u_), (_v_), (_w_), (_x_), (_y_), (_z_)) 75 #define OS_IOConnectCallScalarMethod(_u_,_v_,_w_,_x_,_y_,_z_) ::IOConnectCallScalarMethod ((_u_), (_v_), (_w_), (_x_), (_y_), (_z_)) 76 #define OS_IOConnectCallStructMethod(_u_,_v_,_w_,_x_,_y_,_z_) ::IOConnectCallStructMethod ((_u_), (_v_), (_w_), (_x_), (_y_), (_z_)) 77 #define OS_IOConnectMapMemory(_u_,_v_,_w_,_x_,_y_,_z_) ::IOConnectMapMemory ((_u_), (_v_), (_w_), (_x_), (_y_), (_z_)) 78 #define OS_IOKitGetBusyState(_x_,_y_) ::IOKitGetBusyState ((_x_), (_y_)) 79 #define OS_IOKitWaitQuiet(_x_,_y_) ::IOKitWaitQuiet ((_x_), (_y_)) 80 #else // NTV2_NULL_DEVICE defined 83 static IOReturn
OS_IOMasterPort (
const mach_port_t inPort, mach_port_t * pOutPort)
85 MDIWARN(
"NTV2_NULL_DEVICE -- will not connect to IOKit");
90 static kern_return_t
OS_IOServiceOpen (
const io_service_t inSvc,
const task_port_t inTask,
const uint32_t inType, io_connect_t * pOutConn)
92 if (pOutConn) *pOutConn = 0;
117 static CFTypeRef
OS_IORegistryEntryCreateCFProperty (
const io_registry_entry_t inEntry,
const CFStringRef inKey,
const CFAllocatorRef inAllocator,
const IOOptionBits inOptions)
121 static IOReturn
OS_IOConnectCallScalarMethod (
const mach_port_t inConnect,
const uint32_t inSelector,
const uint64_t * pInput,
const uint32_t inCount, uint64_t * pOutput, uint32_t * pOutCount)
123 if (pOutput) *pOutput = 0;
124 if (pOutCount) *pOutCount = 0;
127 static kern_return_t
OS_IOConnectCallMethod (
const mach_port_t inConnect,
const uint32_t inSelector,
const uint64_t * pInput, uint32_t inputCnt,
const void * pInStruct,
const size_t inStructCnt, uint64_t * pOutput, uint32_t * pOutputCnt,
void * pOutStruct,
size_t * pOutStructCnt)
137 static IOReturn
OS_IOKitWaitQuiet (
const mach_port_t inPort,
const mach_timespec_t * pInOutWait)
141 static IOReturn
OS_IOConnectCallStructMethod (
const io_connect_t inPort,
const uint32_t inSelector,
const void *inputStruct,
size_t inputStructCnt,
void *pOutStruct,
size_t *pOutStructCnt)
145 static kern_return_t
OS_IOConnectMapMemory (
const io_connect_t inPort,
const uint32_t inMemType,
const task_port_t inTask, mach_vm_address_t * pAddr, mach_vm_size_t * pOutSize,
const IOOptionBits inOpts)
149 #endif // NTV2_NULL_DEVICE defined 172 #if !defined(NTV2_NULL_DEVICE) 179 io_iterator_t ioIterator (0);
180 IOReturn error (kIOReturnSuccess);
181 io_object_t ioObject (0);
182 #if defined(NTV2_MACOS_SANDBOX) 184 static const size_t kNumSvcNames = 1;
187 static const size_t kNumSvcNames = 2;
190 for (
size_t svcNdx(0); svcNdx < kNumSvcNames && !mConnection; svcNdx++)
192 const string & svcName (kSvcNames[svcNdx]);
193 const char * pSvcName(svcName.c_str());
194 #if !defined(NTV2_MACOS_SANDBOX) 195 const bool tryKEXT (svcName.find(
"com_aja_iokit") != string::npos);
200 #
if defined(NTV2_MACOS_SANDBOX)
206 if (error != kIOReturnSuccess)
207 {
DIWARN(
KR(error) <<
": No '" << svcName <<
"' driver");
continue;}
221 DIWARN(
"No '" << svcName <<
"' devices");
228 if (error != kIOReturnSuccess)
229 {
DIWARN(
KR(error) <<
": IOServiceOpen failed for '" << svcName <<
"' ndx=" << inDeviceIndex);
continue;}
231 #if defined(NTV2_MACOS_SANDBOX) 238 _boardOpened = mConnection != 0;
240 DIDBG((mIsDEXT ?
"DEXT" :
"KEXT") <<
" ndx=" << inDeviceIndex <<
" conn=" <<
HEX8(GetIOConnect()) <<
" opened");
242 {
DIFAIL(
INSTP(
this) <<
": No connection: ndx=" << inDeviceIndex);
return false;}
244 setDeviceIndexNumber (inDeviceIndex);
247 DIFAIL(
"ReadRegister(kRegBoardID) failed: ndx=" << inDeviceIndex <<
" con=" <<
HEX8(GetIOConnect()) <<
" boardID=" <<
HEX8(_boardID));
262 DIDBG(
"Closed " << (mIsDEXT ?
"DEXT" :
"KEXT") <<
" ndx=" << GetIndexNumber() <<
" con=" <<
HEX8(GetIOConnect()) <<
" id=" << ::
NTV2DeviceIDToString(_boardID));
263 _boardOpened =
false;
272 #endif // !defined(NTV2_NULL_DEVICE) 275 #if !defined(NTV2_DEPRECATE_16_0) 299 _pCh1FrameBaseAddress = _pCh2FrameBaseAddress =
AJA_NULL;
302 _pFrameBaseAddress =
reinterpret_cast<ULWord*
>(baseAddr);
309 _pCh1FrameBaseAddress = _pCh2FrameBaseAddress =
AJA_NULL;
324 _pRegisterBaseAddress =
reinterpret_cast<ULWord*
>(baseAddr);
345 _pXena2FlashBaseAddress =
reinterpret_cast<ULWord*
>(baseAddr);
365 mach_vm_size_t size(0);
367 reinterpret_cast<mach_vm_address_t*>(memPtr),
368 &size, kIOMapDefaultCache | kIOMapAnywhere);
379 kern_return_t kernResult = KERN_FAILURE;
380 uint64_t scalarI_64[2] = {uint64_t(dataPtr), controlCode};
381 uint32_t outputCount = 0;
383 kernResult = KERN_INVALID_ARGUMENT;
384 else if (GetIOConnect())
391 if (kernResult == KERN_SUCCESS)
393 DIFAIL (
KR(kernResult) <<
", con=" <<
HEX8(GetIOConnect()));
396 #endif // !defined(NTV2_DEPRECATE_16_0) 398 #pragma mark - New Driver Calls 409 DIFAIL(
"Shift " <<
DEC(inShift) <<
" > 31, reg=" <<
DEC(inRegNum) <<
" msk=" <<
xHEX0N(inMask,8));
412 #if defined (NTV2_NUB_CLIENT_SUPPORT) 415 #endif // defined (NTV2_NUB_CLIENT_SUPPORT) 416 kern_return_t kernResult(KERN_FAILURE);
417 uint64_t scalarI_64[3] = {inRegNum, inMask, inShift};
418 uint64_t scalarO_64 = outValue;
419 uint32_t outputCount = 1;
431 if (kernResult != KERN_SUCCESS)
433 DIFAIL(
KR(kernResult) <<
": ndx=" << GetIndexNumber() <<
", con=" <<
HEX8(GetIOConnect())
434 <<
" -- reg=" <<
DEC(inRegNum) <<
", mask=" <<
HEX8(inMask) <<
", shift=" <<
HEX8(inShift));
437 outValue = uint32_t(scalarO_64);
438 #if defined(NTV2_PRETEND_DEVICE) 439 if (inRegNum ==
kRegBoardID && outValue == NTV2_PRETEND_DEVICE_FROM)
440 outValue =
ULWord(NTV2_PRETEND_DEVICE_TO);
443 #endif // NTV2_PRETEND_DEVICE 458 DIFAIL(
"Shift " <<
DEC(inShift) <<
" > 31, reg=" <<
DEC(inRegNum) <<
" msk=" <<
xHEX0N(inMask,8));
461 #if defined(NTV2_WRITEREG_PROFILING) // Register Write Profiling 462 if (mRecordRegWrites)
465 mRegWrites.push_back(
NTV2RegInfo(inRegNum, inValue, inMask, inShift));
469 #endif // defined(NTV2_WRITEREG_PROFILING) // Register Write Profiling 470 #if defined(NTV2_NUB_CLIENT_SUPPORT) 473 #endif // defined (NTV2_NUB_CLIENT_SUPPORT) 474 kern_return_t kernResult(KERN_FAILURE);
475 uint64_t scalarI_64[4] = {inRegNum, inValue, inMask, inShift};
476 uint32_t outputCount = 0;
488 if (kernResult == KERN_SUCCESS)
490 DIFAIL (
KR(kernResult) <<
": con=" <<
HEX8(GetIOConnect()) <<
" -- reg=" << inRegNum
491 <<
", val=" <<
HEX8(inValue) <<
", mask=" <<
HEX8(inMask) <<
", shift=" <<
HEX8(inShift));
507 #if defined(NTV2_NUB_CLIENT_SUPPORT) 510 #endif // defined (NTV2_NUB_CLIENT_SUPPORT) 516 <<
" uninitialized by AJAAgent, requesting app " <<
xHEX0N(appType,8) <<
", pid=" <<
DEC(pid));
518 kern_return_t kernResult = KERN_FAILURE;
519 uint64_t scalarI_64[2] = {uint64_t(appType), uint64_t(pid)};
520 uint32_t outputCount = 0;
530 if (kernResult == KERN_SUCCESS)
532 DIFAIL(
KR(kernResult) <<
": con=" <<
HEX8(GetIOConnect()));
542 #if defined(NTV2_NUB_CLIENT_SUPPORT) 545 #endif // defined (NTV2_NUB_CLIENT_SUPPORT) 546 kern_return_t kernResult = KERN_FAILURE;
547 uint64_t scalarI_64[2] = {uint64_t(appType), uint64_t(pid)};
548 uint32_t outputCount = 0;
558 if (kernResult == KERN_SUCCESS)
560 DIFAIL (
KR(kernResult) <<
": con=" <<
HEX8(GetIOConnect()));
577 #if defined(NTV2_NUB_CLIENT_SUPPORT) 580 #endif // defined (NTV2_NUB_CLIENT_SUPPORT) 586 <<
" uninitialized by AJAAgent, requesting app " <<
xHEX0N(appType,8) <<
", pid=" <<
DEC(pid));
588 kern_return_t kernResult = KERN_FAILURE;
589 uint64_t scalarI_64[2] = {uint64_t(appType), uint64_t(pid)};
590 uint32_t outputCount = 0;
600 if (kernResult == KERN_SUCCESS)
602 DIFAIL (
KR(kernResult) <<
": con=" <<
HEX8(GetIOConnect()));
615 #if defined(NTV2_NUB_CLIENT_SUPPORT) 618 #endif // defined (NTV2_NUB_CLIENT_SUPPORT) 619 kern_return_t kernResult = KERN_FAILURE;
620 uint64_t scalarI_64[2] = {uint64_t(appType), uint64_t(pid)};
621 uint32_t outputCount = 0;
631 if (kernResult == KERN_SUCCESS)
633 DIFAIL (
KR(kernResult) <<
": con=" <<
HEX8(GetIOConnect()));
649 #if defined(NTV2_NUB_CLIENT_SUPPORT) 652 #endif // defined (NTV2_NUB_CLIENT_SUPPORT) 653 kern_return_t kernResult = KERN_FAILURE;
654 uint64_t scalarI_64[2] = {uint64_t(appType), uint64_t(pid)};
655 uint32_t outputCount = 0;
665 if (kernResult == KERN_SUCCESS)
667 DIFAIL (
KR(kernResult) <<
": con=" <<
HEX8(GetIOConnect()));
677 #if defined(NTV2_NUB_CLIENT_SUPPORT) 680 #endif // defined (NTV2_NUB_CLIENT_SUPPORT) 681 kern_return_t kernResult = KERN_FAILURE;
682 uint64_t scalarO_64[2] = {0, 0};
683 uint32_t outputCount(2);
693 outAppType =
ULWord(scalarO_64[0]);
694 outProcessID = int32_t(scalarO_64[1]);
695 if (kernResult == KERN_SUCCESS)
697 DIFAIL (
KR(kernResult) <<
": con=" <<
HEX8(GetIOConnect()));
707 kern_return_t kernResult = KERN_FAILURE;
708 uint64_t scalarI_64[2] = {uint64_t(dataPtr), dataSize};
709 uint32_t outputCount = 0;
717 if (kernResult == KERN_SUCCESS)
719 DIFAIL (
KR(kernResult) <<
": con=" <<
HEX8(GetIOConnect()));
728 AJA_DebugStat_WaitForInterruptOthers,
AJA_DebugStat_WaitForInterruptOthers,
AJA_DebugStat_WaitForInterruptOthers,
AJA_DebugStat_WaitForInterruptOthers,
AJA_DebugStat_WaitForInterruptOthers,
AJA_DebugStat_WaitForInterruptOthers,
AJA_DebugStat_WaitForInterruptOthers,
AJA_DebugStat_WaitForInterruptOthers,
AJA_DebugStat_WaitForInterruptOthers,
AJA_DebugStat_WaitForInterruptOthers,
756 #if defined(NTV2_NUB_CLIENT_SUPPORT) 759 #endif // defined(NTV2_NUB_CLIENT_SUPPORT) 761 return WaitForChangeEvent(timeout);
763 kern_return_t kernResult = KERN_FAILURE;
764 uint64_t scalarI_64[2] = {type, timeout};
765 uint64_t scalarO_64 = 0;
766 uint32_t outputCount = 1;
769 kernResult = KERN_INVALID_VALUE;
770 else if (GetIOConnect())
781 UInt32 interruptOccurred = uint32_t(scalarO_64);
782 if (kernResult != KERN_SUCCESS)
784 if (interruptOccurred)
785 { BumpEventCount(type);
788 return interruptOccurred;
802 #if defined(NTV2_NUB_CLIENT_SUPPORT) 805 #endif // defined(NTV2_NUB_CLIENT_SUPPORT) 807 kern_return_t kernResult = KERN_FAILURE;
808 uint64_t scalarI_64[1] = {eInterrupt};
809 uint64_t scalarO_64 = 0;
810 uint32_t outputCount = 1;
822 outCount =
ULWord(scalarO_64);
823 if (kernResult == KERN_SUCCESS)
825 DIFAIL(
KR(kernResult) <<
": con=" <<
HEX8(GetIOConnect()));
838 kern_return_t kernResult = KERN_FAILURE;
839 uint64_t scalarI_64[1] = {timeout};
840 uint64_t scalarO_64 = 0;
841 uint32_t outputCount = 1;
849 if (kernResult != KERN_SUCCESS)
850 DIFAIL(
KR(kernResult) <<
": con=" <<
HEX8(GetIOConnect()));
851 return bool(scalarO_64);
867 const ULWord inFrameNumber,
869 const ULWord inOffsetBytes,
871 const bool inSynchronous)
875 inOffsetBytes, inByteCount, inSynchronous);
878 kern_return_t kernResult = KERN_FAILURE;
879 uint64_t scalarI_64[6] = {inDMAEngine, uint64_t(pFrameBuffer), inFrameNumber, inOffsetBytes, inByteCount, !inIsRead};
880 uint32_t outputCount = 0;
892 if (kernResult == KERN_SUCCESS)
894 DIFAIL(
KR(kernResult) <<
": con=" <<
HEX8(GetIOConnect()) <<
", eng=" << inDMAEngine <<
", frm=" << inFrameNumber
895 <<
", off=" <<
HEX8(inOffsetBytes) <<
", len=" <<
HEX8(inByteCount) <<
", " << (inIsRead ?
"R" :
"W"));
912 const ULWord inFrameNumber,
914 const ULWord inCardOffsetBytes,
916 const ULWord inNumSegments,
917 const ULWord inSegmentHostPitch,
918 const ULWord inSegmentCardPitch,
919 const bool inSynchronous)
923 inNumSegments, inSegmentHostPitch, inSegmentCardPitch, inSynchronous);
926 kern_return_t kernResult = KERN_FAILURE;
927 size_t outputStructSize = 0;
928 const ULWord numSegments = inNumSegments ? inNumSegments : 1;
934 dmaTransfer64.
dmaSize = inByteCount;
954 if (kernResult == KERN_SUCCESS)
956 DIFAIL (
KR(kernResult) <<
": con=" <<
HEX8(GetIOConnect()));
963 const bool inIsTarget,
964 const ULWord inFrameNumber,
965 const ULWord inCardOffsetBytes,
967 const ULWord inNumSegments,
968 const ULWord inSegmentHostPitch,
969 const ULWord inSegmentCardPitch,
974 inNumSegments, inSegmentHostPitch, inSegmentCardPitch, inP2PData);
982 bool CNTV2MacDriverInterface::RestoreHardwareProcampRegisters (
void)
984 kern_return_t kernResult = KERN_FAILURE;
985 uint32_t outputCount = 0;
993 if (kernResult == KERN_SUCCESS)
995 DIFAIL (
KR(kernResult) <<
": con=" <<
HEX8(GetIOConnect()));
1005 bool CNTV2MacDriverInterface::SystemStatus (
void* dataPtr,
SystemStatusCode statusCode)
1007 kern_return_t kernResult = KERN_FAILURE;
1008 uint64_t scalarI_64[2] = {uint64_t(dataPtr), statusCode};
1009 uint32_t outputCount = 0;
1019 if (kernResult == KERN_SUCCESS)
1032 bool success =
true;
1036 kern_return_t kernResult = KERN_FAILURE;
1037 io_connect_t conn(GetIOConnect());
1055 size_t outputStructSize = 0;
1057 CopyTo_AUTOCIRCULATE_DATA_64 (&autoCircData, &autoCircData64);
1072 uint64_t scalarI_64[1];
1073 uint32_t outputCount = 0;
1102 CopyTo_AUTOCIRCULATE_DATA_64 (&autoCircData, &autoCircData64);
1136 CopyTo_AUTOCIRCULATE_DATA_64 (&autoCircData, &autoCircData64);
1140 CopyTo_AUTOCIRCULATE_TRANSFER_STRUCT_64 (reinterpret_cast<AUTOCIRCULATE_TRANSFER_STRUCT*>(autoCircData.
pvVal1), &autoCircTransfer64);
1146 CopyTo_AUTOCIRCULATE_TASK_STRUCT_64 (reinterpret_cast<AUTOCIRCULATE_TASK_STRUCT*>(autoCircData.
pvVal4), &autoCircTask64);
1164 kernResult = KERN_INVALID_ARGUMENT;
1168 success = (kernResult == KERN_SUCCESS);
1169 if (kernResult != KERN_SUCCESS && kernResult != kIOReturnOffline)
1179 if (!pInOutMessage->
IsValid())
1187 ULWord* pU32 =
reinterpret_cast<ULWord*
>(pInOutMessage); pU32[6] = 0;
1189 kern_return_t kernResult (KERN_FAILURE);
1190 io_connect_t connection (GetIOConnect ());
1191 uint64_t scalarI_64 [2] = {uint64_t(pInOutMessage), pInOutMessage->
GetSizeInBytes()};
1192 uint32_t numScalarOutputs(0);
1204 if (kernResult != KERN_SUCCESS && kernResult != kIOReturnOffline)
1205 MDIFAIL (
KR(kernResult) <<
INSTP(
this) <<
", con=" <<
HEX8(connection) << endl << *pInOutMessage);
1206 return kernResult == KERN_SUCCESS;
1212 #pragma mark Old Driver Calls 1340 printf(
"----------------------\n");
1343 uint8_t * ptr = (uint8_t *)p64;
1348 printf(
"%x ", *ptr++);
1350 printf(
"\n\n", *ptr++);
1355 printf(
"----------------------\n");
1369 printf(
"rp188.DBB %x\n",p64->
rp188.
DBB);
1370 printf(
"rp188.Low %x\n",p64->
rp188.
Low);
1371 printf(
"rp188.High %x\n",p64->
rp188.
High);
1374 printf(
"hUser %x\n",p64->
hUser);
1479 case kIOReturnError:
return "general error";
1480 case kIOReturnNoMemory:
return "can't allocate memory";
1481 case kIOReturnNoResources:
return "resource shortage";
1482 case kIOReturnIPCError:
return "error during IPC";
1483 case kIOReturnNoDevice:
return "no such device";
1484 case kIOReturnNotPrivileged:
return "privilege violation";
1485 case kIOReturnBadArgument:
return "invalid argument";
1486 case kIOReturnLockedRead:
return "device read locked";
1487 case kIOReturnLockedWrite:
return "device write locked";
1488 case kIOReturnExclusiveAccess:
return "exclusive access and device already open";
1489 case kIOReturnBadMessageID:
return "sent/received messages had different msg_id";
1490 case kIOReturnUnsupported:
return "unsupported function";
1491 case kIOReturnVMError:
return "misc. VM failure";
1492 case kIOReturnInternalError:
return "internal error";
1493 case kIOReturnIOError:
return "General I/O error";
1494 case kIOReturnCannotLock:
return "can't acquire lock";
1495 case kIOReturnNotOpen:
return "device not open";
1496 case kIOReturnNotReadable:
return "read not supported";
1497 case kIOReturnNotWritable:
return "write not supported";
1498 case kIOReturnNotAligned:
return "alignment error";
1499 case kIOReturnBadMedia:
return "Media Error";
1500 case kIOReturnStillOpen:
return "device(s) still open";
1501 case kIOReturnRLDError:
return "rld failure";
1502 case kIOReturnDMAError:
return "DMA failure";
1503 case kIOReturnBusy:
return "Device Busy";
1504 case kIOReturnTimeout:
return "I/O Timeout";
1505 case kIOReturnOffline:
return "device offline";
1506 case kIOReturnNotReady:
return "not ready";
1507 case kIOReturnNotAttached:
return "device not attached";
1508 case kIOReturnNoChannels:
return "no DMA channels left";
1509 case kIOReturnNoSpace:
return "no space for data";
1510 case kIOReturnPortExists:
return "port already exists";
1511 case kIOReturnCannotWire:
return "can't wire down physical memory";
1512 case kIOReturnNoInterrupt:
return "no interrupt attached";
1513 case kIOReturnNoFrames:
return "no DMA frames enqueued";
1514 case kIOReturnMessageTooLarge:
return "oversized msg received on interrupt port";
1515 case kIOReturnNotPermitted:
return "not permitted";
1516 case kIOReturnNoPower:
return "no power to device";
1517 case kIOReturnNoMedia:
return "media not present";
1518 case kIOReturnUnformattedMedia:
return "media not formatted";
1519 case kIOReturnUnsupportedMode:
return "no such mode";
1520 case kIOReturnUnderrun:
return "data underrun";
1521 case kIOReturnOverrun:
return "data overrun";
1522 case kIOReturnDeviceError:
return "the device is not working properly!";
1523 case kIOReturnNoCompletion:
return "a completion routine is required";
1524 case kIOReturnAborted:
return "operation aborted";
1525 case kIOReturnNoBandwidth:
return "bus bandwidth would be exceeded";
1526 case kIOReturnNotResponding:
return "device not responding";
1527 case kIOReturnIsoTooOld:
return "isochronous I/O request for distant past!";
1528 case kIOReturnIsoTooNew:
return "isochronous I/O request for distant future";
1529 case kIOReturnNotFound:
return "data was not found";
1530 case MACH_SEND_INVALID_DEST:
return "MACH_SEND_INVALID_DEST";
virtual bool ReleaseStreamForApplicationWithReference(ULWord inApplicationType, int32_t inProcessID)
A reference-counted version of CNTV2DriverInterface::ReleaseStreamForApplication useful for process g...
NTV2VideoFrameBufferOrientation frameBufferOrientation
ULWord dmaCardFrameOffset
Everything needed to call CNTV2Card::ReadRegister or CNTV2Card::WriteRegister functions.
const IOReturn kNTV2DriverParamErr
const IOReturn kNTV2DriverBadDMA
virtual bool AcquireStreamForApplicationWithReference(const ULWord inAppType, const int32_t inProcessID)
A reference-counted version of CNTV2DriverInterface::AcquireStreamForApplication useful for process g...
NTV2Crosspoint channelSpec
struct AUTOCIRCULATE_STATUS_STRUCT AUTOCIRCULATE_STATUS_STRUCT
const IOReturn kNTV2HeaderVersionErr
Declares the AJALock class.
static const string sNTV2PCIKEXTClassName("com_aja_iokit_ntv2")
ULWord dmaSegmentHostPitch
#define OS_IOKitWaitQuiet(_x_, _y_)
ULWord dmaCardFrameNumber
#define OS_IOObjectRelease(_x_)
virtual bool ReleaseStreamForApplication(ULWord inApplicationType, int32_t inProcessID)
Releases exclusive use of the AJA device for the given process, permitting other processes to acquire...
virtual bool MapXena2Flash(void)
#define OS_IOMasterPort(_x_, _y_)
CUSTOM_ANC_STRUCT customAncInfo
This field is obsolete. Do not use.
const IOReturn kNTV2DriverDMABusy
AutoCircVidProcInfo vidProcInfo
const IOReturn kNTV2DriverMapperErr
Declares the AJADebug class.
#define OS_IOServiceOpen(_w_, _x_, _y_, _z_)
#define NTV2_IS_VALID_INTERRUPT_ENUM(__e__)
virtual bool GetAudioOutputMode(NTV2_GlobalAudioPlaybackMode *mode)
const IOReturn kNTV2DriverBadHeaderTag
Declares the AJATime class.
NTV2VideoFrameBufferOrientation frameBufferOrientation
#define NTV2_FOURCC(_a_, _b_, _c_, _d_)
const IOReturn kNTV2DriverPrepMemErr
const IOReturn kNTV2DriverDMATooLarge
virtual ULWord GetPCISlotNumber(void) const
CNTV2MacDriverInterface()
My default constructor.
virtual bool UnmapXena2Flash(void)
AUTO_CIRC_COMMAND eCommand
virtual bool ReleaseStreamForApplication(const ULWord inAppType, const int32_t inProcessID)
Releases exclusive use of the AJA device for the given process, permitting other processes to acquire...
virtual ~CNTV2MacDriverInterface()
My destructor.
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...
NTV2Channel
These enum values are mostly used to identify a specific widget_framestore. They're also commonly use...
Declares NTV2 "nub" client functions.
ULWord dmaSegmentCardPitch
#define NTV2_ASSERT(_expr_)
virtual bool SetAudioOutputMode(NTV2_GlobalAudioPlaybackMode mode)
BOOL_ bDisableExtraAudioInfo
static AJAStatus StatTimerStop(const uint32_t inKey)
#define OS_IOServiceMatching(_x_)
AutoCircGenericTask * taskArray
virtual bool AcquireStreamForApplication(const ULWord inAppType, const int32_t inProcessID)
Reserves exclusive use of the AJA device for a given process, preventing other processes on the host ...
#define OS_IOConnectMapMemory(_u_, _v_, _w_, _x_, _y_, _z_)
virtual bool SetStreamingApplication(const ULWord appType, const int32_t pid)
Forcibly sets the four-CC type and process ID of the application that should "own" the AJA device (i...
virtual bool WaitForChangeEvent(UInt32 timeout=0)
virtual bool GetStreamingApplication(ULWord &outAppType, int32_t &outProcessID)
Answers with the four-CC type and process ID of the application that currently "owns" the AJA device ...
#define OS_IOConnectCallScalarMethod(_u_, _v_, _w_, _x_, _y_, _z_)
virtual bool CloseLocalPhysical(void)
Releases host resources associated with the local/physical device connection.
#define OS_IOConnectCallMethod(_q_, _r_, _s_, _t_, _u_, _v_, _w_, _x_, _y_, _z_)
ULWord GetSizeInBytes(void) const
My total size, in bytes, including header, body and trailer (but excluding embedded NTV2Buffer data) ...
virtual bool SetStreamingApplication(const ULWord inAppType, const int32_t inProcessID)
Forcibly sets the four-CC type and process ID of the application that should "own" the AJA device (i...
virtual bool MapMemory(const MemoryType memType, void **memPtr)
static NTV2DeviceIDSet gLegalDeviceIDs
virtual bool AcquireStreamForApplication(ULWord inApplicationType, int32_t inProcessID)
Reserves exclusive use of the AJA device for a given process, preventing other processes on the host ...
const IOReturn kNTV2DriverBadTrailerTag
NTV2Crosspoint channelSpec
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...
BOOL_ bDisableExtraAudioInfo
virtual bool MapFrameBuffers(void)
enum _INTERRUPT_ENUMS_ INTERRUPT_ENUMS
NTV2ColorCorrectionInfo colorCorrectionInfo
#define OS_IOIteratorNext(_x_)
NTV2ColorCorrectionInfo_64 colorCorrectionInfo
static const uint32_t sIntEnumToStatKeys[]
All new NTV2 structs start with this common header.
NTV2FrameBufferFormat frameBufferFormat
#define OS_IOServiceGetMatchingServices(_x_, _y_, _z_)
static AJALock gLegalDevIDsLock
virtual bool AcquireStreamForApplicationWithReference(ULWord inApplicationType, int32_t inProcessID)
A reference-counted version of CNTV2DriverInterface::AcquireStreamForApplication useful for process g...
virtual bool GetInterruptCount(const INTERRUPT_ENUMS eInterrupt, ULWord &outCount)
Answers with the current total number of interrupts of the given type processed by the driver's inter...
NTV2_GlobalAudioPlaybackMode
AutoCircVidProcInfo vidProcInfo
virtual bool ReleaseStreamForApplicationWithReference(const ULWord inAppType, const int32_t inProcessID)
A reference-counted version of CNTV2DriverInterface::ReleaseStreamForApplication useful for process g...
NTV2FrameBufferFormat frameBufferFormat
virtual bool DmaTransfer(const NTV2DMAEngine inDMAEngine, const bool inIsRead, const ULWord inFrameNumber, ULWord *pFrameBuffer, const ULWord inCardOffsetBytes, const ULWord inByteCount, const bool inSynchronous=(!(0)))
Transfers data between the AJA device and the host. This function will block and not return to the ca...
NTV2Crosspoint channelSpec
NTV2ColorCorrectionMode mode
NTV2Crosspoint backgroundVideoCrosspoint
ULWord videoSegmentCardPitch
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...
virtual bool NTV2Message(NTV2_HEADER *pInMessage)
Sends a message to the NTV2 driver (the new, improved, preferred way).
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...
ULWord videoSegmentCardPitch
static AJAStatus StatTimerStart(const uint32_t inKey)
std::string NTV2DeviceIDToString(const NTV2DeviceID inValue, const bool inForRetailDisplay=false)
Declares the AJAAtomic class.
virtual bool NTV2Message(NTV2_HEADER *pInMessage)
Sends a message to the NTV2 driver (the new, improved, preferred way).
virtual bool KernelLog(void *dataPtr, UInt32 dataSize)
NTV2Crosspoint channelSpec
static const char * GetKernErrStr(const kern_return_t inError)
Declares numerous NTV2 utility functions.
NTV2Crosspoint foregroundKeyCrosspoint
virtual bool GetInterruptCount(const INTERRUPT_ENUMS eInterrupt, ULWord &outCount)
Answers with the current total number of interrupts of the given type processed by the driver's inter...
Pointer64 ccLookupTables
only used in 3way color correction mode.
AUTO_CIRC_COMMAND eCommand
NTV2ColorCorrectionMode mode
const IOReturn kNTV2UnknownStructType
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...
Fixed_ transitionSoftness
#define OS_IOKitGetBusyState(_x_, _y_)
virtual bool OpenLocalPhysical(const UWord inDeviceIndex)
Opens the local/physical device connection.
const IOReturn kNTV2DriverNotReadyErr
static const string sNTV2PCIDEXTName("AJANTV2")
virtual bool AutoCirculate(AUTOCIRCULATE_DATA &autoCircData)
Sends an AutoCirculate command to the NTV2 driver.
#define xHEX0N(__x__, __n__)
virtual bool WaitForInterrupt(const INTERRUPT_ENUMS type, const ULWord timeout=50)
Efficiently waits for the next given interrupt to be signaled on the device.
Fixed_ transitionCoefficient
virtual bool WaitForInterrupt(const INTERRUPT_ENUMS eInterrupt, const ULWord timeOutMs=68)
Efficiently waits for the next given interrupt to be signaled on the device.
#define OS_IOServiceClose(_x_)
ULWord * ccLookupTables
only used in 3way color correction mode.
#define OS_IORegistryEntryCreateCFProperty(_w_, _x_, _y_, _z_)
ULWord videoSegmentHostPitch
ULWord dmaNumberOfSegments
const IOReturn kNTV2DriverPgmXilinxErr
std::set< NTV2DeviceID > NTV2DeviceIDSet
A set of NTV2DeviceIDs.
CUSTOM_ANC_STRUCT customAncInfo
This field is obsolete. Do not use.
virtual bool MapRegisters(void)
const IOReturn kNTV2DriverUnmapperErr
const uint32_t kAgentAppFcc(((((uint32_t)( 'A'))<< 24)|(((uint32_t)( 'j'))<< 16)|(((uint32_t)( 'a'))<< 8)|(((uint32_t)( 'A'))<< 0)))
static std::string IntName(const INTERRUPT_ENUMS id)
virtual bool SystemControl(void *dataPtr, SystemControlCode systemControlCode)
virtual bool UnmapRegisters(void)
#define OS_IOConnectCallStructMethod(_u_, _v_, _w_, _x_, _y_, _z_)
#define OS_IOServiceNameMatching(_x_)
NTV2Crosspoint backgroundKeyCrosspoint
NTV2QuarterSizeExpandMode videoQuarterSizeExpand
virtual bool GetStreamingApplication(ULWord &outAppType, int32_t &outProcessID)
Answers with the four-CC type and process ID of the application that currently "owns" the AJA device ...
NTV2Crosspoint foregroundVideoCrosspoint
Implements the MacOS-specific flavor of CNTV2DriverInterface.
virtual bool AutoCirculate(AUTOCIRCULATE_DATA &pAutoCircData)
Sends an AutoCirculate command to the NTV2 driver.
Declares device capability functions.
virtual bool UnmapFrameBuffers(void)
ULWord videoSegmentHostPitch
NTV2QuarterSizeExpandMode videoQuarterSizeExpand