diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/EFI/BOOT/BOOTx64.efi b/EFI/BOOT/BOOTx64.efi new file mode 100755 index 0000000..7a25cf9 Binary files /dev/null and b/EFI/BOOT/BOOTx64.efi differ diff --git a/EFI/OC/._config.plist b/EFI/OC/._config.plist new file mode 100755 index 0000000..48f17f8 Binary files /dev/null and b/EFI/OC/._config.plist differ diff --git a/EFI/OC/ACPI/SSDT-AWAC.aml b/EFI/OC/ACPI/SSDT-AWAC.aml new file mode 100755 index 0000000..5189bf4 Binary files /dev/null and b/EFI/OC/ACPI/SSDT-AWAC.aml differ diff --git a/EFI/OC/ACPI/SSDT-EC-USBX-DESKTOP.aml b/EFI/OC/ACPI/SSDT-EC-USBX-DESKTOP.aml new file mode 100755 index 0000000..fc27e3a Binary files /dev/null and b/EFI/OC/ACPI/SSDT-EC-USBX-DESKTOP.aml differ diff --git a/EFI/OC/ACPI/SSDT-PLUG-DRTNIA.aml b/EFI/OC/ACPI/SSDT-PLUG-DRTNIA.aml new file mode 100755 index 0000000..baafa9c Binary files /dev/null and b/EFI/OC/ACPI/SSDT-PLUG-DRTNIA.aml differ diff --git a/EFI/OC/ACPI/SSDT-PMC.aml b/EFI/OC/ACPI/SSDT-PMC.aml new file mode 100755 index 0000000..c0eb2a9 Binary files /dev/null and b/EFI/OC/ACPI/SSDT-PMC.aml differ diff --git a/EFI/OC/Drivers/AudioDxe.efi.bak b/EFI/OC/Drivers/AudioDxe.efi.bak new file mode 100755 index 0000000..bc46922 Binary files /dev/null and b/EFI/OC/Drivers/AudioDxe.efi.bak differ diff --git a/EFI/OC/Drivers/CrScreenshotDxe.efi.bak b/EFI/OC/Drivers/CrScreenshotDxe.efi.bak new file mode 100755 index 0000000..3886838 Binary files /dev/null and b/EFI/OC/Drivers/CrScreenshotDxe.efi.bak differ diff --git a/EFI/OC/Drivers/HfsPlus.efi.bak b/EFI/OC/Drivers/HfsPlus.efi.bak new file mode 100755 index 0000000..154665a Binary files /dev/null and b/EFI/OC/Drivers/HfsPlus.efi.bak differ diff --git a/EFI/OC/Drivers/HfsPlusLegacy.efi b/EFI/OC/Drivers/HfsPlusLegacy.efi new file mode 100755 index 0000000..3d5581e Binary files /dev/null and b/EFI/OC/Drivers/HfsPlusLegacy.efi differ diff --git a/EFI/OC/Drivers/HiiDatabase.efi.bak b/EFI/OC/Drivers/HiiDatabase.efi.bak new file mode 100755 index 0000000..34074ed Binary files /dev/null and b/EFI/OC/Drivers/HiiDatabase.efi.bak differ diff --git a/EFI/OC/Drivers/NvmExpressDxe.efi b/EFI/OC/Drivers/NvmExpressDxe.efi new file mode 100755 index 0000000..d6585a1 Binary files /dev/null and b/EFI/OC/Drivers/NvmExpressDxe.efi differ diff --git a/EFI/OC/Drivers/OpenCanopy.efi.bak b/EFI/OC/Drivers/OpenCanopy.efi.bak new file mode 100755 index 0000000..e01b4c6 Binary files /dev/null and b/EFI/OC/Drivers/OpenCanopy.efi.bak differ diff --git a/EFI/OC/Drivers/OpenHfsPlus.efi.bak b/EFI/OC/Drivers/OpenHfsPlus.efi.bak new file mode 100755 index 0000000..e3cde2f Binary files /dev/null and b/EFI/OC/Drivers/OpenHfsPlus.efi.bak differ diff --git a/EFI/OC/Drivers/OpenPartitionDxe.efi.bak b/EFI/OC/Drivers/OpenPartitionDxe.efi.bak new file mode 100755 index 0000000..fdd6f10 Binary files /dev/null and b/EFI/OC/Drivers/OpenPartitionDxe.efi.bak differ diff --git a/EFI/OC/Drivers/OpenRuntime.efi b/EFI/OC/Drivers/OpenRuntime.efi new file mode 100755 index 0000000..f632af3 Binary files /dev/null and b/EFI/OC/Drivers/OpenRuntime.efi differ diff --git a/EFI/OC/Drivers/OpenUsbKbDxe.efi.bak b/EFI/OC/Drivers/OpenUsbKbDxe.efi.bak new file mode 100755 index 0000000..40981e1 Binary files /dev/null and b/EFI/OC/Drivers/OpenUsbKbDxe.efi.bak differ diff --git a/EFI/OC/Drivers/Ps2KeyboardDxe.efi.bak b/EFI/OC/Drivers/Ps2KeyboardDxe.efi.bak new file mode 100755 index 0000000..eb8e099 Binary files /dev/null and b/EFI/OC/Drivers/Ps2KeyboardDxe.efi.bak differ diff --git a/EFI/OC/Drivers/Ps2MouseDxe.efi.bak b/EFI/OC/Drivers/Ps2MouseDxe.efi.bak new file mode 100755 index 0000000..98ae4d2 Binary files /dev/null and b/EFI/OC/Drivers/Ps2MouseDxe.efi.bak differ diff --git a/EFI/OC/Drivers/UsbMouseDxe.efi.bak b/EFI/OC/Drivers/UsbMouseDxe.efi.bak new file mode 100755 index 0000000..ace7730 Binary files /dev/null and b/EFI/OC/Drivers/UsbMouseDxe.efi.bak differ diff --git a/EFI/OC/Drivers/XhciDxe.efi.bak b/EFI/OC/Drivers/XhciDxe.efi.bak new file mode 100755 index 0000000..2a08ee2 Binary files /dev/null and b/EFI/OC/Drivers/XhciDxe.efi.bak differ diff --git a/EFI/OC/Kexts/AppleALC.kext/Contents/Info.plist b/EFI/OC/Kexts/AppleALC.kext/Contents/Info.plist new file mode 100755 index 0000000..a034070 --- /dev/null +++ b/EFI/OC/Kexts/AppleALC.kext/Contents/Info.plist @@ -0,0 +1,12994 @@ + + + + + BuildMachineOSBuild + 19H512 + CFBundleDevelopmentRegion + en + CFBundleExecutable + AppleALC + CFBundleIdentifier + as.vit9696.AppleALC + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + AppleALC + CFBundlePackageType + KEXT + CFBundleShortVersionString + 1.5.8 + CFBundleSignature + ???? + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 1.5.8 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 12B45b + DTPlatformName + macosx + DTPlatformVersion + 11.0 + DTSDKBuild + 20A2408 + DTSDKName + macosx11.0 + DTXcode + 1220 + DTXcodeBuild + 12B45b + IOKitPersonalities + + ALCUserClientProvider + + CFBundleIdentifier + as.vit9696.AppleALC + IOClass + ALCUserClientProvider + IOMatchCategory + ALCUserClientProvider + IOProbeScore + 1000 + IOProviderClass + IOHDACodecDevice + IOUserClientClass + ALCUserClient + + HDA Hardware Config Resource + + CFBundleIdentifier + com.apple.driver.AppleHDAHardwareConfigDriver + HDAConfigDefault + + + AFGLowPowerState + + AwAAAA== + + Codec + agasecond - Realtek ALC256 (3246) for Xiaomi Pro Enhanced 2019 + CodecID + 283902550 + ConfigData + + ASccIAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxzwAUcdAAFHHgABRx9AAYcc8AGH + HQABhx4AAYcfQAGXHEABlx0QAZceqwGXHwQB + pxzwAacdAAGnHgABpx9AAbccEAG3HQEBtx4X + AbcfkAG3DAIB1xzwAdcdAAHXHgAB1x9AAecc + 8AHnHQAB5x4AAecfQAIXHDACFx0QAhceKwIX + HwQCFwwCAgUAEAIEACACBQBGAgQwpA== + + FuncGroup + 1 + LayoutID + 69 + WakeConfigData + + AbcMAgIXDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902569 + Comment + Custom ALC269VD for ThinkPad T430 + ConfigData + + ASccEAEnHQEBJx6mAScfkAFHHEABRx0BAUce + FwFHH5ABVxxQAVcdEAFXHiEBVx8CAXcc8AF3 + HQABdx4AAXcfQAGHHCABhx0QAYcegQGHHwIB + lxxwAZcdEAGXHqEBlx8CAacccAGnHRABpx6h + AacfAgG3HHABtx0QAbceoQG3HwIB1xxwAdcd + EAHXHqEB1x8CAecccAHnHRAB5x6hAecfAgFH + DAI= + + FuncGroup + 1 + LayoutID + 23 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 287143573 + Comment + Toshiba Satellite Pro C50 + ConfigData + + AKccQACnHRAApx4hAKcfAQC3HCAAtx0QALce + gQC3HwEAxxzwAMcdAADHHgAAxx9AANccMADX + HQEA1x4QANcfkADnHBAA5x0BAOceoADnH5AA + 9xzwAPcdAAD3HgAA9x9AAYcc8AGHHQABhx4A + AYcfQA== + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 351359128 + Comment + frankiezdh - Conexant CX20632 for HP ProDesk 480 G4 + ConfigData + + AZccUAGXHRABlx4hAZcfAQGnHBABpx0QAace + oQGnHwEBxxyAAccdQQHHHgEBxx8BAdccIAHX + HTEB1x6BAdcfAQHXDAIB9xxAAfcdAQH3Hh8B + 9x+R + + FuncGroup + 1 + LayoutID + 23 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 351359128 + Comment + phucnguyen2411 - CX20632 HP Elitedesk 800 G5 mini + ConfigData + + AXcMAAG3DAAB1xwRAdcdEQHXHoEB1x8CAdcM + AgHHHCABxx0RAcceAQHHHwIBpwckAaccMAGn + HRABpx6BAacfAgGXHEABlx0QAZceIQGXHwIB + 9xxRAfcdAQH3Hh8B9x+Q + + FuncGroup + 1 + LayoutID + 20 + WakeConfigData + + AXcMAAGnByQBtwwAAdcMAA== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 351359128 + Comment + CX20632 by Daniel + ConfigData + + AfccEAH3HQEB9x4XAfcfkgH3DAIBpxwgAacd + EAGnHosBpx8CAZccQAGXHRABlx4rAZcfAgHH + HNABxx1AAcceIQHHHwIBhxzwAYcdAAGHHgAB + hx9AAbcc8AG3HQABtx4AAbcfQAHXHPAB1x0A + AdceAAHXH0AB5xzwAecdAAHnHgAB5x9AAgcc + 8AIHHQACBx4AAgcfQAIXHPACFx0AAhceAAIX + H0ACZxzwAmcdAAJnHgACZx9A + + FuncGroup + 1 + LayoutID + 28 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Creative CA0132, default + CodecID + 285343761 + ConfigData + + ABcWHwAXFx4BVwoBAVcXDQFXGCQAtwwAANcc + 8ADXHQAA1x4AANcfQAEXBwQBJx+QATceAAE3 + H0ABhx4AAYcfQA== + + FuncGroup + 1 + LayoutID + 0 + + + AFGLowPowerState + + AwAAAA== + + Codec + Creative CA0132: Alienware 15 R2 + CodecID + 285343761 + ConfigData + + AVcKAQFXDwEAFxceABcWHwAXFRABVxcNAVcY + IAC3HhAAtx+QANcc8ADXHQAA1x4AANcfQADn + HPAA5x0AAOceAADnH0AA9xwgAPcfAQEHHPAB + Bx0AAQceAAEHH0ABFxxAARcegQEXHwEBJxwA + AScfkAE3HPABNx0AATceAAE3H0A= + + FuncGroup + 1 + LayoutID + 1 + + + AFGLowPowerState + + AwAAAA== + + Codec + Creative CA0132: Alienware 17, Desktop 2xIn 3xOut + CodecID + 285343761 + ConfigData + + AVcKAQFXDwEAFxceABcWHwAXFRABVxcNAVcY + JAC3HhAAtx+QANcc8ADXHQAA1x4AANcfQADn + HPAA5x0AAOceAADnH0AA9xwgAPcfAQEHHDAB + Bx4hAQcfAQEXHEABFx6BARcfAQEnHAABJx+Q + ATcc8AE3HQABNx4AATcfQA== + + FuncGroup + 1 + LayoutID + 2 + + + AFGLowPowerState + + AwAAAA== + + Codec + Creative CA0132, 2.0 + rear line-out + CodecID + 285343761 + ConfigData + + ABcXHgAXFRQBVwoBAScIgQFnCIABVxcNAVcY + JADXHPAA1x0AANceAADXH0AA5xzwAOcdAADn + HgAA5x9AAQceAQEnH5A= + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + Creative CA0132: R3Di default + CodecID + 285343761 + ConfigData + + AVcKAQFXDwEAFxceABcWHwAXFRQBVxcNAVcY + JAC3HUEA1xzwANcdAADXHgAA1x9AAOcc8ADn + HQAA5x4AAOcfQAD3HCAA9x8BAQccMAEHHgEB + Bx8BARccQAEXHgEBFx8BASccAAEnH5ABNxzw + ATcdAAE3HgABNx9AAYcc8AGHHQABhx4AAYcf + QA== + + FuncGroup + 1 + LayoutID + 4 + + + AFGLowPowerState + + AwAAAA== + + Codec + Creative CA0132, 2.0 front HP + Mic + CodecID + 285343761 + ConfigData + + ABcXHgAXFRIBVwoBAScIgQFnCIABVxcNAVcY + IQC3HiEA1xzwANcdAADXHgAA1x9AAQceAQEX + BwQBJx+Q + + FuncGroup + 1 + LayoutID + 5 + + + AFGLowPowerState + + AwAAAA== + + Codec + Creative CA0132, 5.1 with front HP + CodecID + 285343761 + ConfigData + + ABcXHgAXFRABVwoBAScIgQFnCIABVxcNAVcY + JADXHPAA1x0AANceAADXH0ABBx4hAScfkA== + + FuncGroup + 1 + LayoutID + 6 + + + AFGLowPowerState + + AwAAAA== + + Codec + Creative CA0132: ZxRi + CodecID + 285343761 + ConfigData + + AVcKAQFXDwEAF5AzABcXDwAXFg8AFxUNAVcX + GAFXGBQBVxcaAVcYkQFQoCABUQAYAV8BAAFT + AIMBVAAAAVcXDQFXGCQAtx1BANcc8ADXHQAA + 1x4AANcfQADnHPAA5x0AAOceAADnH0AA9xwg + APcfAQEHHDABBx4BAQcfAQEXHEABFx4BARcf + AQEnH5ABNxzwATcdAAE3HgABNx9AAYcc8AGH + HQABhx4AAYcfQA== + + FuncGroup + 1 + LayoutID + 7 + + + AFGLowPowerState + + AwAAAA== + + Codec + Creative CA0132 by Andres ZeroCross + CodecID + 285343761 + ConfigData + + IVcKAQC3HBAAtx1AALceAQC3HwEAxxwgAMcd + gADHHkUAxx8BANccIADXHUAA1x4BANcfAQD3 + HDAA9x1AAPceIQD3HwEBBxxAAQcdQAEHHiEB + Bx8CARccUAEXHUABFx4BARcfAQEnHFABJx2Q + AScepwEnH5A= + + FuncGroup + 1 + LayoutID + 9 + + + AFGLowPowerState + + AwAAAA== + + Codec + Creative CA0132 by Andres ZeroCross + CodecID + 285343761 + ConfigData + + AVcKAQAXFRQBJwiBAWcIgAFXFw0BVxgkIQce + AQEnH5A= + + FuncGroup + 1 + LayoutID + 10 + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom Creative CA0132 5.1 channel + CodecID + 285343761 + ConfigData + + IVcD8CFXFw0hVxgkIVcPgCC3HCAgtx1AILce + ASC3HwEgxxxgIMcdICDHHkUgxx8BINcc8CDX + HQAg1x4AINcfQCDnHPAg5x0AIOceACDnH0Ag + 9xwvIPcdQCD3HiEg9x8BIQccMCEHHUAhBx4h + IQcfASEXHEAhFx0QIRceASEXHwEhJxwQIScd + kSEnHqEhJx+QITcc8CE3HQAhNx4AITcfQCGH + HFAhhx1gIYceASGHHwE= + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom Creative CA0132 + CodecID + 285343761 + ConfigData + + AVcKAQAXFx8AFxUQAScIgQFnCIABVxcNAVcY + JAEnH5A= + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + Codec + Creative CA0132 5.1 channel for Alienware-M17X-R4 by DalianSky + CodecID + 285343761 + ConfigData + + ALccEAC3HUEAtx4QALcfkADHHCAAxx0gAMce + RQDHHwEA1xzwANcdAADXHgAA1x9AAOcc8ADn + HQAA5x4AAOcfQAD3HFAA9x1AAPceIQD3HwEB + BxzwAQcdAAEHHgABBx9AARcccAEXHRABFx4B + ARcfAQEnHIABJx2RASceoAEnH5ABNxzwATcd + AAE3HgABNx9AAYcc8AGHHQABhx4AAYcfQA== + + FuncGroup + 1 + LayoutID + 99 + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Cirrus Logic CS4210 + CodecID + 269697552 + ConfigData + + AFccEABXHUAAVx4hAFcfAABnHCAAZx0AAGce + FwBnH5AAdxwwAHcdkAB3HoEAdx8AAJccQACX + HQAAlx6gAJcfkA== + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Cirrus Logic -CS4213 + CodecID + 269697555 + ConfigData + + AEccEABHHRAARx4hAEcfAABXHCAAVx0AAFce + FwBXH5AAZxwwAGcdEABnHoEAZx8AAHccQAB3 + HQAAdx6gAHcfkABXDAI= + + FuncGroup + 1 + LayoutID + 28 + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - AD1984 - for_IBM_Lenovo_ThinkPad_T61_T61p + CodecID + 299112836 + ConfigData + + ARccEAEXHUABFx4hARcfAAFHHCABRx1QAUce + gQFHHwABJxwwAScdAAEnHhcBJx+QAScMAgFX + HEABVx0AAVcepwFXH5ABxxyAAccdUAHHHoEB + xx8BAbccoAG3HRABtx5EAbcfIQ== + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - AD1984A + CodecID + 299112778 + ConfigData + + ISccECEnHUAhJx4BIScfASFHHCAhRx2QIUce + oSFHHwIhVxwwIVcdMCFXHoEhVx8BIRccQCEX + HUAhFx4hIRcfAg== + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - AD1984A - Version2 + CodecID + 299112778 + ConfigData + + ISccECEnHUAhJx4RIScfkCFHHCAhRx2QIUce + oSFHHwIhVxwwIVcdMCFXHoEhVx8BIRccQCEX + HUAhFx4hIRcfAg== + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AwAAAA== + + Codec + AD1984A - giesteira + CodecID + 299112778 + ConfigData + + ASccAAEnHUABJx4BAScfAQHHHBABxx0wAcce + gQHHHwEBdxwgAXcdEAF3HqYBdx+5ARccMAEX + HUABFx4hARcfAQFnHEABZx1AAWceFwFnH5EB + pxxQAacdEAGnHvcBpx9RAbccYAG3HWABtx5E + AbcfAQE3HPABNx0QATceHwE3H1E= + + FuncGroup + 1 + LayoutID + 44 + + + AFGLowPowerState + + AwAAAA== + + Codec + AD1988A by chrome + CodecID + 299112840 + ConfigData + + ARccQAEXHUABFx4hARcfAQEnHAABJx1AASce + EQEnHwEBNxzwATcdAAE3HgABNx9AAUccYAFH + HZABRx6gAUcfkAFXHIABVx0wAVcegQFXHwEB + ZxwgAWcdEAFnHgEBZx8BAXccUAF3HZABdx6B + AXcfAQGHHPABhx0AAYceAAGHH0ABtxygAbcd + 8QG3HkUBtx8BAccc8AHHHQABxx4AAccfQAJH + HBACRx1gAkceAQJHHwECVxwwAlcdIAJXHgEC + Vx8B + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - ADI-1988B + CodecID + 299112843 + ConfigData + + ARccEAEXHUABFx4hARcfAQEnHCABJx1AASce + AQEnHwEBRxxAAUcdkAFHHqEBRx8BAVccUAFX + HTABVx6BAVcfAQF3HHABdx2QAXceoQF3HwEB + txzwAbcd8QG3HkUBtx8B + + FuncGroup + 1 + LayoutID + 5 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - ADI-1988B + CodecID + 299112843 + ConfigData + + ARccEAEXHUABFx4hARcfAQEnHCABJx1AASce + EQEnHwEBRxwwAUcdkAFHHqABRx+QAWccQAFn + HRABZx4BAWcfAQF3HFABdx2QAXcegQF3HwEB + txxgAbcd8QG3HkUBtx8BAccccAHHHfEBxx7F + AccfAQHXHIAB1x3xAdceVgHXHxgCRxyQAkcd + YAJHHgECRx8BAlcckAJXHSACVx4BAlcfAQ== + + FuncGroup + 1 + LayoutID + 7 + + + AFGLowPowerState + + AwAAAA== + + Codec + 0x11d4198b + CodecID + 299112843 + Comment + Custom AD1988B by Rodion + ConfigData + + AXccIAF3HZABdx6gAXcfkQFHHCEBRx2QAUce + gQFHHwIBJxwQAScdQAEnHhEBJx8BAkccEQJH + HWACRx4RAkcfAQFnHBIBZx0QAWceEQFnHwEC + VxwUAlcdIAJXHhECVx8BAccc8AHHHQABxx4A + AccfQAE3HPABNx0AATceAAE3H0ABpxzwAacd + AAGnHgABpx9AAYcc8AGHHQABhx4AAYcfQA== + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - ADI-2000B + CodecID + 299145371 + ConfigData + + ARccEAEXHUABFx4hARcfAQEnHCABJx1AASce + AQEnHwEBRxxAAUcdkAFHHqEBRx8BAVccUAFX + HTABVx6BAVcfAQF3HHABdx2QAXceoQF3HwEB + txzwAbcd8QG3HkUBtx8B + + FuncGroup + 1 + LayoutID + 5 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - ADI-2000B + CodecID + 299145371 + ConfigData + + ARccMAEXHUABFx4hARcfAQEnHBABJx1AASce + EQEnHwEBRxxAAUcdkAFHHqABRx+QAWccUAFn + HRABZx4BAWcfAQF3HCABdx2QAXcegQF3HwEB + txygAbcd8QG3HkUBtx8BAcccYAHHHfEBxx7F + AccfAQHXHLAB1x3xAdceVgHXHxgCRxxwAkcd + YAJHHgECRx8BAlccgAJXHSACVx4BAlcfAQ== + + FuncGroup + 1 + LayoutID + 7 + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC215 for HP 830 G6 for 965987400abc + CodecID + 283902485 + ConfigData + + AUccEAFHHQEBRx4XAUcfmQIXHCACFx0QAhce + IQIXHwECFwwCASccMAEnHRgBJx6BAScfAQGX + HEABlx0BAZcepgGXH5kBRwwC + + FuncGroup + 1 + LayoutID + 18 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Goldfish64 - ALC221 for HP Compaq Pro 4300/Pro 6300/Elite 8300 (All Form Factors) + CodecID + 283902497 + ConfigData + + AUccIAFHHUABRx4BAUcfAQFHDAIBdxwQAXcd + AQF3HhcBdx+QAXcMAgGnHEABpx0QAacegQGn + HwIBpwckAbccMAG3HTABtx6BAbcfAQIXHFAC + Fx0QAhceIQIXHwICFwwC + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAgF3DAIBpwckAhcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - ALC221 for HP ELITE DESK 800 G1 + CodecID + 283902497 + ConfigData + + AUccIAFHHUABRx4RAUcfkQFHDAIBpxwwAacd + EAGnHoEBpx8CAXccQAF3HQABdx4XAXcfkAG3 + HFABtx0wAbcegQG3HwECFxxwAhcdEAIXHiEC + Fx8CAhcMAg== + + FuncGroup + 1 + LayoutID + 15 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC221 for HP ProDesk 400 G2 Desktop Mini PC by dragonbbc + CodecID + 283902497 + ConfigData + + AXccEAF3HQEBdx4XAXcfkAF3DAICFxwgAhcd + EAIXHiECFx8CAaccMAGnHRABpx6BAacfAg== + + FuncGroup + 1 + LayoutID + 88 + WakeConfigData + + AXcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC222 aka ALC3205-CG for HP EliteDesk 800 G6 Mini + CodecID + 283902498 + ConfigData + + AXccEAF3HQEBdx4XAXcfkAF3DAIBhxxAAYcd + AAGHHqABhx+QAhccUAIXHRACFx4hAhcfAgIX + DAI= + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AXcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC225/ALC3253 on dell 7579 by ChalesYu + CodecID + 283902501 + ConfigData + + ASccUAEnHQEBJx6mAScftwE3HAABNx0AATce + AAE3H0ABRxywAUcdAQFHHhcBRx+QAWcc8AFn + HREBZx4RAWcfQQF3HPABdx0RAXceEQF3H0EB + hxzwAYcdEQGHHhEBhx9BAZccQAGXHRABlx6B + AZcfAQGnHPABpx0RAaceEQGnH0EBtxzwAbcd + EQG3HhEBtx9BAdccAQHXHQAB1x5gAdcfQAHn + HPAB5x0RAeceEQHnH0ECFxwgAhcdEAIXHiEC + Fx8EAUcMAg== + + FuncGroup + 1 + LayoutID + 28 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom ALC225/ALC3253 for Dell Inspiron 17-7779 by Constanta + CodecID + 283902501 + ConfigData + + ASccMAEnHQABJx6gAScfkAFHHEABRx0AAUce + FwFHH5ABlxxwAZcdEAGXHoEBlx8AAhccIAIX + HRACFx4hAhcfAAFHDAI= + + FuncGroup + 1 + LayoutID + 30 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom ALC225/ALC3253 by ChalesYu + CodecID + 283902501 + ConfigData + + ASccEAEnHQEBJx6mAScfmQG3HCABtx0AAbce + FwG3H5kBlxwwAZcdEAGXHoEBlx8CAhccQAIX + HRACFx4hAhcfAgG3DAIBRwwCAhcMAg== + + FuncGroup + 1 + LayoutID + 33 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom ALC225/ALC3253 for Dell Inspiron 15-5379 by fast900 + CodecID + 283902501 + ConfigData + + ASccUAEnHQABJx6gAScfkAFHHEABRx0AAUce + FwFHH5ABlxxwAZcdEAGXHoEBlx8AAhccIAIX + HRACFx4hAhcfAAFHDAI= + + FuncGroup + 1 + LayoutID + 90 + WakeConfigData + + AUcMAgIXDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Andres Laptop Patch ALC230 Lenovo 310-14ISK + CodecID + 283902512 + ConfigData + + ASccEAEnHQABJx6gAScfkAFHHCABRx0AAUce + FwFHH5ABRwwCAZccMAGXHRABlx6BAZcfBAIX + HEACFx0QAhceKwIXHwQCFwwCATccUAE3HQAB + Nx4AATcfQAHXHGAB1x2wAdceZgHXH0A= + + FuncGroup + 1 + LayoutID + 13 + WakeConfigData + + AUcMAgIXDAIBlwcl + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC230 for Lenovo Ideapad 320 by maiconjs + CodecID + 283902512 + ConfigData + + AUccEAFHHQEBRx4XAUcfkAFHDAICFxwgAhcd + EAIXHiECFx8TAhcMAgEnHDABJx0BASceoAEn + H5ABlxxAAZcdEQGXHoEBlx+T + + FuncGroup + 1 + LayoutID + 20 + WakeConfigData + + AUcMAgIXDAIBlwcl + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC233 + CodecID + 283902515 + ConfigData + + AUccEAFHHQABRx4XAUcfkAGXHCABlx0QAZce + qwGXHwMBpxwwAacdAAGnHqABpx+QAhccQAIX + HRACFx4rAhcfAwFHDAI= + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom Realtek ALC233 (3236) + CodecID + 283902515 + ConfigData + + AUccEAFHHQABRx4XAUcfkAG3HCABtx0AAbce + oAG3H5ACFxwwAhcdEAIXHiECFx8BAUcMAg== + + FuncGroup + 1 + LayoutID + 4 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC233/ALC3236 + CodecID + 283902515 + ConfigData + + AUccEAFHHQABRx4XAUcfkAGXHCABlx2QAZce + iwGXHwIBtxwwAbcdkAG3HqABtx+QAhccQAIX + HUACFx4rAhcfAgFHDAIBtwwC + + FuncGroup + 1 + LayoutID + 5 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC233 for Asus X550LC + CodecID + 283902515 + ConfigData + + AUccEAFHHQABRx4XAUcfmQIXHCACFx0QAhce + IQIXHwMBpxwwAacdAQGnHqABpx+ZAZccQAGX + HRABlx6BAZcfAw== + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AwAAAA== + + Codec + Andres ZeroCross - Realtek ALC233 for Asus A451LB-WX076D + CodecID + 283902515 + ConfigData + + AUccEAFHHQEBRx4XAUcfkAGXHCABlx0QAZce + gQGXHwQBtxwwAbcdAQG3HqABtx+QAhccQAIX + HRACFx4hAhcfBAFHDAIBtwwCAhcMAg== + + FuncGroup + 1 + LayoutID + 21 + WakeConfigData + + AUcMAgG3DAICFwwC + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom for Realtek ALC233 for SONY VAIO Fit 14E(SVF14316SCW) by SquallATF + CodecID + 283902515 + ConfigData + + ASccQAEnHQEBJx6mAScfkAGnHDABpx1QAace + gQGnHwMBRxwQAUcdAQFHHhcBRx+QAUcMAgIX + HCACFx0QAhceIQIXHwMCFwwC + + FuncGroup + 1 + LayoutID + 27 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom for Realtek ALC3236 for Asus TP500LN by Mohamed Khairy + CodecID + 283902515 + ConfigData + + ASccEAEnHQABJx4AAScfQAFHHCABRx0AAUce + EwFHH5ABtxxAAbcdAAG3HqABtx+QAdccUAHX + HZAB1x5FAdcfQAIXHDACFx0QAhceIQIXHwAB + RwwCAhcMAg== + + FuncGroup + 1 + LayoutID + 28 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom by Mirone - Realtek ALC233 (ALC3236) for Asus X550LDV + CodecID + 283902515 + ConfigData + + AUccEAFHHQEBRx4TAUcfmQGXHEABlx0QAZce + gQGXHwABpxwwAacdAQGnHqABpx+ZAhccIAIX + HRACFx4hAhcfAAFHDAI= + + FuncGroup + 1 + LayoutID + 29 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - ALC233 (ALC3236) for ASUS VIVOBOOK S301LA + CodecID + 283902515 + ConfigData + + AaccMAGnHQABpx6nAacfkAGXHEABlx0QAZce + gQGXHwABRxxQAUcdAAFHHhcBRx+QAUcMAgIX + HGACFx0QAhceIQIXHwACFwwC + + FuncGroup + 1 + LayoutID + 32 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - ALC233 (ALC3236) for ASUS VIVOBOOK S451LA + CodecID + 283902515 + ConfigData + + AhccIAIXHRACFx4hAhcfAAIXDAIBtxwwAbcd + AAG3HqcBtx+QAZccQAGXHRABlx6BAZcfAAFH + HFABRx0AAUceFwFHH5ABRwwC + + FuncGroup + 1 + LayoutID + 33 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC235 + CodecID + 283902517 + ConfigData + + ASccEAEnHQABJx6gAScfkAFHHCABRx0AAUce + FwFHH5ABdxwwAXcdAAF3HgABdx9AAZccQAGX + HRABlx6LAZcfAAHXHFAB1x2QAdce9wHXH0AC + FxxgAhcdEAIXHisCFx8BAUcMAgIXDAI= + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC235 for Ienovo by soto2080 + CodecID + 283902517 + ConfigData + + ASccEAEnHAEBJxygAScckAFHHAABRxwBAUcc + EAFHHJABlxwwAZccEAGXHIEBlxwCAhccIAIX + HBACFxwhAhccAgF3HPABdx0AAXceAAF3H0AB + hxzwAYcdAAGHHgABhx9AAacc8AGnHQABpx4A + AacfQAG3HPABtx0AAbceAAG3H0AB1xzwAdcd + AAHXHgAB1x9AAUcMAg== + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC235 for Lenovo Rescuer 15ISK by Z39 + CodecID + 283902517 + ConfigData + + ASccIAEnHQEBJx6mAScfkAFHHBABRx0BAUce + FwFHH5ABlxxAAZcdEAGXHoEBlx8EAhccMAIX + HRACFx4hAhcfBAF3HPABdx0AAXceAAF3H0AB + hxzwAYcdAAGHHgABhx9AAacc8AGnHQABpx4A + AacfQAG3HPABtx0AAbceAAG3H0AB1xzwAdcd + AAHXHgAB1x9AAecc8AHnHQAB5x4AAecfQAFH + DAICFwwC + + FuncGroup + 1 + LayoutID + 12 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + the-braveknight - Realtek ALC235 for Lenovo Legion Y520 + CodecID + 283902517 + ConfigData + + ASccQAEnHQABJx6gAScfsAFHHBABRx0AAUce + FwFHH5ABRwwCAZccMAGXHRABlx6BAZcfAAIX + HGACFx0QAhceIQIXHwA= + + FuncGroup + 1 + LayoutID + 14 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + qiuchenly - Realtek ALC235 for ASUS FX53VD + CodecID + 283902517 + ConfigData + + AbccAAG3HQEBtx6gAbcfmQIXHBACFx0QAhce + KwIXHwEBRxwgAUcdAQFHHhABRx+ZAZccMAGX + HRABlx6LAZcfAQEnHPABJx0AASceAAEnH0AB + dxzwAXcdAAF3HgABdx9AAYcc8AGHHQABhx4A + AYcfQAGnHPABpx0AAaceAAGnH0AB1xzwAdcd + AAHXHgAB1x9AAecc8AHnHQAB5x4AAecfQAHX + HPAB1x0AAdceAAHXH0AB1xzwAdcdAAHXHgAB + 1x9A + + FuncGroup + 1 + LayoutID + 15 + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - Realtek ALC235 for ASUS GL553VD + CodecID + 283902517 + ConfigData + + AhccIAIXHRACFx4rAhcfAAG3HDABtx0AAbce + pwG3H5ABlxwwAZcdEAGXHosBlx8BAUccQAFH + HQABRx4XAUcfkAFHDAI= + + FuncGroup + 1 + LayoutID + 16 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC235 for Lenovo ThinkCentre Tiny M720q by marian + CodecID + 283902517 + ConfigData + + AUccEAFHHQEBRx4XAUcfkAFHDAICFxwfAhcd + EAIXHiECFx8CAhcMAgGXHCABlx0QAZceoAGX + H5IBpxwwAacdEAGnHoABpx8C + + FuncGroup + 1 + LayoutID + 17 + WakeConfigData + + AUcMAgIXDAIBlwwAAacMAA== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC235 for Lenovo C530 Desktop PC by Andres ZeroCross + CodecID + 283902517 + ConfigData + + AScc8AEnHQABJx4AAScfQAFHHPABRx0AAUce + AAFHH0ABdxzwAXcdAAF3HgABdx9AAYcc8AGH + HQABhx4AAYcfQAGXHDABlx0QAZceiwGXHwIB + pxwQAacdAQGnHqABpx+QAbccIAG3HQEBtx4X + AbcfkAHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAhccQAIXHRACFx4rAhcfAgG3 + DAICFwwC + + FuncGroup + 1 + LayoutID + 21 + WakeConfigData + + AbcMAgIXDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC235 for Asus ROG GL553VD-FY380 by Andres ZeroCross + CodecID + 283902517 + ConfigData + + AbccEAG3HQABtx6gAbcfkAFHHCABRx0AAUce + FwFHH5ABlxwwAZcdEAGXHoEBlx8AAhccQAIX + HRACFx4hAhcfAQFHDAICFwwC + + FuncGroup + 1 + LayoutID + 22 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC235 for Asus TUF FX705GM by TheRealGudv1n + CodecID + 283902517 + ConfigData + + AhccIAIXHRACFx4rAhcfAAEnHDABJx0AASce + pwEnH5ABlxwwAZcdEAGXHosBlx8BAUccQAFH + HQABRx4XAUcfkAFHDAI= + + FuncGroup + 1 + LayoutID + 24 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + vusun123 - Realtek ALC235 for Lenovo Legion Y520 + CodecID + 283902517 + ConfigData + + ASccQAEnHQABJx6gAScfsAFHHBABRx0AAUce + FwFHH5ABRwwCAZccMAGXHRABlx6BAZcfAAIX + HGACFx0QAhceIQIXHwA= + + FuncGroup + 1 + LayoutID + 28 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC235 for Lenovo Qitian M420 by Cryse Hillmes + CodecID + 283902517 + ConfigData + + AScc8AEnHQABJx4AAScfQAFHHBABRx0BAUce + FwFHH5ABdxzwAXcdAAF3HgABdx9AAYcc8AGH + HQABhx4AAYcfQAGXHHABlx0QAZceoQGXHwIB + pxwgAacdEAGnHoEBpx8CAbccgAG3HRABtx4B + AbcfAQHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAhccUAIXHRACFx4hAhcfAgFH + DAIBtwwCAhcMAgIXB8ACFwiCAZcHJA== + + FuncGroup + 1 + LayoutID + 35 + WakeConfigData + + AUcMAgG3DAICFwwCAhcHwAIXCIIBlwck + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC235 for Lenovo Ideacentre Mini 5 + CodecID + 283902517 + ConfigData + + AScc8AEnHQABJx4AAScfQAFHHPABRx0AAUce + AAFHH0ABdxzwAXcdAAF3HgABdx9AAYcc8AGH + HQABhx4AAYcfQAGXHDABlx0RAZcegQGXHwIB + pxzwAacdAAGnHgABpx9AAbcc8AG3HQABtx4A + AbcfQAHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAhccEAIXHRACFx4hAhcfAgGX + ByQBlwiBAhcMAgIXB8ACFwiC + + FuncGroup + 1 + LayoutID + 37 + WakeConfigData + + AZcHJAGXCIECFwwCAhcHwAIXCII= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC235 for Lenovo TianYi 510s Mini by DalianSky + CodecID + 283902517 + ConfigData + + AUccEAFHHQEBRx4XAUcfkAFHDAICFxwfAhcd + EAIXHiECFx8CAhcMAgGXHCABlx0QAZceoAGX + H5IBpxwwAacdEAGnHoABpx8C + + FuncGroup + 1 + LayoutID + 99 + WakeConfigData + + AUcMAgIXDAIBlwwAAacMAA== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC236 + CodecID + 283902518 + ConfigData + + ASccEAEnHQABJx6mAScfkAFHHCABRx0AAUce + FwFHH5ABlxwwAZcdEAGXHoEBlx8EAhccQAIX + HRACFx4hAhcfBAFHDAI= + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Jake Lo - Realtek ALC236 + CodecID + 283902518 + ConfigData + + ASccEAEnHQEBJx6gAScfkAE3HPABNx0AATce + AAE3H0ABRxwwAUcdAQFHHhABRx+QAUcMAgGH + HPABhx0AAYceAAGHH0ABlxwgAZcdMAGXHosB + lx8BAacc8AGnHQABpx4AAacfQAG3HPABtx0A + AbceAAG3H0AB1xzwAdcdAAHXHgAB1x9AAecc + 8AHnHQAB5x4AAecfQAIXHEACFx1AAhceKwIX + HwECFwwCABcgAAAXIXIAFyJrABcjEA== + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC236 for Lenovo Xiaoxin Air 14IKBR by AlexanderLake + CodecID + 283902518 + ConfigData + + ASccEAEnHQEBJx6gAScfkAFHHEABRx0BAUce + EAFHH5ABRwwCAZccIAGXHRABlx6LAZcfAQIX + HFACFx0QAhceKwIXHwECFwwC + + FuncGroup + 1 + LayoutID + 12 + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom - Realtek ALC236 for Lenovi Air 13 Pro by rexx0520 + CodecID + 283902518 + ConfigData + + ASccAAEnHQEBJx6mAScfkAFHHBABRx0BAUce + EAFHH5ABdxzwAXcdAAF3HgABdx9AAYcc8AGH + HQABhx4AAYcfQAGXHCABlx2QAZceqwGXHwAB + pxzwAacdAAGnHgABpx9AAbcc8AG3HQABtx4A + AbcfQAHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAhccMAIXHUACFx4rAhcfAAFH + DAI= + + FuncGroup + 1 + LayoutID + 13 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + erinviegas - ALC236 for Lenovo Ideapad 330S + CodecID + 283902518 + ConfigData + + ASccAAEnHQEBJx6gAScfkAFHHBABRx0BAUce + EAFHH5ABRwwCAZccIAGXHRABlx6LAZcfAAIX + HDACFx0QAhceKwIXHwACFwwC + + FuncGroup + 1 + LayoutID + 14 + WakeConfigData + + AUcMAgIXDAIBlwcl + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - ALC236 for Lenovo Ideapad 500-15ISK + CodecID + 283902518 + ConfigData + + ASccAAEnHQEBJx6mAScfkAFHHBABRx0BAUce + EAFHH5ABRwwCAZccIAGXHRABlx6LAZcfAAIX + HDACFx0QAhceKwIXHwACFwwC + + FuncGroup + 1 + LayoutID + 15 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC236 for Lenovo LEGION Y7000/Y530 by xiaoM + CodecID + 283902518 + ConfigData + + ASccMAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxwgAUcdkAFHHhcBRx+QAUcMAgGH + HPABhx0AAYceAAGHH0ABlxwgAZcdEAGXHosB + lx8BAacc8AGnHQABpx4AAacfQAG3HPABtx0A + AbceAAG3H0AB1xzwAdcdAAHXHgAB1x9AAecc + 8AHnHQAB5x4AAecfQAIXHBACFx0QAhceKwIX + HwECFwwC + + FuncGroup + 1 + LayoutID + 18 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + RodionS - ALC236 for Lenovo Ideapad 320s 14ikb + CodecID + 283902518 + ConfigData + + ASccAAEnHQEBJx6mAScfkAFHHBABRx0BAUce + EAFHH5ABRwwCAZccIAGXHRABlx6LAZcfAAIX + HDACFx0QAhceKwIXHwABRwwCAhcMAg== + + FuncGroup + 1 + LayoutID + 16 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC236 for DELL-5488 by Daggeryu + CodecID + 283902518 + ConfigData + + ASccQAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxwQAUcdAQFHHhcBRx+QAUcMAgGH + HPABhx0AAYceAAGHH0ABlxzwAZcdEQGXHhEB + lx9BAacc8AGnHQABpx4AAacfQAG3HPABtx0A + AbceAAG3H0AB1xzwAdcdAAHXHgAB1x9AAecc + 8AHnHQAB5x4AAecfQAIXHCACFx0QAhceIQIX + HwICFwwC + + FuncGroup + 1 + LayoutID + 54 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC236 for Lenovo Air 13 IWL by DalianSky + CodecID + 283902518 + ConfigData + + ATcc8AE3HQABNx4AATcfQAFHHBABRx0BAUce + FwFHH5ABRwwCAYcc8AGHHQABhx4AAYcfQAGX + HDABlx0QAZcegQGXHwQBpxzwAacdAAGnHgAB + px9AAbcc8AG3HQABtx4AAbcfQAHXHEUB1x0b + AdceZgHXH0AB5xzwAecdAAHnHgAB5x9AAhcc + HwIXHRACFx4hAhcfBA== + + FuncGroup + 1 + LayoutID + 99 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC245 for Ienovo by soto2080 + CodecID + 283902533 + ConfigData + + AUccEAFHHQEBRx4XAUcfkAFHDAICFxwgAhcd + EAIXHiECFx8EAhcMAgGXHEABlx0QAZcegQGX + HwQ= + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAgIXDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC245 for Ienovo by soto2080 + CodecID + 283902533 + ConfigData + + AXccEAF3HQEBdx4XAXcfkAF3DAICFxwgAhcd + EAIXHiECFx8EAhcMAgGXHEABlx0QAZcegQGX + HwQ= + + FuncGroup + 1 + LayoutID + 12 + WakeConfigData + + AXcMAgIXDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + lunjielee - Realtek ALC245 for HP Omen 2020 + CodecID + 283902533 + ConfigData + + AXccEAF3HQEBdx4XAXcfkAGXHDABlx0QAZce + gQGXHwMCFxwgAhcdEAIXHiECFx8DAhcMAg== + + FuncGroup + 1 + LayoutID + 13 + WakeConfigData + + AhcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC255 + CodecID + 283902549 + ConfigData + + ASccEAEnHQABJx6mAScfkAFHHCABRx0AAUce + FwFHH5ABlxwwAZcdEAGXHosBlx8AAhccUAIX + HRACFx4rAhcfAgFHDAI= + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + Codec + ALC255 for Dell Optiplex7060/7070MT(Separate LineOut) + CodecID + 283902549 + ConfigData + + AUccEAFHHQEBRx4XAUcfkAGXHEABlx0QAZce + iwGXHwIBtxwgAbcdEAG3HgEBtx8BAhccMAIX + HRACFx4rAhcfAgFHDAIBtwwCAhcMAg== + + FuncGroup + 1 + LayoutID + 66 + WakeConfigData + + AUcMAgG3DAICFwwC + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Armênio - Realtek ALC255/ALC3234 - Dell 7348 + CodecID + 283902549 + ConfigData + + ASccEAEnHQEBJx6gAScfkAGXHCABlx0wAZce + gQGXHwEBRxwwAUcdYQFHHhABRx+QAUcMAgIX + HEACFx1wAhceIQIXHwECFwwC + + FuncGroup + 1 + LayoutID + 86 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + Codec + Realtek ALC255(3234) for Dell Optiplex series by Heporis + CodecID + 283902549 + ConfigData + + AScc8AEnHQABJx4AAScfQAFHHBABRx0BAUce + FwFHH5ABdxzwAXcdAAF3HgABdx9AAYcc8AGH + HQABhx4AAYcfQAGXHEABlx0QAZceiwGXHwIB + pxzwAacdAAGnHgABpx9AAbccIAG3HRABtx4B + AbcfAQHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAhccMAIXHRACFx4rAhcfAgFH + DAI= + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC255_v1 + CodecID + 283902549 + ConfigData + + AbccIAG3HQABtx6gAbcfkAFHHDABRx0AAUce + FwFHH5ACFxxQAhcdEAIXHiECFx8AAUcMAgIX + DAI= + + FuncGroup + 1 + LayoutID + 13 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC255 Gigabyte Brix BRI5(H) by Najdanovic Ivan + CodecID + 283902549 + ConfigData + + ASccMAEnHQEBJx6gAScfkAGXHCABlx0RAZce + gQGXHwICFxxAAhcdEQIXHiECFx8CAhcMAg== + + FuncGroup + 1 + LayoutID + 15 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC255_v2 + CodecID + 283902549 + ConfigData + + ASccEAEnHQABJx6mAScfkAFHHCABRx0AAUce + FwFHH5ABdxwwAXcdAAF3HgABdx9AAdccQAHX + HQAB1x5wAdcfQAIXHFACFx0QAhceIQIXHwIB + RwwC + + FuncGroup + 1 + LayoutID + 17 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + DuNe - Realtek ALC255 for Aorus X5V7 + CodecID + 283902549 + ConfigData + + ASccEAEnHQABJx6mAScfkAFHHCABRx0AAUce + FwFHH5ABtxwhAbcdAAG3HhcBtx+QAXccMAF3 + HQABdx4AAXcfQAHXHEAB1x0AAdcecAHXH0AC + FxxQAhcdEAIXHiECFx8CAaccYAGnHRABpx6B + AacfAgHnHHAB5x0QAeceRQHnHwIBRwwC + + FuncGroup + 1 + LayoutID + 18 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC255 for Dell 7447 by was3912734 + CodecID + 283902549 + ConfigData + + ASccEAEnHQEBJx6mAScfkAFHHEABRx0BAUce + FwFHH5ABRwwCAXccQQF3HQEBdx4XAXcfkAGX + HCABlx0RAZceiwGXHwIB5xxgAecdEQHnHkUB + 5x8CAhccUAIXHRACFx4rAhcfAgIXDAI= + + FuncGroup + 1 + LayoutID + 20 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC255 for Asus X441UA-WX096D by Andres ZeroCross + CodecID + 283902549 + ConfigData + + AZcc8AGXHRABlx6BAZcfAgGnHDABpx0BAace + oAGnH5ABtxwQAbcdAQG3HhcBtx+QAhccIAIX + HRACFx4hAhcfAgG3DAICFwwC + + FuncGroup + 1 + LayoutID + 21 + WakeConfigData + + AbcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC255 for Asus X556UA m-dudarev + CodecID + 283902549 + ConfigData + + AUccEAFHHQEBRx4XAUcfkAGXHCABlx0QAZce + gQGXHwQCFxwgAhcdEAIXHiECFx8EAbccMAG3 + HQEBtx6gAbcfkAFHDAI= + + FuncGroup + 1 + LayoutID + 27 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC255 for Lenovo B470 - vusun123 + CodecID + 283902549 + ConfigData + + ASccYAEnHQABJx6gAScfkAFHHCABRx0AAUce + FwFHH5ABRwwCAhccMAIXHRACFx4hAhcfAQ== + + FuncGroup + 1 + LayoutID + 28 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + dhinakg - Realtek ALC255 for Acer Predator G3-571 + CodecID + 283902549 + ConfigData + + AUccEAFHHQEBRx4XAUcfkAGXHCABlx0QAZce + gQGXHwQCFxwgAhcdEAIXHiECFx8EAbccMAG3 + HQEBtx6gAbcfkAFHDAI= + + FuncGroup + 1 + LayoutID + 29 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + HongyuS - Realtek ALC255 for XiaoMiAir 13.3 + CodecID + 283902549 + ConfigData + + ASccMAEnHQEBJx6mAScfkAFHHBABRx0BAUce + FwFHH5ABRwwCAXccAAF3HQABdx4AAXcfQAGH + HPABhx0AAYceAAGHH0ABlxwgAZcdEAGXHoEB + lx8EAacc8AGnHQABpx4AAacfQAG3HPABtx0A + AbceAAG3H0AB1xwtAdcdmgHXHvcB1x9AAecc + 8AHnHQAB5x4AAecfQAIXHCACFx0QAhceIQIX + HwQCFwwC + + FuncGroup + 1 + LayoutID + 30 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + cowpod - Realtek ALC255 for UX360CA + CodecID + 283902549 + ConfigData + + AUccEAFHHQABRx4XAUcfkAFHDAICFxwgAhcd + EAIXHiECFx8AAhcMAgEnHDABJx0AAScepgEn + H5ABlxxAAZcdAAGXHoEBlx8A + + FuncGroup + 1 + LayoutID + 31 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + DoctorStrange96 - Realtek ALC255 for Acer Aspire A51x + CodecID + 283902549 + ConfigData + + ASccQAEnHQEBJx6mAScfkAFHHCABRx0BAUce + FwFHH5ABRwwCAZcccAGXHRABlx6LAZcfAgIX + HDACFx0QAhceIQIXHwICFwwC + + FuncGroup + 1 + LayoutID + 71 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + DalianSky - Realtek ALC255 (3246) for XiaoMi Air + CodecID + 283902549 + ConfigData + + ASccMAEnHQEBJx6mAScfkAFHHBABRx0BAUce + FwFHH5ABRwwCAXcc8AF3HQABdx4AAXcfQAGH + HPABhx0AAYceAAGHH0ABlxxwAZcdEAGXHosB + lx8CAacc8AGnHQABpx4AAacfQAG3HPABtx0A + AbceAAG3H0AB1xzwAdcdAAHXHgAB1x9AAecc + 8AHnHQAB5x4AAecfQAIXHCACFx0QAhceKwIX + HwQCFwwC + + FuncGroup + 1 + LayoutID + 99 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + DalianSky - Realtek ALC255 (3246) for alienware alpha r2 + CodecID + 283902549 + ConfigData + + ASccIAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxxAAUcdAQFHHhcBRx+QAUcMAgF3 + HPABdx0AAXceAAF3H0ABhxzwAYcdAAGHHgAB + hx9AAZccEAGXHRABlx6LAZcfAgGnHPABpx0A + AaceAAGnH0ABtxzwAbcdAAG3HgABtx9AAdcc + 8AHXHQAB1x4AAdcfQAHnHJAB5x3gAeceRQHn + HwECFxwwAhcdEAIXHisCFx8CAhcMAg== + + FuncGroup + 1 + LayoutID + 100 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC256 + CodecID + 283902550 + ConfigData + + AScc8AEnHQABJx4AAScfQAFHHCABRx0AAUce + FwFHH5ABlxwwAZcdEAGXHosBlx8CAhccUAIX + HRACFx4rAhcfAgE3HPABNx0AATceAAE3H0AB + hxzwAYcdAAGHHgABhx9AAacc8AGnHQABpx4A + AacfQAG3HDABtx0AAbceoAG3H5AB1xzwAdcd + AAHXHgAB1x9AAecc8AHnHQAB5x4AAecfQAFH + DAIBtwwC + + FuncGroup + 1 + LayoutID + 5 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Rockjesus - Realtek ALC256 (3246) - dell 7559 + CodecID + 283902550 + ConfigData + + ASccAAEnHQEBJx6mAScfmQFHHBABRx0BAUce + FwFHH5kCFxwgAhcdEAIXHiECFx8BAbcMAg== + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Insanelydeepak - Realtek ALC256 (3246) for Dell Series + CodecID + 283902550 + ConfigData + + ASccEAEnHQABJx6gAScfkAFHHCABRx0AAUce + FwFHH5ABlxwwAZcdEAGXHosBlx8CAhccUAIX + HRACFx4rAhcfAgE3HPABNx0AATceAAE3H0AB + hxzwAYcdAAGHHgABhx9AAacc8AGnHQABpx4A + AacfQAG3HPABtx0AAbceAAG3H0AB1xzwAdcd + AAHXHgAB1x9AAecc8AHnHQAB5x4AAecfQAFH + DAI= + + FuncGroup + 1 + LayoutID + 13 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Insanelydeepak - Realtek ALC256 (3246) for Dell Series with subwoofer + CodecID + 283902550 + ConfigData + + ASccEAEnHQABJx6gAScfkAFHHCABRx0AAUce + FwFHH5ABRwwCAZccMAGXHRABlx6LAZcfAgG3 + HEABtx0AAbceFwG3H5ABtwwCAhccUAIXHRAC + Fx4rAhcfAgE3HPABNx0AATceAAE3H0ABhxzw + AYcdAAGHHgABhx9AAacc8AGnHQABpx4AAacf + QAHXHPAB1x0AAdceAAHXH0AB5xzwAecdAAHn + HgAB5x9A + + FuncGroup + 1 + LayoutID + 14 + WakeConfigData + + AUcMAgG3DAICFwfAAhcIgwGXByQBpwcg + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + VicQ - Realtek ALC256 (3246) for Dell 7000 Series with 2.1Ch + CodecID + 283902550 + ConfigData + + ASccYAEnHAEBJxymAScckAE3HPABNx0AATce + AAE3H0ABRxxAAUcdAQFHHhABRx+QAUcMAgGH + HPABhx0AAYceAAGHH0ABlxwgAZcdEAGXHosB + lx8BAacccAGnHQABpx6hAacfAQG3HEEBtx0B + AbceEAG3H5ABtwwCAdcc8AHXHQAB1x4AAdcf + QAHnHPAB5x0AAeceAAHnH0ACFxxQAhcdEAIX + HisCFx8BAhcMAg== + + FuncGroup + 1 + LayoutID + 16 + WakeConfigData + + AUcMAgG3DAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + hjmmc - Realtek ALC256 (3246) for Magicbook 2018 with 4CH + CodecID + 283902550 + ConfigData + + AUccEAFHHQEBRx4XAUcfkAFHDAIBtxwSAbcd + AQG3HhcBtx+QAbcMAgIXHCACFx0QAhceIQIX + HwQCFwwCASccMAEnHQEBJx6mAScfkAGXHEAB + lx0QAZcegQGXHwQBNxzwATcdAAE3HgABNx9A + AYcc8AGHHQABhx4AAYcfQAGnHPABpx0AAace + AAGnH0AB1xzwAdcdAAHXHgAB1x9AAecc8AHn + HQAB5x4AAecfQA== + + FuncGroup + 1 + LayoutID + 17 + WakeConfigData + + AUcMAgG3DAICFwwC + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Andres ZeroCross for Dell 5570 + CodecID + 283902550 + ConfigData + + ASccEAEnHQEBJx6gAScfkAFHHCABRx0BAUce + FwFHH5ABlxwwAZcdEAGXHosBlx8CAhccUAIX + HRACFx4rAhcfAgFHDAICFwwCAZcHJQIXCIM= + + FuncGroup + 1 + LayoutID + 21 + WakeConfigData + + AUcMAgIXDAIBlwclAhcIgw== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902550 + Comment + Andres ZeroCross for Asus VivoBook Pro 17 N705UDR + ConfigData + + AbccUAG3HQEBtx4XAbcfkAGnHDABpx0BAace + oAGnH5ACFxwgAhcdEAIXHiECFx8DAbcMAg== + + FuncGroup + 1 + LayoutID + 22 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902550 + Comment + Andres ZeroCross for Razer Blade 15 RZ09-02705E75 + ConfigData + + AUccUAFHHQABRx4XAUcfkAFHDAIBJxwwAScd + AAEnHqABJx+QAhccIAIXHRACFx4hAhcfAAGX + HEABlx0QAZcegQGXHwQ= + + FuncGroup + 1 + LayoutID + 23 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902550 + Comment + vusun123 - ALC256 for Asus X555UJ + ConfigData + + AUccUAFHHQABRx4XAUcfkAFHDAIBpxwwAacd + AAGnHqABpx+QAhccIAIXHRACFx4hAhcfAA== + + FuncGroup + 1 + LayoutID + 28 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + DalianSky - Realtek ALC256 (3246) for Dell 7000 Series + CodecID + 283902550 + ConfigData + + ASccMAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxwQAUcdAQFHHhcBRx+QAUcMAgGH + HPABhx0AAYceAAGHH0ABlxxAAZcdEAGXHoEB + lx8CAacc8AGnHQABpx4AAacfQAG3HPABtx0A + AbceAAG3H0AB1xzwAdcdAAHXHgAB1x9AAecc + 8AHnHQAB5x4AAecfQAIXHCACFx0QAhceIQIX + HwICFwwC + + FuncGroup + 1 + LayoutID + 56 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Kk Realtek ALC256 (3246) for magicbook + CodecID + 283902550 + ConfigData + + AScccAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxzwAUcdAAFHHgABRx9AAYcc8AGH + HQABhx4AAYcfQAGXHDABlx0QAZceiwGXHwIB + pxzwAacdAAGnHgABpx9AAbccQAG3HQEBtx4Q + AbcfkAG3DAIB1xzwAdcdAAHXHgAB1x9AAecc + 8AHnHQAB5x4AAecfQAIXHFACFx0QAhceKwIX + HwICFwwC + + FuncGroup + 1 + LayoutID + 57 + WakeConfigData + + AbcMAgIXDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + lgs3137 - Realtek ALC256 for ASUS Y5000U X507UBR + CodecID + 283902550 + ConfigData + + AScc8AEnHQABJx4AAScfQAE3HPABNx0AATce + AAE3H0ABRxwgAUcdAQFHHhcBRx+QAUcMAgGH + HPABhx0AAYceAAGHH0ABlxwwAZcdEAGXHosB + lx8CAacc8AGnHQABpx4AAacfQAG3HDABtx0A + AbceoAG3H5ABtwwCAdcc8AHXHQAB1x4AAdcf + QAHnHPAB5x0AAeceAAHnH0ACFxxQAhcdEAIX + HisCFx8CAhcMAgGXByQBtwckAhcIgw== + + FuncGroup + 1 + LayoutID + 66 + WakeConfigData + + AUcMAgIXDAIBlwckAbcHJAIXCIM= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC256 for Dell OptiPlex 7080 + CodecID + 283902550 + ConfigData + + AUccEAFHHQEBRx4XAUcfkAGXHEABlx0QAZce + iwGXHwIBtxwgAbcdEAG3HgEBtx8BAhccMAIX + HRACFx4rAhcfAgFHDAIBtwwCAhcMAg== + + FuncGroup + 1 + LayoutID + 67 + WakeConfigData + + AUcMAgG3DAICFwwC + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Durian - Realtek ALC256 (3246) for MateBook X Pro 2019(4CH) + CodecID + 283902550 + ConfigData + + AbccEAG3HQEBtx4XAbcfkAG3DAIBRxwRAUcd + AQFHHhcBRx+QAUcMAgIXHCACFx0QAhceIQIX + HwICFwwCASccMAEnHQEBJx6mAScfkAGXHPAB + lx0AAZceAAGXH0AB1xzwAdcdAAHXHgAB1x9A + AYcc8AGHHQABhx4AAYcfQAE3HPABNx0AATce + AAE3H0ABpxzwAacdAAGnHgABpx9AAecc8AHn + HQAB5x4AAecfQA== + + FuncGroup + 1 + LayoutID + 76 + WakeConfigData + + AbcMAgFHDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Wanwu - Realtek ALC256 (3246) for MateBook X Pro 2019 + CodecID + 283902550 + ConfigData + + ASccIAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxzwAUcdAAFHHgABRx9AAYcc8AGH + HQABhx4AAYcfQAGXHEABlx0QAZceqwGXHwQB + pxzwAacdAAGnHgABpx9AAbccEAG3HQEBtx4X + AbcfkAG3DAIB1xzwAdcdAAHXHgAB1x9AAecc + 8AHnHQAB5x4AAecfQAIXHDACFx0QAhceKwIX + HwQCFwwC + + FuncGroup + 1 + LayoutID + 19 + WakeConfigData + + AbcMAgIXDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + DalianSky - Realtek ALC256 (3246) for MateBook X Pro 2019 + CodecID + 283902550 + ConfigData + + ASccMAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxwRAUcdAQFHHhcBRx+QAUcMAgGH + HPABhx0AAYceAAGHH0ABlxxAAZcdEAGXHoEB + lx8EAacc8AGnHQABpx4AAacfQAG3HBABtx0B + AbceFwG3H5ABtwwCAdcc8AHXHQAB1x4AAdcf + QAHnHPAB5x0AAeceAAHnH0ACFxwgAhcdEAIX + HiECFx8EAhcMAg== + + FuncGroup + 1 + LayoutID + 97 + WakeConfigData + + AbcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - Realtek ALC257 for Lenovo T480 + CodecID + 283902551 + ConfigData + + ASccIAEnHQABJx6mAScfkAGXHDABlx0QAZce + gQGXHwABRxxQAUcdAAFHHhcBRx+QAUcMAgIX + HGACFx0QAhceIQIXHwA= + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Armênio - Realtek ALC257 - Lenovo T480 + CodecID + 283902551 + ConfigData + + ASccEAEnHQEBJx6gAScfkAGXHCABlx0wAZce + gQGXHwEBRxwwAUcdYQFHHhABRx+QAUcMAgIX + HEACFx1wAhceIQIXHwECFwwC + + FuncGroup + 1 + LayoutID + 86 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC257 for Lenovo Legion Y540 and Y7000-2019 + CodecID + 283902551 + ConfigData + + ASccIAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxwQAUcdAQFHHhcBRx+QAUcMAgGH + HPABhx0AAYceAAGHH0ABlxwwAZcdEAGXHosB + lx8EAacc8AGnHQABpx4AAacfQAG3HPABtx0A + AbceAAG3H0ABtwwCAdcc8AHXHQAB1x4AAdcf + QAHnHPAB5x0AAeceAAHnH0ACFxwfAhcdEAIX + HisCFx8EAhcMAg== + + FuncGroup + 1 + LayoutID + 18 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC257 for Lenovo XiaoXin Pro 2019(81XB/81XD) by DalianSky + CodecID + 283902551 + ConfigData + + ASccMAEnHQEBJx6mAScfkAIXHCACFx0QAhce + IQIXHwQBlxxAAZcdEAGXHoEBlx8EAUccEAFH + HQEBRx4XAUcfkAFHDAI= + + FuncGroup + 1 + LayoutID + 99 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC257 for Lenovo XiaoXin Pro 2019(81XB/81XD) by DalianSky + CodecID + 283902551 + ConfigData + + ASccMAEnHQEBJx6mAScfkAIXHCACFx0QAhce + IQIXHwQBlxxAAZcdEAGXHoEBlx8EAUccEAFH + HQEBRx4XAUcfkAFHDAI= + + FuncGroup + 1 + LayoutID + 100 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet ALC260 for Fujitsu Celsius M 450 + CodecID + 283902560 + ConfigData + + IPccECD3HUAg9x4RIPcfASD3DAIhhxwgIYcd + YCGHHkQhhx8BITccQCE3HZAhNx6hITcfmSFH + HFAhRx0wIUcegSFHHwEhVxxgIVcdQCFXHiEh + Vx8C + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom ALC260 + CodecID + 283902560 + ConfigData + + AQccAAEHHUABBx4hAQcfAQEnHBABJx2QASce + oQEnH5kBNxwgATcdMAE3HoEBNx8B + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + Codec + DalianSky - ALC262 for MS-7480N1 + CodecID + 283902562 + ConfigData + + AVccYAFXHUABVx4BAVcfAQFHHFABRx1AAUce + IQFHHwEBhxwgAYcdMAGHHoEBhx8BAaccEAGn + HZABpx6iAacfAQ== + + FuncGroup + 1 + LayoutID + 7 + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - ALC262 + CodecID + 283902562 + ConfigData + + IUccECFHHUAhRx4BIUcfASHnHCAh5x1gIece + RSHnHwAhhxwwIYcdkCGHHqEhhx+RIZccQCGX + HZAhlx6hIZcfkiGnHFAhpx0wIacegSGnHwEh + txxgIbcdQCG3HiEhtx8C + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + Codec + Goldfish64 - ALC262 for HP Compaq dc7700 SFF + CodecID + 283902562 + ConfigData + + AbccEAG3HUABtx4BAbcfAQFXHCABVx0QAVce + IQFXHwIBZxwwAWcdAQFnHhMBZx+QAZccQAGX + HTABlx6BAZcfAQGnHFABpx0QAacegQGnHwI= + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - ALC262 for Fujitsu Celsius H270 + CodecID + 283902562 + ConfigData + + AUccEAFHHQABRx4TAUcfkAFXHCABVx0QAVce + IQFXHwIBhxwwAYcdEAGHHoEBhx8CAZccQAGX + HQABlx6jAZcfkAGnHFABpx0QAacegQGnHwE= + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - ALC262 for HP Z800-Z600 series + CodecID + 283902562 + ConfigData + + AZccAAGXHREBlx6gAZcfkgGnHBABpx0xAace + gAGnH5EBVxwgAVcdQQFXHhABVx+RAWccMAFn + HQEBZx4AAWcfKQGHHEABhx2QAYceoAGHH5EB + txxQAbcdEAG3HisBtx8C + + FuncGroup + 1 + LayoutID + 28 + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC262 for MS-7847 + CodecID + 283902562 + ConfigData + + AUccEAFHHUABRx4hAUcfAgFXHB8BVx0QAVce + AQFXHwEBZxwgAWcdAQFnHhMBZx+ZAYccMAGH + HTABhx6BAYcfAQGnHD8Bpx2QAaceoQGnHwI= + + FuncGroup + 1 + LayoutID + 66 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC268 + CodecID + 283902568 + ConfigData + + AUccEAFHHRABRx4hAUcfAQGHHEABhx2QAYce + gQGHHwEBVxxQAVcdAAFXHhMBVx+QAZccYAGX + HQABlx6jAZcfkAFXDAI= + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone Laptop patch ALC269 Asus N53J + CodecID + 283902569 + ConfigData + + AYccIAGHHRABhx6BAYcfBAGXHBABlx0BAZce + oAGXH5kBtxxAAbcdAQG3HhMBtx+ZAhccUAIX + HRACFx4hAhcfBAFHDAI= + + FuncGroup + 1 + LayoutID + 1 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC269-VB v1 + CodecID + 283902569 + ConfigData + + AUccQAFHHQEBRx4TAUcfmQGHHCABhx0QAYce + gQGHHwMBlxwQAZcdAQGXHqABlx+ZAhccUAIX + HRACFx4hAhcfAwFHDAI= + + FuncGroup + 1 + LayoutID + 2 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269 + CodecID + 283902569 + Comment + Mirone - Realtek ALC269 for Asus K53SJ, Asus G73s + ConfigData + + AScc8AEnHQABJx4AAScfQAFHHBABRx0BAUce + EwFHH5ABdxxQAXcdAQF3HhMBdx+QAYccIAGH + HZABhx6BAYcfAwGXHDABlx0BAZceoAGXH5AB + pxzwAacdAAGnHgABpx9AAbcc8AG3HQABtx4A + AbcfQAHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAhccQAIXHRACFx4hAhcfAwFH + DAI= + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC269-VB v2 + CodecID + 283902569 + ConfigData + + AUccEAFHHQABRx4TAUcfkAGHHCABhx2QAYce + gQGHHwIBtxwwAbcdEAG3HqABtx+QAhccQAIX + HRACFx4hAhcfAgFHDAI= + + FuncGroup + 1 + LayoutID + 4 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC269-VB v3 + CodecID + 283902569 + ConfigData + + ASccEAEnHQABJx6gAScfkAFHHCABRx0AAUce + EwFHH5ABhxwwAYcdEAGHHoEBhx8AAhccUAIX + HRACFx4hAhcfAAFHDAI= + + FuncGroup + 1 + LayoutID + 5 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC269-VC v1 + CodecID + 283902569 + ConfigData + + AUccEAFHHQABRx4TAUcfkAGHHDABhx0QAYce + gQGHHwABJxxAAScdAAEnHqABJx+QAVccUAFX + HRABVx4hAVcfAAFHDAI= + + FuncGroup + 1 + LayoutID + 6 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC269-VC v2 + CodecID + 283902569 + ConfigData + + ASccEAEnHQABJx6mAScfkAFXHCABVx0QAVce + IQFXHwABhxwwAYcdEAGHHoEBhx8CAbccQAG3 + HQABtx4XAbcfkAG3DAI= + + FuncGroup + 1 + LayoutID + 7 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC269VC-v3 + CodecID + 283902569 + ConfigData + + ASccEAEnHQABJx6mAScfkAFHHCABRx0AAUce + FwFHH5ABVxwwAVcdEAFXHiEBVx8AAYccQAGH + HZABhx6BAYcfAgFHDAI= + + FuncGroup + 1 + LayoutID + 8 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC269VB v4 + CodecID + 283902569 + ConfigData + + ASccEAEnHQABJx6gAScfkAFHHCABRx0AAUce + EwFHH5ABhxwwAYcdEAGHHoEBhx8AAhccUAIX + HRACFx4hAhcfAAFHDAI= + + FuncGroup + 1 + LayoutID + 9 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902569 + Comment + Toleda ALC269 patch for Brix + ConfigData + + IUcc8CFHHQAhRx4AIUcfQCFXHHAhVx1AIVce + ISFXHwIhZxzwIWcdACFnHgAhZx9AIXcc8CF3 + HQAhdx4AIXcfQCGHHPAhhx0AIYceACGHH0Ah + lxzwIZcdACGXHgAhlx9AIacc8CGnHQAhpx4A + IacfQCG3HPAhtx0AIbceACG3H0Ah5xyQIecd + YSHnHksh5x8B + + FuncGroup + 1 + LayoutID + 10 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mosser - ALC269VB Dell Precision Workstation T1600 + CodecID + 283902569 + ConfigData + + AbccIAG3HUABtx4BAbcfAQGHHDABhx2YAYce + gQGHHwIBlxxAAZcdmAGXHoEBlx8BAhccUAIX + HUACFx4hAhcfAg== + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + Codec + Asus Vivobook S200CE - Realtek ALC269VB + CodecID + 283902569 + ConfigData + + ASccMAEnHQEBJx6mAScfkAFHHBABRx0BAUce + FwFHH5ABdxzwAXcdAAF3HgABdx9AAYcc8AGH + HQABhx4AAYcfQAGXHPABlx0AAZceAAGXH0AB + pxwgAacdEAGnHisBpx8AAbcc8AG3HQABtx4A + AbcfQAHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAhcc8AIXHQACFx4AAhcfQAFH + DAI= + + FuncGroup + 1 + LayoutID + 12 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC269VC for Samsung NP350V5C-S08IT + CodecID + 283902569 + ConfigData + + AZccEAGXHQABlx6nAZcfmQFXHCABVx0QAVce + IQFXHwIBhxwwAYcdEAGHHoEBhx8CAUccQAFH + HQABRx4XAUcfmQFHDAI= + + FuncGroup + 1 + LayoutID + 13 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902569 + Comment + Custom ALC269VC for Samsung NT550P7C-S65 with subwoofer 2.1ch by Rockjesus + ConfigData + + AVccEAFXHRABVx4hAVcfAQGHHCABhx0QAYce + gQGHHwEBlxwwAZcdAQGXHqcBlx+QAbccQAG3 + HQEBtx4XAbcfkAF3HEEBdx0BAXceFwF3H5AB + JxzwAScdAAEnHgABJx9AAUcc8AFHHQABRx4A + AUcfQAGnHPABpx0AAaceAAGnH0AB1xzwAdcd + AAHXHgAB1x9AAecc8AHnHQAB5x4AAecfQAG3 + DAI= + + FuncGroup + 1 + LayoutID + 14 + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - ALC269VB for Dell Optiplex 790 + CodecID + 283902569 + ConfigData + + AbccIAG3HUABtx4BAbcfAQGHHDABhx2QAYce + gQGHHwIBlxxAAZcdkAGXHoEBlx8BAhccUAIX + HUACFx4hAhcfAg== + + FuncGroup + 1 + LayoutID + 15 + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - ALC269VB for Dell Optiplex 790 Version2 + CodecID + 283902569 + ConfigData + + AbccIAG3HUABtx4RAbcfkAGHHDABhx2QAYce + oQGHH5ABlxxAAZcdkAGXHoEBlx8BAhccUAIX + HUACFx4hAhcfAg== + + FuncGroup + 1 + LayoutID + 16 + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - Latte Panda + CodecID + 283902569 + ConfigData + + AYccIAGHHVABhx6hAYcfkQFXHDABVx1AAVce + IQFXHwEBVwwC + + FuncGroup + 1 + LayoutID + 17 + WakeConfigData + + AVcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Hypereitan - ALC269VC for Thinkpad X230 i7 + CodecID + 283902569 + ConfigData + + ASccEAEnHQEBJx6gAScfkAFHHEABRx0BAUce + EAFHH5ABVxxQAVcdEAFXHiEBVx8BAYcccAGH + HRABhx6hAYcfAQFHDAI= + + FuncGroup + 1 + LayoutID + 18 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Asus Vivobook S300CA - Realtek ALC269VB + CodecID + 283902569 + ConfigData + + ASccMAEnHQEBJx6mAScfkAFHHBABRx0BAUce + FwFHH5ABdxzwAXcdAAF3HgABdx9AAYcc8AGH + HQABhx4AAYcfQAGXHPABlx0AAZceAAGXH0AB + pxzwAacdAAGnHgABpx9AAbcc8AG3HQABtx4A + AbcfQAHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAhccIAIXHRACFx4rAhcfAAFH + DAI= + + FuncGroup + 1 + LayoutID + 19 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269 + CodecID + 283902569 + Comment + Custom ALC269 Sony Vaio VPCEB3M1R by Rodion + ConfigData + + AVccQAFXHRABVx4hAVcfAwGHHCABhx0QAYce + gQGHHwMBlxwwAZcdAQGXHqABlx+QAbccEAG3 + HQEBtx4XAbcfkAFXDAI= + + FuncGroup + 1 + LayoutID + 20 + + + AFGLowPowerState + + AwAAAA== + + Codec + Goldfish64 - ALC269VB for Dell Optiplex 7010 + CodecID + 283902569 + ConfigData + + AScc8AEnHQABJx4AAScfQAFHHBABRx0BAUce + EwFHH5ABRwwCAXcc8AF3HQABdx4AAXcfQAGH + HDABhx2QAYcegQGHHwIBlxxAAZcdkAGXHoEB + lx8BAacc8AGnHQABpx4AAacfQAG3HCABtx1A + AbceAQG3HwEB1xzwAdcdAAHXHgAB1x9AAecc + 8AHnHQAB5x4AAecfQAIXHFACFx1AAhceIQIX + HwI= + + FuncGroup + 1 + LayoutID + 21 + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269 + CodecID + 283902569 + Comment + Andres ZeroCross - ALC269VC for Acer Veriton Z4640G + ConfigData + + AaccEAGnHQABpx4XAacfkAGXHDABlx0QAZce + gQGXHwABJxxAAScdAAEnHqABJx+QAbccUAG3 + HRABtx4hAbcfAA== + + FuncGroup + 1 + LayoutID + 22 + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269 + CodecID + 283902569 + Comment + ALC269VC for Hasee U45S1 by zero816 + ConfigData + + AXccAAF3HQABdx4AAXcfQAHXHAUB1x2GAdce + 9AHXH0ABRxwQAUcdAQFHHhcBRx+QAUcMAgFX + HCABVx0QAVceIQFXHwEBVwwCAYccMAGHHRAB + hx6hAYcfAQEnHEABJx0BAScepgEnH5ABlxzw + AZcdEQGXHhEBlx9BAbcc8AG3HREBtx4RAbcf + QQHnHPAB5x0RAeceEQHnH0EBpxzxAacdEQGn + HhEBpx9B + + FuncGroup + 1 + LayoutID + 24 + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269 + CodecID + 283902569 + Comment + Custom ALC269 for Acer Aspire by Andrey1970 + ConfigData + + AUccAAFHHUEBRx4XAUcfmQGHHBABhx2QAYce + gQGHHwEBtxwgAbcdkQG3HqcBtx+ZAhccMAIX + HUACFx4hAhcfAQ== + + FuncGroup + 1 + LayoutID + 27 + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269VC + CodecID + 283902569 + Comment + ALC269VC for Lenovo Z580, John + ConfigData + + AVccQAFXHRABVx4hAVcfAwGHHCABhx0QAYce + gQGHHwMBlxwwAZcdAQGXHqABlx+QAbccEAG3 + HQEBtx4XAbcfkAFXDAI= + + FuncGroup + 1 + LayoutID + 28 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902569 + Comment + ALC269VC for Lenovo V580, ar4er + ConfigData + + ASccEAEnHQABJx6mAScfkAFHHCABRx0AAUce + FwFHH5ABVxwwAVcdEAFXHiEBVx8AAYccQAGH + HZABhx6BAYcfAgFHDAI= + + FuncGroup + 1 + LayoutID + 29 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269VC for Hasee Z6SL7R3 by HF + CodecID + 283902569 + ConfigData + + ASccEAEnHQEBJx6gAScfkAFHHBABRx0BAUce + FwFHH5ABVxyAAVcdEAFXHiEBVx8CAYccIAGH + HRABhx6BAYcfAgHnHGAB5x0AAeceQQHnHwIB + RwwC + + FuncGroup + 1 + LayoutID + 30 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902569 + Comment + Custom ALC269 Samsung np880z5e-x01ru by Constanta + ConfigData + + ASccEAEnHQABJx6mAScfkAG3HCABtx0AAbce + FwG3H5ABVxwwAVcdEAFXHiEBVx8AAYccQAGH + HZABhx6BAYcfAgG3DAI= + + FuncGroup + 1 + LayoutID + 32 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902569 + Comment + Custom ALC269VC for Samsung NP530U3C-A0F by BblDE3HAP + ConfigData + + AUccEAFHHQEBRx4XAUcfkAFHDAIBVxxAAVcd + EAFXHiEBVx8DAVcMAgGHHCABhx0QAYcegQGH + HwMBlxwwAZcdAQGXHqABlx+Q + + FuncGroup + 1 + LayoutID + 33 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC269VC - Samsung NP350V5C-S0URU + CodecID + 283902569 + ConfigData + + AUccEAFHHQABRx4XAUcfkAGHHCABhx0QAYce + gQGHHwIBVxwwAVcdEAFXHiEBVx8CAZccQAGX + HQABlx6gAZcfkAFHDAI= + + FuncGroup + 1 + LayoutID + 35 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + vusun123 - Realtek ALC269VC for Lenovo W530 + CodecID + 283902569 + ConfigData + + ASccQAEnHQABJx6gAScfkAFHHBABRx0AAUce + FwFHH5ABRwwCAVccIAFXHRABVx4hAVcfAAGH + HDABhx0QAYcegQGHHwA= + + FuncGroup + 1 + LayoutID + 40 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269VC + CodecID + 283902569 + Comment + Laptop patch ALC269VC Samsung _NP350V5C - Giesteira + ConfigData + + AUccAAFHHQABRx4XAUcfmQGHHBABhx0QAYce + gQGHHwEBVxwgAVcdEAFXHiEBVx8BAZccMAGX + HQABlx6nAZcfmQFHDAI= + + FuncGroup + 1 + LayoutID + 44 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + maiconjs (Wolfield) - Asus A45A 269VB1 + CodecID + 283902569 + ConfigData + + AUccEAFHHQABRx4XAUcfmQGHHCABhx0QAYce + gQGHHwEBJxwwAScdAAEnHqYBJx+ZAhccUAIX + HRACFx4hAhcfAQFHDAI= + + FuncGroup + 1 + LayoutID + 45 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269VC for Thinkpad X230 with Dock4338 + CodecID + 283902569 + ConfigData + + ASccEAEnHQEBJx6mAScfkAFHHEABRx0BAUce + FwFHH5ABRwwCAVccUAFXHRABVx4rAVcfAgFX + DAIBdxzwAXcdAAF3HgABdx9AAYccIAGHHRAB + hx6LAYcfAgGXHPABlx0AAZceAAGXH0ABpxzw + AacdAAGnHgABpx9AAbccYAG3HUABtx4BAbcf + AQHXHPAB1x0AAdceAAHXH0AB5xzwAecdAAHn + HgAB5x9A + + FuncGroup + 1 + LayoutID + 55 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + HASEE Z6-i78154S2 ALC269 by lianny + CodecID + 283902569 + ConfigData + + AUccEAFHHQABRx4TAUcfkAGHHDABhx0QAYce + gQGHHwABJxxAAScdAAEnHqABJx+QAVccIAFX + HRABVx4hAVcfAAF3HPABdx0AAXceAAF3H0AB + lxzwAZcdAAGXHgABlx9AAacc8AGnHQABpx4A + AacfQAG3HPABtx0AAbceAAG3H0AB1xzwAdcd + AAHXHgAB1x9AAeccYAHnHRAB5x5EAecfAgFH + DAI= + + FuncGroup + 1 + LayoutID + 58 + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269VC for Clevo N155RD by DalianSky + CodecID + 283902569 + ConfigData + + ASccEAEnHQEBJx6mAScfkAFHHDABRx0BAUce + FwFHH5ABVxwgAVcdEAFXHiEBVx8CAXcc8AF3 + HQABdx4AAXcfQAGHHAABhx0QAYcegQGHHwIB + lxzwAZcdAAGXHgABlx9AAacc8AGnHQABpx4A + AacfQAG3HPABtx0AAbceAAG3H0AB5xxwAecd + EQHnHkQB5x8CAUcMAg== + + FuncGroup + 1 + LayoutID + 66 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom ALC269VB for ENZ C16B by jimmy19990 + CodecID + 283902569 + ConfigData + + AUccEAFHHQEBRx4TAUcfkAGHHCABhx0QAYce + gQGHHwEBlxwgAZcdAQGXHqABlx+QAhccEAIX + HRACFx4hAhcfAQFHDAI= + + FuncGroup + 1 + LayoutID + 76 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269 for MECHREVO X8Ti Plus by DalianSky + CodecID + 283902569 + ConfigData + + ASccEAEnHQEBJx6mAScfkAFHHDABRx0BAUce + FwFHH5ABVxwgAVcdEAFXHiEBVx8CAXcc8AF3 + HQABdx4AAXcfQAGHHAABhx0QAYcegQGHHwIB + lxzwAZcdAAGXHgABlx9AAacc8AGnHQABpx4A + AacfQAG3HPABtx0AAbceAAG3H0AB5xzwAecd + AAHnHgAB5x9AAUcMAg== + + FuncGroup + 1 + LayoutID + 88 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269 + CodecID + 283902569 + Comment + Custom ALC269 for Chuwi CoreBox by Luca91 + ConfigData + + AVccHwFXHRABVx4hAVcfBAFXDAIBhxwgAYcd + EAGHHoEBhx8E + + FuncGroup + 1 + LayoutID + 91 + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269 + CodecID + 283902569 + Comment + ALC269 Asus K53SJ, Asus G73s Mod by Andrey1970 (No input boost - no noise in Siri) + ConfigData + + AScc8AEnHQABJx4AAScfQAFHHBABRx0BAUce + EwFHH5ABdxxQAXcdAQF3HhMBdx+QAYccIAGH + HZABhx6BAYcfAwGXHDABlx0BAZceoAGXH5AB + pxzwAacdAAGnHgABpx9AAbcc8AG3HQABtx4A + AbcfQAHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAhccQAIXHRACFx4hAhcfAwFH + DAI= + + FuncGroup + 1 + LayoutID + 93 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269-VB v4 Mod by Andrey1970 (No input boost - no noise in Siri) + CodecID + 283902569 + ConfigData + + ASccEAEnHQABJx6gAScfkAFHHCABRx0AAUce + EwFHH5ABhxwwAYcdEAGHHoEBhx8AAhccUAIX + HRACFx4hAhcfAAFHDAI= + + FuncGroup + 1 + LayoutID + 99 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269 + CodecID + 283902569 + Comment + ALC269 for GPD P2 Max by DalianSky + ConfigData + + AVccEAFXHRABVx4hAVcfBAGnHCABpx0BAace + FwGnH5ABpwwCAYccMAGHHRABhx6BAYcfBAEn + HEABJx0BAScepgEnH7c= + + FuncGroup + 1 + LayoutID + 100 + WakeConfigData + + AacMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269 + CodecID + 283902569 + Comment + Custom ALC269 Acer Aspire by Andrey1970 (No input boost - no noise in Siri) + ConfigData + + AUccAAFHHUEBRx4XAUcfmQGHHBABhx2QAYce + gQGHHwEBtxwgAbcdkQG3HqcBtx+ZAhccMAIX + HUACFx4hAhcfAQ== + + FuncGroup + 1 + LayoutID + 127 + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269 + CodecID + 283902569 + Comment + ALC269 for Lenovo Y500 by BaoStorm (No input boost - no noise in Siri) + ConfigData + + ASccQAEnHQkBJx6mAScfkAFHHBABRx0BAUce + FwFHH5ABRwwCAVccIAFXHSABVx4hAVcfBAFX + DAIBhxxQAYcdKAGHHqEBhx8EAeccMAHnHSEB + 5x5FAecfBA== + + FuncGroup + 1 + LayoutID + 188 + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269VC for Hasee K790s + CodecID + 283902569 + ConfigData + + AScc8AEnHQABJx4AAScfQAFHHPABRx0AAUce + AAFHH0ABdxzwAXcdAAF3HgABdx9AAYccEAGH + HRABhx6AAYcfkAGXHBABlx0AAZceoAGXH5AB + pxyQAacdAQGnHhcBpx+QAbcc8AG3HQABtx4A + AbcfQAHXHPAB1x0AAdceAAHXH0AB5xxwAecd + EQHnHkQB5x8EAhccoAIXHRACFx4hAhcfBAFH + DAI= + + FuncGroup + 1 + LayoutID + 47 + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269 + CodecID + 283902569 + Comment + Custom ALC269 by ryahpalma for Laptop NS4SL01 + ConfigData + + AUccEAFHHQEBRx4XAUcfkAFHDAIBhxwgAYcd + EAGHHoEBhx8DAVccQAFXHRABVx4hAVcfAwFX + DAIBJxwwAScdAQEnHqYBJx+Q + + FuncGroup + 1 + LayoutID + 128 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC270 v1 + CodecID + 283902576 + ConfigData + + AUccEAFHHQABRx4TAUcfkAGXHCABlx0AAZce + oAGXH5ACFxwwAhcdEAIXHiECFx8AAUcMAg== + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC270 v2 + CodecID + 283902576 + ConfigData + + ASccEAEnHQABJx6gAScfkAFHHCABRx0AAUce + EwFHH5ACFxwwAhcdEAIXHiECFx8BAUcMAg== + + FuncGroup + 1 + LayoutID + 4 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC270 + CodecID + 283902576 + Comment + ALC270 for Asus A46CB-WX024D Laptop by Andres ZeroCross + ConfigData + + AScc8AEnHQABJx4AAScfQAFHHBABRx0BAUce + FwFHH5ABdxzwAXcdAAF3HgABdx9AAYccIAGH + HRABhx6BAYcfBAGXHDABlx0BAZceoAGXH5AB + pxwgAacdEAGnHiEBpx8EAbcc8AG3HQABtx4A + AbcfQAHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAhcc8AIXHQACFx4AAhcfQAFH + DAI= + + FuncGroup + 1 + LayoutID + 21 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC270 + CodecID + 283902576 + Comment + ALC270 for Asus Laptop with alternative microphone + ConfigData + + ASccEAEnHQEBJx6mAScfkAFHHCABRx0BAUce + EwFHH5ABdxzwAXcdAAF3HgABdx9AAYccMAGH + HRABhx6BAYcfAgGXHPABlx0AAZceAAGXH0AB + pxzwAacdAAGnHgABpx9AAbcc8AG3HQABtx4A + AbcfQAHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAhccQAIXHRACFx4hAhcfAgFH + DAI= + + FuncGroup + 1 + LayoutID + 27 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC270 + CodecID + 283902576 + Comment + ALC270 for Asus Laptop + ConfigData + + AScc8AEnHQABJx4AAScfQAFHHBABRx0BAUce + FwFHH5ABdxzwAXcdAAF3HgABdx9AAYccIAGH + HRABhx6BAYcfBAGXHDABlx0BAZceoAGXH5AB + pxzwAacdAAGnHgABpx9AAbcc8AG3HQABtx4A + AbcfQAHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAhccIAIXHRACFx4hAhcfBAFH + DAI= + + FuncGroup + 1 + LayoutID + 28 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902569 + Comment + Custom ALC271x Acer Aspire s3-951 + ConfigData + + ASccEAEnHQABJx6gAScfkAFHHCABRx0AAUce + EwFHH5ABhxwwAYcdkAGHHoEBhx8AAdccQAHX + HZAB1x4XAdcfQAHnHFAB5x0QAeceRQHnHwAC + FxxgAhcdEAIXHiECFx8AAUcMAg== + + FuncGroup + 1 + LayoutID + 31 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC272 + CodecID + 283902578 + ConfigData + + AYccMAGHHZABhx6BAYcfAAGXHCABlx0AAZce + owGXH5ABRxwQAUcdAAFHHhMBRx+QAhccUAIX + HUACFx4hAhcfAAFHDAI= + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC 272 - Lenovo B470 - Sam Chen + CodecID + 283902578 + ConfigData + + ASccMAEnHQABJx6jAScfkAFHHBABRx0AAUce + EwFHH5ABhxwgAYcdEAGHHoEBhx8AAhccUAIX + HRACFx4hAhcfAAFHDAI= + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC 272 for Lenovo Y470 by amu_1680c + CodecID + 283902578 + ConfigData + + ASccEAEnHQEBJx6gAScfkAGHHCABhx0AAYce + gQGHHwEBRxwwAUcdAQFHHhABRx+QAhccQAIX + HRACFx4hAhcfAQFHDAI= + + FuncGroup + 1 + LayoutID + 12 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Sniki - Realtek ALC 272 for Lenovo B570 and B570e + CodecID + 283902578 + ConfigData + + ASccEAEnHQEBJx6gAScfkAFHHCABRx0BAUce + EwFHH5ABRwwCAYccMAGHHZABhx6BAYcfAQIX + HEACFx1AAhceIQIXHwE= + + FuncGroup + 1 + LayoutID + 18 + + + AFGLowPowerState + + AwAAAA== + + Codec + Andres ZeroCross - Lenovo All In One PC C440 + CodecID + 283902578 + ConfigData + + AYccQAGHHZABhx6BAYcfAQEnHDABJx0BASce + oAEnH5ABpxwQAacdAQGnHhMBpx+ZAhccIAIX + HRACFx4hAhcfAQ== + + FuncGroup + 1 + LayoutID + 21 + + + AFGLowPowerState + + AwAAAA== + + Codec + Andres ZeroCross - Realtek ALC274 for Dell Inspiron 27-7777 AIO Series + CodecID + 283902580 + ConfigData + + ASccMAEnHQEBJx6gAScfkAFnHBABZx0BAWce + FwFnH5ABlxxAAZcdAAGXHoEBlx8EAhccIAIX + HRACFx4hAhcfBAFHDAICFwwC + + FuncGroup + 1 + LayoutID + 21 + WakeConfigData + + AWcMAgIXDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Andres ZeroCross - Realtek ALC274 for Dell Inspiron 27-7777 AIO Series + CodecID + 283902580 + ConfigData + + ASccEAEnHQEBJx6gAScfkAF3HCABdx0BAXce + FwF3H5ABdwwCAaccMAGnHRABpx6BAacfAgIX + HEACFx0QAhceIQIXHwICFwwC + + FuncGroup + 1 + LayoutID + 28 + + + AFGLowPowerState + + AwAAAA== + + Codec + jackjack1-su Realtek ALC274 for Microsoft Surface Pro 7 + CodecID + 283902580 + ConfigData + + ASccMAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxzwAUcdAAFHHgABRx9AAVcc8AFX + HQABVx4AAVcfQAFnHPABZx0AAWceAAFnH0AB + dxzwAXcdAAF3HgABdx9AAYcc8AGHHQABhx4A + AYcfQAGXHCABlx0QAZcegQGXHwIBpxzwAacd + AAGnHgABpx9AAbccQAG3HQEBtx4QAbcfkAG3 + DAIB5xzwAecdAAHnHgAB5x9AAfcc8AH3HQAB + 9x4AAfcfQAIXHFACFx0QAhceIQIXHwICFwwC + + FuncGroup + 1 + LayoutID + 35 + WakeConfigData + + AWcMAgIXDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC275 + CodecID + 283902581 + ConfigData + + ASccAAEnHQABJx6gAScfkAFHHBABRx0BAUce + FwFHH5ABVxwgAVcdEAFXHiEBVx8DAUcMAg== + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC275 + CodecID + 283902581 + ConfigData + + AUccEAFHHQEBRx4XAUcfkAFXHCABVx0QAVce + IQFXHwMBJxwwAScdAAEnHqABJx+QAYccQAGH + HVABhx6BAYcfAAHnHFAB5x0QAeceRQHnHwAB + RwwC + + FuncGroup + 1 + LayoutID + 13 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom ALC275 for Sony Vaio - vusun123 + CodecID + 283902581 + ConfigData + + ASccQAEnHQABJx6gAScfkAFXHBABVx0QAVce + IQFXHwABhxwwAYcdUAGHHoEBhx8AAaccUAGn + HQABpx4XAacfkAGnDAI= + + FuncGroup + 1 + LayoutID + 28 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC280 + CodecID + 283902592 + ConfigData + + AUccEAFHHQABRx4TAUcfkAFXHCABVx0QAVce + IQFXHwEBJxwwAScdAAEnHqABJx+QAaccQAGn + HRABpx6BAacfAgFHDAIBVwwC + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC280 - ComboJack + CodecID + 283902592 + ConfigData + + ASccEAEnHQABJx6gAScfkAFHHCABRx0AAUce + FwFHH5ABVxwwAVcdEAFXHiEBVx8CAaccQAGn + HRABpx6BAacfAgFHDAIBVwwC + + FuncGroup + 1 + LayoutID + 4 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Alienware alpha - Realtek ALC280 + CodecID + 283902592 + ConfigData + + IUcc8CFHHQAhRx4AIUcfQCFXHPAhVx0AIVce + ACFXH0AhZxzwIWcdACFnHgAhZx9AIXcc8CF3 + HQAhdx4AIXcfQCGHHPAhhx0AIYceACGHH0Ah + lxzwIZcdACGXHgAhlx9AIacc8CGnHQAhpx4A + IacfQCG3HPAhtx0AIbceACG3H0Ah5xwQIecd + 4SHnHkUh5x8B + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - Realtek ALC280 - Dell T20 - Version1 - ManualMode + CodecID + 283902592 + ConfigData + + AbccIAG3HUABtx4BAbcfAQGnHDABpx2QAace + gQGnHwIBhxxAAYcdMAGHHoEBhx8BAVccYAFX + HUABVx4hAVcfAgFXDAI= + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - Realtek ALC280 - Dell T20 - Version2 - SwitchMode + CodecID + 283902592 + ConfigData + + AbccIAG3HUABtx4RAbcfkAGnHDABpx2QAace + gQGnHwIBhxxAAYcdMAGHHoEBhx8BAVccYAFX + HUABVx4hAVcfAgFXDAI= + + FuncGroup + 1 + LayoutID + 15 + + + AFGLowPowerState + + AwAAAA== + + Codec + cowpod - Realtek ALC280 - Optiplex 9020SFF + CodecID + 283902592 + ConfigData + + AaccMAGnHZABpx6BAacfAgGHHEABhx0wAYce + gQGHHwEBRxxQAUcdAAFHHhcBRx+QAUcMAgFX + HGABVx1AAVceIQFXHwIBVwwC + + FuncGroup + 1 + LayoutID + 16 + WakeConfigData + + AUcMAgFXDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC280 - Optiplex 9020SFF - ManualMode + CodecID + 283902592 + ConfigData + + AUccMAFHHQABRx4XAUcfkAFHDAIBtxwgAbcd + QAG3HgEBtx8BAVccEAFXHUABVx4hAVcfAgFX + DAIBhxxAAYcdMAGHHoEBhx8BAaccUAGnHZAB + px6BAacfAg== + + FuncGroup + 1 + LayoutID + 17 + WakeConfigData + + AUcMAgFXDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Dell Precision T7610 Workstation ALC280 by Andres ZeroCross + CodecID + 283902592 + ConfigData + + AVccIAFXHUABVx4hAVcfAgGHHDABhx0AAYce + oAGHH5ABpxxAAacdkAGnHoEBpx8CAbccEAG3 + HQABtx4AAbcfAQFnDAI= + + FuncGroup + 1 + LayoutID + 21 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC282_v1 + CodecID + 283902594 + ConfigData + + ASccEAEnHQABJx6gAScfmQFHHCABRx0AAUce + EwGXHDABlx0QAZceiwGXHwABRx+ZAhccUAIX + HRACFx4rAhcfAQFHDAICFwwC + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC282_v2 + CodecID + 283902594 + ConfigData + + ASccQAEnHQABJx6gAScfkAFHHBABRx0AAUce + FwFHH5ABhxwwAYcdEAGHHoEBhx8AAeccIAHn + HRAB5x5EAecfAAIXHFACFx0QAhceIQIXHwAB + RwwC + + FuncGroup + 1 + LayoutID + 4 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC282 + CodecID + 283902594 + ConfigData + + ASccQAEnHQABJx6gAScfkAFHHBABRx0AAUce + FwFHH5ABhxwwAYcdEAGHHoEBhx8AAeccIAHn + HRAB5x5EAecfAAIXHFACFx0QAhceIQIXHwAB + RwwC + + FuncGroup + 1 + LayoutID + 13 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902594 + Comment + Custom ALC282 lenovo y430p by loverto + ConfigData + + ASccEAEnHQEBJx6mAScfkAFHHPABRx0AAUcd + AAFHH0ABdxzwAXcdAAF3HgABdx9AAYcccAGH + HRABhx6BAYcfAQGHHAIBlxzwAZcdAAGXHgAB + lx9AAacc8AGnHQABpx4AAacfQAG3HEABtx0B + AbceFwG3H5AB1xzwAdcdAAHXHgAB1x9AAecc + YAHnHRAB5x5EAecfAQIXHFACFx0QAhceIQIX + HwECFxwC + + FuncGroup + 1 + LayoutID + 22 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902594 + Comment + Skvo ALC282 Acer Aspire on IvyBridge by Andrey1970 + ConfigData + + ASccMAEnHQABJx6gAScfkAFHHBABRx0AAUce + FwFHH5ABdxzwAXcdAAF3HgABdx9AAYcc8AGH + HQABhx4AAYcfQAGXHPABlx0AAZceAAGXH0AB + pxzwAacdAAGnHgABpx9AAbcc8AG3HQABtx4A + AbcfQAHnHPAB5x0AAeceAAHnH0ACFxwgAhcd + EAIXHiECFx8B + + FuncGroup + 1 + LayoutID + 27 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902594 + Comment + Custom ALC282 Acer Aspire E1-572G + ConfigData + + AScc8AEnHQABJx4AAScfQAFHHBABRx0AAUce + FwFHH5ABdxzwAXcdAAF3HgABdx9AAYcc8AGH + HQABhx4AAYcfQAGXHPABlx0AAZceAAGXH0AB + pxzwAacdAAGnHgABpx9AAbccMAG3HQEBtx6g + AbcfkAHnHPAB5x0AAeceAAHnH0ACFxwgAhcd + EAIXHiECFx8B + + FuncGroup + 1 + LayoutID + 28 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902594 + Comment + Custom ALC282 Dell Inspirion 3521 by Generation88 + ConfigData + + ASccQAEnHQEBJx6gAScfkAFHHBABRx0BAUce + FwFHH5ABlxwwAZcdEAGXHoEBlx8BAhccIAIX + HRACFx4hAhcfAQFHDAI= + + FuncGroup + 1 + LayoutID + 29 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom ALC282 Lenovo Y410P by yunsur + CodecID + 283902594 + ConfigData + + ASccEAEnHQEBJx6mAScfkAFHHPABRx0AAUce + AAFHH0ABdxzwAXcdAAF3HgABdx9AAYccIAGH + HRABhx6BAYcfAQGXHPABlx0AAZceAAGXH0AB + pxzwAacdAAGnHgABpx9AAbccQAG3HQEBtx4X + AbcfkAHXHPAB1x0AAdceAAHXH0AB5xxwAecd + EAHnHkQB5x8BAhccUAIXHRACFx4hAhcfAQFH + DAI= + + FuncGroup + 1 + LayoutID + 41 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom ALC282 Lenovo Y430P by yunsur + CodecID + 283902594 + ConfigData + + ASccEAEnHQEBJx6mAScfkAFHHPABRx0AAUce + AAFHH0ABdxzwAXcdAAF3HgABdx9AAYccIAGH + HRABhx6BAYcfAQGXHPABlx0AAZceAAGXH0AB + pxzwAacdAAGnHgABpx9AAbccQAG3HQEBtx4X + AbcfkAHXHPAB1x0AAdceAAHXH0AB5xxwAecd + EAHnHkQB5x8BAhccUAIXHRACFx4hAhcfAQFH + DAI= + + FuncGroup + 1 + LayoutID + 43 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom ALC282 Lenovo Y510P by yunsur + CodecID + 283902594 + ConfigData + + ASccEAEnHQEBJx6mAScfkAFHHEABRx0BAUce + FwFHH5ABdxzwAXcdAAF3HgABdx9AAYccIAGH + HRABhx6BAYcfAQGXHPABlx0AAZceAAGXH0AB + pxzwAacdAAGnHgABpx9AAbcc8AG3HQABtx4A + AbcfQAHXHPAB1x0AAdceAAHXH0AB5xxwAecd + EAHnHkQB5x8BAhccUAIXHRACFx4hAhcfAQFH + DAI= + + FuncGroup + 1 + LayoutID + 51 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom ALC282 Hasee K580C by YM2008 + CodecID + 283902594 + ConfigData + + ASccEAEnHQEBJx6mAScfkAFHHCABRx1AAUce + EQFHHwEBdxzwAXcdAAF3HgABdx9AAYccIAGH + HRABhx6BAYcfAQGXHPABlx0AAZceAQGXH0AB + pxzwAacdAAGnHgEBpx9AAdcc8AG3HQABtx4B + AbcfQAHXHPUB1x0AAdceBQHXH0AB5xzwAecd + AAHnHgEB5x9AAhccQAIXHXACFx4hAhcfAQFH + DAI= + + FuncGroup + 1 + LayoutID + 76 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902594 + Comment + Custom ALC282 for Asus x200la + ConfigData + + ASccEAEnHQABJx6BAScfAAFHHCABRx0BAUce + EAFHH5kBdxzwAXcdAAF3HgABdx9AAYcc8AGH + HQABhx4AAYcfQAGXHDABlx0BAZcepgGXH5kB + pxzwAacdAAGnHgABpx9AAbcc8AG3HQABtx4A + AbcfQAHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAhccUAIXHUACFx4rAhcfAAFH + DAICFwwC + + FuncGroup + 1 + LayoutID + 86 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902594 + Comment + No input boost ALC282 Acer Aspire on IvyBridge by Andrey1970 + ConfigData + + ASccMAEnHQABJx6gAScfkAFHHBABRx0AAUce + FwFHH5ABdxzwAXcdAAF3HgABdx9AAYcc8AGH + HQABhx4AAYcfQAGXHPABlx0AAZceAAGXH0AB + pxzwAacdAAGnHgABpx9AAbcc8AG3HQABtx4A + AbcfQAHnHPAB5x0AAeceAAHnH0ACFxwgAhcd + EAIXHiECFx8B + + FuncGroup + 1 + LayoutID + 127 + + + AFGLowPowerState + + AwAAAA== + + Codec + Toleda NUC/BRIX patch ALC283 + CodecID + 283902595 + ConfigData + + AScc8AEnHQABJx4AAScfQAFHHPABRx0AAUce + AAFHH0ABdxzwAXcdAAF3HgABdx9AAYcc8AGH + HQABhx4AAYcfQAGXHGABlx0wAZceiwGXHwEB + pxzwAacdAAGnHgABpx9AAbcc8AG3HQABtx4A + AbcfQAHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAhcccAIXHUACFx4rAhcfAQGX + DAICFwwC + + FuncGroup + 1 + LayoutID + 1 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC283 + CodecID + 283902595 + ConfigData + + ASccEAEnHQEBJx6gAScfkAFHHCABRx0BAUce + FwFHH5ABlxwwAZcdAAGXHosBlx8AAhccQAIX + HRACFx4rAhcfAQFHDAICFwwC + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom by Slbomber ALC283 (V3-371) + CodecID + 283902595 + ConfigData + + ASccEAEnHQEBJx6gAScfkAFHHEABRx0BAUce + FwFHH5ABdxzwAXcdAAF3HgABdx9AAYcc8AGH + HQABhx4AAYcfQAGXHPABlx0AAZceAAGXH0AB + pxzwAacdAAGnHgABpx8AAbcc8AG3HQABtx4A + AbcfQAHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAhccUAIXHRACFx4hAhcfAwFH + DAICFwwC + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC283 for AlldoCube/Cube Mix Plus by Aldo97 + CodecID + 283902595 + ConfigData + + ASccEAEnHQEBJx6gAScfkAFHHCABRx0BAUce + FwFHH5ABlxwwAZcdAAGXHosBlx8AAhccQAIX + HRACFx4rAhcfAQFHDAICFwwC + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - alc283 for LENOVO IDEAPAD 14 + CodecID + 283902595 + ConfigData + + AUccEAFHHQABRx4XAUcfkAFHDAIBlxwgAZcd + EAGXHoEBlx8AASccMAEnHQABJx6mAScfkAIX + HGACFx0QAhceIQIXHwACFwwC + + FuncGroup + 1 + LayoutID + 15 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC283 for ThinkCentre M93z 10AF ALC283 by giesteira + CodecID + 283902595 + ConfigData + + AbccQAG3HQABtx4XAbcfmQEnHBABJx0AASce + pgEnH5kBlxwgAZcdkAGXHoEBlx8BAaccMAGn + HZABpx6BAacfAQIXHAACFx1AAhceIQIXHwEB + RwwC + + FuncGroup + 1 + LayoutID + 44 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC283 for NUC7 by mikes + CodecID + 283902595 + ConfigData + + AUccAAFHHQABRx4AAUcfQAEnHCABJx0AASce + pgEnH5AB1xwwAdcdEAHXHoEB1x8AAhccQAIX + HRACFx4hAhcfAg== + + FuncGroup + 1 + LayoutID + 45 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ASRock DeskMini 110(H110M-STX) ALC283 by licheedev + CodecID + 283902595 + ConfigData + + ASccgAEnHQABJx4AAScfQAFHHEABRx0BAUce + EwFHH5ABpxwgAacdkAGnHoEBpx8BAdccYAHX + HZAB1x5VAdcfQAIXHFACFx0QAhceIQIXHwEB + RwwCAhcMAg== + + FuncGroup + 1 + LayoutID + 66 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC283 for DELL R14 3437 by xiaoleGun(zoran) + CodecID + 283902595 + ConfigData + + AUccEAFHHQEBRx4XAUcfkAFHDAIBdxzwAXcd + AAF3HgABdx9AAYcc8AGHHQABhx4AAYcfQAGX + HEABlx0gAZceiwGXHwIBpxzwAacdAAGnHgAB + px9AAbcc8AG3HQABtx4AAbcfQAHXHPAB1x0A + AdceAAHXH0AB5xzwAecdAAHnHgAB5x9AAScc + MAEnHQEBJx6mAScfkAIXHCACFx0QAhceIQIX + HwICFwwC + + FuncGroup + 1 + LayoutID + 88 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC284 + CodecID + 283902596 + ConfigData + + ASccEAEnHQABJx6gAScfkAE3HCABNx0AATce + AAE3H0ABRxwwAUcdAAFHHhcBRx+QAVccQAFX + HRABVx4hAVcfAAGHHFABhx0QAYcegQGHHwIB + 1xxgAdcdgAHXHmYB1x9AAUcMAg== + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Rover Realtek ALC285 for X1C6th + CodecID + 283902597 + ConfigData + + ASccEAEnHQEBJx6mAScfkAFHHDABRx0BAUce + FwFHH5ABlxwAAZcdEAGXHosBlx8BAhccIAIX + HRACFx4rAhcfAQHXHGAB1x2AAdceZgHXH0AB + RwwC + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902597 + CodecName + Andres - Realtek ALC285 for Lenovo X1 Carbon 6th + ConfigData + + ASccEAEnHQEBJx6mAScfkAFHHDABRx0BAUce + FwFHH5ABlxwAAZcdEAGXHosBlx8EAhccIAIX + HRACFx4rAhcfBAFHDAICFwwC + + FuncGroup + 1 + LayoutID + 21 + WakeConfigData + + AUcMAgIXDAIBlwcl + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902597 + CodecName + Flymin - Realtek ALC285 for Thinkpad X1E + ConfigData + + ASccEAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxxAAUcdAQFHHhcBRx+QAUcMAgFn + HPABZx0AAWceAAFnH0ABdxzwAXcdAAF3HgAB + dx9AAYcc8AGHHQABhx4AAYcfQAGXHCABlx0Q + AZceiwGXHwQBpxzwAacdAAGnHgABpx9AAdcc + 8AHXHQAB1x4AAdcfQAHnHPAB5x0AAeceAAHn + H0ACFxxQAhcdEAIXHisCFx8EAhcMAg== + + FuncGroup + 1 + LayoutID + 31 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC285 for Yoga C740 by fewtarius + CodecID + 283902597 + ConfigData + + AUccEAFHHQEBRx4TAUcfmQFHDAICFxwgAhcd + EAIXHiECFx8TAhcMAgGXHEABlx0RAZceoQGX + H5M= + + FuncGroup + 1 + LayoutID + 61 + WakeConfigData + + AUcMAgIXDAIBlwcl + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + jpuxdev - Realtek ALC285 for Spectre x360 13-ap0xxx + CodecID + 283902597 + ConfigData + + ASccEAEnHQEBJx6mAScfkAFHHDABRx0BAUce + FwFHH5ABRwwCAXccQAF3HQEBdx4XAXcfkAGX + HAABlx0QAZceiwGXHwEB1xxQAdcdgAHXHmYB + 1x9AAhccIAIXHRACFx4rAhcfAQIXDAI= + + FuncGroup + 1 + LayoutID + 71 + WakeConfigData + + AUcMAgIXDAIBlwcl + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902598 + CodecName + Mirone - Realtek ALC286 + ConfigData + + ASccEAEnHQABJx6mAScfsAFHHCABRx0AAUce + FwFHH5ABhxwwAYcdEAGHHosBhx8EAhccQAIX + HRACFx4rAhcfBAFHDAI= + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902598 + CodecName + Lenovo YOGA3 pro ALC286 - gdllzkusi + ConfigData + + ASccIAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxxAAUcdAQFHHhcBRx+QAUcMAgF3 + HPABdx0AAXceAAF3H0ABhxwQAYcdEAGHHoEB + hx8EAZcc8AGXHQABlx4AAZcfQAGnHPABpx0A + AaceAAGnH0AB1xzwAdcdAAHXHgAB1x9AAecc + 8AHnHQAB5x4AAecfQAIXHDACFx0QAhceIQIX + HwQCFwwC + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC287 + CodecID + 283902599 + ConfigData + + AXccEAF3HQEBdx4XAXcfkAIXHCACFx0QAhce + IQIXHwMCFwwCAZccMAGXHRABlx6BAZcfAw== + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AhcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC288 + CodecID + 283902600 + ConfigData + + ASccEAEnHQABJx6gAScfkAE3HCABNx0AATce + AAE3H0ABRxwwAUcdAAFHHhcBRx+QAYccQAGH + HRABhx6BAYcfAgHXHFAB1x2AAdceZQHXH0AC + FxxgAhcdEAIXHiECFx8BAUcMAg== + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC288 for Dell XPS 9343 + CodecID + 283902600 + ConfigData + + ASccIAEnHQABJx6gAScfkAFHHDABRx0AAUce + FwFHH5ABNxxAATcdEAE3HoEBNx8AAhccUAIX + HRACFx4hAhcfAAFHDAI= + + FuncGroup + 1 + LayoutID + 13 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + yyfn - Realtek ALC288 for Dell XPS 9343 + CodecID + 283902600 + ConfigData + + ASccIAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxwQAUcdAQFHHhcBRx+QAUcMAgF3 + HPABdx0AAXceAAF3H0ABhxzwAYcdAAGHHgAB + hx9AAZcc8AGXHQABlx4AAZcfQAGnHHABpx0g + AacYqwGnHwIBpwwCAdcc8AHXHQAB1x4AAdcf + QAHnHPAB5x0AAeceAAHnH0ACFxw/AhcdEAIX + HisCFx8D + + FuncGroup + 1 + LayoutID + 23 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + leeoem - Realtek ALC289 for alienware m17r2 + CodecID + 283902601 + ConfigData + + ASccIAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxxAAUcdAQFHHhcBRx+QAUcMAgFn + HPABZx0AAWceAAFnH0ABdxzwAXcdAAF3HgAB + dx9AAYcc8AGHHQABhx4AAYcfQAGXHHABlx0Q + AZceiwGXHwIBpxzwAacdAAGnHgABpx9AAbcc + 8AG3HQABtx4AAbcfQAHXHPAB1x0AAdceAAHX + H0AB5xzwAecdAAHnHgAB5x9AAhccMAIXHRAC + Fx4rAhcfAgIXDAI= + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAgG3DAICFwwC + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC289 for Acer PT515-51 By Bugprogrammer and Rover + CodecID + 283902601 + ConfigData + + ATccMAE3HQEBNx6mATcftwFHHBABRx0BAUce + FwFHH5ABRwwCAbccQAG3HRABtx6BAbcfAwG3 + DAICFxwgAhcdEAIXHiECFx8DAhcMAg== + + FuncGroup + 1 + LayoutID + 23 + WakeConfigData + + AUcMAgG3DAICFwwC + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC289 for Dell XPS 13 9300 by DalianSky + CodecID + 283902601 + ConfigData + + ASccEAEnHQEBJx6mAScfmQF3HDABdx0BAXce + FwF3H5kBlxwAAZcdEAGXHosBlx4CAhccIAIX + HRACFx4rAhcfAQIXDAI= + + FuncGroup + 1 + LayoutID + 99 + WakeConfigData + + AUcMAgG3DAICFwwC + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC290 + CodecID + 283902608 + ConfigData + + AUccEAFHHQABRx4XAUcfkAFXHCABVx0QAVce + KwFXHwIBlxwwAZcdAAGXHqABlx+QAaccQAGn + HRABpx6LAacfAAFHDAI= + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902608 + Comment + macpeetALC ALC290 aka ALC3241 + ConfigData + + AaccIAGnHRABpx6BAacfAAEnHDABJx0AASce + owEnH5ABRxxAAUcdAAFHHhcBRx+QAVccUAFX + HRABVx4hAVcfAAFHDAI= + + FuncGroup + 1 + LayoutID + 4 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902608 + Comment + ALC3241 - HP Envy 15t-k200 Beats Audio 2.1 + ConfigData + + AaccEAGnHRABpx6BAacfAAEnHCABJx0AASce + owEnH5ABRxwwAUcdAQFHHhABRx+QAXccMQF3 + HQEBdx4QAXcfkAFXHFABVx0QAVceIQFXHwAB + RwwC + + FuncGroup + 1 + LayoutID + 10 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902608 + Comment + MacPeet - ALC290 for HP m6 n015dx + ConfigData + + AaccIAGnHRABpx6BAacfAAEnHDABJx0AASce + owEnH5ABVxxAAVcdEAFXHiEBVx8AAYccUAGH + HQEBhx4XAYcfkAGHDAI= + + FuncGroup + 1 + LayoutID + 15 + WakeConfigData + + AYcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902608 + Comment + vusun123 - ALC 290 for Dell Vostro 5480 + ConfigData + + ASccMAEnHQABJx6gAScfkAFHHBABRx0AAUce + FwFHH5ABRwwCAVccIAFXHRABVx4hAVcfAAGn + HEABpx0QAacegQGnHwA= + + FuncGroup + 1 + LayoutID + 28 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom ALC292 + CodecID + 283902610 + ConfigData + + ASccEAEnHQABJx6gAScfmQFHHCABRx0AAUce + FwFHH5kBVxwwAVcdQAFXHiEBVx8BAZccUAGX + HZABlx6BAZcfAQFHDAI= + + FuncGroup + 1 + LayoutID + 12 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - alc292 for LENOVO THINKPAD T450_T450s_X240 - ManualMode + CodecID + 283902610 + ConfigData + + AaccIAGnHRABpx6BAacfAAEnHDABJx0AASce + pgEnH5ABRxxAAUcdAAFHHhcBRx+QAUcMAgFX + HFABVx0QAVceAQFXHwABVwwC + + FuncGroup + 1 + LayoutID + 15 + WakeConfigData + + AUcMAgFXDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902610 + Comment + vanquybn - ALC 292 for Dell M4800 + ConfigData + + AUccEAFHHQABRx4XAUcfkAGHHCABhx2QAYce + gQGHHwEBJxwwAScdAAEnHqYBJx+QAVccQAFX + HUABVx4hAVcfAQ== + + FuncGroup + 1 + LayoutID + 18 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902610 + Comment + vusun123 - ALC 292 for Lenovo T440 + ConfigData + + ASccMAEnHQABJx6gAScfkAFHHEABRx0AAUce + FwFHH5ABRwwCAVccUAFXHRABVx4hAVcfAAGn + HCABpx0QAacegQGnHwA= + + FuncGroup + 1 + LayoutID + 28 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902610 + Comment + ALC292 for Lenovo T450s By Echo + ConfigData + + ASccEAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRx0BAUceFwFHH5ABRwwCAVccQAFX + HRABVx4rAVcfBAFXDAIBZxzwAWcdAAFnHgAB + Zx9AAYcc8AGHHQABhx4AAYcfQAGXHPABlx0A + AZceAAGXH0ABpxwgAacdEAGnHosBpx8EAbcc + 8AG3HQABtx4AAbcfQAHXHPAB1x0AAdceAAHX + H0AB5xzwAecdAAHnHgAB5x9AAUccMA== + + FuncGroup + 1 + LayoutID + 32 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283902610 + Comment + baesar0 -ALC 292 for e6540 with dock + ConfigData + + ASccEAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxxAAUcdAQFHHhcBRx+QAUcMAgFX + HFABVx1AAVceKwFXHwIBVwwCAWccgAFnHUAB + Zx4BAWcfAgFnDAIBhxzwAYcdAAGHHgABhx9A + AZccIAGXHZABlx6BAZcfAgGnHHABpx0QAace + qwGnHwIBtxzwAbcdAAG3HgABtx9AAdcc8AHX + HQAB1x4AAdcfQAHnHPAB5x0AAeceAAHnH0A= + + FuncGroup + 1 + LayoutID + 55 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC293 Dell E7450 by Andres ZeroCross + CodecID + 283902611 + ConfigData + + AScc8AEnHQABJx4AAScfQAE3HBABNx0BATce + oAE3H5ABRxwwAUcdAQFHHhcBRx+QAVccQAFX + HUABVx4rAVcfAgFnHFABZx1AAWceAQFnHwIB + hxzwAYcdAAGHHgABhx9AAZcc8AGXHQABlx4A + AZcfQAGnHCABpx0QAaceiwGnHwIBtxzwAbcd + AAG3HgABtx9AAdcc8AHXHQAB1x4AAdcfQAHn + HPAB5x0AAeceAAHnH0ABRwwCAVcMAgFnDAI= + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + tluck - ALC 293 for Lenovo T460/T560 - extra LineOut on Dock + CodecID + 283902611 + ConfigData + + ASccEAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxwgAUcdAQFHHhcBRx+QAVccMAFX + HRABVx4hAVcfAwFnHPABZx0AAWceAAFnH0AB + hxzwAYcdAAGHHgABhx9AAZcc8AGXHQABlx4A + AZcfQAGnHEABpx0QAacegQGnHwMBtxzwAbcd + AAG3HgABtx9AAdcc8AHXHQAB1x4AAdcfQAHn + HPAB5x0AAeceAAHnH0ABRwwCAVcMAg== + + FuncGroup + 1 + LayoutID + 28 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + tluck - ALC 293 for Lenovo T460/T560 + CodecID + 283902611 + ConfigData + + ASccEAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxwgAUcdAQFHHhcBRx+QAVccMAFX + HRABVx4hAVcfAwFnHPABZx0AAWceAAFnH0AB + hxzwAYcdAAGHHgABhx9AAZcc8AGXHQABlx4A + AZcfQAGnHEABpx0QAacegQGnHwMBtxzwAbcd + AAG3HgABtx9AAdcc8AHXHQAB1x4AAdcfQAHn + HPAB5x0AAeceAAHnH0ABRwwCAVcMAg== + + FuncGroup + 1 + LayoutID + 29 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Rover - Realtek ALC294 for Asus FL8000U + CodecID + 283902612 + ConfigData + + AbccEAG3HQEBtx6nAbcfkAFHHCABRx0BAUce + FwFHH5ACFxwwAhcdEAIXHiECFx8BAUcMAgG3 + DAICFwwC + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - Realtek ALC294 for Lenovo M710Q + CodecID + 283902612 + ConfigData + + AhccIAIXHRACFx4hAhcfAAGXHDABlx0QAZce + gQGXHwABpxxAAacdkAGnHoEBpx8AAUccUAFH + HQABRx4XAUcfkAFHDAI= + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC294 + CodecID + 283902612 + ConfigData + + AXccEAF3HQABdx4XAXcfkAEnHCABJx0AASce + oAEnH5ACFxwwAhcdEAIXHiECFx8A + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AwAAAA== + + Codec + Andres ZeroCross - ALC294 ASUS ZenBook Flip 14 UX461UA + CodecID + 283902612 + ConfigData + + ASccIAEnHQEBJx6gAScfkAF3HBABdx0BAXce + FwF3H5ABlxxAAZcdEAGXHoEBlx8EAhccMAIX + HRACFx4hAhcfBAF3DAICFwwC + + FuncGroup + 1 + LayoutID + 21 + WakeConfigData + + AXcMAgIXDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + cowpod - Realtek ALC294 for ASUS ROG GL504GW + CodecID + 283902612 + ConfigData + + ASccIAEnHQEBJx6gAScfkAF3HBABdx0BAXce + FwF3H5ABlxxAAZcdEAGXHoEBlx8EAhccMAIX + HRACFx4hAhcfBAF3DAICFwwC + + FuncGroup + 1 + LayoutID + 22 + WakeConfigData + + AXcMAgIXDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Ayat Kyo - Realtek ALC294 for Asus ROG G531GD + CodecID + 283902612 + ConfigData + + ATccAAE3HQABNx4QATcfQAFHHBABRx0BAUce + FwFHH5ABRwwCAZccIAGXHRABlx6BAZcfBAIX + HDACFx0QAhceIQIXHwQCFwwCAdccQAHXHZoB + 1x5nAdcfQAEnHFABJx0BASceoAEnH5A= + + FuncGroup + 1 + LayoutID + 28 + WakeConfigData + + AUcMAgIXDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + KKKIIINNN - ALC294 ASUS X542UQR + CodecID + 283902612 + ConfigData + + AhccIAIXHRACFx4hAhcfAQG3HDABtx0BAbce + pwG3H5ABlxwwAZcdEAGXHoEBlx8BAUccEAFH + HQEBRx4XAUcfkAFHDAIBtwwCAhcMAg== + + FuncGroup + 1 + LayoutID + 66 + WakeConfigData + + AUcMAgG3DAICFwwC + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Damon - Realtek ALC 295 for HP Envy x360 15-bp107tx + CodecID + 283902613 + ConfigData + + ASccMAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxzwAUcdAAFHHgABRx9AAUcMAgFn + HPABZx0AAWceAAFnH0ABdxwQAXcdAQF3HhcB + dx+QAYcc8AGHHQABhx4BAYcfQAGXHEABlx0Q + AZcegQGXHwIBpxzwAacdAAGnHgABpx9AAbcc + 8AG3HQABtx4AAbcfQAG3DAIB1xzwAdcdAAHX + HgAB1x9AAecc8AHnHQAB5x4BAecfQAIXHCAC + Fx0QAhceIQIXHwICFwwC + + FuncGroup + 1 + LayoutID + 1 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC295/ALC3254 + CodecID + 283902613 + ConfigData + + ASccEAEnHQABJx6mAScfmQF3HCABdx0AAXce + FwF3H5kBlxwwAZcdEAGXHoEBlx8CAhccQAIX + HRACFx4hAhcfAgF3DAIBRwwCAhcMAg== + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + DalianSky - Realtek ALC295/ALC3254 Dell7570 + CodecID + 283902613 + ConfigData + + ASccIAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxxAAUcdAQFHHhcBRx+QAUcMAgFn + HPABZx0AAWceAAFnH0ABdxzwAXcdAAF3HgAB + dx9AAYcc8AGHHQABhx4AAYcfQAGXHBABlx0Q + AZcegQGXHwIBpxzwAacdAAGnHgABpx9AAbcc + 8AG3HQABtx4AAbcfQAHXHPAB1x0AAdceAAHX + H0AB5xzwAecdAAHnHgAB5x9AAhccMAIXHRAC + Fx4hAhcfAgIXDAI= + + FuncGroup + 1 + LayoutID + 13 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC295 v2 Asus UX430UA + CodecID + 283902613 + ConfigData + + AXccEAF3HQABdx4XAXcfkAEnHCABJx0AASce + oAEnH5ACFxwwAhcdEAIXHiECFx8AAZccQAGX + HRABlx6BAZcfAAIXDAIBJwcgAXcHQAGXByAB + 1wcgAecHQAIXB8A= + + FuncGroup + 1 + LayoutID + 14 + WakeConfigData + + AScHIAF3B0ABlwcgAdcHIAHnB0ACFwfA + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC295/ALC3254 + CodecID + 283902613 + ConfigData + + AUccEAFHHQABRx4XAUcfkAEnHCABJx0AASce + oAEnH5ACFxwwAhcdEAIXHiECFx8AAZccQAGX + HRABlx6BAZcfAA== + + FuncGroup + 1 + LayoutID + 15 + + + AFGLowPowerState + + AwAAAA== + + Codec + Andres - ALC295 Acer Nitro 5 Spin (NP515-51) + CodecID + 283902613 + ConfigData + + ASccIAEnHQEBJx6gAScfkAE3HPABNx0AATce + AAE3H0ABRxwQAUcdAQFHHhcBRx+QAWcc8AFn + HQABZx4AAWcfQAF3HPABdx0AAXceAAF3H0AB + hxzwAYcdAAGHHgABhx9AAZccMAGXHRABlx6B + AZcfAgGnHPABpx0AAaceAAGnH0ABtxzwAbcd + AAG3HgABtx9AAdcc8AHXHQAB1x4AAdcfQAHn + HPAB5x0AAeceAAHnH0ACFxxAAhcdEAIXHiEC + Fx8CAUcMAgIXDAI= + + FuncGroup + 1 + LayoutID + 21 + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC295 by aleix + CodecID + 283902613 + ConfigData + + ATccAAE3HQABNx4AATcfQAHXHAEB1x0AAdce + YAHXH0ABRxwQAUcdAQFHHhcBRx+RAUcMAgIX + HCACFx0QAhceIQIXHwMCFwwCASccMAEnHQEB + Jx6mAScftwGXHEABlx0QAZcegQGXHwMBZxzw + AWcdEQFnHhEBZx9BAXcc8AF3HREBdx4RAXcf + QQGHHPABhx0RAYceEQGHH0EBpxzwAacdEQGn + HhEBpx9BAbcc8AG3HREBtx4RAbcfQQG3DAIB + 5xzwAecdEQHnHhEB5x9B + + FuncGroup + 1 + LayoutID + 22 + WakeConfigData + + ATcMAAHXDAABRwwCAhcMAgEnDAABlwwAAWcM + AAF3DAABhwwAAacMAAG3DAIB5wwA + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + vusun123 - ALC 295 for Skylake HP Pavilion + CodecID + 283902613 + ConfigData + + ASccMAEnHQABJx6gAScfuQFHHFABRx0AAUce + FwFHH5ABRwwCAZccQAGXHRABlx6BAZcfAAIX + HCACFx0QAhceIQIXHwA= + + FuncGroup + 1 + LayoutID + 28 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Unbelievable9 - Realtek ALC295/ALC3254 for Dell Latitude 5290 + CodecID + 283902613 + ConfigData + + ASccMAEnHQEBJx6mAScftwE3HPABNx0AATce + AAE3H0ABRxwQAUcdAQFHHhcBRx+QAUcMAgFn + HPABZx0AAWceAAFnH0ABdxzwAXcdAAF3HgAB + dx9AAYcc8AGHHQABhx4AAYcfQAGXHHABlx0g + AZceqwGXHwIBpxzwAacdAAGnHgABpx9AAbcc + 8AG3GwABtx4AAbcfQAHXHPAB1x0AAdceAAHX + H0AB5xzwAecdAAHnHgAB5x9AAhccMAIXHRAC + Fx4rAhcfAgIXDAI= + + FuncGroup + 1 + LayoutID + 77 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC298 SP4 - ComboJack + CodecID + 283902616 + ConfigData + + ASccEAEnHQABJx6gAScfkAFHHCABRx0AAUce + FwFHH5ABhxwwAYcdEAGHHoEBhx8CAhccQAIX + HRACFx4hAhcfAgFHDAICFwwC + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Rockjesus - Realtek ALC298 for Alienware 17 ALC3266 + CodecID + 283902616 + ConfigData + + ASccQAEnHQEBJx6mAScftwF3HBABdx0BAXce + FwF3H5ABpxwwAacdEAGnHqEBpx8DAhccIAIX + HRACFx4hAhcfAw== + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC298 + CodecID + 283902616 + ConfigData + + AXccEAF3HQABdx4XAXcfkAEnHCABJx0AASce + oAEnH5ACFxwwAhcdEAIXHiECFx8CAYccQAGH + HRABhx6BAYcfAgFHDAICFwwC + + FuncGroup + 1 + LayoutID + 13 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Ping - Realtek ALC298 for Dell Precision 5520 + CodecID + 283902616 + ConfigData + + ASccMAEnHQEBJx6gAScfkAF3HBABdx0BAXce + FwF3H5ABhxxwAYcdIAGHHosBhx8CAhccIAIX + HRACFx4rAhcfAwF3DAICFwwC + + FuncGroup + 1 + LayoutID + 16 + WakeConfigData + + AXcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Lenovo 720S-15IKB ALC298 by Andres ZeroCross + CodecID + 283902616 + ConfigData + + ASccMAEnHQEBJx6gAScfkAE3HPABNx0AATce + AAE3H0ABRxzwAUcdAAFHHgABRx9AAXcc8AF3 + HQABdx4AAXcfQAGHHHABhx0QAYcegQGHHwAB + lxzwAZcdAAGXHgABlx9AAaccUAGnHQEBpx4X + AacfkAHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAfcc8AH3HQAB9x4AAfcfQAIX + HCACFx0QAhceIQIXHwABpwwC + + FuncGroup + 1 + LayoutID + 21 + WakeConfigData + + AacMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Razer Blade 14 2017 by Andres ZeroCross + CodecID + 283902616 + ConfigData + + ASccMAEnHQEBJx6gAScfkAE3HPABNx0AATce + AAE3H0ABRxwQAUcdAQFHHhcBRx+QAXcc8AF3 + HQABdx4AAXcfQAGHHEABhx0QAYcegQGHHwMB + lxzwAZcdAAGXHgABlx9AAacc8AGnHQABpx4A + AacfQAHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAfcc8AH3HQAB9x4AAfcfQAIX + HCACFx0QAhceIQIXHwMBRwwC + + FuncGroup + 1 + LayoutID + 22 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + vusun123 - Realtek ALC298 for Dell XPS 9x50 + CodecID + 283902616 + ConfigData + + ASccMAEnHQABJx6gAScfkAF3HEABdx0AAXce + FwF3H5ABdwwCAhccIAIXHRACFx4hAhcfAA== + + FuncGroup + 1 + LayoutID + 28 + + + AFGLowPowerState + + AwAAAA== + + Codec + vusun123 - Realtek ALC298 for Lenovo X270 + CodecID + 283902616 + ConfigData + + AEcc8ABHHQAARx4AAEcfAABXHPAAVx0AAFce + AABXHwAAdxzwAHcdAAB3HgAAdx8AAOcc8ADn + HQAA5x4AAOcfAAD3HPAA9x0AAPceAAD3HwAB + BxzwAQcdAAEHHgABBx8AASccQAEnHQEBJx6g + AScfkAE3HPABNx0AATceAAE3HwABRxwQAUcd + AQFHHhcBRx+QAUcMAgFXHPABVx0AAVceAAFX + HwABZxzwAWcdAAFnHgABZx8AAXcc8AF3HQAB + dx4AAXcfAAGHHDABhx0QAYcegQGHHwMBlxzw + AZcdAAGXHgABlx8AAacc8AGnHQABpx4AAacf + AAG3HPABtx0AAbceAAG3HwABxxzwAccdAAHH + HgABxx8AAdcc8AHXHQAB1x4AAdcfAAHnHPAB + 5x0AAeceAAHnHwAB9xzwAfcdAAH3HgAB9x8A + Agcc8AIHHQACBx4AAgcfAA== + + FuncGroup + 1 + LayoutID + 29 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Constanta - Realtek ALC298 for Xiaomi Mi Notebook Air 13.3 Fingerprint 2018 + CodecID + 283902616 + ConfigData + + ASccMAEnHQABJx6gAScfkAF3HEABdx0AAXce + FwF3H5ABdwwCAYcccAGHHRABhx6BAYcfAAIX + HCACFx0QAhceIQIXHwA= + + FuncGroup + 1 + LayoutID + 30 + WakeConfigData + + AXcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + smallssnow xps 9570 - Realtek ALC298 + CodecID + 283902616 + ConfigData + + ASccEAEnHQEBJx6mAScfmQF3HEABdx0BAXce + FwF3H5ABdwwCAYcc8AGHHQABhx4AAYcfQAGn + HPABpx0AAaceAAGnH0ACFxxQAhcdEAIXHiEC + Fx8BATcc8AE3HQABNx4AATcfQAFHHPABRx0A + AUceAAFHH0ABlxzwAZcdAAGXHgABlx9AAdcc + 8AHXHQAB1x4AAdcfQAHnHPAB5x0AAeceAAHn + H0AB9xzwAfcdAAH3HgAB9x9A + + FuncGroup + 1 + LayoutID + 32 + WakeConfigData + + AXcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Daliansky - Realtek ALC298 ThinkPad T470p + CodecID + 283902616 + ConfigData + + ASccEAEnHQABJx6gAScfkAFHHCABRx0AAUce + FwFHH5ABhxwwAYcdEAGHHoEBhx8CAhccQAIX + HRACFx4hAhcfAgFHDAICFwwC + + FuncGroup + 1 + LayoutID + 47 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + lgs3137 - Realtek ALC298 MECHREVO S1 + CodecID + 283902616 + ConfigData + + ASccEAEnHQEBJx6mAScfkAE3HPABNx0AATce + AAE3H0ABRxwgAUcdAQFHHhcBRx+QAXcc8AF3 + HQABdx4AAXcfQAGHHDABhx0QAYcegQGHHwQB + lxzwAZcdAAGXHgABlx9AAacc8AGnHQABpx4A + AacfQAHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAfcc8AH3HQAB9x4AAfcfQAIX + HEACFx0QAhceIQIXHwQBRwwC + + FuncGroup + 1 + LayoutID + 66 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom - Realtek ALC298 for Dell XPS 9560 by KNNSpeed + CodecID + 283902616 + ConfigData + + ASccEAEnHQEBJx6mAScfkAF3HCABdx0BAXce + FwF3H5ABhxwwAYcdEAGHHqsBhx8DAaccQAGn + HRABpx6LAacfAwIXHFACFx0QAhceKwIXHwMB + RwwCAXcMAgGnDAICFwwC + + FuncGroup + 1 + LayoutID + 72 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Daliansky - Realtek ALC298 XiaoMi Pro + CodecID + 283902616 + ConfigData + + ASccEAEnHQEBJx6gAScfkAE3HPABNx0AATce + AAE3H0ABRxzwAUcdAAFHHgABRx9AAXccIAF3 + HQEBdx4XAXcfkAGHHDABhx0QAYcegQGHHwMB + lxzwAZcdAAGXHgABlx9AAacc8AGnHQABpx4A + AacfQAHXHPAB1x0AAdceAAHXH0AB5xzwAecd + AAHnHgAB5x9AAfcc8AH3HQAB9x4AAfcfQAIX + HEACFx0QAhceIQIXHwMBdwwC + + FuncGroup + 1 + LayoutID + 99 + WakeConfigData + + AXcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Andres - ALC299 Acer Helios 500 + CodecID + 283902617 + ConfigData + + ASccQAEnHQEBJx6gAScfkAFHHBABRx0BAUce + FwFHH5ABlxwwAZcdEAGXHoEBlx8EAhccIAIX + HRACFx4hAhcfBAFHDAICFwwC + + FuncGroup + 1 + LayoutID + 21 + WakeConfigData + + AUcMAgIXDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Andres - ALC299 Dell XPS13 + CodecID + 283902617 + ConfigData + + ASccQAEnHQEBJx6gAScfkAF3HBABdx0BAXce + FwF3H5ABlxwwAZcdEAGXHoEBlx8EAhccIAIX + HRACFx4hAhcfBA== + + FuncGroup + 1 + LayoutID + 22 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC662 + CodecID + 283903586 + ConfigData + + AUccEAFHHUABRx4RAUcfkAGHHCABhx2QAYce + oAGHH5AB5xwwAecdYQHnHksB5x8BAaccQAGn + HTABpx6BAacfAQG3HFABtx1AAbceIQG3HwEB + lxxgAZcdkAGXHoEBlx8C + + FuncGroup + 1 + LayoutID + 5 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC662 + CodecID + 283903586 + ConfigData + + AUccEAFHHUABRx4RAUcfAQFXHCABVx0QAVce + AQFXHwEBZxwwAWcdYAFnHgEBZx8BAXccQAF3 + HSABdx4BAXcfAQGHHFABhx2QAYceoAGHH5AB + lxxgAZcdkAGXHoEBlx8CAacccAGnHTABpx6B + AacfAQG3HIABtx1AAbceIQG3HwIB5xyQAecd + YAHnHkUB5x8B + + FuncGroup + 1 + LayoutID + 7 + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom ALC662 by Irving23 for Lenovo ThinkCentre M8400t-N000 + CodecID + 283903586 + ConfigData + + IUccECFHHUAhRx4RIUcfASGHHCAhhx2QIYce + oCGHH5AhlxxgIZcdkCGXHqEhlx8CIaccQCGn + HTAhpx6BIacfASG3HFAhtx1AIbceISG3HwIh + 5xwwIecdYSHnHksh5x8B + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom ALC662 by stich86 for Lenovo ThinkCentre M800 + CodecID + 283903586 + ConfigData + + IUccECFHHUAhRx4RIUcfASGHHCAhhx2QIYce + oCGHH5AhlxxgIZcdkCGXHqEhlx8CIaccQCGn + HTAhpx6BIacfASG3HFAhtx1AIbceISG3HwIh + 5xwwIecdYSHnHksh5x8B + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom ALC662 by Vandroiy for Asus X66Ic + CodecID + 283903586 + ConfigData + + AUccMAFHHQEBRx4QAUcfkAG3HEABtx0AAbce + IQG3HwEBlxwQAZcdAQGXHqABlx+QAYccIAGH + HQABhx6BAYcfAQFXHPABVx0AAVceAAFXH0AB + ZxzwAWcdAAFnHgABZx9AAacc8AGnHQABpx4A + AacfQAHHHPABxx0AAcceAAHHH0AB1xzwAdcd + AAHXHgAB1x9AAecc8AHnHQAB5x4AAecfQAFH + DAI= + + FuncGroup + 1 + LayoutID + 13 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - ALC662 for Acer Aspire A7600U All in One + CodecID + 283903586 + ConfigData + + AbccEAG3HUABtx4hAbcfAAG3DAIBRxwgAUcd + AAFHHhcBRx+QAUcMAgGHHDABhx2QAYcegQGH + HwABJxxAAScdAAEnHqYBJx+QAeccYAHnHWAB + 5x5LAecfAQ== + + FuncGroup + 1 + LayoutID + 15 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + phucnguyen.2411 - ALC662v3 for Lenovo ThinkCentre M92P SFF + CodecID + 283903586 + ConfigData + + AZccEAGXHZEBlx6gAZcfkQFHHCABRx1AAUce + IQFHHwEBVxwwAVcdQQFXHhEBVx8BAYccQAGH + HZABhx6BAYcfAQG3HFABtx1AAbceIQG3HwIB + 5xxgAecdYAHnHksB5x8B + + FuncGroup + 1 + LayoutID + 16 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom ALC662 by aloha_cn for HP Compaq Elite 8000 SFF + CodecID + 283903586 + ConfigData + + AUccEAFHHUABRx4hAUcfAQFXHCABVx0AAVce + EwFXH5ABtxwwAbcdEAG3HiEBtx8BAYccQAGH + HTABhx6hAYcfkAGXHFABlx0QAZcegQGXHwI= + + FuncGroup + 1 + LayoutID + 17 + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom ALC662 by ryahpalma for MP67-DI/Esprimo Q900 + CodecID + 283903586 + ConfigData + + AUccEAFHHUEBRx4hAUcfAQGHHCABhx2RAYce + gQGHHwEBpxw/AacdMQGnHoEBpx8B + + FuncGroup + 1 + LayoutID + 18 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC663 + CodecID + 283903587 + ConfigData + + ASccEAEnHQABJx6gAScfkAFHHCABRx0AAUce + EwFHH5ACFxwwAhcdEAIXHiECFx8CAUcMAg== + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC663_V2 + CodecID + 283903587 + ConfigData + + AUccEAFHHQABRx4TAUcfkAGHHCABhx0QAYce + gQGHHwIBlxwwAZcdAAGXHqABlx+QAdccQAHX + HYAB1x4FAdcfQAHnHFAB5x0QAeceRQHnHwAC + FxxgAhcdEAIXHiECFx8BAUcMAg== + + FuncGroup + 1 + LayoutID + 4 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - ALC663 for Fujitsu Celsius r670 + CodecID + 283903587 + ConfigData + + IUccECFHHUAhRx4BIUcfASF3HCAhdx0AIXce + EyF3H5AhFxwwIRcdYCEXHkQhFx8BIeccQCHn + HRAh5x5WIecfECGHHFAhhx0AIYceoCGHH5Ah + lxxgIZcdACGXHqAhlx+QIacccCGnHTAhpx6B + IacfASIXHJAiFx1AIhceISIXHwE= + + FuncGroup + 1 + LayoutID + 15 + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC663 + CodecID + 283903587 + Comment + Custom ALC663 for Asus N56/76 by m-dudarev + ConfigData + + AZccEAGXHQABlx6gAZcfkAGHHCABhx0QAYce + gQGHHwIBRxwwAUcdAAFHHhABRx+QAUcMAgIX + HEACFx0QAhceIQIXHwIBFxzwARcdAAEXHgAB + Fx9AAecc8AHnHQAB5x4AAecfQA== + + FuncGroup + 1 + LayoutID + 28 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC663 + CodecID + 283903587 + Comment + Custom by alex1960 for ASUS N71J + ConfigData + + AUccAAFHHQEBRx4TAUcfmQA3HBAANx0AADce + VgA3HxgCFxwgAhcdQAIXHiECFx8BAbccMAG3 + HUABtx4hAbcfAQHnHEAB5x0BAeceQwHnH5kB + hxxQAYcdCQGHHqMBhx+ZAZccYAGXHZwBlx6B + AZcfAQF3HPABdx0BAXceEwF3H5k= + + FuncGroup + 1 + LayoutID + 99 + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC665 + CodecID + 283903589 + ConfigData + + ASccEAEnHQEBJx6gAScfmQGnHCABpx0QAace + gQGnH5MBVxxAAVcdAQFXHhMBVx+ZAZccUAGX + HRABlx4hAZcfAwG3HGABtx0QAbceIQG3HwMB + 5xxwAecdEAHnHkUB5x8D + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC665 + CodecID + 283903589 + ConfigData + + ASccUAEnHQABJx6gAScfkAFXHBABVx0AAVce + EwFXH5ABVwwCAZccIAGXHRABlx4hAZcfAAGn + HEABpx0QAacegQGnHwABtxxgAbcdEAG3HiEB + tx8AAdcc8AHXHQAB1x6DAdcfUA== + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283903592 + Comment + ALC668 Mirone Laptop Patch + ConfigData + + ABJxwQAScdAAEnHqABJx+QAUccIAFHHQABRx + 4XAUcfkAFXHDABVx0QAVceIQFXHwEBZxxAAW + cdAAFnHgABZx9AAbccUAG3HRABtx6BAbcfAg + HXHGAB1x0AAdcewAHXH0ABRwwA== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283903592 + Comment + Custom ALC668 by lazzy for laptop ASUS G551JM + ConfigData + + ASccMAEnHQABJx6gAScfkAFHHBABRx0AAUce + FwFHH5ABVxwgAVcdEAFXHiEBVx8AAbccQAG3 + HRABtx6BAbcfAAFHDAI= + + FuncGroup + 1 + LayoutID + 20 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283903592 + Comment + ALC668 syscl Laptop Patch (DELL Precision M3800) + ConfigData + + ASccAQEnHQEBJx6gAScfkAFHHAIBRx0BAUce + FwFHH5ABRwwCAVccAwFXHRABVx4rAVcfAwFX + DAIBZxzwAWcdAAFnHgABZx9AAYcc8AGHHQAB + hx4AAYcfQAGXHPABlx0AAZceAAGXH0ABpxzw + AacdAAGnHgABpx9AAbccBAG3HRABtx6LAbcf + AwHXHPAB1x0AAdceAAHXH0AB5xzwAecdAAHn + HgAB5x9AAfcc8AH3HQAB9x4AAfcfQAIFAAEC + BL6+AgUAAgIEqqoCBQADAgQAAAIFAAQCBAGA + AgUABgIEAAACBQAHAgQPgAIFAAgCBAAxAgUA + CgIEAGACBQALAgQAAAIFAAwCBHz3AgUADQIE + EIACBQAOAgR/fwIFAA8CBMzMAgUAEAIE3cwC + BQARAgQAAQIFABMCBAAAAgUAFAIEKqACBQAX + AgSpQAIFABkCBAAAAgUAGgIEAAACBQAbAgQA + AAIFABwCBAAAAgUAHQIEAAACBQAeAgR0GAIF + AB8CBAgEAgUAIAIEQgACBQAhAgQEaAIFACIC + BIzMAgUAIwIEAlACBQAkAgR0GAIFACcCBAAA + AgUAKAIEjMwCBQAqAgT/AAIFACsCBIAAAgUA + pwIE/wACBQCoAgSAAAIFAKoCBC4XAgUAqwIE + oMACBQCsAgQAAAIFAK0CBAAAAgUArgIEKsYC + BQCvAgSkgAIFALACBAAAAgUAsQIEAAACBQCy + AgQAAAIFALMCBAAAAgUAtAIEAAACBQC1AgQQ + QAIFALYCBNaXAgUAtwIEkCsCBQC4AgTWlwIF + ALkCBJArAgUAugIEuLoCBQC7AgSqqwIFALwC + BKqvAgUAvQIEaqoCBQC+AgQcAgIFAMACBAD/ + AgUAwQIED6Y= + + FuncGroup + 1 + LayoutID + 27 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283903592 + Comment + ALC668 Mirone Laptop Patch (Asus N750Jk) + ConfigData + + ABJxwQAScdAAEnHqABJx+QAUccIAFHHQABRx + 4XAUcfkAFXHDABVx0QAVceIQFXHwEBZxxAAW + cdAAFnHgABZx9AAbccUAG3HRABtx6BAbcfAg + HXHGAB1x0AAdcewAHXH0ABRwwA== + + FuncGroup + 1 + LayoutID + 28 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283903592 + Comment + ALC668 Custom (Asus N750JV) + ConfigData + + ASccAAEnHQEBJx6mAScfkAFHHBABRx0BAUce + FwFHH5ABVxwfAVcdEAFXHiEBVx8DAWcc8AFn + HQABZx4AAWcfQAGHHPABhx0AAYceAAGHH0AB + lxzwAZcdAAGXHgABlx9AAacc8AGnHQABpx4A + AacfQAG3HDABtx0QAbcegQG3HwMB1xzwAdcd + AAHXHgAB1x9AAecc8AHnHQAB5x4AAecfQAH3 + HPAB9x0AAfceAAH3H0ABRwwCAVcMAg== + + FuncGroup + 1 + LayoutID + 29 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283903600 + Comment + Custom ALC670 by Alex Auditore + ConfigData + + AbccQAG3HRABtx4rAbcfAQFXHDABVx0BAVce + EwFXH5ABJxwQAScdAQEnHqABJx+QAaccUAGn + HTEBpx6BAacfAQGXHCABlx2QAZcegQGXHwEB + 5xxgAecdEQHnHksB5x8BARcc8AEXHQABFx4A + ARcfQAE3HPABNx0AATceAAE3H0ABRxzwAUcd + AAFHHgABRx9AAWcc8AFnHQABZx4AAWcfQAF3 + HPABdx0AAXceAAF3H0ABhxzwAYcdAAGHHgAB + hx9AAdcc8AHXHQAB1x4AAdcfQAIXHPACFx0A + AhceAAIXH0A= + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283903601 + Comment + MacPeet - ALC671 for Fujitsu-Siemens D3433-S (Q170 chip) + ConfigData + + AYccIAGHHTABhx6BAYcfAQIXHDACFx1AAhce + AQIXHwECFwwC + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283903601 + Comment + MacPeet - ALC671 for Fujitsu Esprimo C720 + ConfigData + + IXccECF3HQAhdx4TIXcfkCFHHCAhRx0QIUce + ISFHHwIhRwwCIhccMCIXHUAiFx4RIhcfkSIX + DAIhlxxQIZcdECGXHoEhlx8CIYccYCGHHTAh + hx6BIYcfAQ== + + FuncGroup + 1 + LayoutID + 15 + WakeConfigData + + IhcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283903601 + Comment + Sisumara - ALC671 for Fujitsu Q558 + ConfigData + + AXccEAF3HQEBdx4TAXcfmQF3DAIBRxwgAUcd + EAFHHiEBRx8CAUcMAgIXHDACFx0QAhceAQIX + HwECFwwCAZccUAGXHRABlx6BAZcfAg== + + FuncGroup + 1 + LayoutID + 16 + WakeConfigData + + IhcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283903601 + Comment + alc671 for HP 280 Pro G4 by Lcp + ConfigData + + AXccEAF3HQEBdx4XAXcfmQF3DAIBRxwgAUcd + QQFHHgEBRx8BAUcMAgIXHDACFx0QAhceIQIX + HwICFwwCAbccQAG3HTABtx6BAbcfAQGHHFAB + hx2QAYceoQGHHwE= + + FuncGroup + 1 + LayoutID + 88 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + osy86 - Realtek ALC700 + CodecID + 283903744 + ConfigData + + AZceYQGXByUBtx4R + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AZcHJQ== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC882 + CodecID + 283904130 + ConfigData + + AUccEAFHHUABRx4RAUcfAQGHHFABhx2QAYce + oAGHH5ABlxxgAZcdkAGXHoEBlx8CAacccAGn + HTABpx6BAacfAQG3HIABtx1AAbceIQG3HwEB + 5xyQAecd4AHnHkUB5x8B + + FuncGroup + 1 + LayoutID + 5 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC882 + CodecID + 283904130 + ConfigData + + AUccEAFHHUABRx4RAUcfAQFXHCABVx0QAVce + AQFXHwEBZxwwAWcdYAFnHgEBZx8BAXccQAF3 + HSABdx4BAXcfAQGHHFABhx2QAYceoAGHH5AB + lxxgAZcdkAGXHoEBlx8CAacccAGnHTABpx6B + AacfAQG3HIABtx1AAbceIQG3HwIB5xyQAecd + YAHnHkUB5x8B + + FuncGroup + 1 + LayoutID + 7 + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC883 + CodecID + 283904131 + Comment + Mirone - Realtek ALC883 by Andrey1970 + ConfigData + + AUccEAFHHUABRx4RAUcfAQFXHCABVx0QAVce + AQFXHwEBZxwwAWcdYAFnHgEBZx8BAXccQAF3 + HSABdx4BAXcfAQGHHFABhx2QAYceoAGHH5AB + lxxgAZcdkAGXHoEBlx8CAacccAGnHTABpx6B + AacfAQG3HIABtx1AAbceIQG3HwIB5xyQAecd + YAHnHkUB5x8B + + FuncGroup + 1 + LayoutID + 7 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904133 + Comment + toleda ALC885 + ConfigData + + IUccECFHHUAhRx4RIUcfASFXHCAhVx0QIVce + ASFXHwEhZxwwIWcdYCFnHgEhZx8BIXcc8CF3 + HQAhdx4AIXcfQCGHHEAhhx2QIYceoCGHH5Ah + lxxgIZcdkCGXHoEhlx8CIaccUCGnHTAhpx6B + IacfASG3HHAhtx1AIbceISG3HwIh5xyQIecd + YSHnHksh5x8BIfccoCH3HQEh9x7LIfcfASEX + HPAhFx0AIRceACEXH0A= + + FuncGroup + 1 + LayoutID + 1 + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC885 + CodecID + 283904133 + Comment + Custom ALC885 by alex1960 + ConfigData + + IUccECFHHUAhRx4RIUcfASFXHCAhVx0QIVce + ASFXHwEhZxwwIWcdYCFnHgEhZx8BIXcc8CF3 + HQAhdx4AIXcfQCGHHEAhhx2QIYceoCGHH5Ah + lxxgIZcdkCGXHoEhlx8CIaccUCGnHTAhpx6B + IacfASG3HHAhtx1AIbceISG3HwIh5xyQIecd + YSHnHksh5x8BIfccoCH3HQEh9x7LIfcfASEX + HPAhFx0AIRceACEXH0A= + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC885 + CodecID + 283904133 + Comment + MacPeet - ALC885 for GA-G33M-DS2R + ConfigData + + IUccECFHHUAhRx4RIUcfkSFXHCAhVx0QIVce + ASFXHwEhZxwwIWcdYCFnHgEhZx8BIYccQCGH + HZAhhx6gIYcfkCGnHFAhpx0wIacegSGnHwEh + lxxgIZcdkCGXHoEhlx8CIbcccCG3HUAhtx4h + IbcfAiHnHJAh5x1hIeceSyHnHwEh9xygIfcd + ASH3Hssh9x8B + + FuncGroup + 1 + LayoutID + 15 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904135 + Comment + Toleda ALC887 + ConfigData + + IUccECFHHUAhRx4RIUcfkCFHDAIhVxwgIVcd + ECFXHgEhVx8BIWccMCFnHWAhZx4BIWcfASF3 + HPAhdx0AIXceACF3H0AhhxxAIYcdkCGHHqAh + hx+QIZccYCGXHZAhlx6BIZcfAiGnHFAhpx0w + IacegSGnHwEhtxxwIbcdQCG3HiEhtx8CIbcM + AiHnHJAh5x1hIeceSyHnHwEh9xzwIfcdACH3 + HgAh9x9AIRcc8CEXHQAhFx4AIRcfQA== + + FuncGroup + 1 + LayoutID + 1 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904135 + Comment + Toleda ALC887 + ConfigData + + IUccECFHHUAhRx4RIUcfkCFHDAIhVxzwIVcd + ACFXHgAhVx9AIWcc8CFnHQAhZx4AIWcfQCF3 + HPAhdx0AIXceACF3H0AhhxxAIYcdYCGHHgEh + hx8BIZccYCGXHZAhlx6gIZcfkCGnHFAhpx0Q + IaceASGnHwEhtxxwIbcdQCG3HiEhtx8CIbcM + AiHnHJAh5x1hIeceSyHnHwEh9xzwIfcdACH3 + HgAh9x9AIRcc8CEXHQAhFx4AIRcfQA== + + FuncGroup + 1 + LayoutID + 2 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904135 + Comment + Toleda ALC887 + ConfigData + + IUccECFHHUAhRx4RIUcfkCFHDAIhVxwgIVcd + ECFXHgEhVx9AIWcc8CFnHQAhZx4AIWcfQCF3 + HPAhdx0AIXceACF3H0AhhxxAIYcdkCGHHqAh + hx+QIZccYCGXHZAhlx6BIZcfAiGnHFAhpx0w + IacegSGnHwEhtxxwIbcdQCG3HiEhtx8CIbcM + AiHnHJAh5x1hIeceSyHnHwEh9xzwIfcdACH3 + HgAh9x9AIRcc8CEXHQAhFx4AIRcfQA== + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC887-VD + CodecID + 283904135 + ConfigData + + AUccEAFHHUABRx4RAUcfAQGHHFABhx2QAYce + oAGHH5ABlxxgAZcdkAGXHoEBlx8CAacccAGn + HTABpx6BAacfAQG3HIABtx1AAbceIQG3HwIB + 5xyQAecdYAHnHkUB5x8BAUcMAg== + + FuncGroup + 1 + LayoutID + 5 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC887-VD + CodecID + 283904135 + ConfigData + + AUccEAFHHUABRx4RAUcfAQFXHCABVx0QAVce + AQFXHwEBZxwwAWcdYAFnHgEBZx8BAXccQAF3 + HSABdx4BAXcfAQGHHFABhx2QAYceoAGHH5AB + lxxgAZcdkAGXHoEBlx8CAacccAGnHTABpx6B + AacfAQG3HIABtx1AAbceIQG3HwIB5xyQAecd + YAHnHkUB5x8BAUcMAg== + + FuncGroup + 1 + LayoutID + 7 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC887-VD + CodecID + 283904135 + ConfigData + + AUccEAFHHUABRx4RAUcfkQFHDAIBtxwgAbcd + QAG3HiEBtx8CAbcMAgGHHDABhx2QAYceoQGH + H5EBlxxAAZcdkQGXHoEBlx+SAUcMAg== + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904135 + Comment + VictorXu - ALC887-VD for ASUS H81M-D + ConfigData + + AUccEAFHHUABRx4RAUcfkQFHDAIBtxwgAbcd + QAG3HiEBtx8CAbcMAgGHHEABhx2QAYceoQGH + H5EBpxxPAacdMAGnHoEBpx8BAZccUAGXHZAB + lx6BAZcfAg== + + FuncGroup + 1 + LayoutID + 12 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC887-VD + CodecID + 283904135 + ConfigData + + AbccAAG3HUABtx4hAbcfAQGHHBABhx2QAYce + oAGHH5EBlxwgAZcdkAGXHoEBlx8BAUccMAFH + HUABRx4RAUcfkQGnHEABpx0wAacegQGnHwEB + 5xxQAecdYQHnHksB5x8BAUcMAg== + + FuncGroup + 1 + LayoutID + 13 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC887-VD + CodecID + 283904135 + ConfigData + + IUccECFHHUAhRx4RIUcfkCFXHCAhVx0QIVce + ASFXHwEhhxxAIYcdkCGHHqAhhx+QIaccUCGn + HTAhpx6BIacfASGXHGAhlx2QIZcegSGXHwIh + txxwIbcdQCG3HiEhtx8CIecckCHnHWEh5x5L + IecfAQ== + + FuncGroup + 1 + LayoutID + 17 + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC887-VD + CodecID + 283904135 + ConfigData + + IUccECFHHUAhRx4RIUcfkSFHDAIhhxxAIYcd + YCGHHgEhhx8BIaccUCGnHRAhpx4BIacfASGX + HGAhlx2QIZceoSGXH5EhtxxwIbcdQCG3HiEh + tx8CIecckCHnHWEh5x5LIecfAQ== + + FuncGroup + 1 + LayoutID + 18 + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC887-VD AD0 for Asus Z97M-PLUS/BR by maiconjs + CodecID + 283904135 + ConfigData + + AUccAAFHHUABRx4BAUcfAQFnHBABZx1gAWce + AQFnHwEBVxwgAVcdEAFXHgEBVx8BAXccMAF3 + HSABdx4BAXcfAQG3HEABtx1AAbceIQG3HwIB + FxxQARcdAQEXHkYBFx+ZAYccYAGHHZABhx6g + AYcfkAGnHHABpx0wAacegQGnHwEBlxyAAZcd + kAGXHoEBlx8CAUcMAg== + + FuncGroup + 1 + LayoutID + 20 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904135 + Comment + Custom by klblk ALC887 for GA-Q87TN + ConfigData + + IRcc8CEXHQAhFx4AIRcfQCEnHPAhJx0AISce + ACEnH0AhRxzwIUcdACFHHgAhRx9AIVcc8CFX + HQAhVx4AIVcfQCFnHPAhZx0AIWceACFnH0Ah + dxzwIXcdACF3HgAhdx9AIYcccCGHHZAhhx6B + IYcfASGXHPAhlx0AIZceACGXH0AhpxwgIacd + QCGnHgEhpx8BIbcc8CG3HQAhtx4AIbcfQCHH + HPAhxx0AIcceACHHH0Ah1xzwIdcdACHXHgAh + 1x9AIecc8CHnHQAh5x4AIecfQCH3HPAh9x0A + IfceACH3H0A= + + FuncGroup + 1 + LayoutID + 33 + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC887-VD for Asus B85-ME by maiconjs + CodecID + 283904135 + ConfigData + + AUccAAFHHUABRx4BAUcfAQG3HBABtx1AAbce + IQG3HwIBhxwgAYcdkAGHHqABhx+QAaccMAGn + HTABpx6BAacfAQGXHEABlx2QAZcegQGXHwIB + RwwC + + FuncGroup + 1 + LayoutID + 40 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904135 + Comment + 0th3r ALC887 for PRIME B250-PLUS + ConfigData + + AUccEAFHHUABRx4BAUcfAQG3HCABtx1BAbce + IQG3HwIBhxxAAYcdkAGHHoEBhx8BAZccUAGX + HZEBlx6BAZcfAg== + + FuncGroup + 1 + LayoutID + 50 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904135 + Comment + ALC887 for Asus PRIME Z270-P (full Rear and Front, non auto-switch) by ctich + ConfigData + + AUccEAFHHUABRx4BAUcfAQFHDAIBtxwgAbcd + QAG3HiEBtx8CAbcMAgEXHDABFx0BARceRgEX + H5ABhxxAAYcdkAGHHqABhx+RAaccTwGnHTAB + px6BAacfAQGXHFABlx2RAZcegQGXHwI= + + FuncGroup + 1 + LayoutID + 52 + WakeConfigData + + AUcMAgG3DAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904135 + Comment + ALC887 for Asus PRIME Z270-P (Rear LineOut1, Mic - LineOut2, LineIn - LineOut3 - 5.1 and Front, non auto-switch) by ctich + ConfigData + + AUccEAFHHUABRx4BAUcfAQFHDAIBhxwQAYcd + YAGHHgEBhx8BAaccEAGnHRABpx4BAacfAQG3 + HCABtx1AAbceIQG3HwIBtwwCARccMAEXHQEB + Fx5GARcfkAGXHFABlx2RAZcegQGXHwI= + + FuncGroup + 1 + LayoutID + 53 + WakeConfigData + + AUcMAgG3DAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC887-VD GA-Z97 HD3 ver2.1 by varrtix + CodecID + 283904135 + ConfigData + + IRccYCEXHQEhFx5DIRcfmSEnHPAhJx0AISce + ACEnH0AhRxyAIUcdQCFHHhEhRx8BIUcMAiFX + HIIhVx0QIVceASFXHwEhZxyBIWcdYCFnHgEh + Zx8BIXccgiF3HSAhdx4BIXcfASGHHHAhhx2Q + IYceoSGHHwEhlxxwIZcdkCGXHqEhlx8CIacc + ICGnHTAhpx6BIacfASG3HFAhtx1AIbceISG3 + HwIhtwwCIccc8CHHHQAhxx4AIccfQCHXHPAh + 1x0AIdceACHXH0Ah5xzwIecdACHnHgAh5x9A + Ifcc8CH3HQAh9x4AIfcfQA== + + FuncGroup + 1 + LayoutID + 87 + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom Realtek ALC887-VD by Constanta + CodecID + 283904135 + ConfigData + + IUccECFHHUAhRx4RIUcfASGHHFAhhx2QIYce + oCGHH5AhlxxgIZcdkCGXHoEhlx8CIacccCGn + HTAhpx6BIacfASG3HIAhtx1AIbceISG3HwIh + 5xyQIecdYCHnHkUh5x8B + + FuncGroup + 1 + LayoutID + 99 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904136 + Comment + toleda ALC888 + ConfigData + + IUccECFHHUAhRx4RIUcfkCFXHCAhVx0QIVce + ASFXHwEhZxwwIWcdYCFnHgEhZx8BIXcc8CF3 + HQAhdx4AIXcfQCGHHEAhhx2QIYceoCGHH5Ah + lxxgIZcdkCGXHoEhlx8CIaccUCGnHTAhpx6B + IacfASG3HHAhtx1AIbceISG3HwIh5xyQIecd + YSHnHksh5x8BIfcc8CH3HQAh9x4AIfcfQCEX + HPAhFx0AIRceACEXH0A= + + FuncGroup + 1 + LayoutID + 1 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904136 + Comment + toleda ALC888 + ConfigData + + IUccECFHHUAhRx4RIUcfkCFXHPAhVx0AIVce + ACFXH0AhZxzwIWcdACFnHgAhZx9AIXcc8CF3 + HQAhdx4AIXcfQCGHHEAhhx1gIYceASGHHwEh + lxxgIZcdkCGXHqAhlx+QIaccUCGnHRAhpx4B + IacfASG3HHAhtx1AIbceISG3HwIh5xyQIecd + YSHnHksh5x8BIfcc8CH3HQAh9x4AIfcfQCEX + HPAhFx0AIRceACEXH0A= + + FuncGroup + 1 + LayoutID + 2 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904136 + Comment + toleda ALC888 + ConfigData + + IUccECFHHUAhRx4RIUcfkCFXHCAhVx0QIVce + ASFXHwEhZxzwIWcdACFnHgAhZx9AIXcc8CF3 + HQAhdx4AIXcfQCGHHEAhhx2QIYceoCGHH5Ah + lxxgIZcdkCGXHoEhlx8CIaccUCGnHTAhpx6B + IacfASG3HHAhtx1AIbceISG3HwIh5xyQIecd + YSHnHksh5x8BIfcc8CH3HQAh9x4AIfcfQCEX + HPAhFx0AIRceACEXH0A= + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC888 for Laptop + CodecID + 283904136 + ConfigData + + ASccEAEnHQABJx6gAScfmQFHHCABRx1AAUce + IQFHHwEBtxwwAbcdAQG3HhMBtx+ZAXccQAF3 + HSABdx4BAXcfAQGHHFABhx2QAYcegQGHHwEB + pxxgAacdMAGnHoEBpx8BAecccAHnHUAB5x5F + AecfAQFHDAI= + + FuncGroup + 1 + LayoutID + 4 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC888 3 ports (Pink, Green, Blue) + CodecID + 283904136 + ConfigData + + AUccEAFHHUABRx4RAUcfAQGHHFABhx2QAYce + oAGHH5ABlxxgAZcdkAGXHoEBlx8CAacccAGn + HTABpx6BAacfAQG3HIABtx1AAbceIQG3HwEB + 5xyQAecd4AHnHkUB5x8B + + FuncGroup + 1 + LayoutID + 5 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC888 5/6 ports (Gray, Black, Orange, Pink, Green, Blue) + CodecID + 283904136 + ConfigData + + AUccEAFHHUABRx4RAUcfAQFXHCABVx0QAVce + AQFXHwEBZxwwAWcdYAFnHgEBZx8BAXccQAF3 + HSABdx4BAXcfAQGHHFABhx2QAYceoAGHH5AB + lxxgAZcdkAGXHoEBlx8CAacccAGnHTABpx6B + AacfAQG3HIABtx1AAbceIQG3HwIB5xyQAecd + YAHnHkUB5x8B + + FuncGroup + 1 + LayoutID + 7 + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC888S-VD Version1 for MedionP9614 by MacPeet + CodecID + 283904136 + ConfigData + + AUccEAFHHRABRx4hAUcfAQFHDAIBhxwwAYcd + EAGHHqEBhx8BASccQAEnHQABJx6jAScfkAF3 + HFABdx0AAXceEwF3H5ABpxxgAacdEAGnHoEB + px8BAecccAHnHRAB5x5FAecfAQ== + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC888 for Acer Aspire 7738G by MacPeet + CodecID + 283904136 + ConfigData + + AUccEAFHHQABRx4TAUcfkAFHDAIBJxxAAScd + AAEnHqMBJx+QAVccUAFXHRABVx4hAVcfAAFX + DAIBpxxgAacdMAGnHoEBpx8AAecccAHnHRAB + 5x5FAecfAA== + + FuncGroup + 1 + LayoutID + 27 + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC888S-VD Version2 for MedionE7216 by MacPeet + CodecID + 283904136 + ConfigData + + AUccEAFHHQABRx4TAUcfkAFHDAIBdxwgAXcd + AAF3HhMBdx+QAeccMAHnHRAB5x5EAecfAAGH + HEABhx0QAYceoQGHHwABJxxQAScdAAEnHqMB + Jx+QAaccYAGnHRABpx6BAacfAAG3HHABtx0Q + AbceIQG3HwA= + + FuncGroup + 1 + LayoutID + 28 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC888S-VD Version3 for MedionP8610 by MacPeet + CodecID + 283904136 + ConfigData + + AUccEAFHHQABRx4TAUcfkAFHDAIBdxwgAXcd + EAF3HhMBdx+QAeccMAHnHRAB5x5FAecfAAGX + HEABlx0AAZceowGXH5ABhxxQAYcdEAGHHoEB + hx8AAVccYAFXHRABVx4hAVcfAAFXDAI= + + FuncGroup + 1 + LayoutID + 29 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904137 + Comment + ALC889, Toleda + ConfigData + + IUccECFHHUAhRx4RIUcfkCFXHCAhVx0QIVce + ASFXHwEhZxwwIWcdYCFnHgEhZx8BIXcc8CF3 + HQAhdx4AIXcfQCGHHEAhhx2QIYceoCGHH5Ah + lxxgIZcdkCGXHoEhlx8CIaccUCGnHTAhpx6B + IacfASG3HHAhtx1AIbceISG3HwIh5xyQIecd + YSHnHksh5x8BIfcc8CH3HQAh9x4AIfcfQCEX + HPAhFx0AIRceACEXH0A= + + FuncGroup + 1 + LayoutID + 1 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904137 + Comment + ALC889, Toleda + ConfigData + + IUccECFHHUAhRx4RIUcfkCFXHCAhVx0QIVce + ASFXHwEhZxwwIWcdYCFnHgEhZx8BIXcc8CF3 + HQAhdx4AIXcfQCGHHEAhhx2QIYceoCGHH5Ah + lxxgIZcdkCGXHoEhlx8CIaccUCGnHTAhpx6B + IacfASG3HHAhtx1AIbceISG3HwIh5xyQIecd + YSHnHksh5x8BIfcc8CH3HQAh9x4AIfcfQCEX + HPAhFx0AIRceACEXH0A= + + FuncGroup + 1 + LayoutID + 2 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904137 + Comment + ALC889, Toleda + ConfigData + + IUccECFHHUAhRx4RIUcfkCFXHCAhVx0QIVce + ASFXHwEhZxwwIWcdYCFnHgEhZx8BIXcc8CF3 + ASFXHwEhZxzwIWcdACFnHgAhZx9AIXcc8CF3 + lxxgIZcdkCGXHoEhlx8CIaccUCGnHTAhpx6B + IacfASG3HHAhtx1AIbceISG3HwIh5xyQIecd + YSHnHksh5x8BIfcc8CH3HQAh9x4AIfcfQCEX + HPAhFx0AIRceACEXH0A= + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904137 + Comment + MacPeet ALC889 Medion P4020 D + ConfigData + + AUccEAFHHUABRx4hAUcfAQFHDAIBtxwgAbcd + AAG3HhMBtx+QAeccMAHnHWAB5x5EAecfAQGX + HFABlx0AAZceowGXH5ABpxxgAacdMAGnHoEB + px8B + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904137 + Comment + alc889, Custom by Sergey_Galan + ConfigData + + IRcc8CEXHQAhFx4AIRcfQCEnHPAhJx0AISce + ACEnH0AhRxwwIUcdQSFHHhEhRx8BIVcc8CFX + HQAhVx4AIVcfQCFnHPAhZx0AIWceACFnH0Ah + dxzwIXcdACF3HgAhdx9AIYccECGHHZEhhx6g + IYcfkCGXHCAhlx2QIZcegSGXHwEhpxzwIacd + ACGnHgAhpx9AIbccgCG3HUAhtx4hIbcfASHH + HPAhxx0AIcceACHHH0Ah1xzwIdcdACHXHgAh + 1x9AIecckCHnHSEh5x5LIecfASH3HPAh9x0A + IfceACH3H0A= + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - ALC891 for HP Pavilion Power 580-030ng + CodecID + 283904103 + ConfigData + + AXccIAF3HRABdx4hAXcfAgGHHDABhx2QAYce + gQGHHwEBtxxAAbcdMAG3HoEBtx8BAhccYAIX + HQACFx4RAhcfAAIXDAI= + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC891 + CodecID + 283904103 + ConfigData + + AXccEAF3HUABdx4hAXcfAQFnHDABZx0wAWce + gQFnHwEBhxxAAYcdkAGHHqEBhx+RAaccYAGn + HZABpx6BAacfAgHnHHAB5x0AAeceRgHnH5AC + FxyAAhcdQAIXHhECFx8B + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + ALC892, Toleda + ConfigData + + IUccECFHHUAhRx4RIUcfkCFHDAIhVxwgIVcd + ECFXHgEhVx8BIWccMCFnHWAhZx4BIWcfASF3 + HPAhdx0AIXceACF3H0AhhxxAIYcdkCGHHqAh + hx+QIZccYCGXHZAhlx6BIZcfAiGnHFAhpx0w + IacegSGnHwEhtxxwIbcdQCG3HiEhtx8CIbcM + AiHnHJAh5x1hIeceSyHnHwEh9xzwIfcdACH3 + HgAh9x9AIRcc8CEXHQAhFx4AIRcfQA== + + FuncGroup + 1 + LayoutID + 1 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + ALC892, Toleda + ConfigData + + IUccECFHHUAhRx4RIUcfkCFHDAIhVxzwIVcd + ACFXHgAhVx9AIWcc8CFnHQAhZx4AIWcfQCF3 + HPAhdx0AIXceACF3H0AhhxxAIYcdYCGHHgEh + hx8BIZccYCGXHZAhlx6gIZcfkCGnHFAhpx0Q + IaceASGnHwEhtxxwIbcdQCG3HiEhtx8CIbcM + AiHnHJAh5x1hIeceSyHnHwEh9xzwIfcdACH3 + HgAh9x9AIRcc8CEXHQAhFx4AIRcfQA== + + FuncGroup + 1 + LayoutID + 2 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + ALC892, Toleda + ConfigData + + IUccECFHHUAhRx4RIUcfkCFHDAIhVxwgIVcd + ECFXHgEhVx9AIWcc8CFnHQAhZx4AIWcfQCF3 + HPAhdx0AIXceACF3H0AhhxxAIYcdkCGHHqAh + hx+QIZccYCGXHZAhlx6BIZcfAiGnHFAhpx0w + IacegSGnHwEhtxxwIbcdQCG3HiEhtx8CIbcM + AiHnHJAh5x1hIeceSyHnHwEh9xzwIfcdACH3 + HgAh9x9AIRcc8CEXHQAhFx4AIRcfQA== + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC892 for Laptop + CodecID + 283904146 + ConfigData + + ASccEAEnHZABJx6gAScfmQFHHCABRx1AAUce + IQFHHwEBdxwwAXcdEAF3HgEBdx8BAYccQAGH + HZABhx6BAYcfAQGnHFABpx0wAacegQGnHwEB + txxgAbcdQAG3HhMBtx+ZAecccAHnHWAB5x5F + AecfAQG3DAI= + + FuncGroup + 1 + LayoutID + 4 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + ALC892, Mirone + ConfigData + + AUccEAFHHUABRx4RAUcfAQGHHFABhx2QAYce + oAGHH5ABlxxgAZcdkAGXHoEBlx8CAacccAGn + HTABpx6BAacfAQG3HIABtx1AAbceIQG3HwEB + 5xyQAecd4AHnHkUB5x8B + + FuncGroup + 1 + LayoutID + 5 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + ALC892, Mirone + ConfigData + + AUccEAFHHUABRx4RAUcfAQFXHCABVx0QAVce + AQFXHwEBZxwwAWcdYAFnHgEBZx8BAXccQAF3 + HSABdx4BAXcfAQGHHFABhx2QAYceoAGHH5AB + lxxgAZcdkAGXHoEBlx8CAacccAGnHTABpx6B + AacfAQG3HIABtx1AAbceIQG3HwIB5xyQAecd + YAHnHkUB5x8B + + FuncGroup + 1 + LayoutID + 7 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + MSI GP70/CR70 by Slava77 + ConfigData + + AbceEQGXHqABlx+RAYcegQFHDAI= + + FuncGroup + 1 + LayoutID + 12 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + MacPeet - alc892 for MSi Z97S SLI Krait Edition + ConfigData + + AUccEAFHHUABRx4RAUcfkQG3HCABRwwCAbcd + QAG3HiEBtx8CAbcMAgGHHDABhx2QAYceoQGH + H5EBVxxQAVcdEAFXHgEBVx8BAWccYAFnHWAB + Zx4BAWcfAQF3HHABdx0gAXceAQF3HwEBlxyA + AZcdkAGXHoEBlx8CAacckAGnHTABpx6BAacf + AQ== + + FuncGroup + 1 + LayoutID + 15 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + MacPeet - alc892 for MSI GL73-8RD + ConfigData + + AUccIAFHHXABRx4hAUcfAAFHDAIBVxwwAVcd + AAFXHhcBVx+QAeccQAHnHXAB5x5FAecfAAEn + HFABJx0AAScepgEnH5ABhxxgAYcdcAGHHoEB + hx8AAXcccAF3HQABdx4XAXcfkA== + + FuncGroup + 1 + LayoutID + 16 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + MacPeet - alc892 for MSI B150M MORTAR - SwitchMode + ConfigData + + AUccEAFHHUABRx4RAUcfkAFHDAIBtxwgAbcd + QAG3HiEBtx8CAbcMAgFXHDABVx0QAVceAQFX + HwEBlxxQAZcdkAGXHoEBlx8CAWcccAFnHWAB + Zx4BAWcfAQGHHIABhx2QAYceoAGHH5ABpxyQ + AacdMAGnHoEBpx8BAeccsAHnHRAB5x5FAecf + AQ== + + FuncGroup + 1 + LayoutID + 17 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + MacPeet - alc892 for MSI B150M MORTAR - ManualMode + ConfigData + + AUccEAFHHUABRx4BAUcfAQFHDAIBtxwgAbcd + QAG3HiEBtx8CAbcMAgFXHDABVx0QAVceAQFX + HwEBlxxQAZcdkAGXHoEBlx8CAWcccAFnHWAB + Zx4BAWcfAQGHHIABhx2QAYceoAGHH5ABpxyQ + AacdMAGnHoEBpx8BAeccsAHnHRAB5x5FAecf + AQ== + + FuncGroup + 1 + LayoutID + 18 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + Custom ALC892 for GIGABYTE Z390M GAMING - Manual - by Bokey + ConfigData + + AUccEAFHHUABRx4RAUcfAQFHDAIBtxwgAbcd + QAG3HiEBtx8CAbcMAgFnHDABZx1gAWceAQFn + HwEBVxxAAVcdEAFXHgEBVx8BAXccUAF3HSAB + dx4BAXcfAQGHHHABhx2QAYceoQGHH5ABlxyA + AZcdkAGXHoEBlx8CARcckAEXHQABFx5DARcf + kAGnHGABpx0wAacegQGnHwEB1xzwAdcdAAHX + HgAB1x9AAScc8AEnHQABJx4AAScfQA== + + FuncGroup + 1 + LayoutID + 20 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + ASRock Z390m-ITX/ac by imEgo + ConfigData + + ARcc8AEXHQABFx4AARcfQAEnHPABJx0AASce + AAEnH0ABRxwQAUcdQAFHHhABRx+QAUcMAgFX + HPABVx0AAVceAAFXH0ABZxzwAWcdAAFnHgAB + Zx9AAXcc8AF3HQABdx4AAXcfQAGHHDABhx2Q + AYceoAGHH5ABlxxAAZcdkAGXHoEBlx8CAacc + UAGnHTABpx6BAacfAQG3HCABtx1AAbceIQG3 + HwIBtwwCAccc8AHHHQABxx4AAccfQAHXHPAB + 1x0AAdceAAHXH0AB5xzwAecdAAHnHgAB5x9A + Afcc8AH3HQAB9x4AAfcfQA== + + FuncGroup + 1 + LayoutID + 22 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + ALC892 for Clevo P751DMG by Cryse Hillmes + ConfigData + + ASccEAEnHQEBJx6mAScfkAFHHEABRx0BAUce + FwFHH5ABdxxgAXcdEAF3HgEBdx8BAYccgAGH + HRABhx6BAYcfAQGnHCABpx0QAacegQGnHwEB + txxQAbcdEAG3HiEBtx8BAecccAHnHRAB5x5F + AecfAQFHDAI= + + FuncGroup + 1 + LayoutID + 28 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + ALC892 for Clevo P65xSE/SA by Derek Zhu + ConfigData + + ASccEAEnHZEBJx6mAScfkAGHHCABhx1gAYce + gQGHHwEBRxwwAUcdAQFHHhcBRx+QAbccQAG3 + HTABtx4hAbcfAQF3HFABdx1AAXceAQF3HwEB + 5xxgAecdYQHnHkUB5x8BALcccAC3HREAtx4W + ALcfkAFXHPABVx0AAVceAAFXHwQBZxzwAWcd + AAFnHgABZx8EAZcc8AGXHQABlx4AAZcfBAGn + HPABpx0AAaceAAGnHwQBxxzwAccdAAHHHgAB + xx8EAdcc8AHXHQAB1x4AAdcfBAH3HPAB9x0A + AfceAAH3HwQBRwwCAbcMAg== + + FuncGroup + 1 + LayoutID + 31 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + Custom ALC892 for GIGABYTE B360 M AORUS PRO + ConfigData + + ARccMAEXHQEBFx5DARcfmQEnHPABJx0AASce + AAEnH0ABRxxAAUcdQQFHHhEBRx+RAUcMAgFX + HPABVx0AAVceAAFXH0ABZxzwAWcdAAFnHgAB + Zx9AAXccgAF3HSABdx4BAXcfAQGHHBABhx2R + AYceoQGHH5EBlxxyAZcdEAGXHqEBlx8CAacc + 8AGnHQABpx4AAacfQAG3HFIBtx0QAbceIQG3 + HwIBtwwCAccc8AHHHQABxx4AAccfQAHXHPAB + 1x0AAdceAAHXH0AB5xzwAecdAAHnHgAB5x9A + Afcc8AH3HQAB9x4AAfcfQA== + + FuncGroup + 1 + LayoutID + 90 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + Custom ALC892 for GA-Z87-HD3 by BIM167 + ConfigData + + IRccUCEXHXEhFx5EIRcfASEnHPAhJx0AISce + ACEnH0AhRxwQIUcdQCFHHhEhRx+QIVccICFX + HRAhVx4BIVcfASFnHDAhZx1gIWceASFnHwEh + dxzwIXcdACF3HgAhdx9AIYccYCGHHZAhhx6g + IYcfkCGXHIAhlx2QIZcegSGXHwIhpxxwIacd + MCGnHoEhpx8BIbccQCG3HUAhtx4hIbcfAiHH + HPAhxx0AIcceACHHH0Ah5xzwIecdACHnHgAh + 5x9AIfcckCH3HXEh9x7EIfcfAQ== + + FuncGroup + 1 + LayoutID + 92 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + Custom ALC892 for HASEE K770e i7 D1 by gitawake + ConfigData + + ARcc8AEXHQABFx4AARcfQAEnHFABJx0BASce + pgEnH5ABRxwQAUcdAQFHHhcBRx+QAUcMAgFX + HPABVx0AAVceAAFXH0ABZxzwAWcdAAFnHgAB + Zx9AAXccIAF3HRABdx4BAXcfAQGHHGABhx0Q + AYcegQGHHwEBlxzwAZcdAAGXHgABlx9AAacc + UAGnHRABpx6BAacfAQG3HDABtx0QAbceIQG3 + HwEBtwwCAccc8AHHHQABxx4AAccfQAHXHPAB + 1x0AAdceAAHXH0AB5xzwAecdAAHnHgAB5x9A + Afcc8AH3HQAB9x4AAfcfQA== + + FuncGroup + 1 + LayoutID + 97 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + ALC892 with working SPDIF + ConfigData + + AUccEAFHHUABRx4RAUcfAQGHHFABhx2QAYce + oAGHH5ABlxxgAZcdkAGXHoEBlx8CAacccAGn + HTABpx6BAacfAQG3HIABtx1AAbceIQG3HwEB + 5xyQAecd4AHnHkUB5x8B + + FuncGroup + 1 + LayoutID + 98 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + Custom ALC892 DNS P150EM by Constanta + ConfigData + + AUccEAFHHUABRx4RAUcfAQGHHHABhx2QAYce + gQGHHwEBlxxgAZcdAQGXHqABlx+QAaccgAGn + HTABpx6BAacfAQG3HCABtx1AAbceIQG3HwEB + 5xyQAecd4AHnHkUB5x8B + + FuncGroup + 1 + LayoutID + 99 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904146 + Comment + Custom ALC892 for MSI Z370-A PRO by GeorgeWan + ConfigData + + ARcc8AEXHQABFx4AARcfQAEnHPABJx0AASce + AAEnH0ABRxwQAUcdQAFHHhEBRx+QAUcMAgFX + HCABVx0QAVceAQFXHwEBZxwwAWcdYAFnHgEB + Zx8BAXccQAF3HSABdx4BAXcfAQGHHFABhx2Q + AYceoAGHH5ABlxxwAZcdkAGXHoEBlx8CAacc + YAGnHTABpx6BAacfAQG3HIABtx1AAbceIQG3 + HwIBtwwCAccc8AHHHQABxx4AAccfQAHXHPAB + 1x0AAdceAAHXH0AB5xzwAecdAAHnHgAB5x9A + Afcc8AH3HQAB9x4AAfcfQA== + + FuncGroup + 1 + LayoutID + 100 + WakeConfigData + + AUcMAgG3DAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Asus_PRIME_B460M-K_ALC897 + CodecID + 283904151 + ConfigData + + AUccEAFHHUABRx4RAUcfAQGHHFABhx2QAYce + oAGHH5ABlxxgAZcdkAGXHoEBlx8CAacccAGn + HTABpx6BAacfAQG3HIABtx1AAbceIQG3HwEB + twwCARcckAEXHeABFx5FARcfAQFHDAI= + + FuncGroup + 1 + LayoutID + 66 + WakeConfigData + + AUcMAgG3DAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904153 + Comment + ALC898, Toleda + ConfigData + + IUccECFHHUAhRx4RIUcfkCFHDAIhVxwgIVcd + ECFXHgEhVx8BIWccMCFnHWAhZx4BIWcfASF3 + HPAhdx0AIXceACF3H0AhhxxAIYcdkCGHHqAh + hx+QIZccYCGXHZAhlx6BIZcfAiGnHFAhpx0w + IacegSGnHwEhtxxwIbcdQCG3HiEhtx8CIbcM + AiHnHJAh5x1hIeceSyHnHwEh9xzwIfcdACH3 + HgAh9x9AIRcc8CEXHQAhFx4AIRcfQA== + + FuncGroup + 1 + LayoutID + 1 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904153 + Comment + ALC898, Toleda + ConfigData + + IUccECFHHUAhRx4RIUcfkCFHDAIhVxzwIVcd + ACFXHgAhVx9AIWcc8CFnHQAhZx4AIWcfQCF3 + HPAhdx0AIXceACF3H0AhhxxAIYcdYCGHHgEh + hx8BIZccYCGXHZAhlx6gIZcfkCGnHFAhpx0Q + IaceASGnHwEhtxxwIbcdQCG3HiEhtx8CIbcM + AiHnHJAh5x1hIeceSyHnHwEh9xzwIfcdACH3 + HgAh9x9AIRcc8CEXHQAhFx4AIRcfQA== + + FuncGroup + 1 + LayoutID + 2 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904153 + Comment + ALC898, Toleda + ConfigData + + IUccECFHHUAhRx4RIUcfkCFXHCAhVx0QIVce + ASFXHwEhZxzwIWcdACFnHgAhZx9AIXcc8CF3 + HQAhdx4AIXcfQCGHHEAhhx2QIYceoCGHH5Ah + lxxgIZcdkCGXHoEhlx8CIaccUCGnHTAhpx6B + IacfASG3HHAhtx1AIbceISG3HwIh5xyQIecd + YSHnHksh5x8BIfcc8CH3HQAh9x4AIfcfQCEX + HPAhFx0AIRceACEXH0A= + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC898 + CodecID + 283904153 + ConfigData + + AUccEAFHHUABRx4RAUcfAQGHHFABhx2QAYce + oAGHH5ABlxxgAZcdkAGXHoEBlx8CAacccAGn + HTABpx6BAacfAQG3HIABtx1AAbceIQG3HwEB + 5xyQAecd4AHnHkUB5x8BAUcMAg== + + FuncGroup + 1 + LayoutID + 5 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC898 + CodecID + 283904153 + ConfigData + + AUccEAFHHUABRx4RAUcfAQFXHCABVx0QAVce + AQFXHwEBZxwwAWcdYAFnHgEBZx8BAXccQAF3 + HSABdx4BAXcfAQGHHFABhx2QAYceoAGHH5AB + lxxgAZcdkAGXHoEBlx8CAacccAGnHTABpx6B + AacfAQG3HIABtx1AAbceIQG3HwIB5xyQAecd + YAHnHkUB5x8BAUcMAg== + + FuncGroup + 1 + LayoutID + 7 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904153 + Comment + Custom ALC898 by Irving23 for MSI GT72S 6QF-065CN + ConfigData + + ARcc8AEXHQABFx4AARcfQAEnHBABJx0BASce + oAEnH5ABRxzwAUcdAAFHHgABRx9AAVcc8AFX + HQABVx4AAVcfQAFnHPABZx0AAWceAAFnH0AB + dxxgAXcdEAF3HgEBdx8BAYccEAGHHRABhx6h + AYcfAQGXHEABlx0BAZceFwGXH5ABpxwgAacd + EAGnHoEBpx8BAbccQAG3HQEBtx4XAbcfkAHH + HPABxx0AAcceAAHHH0AB1xzwAdcdAAHXHgAB + 1x9AAecccAHnHREB5x5FAecfAQH3HPAB9x0A + AfceAAH3H0ABRwwC + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Realtek ALC898 for MSI GS40 + CodecID + 283904153 + ConfigData + + AaccEAGnHQABpx4XAacfkAHnHCAB5x0QAece + RgHnHwEBhxwwAYcdEAGHHoEBhx8BASccQAEn + HQABJx6gAScfkA== + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904153 + Comment + ALC898, Toleda + ConfigData + + IUccECFHHUAhRx4RIUcfkCFXHCAhVx0QIVce + ASFXHwEhZxzwIWcdACFnHgAhZx9AIXcc8CF3 + HQAhdx4AIXcfQCGHHEAhhx2QIYceoCGHH5Ah + lxxgIZcdkCGXHoEhlx8CIaccUCGnHTAhpx6B + IacfASG3HHAhtx1AIbceISG3HwIh5xyQIecd + YSHnHksh5x8BIfcc8CH3HQAh9x4AIfcfQCEX + HPAhFx0AIRceACEXH0A= + + FuncGroup + 1 + LayoutID + 28 + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC898 for CLEVO P65xRS(-G) by datasone + CodecID + 283904153 + ConfigData + + ARcc8AEXHQABFx4AARcfQAEnHFABJx0BASce + pgEnH5ABRxwQAUcdAQFHHhcBRx+QAXccIAF3 + HRABdx4BAXcfAQGHHEABhx0QAYcegQGHHwEB + 1xzwAdcdAAHXHgAB1x9AAeccMAHnHREB5x5E + AecfAQFHDAI= + + FuncGroup + 1 + LayoutID + 65 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC898 for Clevo P750DM2-G + CodecID + 283904153 + ConfigData + + ARcc8AEXHQABFx4AARcfQAEnHFABJx0BASce + pgEnH5ABRxwQAUcdAQFHHhcBRx+QAXccIAF3 + HRABdx4BAXcfAQGHHEABhx0QAYcegQGHHwEB + pxxgAacdEAGnHoEBpx8BAdcc8AHXHQAB1x4A + AdcfQAHnHDAB5x0RAeceRAHnHwEBRwwC + + FuncGroup + 1 + LayoutID + 66 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC898 for MSI GE62 7RE Apache Pro by spectra + CodecID + 283904153 + ConfigData + + ASccEAEnHQEBJx6gAScfmQGHHCABhx0QAYce + gQGHHwIBVxwwAVcdAQFXHhMBVx+ZAaccMQGn + HQEBpx4TAacfmQG3HDIBtx0BAbceEwG3H5kB + twwCAUccQAFHHRABRx4hAUcfAgFHDAIB5xxQ + AecdEQHnHkUB5x8C + + FuncGroup + 1 + LayoutID + 98 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Realtek ALC898 for MSI GP62-6QG Leopard Pro + CodecID + 283904153 + ConfigData + + ARcc8AEXHQABFx4AARcfQAEnHBABJx0BASce + oAEnH5ABRxxQAUcdQAFHHiEBRx8BAUcMAgFX + HEABVx0BAVceEAFXH5ABZxzwAWcdAAFnHgAB + Zx9AAXcc8AF3HQABdx4AAXcfQAGHHCABhx2Q + AYcegQGHHwEBlxzwAZcdAAGXHgABlx9AAacc + 8AGnHQABpx4AAacfQAG3HPABtx0AAbceAAG3 + H0ABxxzwAccdAAHHHgABxx9AAdcc8AHXHQAB + 1x4AAdcfQAHnHHAB5x1BAeceRQHnHwEB9xzw + AfcdAAH3HgAB9x9A + + FuncGroup + 1 + LayoutID + 99 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904153 + Comment + ALC898, 4 Line Out by Andrey1970 + ConfigData + + AUccAAFHHUABRx4RAUcfkAFXHBABVx0QAVce + AQFXHwEBZxwgAWcdYAFnHgEBZx8BAYccMAGH + HZABhx6gAYcfkAGnHEABpx0wAacegQGnHwEB + lxxQAZcdkAGXHoEBlx8CAbccYAG3HUABtx4h + AbcfAgHnHHAB5x1hAeceSwHnHwEBdxyAAXcd + IAF3HgEBdx8BAfcc8AH3HQAB9x4AAfcfSQEX + HPABFx0AARceAAEXH0k= + + FuncGroup + 1 + LayoutID + 101 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904256 + Comment + toleda - ALC1150 + ConfigData + + AUccEAFHHUABRx4RAUcfkAFHDAIBVxwgAVcd + EAFXHgEBVx8BAWccMAFnHWABZx4BAWcfAQF3 + HPABdx0AAXceAAF3H0ABhxxAAYcdkAGHHqAB + hx+QAZccYAGXHZABlx6BAZcfAgGnHFABpx0w + AacegQGnHwEBtxxwAbcdQAG3HiEBtx8CAbcM + AgHnHJAB5x1hAeceSwHnHwEB9xzwAfcdAAH3 + HgAB9x9AARcc8AEXHQABFx4AARcfQA== + + FuncGroup + 1 + LayoutID + 1 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904256 + Comment + toleda - ALC1150 + ConfigData + + AUccEAFHHUABRx4RAUcfkAFHDAIBVxzwAVcd + AAFXHgABVx9AAWcc8AFnHQABZx4AAWcfQAF3 + HPABdx0AAXceAAF3H0ABhxxAAYcdYAGHHgEB + hx8BAZccYAGXHZABlx6gAZcfkAGnHFABpx0Q + AaceAQGnHwEBtxxwAbcdQAG3HiEBtx8CAbcM + AgHnHJAB5x1hAeceSwHnHwEB9xzwAfcdAAH3 + HgAB9x9AARcc8AEXHQABFx4AARcfQA== + + FuncGroup + 1 + LayoutID + 2 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904256 + Comment + toleda - ALC1150 + ConfigData + + AUccEAFHHUABRx4RAUcfkAFHDAIBVxzwAVcd + AAFXHgABVx9AAWcc8AFnHQABZx4AAWcfQAF3 + HPABdx0AAXceAAF3H0ABhxxAAYcdkAGHHqAB + hx+QAZccYAGXHZABlx6BAZcfAgGnHFABpx0w + AacegQGnHwEBtxxwAbcdQAG3HiEBtx8CAbcM + AgHnHJAB5x1hAeceSwHnHwEB9xzwAfcdAAH3 + HgAB9x9AARcc8AEXHQABFx4AARcfQA== + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC1150 + CodecID + 283904256 + ConfigData + + AUccEAFHHUABRx4RAUcfAQGHHFABhx2QAYce + oAGHH5ABlxxgAZcdkAGXHoEBlx8CAacccAGn + HTABpx6BAacfAQG3HIABtx1AAbceIQG3HwEB + 5xyQAecd4AHnHkUB5x8BAUcMAg== + + FuncGroup + 1 + LayoutID + 5 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC1150 + CodecID + 283904256 + ConfigData + + AUccEAFHHUABRx4RAUcfAQFXHCABVx0QAVce + AQFXHwEBZxwwAWcdYAFnHgEBZx8BAXccQAF3 + HSABdx4BAXcfAQGHHFABhx2QAYceoAGHH5AB + lxxgAZcdkAGXHoEBlx8CAacccAGnHTABpx6B + AacfAQG3HIABtx1AAbceIQG3HwIB5xyQAecd + YAHnHkUB5x8BAUcMAg== + + FuncGroup + 1 + LayoutID + 7 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Realtek ALC1150 (mic boost) + CodecID + 283904256 + ConfigData + + AUccEAFHHUABRx4RAUcfAQFXHCABVx0QAVce + AQFXHwEBZxwwAWcdYAFnHgEBZx8BAXccQAF3 + HSABdx4BAXcfAQGHHFABhx2QAYceoAGHH5AB + lxxgAZcdkAGXHoEBlx8CAacccAGnHTABpx6B + AacfAQG3HIABtx1AAbceIQG3HwIB5xyQAecd + YAHnHkUB5x8BAUcMAg== + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904256 + Comment + ALC1150 for Gigabyte GA-Z97X-UD5H by DalianSky + ConfigData + + AUccEAFHHUABRx4RAUcfkAFHDAIBVxwgAVcd + EAFXHgEBVx8BAWccMAFnHWABZx4BAWcfAQF3 + HPABdx0AAXceAAF3H0ABhxxAAYcdkAGHHqAB + hx+QAZccYAGXHZABlx6BAZcfAgGnHFABpx0w + AacegQGnHwEBtxxwAbcdQAG3HiEBtx8CAbcM + AgHnHJAB5x1hAeceSwHnHwEB9xzwAfcdAAH3 + HgAB9x9AARcc8AEXHQABFx4AARcfQA== + + FuncGroup + 1 + LayoutID + 99 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906592 + CodecName + Toleda - Realtek ALC1220 + ConfigData + + AUccEAFHHUABRx4RAUcfkAFHDAIBVxwgAVcd + EAFXHgEBVx8BAWccMAFnHWABZx4BAWcfAQF3 + HPABdx0AAXceAAF3H0ABhxxAAYcdkAGHHqAB + hx+QAZccYAGXHZABlx6BAZcfAgGnHFABpx0w + AacegQGnHwEBtxxwAbcdQAG3HiEBtx8CAbcM + AgHnHJAB5x1hAeceSwHnHwE= + + FuncGroup + 1 + LayoutID + 1 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906592 + CodecName + Toleda - Realtek ALC1220 + ConfigData + + AUccEAFHHUABRx4RAUcfkAFHDAIBVxzwAVcd + AAFXHgABVx9AAWcc8AFnHQABZx4AAWcfQAF3 + HPABdx0AAXceAAF3H0ABhxxAAYcdYAGHHgEB + hx8BAZccYAGXHZABlx6gAZcfkAGnHFABpx0Q + AaceAQGnHwEBtxxwAbcdQAG3HiEBtx8CAbcM + AgHnHJAB5x1hAeceSwHnHwE= + + FuncGroup + 1 + LayoutID + 2 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906592 + CodecName + Toleda - Realtek ALC1220 + ConfigData + + AUccEAFHHUABRx4RAUcfkAFHDAIBVxzwAVcd + AAFXHgABVx9AAWcc8AFnHQABZx4AAWcfQAF3 + HPABdx0AAXceAAF3H0ABhxxAAYcdkAGHHqAB + hx+QAZccYAGXHZABlx6BAZcfAgGnHFABpx0w + AacegQGnHwEBtxxwAbcdQAG3HiEBtx8CAbcM + AgHnHJAB5x1hAeceSwHnHwEB9xzwAfcdAAH3 + HgAB9x9AARcc8AEXHQABFx4AARcfQA== + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAgG3DAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906592 + CodecName + Mirone - Realtek ALC1220 + ConfigData + + AUccEAFHHUABRx4RAUcfAQGHHFABhx2QAYce + oAGHH5ABlxxgAZcdkAGXHoEBlx8CAacccAGn + HTABpx6BAacfAQG3HIABtx1AAbceIQG3HwEB + 5xyQAecd4AHnHkUB5x8BAUcMAg== + + FuncGroup + 1 + LayoutID + 5 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906592 + CodecName + Mirone - Realtek ALC1220 + ConfigData + + AUccEAFHHUABRx4RAUcfAQFXHCABVx0QAVce + AQFXHwEBZxwwAWcdYAFnHgEBZx8BAXccQAF3 + HSABdx4BAXcfAQGHHFABhx2QAYceoAGHH5AB + lxxgAZcdkAGXHoEBlx8CAacccAGnHTABpx6B + AacfAQG3HIABtx1AAbceIQG3HwIB5xyQAecd + YAHnHkUB5x8BAUcMAg== + + FuncGroup + 1 + LayoutID + 7 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906592 + CodecName + Custom Realtek ALC1220 by truesoldier + ConfigData + + AUccEAFHHUABRx4RAUcfkAG3HCABtx1AAbce + IQG3HwIB5xwwAecdIAHnHksB5x8BAYccQAGH + HZABhx6gAYcfkAGXHFABlx2QAZcegQGXHwIB + VxxwAVcdEAFXHgEBVx8BAWccgAFnHWABZx4B + AWcfAQGnHKABpx0wAacegQGnHwE= + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906592 + CodecName + MacPeet - ALC1220 for Clevo P950HR + ConfigData + + AUccEAFHHRABRx4hAUcfAQFHDAIBJxwwAScd + AAEnHqYBJx+ZAYccQAGHHRABhx6BAYcfAQG3 + HGABtx0AAbceFwG3H5kBtwwCAecccAHnHRAB + 5x5EAecfAQ== + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906592 + CodecName + fleaplus - ALC1220 for MSI WT75 + ConfigData + + AbccIAG3HQEBtx4XAbcfkAG3DAIBhxxAAYcd + EAGHHqEBhx8BAZccQQGXHRQBlx6BAZcfAQGn + HE8Bpx0QAacegQGnHwEBJxxQAScdAQEnHmAB + Jx+Q + + FuncGroup + 1 + LayoutID + 15 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906592 + CodecName + MacPeet - ALC1220 for Gigabyte Z390 + ConfigData + + AeccMAHnHSAB5x5FAecfAQGHHEABhx2QAYce + oQGHH5EBlxxQAZcdkAGXHoEBlx8CAUccYAFH + HUABRx4hAUcfAgFHDAIBVxxwAVcdEAFXHgEB + Vx8BAWccgAFnHWABZx4BAWcfAQGnHJABpx0w + AacegQGnHwEBtxygAbcdQAG3HhEBtx+RAbcM + Ag== + + FuncGroup + 1 + LayoutID + 16 + WakeConfigData + + AbcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906592 + CodecName + ALC1220 for MSI GE63 Raider RGB 8RF + ConfigData + + AUccEAFHHUABRx4RAUcfAQEnHCABJx0BASce + oAEnH5ABlxwwAZcdEAGXHoEBlx8CAbccgAG3 + HUABtx4hAbcfAQHnHJAB5x3gAeceRQHnHwEB + RwwC + + FuncGroup + 1 + LayoutID + 21 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906592 + CodecName + lostwolf - ALC1220 for Gigabyte Z370-HD3P + ConfigData + + AScc8AEnHQABJx4AAScfQAFHHBABRx1AAUce + EQFHHwEBRwwCAVccIAFXHRABVx4BAVcfAQFn + HDABZx1gAWceAQFnHwEBdxxAAXcdIAF3HgEB + dx8BAYccUAGHHZABhx6gAYcfkQGXHGABlx2Q + AZcegAGXHwIBpxxwAacdMAGnHoEBpx8BAbcc + gAG3HUABtx4hAbcfAgG3DAIB1xzwAdcdAAHX + HgAB1x9AAecckAHnHQAB5x5DAecfmQ== + + FuncGroup + 1 + LayoutID + 27 + WakeConfigData + + AUcMAgG3DAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906592 + CodecName + MacPeet- ALC1220 for Z390 Aorus Ultra - Output SP/HP Manualmode + ConfigData + + AUccEAFHHUABRx4RAUcfkAFHDAIBVxwgAVcd + EAFXHgEBVx8BAWccMAFnHWABZx4BAWcfAQF3 + HPABdx0AAXceAAF3H0ABhxxAAYcdkAGHHqAB + hx+QAZccYAGXHZABlx6BAZcfAgGnHFABpx0w + AacegQGnHwEBtxxwAbcdQAG3HiEBtx8CAbcM + AgHnHJAB5x1hAeceSwHnHwE= + + FuncGroup + 1 + LayoutID + 28 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906592 + CodecName + MacPeet- ALC1220 for Z390 Aorus Ultra - Output SP/HP SwitchMode + ConfigData + + AUccEAFHHUABRx4RAUcfkAFHDAIBVxwgAVcd + EAFXHgEBVx8BAWccMAFnHWABZx4BAWcfAQF3 + HPABdx0AAXceAAF3H0ABhxxAAYcdkAGHHqAB + hx+QAZccYAGXHZABlx6BAZcfAgGnHFABpx0w + AacegQGnHwEBtxxwAbcdQAG3HiEBtx8CAbcM + AgHnHJAB5x1hAeceSwHnHwE= + + FuncGroup + 1 + LayoutID + 29 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906592 + CodecName + MacPeet- ALC1220 for Z370 AORUS Gaming 7 - Output SP/HP SwitchMode + ConfigData + + AeccMAHnHSAB5x5FAecfAQGHHEABhx2QAYce + oQGHH5ABlxxQAZcdkAGXHoEBlx8CAUccYAFH + HUABRx4hAUcfAgFHDAIBVxxwAVcdEAFXHgEB + Vx8BAWccgAFnHWABZx4BAWcfAQGnHJABpx0w + AacegQGnHwEBtxygAbcdQAG3HhEBtx+QAbcM + Ag== + + FuncGroup + 1 + LayoutID + 30 + WakeConfigData + + AUcMAgG3DAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906592 + CodecName + Custom ALC1220 for MSI P65 Creator by CleverCoder + ConfigData + + AUccEAFHHRABRx4RAUcfAAFHDAIBtxwgAbcd + AAG3HhcBtx+QAbcMAgGXHDABlx0QAZcegQGX + HwABJxxAAScdAAEnHqYBJx+Q + + FuncGroup + 1 + LayoutID + 34 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906592 + CodecName + MiBook 2019 by Dynamix1997 + ConfigData + + AaccEAGnHQEBpx4QAacfkAFHHCABRx0QAUce + IQFHHwMBRwwCASccMAEnHQEBJx6mAScfkAGH + HEABhx0QAYcegQGHHwM= + + FuncGroup + 1 + LayoutID + 99 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + CodecID + 283904768 + CodecName + toleda - Realtek ALCS1200A + ConfigData + + AUccEAFHHUABRx4RAUcfkAFXHCABVx0QAVce + AQFXHwEBZxwwAWcdYAFnHgEBZx8BAXcc8AF3 + HQABdx4AAXcfQAGHHEABhx2QAYceoAGHH5AB + lxxgAZcdkAGXHoEBlx8CAaccUAGnHTABpx6B + AacfAQG3HHABtx1AAbceIQG3HwIB5xyQAecd + YQHnHksB5x8BARcc8AEXHQABFx4AARcfQA== + + FuncGroup + 1 + LayoutID + 1 + WakeConfigData + + AUcMAgG3DAI= + + WakeVerbReinit + + + + CodecID + 283904768 + CodecName + toleda - Realtek ALCS1200A + ConfigData + + AUccEAFHHUABRx4RAUcfkAFXHPABVx0AAVce + AAFXH0ABZxzwAWcdAAFnHgABZx9AAXcc8AF3 + HQABdx4AAXcfQAGHHEABhx1gAYceAQGHHwEB + lxxgAZcdkAGXHqABlx+QAaccUAGnHRABpx4B + AacfAQG3HHABtx1AAbceIQG3HwIB5xyQAecd + YQHnHksB5x8BARcc8AEXHQABFx4AARcfQA== + + FuncGroup + 1 + LayoutID + 2 + WakeConfigData + + AUcMAgG3DAI= + + WakeVerbReinit + + + + CodecID + 283904768 + CodecName + toleda - Realtek ALCS1200A + ConfigData + + AUccEAFHHUABRx4RAUcfkAFXHPABVx0AAVce + AAFXH0ABZxzwAWcdAAFnHgABZx9AAXcc8AF3 + HQABdx4AAXcfQAGHHEABhx2QAYceoAGHH5AB + lxxgAZcdkAGXHoEBlx8CAaccUAGnHTABpx6B + AacfAQG3HHABtx1AAbceIQG3HwIB5xyQAecd + YQHnHksB5x8BARcc8AEXHQABFx4AARcfQA== + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAgG3DAI= + + WakeVerbReinit + + + + CodecID + 283904768 + CodecName + owen0o0 - Realtek ALCS1200A + ConfigData + + AUccQAFHHVABRx4RAUcfkAFHDAIBZxxhAWcd + EAFnHgEBZx8BAVccYgFXHRABVx4BAVcfAQG3 + HFABtx1AAbceIQG3HwIBtwwCAecccAHnHREB + 5x5FAecfAQGHHBABhx0QAYceoQGHH5ABpxwg + AacdEAGnHoEBpx8BAZccgAGXHZABlx6hAZcf + AgF3HPABdx0AAXceAAF3H0ABFxzwARcdAAEX + HgABFx9A + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAgG3DAI= + + WakeVerbReinit + + + + CodecID + 283904768 + CodecName + VictorXu - Realtek ALCS1200A for Asrock Z490M-ITX + ConfigData + + AUccEAFHHUABRx4RAUcfkQFHDAIBtxwgAbcd + QAG3HiEBtx8CAbcMAgGHHDABhx2QAYceoQGH + H5EBpxw/AacdMAGnHoEBpx8BAZccQAGXHZAB + lx6BAZcfAg== + + FuncGroup + 1 + LayoutID + 49 + WakeConfigData + + AUcMAgG3DAI= + + WakeVerbReinit + + + + CodecID + 283904768 + CodecName + VictorXu - Realtek ALCS1200A for Gigabyte B460M Aorus Pro + ConfigData + + AUccEAFHHUABRx4RAUcfkQFHDAIBZxwRAWcd + YAFnHgEBZx8BAVccEgFXHRABVx4BAVcfAQF3 + HBQBdx0gAXceAQF3HwEBtxwgAbcdQAG3HiEB + tx8CAbcMAgGHHEABhx2QAYceoQGHH5EBpxxP + AacdMAGnHoEBpx8BAZccUAGXHZABlx6BAZcf + Ag== + + FuncGroup + 1 + LayoutID + 50 + WakeConfigData + + AUcMAgG3DAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283904768 + CodecName + GeorgeWan - ALCS1200A for ASROCK Z490 Steel Legend + ConfigData + + ARcc8AEXHQABFx4AARcfQAFHHBABRx1AAUce + EQFHH5ABRwwCAVccIAFXHRABVx4BAVcfAQFn + HDABZx1gAWceAQFnHwEBdxzwAXcdAAF3HgAB + dx9AAYccQAGHHZABhx6gAYcfkAGXHGABlx2Q + AZcegQGXHwIBpxxQAacdMAGnHoEBpx8BAbcc + cAG3HUABtx4hAbcfAgG3DAIB5xyAAecdYQHn + HksB5x8B + + FuncGroup + 1 + LayoutID + 51 + WakeConfigData + + AUcMAgG3DAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906408 + CodecName + Toleda - Realtek ALC S1220A + ConfigData + + AUccEAFHHUABRx4RAUcfkAFHDAIBVxwgAVcd + EAFXHgEBVx8BAWccMAFnHWABZx4BAWcfAQF3 + HPABdx0AAXceAAF3H0ABhxxAAYcdkAGHHqAB + hx+QAZccYAGXHZABlx6BAZcfAgGnHFABpx0w + AacegQGnHwEBtxxwAbcdQAG3HiEBtx8CAbcM + AgHnHJAB5x1hAeceSwHnHwEB9xzwAfcdAAH3 + HgAB9x9AARcc8AEXHQABFx4AARcfQA== + + FuncGroup + 1 + LayoutID + 1 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906408 + CodecName + Toleda - Realtek ALC S1220A + ConfigData + + AUccEAFHHUABRx4RAUcfkAFHDAIBVxzwAVcd + AAFXHgABVx9AAWcc8AFnHQABZx4AAWcfQAF3 + HPABdx0AAXceAAF3H0ABhxxAAYcdYAGHHgEB + hx8BAZccYAGXHZABlx6gAZcfkAGnHFABpx0Q + AaceAQGnHwEBtxxwAbcdQAG3HiEBtx8CAbcM + AgHnHJAB5x1hAeceSwHnHwEB9xzwAfcdAAH3 + HgAB9x9AARcc8AEXHQABFx4AARcfQA== + + FuncGroup + 1 + LayoutID + 2 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906408 + CodecName + Toleda - Realtek ALC S1220A + ConfigData + + AUccEAFHHUABRx4RAUcfkAFHDAIBVxzwAVcd + AAFXHgABVx9AAWcc8AFnHQABZx4AAWcfQAF3 + HPABdx0AAXceAAF3H0ABhxxAAYcdkAGHHqAB + hx+QAZccYAGXHZABlx6BAZcfAgGnHFABpx0w + AacegQGnHwEBtxxwAbcdQAG3HiEBtx8CAbcM + AgHnHJAB5x1hAeceSwHnHwEB9xzwAfcdAAH3 + HgAB9x9AARcc8AEXHQABFx4AARcfQA== + + FuncGroup + 1 + LayoutID + 3 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906408 + CodecName + Mirone - Realtek ALC S1220A + ConfigData + + AUccEAFHHUABRx4RAUcfAQGHHFABhx2QAYce + oAGHH5ABlxxgAZcdkAGXHoEBlx8CAacccAGn + HTABpx6BAacfAQG3HIABtx1AAbceIQG3HwEB + 5xyQAecd4AHnHkUB5x8BAUcMAg== + + FuncGroup + 1 + LayoutID + 5 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906408 + CodecName + Mirone - Realtek ALC S1220A + ConfigData + + AUccEAFHHUABRx4RAUcfAQFXHCABVx0QAVce + AQFXHwEBZxwwAWcdYAFnHgEBZx8BAXccQAF3 + HSABdx4BAXcfAQGHHFABhx2QAYceoAGHH5AB + lxxgAZcdkAGXHoEBlx8CAacccAGnHTABpx6B + AacfAQG3HIABtx1AAbceIQG3HwIB5xyQAecd + YAHnHkUB5x8BAUcMAg== + + FuncGroup + 1 + LayoutID + 7 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906408 + CodecName + Realtek ALC S1220A Kushamot for Asus Z270G mb (based on Mirone's layout 7) + ConfigData + + AUccEAFHHUABRx4RAUcfAQFXHFABVx0QAVce + AQFXHwEBZxwwAWcdYAFnHgEBZx8BAYccYAGH + HZABhx6gAYcfkAGXHHABlx2QAZcegQGXHwEB + txwgAbcdQAG3HiEBtx8BAUcMAg== + + FuncGroup + 1 + LayoutID + 11 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906408 + CodecName + Realtek ALC S1220A RodionS, Nacho 2.0 outputs(green), 2 inputs (blue)+front panel (mic fr.panel), mic (pink), headphones(lime), SPDIF/Optical + ConfigData + + AUceEAGHHqABhx+RAZcegQFHDAI= + + FuncGroup + 1 + LayoutID + 20 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 283906408 + CodecName + Realtek ALC S1220A RodionS, Nacho 5.1 outputs(green, black, orange), 2 inputs (blue)+front panel (mic fr.panel), mic (pink), headphones(lime), SPDIF/Optical + ConfigData + + AUceEAGHHqABhx+RAZcegQFHDAI= + + FuncGroup + 1 + LayoutID + 21 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Conexant CX8050 + CodecID + 351346546 + ConfigData + + AXccEAF3HQABdx4XAXcfkAGnHCABpx0AAace + oAGnH5ABlxwwAZcdEAGXHosBlx8BAWccQAFn + HRABZx4rAWcfAQF3DAIBZwwCAZcHJA== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + Conexant CX8050 for ASUS S410U/X411U by cowpod + CodecID + 351346546 + ConfigData + + AXccEAF3HQABdx4XAXcfkAGnHCABpx0AAace + oAGnH5ABlxwwAZcdEAGXHosBlx8BAWccQAFn + HRABZx4rAWcfAQF3DAIBZwwCAZcHJAGnByQ= + + FuncGroup + 1 + LayoutID + 13 + WakeConfigData + + AXcMAgFnDAIBlwckAacHJA== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - Conexant CX8070 (CX11880) for Lenovo ThinkPad E590 + CodecID + 351346566 + ConfigData + + AXccEAF3HQABdx4XAXcfkQF3DAIBpxwgAacd + AAGnHqYBpx+QAZccMAGXHRABlx6BAZcfAAFn + HEABZx0QAWceIQFnHwABZwwC + + FuncGroup + 1 + LayoutID + 15 + WakeConfigData + + AXcMAgFnDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Asus VivoBook Pro 15 CX8150 by Andres ZeroCross + CodecID + 351346646 + ConfigData + + AWccQAFnHRABZx4hAWcfBAGXHDABlx0QAZce + gQGXHwQBpxwgAacdAQGnHqABpx+QAdccEAHX + HQEB1x4XAdcfkAFnDAIB1wwC + + FuncGroup + 1 + LayoutID + 21 + + + AFGLowPowerState + + AwAAAA== + + Codec + ASUS VivoBook S405UA-EB906T - CX8150 by Andres ZeroCross + CodecID + 351346646 + ConfigData + + AWccQAFnHRABZx4hAWcfBAGXHDABlx0QAZce + gQGXHwQBpxwgAacdAQGnHqABpx+QAXccEAF3 + HQEBdx4XAXcfkAFnDAIBdwwC + + FuncGroup + 1 + LayoutID + 22 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Conexant CX8200 + CodecID + 351346696 + ConfigData + + AXccEAF3HQABdx4XAXcfkAGnHCABpx0AAace + oAGnH5ABlxwwAZcdEAGXHosBlx8BAdccQAHX + HRAB1x4rAdcfAQF3DAIB1wwC + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - Conexant CX8200 for HP ZbooK 15UG4 + CodecID + 351346696 + ConfigData + + AXccEAF3HQABdx4XAXcfkAF3DAIBpxwgAacd + AAGnHqYBpx+QAZccMAGXHRABlx6BAZcfAAHX + HEAB1x0QAdceIQHXHwAB1wwC + + FuncGroup + 1 + LayoutID + 15 + WakeConfigData + + AXcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Andres ZeroCross - HP Spectre 13-V130NG + CodecID + 351346696 + ConfigData + + AXccIAF3HQEBdx4XAXcfkAGXHDABlx0QAZce + gQGXHwEBpxxAAacdAQGnHqABpx+QAWccEAFn + HRABZx4hAWcfAQFnDAIBdwwC + + FuncGroup + 1 + LayoutID + 21 + WakeConfigData + + AWcMAgF3DAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + frankiezdh - Conexant CX8200 for HP Probook 440 G5 + CodecID + 351346696 + ConfigData + + AWccUAFnHRABZx4hAWcfAQFnDAIBdxxAAXcd + AQF3HhcBdx+RAXcMAgGXHHABlx0QAZcegQGX + HwEBpxwQAacdAQGnHqYBpx+R + + FuncGroup + 1 + LayoutID + 23 + WakeConfigData + + AWcMAgF3DAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + rdmitry0911 - Conexant CX8200 for LG Gram 17 17z990 + CodecID + 351346696 + ConfigData + + AXccEAF3HQEBdx4XAXcfkQF3DAIBpxwgAacd + AQGnHqcBpx+VAZccMAGXHRABlx6BAZcfBAFn + HEABZx0QAWceIQFnHwQBZwwC + + FuncGroup + 1 + LayoutID + 80 + WakeConfigData + + AWcMAgF3DAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Conexant CX8400 + CodecID + 351346896 + ConfigData + + AWccEAFnHRABZx4hAWcfBAF3HPABdx0AAXce + AAF3H0ABhxzwAYcdAAGHHgABhx9AAZccIAGX + HRABlx6BAZcfBAGnHDABpx0BAacepgGnH5AB + 1xxAAdcdAQHXHhcB1x+ZAecc8AHnHQAB5x4A + AecfQAH3HPAB9x0AAfceAAH3H0ACFxzwAhcd + AAIXHgACFx9AAmcc8AJnHQACZx4AAmcfQAJ3 + HPACdx0AAnceAAJ3H0ABZwwCAdcMAg== + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + Codec + Conexant CX20561 + CodecID + 351359057 + ConfigData + + AWccQAFnHUABZx4hAWcfAQF3HPABdx0AAXce + AAF3H0ABhxwwAYcdMAGHHoEBhx8BAZcc8AGX + HQABlx4AAZcfQAGnHBABpx0BAaceFwGnH5AB + txzwAbcdAAG3HgABtx9AAccc8AHHHQABxx4A + AccfQAHXHCAB1x0BAdceoAHXH5A= + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Conexant CX20583 + CodecID + 351359079 + ConfigData + + AZcc8AGXHUABlx4hAZcfBAGnHPABpx2QAace + oQGnHwQBtxzwAbcdAQG3HgABtx9AAccc8AHH + HQEBxx4AAccfQAHXHPAB1x0BAdceAAHXH0AB + 5xzwAecdAQHnHqcB5x+VAfcc8AH3HQEB9x4X + AfcfkgIHHPACBx0RAgceRQIHHwQCJxzwAicd + AQInHgACJx9AAjcc8AI3HQECNx4AAjcfQA== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Conexant CX20585 + CodecID + 351359081 + ConfigData + + AZccEAGXHRABlx4gAZcfAAGnHCABpx0AAace + AAGnH0ABtxwwAbcdEAG3HoABtx8AAcccUAHH + HQABxx4AAccfQAHXHGAB1x0AAdceAAHXH0AB + 5xxgAecdAAHnHgAB5x9AAfcccAH3HQAB9x4Q + AfcfkAIHHIACBx0AAgceAAIHH0ACJxyAAicd + AAInHgACJx9AAjcckAI3HQACNx6gAjcfkA== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + Constanta custom for Toshiba L755-16R - Conexant CX20585 + CodecID + 351359081 + ConfigData + + AZccEAGXHRABlx4gAZcfAAGnHCABpx0wAace + gQGnHwEBtxwwAbcdAAG3HgABtx9AAcccUAHH + HQABxx4AAccfQAHXHGAB1x0AAdceAAHXH0AB + 5xxgAecdAAHnHgAB5x9AAfcccAH3HQAB9x4Q + AfcfkAIHHIACBx0AAgceAAIHH0ACJxyAAicd + AAInHgACJx9AAjcckAI3HQECNx6gAjcfkA== + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Conexant CX20588 + CodecID + 351359084 + ConfigData + + AZccQAGXHRABlx4hAZcfAgG3HDABtx0QAbce + owG3H5kCNxxQAjcdAQI3HqECNx+SAfccEAH3 + HQEB9x4TAfcfmQ== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Conexant CX20590 + CodecID + 351359086 + ConfigData + + AZccQAGXHRABlx4hAZcfAAGnHDABpx0QAace + gQGnHwABtxwgAbcdAAG3HqcBtx+QAfccEAH3 + HQAB9x4XAfcfkQ== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 351359086 + Comment + CX20590 Custom for Lenovo Yoga 13 by usr-sse2 + ConfigData + + AZccMAGXHUABlx4rAZcfDgH3HCAB9x0BAfce + EAH3H5ACNxwQAjcdAQI3HqACNx+QAaccQAGn + HRABpx6BAacfAQG3HPABtx0AAbceAAG3H0AB + xxzwAccdAAHHHgABxx9AAdcc8AHXHQAB1x4A + AdcfQAHnHPAB5x0AAeceAAHnH0ACBxzwAgcd + AAIHHgACBx9AAicc8AInHQACJx4AAicfQA== + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 351359086 + Comment + CX20590 for Lenovo T420 by tluck (Additional ports for use with a Docking Station) + ConfigData + + AFccAABXHQAAVx5WAFcfGABnHBAAZx0AAGce + VgBnHxgAdxwgAHcdAAB3HlYAdx8YAZccMAGX + HRABlx4hAZcfBAGnHEABpx2QAaceoQGnH2EB + txxQAbcdEAG3HoEBtx8BAcccYAHHHUABxx4h + AccfYQH3HHAB9x0BAfceFwH3H5kCNxyAAjcd + AQI3HqYCNx+ZAbcMAg== + + FuncGroup + 1 + LayoutID + 13 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 351359086 + Comment + CX20590 for Lenovo T420 by tluck (Standard Laptop) + ConfigData + + AFccAABXHQAAVx5WAFcfGABnHBAAZx0AAGce + VgBnHxgAdxwgAHcdAAB3HlYAdx8YAZccMAGX + HRABlx4hAZcfBAGnHEABpx2QAaceoQGnH2EB + txxQAbcdEAG3HoEBtx8BAcccYAHHHUABxx4h + AccfYQH3HHAB9x0BAfceFwH3H5kCNxyAAjcd + AQI3HqYCNx+ZAbcMAg== + + FuncGroup + 1 + LayoutID + 14 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + CodecID + 351359137 + Comment + CX20641 - MacPeet - Dell OptiPlex 3010 - ManualMode + ConfigData + + IcccECHHHUAhxx4BIccfASGnHCAhpx2QIace + gSGnHwIhtxwwIbcdMCG3HoEhtx8BIZccQCGX + HUAhlx4hIZcfAg== + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 351359137 + Comment + CX20641 - MacPeet - Dell OptiPlex 3010 - SwitchMode + ConfigData + + IcccECHHHUAhxx4RIccfkCGnHCAhpx2QIace + gSGnHwIhtxwwIbcdMCG3HoEhtx8BIZccQCGX + HUAhlx4hIZcfAg== + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 351359138 + Comment + CX20642 - MacPeet - Fujitsu ESPRIMO E910 E90+ Desktop - ManualMode + ConfigData + + IcccECHHHUAhxx4BIccfASGnHCAhpx0QIace + gSGnHwIhlxxAIZcdECGXHiEhlx8CIdccUCHX + HTAh1x6BIdcfAQ== + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 351359138 + Comment + CX20642 - MacPeet - Fujitsu ESPRIMO E910 E90+ Desktop - SwitchMode + ConfigData + + IcccECHHHUAhxx4RIccfkCGnHCAhpx0QIace + oSGnH5IhlxxAIZcdECGXHiEhlx8CIdccUCHX + HTAh1x6BIdcfAQ== + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AwAAAA== + + CodecID + 351359086 + Comment + Custom for Dell Vostro 3x60 by vusun123 + ConfigData + + AfccEAH3HQAB9x4XAfcfkQGnHDABpx0QAace + gQGnHwkBlxxAAZcdEAGXHiEBlx8AAjccIAI3 + HQECNx6nAjcfkAG3DAIB1wwC + + FuncGroup + 1 + LayoutID + 28 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Conexant CX20722 + CodecID + 351359218 + ConfigData + + AXccEAF3HQABdx4WAXcfkQGnHCABpx0AAace + pgGnH5ABlxwwAZcdEAGXHoEBlx8CAWccQAFn + HRABZx4hAWcfAg== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Conexant CX20724 + CodecID + 351359220 + ConfigData + + AWccEAFnHRABZx4hAWcfAgF3HCABdx0AAXce + FwF3H5EBlxwwAZcdEAGXHoEBlx8CAaccQAGn + HQABpx6mAacfkA== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Conexant CX20724 + CodecID + 351359220 + ConfigData + + AXccEAF3HQEBdx4XAXcfkQGnHCABpx0BAace + oAGnH5UBlxwwAZcdEAGXHosBlx8EAdccQAHX + HRAB1x4rAdcfBA== + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Conexant CX20752 + CodecID + 351359247 + ConfigData + + AWccEAFnHUABZx4hAWcfAQF3HCABdx0AAXce + FwF3H5ABhxwwAYcdkAGHHoEBhx8BAaccQAGn + HQABpx6gAacfkA== + + FuncGroup + 1 + LayoutID + 3 + + + Codec + Andres ZeroCross - Asus A455LF - WX039D + CodecID + 351359247 + ConfigData + + AZcHJAGnByQBZxxAAWcdEAFnHiEBZx8EAXcc + EAF3HQEBdx4XAXcfkAGXHDABlx0QAZcegQGX + HwQBpxwgAacdAQGnHqABpx+Q + + FuncGroup + 1 + LayoutID + 21 + WakeConfigData + + AZcHJAGnByQ= + + WakeVerbReinit + + + + Codec + Conexant - CX20751/2 by RehabMan + CodecID + 351359247 + ConfigData + + AWccQAFnHRABZx4hAWcfBAF3HBABdx0BAXce + FwF3H5ABlxwwAZcdEAGXHoEBlx8EAZcHJAGn + HCABpx0BAaceoAGnH5ABpwck + + FuncGroup + 1 + LayoutID + 28 + WakeConfigData + + AZcHJAGnByQ= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Conexant CX20753/4 + CodecID + 351359249 + ConfigData + + AWccEAFnHUABZx4hAWcfAgF3HCABdx0AAXce + FwF3H5ABlxwwAZcdkAGXHoEBlx8CAaccQAGn + HQABpx6gAacfkA== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Conexant CX20753/4 + CodecID + 351359249 + ConfigData + + AXccEAF3HQEBdx4XAXcfkAFnHBMBZx0QAWce + IQFnHwMBlxwwAZcdEAGXHoEBlx8DAaccQAGn + HQEBpx6gAacfkA== + + FuncGroup + 1 + LayoutID + 14 + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - CX20753/4 for Lenovo Thinkpad E580 + CodecID + 351359249 + ConfigData + + AXccEAF3HQABdx4XAXcfkAGnHCABpx0AAace + pgGnH5ABlxwwAZcdEAGXHoEBlx8AAWccQAFn + HRABZx4hAWcfAA== + + FuncGroup + 1 + LayoutID + 15 + + + AFGLowPowerState + + AwAAAA== + + Codec + Andres ZeroCross - LG gram 15ZD960-GX5BK + CodecID + 351359249 + ConfigData + + AXccIAF3HQEBdx4XAXcfkAGXHDABlx0QAZce + gQGXHwMBpxxAAacdAQGnHqABpx+QAdccEAHX + HRAB1x4hAdcfAw== + + FuncGroup + 1 + LayoutID + 21 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - Conexant CX20755 + CodecID + 351359251 + ConfigData + + AXccEAF3HQABdx4XAXcfkAGnHCABpx0AAace + pgGnH5UBhxwwAYcdkAGHHosBhx8CAWccQAFn + HUABZx4rAWcfAg== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AQAAAA== + + Codec + Mirone - Conexant CX20756 + CodecID + 351359252 + ConfigData + + AWccEAFnHUABZx4hAWcfAQF3HCABdx0AAXce + EwF3H5ABhxwwAYcdkAGHHqEBhx8CAaccQAGn + HQABpx6mAacfkA== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - Conexant CX20756 + CodecID + 351359252 + ConfigData + + AXccEAF3HQEBdx4XAXcfkAGnHCABpx0BAace + oAGnH5ABlxwwAZcdEAGXHosBlx8CAWccQAFn + HRABZx4rAWcfAgGHHPABhx0AAYceAAGHH0A= + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AQAAAA== + + Codec + Mirone - Conexant CX20757 + CodecID + 351359253 + ConfigData + + AWccEAFnHQABZx4hAWcfAQF3HCABdx0AAXce + EwF3H5ABhxwwAYcdAAGHHoEBhx8CAaccUAGn + HQABpx6gAacfkA== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom IDT 92HD87B1/3 by RehabMan + CodecID + 287143633 + ConfigData + + AMcegQDHHwM= + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + Codec + InsanelyDeepak - IDT92HD87B1/3 + CodecID + 287143633 + ConfigData + + ANccAADXHQAA1x4XANcfmQEXHCABFx0AARce + oAEXH5kAtxwwALcdQAC3HiEAtx8BAMccQADH + HRAAxx6AAMcfAQ== + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom IDT92HD87B2/4 by RehabMan + CodecID + 287143641 + ConfigData + + AMcegQDHHwMBFx6gARcfkA== + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom IDT92HD95 by RehabMan + CodecID + 287143573 + ConfigData + + AKccEACnHRAApx4hAKcfAgCnDAIAtxwgALcd + EAC3HqEAtx8CALcMAgDXHDAA1x0BANceFwDX + H5AA1wwCAOccQADnHQEA5x6gAOcfkA== + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - IDT 92HD66C3/65 + CodecID + 287143667 + ConfigData + + AKccEACnHUAApx4hAKcfAgC3HCAAtx1AALce + EwC3H5AAxxwwAMcdkADHHoEAxx8CAOccQADn + HZAA5x6gAOcfkA== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - IDT 92HD71B7X + CodecID + 287143602 + ConfigData + + AKccEACnHRAApx4hAKcfAAC3HCAAtx0QALce + gQC3HwIAxxwwAMcdAADHHvAAxx9AANccQADX + HQAA1x4XANcfkADnHFAA5x0QAOceoQDnHyAB + RxxgAUcdAAFHHvABRx9AAYcccAGHHQABhx6g + AYcfkAGXHIABlx0AAZce8AGXH0AB5xyQAecd + EAHnHkYB5x8BAfccoAH3HQAB9x7wAfcfQAIH + HLACBx0AAgce8AIHH0ACdxzAAncdAAJ3HvAC + dx9A + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + Dell Studio 1535 - IDT 92HD73C1X5 by chunnann + CodecID + 287143541 + ConfigData + + AKccEACnHRAApx4hAKcfAwDXHCAA1x0BANce + FwDXH5AA5xwwAOcdEADnHoEA5x8DAPccQAD3 + HRAA9x4BAPcfAwE3HFABNx0BATceoAE3H5A= + + FuncGroup + 1 + LayoutID + 19 + + + AFGLowPowerState + + AwAAAA== + + Codec + Andres ZeroCross - IDT 92HD73C1X5 for Alienware M17X R2 + CodecID + 287143541 + ConfigData + + AKccEACnHRAApx4hAKcfBADHHCAAxx0QAMce + gQDHHwQA5xwwAOcdAQDnHhcA5x+QATccQAE3 + HQEBNx6gATcfkA== + + FuncGroup + 1 + LayoutID + 21 + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - IDT92HD73E1X5 for HP Envy h8 1425eg + CodecID + 287143542 + ConfigData + + AMccEADHHUAAxx4RAMcfkQCnHCAApx1AAKce + IQCnHwIA5xwwAOcdkADnHqEA5x+RALccQAC3 + HZAAtx6BALcfAgDXHFAA1x0wANcegQDXHwEA + 9xxgAPcdEAD3HgEA9x8BAQcccAEHHWABBx4B + AQcfAQEXHIABFx0gARceAQEXHwECJxygAicd + EAInHkUCJx8B + + FuncGroup + 1 + LayoutID + 15 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - IDT 92HD81B1C5 + CodecID + 287143637 + ConfigData + + AKccIACnHRAApx6BAKcfAgC3HDAAtx0QALce + IQC3HwIA1xxAANcdAADXHhcA1x+QARccUAEX + HQABFx6gARcfkA== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + Goldfish64 - IDT 92HD81B1C5 for Dell Latitude E6410 + CodecID + 287143637 + ConfigData + + AKccIACnHRAApx6BAKcfBACnDAIAtxwwALcd + EAC3HiEAtx8EALcMAgDHHPAAxx0AAMceAADH + H0AA1xxAANcdAQDXHhcA1x+QANcMAgDnHPAA + 5x0AAOceAADnH0AA9xzwAPcdAAD3HgAA9x9A + AQcc8AEHHQABBx4AAQcfQAEXHFABFx0BARce + oAEXH5AB9xzwAfcdAAH3HgAB9x9AAgcc8AIH + HQACBx4AAgcfQA== + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - IDT 92HD81B1X5 + CodecID + 287143429 + ConfigData + + AKccIACnHRAApx6hAKcfAQC3HBAAtx0QALce + IQC3HwEA1xwwANcdAADXHhcA1x+QAOcc8ADn + HQAA5x4AAOcfQAD3HEAA9x0AAPceAAD3H0AB + BxxQAQcdAAEHHgABBx9AARccYAEXHQABFx6j + ARcf0AH3HHAB9x0AAfceAAH3H0ACBxyAAgcd + AAIHHgACBx9A + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom IDT 92HD81B1X5 by Andres ZeroCross + CodecID + 283902515 + ConfigData + + ASccEAEnHRABJx6BAScfBAFHHCABRx0BAUce + FwFHH5ABRwwCAXcc8AF3HQABdx4AAXcfQAGH + HPABhx0AAYceAAGHH0ABlxzwAZcdAAGXHgAB + lx9AAacc8AGnHQABpx4AAacfQAG3HDABtx0B + AbceoAG3H5AB1xzwAdcdAAHXHgAB1x9AAecc + 8AHnHQAB5x4AAecfQAIXHEACFx0QAhceIQIX + HwMCFwwC + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + Codec + RehabMan - IDT 92HD81B1X5 + CodecID + 287143429 + ConfigData + + AMcegQDHHwMBFx6gARcfkA== + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom IDT 92HD81B1X5 by Sergey_Galan for HP ProBook 4520s + CodecID + 287143429 + ConfigData + + AKccIACnHRAApx6BAKcfAQC3HFAAtx0QALce + IQC3HwEA1xwwANcdAQDXHhAA1x+QAOcc8ADn + HQAA5x4AAOcfQAD3HPAA9x0AAPceAAD3H0AB + BxzwAQcdAAEHHgABBx9AARccEAEXHQEBFx6g + ARcfkAH3HPAB9x0AAfceAAH3H0ACBxzwAgcd + AAIHHgACBx9AAMcc8ADHHQAAxx4AAMcfQA== + + FuncGroup + 1 + LayoutID + 20 + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom IDT 92HD81B1X5 by Sergey_Galan for HP DV6-6169er + CodecID + 287143429 + ConfigData + + AMccIADHHRAAxx6BAMcfAQC3HFAAtx0QALce + IQC3HwEA9xwwAPcdAQD3HhAA9x+QAOcc8ADn + HQAA5x4AAOcfQADXHPAA1x0AANceAADXH0AB + BxzwAQcdAAEHHgABBx9AARccEAEXHQEBFx6g + ARcfkAH3HPAB9x0AAfceAAH3H0ACBxzwAgcd + AAIHHgACBx9AAKcc8ACnHQAApx4AAKcfQA== + + FuncGroup + 1 + LayoutID + 21 + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom IDT 92HD81B1X5 by Gujiangjiang for HP Pavilion g4 1000 series + CodecID + 287143429 + ConfigData + + ARccAAEXHQEBFx6jARcfmQDHHBAAxx0QAMce + gQDHHwEA1xwgANcdAQDXHhMA1x+ZALccMAC3 + HRAAtx4hALcfAQFHDAI= + + FuncGroup + 1 + LayoutID + 28 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - IDT 92HD75B2X5 + CodecID + 287143432 + ConfigData + + AKccEACnHRAApx4hAKcfAQC3HCAAtx0QALce + gQC3HwEAxxwwAMcdEADHHqAAxx+QANccQADX + HQAA1x4RANcfkADnHFAA5x0AAOce8ADnH0AB + RxxgAUcdAAFHHvABRx9AAYcccAGHHQABhx7w + AYcfQAHnHIAB5x0AAece8AHnH0AB9xyQAfcd + AAH3HvAB9x9AAgccoAIHHQACBx7wAgcfQA== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - IDT 92HD75B3X5 + CodecID + 287143427 + ConfigData + + ALccEAC3HRAAtx6gALcfkADXHCAA1x0AANce + FwDXH5AA9xwwAPcdQAD3HiEA9x8BAYccQAGH + HZABhx6BAYcfAQ== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - IDT 92HD75B3X5 + CodecID + 287143427 + ConfigData + + ALccAAC3HQAAtx6nALcfmQDXHBAA1x0AANce + FwDXH5kA9xwgAPcdQAD3HiEA9x8B + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - IDT 92HD90BXX + CodecID + 287143655 + ConfigData + + ALccEAC3HRAAtx4hALcfAACnHCAApx0QAKce + gQCnHwABFxwwARcdkAEXHqABFx+QANccQADX + HQAA1x4XANcfkADnHFAA5x0QAOceAQDnHyAA + 9xxgAPcdEAD3HqEA9x8gAQcc8AEHHQABBx4A + AQcfQA== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + vusun123 - IDT 92HD90BXX + CodecID + 287143655 + ConfigData + + AKccIACnHRAApx6BAKcfAAC3HBAAtx0QALce + IQC3HwAA1xxAANcdAADXHhcA1x+QARccMAEX + HQABFx6gARcf0A== + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - IDT 92HD91BXX + CodecID + 287143648 + ConfigData + + AKccAACnHRAApx6BAKcfAQC3HBAAtx0QALce + IQC3HwMAxxwgAMcdAADHHgAAxx9JARccMAEX + HQABFx6gARcfmQDXHEAA1x0BANceFwDXH5kA + 5xxQAOcdEADnHgEA5x8jAQccYAEHHQABBx4A + AQcfSQH3HHAB9x0AAfceAAH3H0kCBxyAAgcd + AAIHHgACBx9J + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + RehabMan - IDT 92HD91BXX for HP Envy + CodecID + 287143648 + ConfigData + + AKccAACnHRAApx6BAKcfAQC3HBAAtx0QALce + IQC3HwMAxxwgAMcdAADHHgAAxx9JARccMAEX + HQABFx6gARcfmQD3HEAA9x0BAPceFwD3H5kA + 5xxQAOcdEADnHgEA5x8jAQccYAEHHQABBx4A + AQcfSQH3HHAB9x0AAfceAAH3H0kCBxyAAgcd + AAIHHgACBx9J + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + Codec + MacPeet - IDT92HD91BXX for HP Envy 6 1171-SG + CodecID + 287143648 + ConfigData + + ALccEAC3HRAAtx4hALcfAAC3DAIAxxwgAMcd + EADHHoEAxx8AARccMAEXHQABFx6jARcfmQDX + HEAA1x0AANceEADXH5AA1wwC + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AwAAAA== + + Codec + jl4c - IDT 92HD91BXX for HP Envy + CodecID + 287143648 + ConfigData + + ALccIAC3HRAAtx4hALcfAwD3HDIA9x0BAPce + FwD3H5ABFxwQARcdAQEXHqYBFx+XANcc8ADX + HQAA1x4AANcfQAEHHPABBx0AAQceAAEHH0AA + pxzwAKcdAACnHgAApx9AAMcc8ADHHQAAxx4A + AMcfQADnHPAA5x0AAOceAADnH0AB9xzwAfcd + AAH3HgAB9x9AAgcc8AIHHQACBx4AAgcfQA== + + FuncGroup + 1 + LayoutID + 33 + + + AFGLowPowerState + + AwAAAA== + + Codec + macish - IDT 92HD91BXX for HP Elitebook G1 + CodecID + 287143648 + ConfigData + + AKccAACnHRAApx6BAKcfAQC3HBAAtx0QALce + IQC3HwMAxxwgAMcdAADHHgAAxx9JARccMAEX + HQABFx6gARcfmQD3HEAA9x0BAPceFwD3H5kA + 5xxQAOcdEADnHgEA5x8jAQccYAEHHQABBx4A + AQcfSQH3HHAB9x0AAfceAAH3H0kCBxyAAgcd + AAIHHgACBx9J + + FuncGroup + 1 + LayoutID + 84 + + + AFGLowPowerState + + AwAAAA== + + Codec + Custom - IDT 92HD93BXX Dell Latitude E6430 + CodecID + 287143647 + ConfigData + + AKccIACnHRAApx6BAKcfAACnDAIAtxwQALcd + EAC3HiEAtx8AALcMAgDXHEAA1x0BANceFwDX + H5AA1wwCAOccUADnHRAA5x4BAOcfIADnDAIA + 9xxgAPcdEAD3HoEA9x8gAQcc8AEHHQABBx4A + AQcfQAEXHDABFx0BARceoAEXH5A= + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - IDT 92HD99BXX + CodecID + 287143653 + ConfigData + + AKccEACnHZAApx6BAKcfAgC3HCAAtx1AALce + IQC3HwIAxxwwAMcdAADHHvAAxx9AANccQADX + HQAA1x4TANcf0AD3HFAA9x0AAPce8AD3H0AB + FxxgARcdAAEXHqABFx+QANcMAg== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - IDT 92HD87B1 + CodecID + 287143429 + ConfigData + + AKccIACnHRAApx6hAKcfAQC3HBAAtx0QALce + IQC3HwEA1xwwANcdAADXHhcA1x+QAOcc8ADn + HQAA5x4AAOcfQAD3HEAA9x0AAPceAAD3H0AB + BxxQAQcdAAEHHgABBx9AARccYAEXHQABFx6j + ARcf0AH3HHAB9x0AAfceAAH3H0ACBxyAAgcd + AAIHHgACBx9A + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + Goldfish64 - STAC9200 for Dell Precision 390 + CodecID + 2206496400 + ConfigData + + AIcc8ACHHQAAhx4AAIcfQACXHPAAlx0AAJce + AACXH0AA1xwQANcdEADXHiEA1x8CAOccIADn + HQEA5x4QAOcfkAD3HDAA9x0BAPceoAD3H5AB + BxxAAQcdEAEHHoEBBx8CARcc8AEXHQABFx4A + ARcfQAEnHPABJx0AASceAAEnH0A= + + FuncGroup + 1 + LayoutID + 11 + + + AFGLowPowerState + + AwAAAA== + + Codec + STAC9872AK for Sony VGN-FZ11MR by ctich + CodecID + 2206496354 + ConfigData + + APccEAD3HQEA9x4XAPcfkACnHCAApx1AAKce + IQCnHwQBRxw+AUcdkAFHHqABRx+QARccQAEX + HREBFx5WARcfGA== + + FuncGroup + 1 + LayoutID + 12 + + + AFGLowPowerState + + AwAAAA== + + Codec + VIA VT1705 ECS H81H3-M4 (1.0A) by Andres ZeroCross + CodecID + 285624160 + ConfigData + + AkccEAJHHQACRx4AAkcfAQKHHCAChx1AAoce + IQKHHwICtxwwArcdkAK3HoECtx8BAwccQAMH + HQADBx6gAwcfkAJHDAI= + + FuncGroup + 1 + LayoutID + 21 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - VIA VT1802 + CodecID + 285639750 + ConfigData + + AkccEAJHHQACRx4TAkcfkAJXHCACVx1AAlce + IQJXHwEClxxAApcdAAKXHqAClx+QArccYAK3 + HZACtx6BArcfAgLXHHAC1x0QAtceRALXHwAC + RwwCAlcMAw== + + FuncGroup + 1 + LayoutID + 3 + + + AFGLowPowerState + + AwAAAA== + + Codec + VIA VT1802 for hasee k650d + CodecID + 285639750 + ConfigData + + AkccEAJHHQACRx4TAkcfkAJXHCACVx1AAlce + IQJXHwEClxxAApcdAAKXHqAClx+QArccYAK3 + HZACtx6BArcfAgLXHHAC1x0QAtceRALXHwAC + RwwCAlcMAw== + + FuncGroup + 1 + LayoutID + 65 + + + AFGLowPowerState + + AwAAAA== + + Codec + ChalesYu - VIA VT1802 + CodecID + 285639750 + ConfigData + + AkccQAJHHQACRx4XAkcfkAJHDAICVxxQAlcd + EAJXHiECVx8CAlcMAgMHHBADBx0AAwceoAMH + H5A= + + FuncGroup + 1 + LayoutID + 33 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - VIA VT2021 + CodecID + 285606977 + ConfigData + + IkccECJHHUAiRx4BIkcfASKHHCAihx1AIoce + ISKHHwEilxwwIpcdkCKXHqEilx8CIqccQCKn + HTAipx6BIqcfASK3HFAitx2QIrcegSK3HwEi + 5xxgIucdECLnHkUi5x8A + + FuncGroup + 1 + LayoutID + 5 + + + AFGLowPowerState + + AwAAAA== + + Codec + Mirone - VIA VT2021 + CodecID + 285606977 + ConfigData + + IkccECJHHUAiRx4RIkcfASJXHCAiVx0QIlce + ASJXHwEiZxwwImcdYCJnHgEiZx8BInccQCJ3 + HSAidx4BIncfASKHHFAihx1AIoceISKHHwEi + lxxgIpcdkCKXHqEilx8CIqcccCKnHTAipx6B + IqcfASK3HIAitx2QIrcegSK3HwEi5xygIucd + ECLnHkUi5x8A + + FuncGroup + 1 + LayoutID + 7 + + + AFGLowPowerState + + AwAAAA== + + Codec + SonicBSV - VIA VT2020/2021 + CodecID + 285606977 + ConfigData + + Ihcc8CIXHQAiFx4AIhcfQCJHHBAiRx1AIkce + ESJHHwEiRwwCIlcc8CJXHQAiVx4AIlcfQCJn + HPAiZx0AImceACJnH0AidxzwIncdACJ3HgAi + dx9AIoccICKHHUAihx4hIocfASKXHEAilx2Q + IpceoCKXH5AilwchIqccgCKnHTAipx6BIqcf + ASK3HPAitx0AIrceACK3H0AixxzwIscdACLH + HgAixx9AItcc8CLXHQAi1x4AItcfQCLnHJAi + 5x1hIuceSyLnHwEi9xzwIvcdACL3HgAi9x9A + + FuncGroup + 1 + LayoutID + 9 + + + AFGLowPowerState + + AwAAAA== + + Codec + Enrico - GA-Z77X-D3Hrev1.0 - VIA VT2020/2021 + CodecID + 285606977 + ConfigData + + IkccECJHHUAiRx4RIkcfASJXHCAiVx0QIlce + ASJXHwEiZxwwImcdYCJnHgEiZx8BInccQCJ3 + HSAidx4BIncfASKHHFAihx1AIoceISKHHwEi + lxxgIpcdkCKXHqEilx8CIqcccCKnHTAipx6B + IqcfASK3HIAitx2QIrcegSK3HwEi5xygIucd + ECLnHkUi5x8A + + FuncGroup + 1 + LayoutID + 13 + + + AFGLowPowerState + + AQAAAA== + + Codec + Custom CX20757 Lenovo G510 by Z39 + CodecID + 351359253 + ConfigData + + AWccQAFnHRABZx4hAWcfAQF3HBABdx0BAXce + FwF3H5ABhxzwAYcdAAGHHgABhx9AAZccMAGX + HRABlx6BAZcfAQGnHCABpx0BAacepwGnH5A= + + FuncGroup + 1 + LayoutID + 28 + + + AFGLowPowerState + + AwAAAA== + + Codec + Z Realtek ALC285 for thinkpad p52 + CodecID + 283902597 + ConfigData + + AUccEAFHHQEBRx4XAUcfmQFHDAICFxwgAhcd + EAIXHiECFx8EAhcMAgEnHDABJx0BAScepgEn + H5kBlxxAAZcdEAGXHoEBlx8B + + FuncGroup + 1 + LayoutID + 52 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Lancet-X—Realtek ALC295/ALC3254 for HP OMEN 15-AX000 + CodecID + 283902613 + ConfigData + + ASccEAEnHQEBJx6mAScfmQFHHEABRx0BAUce + FwFHH5kBlxwgAZcdEAGXHoEBlx8AAhccUAIX + HRACFx4hAhcfAAFHDAICFwwC + + FuncGroup + 1 + LayoutID + 23 + WakeConfigData + + AUcMAgIXDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC269 + CodecID + 283902569 + Comment + ALC269 for Thunderobot-G7000S-9300H by Phoenix-L + ConfigData + + AUccEAFHHUEBRx4XAUcfmQFHDAIBVxwgAVcd + QAFXHiEBVx8CAVcMAgGHHDABhx2QAYcegQGH + HwIBlxw/AZcdkAGXHoEBlx8CASccQAEnHZEB + Jx6mAScfmQ== + + FuncGroup + 1 + LayoutID + 77 + + + AFGLowPowerState + + AwAAAA== + + Codec + zty199 - ALC295 for HP Pavilion / OMEN-2 + CodecID + 283902613 + ConfigData + + ASccAAEnHQEBJx6mAScfmQFHHEABRx0BAUce + FwFHH5kBRwwCAZccgAGXHRABlx6LAZcfAAIX + HMACFx0QAhceKwIXHwACFwwC + + FuncGroup + 1 + LayoutID + 24 + WakeConfigData + + AUcMAgIXDAI= + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + ALC662v3 for Lenovo M415-D339 by Eric + CodecID + 283903586 + ConfigData + + AUccEAFHHUABRx4RAUcfAQFHDAIBtxwgAbcd + EAG3HiEBtx8CAbcMAgGHHDABhx2QAYceoAGH + H5EBlxxAAZcdEAGXHoABlx8CAaccXwGnHTAB + px6BAacfAQ== + + FuncGroup + 1 + LayoutID + 66 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Asus x430_s4300FN by fangf2018 + CodecID + 283902550 + ConfigData + + ASccMAEnHQEBJx6mAScfkAFHHBABRx0BAUce + FwFHH5ABRwwCAZccQAGXHRABlx6BAZcfAgIX + HCACFx0QAhceIQIXHwICFwwC + + FuncGroup + 1 + LayoutID + 77 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + AFGLowPowerState + + AwAAAA== + + Codec + Asus x430_s4300FN by fangf2018 (mic in and line in mic in separated) + CodecID + 283902550 + ConfigData + + ASccQAEnHQEBJx6mAScfkAFHHDABRx0BAUce + FwFHH5ABRwwCAZccIAGXHRABlx6BAZcfAgIX + HBACFx0QAhceIQIXHwICFwwC + + FuncGroup + 1 + LayoutID + 88 + WakeConfigData + + AUcMAg== + + WakeVerbReinit + + + + IOClass + AppleHDAHardwareConfigDriver + IOMatchCategory + AppleHDAHardwareConfigDriver + IOProviderClass + AppleHDAHardwareConfigDriverLoader + + as.vit9696.AppleALC + + CFBundleIdentifier + as.vit9696.AppleALC + IOClass + AppleALC + IOMatchCategory + AppleALC + IOProviderClass + IOResources + IOResourceMatch + IOKit + + + LSMinimumSystemVersion + 10.8 + NSHumanReadableCopyright + Copyright © 2017 vit9696. All rights reserved. + OSBundleCompatibleVersion + 1.0 + OSBundleLibraries + + as.vit9696.Lilu + 1.2.0 + com.apple.iokit.IOPCIFamily + 1.0.0b1 + com.apple.kpi.bsd + 12.0.0 + com.apple.kpi.dsep + 12.0.0 + com.apple.kpi.iokit + 12.0.0 + com.apple.kpi.libkern + 12.0.0 + com.apple.kpi.mach + 12.0.0 + com.apple.kpi.unsupported + 12.0.0 + + OSBundleRequired + Root + + diff --git a/EFI/OC/Kexts/AppleALC.kext/Contents/MacOS/AppleALC b/EFI/OC/Kexts/AppleALC.kext/Contents/MacOS/AppleALC new file mode 100755 index 0000000..0e4347f Binary files /dev/null and b/EFI/OC/Kexts/AppleALC.kext/Contents/MacOS/AppleALC differ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Info.plist b/EFI/OC/Kexts/Lilu.kext/Contents/Info.plist new file mode 100755 index 0000000..ccc13fa --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Info.plist @@ -0,0 +1,85 @@ + + + + + BuildMachineOSBuild + 19H114 + CFBundleDevelopmentRegion + en + CFBundleExecutable + Lilu + CFBundleIdentifier + as.vit9696.Lilu + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Lilu + CFBundlePackageType + KEXT + CFBundleShortVersionString + 1.5.1 + CFBundleSignature + ???? + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 1.5.1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 12B45b + DTPlatformName + macosx + DTPlatformVersion + 11.0 + DTSDKBuild + 20A2408 + DTSDKName + macosx11.0 + DTXcode + 1220 + DTXcodeBuild + 12B45b + IOKitPersonalities + + as.vit9696.Lilu + + CFBundleIdentifier + as.vit9696.Lilu + IOClass + Lilu + IOMatchCategory + Lilu + IOProviderClass + IOResources + IOResourceMatch + IOKit + + + LSMinimumSystemVersion + 10.6 + NSHumanReadableCopyright + Copyright © 2016-2020 vit9696. All rights reserved. + OSBundleCompatibleVersion + 1.2.0 + OSBundleLibraries + + com.apple.kpi.bsd + 10.0.0 + com.apple.kpi.dsep + 10.0.0 + com.apple.kpi.iokit + 10.0.0 + com.apple.kpi.libkern + 10.0.0 + com.apple.kpi.mach + 10.0.0 + com.apple.kpi.unsupported + 10.0.0 + + OSBundleRequired + Root + + diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/MacOS/Lilu b/EFI/OC/Kexts/Lilu.kext/Contents/MacOS/Lilu new file mode 100755 index 0000000..8751db7 Binary files /dev/null and b/EFI/OC/Kexts/Lilu.kext/Contents/MacOS/Lilu differ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/arm.h b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/arm.h new file mode 100755 index 0000000..8d544cb --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/arm.h @@ -0,0 +1,883 @@ +#ifndef CAPSTONE_ARM_H +#define CAPSTONE_ARM_H + +/* Capstone Disassembly Engine */ +/* By Nguyen Anh Quynh , 2013-2014 */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined(_MSC_VER) || !defined(_KERNEL_MODE) +#include +#endif + +#include "platform.h" + +#ifdef _MSC_VER +#pragma warning(disable:4201) +#endif + +//> ARM shift type +typedef enum arm_shifter { + ARM_SFT_INVALID = 0, + ARM_SFT_ASR, // shift with immediate const + ARM_SFT_LSL, // shift with immediate const + ARM_SFT_LSR, // shift with immediate const + ARM_SFT_ROR, // shift with immediate const + ARM_SFT_RRX, // shift with immediate const + ARM_SFT_ASR_REG, // shift with register + ARM_SFT_LSL_REG, // shift with register + ARM_SFT_LSR_REG, // shift with register + ARM_SFT_ROR_REG, // shift with register + ARM_SFT_RRX_REG, // shift with register +} arm_shifter; + +//> ARM condition code +typedef enum arm_cc { + ARM_CC_INVALID = 0, + ARM_CC_EQ, // Equal Equal + ARM_CC_NE, // Not equal Not equal, or unordered + ARM_CC_HS, // Carry set >, ==, or unordered + ARM_CC_LO, // Carry clear Less than + ARM_CC_MI, // Minus, negative Less than + ARM_CC_PL, // Plus, positive or zero >, ==, or unordered + ARM_CC_VS, // Overflow Unordered + ARM_CC_VC, // No overflow Not unordered + ARM_CC_HI, // Unsigned higher Greater than, or unordered + ARM_CC_LS, // Unsigned lower or same Less than or equal + ARM_CC_GE, // Greater than or equal Greater than or equal + ARM_CC_LT, // Less than Less than, or unordered + ARM_CC_GT, // Greater than Greater than + ARM_CC_LE, // Less than or equal <, ==, or unordered + ARM_CC_AL // Always (unconditional) Always (unconditional) +} arm_cc; + +typedef enum arm_sysreg { + //> Special registers for MSR + ARM_SYSREG_INVALID = 0, + + // SPSR* registers can be OR combined + ARM_SYSREG_SPSR_C = 1, + ARM_SYSREG_SPSR_X = 2, + ARM_SYSREG_SPSR_S = 4, + ARM_SYSREG_SPSR_F = 8, + + // CPSR* registers can be OR combined + ARM_SYSREG_CPSR_C = 16, + ARM_SYSREG_CPSR_X = 32, + ARM_SYSREG_CPSR_S = 64, + ARM_SYSREG_CPSR_F = 128, + + // independent registers + ARM_SYSREG_APSR = 256, + ARM_SYSREG_APSR_G, + ARM_SYSREG_APSR_NZCVQ, + ARM_SYSREG_APSR_NZCVQG, + + ARM_SYSREG_IAPSR, + ARM_SYSREG_IAPSR_G, + ARM_SYSREG_IAPSR_NZCVQG, + + ARM_SYSREG_EAPSR, + ARM_SYSREG_EAPSR_G, + ARM_SYSREG_EAPSR_NZCVQG, + + ARM_SYSREG_XPSR, + ARM_SYSREG_XPSR_G, + ARM_SYSREG_XPSR_NZCVQG, + + ARM_SYSREG_IPSR, + ARM_SYSREG_EPSR, + ARM_SYSREG_IEPSR, + + ARM_SYSREG_MSP, + ARM_SYSREG_PSP, + ARM_SYSREG_PRIMASK, + ARM_SYSREG_BASEPRI, + ARM_SYSREG_BASEPRI_MAX, + ARM_SYSREG_FAULTMASK, + ARM_SYSREG_CONTROL, +} arm_sysreg; + +//> The memory barrier constants map directly to the 4-bit encoding of +//> the option field for Memory Barrier operations. +typedef enum arm_mem_barrier { + ARM_MB_INVALID = 0, + ARM_MB_RESERVED_0, + ARM_MB_OSHLD, + ARM_MB_OSHST, + ARM_MB_OSH, + ARM_MB_RESERVED_4, + ARM_MB_NSHLD, + ARM_MB_NSHST, + ARM_MB_NSH, + ARM_MB_RESERVED_8, + ARM_MB_ISHLD, + ARM_MB_ISHST, + ARM_MB_ISH, + ARM_MB_RESERVED_12, + ARM_MB_LD, + ARM_MB_ST, + ARM_MB_SY, +} arm_mem_barrier; + +//> Operand type for instruction's operands +typedef enum arm_op_type { + ARM_OP_INVALID = 0, // = CS_OP_INVALID (Uninitialized). + ARM_OP_REG, // = CS_OP_REG (Register operand). + ARM_OP_IMM, // = CS_OP_IMM (Immediate operand). + ARM_OP_MEM, // = CS_OP_MEM (Memory operand). + ARM_OP_FP, // = CS_OP_FP (Floating-Point operand). + ARM_OP_CIMM = 64, // C-Immediate (coprocessor registers) + ARM_OP_PIMM, // P-Immediate (coprocessor registers) + ARM_OP_SETEND, // operand for SETEND instruction + ARM_OP_SYSREG, // MSR/MRS special register operand +} arm_op_type; + +//> Operand type for SETEND instruction +typedef enum arm_setend_type { + ARM_SETEND_INVALID = 0, // Uninitialized. + ARM_SETEND_BE, // BE operand. + ARM_SETEND_LE, // LE operand +} arm_setend_type; + +typedef enum arm_cpsmode_type { + ARM_CPSMODE_INVALID = 0, + ARM_CPSMODE_IE = 2, + ARM_CPSMODE_ID = 3 +} arm_cpsmode_type; + +//> Operand type for SETEND instruction +typedef enum arm_cpsflag_type { + ARM_CPSFLAG_INVALID = 0, + ARM_CPSFLAG_F = 1, + ARM_CPSFLAG_I = 2, + ARM_CPSFLAG_A = 4, + ARM_CPSFLAG_NONE = 16, // no flag +} arm_cpsflag_type; + +//> Data type for elements of vector instructions. +typedef enum arm_vectordata_type { + ARM_VECTORDATA_INVALID = 0, + + // Integer type + ARM_VECTORDATA_I8, + ARM_VECTORDATA_I16, + ARM_VECTORDATA_I32, + ARM_VECTORDATA_I64, + + // Signed integer type + ARM_VECTORDATA_S8, + ARM_VECTORDATA_S16, + ARM_VECTORDATA_S32, + ARM_VECTORDATA_S64, + + // Unsigned integer type + ARM_VECTORDATA_U8, + ARM_VECTORDATA_U16, + ARM_VECTORDATA_U32, + ARM_VECTORDATA_U64, + + // Data type for VMUL/VMULL + ARM_VECTORDATA_P8, + + // Floating type + ARM_VECTORDATA_F32, + ARM_VECTORDATA_F64, + + // Convert float <-> float + ARM_VECTORDATA_F16F64, // f16.f64 + ARM_VECTORDATA_F64F16, // f64.f16 + ARM_VECTORDATA_F32F16, // f32.f16 + ARM_VECTORDATA_F16F32, // f32.f16 + ARM_VECTORDATA_F64F32, // f64.f32 + ARM_VECTORDATA_F32F64, // f32.f64 + + // Convert integer <-> float + ARM_VECTORDATA_S32F32, // s32.f32 + ARM_VECTORDATA_U32F32, // u32.f32 + ARM_VECTORDATA_F32S32, // f32.s32 + ARM_VECTORDATA_F32U32, // f32.u32 + ARM_VECTORDATA_F64S16, // f64.s16 + ARM_VECTORDATA_F32S16, // f32.s16 + ARM_VECTORDATA_F64S32, // f64.s32 + ARM_VECTORDATA_S16F64, // s16.f64 + ARM_VECTORDATA_S16F32, // s16.f64 + ARM_VECTORDATA_S32F64, // s32.f64 + ARM_VECTORDATA_U16F64, // u16.f64 + ARM_VECTORDATA_U16F32, // u16.f32 + ARM_VECTORDATA_U32F64, // u32.f64 + ARM_VECTORDATA_F64U16, // f64.u16 + ARM_VECTORDATA_F32U16, // f32.u16 + ARM_VECTORDATA_F64U32, // f64.u32 +} arm_vectordata_type; + +// Instruction's operand referring to memory +// This is associated with ARM_OP_MEM operand type above +typedef struct arm_op_mem { + unsigned int base; // base register + unsigned int index; // index register + int scale; // scale for index register (can be 1, or -1) + int disp; // displacement/offset value +} arm_op_mem; + +// Instruction operand +typedef struct cs_arm_op { + int vector_index; // Vector Index for some vector operands (or -1 if irrelevant) + struct { + arm_shifter type; + unsigned int value; + } shift; + arm_op_type type; // operand type + union { + unsigned int reg; // register value for REG/SYSREG operand + int32_t imm; // immediate value for C-IMM, P-IMM or IMM operand + double fp; // floating point value for FP operand + arm_op_mem mem; // base/index/scale/disp value for MEM operand + arm_setend_type setend; // SETEND instruction's operand type + }; + // in some instructions, an operand can be subtracted or added to + // the base register, + bool subtracted; // if TRUE, this operand is subtracted. otherwise, it is added. +} cs_arm_op; + +// Instruction structure +typedef struct cs_arm { + bool usermode; // User-mode registers to be loaded (for LDM/STM instructions) + int vector_size; // Scalar size for vector instructions + arm_vectordata_type vector_data; // Data type for elements of vector instructions + arm_cpsmode_type cps_mode; // CPS mode for CPS instruction + arm_cpsflag_type cps_flag; // CPS mode for CPS instruction + arm_cc cc; // conditional code for this insn + bool update_flags; // does this insn update flags? + bool writeback; // does this insn write-back? + arm_mem_barrier mem_barrier; // Option for some memory barrier instructions + + // Number of operands of this instruction, + // or 0 when instruction has no operand. + uint8_t op_count; + + cs_arm_op operands[36]; // operands for this instruction. +} cs_arm; + +//> ARM registers +typedef enum arm_reg { + ARM_REG_INVALID = 0, + ARM_REG_APSR, + ARM_REG_APSR_NZCV, + ARM_REG_CPSR, + ARM_REG_FPEXC, + ARM_REG_FPINST, + ARM_REG_FPSCR, + ARM_REG_FPSCR_NZCV, + ARM_REG_FPSID, + ARM_REG_ITSTATE, + ARM_REG_LR, + ARM_REG_PC, + ARM_REG_SP, + ARM_REG_SPSR, + ARM_REG_D0, + ARM_REG_D1, + ARM_REG_D2, + ARM_REG_D3, + ARM_REG_D4, + ARM_REG_D5, + ARM_REG_D6, + ARM_REG_D7, + ARM_REG_D8, + ARM_REG_D9, + ARM_REG_D10, + ARM_REG_D11, + ARM_REG_D12, + ARM_REG_D13, + ARM_REG_D14, + ARM_REG_D15, + ARM_REG_D16, + ARM_REG_D17, + ARM_REG_D18, + ARM_REG_D19, + ARM_REG_D20, + ARM_REG_D21, + ARM_REG_D22, + ARM_REG_D23, + ARM_REG_D24, + ARM_REG_D25, + ARM_REG_D26, + ARM_REG_D27, + ARM_REG_D28, + ARM_REG_D29, + ARM_REG_D30, + ARM_REG_D31, + ARM_REG_FPINST2, + ARM_REG_MVFR0, + ARM_REG_MVFR1, + ARM_REG_MVFR2, + ARM_REG_Q0, + ARM_REG_Q1, + ARM_REG_Q2, + ARM_REG_Q3, + ARM_REG_Q4, + ARM_REG_Q5, + ARM_REG_Q6, + ARM_REG_Q7, + ARM_REG_Q8, + ARM_REG_Q9, + ARM_REG_Q10, + ARM_REG_Q11, + ARM_REG_Q12, + ARM_REG_Q13, + ARM_REG_Q14, + ARM_REG_Q15, + ARM_REG_R0, + ARM_REG_R1, + ARM_REG_R2, + ARM_REG_R3, + ARM_REG_R4, + ARM_REG_R5, + ARM_REG_R6, + ARM_REG_R7, + ARM_REG_R8, + ARM_REG_R9, + ARM_REG_R10, + ARM_REG_R11, + ARM_REG_R12, + ARM_REG_S0, + ARM_REG_S1, + ARM_REG_S2, + ARM_REG_S3, + ARM_REG_S4, + ARM_REG_S5, + ARM_REG_S6, + ARM_REG_S7, + ARM_REG_S8, + ARM_REG_S9, + ARM_REG_S10, + ARM_REG_S11, + ARM_REG_S12, + ARM_REG_S13, + ARM_REG_S14, + ARM_REG_S15, + ARM_REG_S16, + ARM_REG_S17, + ARM_REG_S18, + ARM_REG_S19, + ARM_REG_S20, + ARM_REG_S21, + ARM_REG_S22, + ARM_REG_S23, + ARM_REG_S24, + ARM_REG_S25, + ARM_REG_S26, + ARM_REG_S27, + ARM_REG_S28, + ARM_REG_S29, + ARM_REG_S30, + ARM_REG_S31, + + ARM_REG_ENDING, // <-- mark the end of the list or registers + + //> alias registers + ARM_REG_R13 = ARM_REG_SP, + ARM_REG_R14 = ARM_REG_LR, + ARM_REG_R15 = ARM_REG_PC, + + ARM_REG_SB = ARM_REG_R9, + ARM_REG_SL = ARM_REG_R10, + ARM_REG_FP = ARM_REG_R11, + ARM_REG_IP = ARM_REG_R12, +} arm_reg; + +//> ARM instruction +typedef enum arm_insn { + ARM_INS_INVALID = 0, + + ARM_INS_ADC, + ARM_INS_ADD, + ARM_INS_ADR, + ARM_INS_AESD, + ARM_INS_AESE, + ARM_INS_AESIMC, + ARM_INS_AESMC, + ARM_INS_AND, + ARM_INS_BFC, + ARM_INS_BFI, + ARM_INS_BIC, + ARM_INS_BKPT, + ARM_INS_BL, + ARM_INS_BLX, + ARM_INS_BX, + ARM_INS_BXJ, + ARM_INS_B, + ARM_INS_CDP, + ARM_INS_CDP2, + ARM_INS_CLREX, + ARM_INS_CLZ, + ARM_INS_CMN, + ARM_INS_CMP, + ARM_INS_CPS, + ARM_INS_CRC32B, + ARM_INS_CRC32CB, + ARM_INS_CRC32CH, + ARM_INS_CRC32CW, + ARM_INS_CRC32H, + ARM_INS_CRC32W, + ARM_INS_DBG, + ARM_INS_DMB, + ARM_INS_DSB, + ARM_INS_EOR, + ARM_INS_VMOV, + ARM_INS_FLDMDBX, + ARM_INS_FLDMIAX, + ARM_INS_VMRS, + ARM_INS_FSTMDBX, + ARM_INS_FSTMIAX, + ARM_INS_HINT, + ARM_INS_HLT, + ARM_INS_ISB, + ARM_INS_LDA, + ARM_INS_LDAB, + ARM_INS_LDAEX, + ARM_INS_LDAEXB, + ARM_INS_LDAEXD, + ARM_INS_LDAEXH, + ARM_INS_LDAH, + ARM_INS_LDC2L, + ARM_INS_LDC2, + ARM_INS_LDCL, + ARM_INS_LDC, + ARM_INS_LDMDA, + ARM_INS_LDMDB, + ARM_INS_LDM, + ARM_INS_LDMIB, + ARM_INS_LDRBT, + ARM_INS_LDRB, + ARM_INS_LDRD, + ARM_INS_LDREX, + ARM_INS_LDREXB, + ARM_INS_LDREXD, + ARM_INS_LDREXH, + ARM_INS_LDRH, + ARM_INS_LDRHT, + ARM_INS_LDRSB, + ARM_INS_LDRSBT, + ARM_INS_LDRSH, + ARM_INS_LDRSHT, + ARM_INS_LDRT, + ARM_INS_LDR, + ARM_INS_MCR, + ARM_INS_MCR2, + ARM_INS_MCRR, + ARM_INS_MCRR2, + ARM_INS_MLA, + ARM_INS_MLS, + ARM_INS_MOV, + ARM_INS_MOVT, + ARM_INS_MOVW, + ARM_INS_MRC, + ARM_INS_MRC2, + ARM_INS_MRRC, + ARM_INS_MRRC2, + ARM_INS_MRS, + ARM_INS_MSR, + ARM_INS_MUL, + ARM_INS_MVN, + ARM_INS_ORR, + ARM_INS_PKHBT, + ARM_INS_PKHTB, + ARM_INS_PLDW, + ARM_INS_PLD, + ARM_INS_PLI, + ARM_INS_QADD, + ARM_INS_QADD16, + ARM_INS_QADD8, + ARM_INS_QASX, + ARM_INS_QDADD, + ARM_INS_QDSUB, + ARM_INS_QSAX, + ARM_INS_QSUB, + ARM_INS_QSUB16, + ARM_INS_QSUB8, + ARM_INS_RBIT, + ARM_INS_REV, + ARM_INS_REV16, + ARM_INS_REVSH, + ARM_INS_RFEDA, + ARM_INS_RFEDB, + ARM_INS_RFEIA, + ARM_INS_RFEIB, + ARM_INS_RSB, + ARM_INS_RSC, + ARM_INS_SADD16, + ARM_INS_SADD8, + ARM_INS_SASX, + ARM_INS_SBC, + ARM_INS_SBFX, + ARM_INS_SDIV, + ARM_INS_SEL, + ARM_INS_SETEND, + ARM_INS_SHA1C, + ARM_INS_SHA1H, + ARM_INS_SHA1M, + ARM_INS_SHA1P, + ARM_INS_SHA1SU0, + ARM_INS_SHA1SU1, + ARM_INS_SHA256H, + ARM_INS_SHA256H2, + ARM_INS_SHA256SU0, + ARM_INS_SHA256SU1, + ARM_INS_SHADD16, + ARM_INS_SHADD8, + ARM_INS_SHASX, + ARM_INS_SHSAX, + ARM_INS_SHSUB16, + ARM_INS_SHSUB8, + ARM_INS_SMC, + ARM_INS_SMLABB, + ARM_INS_SMLABT, + ARM_INS_SMLAD, + ARM_INS_SMLADX, + ARM_INS_SMLAL, + ARM_INS_SMLALBB, + ARM_INS_SMLALBT, + ARM_INS_SMLALD, + ARM_INS_SMLALDX, + ARM_INS_SMLALTB, + ARM_INS_SMLALTT, + ARM_INS_SMLATB, + ARM_INS_SMLATT, + ARM_INS_SMLAWB, + ARM_INS_SMLAWT, + ARM_INS_SMLSD, + ARM_INS_SMLSDX, + ARM_INS_SMLSLD, + ARM_INS_SMLSLDX, + ARM_INS_SMMLA, + ARM_INS_SMMLAR, + ARM_INS_SMMLS, + ARM_INS_SMMLSR, + ARM_INS_SMMUL, + ARM_INS_SMMULR, + ARM_INS_SMUAD, + ARM_INS_SMUADX, + ARM_INS_SMULBB, + ARM_INS_SMULBT, + ARM_INS_SMULL, + ARM_INS_SMULTB, + ARM_INS_SMULTT, + ARM_INS_SMULWB, + ARM_INS_SMULWT, + ARM_INS_SMUSD, + ARM_INS_SMUSDX, + ARM_INS_SRSDA, + ARM_INS_SRSDB, + ARM_INS_SRSIA, + ARM_INS_SRSIB, + ARM_INS_SSAT, + ARM_INS_SSAT16, + ARM_INS_SSAX, + ARM_INS_SSUB16, + ARM_INS_SSUB8, + ARM_INS_STC2L, + ARM_INS_STC2, + ARM_INS_STCL, + ARM_INS_STC, + ARM_INS_STL, + ARM_INS_STLB, + ARM_INS_STLEX, + ARM_INS_STLEXB, + ARM_INS_STLEXD, + ARM_INS_STLEXH, + ARM_INS_STLH, + ARM_INS_STMDA, + ARM_INS_STMDB, + ARM_INS_STM, + ARM_INS_STMIB, + ARM_INS_STRBT, + ARM_INS_STRB, + ARM_INS_STRD, + ARM_INS_STREX, + ARM_INS_STREXB, + ARM_INS_STREXD, + ARM_INS_STREXH, + ARM_INS_STRH, + ARM_INS_STRHT, + ARM_INS_STRT, + ARM_INS_STR, + ARM_INS_SUB, + ARM_INS_SVC, + ARM_INS_SWP, + ARM_INS_SWPB, + ARM_INS_SXTAB, + ARM_INS_SXTAB16, + ARM_INS_SXTAH, + ARM_INS_SXTB, + ARM_INS_SXTB16, + ARM_INS_SXTH, + ARM_INS_TEQ, + ARM_INS_TRAP, + ARM_INS_TST, + ARM_INS_UADD16, + ARM_INS_UADD8, + ARM_INS_UASX, + ARM_INS_UBFX, + ARM_INS_UDF, + ARM_INS_UDIV, + ARM_INS_UHADD16, + ARM_INS_UHADD8, + ARM_INS_UHASX, + ARM_INS_UHSAX, + ARM_INS_UHSUB16, + ARM_INS_UHSUB8, + ARM_INS_UMAAL, + ARM_INS_UMLAL, + ARM_INS_UMULL, + ARM_INS_UQADD16, + ARM_INS_UQADD8, + ARM_INS_UQASX, + ARM_INS_UQSAX, + ARM_INS_UQSUB16, + ARM_INS_UQSUB8, + ARM_INS_USAD8, + ARM_INS_USADA8, + ARM_INS_USAT, + ARM_INS_USAT16, + ARM_INS_USAX, + ARM_INS_USUB16, + ARM_INS_USUB8, + ARM_INS_UXTAB, + ARM_INS_UXTAB16, + ARM_INS_UXTAH, + ARM_INS_UXTB, + ARM_INS_UXTB16, + ARM_INS_UXTH, + ARM_INS_VABAL, + ARM_INS_VABA, + ARM_INS_VABDL, + ARM_INS_VABD, + ARM_INS_VABS, + ARM_INS_VACGE, + ARM_INS_VACGT, + ARM_INS_VADD, + ARM_INS_VADDHN, + ARM_INS_VADDL, + ARM_INS_VADDW, + ARM_INS_VAND, + ARM_INS_VBIC, + ARM_INS_VBIF, + ARM_INS_VBIT, + ARM_INS_VBSL, + ARM_INS_VCEQ, + ARM_INS_VCGE, + ARM_INS_VCGT, + ARM_INS_VCLE, + ARM_INS_VCLS, + ARM_INS_VCLT, + ARM_INS_VCLZ, + ARM_INS_VCMP, + ARM_INS_VCMPE, + ARM_INS_VCNT, + ARM_INS_VCVTA, + ARM_INS_VCVTB, + ARM_INS_VCVT, + ARM_INS_VCVTM, + ARM_INS_VCVTN, + ARM_INS_VCVTP, + ARM_INS_VCVTT, + ARM_INS_VDIV, + ARM_INS_VDUP, + ARM_INS_VEOR, + ARM_INS_VEXT, + ARM_INS_VFMA, + ARM_INS_VFMS, + ARM_INS_VFNMA, + ARM_INS_VFNMS, + ARM_INS_VHADD, + ARM_INS_VHSUB, + ARM_INS_VLD1, + ARM_INS_VLD2, + ARM_INS_VLD3, + ARM_INS_VLD4, + ARM_INS_VLDMDB, + ARM_INS_VLDMIA, + ARM_INS_VLDR, + ARM_INS_VMAXNM, + ARM_INS_VMAX, + ARM_INS_VMINNM, + ARM_INS_VMIN, + ARM_INS_VMLA, + ARM_INS_VMLAL, + ARM_INS_VMLS, + ARM_INS_VMLSL, + ARM_INS_VMOVL, + ARM_INS_VMOVN, + ARM_INS_VMSR, + ARM_INS_VMUL, + ARM_INS_VMULL, + ARM_INS_VMVN, + ARM_INS_VNEG, + ARM_INS_VNMLA, + ARM_INS_VNMLS, + ARM_INS_VNMUL, + ARM_INS_VORN, + ARM_INS_VORR, + ARM_INS_VPADAL, + ARM_INS_VPADDL, + ARM_INS_VPADD, + ARM_INS_VPMAX, + ARM_INS_VPMIN, + ARM_INS_VQABS, + ARM_INS_VQADD, + ARM_INS_VQDMLAL, + ARM_INS_VQDMLSL, + ARM_INS_VQDMULH, + ARM_INS_VQDMULL, + ARM_INS_VQMOVUN, + ARM_INS_VQMOVN, + ARM_INS_VQNEG, + ARM_INS_VQRDMULH, + ARM_INS_VQRSHL, + ARM_INS_VQRSHRN, + ARM_INS_VQRSHRUN, + ARM_INS_VQSHL, + ARM_INS_VQSHLU, + ARM_INS_VQSHRN, + ARM_INS_VQSHRUN, + ARM_INS_VQSUB, + ARM_INS_VRADDHN, + ARM_INS_VRECPE, + ARM_INS_VRECPS, + ARM_INS_VREV16, + ARM_INS_VREV32, + ARM_INS_VREV64, + ARM_INS_VRHADD, + ARM_INS_VRINTA, + ARM_INS_VRINTM, + ARM_INS_VRINTN, + ARM_INS_VRINTP, + ARM_INS_VRINTR, + ARM_INS_VRINTX, + ARM_INS_VRINTZ, + ARM_INS_VRSHL, + ARM_INS_VRSHRN, + ARM_INS_VRSHR, + ARM_INS_VRSQRTE, + ARM_INS_VRSQRTS, + ARM_INS_VRSRA, + ARM_INS_VRSUBHN, + ARM_INS_VSELEQ, + ARM_INS_VSELGE, + ARM_INS_VSELGT, + ARM_INS_VSELVS, + ARM_INS_VSHLL, + ARM_INS_VSHL, + ARM_INS_VSHRN, + ARM_INS_VSHR, + ARM_INS_VSLI, + ARM_INS_VSQRT, + ARM_INS_VSRA, + ARM_INS_VSRI, + ARM_INS_VST1, + ARM_INS_VST2, + ARM_INS_VST3, + ARM_INS_VST4, + ARM_INS_VSTMDB, + ARM_INS_VSTMIA, + ARM_INS_VSTR, + ARM_INS_VSUB, + ARM_INS_VSUBHN, + ARM_INS_VSUBL, + ARM_INS_VSUBW, + ARM_INS_VSWP, + ARM_INS_VTBL, + ARM_INS_VTBX, + ARM_INS_VCVTR, + ARM_INS_VTRN, + ARM_INS_VTST, + ARM_INS_VUZP, + ARM_INS_VZIP, + ARM_INS_ADDW, + ARM_INS_ASR, + ARM_INS_DCPS1, + ARM_INS_DCPS2, + ARM_INS_DCPS3, + ARM_INS_IT, + ARM_INS_LSL, + ARM_INS_LSR, + ARM_INS_ASRS, + ARM_INS_LSRS, + ARM_INS_ORN, + ARM_INS_ROR, + ARM_INS_RRX, + ARM_INS_SUBS, + ARM_INS_SUBW, + ARM_INS_TBB, + ARM_INS_TBH, + ARM_INS_CBNZ, + ARM_INS_CBZ, + ARM_INS_MOVS, + ARM_INS_POP, + ARM_INS_PUSH, + + // special instructions + ARM_INS_NOP, + ARM_INS_YIELD, + ARM_INS_WFE, + ARM_INS_WFI, + ARM_INS_SEV, + ARM_INS_SEVL, + ARM_INS_VPUSH, + ARM_INS_VPOP, + + ARM_INS_ENDING, // <-- mark the end of the list of instructions +} arm_insn; + +//> Group of ARM instructions +typedef enum arm_insn_group { + ARM_GRP_INVALID = 0, // = CS_GRP_INVALID + + //> Generic groups + // all jump instructions (conditional+direct+indirect jumps) + ARM_GRP_JUMP, // = CS_GRP_JUMP + + //> Architecture-specific groups + ARM_GRP_CRYPTO = 128, + ARM_GRP_DATABARRIER, + ARM_GRP_DIVIDE, + ARM_GRP_FPARMV8, + ARM_GRP_MULTPRO, + ARM_GRP_NEON, + ARM_GRP_T2EXTRACTPACK, + ARM_GRP_THUMB2DSP, + ARM_GRP_TRUSTZONE, + ARM_GRP_V4T, + ARM_GRP_V5T, + ARM_GRP_V5TE, + ARM_GRP_V6, + ARM_GRP_V6T2, + ARM_GRP_V7, + ARM_GRP_V8, + ARM_GRP_VFP2, + ARM_GRP_VFP3, + ARM_GRP_VFP4, + ARM_GRP_ARM, + ARM_GRP_MCLASS, + ARM_GRP_NOTMCLASS, + ARM_GRP_THUMB, + ARM_GRP_THUMB1ONLY, + ARM_GRP_THUMB2, + ARM_GRP_PREV8, + ARM_GRP_FPVMLX, + ARM_GRP_MULOPS, + ARM_GRP_CRC, + ARM_GRP_DPVFP, + ARM_GRP_V6M, + + ARM_GRP_ENDING, +} arm_insn_group; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/arm64.h b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/arm64.h new file mode 100755 index 0000000..87504ba --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/arm64.h @@ -0,0 +1,1154 @@ +#ifndef CAPSTONE_ARM64_H +#define CAPSTONE_ARM64_H + +/* Capstone Disassembly Engine */ +/* By Nguyen Anh Quynh , 2013-2014 */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined(_MSC_VER) || !defined(_KERNEL_MODE) +#include +#endif + +#include "platform.h" + +#ifdef _MSC_VER +#pragma warning(disable:4201) +#endif + +//> ARM64 shift type +typedef enum arm64_shifter { + ARM64_SFT_INVALID = 0, + ARM64_SFT_LSL = 1, + ARM64_SFT_MSL = 2, + ARM64_SFT_LSR = 3, + ARM64_SFT_ASR = 4, + ARM64_SFT_ROR = 5, +} arm64_shifter; + +//> ARM64 extender type +typedef enum arm64_extender { + ARM64_EXT_INVALID = 0, + ARM64_EXT_UXTB = 1, + ARM64_EXT_UXTH = 2, + ARM64_EXT_UXTW = 3, + ARM64_EXT_UXTX = 4, + ARM64_EXT_SXTB = 5, + ARM64_EXT_SXTH = 6, + ARM64_EXT_SXTW = 7, + ARM64_EXT_SXTX = 8, +} arm64_extender; + +//> ARM64 condition code +typedef enum arm64_cc { + ARM64_CC_INVALID = 0, + ARM64_CC_EQ = 1, // Equal + ARM64_CC_NE = 2, // Not equal: Not equal, or unordered + ARM64_CC_HS = 3, // Unsigned higher or same: >, ==, or unordered + ARM64_CC_LO = 4, // Unsigned lower or same: Less than + ARM64_CC_MI = 5, // Minus, negative: Less than + ARM64_CC_PL = 6, // Plus, positive or zero: >, ==, or unordered + ARM64_CC_VS = 7, // Overflow: Unordered + ARM64_CC_VC = 8, // No overflow: Ordered + ARM64_CC_HI = 9, // Unsigned higher: Greater than, or unordered + ARM64_CC_LS = 10, // Unsigned lower or same: Less than or equal + ARM64_CC_GE = 11, // Greater than or equal: Greater than or equal + ARM64_CC_LT = 12, // Less than: Less than, or unordered + ARM64_CC_GT = 13, // Signed greater than: Greater than + ARM64_CC_LE = 14, // Signed less than or equal: <, ==, or unordered + ARM64_CC_AL = 15, // Always (unconditional): Always (unconditional) + ARM64_CC_NV = 16, // Always (unconditional): Always (unconditional) + // Note the NV exists purely to disassemble 0b1111. Execution + // is "always". +} arm64_cc; + +//> System registers +typedef enum arm64_sysreg { + //> System registers for MRS + ARM64_SYSREG_INVALID = 0, + ARM64_SYSREG_MDCCSR_EL0 = 0x9808, // 10 011 0000 0001 000 + ARM64_SYSREG_DBGDTRRX_EL0 = 0x9828, // 10 011 0000 0101 000 + ARM64_SYSREG_MDRAR_EL1 = 0x8080, // 10 000 0001 0000 000 + ARM64_SYSREG_OSLSR_EL1 = 0x808c, // 10 000 0001 0001 100 + ARM64_SYSREG_DBGAUTHSTATUS_EL1 = 0x83f6, // 10 000 0111 1110 110 + ARM64_SYSREG_PMCEID0_EL0 = 0xdce6, // 11 011 1001 1100 110 + ARM64_SYSREG_PMCEID1_EL0 = 0xdce7, // 11 011 1001 1100 111 + ARM64_SYSREG_MIDR_EL1 = 0xc000, // 11 000 0000 0000 000 + ARM64_SYSREG_CCSIDR_EL1 = 0xc800, // 11 001 0000 0000 000 + ARM64_SYSREG_CLIDR_EL1 = 0xc801, // 11 001 0000 0000 001 + ARM64_SYSREG_CTR_EL0 = 0xd801, // 11 011 0000 0000 001 + ARM64_SYSREG_MPIDR_EL1 = 0xc005, // 11 000 0000 0000 101 + ARM64_SYSREG_REVIDR_EL1 = 0xc006, // 11 000 0000 0000 110 + ARM64_SYSREG_AIDR_EL1 = 0xc807, // 11 001 0000 0000 111 + ARM64_SYSREG_DCZID_EL0 = 0xd807, // 11 011 0000 0000 111 + ARM64_SYSREG_ID_PFR0_EL1 = 0xc008, // 11 000 0000 0001 000 + ARM64_SYSREG_ID_PFR1_EL1 = 0xc009, // 11 000 0000 0001 001 + ARM64_SYSREG_ID_DFR0_EL1 = 0xc00a, // 11 000 0000 0001 010 + ARM64_SYSREG_ID_AFR0_EL1 = 0xc00b, // 11 000 0000 0001 011 + ARM64_SYSREG_ID_MMFR0_EL1 = 0xc00c, // 11 000 0000 0001 100 + ARM64_SYSREG_ID_MMFR1_EL1 = 0xc00d, // 11 000 0000 0001 101 + ARM64_SYSREG_ID_MMFR2_EL1 = 0xc00e, // 11 000 0000 0001 110 + ARM64_SYSREG_ID_MMFR3_EL1 = 0xc00f, // 11 000 0000 0001 111 + ARM64_SYSREG_ID_ISAR0_EL1 = 0xc010, // 11 000 0000 0010 000 + ARM64_SYSREG_ID_ISAR1_EL1 = 0xc011, // 11 000 0000 0010 001 + ARM64_SYSREG_ID_ISAR2_EL1 = 0xc012, // 11 000 0000 0010 010 + ARM64_SYSREG_ID_ISAR3_EL1 = 0xc013, // 11 000 0000 0010 011 + ARM64_SYSREG_ID_ISAR4_EL1 = 0xc014, // 11 000 0000 0010 100 + ARM64_SYSREG_ID_ISAR5_EL1 = 0xc015, // 11 000 0000 0010 101 + ARM64_SYSREG_ID_A64PFR0_EL1 = 0xc020, // 11 000 0000 0100 000 + ARM64_SYSREG_ID_A64PFR1_EL1 = 0xc021, // 11 000 0000 0100 001 + ARM64_SYSREG_ID_A64DFR0_EL1 = 0xc028, // 11 000 0000 0101 000 + ARM64_SYSREG_ID_A64DFR1_EL1 = 0xc029, // 11 000 0000 0101 001 + ARM64_SYSREG_ID_A64AFR0_EL1 = 0xc02c, // 11 000 0000 0101 100 + ARM64_SYSREG_ID_A64AFR1_EL1 = 0xc02d, // 11 000 0000 0101 101 + ARM64_SYSREG_ID_A64ISAR0_EL1 = 0xc030, // 11 000 0000 0110 000 + ARM64_SYSREG_ID_A64ISAR1_EL1 = 0xc031, // 11 000 0000 0110 001 + ARM64_SYSREG_ID_A64MMFR0_EL1 = 0xc038, // 11 000 0000 0111 000 + ARM64_SYSREG_ID_A64MMFR1_EL1 = 0xc039, // 11 000 0000 0111 001 + ARM64_SYSREG_MVFR0_EL1 = 0xc018, // 11 000 0000 0011 000 + ARM64_SYSREG_MVFR1_EL1 = 0xc019, // 11 000 0000 0011 001 + ARM64_SYSREG_MVFR2_EL1 = 0xc01a, // 11 000 0000 0011 010 + ARM64_SYSREG_RVBAR_EL1 = 0xc601, // 11 000 1100 0000 001 + ARM64_SYSREG_RVBAR_EL2 = 0xe601, // 11 100 1100 0000 001 + ARM64_SYSREG_RVBAR_EL3 = 0xf601, // 11 110 1100 0000 001 + ARM64_SYSREG_ISR_EL1 = 0xc608, // 11 000 1100 0001 000 + ARM64_SYSREG_CNTPCT_EL0 = 0xdf01, // 11 011 1110 0000 001 + ARM64_SYSREG_CNTVCT_EL0 = 0xdf02, // 11 011 1110 0000 010 + + // Trace registers + ARM64_SYSREG_TRCSTATR = 0x8818, // 10 001 0000 0011 000 + ARM64_SYSREG_TRCIDR8 = 0x8806, // 10 001 0000 0000 110 + ARM64_SYSREG_TRCIDR9 = 0x880e, // 10 001 0000 0001 110 + ARM64_SYSREG_TRCIDR10 = 0x8816, // 10 001 0000 0010 110 + ARM64_SYSREG_TRCIDR11 = 0x881e, // 10 001 0000 0011 110 + ARM64_SYSREG_TRCIDR12 = 0x8826, // 10 001 0000 0100 110 + ARM64_SYSREG_TRCIDR13 = 0x882e, // 10 001 0000 0101 110 + ARM64_SYSREG_TRCIDR0 = 0x8847, // 10 001 0000 1000 111 + ARM64_SYSREG_TRCIDR1 = 0x884f, // 10 001 0000 1001 111 + ARM64_SYSREG_TRCIDR2 = 0x8857, // 10 001 0000 1010 111 + ARM64_SYSREG_TRCIDR3 = 0x885f, // 10 001 0000 1011 111 + ARM64_SYSREG_TRCIDR4 = 0x8867, // 10 001 0000 1100 111 + ARM64_SYSREG_TRCIDR5 = 0x886f, // 10 001 0000 1101 111 + ARM64_SYSREG_TRCIDR6 = 0x8877, // 10 001 0000 1110 111 + ARM64_SYSREG_TRCIDR7 = 0x887f, // 10 001 0000 1111 111 + ARM64_SYSREG_TRCOSLSR = 0x888c, // 10 001 0001 0001 100 + ARM64_SYSREG_TRCPDSR = 0x88ac, // 10 001 0001 0101 100 + ARM64_SYSREG_TRCDEVAFF0 = 0x8bd6, // 10 001 0111 1010 110 + ARM64_SYSREG_TRCDEVAFF1 = 0x8bde, // 10 001 0111 1011 110 + ARM64_SYSREG_TRCLSR = 0x8bee, // 10 001 0111 1101 110 + ARM64_SYSREG_TRCAUTHSTATUS = 0x8bf6, // 10 001 0111 1110 110 + ARM64_SYSREG_TRCDEVARCH = 0x8bfe, // 10 001 0111 1111 110 + ARM64_SYSREG_TRCDEVID = 0x8b97, // 10 001 0111 0010 111 + ARM64_SYSREG_TRCDEVTYPE = 0x8b9f, // 10 001 0111 0011 111 + ARM64_SYSREG_TRCPIDR4 = 0x8ba7, // 10 001 0111 0100 111 + ARM64_SYSREG_TRCPIDR5 = 0x8baf, // 10 001 0111 0101 111 + ARM64_SYSREG_TRCPIDR6 = 0x8bb7, // 10 001 0111 0110 111 + ARM64_SYSREG_TRCPIDR7 = 0x8bbf, // 10 001 0111 0111 111 + ARM64_SYSREG_TRCPIDR0 = 0x8bc7, // 10 001 0111 1000 111 + ARM64_SYSREG_TRCPIDR1 = 0x8bcf, // 10 001 0111 1001 111 + ARM64_SYSREG_TRCPIDR2 = 0x8bd7, // 10 001 0111 1010 111 + ARM64_SYSREG_TRCPIDR3 = 0x8bdf, // 10 001 0111 1011 111 + ARM64_SYSREG_TRCCIDR0 = 0x8be7, // 10 001 0111 1100 111 + ARM64_SYSREG_TRCCIDR1 = 0x8bef, // 10 001 0111 1101 111 + ARM64_SYSREG_TRCCIDR2 = 0x8bf7, // 10 001 0111 1110 111 + ARM64_SYSREG_TRCCIDR3 = 0x8bff, // 10 001 0111 1111 111 + + // GICv3 registers + ARM64_SYSREG_ICC_IAR1_EL1 = 0xc660, // 11 000 1100 1100 000 + ARM64_SYSREG_ICC_IAR0_EL1 = 0xc640, // 11 000 1100 1000 000 + ARM64_SYSREG_ICC_HPPIR1_EL1 = 0xc662, // 11 000 1100 1100 010 + ARM64_SYSREG_ICC_HPPIR0_EL1 = 0xc642, // 11 000 1100 1000 010 + ARM64_SYSREG_ICC_RPR_EL1 = 0xc65b, // 11 000 1100 1011 011 + ARM64_SYSREG_ICH_VTR_EL2 = 0xe659, // 11 100 1100 1011 001 + ARM64_SYSREG_ICH_EISR_EL2 = 0xe65b, // 11 100 1100 1011 011 + ARM64_SYSREG_ICH_ELSR_EL2 = 0xe65d, // 11 100 1100 1011 101 +} arm64_sysreg; + +typedef enum arm64_msr_reg { + //> System registers for MSR + ARM64_SYSREG_DBGDTRTX_EL0 = 0x9828, // 10 011 0000 0101 000 + ARM64_SYSREG_OSLAR_EL1 = 0x8084, // 10 000 0001 0000 100 + ARM64_SYSREG_PMSWINC_EL0 = 0xdce4, // 11 011 1001 1100 100 + + // Trace Registers + ARM64_SYSREG_TRCOSLAR = 0x8884, // 10 001 0001 0000 100 + ARM64_SYSREG_TRCLAR = 0x8be6, // 10 001 0111 1100 110 + + // GICv3 registers + ARM64_SYSREG_ICC_EOIR1_EL1 = 0xc661, // 11 000 1100 1100 001 + ARM64_SYSREG_ICC_EOIR0_EL1 = 0xc641, // 11 000 1100 1000 001 + ARM64_SYSREG_ICC_DIR_EL1 = 0xc659, // 11 000 1100 1011 001 + ARM64_SYSREG_ICC_SGI1R_EL1 = 0xc65d, // 11 000 1100 1011 101 + ARM64_SYSREG_ICC_ASGI1R_EL1 = 0xc65e, // 11 000 1100 1011 110 + ARM64_SYSREG_ICC_SGI0R_EL1 = 0xc65f, // 11 000 1100 1011 111 +} arm64_msr_reg; + +//> System PState Field (MSR instruction) +typedef enum arm64_pstate { + ARM64_PSTATE_INVALID = 0, + ARM64_PSTATE_SPSEL = 0x05, + ARM64_PSTATE_DAIFSET = 0x1e, + ARM64_PSTATE_DAIFCLR = 0x1f +} arm64_pstate; + +//> Vector arrangement specifier (for FloatingPoint/Advanced SIMD insn) +typedef enum arm64_vas { + ARM64_VAS_INVALID = 0, + ARM64_VAS_8B, + ARM64_VAS_16B, + ARM64_VAS_4H, + ARM64_VAS_8H, + ARM64_VAS_2S, + ARM64_VAS_4S, + ARM64_VAS_1D, + ARM64_VAS_2D, + ARM64_VAS_1Q, +} arm64_vas; + +//> Vector element size specifier +typedef enum arm64_vess { + ARM64_VESS_INVALID = 0, + ARM64_VESS_B, + ARM64_VESS_H, + ARM64_VESS_S, + ARM64_VESS_D, +} arm64_vess; + +//> Memory barrier operands +typedef enum arm64_barrier_op { + ARM64_BARRIER_INVALID = 0, + ARM64_BARRIER_OSHLD = 0x1, + ARM64_BARRIER_OSHST = 0x2, + ARM64_BARRIER_OSH = 0x3, + ARM64_BARRIER_NSHLD = 0x5, + ARM64_BARRIER_NSHST = 0x6, + ARM64_BARRIER_NSH = 0x7, + ARM64_BARRIER_ISHLD = 0x9, + ARM64_BARRIER_ISHST = 0xa, + ARM64_BARRIER_ISH = 0xb, + ARM64_BARRIER_LD = 0xd, + ARM64_BARRIER_ST = 0xe, + ARM64_BARRIER_SY = 0xf +} arm64_barrier_op; + +//> Operand type for instruction's operands +typedef enum arm64_op_type { + ARM64_OP_INVALID = 0, // = CS_OP_INVALID (Uninitialized). + ARM64_OP_REG, // = CS_OP_REG (Register operand). + ARM64_OP_IMM, // = CS_OP_IMM (Immediate operand). + ARM64_OP_MEM, // = CS_OP_MEM (Memory operand). + ARM64_OP_FP, // = CS_OP_FP (Floating-Point operand). + ARM64_OP_CIMM = 64, // C-Immediate + ARM64_OP_REG_MRS, // MRS register operand. + ARM64_OP_REG_MSR, // MSR register operand. + ARM64_OP_PSTATE, // PState operand. + ARM64_OP_SYS, // SYS operand for IC/DC/AT/TLBI instructions. + ARM64_OP_PREFETCH, // Prefetch operand (PRFM). + ARM64_OP_BARRIER, // Memory barrier operand (ISB/DMB/DSB instructions). +} arm64_op_type; + +//> TLBI operations +typedef enum arm64_tlbi_op { + ARM64_TLBI_INVALID = 0, + ARM64_TLBI_VMALLE1IS, + ARM64_TLBI_VAE1IS, + ARM64_TLBI_ASIDE1IS, + ARM64_TLBI_VAAE1IS, + ARM64_TLBI_VALE1IS, + ARM64_TLBI_VAALE1IS, + ARM64_TLBI_ALLE2IS, + ARM64_TLBI_VAE2IS, + ARM64_TLBI_ALLE1IS, + ARM64_TLBI_VALE2IS, + ARM64_TLBI_VMALLS12E1IS, + ARM64_TLBI_ALLE3IS, + ARM64_TLBI_VAE3IS, + ARM64_TLBI_VALE3IS, + ARM64_TLBI_IPAS2E1IS, + ARM64_TLBI_IPAS2LE1IS, + ARM64_TLBI_IPAS2E1, + ARM64_TLBI_IPAS2LE1, + ARM64_TLBI_VMALLE1, + ARM64_TLBI_VAE1, + ARM64_TLBI_ASIDE1, + ARM64_TLBI_VAAE1, + ARM64_TLBI_VALE1, + ARM64_TLBI_VAALE1, + ARM64_TLBI_ALLE2, + ARM64_TLBI_VAE2, + ARM64_TLBI_ALLE1, + ARM64_TLBI_VALE2, + ARM64_TLBI_VMALLS12E1, + ARM64_TLBI_ALLE3, + ARM64_TLBI_VAE3, + ARM64_TLBI_VALE3, +} arm64_tlbi_op; + +//> AT operations +typedef enum arm64_at_op { + ARM64_AT_S1E1R, + ARM64_AT_S1E1W, + ARM64_AT_S1E0R, + ARM64_AT_S1E0W, + ARM64_AT_S1E2R, + ARM64_AT_S1E2W, + ARM64_AT_S12E1R, + ARM64_AT_S12E1W, + ARM64_AT_S12E0R, + ARM64_AT_S12E0W, + ARM64_AT_S1E3R, + ARM64_AT_S1E3W, +} arm64_at_op; + +//> DC operations +typedef enum arm64_dc_op { + ARM64_DC_INVALID = 0, + ARM64_DC_ZVA, + ARM64_DC_IVAC, + ARM64_DC_ISW, + ARM64_DC_CVAC, + ARM64_DC_CSW, + ARM64_DC_CVAU, + ARM64_DC_CIVAC, + ARM64_DC_CISW, +} arm64_dc_op; + +//> IC operations +typedef enum arm64_ic_op { + ARM64_IC_INVALID = 0, + ARM64_IC_IALLUIS, + ARM64_IC_IALLU, + ARM64_IC_IVAU, +} arm64_ic_op; + +//> Prefetch operations (PRFM) +typedef enum arm64_prefetch_op { + ARM64_PRFM_INVALID = 0, + ARM64_PRFM_PLDL1KEEP = 0x00 + 1, + ARM64_PRFM_PLDL1STRM = 0x01 + 1, + ARM64_PRFM_PLDL2KEEP = 0x02 + 1, + ARM64_PRFM_PLDL2STRM = 0x03 + 1, + ARM64_PRFM_PLDL3KEEP = 0x04 + 1, + ARM64_PRFM_PLDL3STRM = 0x05 + 1, + ARM64_PRFM_PLIL1KEEP = 0x08 + 1, + ARM64_PRFM_PLIL1STRM = 0x09 + 1, + ARM64_PRFM_PLIL2KEEP = 0x0a + 1, + ARM64_PRFM_PLIL2STRM = 0x0b + 1, + ARM64_PRFM_PLIL3KEEP = 0x0c + 1, + ARM64_PRFM_PLIL3STRM = 0x0d + 1, + ARM64_PRFM_PSTL1KEEP = 0x10 + 1, + ARM64_PRFM_PSTL1STRM = 0x11 + 1, + ARM64_PRFM_PSTL2KEEP = 0x12 + 1, + ARM64_PRFM_PSTL2STRM = 0x13 + 1, + ARM64_PRFM_PSTL3KEEP = 0x14 + 1, + ARM64_PRFM_PSTL3STRM = 0x15 + 1, +} arm64_prefetch_op; + +// Instruction's operand referring to memory +// This is associated with ARM64_OP_MEM operand type above +typedef struct arm64_op_mem { + unsigned int base; // base register + unsigned int index; // index register + int32_t disp; // displacement/offset value +} arm64_op_mem; + +// Instruction operand +typedef struct cs_arm64_op { + int vector_index; // Vector Index for some vector operands (or -1 if irrelevant) + arm64_vas vas; // Vector Arrangement Specifier + arm64_vess vess; // Vector Element Size Specifier + struct { + arm64_shifter type; // shifter type of this operand + unsigned int value; // shifter value of this operand + } shift; + arm64_extender ext; // extender type of this operand + arm64_op_type type; // operand type + union { + unsigned int reg; // register value for REG operand + int64_t imm; // immediate value, or index for C-IMM or IMM operand + double fp; // floating point value for FP operand + arm64_op_mem mem; // base/index/scale/disp value for MEM operand + arm64_pstate pstate; // PState field of MSR instruction. + unsigned int sys; // IC/DC/AT/TLBI operation (see arm64_ic_op, arm64_dc_op, arm64_at_op, arm64_tlbi_op) + arm64_prefetch_op prefetch; // PRFM operation. + arm64_barrier_op barrier; // Memory barrier operation (ISB/DMB/DSB instructions). + }; +} cs_arm64_op; + +// Instruction structure +typedef struct cs_arm64 { + arm64_cc cc; // conditional code for this insn + bool update_flags; // does this insn update flags? + bool writeback; // does this insn request writeback? 'True' means 'yes' + + // Number of operands of this instruction, + // or 0 when instruction has no operand. + uint8_t op_count; + + cs_arm64_op operands[8]; // operands for this instruction. +} cs_arm64; + +//> ARM64 registers +typedef enum arm64_reg { + ARM64_REG_INVALID = 0, + + ARM64_REG_X29, + ARM64_REG_X30, + ARM64_REG_NZCV, + ARM64_REG_SP, + ARM64_REG_WSP, + ARM64_REG_WZR, + ARM64_REG_XZR, + ARM64_REG_B0, + ARM64_REG_B1, + ARM64_REG_B2, + ARM64_REG_B3, + ARM64_REG_B4, + ARM64_REG_B5, + ARM64_REG_B6, + ARM64_REG_B7, + ARM64_REG_B8, + ARM64_REG_B9, + ARM64_REG_B10, + ARM64_REG_B11, + ARM64_REG_B12, + ARM64_REG_B13, + ARM64_REG_B14, + ARM64_REG_B15, + ARM64_REG_B16, + ARM64_REG_B17, + ARM64_REG_B18, + ARM64_REG_B19, + ARM64_REG_B20, + ARM64_REG_B21, + ARM64_REG_B22, + ARM64_REG_B23, + ARM64_REG_B24, + ARM64_REG_B25, + ARM64_REG_B26, + ARM64_REG_B27, + ARM64_REG_B28, + ARM64_REG_B29, + ARM64_REG_B30, + ARM64_REG_B31, + ARM64_REG_D0, + ARM64_REG_D1, + ARM64_REG_D2, + ARM64_REG_D3, + ARM64_REG_D4, + ARM64_REG_D5, + ARM64_REG_D6, + ARM64_REG_D7, + ARM64_REG_D8, + ARM64_REG_D9, + ARM64_REG_D10, + ARM64_REG_D11, + ARM64_REG_D12, + ARM64_REG_D13, + ARM64_REG_D14, + ARM64_REG_D15, + ARM64_REG_D16, + ARM64_REG_D17, + ARM64_REG_D18, + ARM64_REG_D19, + ARM64_REG_D20, + ARM64_REG_D21, + ARM64_REG_D22, + ARM64_REG_D23, + ARM64_REG_D24, + ARM64_REG_D25, + ARM64_REG_D26, + ARM64_REG_D27, + ARM64_REG_D28, + ARM64_REG_D29, + ARM64_REG_D30, + ARM64_REG_D31, + ARM64_REG_H0, + ARM64_REG_H1, + ARM64_REG_H2, + ARM64_REG_H3, + ARM64_REG_H4, + ARM64_REG_H5, + ARM64_REG_H6, + ARM64_REG_H7, + ARM64_REG_H8, + ARM64_REG_H9, + ARM64_REG_H10, + ARM64_REG_H11, + ARM64_REG_H12, + ARM64_REG_H13, + ARM64_REG_H14, + ARM64_REG_H15, + ARM64_REG_H16, + ARM64_REG_H17, + ARM64_REG_H18, + ARM64_REG_H19, + ARM64_REG_H20, + ARM64_REG_H21, + ARM64_REG_H22, + ARM64_REG_H23, + ARM64_REG_H24, + ARM64_REG_H25, + ARM64_REG_H26, + ARM64_REG_H27, + ARM64_REG_H28, + ARM64_REG_H29, + ARM64_REG_H30, + ARM64_REG_H31, + ARM64_REG_Q0, + ARM64_REG_Q1, + ARM64_REG_Q2, + ARM64_REG_Q3, + ARM64_REG_Q4, + ARM64_REG_Q5, + ARM64_REG_Q6, + ARM64_REG_Q7, + ARM64_REG_Q8, + ARM64_REG_Q9, + ARM64_REG_Q10, + ARM64_REG_Q11, + ARM64_REG_Q12, + ARM64_REG_Q13, + ARM64_REG_Q14, + ARM64_REG_Q15, + ARM64_REG_Q16, + ARM64_REG_Q17, + ARM64_REG_Q18, + ARM64_REG_Q19, + ARM64_REG_Q20, + ARM64_REG_Q21, + ARM64_REG_Q22, + ARM64_REG_Q23, + ARM64_REG_Q24, + ARM64_REG_Q25, + ARM64_REG_Q26, + ARM64_REG_Q27, + ARM64_REG_Q28, + ARM64_REG_Q29, + ARM64_REG_Q30, + ARM64_REG_Q31, + ARM64_REG_S0, + ARM64_REG_S1, + ARM64_REG_S2, + ARM64_REG_S3, + ARM64_REG_S4, + ARM64_REG_S5, + ARM64_REG_S6, + ARM64_REG_S7, + ARM64_REG_S8, + ARM64_REG_S9, + ARM64_REG_S10, + ARM64_REG_S11, + ARM64_REG_S12, + ARM64_REG_S13, + ARM64_REG_S14, + ARM64_REG_S15, + ARM64_REG_S16, + ARM64_REG_S17, + ARM64_REG_S18, + ARM64_REG_S19, + ARM64_REG_S20, + ARM64_REG_S21, + ARM64_REG_S22, + ARM64_REG_S23, + ARM64_REG_S24, + ARM64_REG_S25, + ARM64_REG_S26, + ARM64_REG_S27, + ARM64_REG_S28, + ARM64_REG_S29, + ARM64_REG_S30, + ARM64_REG_S31, + ARM64_REG_W0, + ARM64_REG_W1, + ARM64_REG_W2, + ARM64_REG_W3, + ARM64_REG_W4, + ARM64_REG_W5, + ARM64_REG_W6, + ARM64_REG_W7, + ARM64_REG_W8, + ARM64_REG_W9, + ARM64_REG_W10, + ARM64_REG_W11, + ARM64_REG_W12, + ARM64_REG_W13, + ARM64_REG_W14, + ARM64_REG_W15, + ARM64_REG_W16, + ARM64_REG_W17, + ARM64_REG_W18, + ARM64_REG_W19, + ARM64_REG_W20, + ARM64_REG_W21, + ARM64_REG_W22, + ARM64_REG_W23, + ARM64_REG_W24, + ARM64_REG_W25, + ARM64_REG_W26, + ARM64_REG_W27, + ARM64_REG_W28, + ARM64_REG_W29, + ARM64_REG_W30, + ARM64_REG_X0, + ARM64_REG_X1, + ARM64_REG_X2, + ARM64_REG_X3, + ARM64_REG_X4, + ARM64_REG_X5, + ARM64_REG_X6, + ARM64_REG_X7, + ARM64_REG_X8, + ARM64_REG_X9, + ARM64_REG_X10, + ARM64_REG_X11, + ARM64_REG_X12, + ARM64_REG_X13, + ARM64_REG_X14, + ARM64_REG_X15, + ARM64_REG_X16, + ARM64_REG_X17, + ARM64_REG_X18, + ARM64_REG_X19, + ARM64_REG_X20, + ARM64_REG_X21, + ARM64_REG_X22, + ARM64_REG_X23, + ARM64_REG_X24, + ARM64_REG_X25, + ARM64_REG_X26, + ARM64_REG_X27, + ARM64_REG_X28, + + ARM64_REG_V0, + ARM64_REG_V1, + ARM64_REG_V2, + ARM64_REG_V3, + ARM64_REG_V4, + ARM64_REG_V5, + ARM64_REG_V6, + ARM64_REG_V7, + ARM64_REG_V8, + ARM64_REG_V9, + ARM64_REG_V10, + ARM64_REG_V11, + ARM64_REG_V12, + ARM64_REG_V13, + ARM64_REG_V14, + ARM64_REG_V15, + ARM64_REG_V16, + ARM64_REG_V17, + ARM64_REG_V18, + ARM64_REG_V19, + ARM64_REG_V20, + ARM64_REG_V21, + ARM64_REG_V22, + ARM64_REG_V23, + ARM64_REG_V24, + ARM64_REG_V25, + ARM64_REG_V26, + ARM64_REG_V27, + ARM64_REG_V28, + ARM64_REG_V29, + ARM64_REG_V30, + ARM64_REG_V31, + + ARM64_REG_ENDING, // <-- mark the end of the list of registers + + //> alias registers + + ARM64_REG_IP0 = ARM64_REG_X16, + ARM64_REG_IP1 = ARM64_REG_X17, + ARM64_REG_FP = ARM64_REG_X29, + ARM64_REG_LR = ARM64_REG_X30, +} arm64_reg; + +//> ARM64 instruction +typedef enum arm64_insn { + ARM64_INS_INVALID = 0, + + ARM64_INS_ABS, + ARM64_INS_ADC, + ARM64_INS_ADDHN, + ARM64_INS_ADDHN2, + ARM64_INS_ADDP, + ARM64_INS_ADD, + ARM64_INS_ADDV, + ARM64_INS_ADR, + ARM64_INS_ADRP, + ARM64_INS_AESD, + ARM64_INS_AESE, + ARM64_INS_AESIMC, + ARM64_INS_AESMC, + ARM64_INS_AND, + ARM64_INS_ASR, + ARM64_INS_B, + ARM64_INS_BFM, + ARM64_INS_BIC, + ARM64_INS_BIF, + ARM64_INS_BIT, + ARM64_INS_BL, + ARM64_INS_BLR, + ARM64_INS_BR, + ARM64_INS_BRK, + ARM64_INS_BSL, + ARM64_INS_CBNZ, + ARM64_INS_CBZ, + ARM64_INS_CCMN, + ARM64_INS_CCMP, + ARM64_INS_CLREX, + ARM64_INS_CLS, + ARM64_INS_CLZ, + ARM64_INS_CMEQ, + ARM64_INS_CMGE, + ARM64_INS_CMGT, + ARM64_INS_CMHI, + ARM64_INS_CMHS, + ARM64_INS_CMLE, + ARM64_INS_CMLT, + ARM64_INS_CMTST, + ARM64_INS_CNT, + ARM64_INS_MOV, + ARM64_INS_CRC32B, + ARM64_INS_CRC32CB, + ARM64_INS_CRC32CH, + ARM64_INS_CRC32CW, + ARM64_INS_CRC32CX, + ARM64_INS_CRC32H, + ARM64_INS_CRC32W, + ARM64_INS_CRC32X, + ARM64_INS_CSEL, + ARM64_INS_CSINC, + ARM64_INS_CSINV, + ARM64_INS_CSNEG, + ARM64_INS_DCPS1, + ARM64_INS_DCPS2, + ARM64_INS_DCPS3, + ARM64_INS_DMB, + ARM64_INS_DRPS, + ARM64_INS_DSB, + ARM64_INS_DUP, + ARM64_INS_EON, + ARM64_INS_EOR, + ARM64_INS_ERET, + ARM64_INS_EXTR, + ARM64_INS_EXT, + ARM64_INS_FABD, + ARM64_INS_FABS, + ARM64_INS_FACGE, + ARM64_INS_FACGT, + ARM64_INS_FADD, + ARM64_INS_FADDP, + ARM64_INS_FCCMP, + ARM64_INS_FCCMPE, + ARM64_INS_FCMEQ, + ARM64_INS_FCMGE, + ARM64_INS_FCMGT, + ARM64_INS_FCMLE, + ARM64_INS_FCMLT, + ARM64_INS_FCMP, + ARM64_INS_FCMPE, + ARM64_INS_FCSEL, + ARM64_INS_FCVTAS, + ARM64_INS_FCVTAU, + ARM64_INS_FCVT, + ARM64_INS_FCVTL, + ARM64_INS_FCVTL2, + ARM64_INS_FCVTMS, + ARM64_INS_FCVTMU, + ARM64_INS_FCVTNS, + ARM64_INS_FCVTNU, + ARM64_INS_FCVTN, + ARM64_INS_FCVTN2, + ARM64_INS_FCVTPS, + ARM64_INS_FCVTPU, + ARM64_INS_FCVTXN, + ARM64_INS_FCVTXN2, + ARM64_INS_FCVTZS, + ARM64_INS_FCVTZU, + ARM64_INS_FDIV, + ARM64_INS_FMADD, + ARM64_INS_FMAX, + ARM64_INS_FMAXNM, + ARM64_INS_FMAXNMP, + ARM64_INS_FMAXNMV, + ARM64_INS_FMAXP, + ARM64_INS_FMAXV, + ARM64_INS_FMIN, + ARM64_INS_FMINNM, + ARM64_INS_FMINNMP, + ARM64_INS_FMINNMV, + ARM64_INS_FMINP, + ARM64_INS_FMINV, + ARM64_INS_FMLA, + ARM64_INS_FMLS, + ARM64_INS_FMOV, + ARM64_INS_FMSUB, + ARM64_INS_FMUL, + ARM64_INS_FMULX, + ARM64_INS_FNEG, + ARM64_INS_FNMADD, + ARM64_INS_FNMSUB, + ARM64_INS_FNMUL, + ARM64_INS_FRECPE, + ARM64_INS_FRECPS, + ARM64_INS_FRECPX, + ARM64_INS_FRINTA, + ARM64_INS_FRINTI, + ARM64_INS_FRINTM, + ARM64_INS_FRINTN, + ARM64_INS_FRINTP, + ARM64_INS_FRINTX, + ARM64_INS_FRINTZ, + ARM64_INS_FRSQRTE, + ARM64_INS_FRSQRTS, + ARM64_INS_FSQRT, + ARM64_INS_FSUB, + ARM64_INS_HINT, + ARM64_INS_HLT, + ARM64_INS_HVC, + ARM64_INS_INS, + + ARM64_INS_ISB, + ARM64_INS_LD1, + ARM64_INS_LD1R, + ARM64_INS_LD2R, + ARM64_INS_LD2, + ARM64_INS_LD3R, + ARM64_INS_LD3, + ARM64_INS_LD4, + ARM64_INS_LD4R, + + ARM64_INS_LDARB, + ARM64_INS_LDARH, + ARM64_INS_LDAR, + ARM64_INS_LDAXP, + ARM64_INS_LDAXRB, + ARM64_INS_LDAXRH, + ARM64_INS_LDAXR, + ARM64_INS_LDNP, + ARM64_INS_LDP, + ARM64_INS_LDPSW, + ARM64_INS_LDRB, + ARM64_INS_LDR, + ARM64_INS_LDRH, + ARM64_INS_LDRSB, + ARM64_INS_LDRSH, + ARM64_INS_LDRSW, + ARM64_INS_LDTRB, + ARM64_INS_LDTRH, + ARM64_INS_LDTRSB, + + ARM64_INS_LDTRSH, + ARM64_INS_LDTRSW, + ARM64_INS_LDTR, + ARM64_INS_LDURB, + ARM64_INS_LDUR, + ARM64_INS_LDURH, + ARM64_INS_LDURSB, + ARM64_INS_LDURSH, + ARM64_INS_LDURSW, + ARM64_INS_LDXP, + ARM64_INS_LDXRB, + ARM64_INS_LDXRH, + ARM64_INS_LDXR, + ARM64_INS_LSL, + ARM64_INS_LSR, + ARM64_INS_MADD, + ARM64_INS_MLA, + ARM64_INS_MLS, + ARM64_INS_MOVI, + ARM64_INS_MOVK, + ARM64_INS_MOVN, + ARM64_INS_MOVZ, + ARM64_INS_MRS, + ARM64_INS_MSR, + ARM64_INS_MSUB, + ARM64_INS_MUL, + ARM64_INS_MVNI, + ARM64_INS_NEG, + ARM64_INS_NOT, + ARM64_INS_ORN, + ARM64_INS_ORR, + ARM64_INS_PMULL2, + ARM64_INS_PMULL, + ARM64_INS_PMUL, + ARM64_INS_PRFM, + ARM64_INS_PRFUM, + ARM64_INS_RADDHN, + ARM64_INS_RADDHN2, + ARM64_INS_RBIT, + ARM64_INS_RET, + ARM64_INS_REV16, + ARM64_INS_REV32, + ARM64_INS_REV64, + ARM64_INS_REV, + ARM64_INS_ROR, + ARM64_INS_RSHRN2, + ARM64_INS_RSHRN, + ARM64_INS_RSUBHN, + ARM64_INS_RSUBHN2, + ARM64_INS_SABAL2, + ARM64_INS_SABAL, + + ARM64_INS_SABA, + ARM64_INS_SABDL2, + ARM64_INS_SABDL, + ARM64_INS_SABD, + ARM64_INS_SADALP, + ARM64_INS_SADDLP, + ARM64_INS_SADDLV, + ARM64_INS_SADDL2, + ARM64_INS_SADDL, + ARM64_INS_SADDW2, + ARM64_INS_SADDW, + ARM64_INS_SBC, + ARM64_INS_SBFM, + ARM64_INS_SCVTF, + ARM64_INS_SDIV, + ARM64_INS_SHA1C, + ARM64_INS_SHA1H, + ARM64_INS_SHA1M, + ARM64_INS_SHA1P, + ARM64_INS_SHA1SU0, + ARM64_INS_SHA1SU1, + ARM64_INS_SHA256H2, + ARM64_INS_SHA256H, + ARM64_INS_SHA256SU0, + ARM64_INS_SHA256SU1, + ARM64_INS_SHADD, + ARM64_INS_SHLL2, + ARM64_INS_SHLL, + ARM64_INS_SHL, + ARM64_INS_SHRN2, + ARM64_INS_SHRN, + ARM64_INS_SHSUB, + ARM64_INS_SLI, + ARM64_INS_SMADDL, + ARM64_INS_SMAXP, + ARM64_INS_SMAXV, + ARM64_INS_SMAX, + ARM64_INS_SMC, + ARM64_INS_SMINP, + ARM64_INS_SMINV, + ARM64_INS_SMIN, + ARM64_INS_SMLAL2, + ARM64_INS_SMLAL, + ARM64_INS_SMLSL2, + ARM64_INS_SMLSL, + ARM64_INS_SMOV, + ARM64_INS_SMSUBL, + ARM64_INS_SMULH, + ARM64_INS_SMULL2, + ARM64_INS_SMULL, + ARM64_INS_SQABS, + ARM64_INS_SQADD, + ARM64_INS_SQDMLAL, + ARM64_INS_SQDMLAL2, + ARM64_INS_SQDMLSL, + ARM64_INS_SQDMLSL2, + ARM64_INS_SQDMULH, + ARM64_INS_SQDMULL, + ARM64_INS_SQDMULL2, + ARM64_INS_SQNEG, + ARM64_INS_SQRDMULH, + ARM64_INS_SQRSHL, + ARM64_INS_SQRSHRN, + ARM64_INS_SQRSHRN2, + ARM64_INS_SQRSHRUN, + ARM64_INS_SQRSHRUN2, + ARM64_INS_SQSHLU, + ARM64_INS_SQSHL, + ARM64_INS_SQSHRN, + ARM64_INS_SQSHRN2, + ARM64_INS_SQSHRUN, + ARM64_INS_SQSHRUN2, + ARM64_INS_SQSUB, + ARM64_INS_SQXTN2, + ARM64_INS_SQXTN, + ARM64_INS_SQXTUN2, + ARM64_INS_SQXTUN, + ARM64_INS_SRHADD, + ARM64_INS_SRI, + ARM64_INS_SRSHL, + ARM64_INS_SRSHR, + ARM64_INS_SRSRA, + ARM64_INS_SSHLL2, + ARM64_INS_SSHLL, + ARM64_INS_SSHL, + ARM64_INS_SSHR, + ARM64_INS_SSRA, + ARM64_INS_SSUBL2, + ARM64_INS_SSUBL, + ARM64_INS_SSUBW2, + ARM64_INS_SSUBW, + ARM64_INS_ST1, + ARM64_INS_ST2, + ARM64_INS_ST3, + ARM64_INS_ST4, + ARM64_INS_STLRB, + ARM64_INS_STLRH, + ARM64_INS_STLR, + ARM64_INS_STLXP, + ARM64_INS_STLXRB, + ARM64_INS_STLXRH, + ARM64_INS_STLXR, + ARM64_INS_STNP, + ARM64_INS_STP, + ARM64_INS_STRB, + ARM64_INS_STR, + ARM64_INS_STRH, + ARM64_INS_STTRB, + ARM64_INS_STTRH, + ARM64_INS_STTR, + ARM64_INS_STURB, + ARM64_INS_STUR, + ARM64_INS_STURH, + ARM64_INS_STXP, + ARM64_INS_STXRB, + ARM64_INS_STXRH, + ARM64_INS_STXR, + ARM64_INS_SUBHN, + ARM64_INS_SUBHN2, + ARM64_INS_SUB, + ARM64_INS_SUQADD, + ARM64_INS_SVC, + ARM64_INS_SYSL, + ARM64_INS_SYS, + ARM64_INS_TBL, + ARM64_INS_TBNZ, + ARM64_INS_TBX, + ARM64_INS_TBZ, + ARM64_INS_TRN1, + ARM64_INS_TRN2, + ARM64_INS_UABAL2, + ARM64_INS_UABAL, + ARM64_INS_UABA, + ARM64_INS_UABDL2, + ARM64_INS_UABDL, + ARM64_INS_UABD, + ARM64_INS_UADALP, + ARM64_INS_UADDLP, + ARM64_INS_UADDLV, + ARM64_INS_UADDL2, + ARM64_INS_UADDL, + ARM64_INS_UADDW2, + ARM64_INS_UADDW, + ARM64_INS_UBFM, + ARM64_INS_UCVTF, + ARM64_INS_UDIV, + ARM64_INS_UHADD, + ARM64_INS_UHSUB, + ARM64_INS_UMADDL, + ARM64_INS_UMAXP, + ARM64_INS_UMAXV, + ARM64_INS_UMAX, + ARM64_INS_UMINP, + ARM64_INS_UMINV, + ARM64_INS_UMIN, + ARM64_INS_UMLAL2, + ARM64_INS_UMLAL, + ARM64_INS_UMLSL2, + ARM64_INS_UMLSL, + ARM64_INS_UMOV, + ARM64_INS_UMSUBL, + ARM64_INS_UMULH, + ARM64_INS_UMULL2, + ARM64_INS_UMULL, + ARM64_INS_UQADD, + ARM64_INS_UQRSHL, + ARM64_INS_UQRSHRN, + ARM64_INS_UQRSHRN2, + ARM64_INS_UQSHL, + ARM64_INS_UQSHRN, + ARM64_INS_UQSHRN2, + ARM64_INS_UQSUB, + ARM64_INS_UQXTN2, + ARM64_INS_UQXTN, + ARM64_INS_URECPE, + ARM64_INS_URHADD, + ARM64_INS_URSHL, + ARM64_INS_URSHR, + ARM64_INS_URSQRTE, + ARM64_INS_URSRA, + ARM64_INS_USHLL2, + ARM64_INS_USHLL, + ARM64_INS_USHL, + ARM64_INS_USHR, + ARM64_INS_USQADD, + ARM64_INS_USRA, + ARM64_INS_USUBL2, + ARM64_INS_USUBL, + ARM64_INS_USUBW2, + ARM64_INS_USUBW, + ARM64_INS_UZP1, + ARM64_INS_UZP2, + ARM64_INS_XTN2, + ARM64_INS_XTN, + ARM64_INS_ZIP1, + ARM64_INS_ZIP2, + + // alias insn + ARM64_INS_MNEG, + ARM64_INS_UMNEGL, + ARM64_INS_SMNEGL, + ARM64_INS_NOP, + ARM64_INS_YIELD, + ARM64_INS_WFE, + ARM64_INS_WFI, + ARM64_INS_SEV, + ARM64_INS_SEVL, + ARM64_INS_NGC, + ARM64_INS_SBFIZ, + ARM64_INS_UBFIZ, + ARM64_INS_SBFX, + ARM64_INS_UBFX, + ARM64_INS_BFI, + ARM64_INS_BFXIL, + ARM64_INS_CMN, + ARM64_INS_MVN, + ARM64_INS_TST, + ARM64_INS_CSET, + ARM64_INS_CINC, + ARM64_INS_CSETM, + ARM64_INS_CINV, + ARM64_INS_CNEG, + ARM64_INS_SXTB, + ARM64_INS_SXTH, + ARM64_INS_SXTW, + ARM64_INS_CMP, + ARM64_INS_UXTB, + ARM64_INS_UXTH, + ARM64_INS_UXTW, + ARM64_INS_IC, + ARM64_INS_DC, + ARM64_INS_AT, + ARM64_INS_TLBI, + + ARM64_INS_ENDING, // <-- mark the end of the list of insn +} arm64_insn; + +//> Group of ARM64 instructions +typedef enum arm64_insn_group { + ARM64_GRP_INVALID = 0, // = CS_GRP_INVALID + + //> Generic groups + // all jump instructions (conditional+direct+indirect jumps) + ARM64_GRP_JUMP, // = CS_GRP_JUMP + + //> Architecture-specific groups + ARM64_GRP_CRYPTO = 128, + ARM64_GRP_FPARMV8, + ARM64_GRP_NEON, + ARM64_GRP_CRC, + + ARM64_GRP_ENDING, // <-- mark the end of the list of groups +} arm64_insn_group; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/capstone.h b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/capstone.h new file mode 100755 index 0000000..172c7b8 --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/capstone.h @@ -0,0 +1,675 @@ +#ifndef CAPSTONE_ENGINE_H +#define CAPSTONE_ENGINE_H + +/* Capstone Disassembly Engine */ +/* By Nguyen Anh Quynh , 2013-2016 */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined(_MSC_VER) || !defined(_KERNEL_MODE) +#include +#endif + +#include + +#if defined(CAPSTONE_HAS_OSXKERNEL) +#include +#else +#include +#include +#endif + +#include "platform.h" + +#ifdef _MSC_VER +#pragma warning(disable:4201) +#pragma warning(disable:4100) +#define CAPSTONE_API __cdecl +#ifdef CAPSTONE_SHARED +#define CAPSTONE_EXPORT __declspec(dllexport) +#else // defined(CAPSTONE_STATIC) +#define CAPSTONE_EXPORT +#endif +#else +#define CAPSTONE_API +#if defined(__GNUC__) && !defined(CAPSTONE_STATIC) +#define CAPSTONE_EXPORT __attribute__((visibility("default"))) +#else // defined(CAPSTONE_STATIC) +#define CAPSTONE_EXPORT +#endif +#endif + +#ifdef __GNUC__ +#define CAPSTONE_DEPRECATED __attribute__((deprecated)) +#elif defined(_MSC_VER) +#define CAPSTONE_DEPRECATED __declspec(deprecated) +#else +#pragma message("WARNING: You need to implement CAPSTONE_DEPRECATED for this compiler") +#define CAPSTONE_DEPRECATED +#endif + +// Capstone API version +#define CS_API_MAJOR 3 +#define CS_API_MINOR 0 + +// Capstone package version +#define CS_VERSION_MAJOR CS_API_MAJOR +#define CS_VERSION_MINOR CS_API_MINOR +#define CS_VERSION_EXTRA 5 + +// Macro to create combined version which can be compared to +// result of cs_version() API. +#define CS_MAKE_VERSION(major, minor) ((major << 8) + minor) + +// Handle using with all API +typedef size_t csh; + +// Architecture type +typedef enum cs_arch { + CS_ARCH_ARM = 0, // ARM architecture (including Thumb, Thumb-2) + CS_ARCH_ARM64, // ARM-64, also called AArch64 + CS_ARCH_MIPS, // Mips architecture + CS_ARCH_X86, // X86 architecture (including x86 & x86-64) + CS_ARCH_PPC, // PowerPC architecture + CS_ARCH_SPARC, // Sparc architecture + CS_ARCH_SYSZ, // SystemZ architecture + CS_ARCH_XCORE, // XCore architecture + CS_ARCH_MAX, + CS_ARCH_ALL = 0xFFFF, // All architectures - for cs_support() +} cs_arch; + +// Support value to verify diet mode of the engine. +// If cs_support(CS_SUPPORT_DIET) return True, the engine was compiled +// in diet mode. +#define CS_SUPPORT_DIET (CS_ARCH_ALL + 1) + +// Support value to verify X86 reduce mode of the engine. +// If cs_support(CS_SUPPORT_X86_REDUCE) return True, the engine was compiled +// in X86 reduce mode. +#define CS_SUPPORT_X86_REDUCE (CS_ARCH_ALL + 2) + +// Mode type +typedef enum cs_mode { + CS_MODE_LITTLE_ENDIAN = 0, // little-endian mode (default mode) + CS_MODE_ARM = 0, // 32-bit ARM + CS_MODE_16 = 1 << 1, // 16-bit mode (X86) + CS_MODE_32 = 1 << 2, // 32-bit mode (X86) + CS_MODE_64 = 1 << 3, // 64-bit mode (X86, PPC) + CS_MODE_THUMB = 1 << 4, // ARM's Thumb mode, including Thumb-2 + CS_MODE_MCLASS = 1 << 5, // ARM's Cortex-M series + CS_MODE_V8 = 1 << 6, // ARMv8 A32 encodings for ARM + CS_MODE_MICRO = 1 << 4, // MicroMips mode (MIPS) + CS_MODE_MIPS3 = 1 << 5, // Mips III ISA + CS_MODE_MIPS32R6 = 1 << 6, // Mips32r6 ISA + CS_MODE_MIPSGP64 = 1 << 7, // General Purpose Registers are 64-bit wide (MIPS) + CS_MODE_V9 = 1 << 4, // SparcV9 mode (Sparc) + CS_MODE_BIG_ENDIAN = 1 << 31, // big-endian mode + CS_MODE_MIPS32 = CS_MODE_32, // Mips32 ISA (Mips) + CS_MODE_MIPS64 = CS_MODE_64, // Mips64 ISA (Mips) +} cs_mode; + +typedef void* (CAPSTONE_API *cs_malloc_t)(size_t size); +typedef void* (CAPSTONE_API *cs_calloc_t)(size_t nmemb, size_t size); +typedef void* (CAPSTONE_API *cs_realloc_t)(void *ptr, size_t size); +typedef void (CAPSTONE_API *cs_free_t)(void *ptr); +typedef int (CAPSTONE_API *cs_vsnprintf_t)(char *str, size_t size, const char *format, va_list ap); + + +// User-defined dynamic memory related functions: malloc/calloc/realloc/free/vsnprintf() +// By default, Capstone uses system's malloc(), calloc(), realloc(), free() & vsnprintf(). +typedef struct cs_opt_mem { + cs_malloc_t malloc; + cs_calloc_t calloc; + cs_realloc_t realloc; + cs_free_t free; + cs_vsnprintf_t vsnprintf; +} cs_opt_mem; + +// Runtime option for the disassembled engine +typedef enum cs_opt_type { + CS_OPT_INVALID = 0, // No option specified + CS_OPT_SYNTAX, // Assembly output syntax + CS_OPT_DETAIL, // Break down instruction structure into details + CS_OPT_MODE, // Change engine's mode at run-time + CS_OPT_MEM, // User-defined dynamic memory related functions + CS_OPT_SKIPDATA, // Skip data when disassembling. Then engine is in SKIPDATA mode. + CS_OPT_SKIPDATA_SETUP, // Setup user-defined function for SKIPDATA option +} cs_opt_type; + +// Runtime option value (associated with option type above) +typedef enum cs_opt_value { + CS_OPT_OFF = 0, // Turn OFF an option - default option of CS_OPT_DETAIL, CS_OPT_SKIPDATA. + CS_OPT_ON = 3, // Turn ON an option (CS_OPT_DETAIL, CS_OPT_SKIPDATA). + CS_OPT_SYNTAX_DEFAULT = 0, // Default asm syntax (CS_OPT_SYNTAX). + CS_OPT_SYNTAX_INTEL, // X86 Intel asm syntax - default on X86 (CS_OPT_SYNTAX). + CS_OPT_SYNTAX_ATT, // X86 ATT asm syntax (CS_OPT_SYNTAX). + CS_OPT_SYNTAX_NOREGNAME, // Prints register name with only number (CS_OPT_SYNTAX) +} cs_opt_value; + +//> Common instruction operand types - to be consistent across all architectures. +typedef enum cs_op_type { + CS_OP_INVALID = 0, // uninitialized/invalid operand. + CS_OP_REG, // Register operand. + CS_OP_IMM, // Immediate operand. + CS_OP_MEM, // Memory operand. + CS_OP_FP, // Floating-Point operand. +} cs_op_type; + +//> Common instruction groups - to be consistent across all architectures. +typedef enum cs_group_type { + CS_GRP_INVALID = 0, // uninitialized/invalid group. + CS_GRP_JUMP, // all jump instructions (conditional+direct+indirect jumps) + CS_GRP_CALL, // all call instructions + CS_GRP_RET, // all return instructions + CS_GRP_INT, // all interrupt instructions (int+syscall) + CS_GRP_IRET, // all interrupt return instructions +} cs_group_type; + +/* + User-defined callback function for SKIPDATA option. + See tests/test_skipdata.c for sample code demonstrating this API. + + @code: the input buffer containing code to be disassembled. + This is the same buffer passed to cs_disasm(). + @code_size: size (in bytes) of the above @code buffer. + @offset: the position of the currently-examining byte in the input + buffer @code mentioned above. + @user_data: user-data passed to cs_option() via @user_data field in + cs_opt_skipdata struct below. + + @return: return number of bytes to skip, or 0 to immediately stop disassembling. +*/ +typedef size_t (CAPSTONE_API *cs_skipdata_cb_t)(const uint8_t *code, size_t code_size, size_t offset, void *user_data); + +// User-customized setup for SKIPDATA option +typedef struct cs_opt_skipdata { + // Capstone considers data to skip as special "instructions". + // User can specify the string for this instruction's "mnemonic" here. + // By default (if @mnemonic is NULL), Capstone use ".byte". + const char *mnemonic; + + // User-defined callback function to be called when Capstone hits data. + // If the returned value from this callback is positive (>0), Capstone + // will skip exactly that number of bytes & continue. Otherwise, if + // the callback returns 0, Capstone stops disassembling and returns + // immediately from cs_disasm() + // NOTE: if this callback pointer is NULL, Capstone would skip a number + // of bytes depending on architectures, as following: + // Arm: 2 bytes (Thumb mode) or 4 bytes. + // Arm64: 4 bytes. + // Mips: 4 bytes. + // PowerPC: 4 bytes. + // Sparc: 4 bytes. + // SystemZ: 2 bytes. + // X86: 1 bytes. + // XCore: 2 bytes. + cs_skipdata_cb_t callback; // default value is NULL + + // User-defined data to be passed to @callback function pointer. + void *user_data; +} cs_opt_skipdata; + + +#include "arm.h" +#include "arm64.h" +#include "mips.h" +#include "ppc.h" +#include "sparc.h" +#include "systemz.h" +#include "x86.h" +#include "xcore.h" + +// NOTE: All information in cs_detail is only available when CS_OPT_DETAIL = CS_OPT_ON +typedef struct cs_detail { + uint8_t regs_read[12]; // list of implicit registers read by this insn + uint8_t regs_read_count; // number of implicit registers read by this insn + + uint8_t regs_write[20]; // list of implicit registers modified by this insn + uint8_t regs_write_count; // number of implicit registers modified by this insn + + uint8_t groups[8]; // list of group this instruction belong to + uint8_t groups_count; // number of groups this insn belongs to + + // Architecture-specific instruction info + union { + cs_x86 x86; // X86 architecture, including 16-bit, 32-bit & 64-bit mode + cs_arm64 arm64; // ARM64 architecture (aka AArch64) + cs_arm arm; // ARM architecture (including Thumb/Thumb2) + cs_mips mips; // MIPS architecture + cs_ppc ppc; // PowerPC architecture + cs_sparc sparc; // Sparc architecture + cs_sysz sysz; // SystemZ architecture + cs_xcore xcore; // XCore architecture + }; +} cs_detail; + +// Detail information of disassembled instruction +typedef struct cs_insn { + // Instruction ID (basically a numeric ID for the instruction mnemonic) + // Find the instruction id in the '[ARCH]_insn' enum in the header file + // of corresponding architecture, such as 'arm_insn' in arm.h for ARM, + // 'x86_insn' in x86.h for X86, etc... + // This information is available even when CS_OPT_DETAIL = CS_OPT_OFF + // NOTE: in Skipdata mode, "data" instruction has 0 for this id field. + unsigned int id; + + // Address (EIP) of this instruction + // This information is available even when CS_OPT_DETAIL = CS_OPT_OFF + uint64_t address; + + // Size of this instruction + // This information is available even when CS_OPT_DETAIL = CS_OPT_OFF + uint16_t size; + // Machine bytes of this instruction, with number of bytes indicated by @size above + // This information is available even when CS_OPT_DETAIL = CS_OPT_OFF + uint8_t bytes[16]; + + // Ascii text of instruction mnemonic + // This information is available even when CS_OPT_DETAIL = CS_OPT_OFF + char mnemonic[32]; + + // Ascii text of instruction operands + // This information is available even when CS_OPT_DETAIL = CS_OPT_OFF + char op_str[160]; + + // Pointer to cs_detail. + // NOTE: detail pointer is only valid when both requirements below are met: + // (1) CS_OP_DETAIL = CS_OPT_ON + // (2) Engine is not in Skipdata mode (CS_OP_SKIPDATA option set to CS_OPT_ON) + // + // NOTE 2: when in Skipdata mode, or when detail mode is OFF, even if this pointer + // is not NULL, its content is still irrelevant. + cs_detail *detail; +} cs_insn; + + +// Calculate the offset of a disassembled instruction in its buffer, given its position +// in its array of disassembled insn +// NOTE: this macro works with position (>=1), not index +#define CS_INSN_OFFSET(insns, post) (insns[post - 1].address - insns[0].address) + + +// All type of errors encountered by Capstone API. +// These are values returned by cs_errno() +typedef enum cs_err { + CS_ERR_OK = 0, // No error: everything was fine + CS_ERR_MEM, // Out-Of-Memory error: cs_open(), cs_disasm(), cs_disasm_iter() + CS_ERR_ARCH, // Unsupported architecture: cs_open() + CS_ERR_HANDLE, // Invalid handle: cs_op_count(), cs_op_index() + CS_ERR_CSH, // Invalid csh argument: cs_close(), cs_errno(), cs_option() + CS_ERR_MODE, // Invalid/unsupported mode: cs_open() + CS_ERR_OPTION, // Invalid/unsupported option: cs_option() + CS_ERR_DETAIL, // Information is unavailable because detail option is OFF + CS_ERR_MEMSETUP, // Dynamic memory management uninitialized (see CS_OPT_MEM) + CS_ERR_VERSION, // Unsupported version (bindings) + CS_ERR_DIET, // Access irrelevant data in "diet" engine + CS_ERR_SKIPDATA, // Access irrelevant data for "data" instruction in SKIPDATA mode + CS_ERR_X86_ATT, // X86 AT&T syntax is unsupported (opt-out at compile time) + CS_ERR_X86_INTEL, // X86 Intel syntax is unsupported (opt-out at compile time) +} cs_err; + +/* + Return combined API version & major and minor version numbers. + + @major: major number of API version + @minor: minor number of API version + + @return hexical number as (major << 8 | minor), which encodes both + major & minor versions. + NOTE: This returned value can be compared with version number made + with macro CS_MAKE_VERSION + + For example, second API version would return 1 in @major, and 1 in @minor + The return value would be 0x0101 + + NOTE: if you only care about returned value, but not major and minor values, + set both @major & @minor arguments to NULL. +*/ +CAPSTONE_EXPORT +unsigned int CAPSTONE_API cs_version(int *major, int *minor); + + +/* + This API can be used to either ask for archs supported by this library, + or check to see if the library was compile with 'diet' option (or called + in 'diet' mode). + + To check if a particular arch is supported by this library, set @query to + arch mode (CS_ARCH_* value). + To verify if this library supports all the archs, use CS_ARCH_ALL. + + To check if this library is in 'diet' mode, set @query to CS_SUPPORT_DIET. + + @return True if this library supports the given arch, or in 'diet' mode. +*/ +CAPSTONE_EXPORT +bool CAPSTONE_API cs_support(int query); + +/* + Initialize CS handle: this must be done before any usage of CS. + + @arch: architecture type (CS_ARCH_*) + @mode: hardware mode. This is combined of CS_MODE_* + @handle: pointer to handle, which will be updated at return time + + @return CS_ERR_OK on success, or other value on failure (refer to cs_err enum + for detailed error). +*/ +CAPSTONE_EXPORT +cs_err CAPSTONE_API cs_open(cs_arch arch, cs_mode mode, csh *handle); + +/* + Close CS handle: MUST do to release the handle when it is not used anymore. + NOTE: this must be only called when there is no longer usage of Capstone, + not even access to cs_insn array. The reason is the this API releases some + cached memory, thus access to any Capstone API after cs_close() might crash + your application. + + In fact,this API invalidate @handle by ZERO out its value (i.e *handle = 0). + + @handle: pointer to a handle returned by cs_open() + + @return CS_ERR_OK on success, or other value on failure (refer to cs_err enum + for detailed error). +*/ +CAPSTONE_EXPORT +cs_err CAPSTONE_API cs_close(csh *handle); + +/* + Set option for disassembling engine at runtime + + @handle: handle returned by cs_open() + @type: type of option to be set + @value: option value corresponding with @type + + @return: CS_ERR_OK on success, or other value on failure. + Refer to cs_err enum for detailed error. + + NOTE: in the case of CS_OPT_MEM, handle's value can be anything, + so that cs_option(handle, CS_OPT_MEM, value) can (i.e must) be called + even before cs_open() +*/ +CAPSTONE_EXPORT +cs_err CAPSTONE_API cs_option(csh handle, cs_opt_type type, size_t value); + +/* + Report the last error number when some API function fail. + Like glibc's errno, cs_errno might not retain its old value once accessed. + + @handle: handle returned by cs_open() + + @return: error code of cs_err enum type (CS_ERR_*, see above) +*/ +CAPSTONE_EXPORT +cs_err CAPSTONE_API cs_errno(csh handle); + + +/* + Return a string describing given error code. + + @code: error code (see CS_ERR_* above) + + @return: returns a pointer to a string that describes the error code + passed in the argument @code +*/ +CAPSTONE_EXPORT +const char * CAPSTONE_API cs_strerror(cs_err code); + +/* + Disassemble binary code, given the code buffer, size, address and number + of instructions to be decoded. + This API dynamically allocate memory to contain disassembled instruction. + Resulted instructions will be put into @*insn + + NOTE 1: this API will automatically determine memory needed to contain + output disassembled instructions in @insn. + + NOTE 2: caller must free the allocated memory itself to avoid memory leaking. + + NOTE 3: for system with scarce memory to be dynamically allocated such as + OS kernel or firmware, the API cs_disasm_iter() might be a better choice than + cs_disasm(). The reason is that with cs_disasm(), based on limited available + memory, we have to calculate in advance how many instructions to be disassembled, + which complicates things. This is especially troublesome for the case @count=0, + when cs_disasm() runs uncontrollably (until either end of input buffer, or + when it encounters an invalid instruction). + + @handle: handle returned by cs_open() + @code: buffer containing raw binary code to be disassembled. + @code_size: size of the above code buffer. + @address: address of the first instruction in given raw code buffer. + @insn: array of instructions filled in by this API. + NOTE: @insn will be allocated by this function, and should be freed + with cs_free() API. + @count: number of instructions to be disassembled, or 0 to get all of them + + @return: the number of successfully disassembled instructions, + or 0 if this function failed to disassemble the given code + + On failure, call cs_errno() for error code. +*/ +CAPSTONE_EXPORT +size_t CAPSTONE_API cs_disasm(csh handle, + const uint8_t *code, size_t code_size, + uint64_t address, + size_t count, + cs_insn **insn); + +/* + Deprecated function - to be retired in the next version! + Use cs_disasm() instead of cs_disasm_ex() +*/ +CAPSTONE_EXPORT +CAPSTONE_DEPRECATED +size_t CAPSTONE_API cs_disasm_ex(csh handle, + const uint8_t *code, size_t code_size, + uint64_t address, + size_t count, + cs_insn **insn); + +/* + Free memory allocated by cs_malloc() or cs_disasm() (argument @insn) + + @insn: pointer returned by @insn argument in cs_disasm() or cs_malloc() + @count: number of cs_insn structures returned by cs_disasm(), or 1 + to free memory allocated by cs_malloc(). +*/ +CAPSTONE_EXPORT +void CAPSTONE_API cs_free(cs_insn *insn, size_t count); + + +/* + Allocate memory for 1 instruction to be used by cs_disasm_iter(). + + @handle: handle returned by cs_open() + + NOTE: when no longer in use, you can reclaim the memory allocated for + this instruction with cs_free(insn, 1) +*/ +CAPSTONE_EXPORT +cs_insn * CAPSTONE_API cs_malloc(csh handle); + +/* + Fast API to disassemble binary code, given the code buffer, size, address + and number of instructions to be decoded. + This API put the resulted instruction into a given cache in @insn. + See tests/test_iter.c for sample code demonstrating this API. + + NOTE 1: this API will update @code, @size & @address to point to the next + instruction in the input buffer. Therefore, it is convenient to use + cs_disasm_iter() inside a loop to quickly iterate all the instructions. + While decoding one instruction at a time can also be achieved with + cs_disasm(count=1), some benchmarks shown that cs_disasm_iter() can be 30% + faster on random input. + + NOTE 2: the cache in @insn can be created with cs_malloc() API. + + NOTE 3: for system with scarce memory to be dynamically allocated such as + OS kernel or firmware, this API is recommended over cs_disasm(), which + allocates memory based on the number of instructions to be disassembled. + The reason is that with cs_disasm(), based on limited available memory, + we have to calculate in advance how many instructions to be disassembled, + which complicates things. This is especially troublesome for the case + @count=0, when cs_disasm() runs uncontrollably (until either end of input + buffer, or when it encounters an invalid instruction). + + @handle: handle returned by cs_open() + @code: buffer containing raw binary code to be disassembled + @size: size of above code + @address: address of the first insn in given raw code buffer + @insn: pointer to instruction to be filled in by this API. + + @return: true if this API successfully decode 1 instruction, + or false otherwise. + + On failure, call cs_errno() for error code. +*/ +CAPSTONE_EXPORT +bool CAPSTONE_API cs_disasm_iter(csh handle, + const uint8_t **code, size_t *size, + uint64_t *address, cs_insn *insn); + +/* + Return friendly name of register in a string. + Find the instruction id from header file of corresponding architecture (arm.h for ARM, + x86.h for X86, ...) + + WARN: when in 'diet' mode, this API is irrelevant because engine does not + store register name. + + @handle: handle returned by cs_open() + @reg_id: register id + + @return: string name of the register, or NULL if @reg_id is invalid. +*/ +CAPSTONE_EXPORT +const char * CAPSTONE_API cs_reg_name(csh handle, unsigned int reg_id); + +/* + Return friendly name of an instruction in a string. + Find the instruction id from header file of corresponding architecture (arm.h for ARM, x86.h for X86, ...) + + WARN: when in 'diet' mode, this API is irrelevant because the engine does not + store instruction name. + + @handle: handle returned by cs_open() + @insn_id: instruction id + + @return: string name of the instruction, or NULL if @insn_id is invalid. +*/ +CAPSTONE_EXPORT +const char * CAPSTONE_API cs_insn_name(csh handle, unsigned int insn_id); + +/* + Return friendly name of a group id (that an instruction can belong to) + Find the group id from header file of corresponding architecture (arm.h for ARM, x86.h for X86, ...) + + WARN: when in 'diet' mode, this API is irrelevant because the engine does not + store group name. + + @handle: handle returned by cs_open() + @group_id: group id + + @return: string name of the group, or NULL if @group_id is invalid. +*/ +CAPSTONE_EXPORT +const char * CAPSTONE_API cs_group_name(csh handle, unsigned int group_id); + +/* + Check if a disassembled instruction belong to a particular group. + Find the group id from header file of corresponding architecture (arm.h for ARM, x86.h for X86, ...) + Internally, this simply verifies if @group_id matches any member of insn->groups array. + + NOTE: this API is only valid when detail option is ON (which is OFF by default). + + WARN: when in 'diet' mode, this API is irrelevant because the engine does not + update @groups array. + + @handle: handle returned by cs_open() + @insn: disassembled instruction structure received from cs_disasm() or cs_disasm_iter() + @group_id: group that you want to check if this instruction belong to. + + @return: true if this instruction indeed belongs to aboved group, or false otherwise. +*/ +CAPSTONE_EXPORT +bool CAPSTONE_API cs_insn_group(csh handle, const cs_insn *insn, unsigned int group_id); + +/* + Check if a disassembled instruction IMPLICITLY used a particular register. + Find the register id from header file of corresponding architecture (arm.h for ARM, x86.h for X86, ...) + Internally, this simply verifies if @reg_id matches any member of insn->regs_read array. + + NOTE: this API is only valid when detail option is ON (which is OFF by default) + + WARN: when in 'diet' mode, this API is irrelevant because the engine does not + update @regs_read array. + + @insn: disassembled instruction structure received from cs_disasm() or cs_disasm_iter() + @reg_id: register that you want to check if this instruction used it. + + @return: true if this instruction indeed implicitly used aboved register, or false otherwise. +*/ +CAPSTONE_EXPORT +bool CAPSTONE_API cs_reg_read(csh handle, const cs_insn *insn, unsigned int reg_id); + +/* + Check if a disassembled instruction IMPLICITLY modified a particular register. + Find the register id from header file of corresponding architecture (arm.h for ARM, x86.h for X86, ...) + Internally, this simply verifies if @reg_id matches any member of insn->regs_write array. + + NOTE: this API is only valid when detail option is ON (which is OFF by default) + + WARN: when in 'diet' mode, this API is irrelevant because the engine does not + update @regs_write array. + + @insn: disassembled instruction structure received from cs_disasm() or cs_disasm_iter() + @reg_id: register that you want to check if this instruction modified it. + + @return: true if this instruction indeed implicitly modified aboved register, or false otherwise. +*/ +CAPSTONE_EXPORT +bool CAPSTONE_API cs_reg_write(csh handle, const cs_insn *insn, unsigned int reg_id); + +/* + Count the number of operands of a given type. + Find the operand type in header file of corresponding architecture (arm.h for ARM, x86.h for X86, ...) + + NOTE: this API is only valid when detail option is ON (which is OFF by default) + + @handle: handle returned by cs_open() + @insn: disassembled instruction structure received from cs_disasm() or cs_disasm_iter() + @op_type: Operand type to be found. + + @return: number of operands of given type @op_type in instruction @insn, + or -1 on failure. +*/ +CAPSTONE_EXPORT +int CAPSTONE_API cs_op_count(csh handle, const cs_insn *insn, unsigned int op_type); + +/* + Retrieve the position of operand of given type in .operands[] array. + Later, the operand can be accessed using the returned position. + Find the operand type in header file of corresponding architecture (arm.h for ARM, x86.h for X86, ...) + + NOTE: this API is only valid when detail option is ON (which is OFF by default) + + @handle: handle returned by cs_open() + @insn: disassembled instruction structure received from cs_disasm() or cs_disasm_iter() + @op_type: Operand type to be found. + @position: position of the operand to be found. This must be in the range + [1, cs_op_count(handle, insn, op_type)] + + @return: index of operand of given type @op_type in .operands[] array + in instruction @insn, or -1 on failure. +*/ +CAPSTONE_EXPORT +int CAPSTONE_API cs_op_index(csh handle, const cs_insn *insn, unsigned int op_type, + unsigned int position); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/mips.h b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/mips.h new file mode 100755 index 0000000..d238fda --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/mips.h @@ -0,0 +1,906 @@ +#ifndef CAPSTONE_MIPS_H +#define CAPSTONE_MIPS_H + +/* Capstone Disassembly Engine */ +/* By Nguyen Anh Quynh , 2013-2014 */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined(_MSC_VER) || !defined(_KERNEL_MODE) +#include +#endif + +#include "platform.h" + +// GCC MIPS toolchain has a default macro called "mips" which breaks +// compilation +#undef mips + +#ifdef _MSC_VER +#pragma warning(disable:4201) +#endif + +//> Operand type for instruction's operands +typedef enum mips_op_type { + MIPS_OP_INVALID = 0, // = CS_OP_INVALID (Uninitialized). + MIPS_OP_REG, // = CS_OP_REG (Register operand). + MIPS_OP_IMM, // = CS_OP_IMM (Immediate operand). + MIPS_OP_MEM, // = CS_OP_MEM (Memory operand). +} mips_op_type; + +// Instruction's operand referring to memory +// This is associated with MIPS_OP_MEM operand type above +typedef struct mips_op_mem { + unsigned int base; // base register + int64_t disp; // displacement/offset value +} mips_op_mem; + +// Instruction operand +typedef struct cs_mips_op { + mips_op_type type; // operand type + union { + unsigned int reg; // register value for REG operand + int64_t imm; // immediate value for IMM operand + mips_op_mem mem; // base/index/scale/disp value for MEM operand + }; +} cs_mips_op; + +// Instruction structure +typedef struct cs_mips { + // Number of operands of this instruction, + // or 0 when instruction has no operand. + uint8_t op_count; + cs_mips_op operands[8]; // operands for this instruction. +} cs_mips; + +//> MIPS registers +typedef enum mips_reg { + MIPS_REG_INVALID = 0, + //> General purpose registers + MIPS_REG_0, + MIPS_REG_1, + MIPS_REG_2, + MIPS_REG_3, + MIPS_REG_4, + MIPS_REG_5, + MIPS_REG_6, + MIPS_REG_7, + MIPS_REG_8, + MIPS_REG_9, + MIPS_REG_10, + MIPS_REG_11, + MIPS_REG_12, + MIPS_REG_13, + MIPS_REG_14, + MIPS_REG_15, + MIPS_REG_16, + MIPS_REG_17, + MIPS_REG_18, + MIPS_REG_19, + MIPS_REG_20, + MIPS_REG_21, + MIPS_REG_22, + MIPS_REG_23, + MIPS_REG_24, + MIPS_REG_25, + MIPS_REG_26, + MIPS_REG_27, + MIPS_REG_28, + MIPS_REG_29, + MIPS_REG_30, + MIPS_REG_31, + + //> DSP registers + MIPS_REG_DSPCCOND, + MIPS_REG_DSPCARRY, + MIPS_REG_DSPEFI, + MIPS_REG_DSPOUTFLAG, + MIPS_REG_DSPOUTFLAG16_19, + MIPS_REG_DSPOUTFLAG20, + MIPS_REG_DSPOUTFLAG21, + MIPS_REG_DSPOUTFLAG22, + MIPS_REG_DSPOUTFLAG23, + MIPS_REG_DSPPOS, + MIPS_REG_DSPSCOUNT, + + //> ACC registers + MIPS_REG_AC0, + MIPS_REG_AC1, + MIPS_REG_AC2, + MIPS_REG_AC3, + + //> COP registers + MIPS_REG_CC0, + MIPS_REG_CC1, + MIPS_REG_CC2, + MIPS_REG_CC3, + MIPS_REG_CC4, + MIPS_REG_CC5, + MIPS_REG_CC6, + MIPS_REG_CC7, + + //> FPU registers + MIPS_REG_F0, + MIPS_REG_F1, + MIPS_REG_F2, + MIPS_REG_F3, + MIPS_REG_F4, + MIPS_REG_F5, + MIPS_REG_F6, + MIPS_REG_F7, + MIPS_REG_F8, + MIPS_REG_F9, + MIPS_REG_F10, + MIPS_REG_F11, + MIPS_REG_F12, + MIPS_REG_F13, + MIPS_REG_F14, + MIPS_REG_F15, + MIPS_REG_F16, + MIPS_REG_F17, + MIPS_REG_F18, + MIPS_REG_F19, + MIPS_REG_F20, + MIPS_REG_F21, + MIPS_REG_F22, + MIPS_REG_F23, + MIPS_REG_F24, + MIPS_REG_F25, + MIPS_REG_F26, + MIPS_REG_F27, + MIPS_REG_F28, + MIPS_REG_F29, + MIPS_REG_F30, + MIPS_REG_F31, + + MIPS_REG_FCC0, + MIPS_REG_FCC1, + MIPS_REG_FCC2, + MIPS_REG_FCC3, + MIPS_REG_FCC4, + MIPS_REG_FCC5, + MIPS_REG_FCC6, + MIPS_REG_FCC7, + + //> AFPR128 + MIPS_REG_W0, + MIPS_REG_W1, + MIPS_REG_W2, + MIPS_REG_W3, + MIPS_REG_W4, + MIPS_REG_W5, + MIPS_REG_W6, + MIPS_REG_W7, + MIPS_REG_W8, + MIPS_REG_W9, + MIPS_REG_W10, + MIPS_REG_W11, + MIPS_REG_W12, + MIPS_REG_W13, + MIPS_REG_W14, + MIPS_REG_W15, + MIPS_REG_W16, + MIPS_REG_W17, + MIPS_REG_W18, + MIPS_REG_W19, + MIPS_REG_W20, + MIPS_REG_W21, + MIPS_REG_W22, + MIPS_REG_W23, + MIPS_REG_W24, + MIPS_REG_W25, + MIPS_REG_W26, + MIPS_REG_W27, + MIPS_REG_W28, + MIPS_REG_W29, + MIPS_REG_W30, + MIPS_REG_W31, + + MIPS_REG_HI, + MIPS_REG_LO, + + MIPS_REG_P0, + MIPS_REG_P1, + MIPS_REG_P2, + + MIPS_REG_MPL0, + MIPS_REG_MPL1, + MIPS_REG_MPL2, + + MIPS_REG_ENDING, // <-- mark the end of the list or registers + + // alias registers + MIPS_REG_ZERO = MIPS_REG_0, + MIPS_REG_AT = MIPS_REG_1, + MIPS_REG_V0 = MIPS_REG_2, + MIPS_REG_V1 = MIPS_REG_3, + MIPS_REG_A0 = MIPS_REG_4, + MIPS_REG_A1 = MIPS_REG_5, + MIPS_REG_A2 = MIPS_REG_6, + MIPS_REG_A3 = MIPS_REG_7, + MIPS_REG_T0 = MIPS_REG_8, + MIPS_REG_T1 = MIPS_REG_9, + MIPS_REG_T2 = MIPS_REG_10, + MIPS_REG_T3 = MIPS_REG_11, + MIPS_REG_T4 = MIPS_REG_12, + MIPS_REG_T5 = MIPS_REG_13, + MIPS_REG_T6 = MIPS_REG_14, + MIPS_REG_T7 = MIPS_REG_15, + MIPS_REG_S0 = MIPS_REG_16, + MIPS_REG_S1 = MIPS_REG_17, + MIPS_REG_S2 = MIPS_REG_18, + MIPS_REG_S3 = MIPS_REG_19, + MIPS_REG_S4 = MIPS_REG_20, + MIPS_REG_S5 = MIPS_REG_21, + MIPS_REG_S6 = MIPS_REG_22, + MIPS_REG_S7 = MIPS_REG_23, + MIPS_REG_T8 = MIPS_REG_24, + MIPS_REG_T9 = MIPS_REG_25, + MIPS_REG_K0 = MIPS_REG_26, + MIPS_REG_K1 = MIPS_REG_27, + MIPS_REG_GP = MIPS_REG_28, + MIPS_REG_SP = MIPS_REG_29, + MIPS_REG_FP = MIPS_REG_30, MIPS_REG_S8 = MIPS_REG_30, + MIPS_REG_RA = MIPS_REG_31, + + MIPS_REG_HI0 = MIPS_REG_AC0, + MIPS_REG_HI1 = MIPS_REG_AC1, + MIPS_REG_HI2 = MIPS_REG_AC2, + MIPS_REG_HI3 = MIPS_REG_AC3, + + MIPS_REG_LO0 = MIPS_REG_HI0, + MIPS_REG_LO1 = MIPS_REG_HI1, + MIPS_REG_LO2 = MIPS_REG_HI2, + MIPS_REG_LO3 = MIPS_REG_HI3, +} mips_reg; + +//> MIPS instruction +typedef enum mips_insn { + MIPS_INS_INVALID = 0, + + MIPS_INS_ABSQ_S, + MIPS_INS_ADD, + MIPS_INS_ADDIUPC, + MIPS_INS_ADDQH, + MIPS_INS_ADDQH_R, + MIPS_INS_ADDQ, + MIPS_INS_ADDQ_S, + MIPS_INS_ADDSC, + MIPS_INS_ADDS_A, + MIPS_INS_ADDS_S, + MIPS_INS_ADDS_U, + MIPS_INS_ADDUH, + MIPS_INS_ADDUH_R, + MIPS_INS_ADDU, + MIPS_INS_ADDU_S, + MIPS_INS_ADDVI, + MIPS_INS_ADDV, + MIPS_INS_ADDWC, + MIPS_INS_ADD_A, + MIPS_INS_ADDI, + MIPS_INS_ADDIU, + MIPS_INS_ALIGN, + MIPS_INS_ALUIPC, + MIPS_INS_AND, + MIPS_INS_ANDI, + MIPS_INS_APPEND, + MIPS_INS_ASUB_S, + MIPS_INS_ASUB_U, + MIPS_INS_AUI, + MIPS_INS_AUIPC, + MIPS_INS_AVER_S, + MIPS_INS_AVER_U, + MIPS_INS_AVE_S, + MIPS_INS_AVE_U, + MIPS_INS_BADDU, + MIPS_INS_BAL, + MIPS_INS_BALC, + MIPS_INS_BALIGN, + MIPS_INS_BC, + MIPS_INS_BC0F, + MIPS_INS_BC0FL, + MIPS_INS_BC0T, + MIPS_INS_BC0TL, + MIPS_INS_BC1EQZ, + MIPS_INS_BC1F, + MIPS_INS_BC1FL, + MIPS_INS_BC1NEZ, + MIPS_INS_BC1T, + MIPS_INS_BC1TL, + MIPS_INS_BC2EQZ, + MIPS_INS_BC2F, + MIPS_INS_BC2FL, + MIPS_INS_BC2NEZ, + MIPS_INS_BC2T, + MIPS_INS_BC2TL, + MIPS_INS_BC3F, + MIPS_INS_BC3FL, + MIPS_INS_BC3T, + MIPS_INS_BC3TL, + MIPS_INS_BCLRI, + MIPS_INS_BCLR, + MIPS_INS_BEQ, + MIPS_INS_BEQC, + MIPS_INS_BEQL, + MIPS_INS_BEQZALC, + MIPS_INS_BEQZC, + MIPS_INS_BGEC, + MIPS_INS_BGEUC, + MIPS_INS_BGEZ, + MIPS_INS_BGEZAL, + MIPS_INS_BGEZALC, + MIPS_INS_BGEZALL, + MIPS_INS_BGEZALS, + MIPS_INS_BGEZC, + MIPS_INS_BGEZL, + MIPS_INS_BGTZ, + MIPS_INS_BGTZALC, + MIPS_INS_BGTZC, + MIPS_INS_BGTZL, + MIPS_INS_BINSLI, + MIPS_INS_BINSL, + MIPS_INS_BINSRI, + MIPS_INS_BINSR, + MIPS_INS_BITREV, + MIPS_INS_BITSWAP, + MIPS_INS_BLEZ, + MIPS_INS_BLEZALC, + MIPS_INS_BLEZC, + MIPS_INS_BLEZL, + MIPS_INS_BLTC, + MIPS_INS_BLTUC, + MIPS_INS_BLTZ, + MIPS_INS_BLTZAL, + MIPS_INS_BLTZALC, + MIPS_INS_BLTZALL, + MIPS_INS_BLTZALS, + MIPS_INS_BLTZC, + MIPS_INS_BLTZL, + MIPS_INS_BMNZI, + MIPS_INS_BMNZ, + MIPS_INS_BMZI, + MIPS_INS_BMZ, + MIPS_INS_BNE, + MIPS_INS_BNEC, + MIPS_INS_BNEGI, + MIPS_INS_BNEG, + MIPS_INS_BNEL, + MIPS_INS_BNEZALC, + MIPS_INS_BNEZC, + MIPS_INS_BNVC, + MIPS_INS_BNZ, + MIPS_INS_BOVC, + MIPS_INS_BPOSGE32, + MIPS_INS_BREAK, + MIPS_INS_BSELI, + MIPS_INS_BSEL, + MIPS_INS_BSETI, + MIPS_INS_BSET, + MIPS_INS_BZ, + MIPS_INS_BEQZ, + MIPS_INS_B, + MIPS_INS_BNEZ, + MIPS_INS_BTEQZ, + MIPS_INS_BTNEZ, + MIPS_INS_CACHE, + MIPS_INS_CEIL, + MIPS_INS_CEQI, + MIPS_INS_CEQ, + MIPS_INS_CFC1, + MIPS_INS_CFCMSA, + MIPS_INS_CINS, + MIPS_INS_CINS32, + MIPS_INS_CLASS, + MIPS_INS_CLEI_S, + MIPS_INS_CLEI_U, + MIPS_INS_CLE_S, + MIPS_INS_CLE_U, + MIPS_INS_CLO, + MIPS_INS_CLTI_S, + MIPS_INS_CLTI_U, + MIPS_INS_CLT_S, + MIPS_INS_CLT_U, + MIPS_INS_CLZ, + MIPS_INS_CMPGDU, + MIPS_INS_CMPGU, + MIPS_INS_CMPU, + MIPS_INS_CMP, + MIPS_INS_COPY_S, + MIPS_INS_COPY_U, + MIPS_INS_CTC1, + MIPS_INS_CTCMSA, + MIPS_INS_CVT, + MIPS_INS_C, + MIPS_INS_CMPI, + MIPS_INS_DADD, + MIPS_INS_DADDI, + MIPS_INS_DADDIU, + MIPS_INS_DADDU, + MIPS_INS_DAHI, + MIPS_INS_DALIGN, + MIPS_INS_DATI, + MIPS_INS_DAUI, + MIPS_INS_DBITSWAP, + MIPS_INS_DCLO, + MIPS_INS_DCLZ, + MIPS_INS_DDIV, + MIPS_INS_DDIVU, + MIPS_INS_DERET, + MIPS_INS_DEXT, + MIPS_INS_DEXTM, + MIPS_INS_DEXTU, + MIPS_INS_DI, + MIPS_INS_DINS, + MIPS_INS_DINSM, + MIPS_INS_DINSU, + MIPS_INS_DIV, + MIPS_INS_DIVU, + MIPS_INS_DIV_S, + MIPS_INS_DIV_U, + MIPS_INS_DLSA, + MIPS_INS_DMFC0, + MIPS_INS_DMFC1, + MIPS_INS_DMFC2, + MIPS_INS_DMOD, + MIPS_INS_DMODU, + MIPS_INS_DMTC0, + MIPS_INS_DMTC1, + MIPS_INS_DMTC2, + MIPS_INS_DMUH, + MIPS_INS_DMUHU, + MIPS_INS_DMUL, + MIPS_INS_DMULT, + MIPS_INS_DMULTU, + MIPS_INS_DMULU, + MIPS_INS_DOTP_S, + MIPS_INS_DOTP_U, + MIPS_INS_DPADD_S, + MIPS_INS_DPADD_U, + MIPS_INS_DPAQX_SA, + MIPS_INS_DPAQX_S, + MIPS_INS_DPAQ_SA, + MIPS_INS_DPAQ_S, + MIPS_INS_DPAU, + MIPS_INS_DPAX, + MIPS_INS_DPA, + MIPS_INS_DPOP, + MIPS_INS_DPSQX_SA, + MIPS_INS_DPSQX_S, + MIPS_INS_DPSQ_SA, + MIPS_INS_DPSQ_S, + MIPS_INS_DPSUB_S, + MIPS_INS_DPSUB_U, + MIPS_INS_DPSU, + MIPS_INS_DPSX, + MIPS_INS_DPS, + MIPS_INS_DROTR, + MIPS_INS_DROTR32, + MIPS_INS_DROTRV, + MIPS_INS_DSBH, + MIPS_INS_DSHD, + MIPS_INS_DSLL, + MIPS_INS_DSLL32, + MIPS_INS_DSLLV, + MIPS_INS_DSRA, + MIPS_INS_DSRA32, + MIPS_INS_DSRAV, + MIPS_INS_DSRL, + MIPS_INS_DSRL32, + MIPS_INS_DSRLV, + MIPS_INS_DSUB, + MIPS_INS_DSUBU, + MIPS_INS_EHB, + MIPS_INS_EI, + MIPS_INS_ERET, + MIPS_INS_EXT, + MIPS_INS_EXTP, + MIPS_INS_EXTPDP, + MIPS_INS_EXTPDPV, + MIPS_INS_EXTPV, + MIPS_INS_EXTRV_RS, + MIPS_INS_EXTRV_R, + MIPS_INS_EXTRV_S, + MIPS_INS_EXTRV, + MIPS_INS_EXTR_RS, + MIPS_INS_EXTR_R, + MIPS_INS_EXTR_S, + MIPS_INS_EXTR, + MIPS_INS_EXTS, + MIPS_INS_EXTS32, + MIPS_INS_ABS, + MIPS_INS_FADD, + MIPS_INS_FCAF, + MIPS_INS_FCEQ, + MIPS_INS_FCLASS, + MIPS_INS_FCLE, + MIPS_INS_FCLT, + MIPS_INS_FCNE, + MIPS_INS_FCOR, + MIPS_INS_FCUEQ, + MIPS_INS_FCULE, + MIPS_INS_FCULT, + MIPS_INS_FCUNE, + MIPS_INS_FCUN, + MIPS_INS_FDIV, + MIPS_INS_FEXDO, + MIPS_INS_FEXP2, + MIPS_INS_FEXUPL, + MIPS_INS_FEXUPR, + MIPS_INS_FFINT_S, + MIPS_INS_FFINT_U, + MIPS_INS_FFQL, + MIPS_INS_FFQR, + MIPS_INS_FILL, + MIPS_INS_FLOG2, + MIPS_INS_FLOOR, + MIPS_INS_FMADD, + MIPS_INS_FMAX_A, + MIPS_INS_FMAX, + MIPS_INS_FMIN_A, + MIPS_INS_FMIN, + MIPS_INS_MOV, + MIPS_INS_FMSUB, + MIPS_INS_FMUL, + MIPS_INS_MUL, + MIPS_INS_NEG, + MIPS_INS_FRCP, + MIPS_INS_FRINT, + MIPS_INS_FRSQRT, + MIPS_INS_FSAF, + MIPS_INS_FSEQ, + MIPS_INS_FSLE, + MIPS_INS_FSLT, + MIPS_INS_FSNE, + MIPS_INS_FSOR, + MIPS_INS_FSQRT, + MIPS_INS_SQRT, + MIPS_INS_FSUB, + MIPS_INS_SUB, + MIPS_INS_FSUEQ, + MIPS_INS_FSULE, + MIPS_INS_FSULT, + MIPS_INS_FSUNE, + MIPS_INS_FSUN, + MIPS_INS_FTINT_S, + MIPS_INS_FTINT_U, + MIPS_INS_FTQ, + MIPS_INS_FTRUNC_S, + MIPS_INS_FTRUNC_U, + MIPS_INS_HADD_S, + MIPS_INS_HADD_U, + MIPS_INS_HSUB_S, + MIPS_INS_HSUB_U, + MIPS_INS_ILVEV, + MIPS_INS_ILVL, + MIPS_INS_ILVOD, + MIPS_INS_ILVR, + MIPS_INS_INS, + MIPS_INS_INSERT, + MIPS_INS_INSV, + MIPS_INS_INSVE, + MIPS_INS_J, + MIPS_INS_JAL, + MIPS_INS_JALR, + MIPS_INS_JALRS, + MIPS_INS_JALS, + MIPS_INS_JALX, + MIPS_INS_JIALC, + MIPS_INS_JIC, + MIPS_INS_JR, + MIPS_INS_JRADDIUSP, + MIPS_INS_JRC, + MIPS_INS_JALRC, + MIPS_INS_LB, + MIPS_INS_LBUX, + MIPS_INS_LBU, + MIPS_INS_LD, + MIPS_INS_LDC1, + MIPS_INS_LDC2, + MIPS_INS_LDC3, + MIPS_INS_LDI, + MIPS_INS_LDL, + MIPS_INS_LDPC, + MIPS_INS_LDR, + MIPS_INS_LDXC1, + MIPS_INS_LH, + MIPS_INS_LHX, + MIPS_INS_LHU, + MIPS_INS_LL, + MIPS_INS_LLD, + MIPS_INS_LSA, + MIPS_INS_LUXC1, + MIPS_INS_LUI, + MIPS_INS_LW, + MIPS_INS_LWC1, + MIPS_INS_LWC2, + MIPS_INS_LWC3, + MIPS_INS_LWL, + MIPS_INS_LWPC, + MIPS_INS_LWR, + MIPS_INS_LWUPC, + MIPS_INS_LWU, + MIPS_INS_LWX, + MIPS_INS_LWXC1, + MIPS_INS_LI, + MIPS_INS_MADD, + MIPS_INS_MADDF, + MIPS_INS_MADDR_Q, + MIPS_INS_MADDU, + MIPS_INS_MADDV, + MIPS_INS_MADD_Q, + MIPS_INS_MAQ_SA, + MIPS_INS_MAQ_S, + MIPS_INS_MAXA, + MIPS_INS_MAXI_S, + MIPS_INS_MAXI_U, + MIPS_INS_MAX_A, + MIPS_INS_MAX, + MIPS_INS_MAX_S, + MIPS_INS_MAX_U, + MIPS_INS_MFC0, + MIPS_INS_MFC1, + MIPS_INS_MFC2, + MIPS_INS_MFHC1, + MIPS_INS_MFHI, + MIPS_INS_MFLO, + MIPS_INS_MINA, + MIPS_INS_MINI_S, + MIPS_INS_MINI_U, + MIPS_INS_MIN_A, + MIPS_INS_MIN, + MIPS_INS_MIN_S, + MIPS_INS_MIN_U, + MIPS_INS_MOD, + MIPS_INS_MODSUB, + MIPS_INS_MODU, + MIPS_INS_MOD_S, + MIPS_INS_MOD_U, + MIPS_INS_MOVE, + MIPS_INS_MOVF, + MIPS_INS_MOVN, + MIPS_INS_MOVT, + MIPS_INS_MOVZ, + MIPS_INS_MSUB, + MIPS_INS_MSUBF, + MIPS_INS_MSUBR_Q, + MIPS_INS_MSUBU, + MIPS_INS_MSUBV, + MIPS_INS_MSUB_Q, + MIPS_INS_MTC0, + MIPS_INS_MTC1, + MIPS_INS_MTC2, + MIPS_INS_MTHC1, + MIPS_INS_MTHI, + MIPS_INS_MTHLIP, + MIPS_INS_MTLO, + MIPS_INS_MTM0, + MIPS_INS_MTM1, + MIPS_INS_MTM2, + MIPS_INS_MTP0, + MIPS_INS_MTP1, + MIPS_INS_MTP2, + MIPS_INS_MUH, + MIPS_INS_MUHU, + MIPS_INS_MULEQ_S, + MIPS_INS_MULEU_S, + MIPS_INS_MULQ_RS, + MIPS_INS_MULQ_S, + MIPS_INS_MULR_Q, + MIPS_INS_MULSAQ_S, + MIPS_INS_MULSA, + MIPS_INS_MULT, + MIPS_INS_MULTU, + MIPS_INS_MULU, + MIPS_INS_MULV, + MIPS_INS_MUL_Q, + MIPS_INS_MUL_S, + MIPS_INS_NLOC, + MIPS_INS_NLZC, + MIPS_INS_NMADD, + MIPS_INS_NMSUB, + MIPS_INS_NOR, + MIPS_INS_NORI, + MIPS_INS_NOT, + MIPS_INS_OR, + MIPS_INS_ORI, + MIPS_INS_PACKRL, + MIPS_INS_PAUSE, + MIPS_INS_PCKEV, + MIPS_INS_PCKOD, + MIPS_INS_PCNT, + MIPS_INS_PICK, + MIPS_INS_POP, + MIPS_INS_PRECEQU, + MIPS_INS_PRECEQ, + MIPS_INS_PRECEU, + MIPS_INS_PRECRQU_S, + MIPS_INS_PRECRQ, + MIPS_INS_PRECRQ_RS, + MIPS_INS_PRECR, + MIPS_INS_PRECR_SRA, + MIPS_INS_PRECR_SRA_R, + MIPS_INS_PREF, + MIPS_INS_PREPEND, + MIPS_INS_RADDU, + MIPS_INS_RDDSP, + MIPS_INS_RDHWR, + MIPS_INS_REPLV, + MIPS_INS_REPL, + MIPS_INS_RINT, + MIPS_INS_ROTR, + MIPS_INS_ROTRV, + MIPS_INS_ROUND, + MIPS_INS_SAT_S, + MIPS_INS_SAT_U, + MIPS_INS_SB, + MIPS_INS_SC, + MIPS_INS_SCD, + MIPS_INS_SD, + MIPS_INS_SDBBP, + MIPS_INS_SDC1, + MIPS_INS_SDC2, + MIPS_INS_SDC3, + MIPS_INS_SDL, + MIPS_INS_SDR, + MIPS_INS_SDXC1, + MIPS_INS_SEB, + MIPS_INS_SEH, + MIPS_INS_SELEQZ, + MIPS_INS_SELNEZ, + MIPS_INS_SEL, + MIPS_INS_SEQ, + MIPS_INS_SEQI, + MIPS_INS_SH, + MIPS_INS_SHF, + MIPS_INS_SHILO, + MIPS_INS_SHILOV, + MIPS_INS_SHLLV, + MIPS_INS_SHLLV_S, + MIPS_INS_SHLL, + MIPS_INS_SHLL_S, + MIPS_INS_SHRAV, + MIPS_INS_SHRAV_R, + MIPS_INS_SHRA, + MIPS_INS_SHRA_R, + MIPS_INS_SHRLV, + MIPS_INS_SHRL, + MIPS_INS_SLDI, + MIPS_INS_SLD, + MIPS_INS_SLL, + MIPS_INS_SLLI, + MIPS_INS_SLLV, + MIPS_INS_SLT, + MIPS_INS_SLTI, + MIPS_INS_SLTIU, + MIPS_INS_SLTU, + MIPS_INS_SNE, + MIPS_INS_SNEI, + MIPS_INS_SPLATI, + MIPS_INS_SPLAT, + MIPS_INS_SRA, + MIPS_INS_SRAI, + MIPS_INS_SRARI, + MIPS_INS_SRAR, + MIPS_INS_SRAV, + MIPS_INS_SRL, + MIPS_INS_SRLI, + MIPS_INS_SRLRI, + MIPS_INS_SRLR, + MIPS_INS_SRLV, + MIPS_INS_SSNOP, + MIPS_INS_ST, + MIPS_INS_SUBQH, + MIPS_INS_SUBQH_R, + MIPS_INS_SUBQ, + MIPS_INS_SUBQ_S, + MIPS_INS_SUBSUS_U, + MIPS_INS_SUBSUU_S, + MIPS_INS_SUBS_S, + MIPS_INS_SUBS_U, + MIPS_INS_SUBUH, + MIPS_INS_SUBUH_R, + MIPS_INS_SUBU, + MIPS_INS_SUBU_S, + MIPS_INS_SUBVI, + MIPS_INS_SUBV, + MIPS_INS_SUXC1, + MIPS_INS_SW, + MIPS_INS_SWC1, + MIPS_INS_SWC2, + MIPS_INS_SWC3, + MIPS_INS_SWL, + MIPS_INS_SWR, + MIPS_INS_SWXC1, + MIPS_INS_SYNC, + MIPS_INS_SYSCALL, + MIPS_INS_TEQ, + MIPS_INS_TEQI, + MIPS_INS_TGE, + MIPS_INS_TGEI, + MIPS_INS_TGEIU, + MIPS_INS_TGEU, + MIPS_INS_TLBP, + MIPS_INS_TLBR, + MIPS_INS_TLBWI, + MIPS_INS_TLBWR, + MIPS_INS_TLT, + MIPS_INS_TLTI, + MIPS_INS_TLTIU, + MIPS_INS_TLTU, + MIPS_INS_TNE, + MIPS_INS_TNEI, + MIPS_INS_TRUNC, + MIPS_INS_V3MULU, + MIPS_INS_VMM0, + MIPS_INS_VMULU, + MIPS_INS_VSHF, + MIPS_INS_WAIT, + MIPS_INS_WRDSP, + MIPS_INS_WSBH, + MIPS_INS_XOR, + MIPS_INS_XORI, + + //> some alias instructions + MIPS_INS_NOP, + MIPS_INS_NEGU, + + //> special instructions + MIPS_INS_JALR_HB, // jump and link with Hazard Barrier + MIPS_INS_JR_HB, // jump register with Hazard Barrier + + MIPS_INS_ENDING, +} mips_insn; + +//> Group of MIPS instructions +typedef enum mips_insn_group { + MIPS_GRP_INVALID = 0, // = CS_GRP_INVALID + + //> Generic groups + // all jump instructions (conditional+direct+indirect jumps) + MIPS_GRP_JUMP, // = CS_GRP_JUMP + + //> Architecture-specific groups + MIPS_GRP_BITCOUNT = 128, + MIPS_GRP_DSP, + MIPS_GRP_DSPR2, + MIPS_GRP_FPIDX, + MIPS_GRP_MSA, + MIPS_GRP_MIPS32R2, + MIPS_GRP_MIPS64, + MIPS_GRP_MIPS64R2, + MIPS_GRP_SEINREG, + MIPS_GRP_STDENC, + MIPS_GRP_SWAP, + MIPS_GRP_MICROMIPS, + MIPS_GRP_MIPS16MODE, + MIPS_GRP_FP64BIT, + MIPS_GRP_NONANSFPMATH, + MIPS_GRP_NOTFP64BIT, + MIPS_GRP_NOTINMICROMIPS, + MIPS_GRP_NOTNACL, + MIPS_GRP_NOTMIPS32R6, + MIPS_GRP_NOTMIPS64R6, + MIPS_GRP_CNMIPS, + MIPS_GRP_MIPS32, + MIPS_GRP_MIPS32R6, + MIPS_GRP_MIPS64R6, + MIPS_GRP_MIPS2, + MIPS_GRP_MIPS3, + MIPS_GRP_MIPS3_32, + MIPS_GRP_MIPS3_32R2, + MIPS_GRP_MIPS4_32, + MIPS_GRP_MIPS4_32R2, + MIPS_GRP_MIPS5_32R2, + MIPS_GRP_GP32BIT, + MIPS_GRP_GP64BIT, + + MIPS_GRP_ENDING, +} mips_insn_group; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/platform.h b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/platform.h new file mode 100755 index 0000000..b0d1a2d --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/platform.h @@ -0,0 +1,110 @@ +/* Capstone Disassembly Engine */ +/* By Axel Souchet & Nguyen Anh Quynh, 2014 */ + +#ifndef CAPSTONE_PLATFORM_H +#define CAPSTONE_PLATFORM_H + +// handle C99 issue (for pre-2013 VisualStudio) +#if !defined(__CYGWIN__) && !defined(__MINGW32__) && !defined(__MINGW64__) && (defined (WIN32) || defined (WIN64) || defined (_WIN32) || defined (_WIN64)) +// MSVC + +// stdbool.h +#if (_MSC_VER < 1800) || defined(_KERNEL_MODE) +// this system does not have stdbool.h +#ifndef __cplusplus +typedef unsigned char bool; +#define false 0 +#define true 1 +#endif + +#else +// VisualStudio 2013+ -> C99 is supported +#include +#endif + +#else +// not MSVC -> C99 is supported +#include +#endif + + +// handle C99 issue (for pre-2013 VisualStudio) +#if defined(CAPSTONE_HAS_OSXKERNEL) || (defined(_MSC_VER) && (_MSC_VER <= 1700 || defined(_KERNEL_MODE))) +// this system does not have inttypes.h + +#if defined(_MSC_VER) && (_MSC_VER < 1600 || defined(_KERNEL_MODE)) +// this system does not have stdint.h +typedef signed char int8_t; +typedef signed short int16_t; +typedef signed int int32_t; +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +typedef signed long long int64_t; +typedef unsigned long long uint64_t; + +#define INT8_MIN (-127i8 - 1) +#define INT16_MIN (-32767i16 - 1) +#define INT32_MIN (-2147483647i32 - 1) +#define INT64_MIN (-9223372036854775807i64 - 1) +#define INT8_MAX 127i8 +#define INT16_MAX 32767i16 +#define INT32_MAX 2147483647i32 +#define INT64_MAX 9223372036854775807i64 +#define UINT8_MAX 0xffui8 +#define UINT16_MAX 0xffffui16 +#define UINT32_MAX 0xffffffffui32 +#define UINT64_MAX 0xffffffffffffffffui64 +#endif + +#define __PRI_8_LENGTH_MODIFIER__ "hh" +#define __PRI_64_LENGTH_MODIFIER__ "ll" + +#define PRId8 __PRI_8_LENGTH_MODIFIER__ "d" +#define PRIi8 __PRI_8_LENGTH_MODIFIER__ "i" +#define PRIo8 __PRI_8_LENGTH_MODIFIER__ "o" +#define PRIu8 __PRI_8_LENGTH_MODIFIER__ "u" +#define PRIx8 __PRI_8_LENGTH_MODIFIER__ "x" +#define PRIX8 __PRI_8_LENGTH_MODIFIER__ "X" + +#define PRId16 "hd" +#define PRIi16 "hi" +#define PRIo16 "ho" +#define PRIu16 "hu" +#define PRIx16 "hx" +#define PRIX16 "hX" + +#if defined(_MSC_VER) && _MSC_VER <= 1700 +#define PRId32 "ld" +#define PRIi32 "li" +#define PRIo32 "lo" +#define PRIu32 "lu" +#define PRIx32 "lx" +#define PRIX32 "lX" +#else // OSX +#define PRId32 "d" +#define PRIi32 "i" +#define PRIo32 "o" +#define PRIu32 "u" +#define PRIx32 "x" +#define PRIX32 "X" +#endif + +#if defined(_MSC_VER) && _MSC_VER <= 1700 +// redefine functions from inttypes.h used in cstool +#define strtoull _strtoui64 +#endif + +#define PRId64 __PRI_64_LENGTH_MODIFIER__ "d" +#define PRIi64 __PRI_64_LENGTH_MODIFIER__ "i" +#define PRIo64 __PRI_64_LENGTH_MODIFIER__ "o" +#define PRIu64 __PRI_64_LENGTH_MODIFIER__ "u" +#define PRIx64 __PRI_64_LENGTH_MODIFIER__ "x" +#define PRIX64 __PRI_64_LENGTH_MODIFIER__ "X" + +#else +// this system has inttypes.h by default +#include +#endif + +#endif diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/ppc.h b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/ppc.h new file mode 100755 index 0000000..b67df6d --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/ppc.h @@ -0,0 +1,1254 @@ +#ifndef CAPSTONE_PPC_H +#define CAPSTONE_PPC_H + +/* Capstone Disassembly Engine */ +/* By Nguyen Anh Quynh , 2013-2014 */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined(_MSC_VER) || !defined(_KERNEL_MODE) +#include +#endif + +#include "platform.h" + +#ifdef _MSC_VER +#pragma warning(disable:4201) +#endif + +//> PPC branch codes for some branch instructions +typedef enum ppc_bc { + PPC_BC_INVALID = 0, + PPC_BC_LT = (0 << 5) | 12, + PPC_BC_LE = (1 << 5) | 4, + PPC_BC_EQ = (2 << 5) | 12, + PPC_BC_GE = (0 << 5) | 4, + PPC_BC_GT = (1 << 5) | 12, + PPC_BC_NE = (2 << 5) | 4, + PPC_BC_UN = (3 << 5) | 12, + PPC_BC_NU = (3 << 5) | 4, + + // extra conditions + PPC_BC_SO = (4 << 5) | 12, // summary overflow + PPC_BC_NS = (4 << 5) | 4, // not summary overflow +} ppc_bc; + +//> PPC branch hint for some branch instructions +typedef enum ppc_bh { + PPC_BH_INVALID = 0, // no hint + PPC_BH_PLUS, // PLUS hint + PPC_BH_MINUS, // MINUS hint +} ppc_bh; + +//> PPC registers +typedef enum ppc_reg { + PPC_REG_INVALID = 0, + + PPC_REG_CARRY, + PPC_REG_CC, + PPC_REG_CR0, + PPC_REG_CR1, + PPC_REG_CR2, + PPC_REG_CR3, + PPC_REG_CR4, + PPC_REG_CR5, + PPC_REG_CR6, + PPC_REG_CR7, + PPC_REG_CTR, + PPC_REG_F0, + PPC_REG_F1, + PPC_REG_F2, + PPC_REG_F3, + PPC_REG_F4, + PPC_REG_F5, + PPC_REG_F6, + PPC_REG_F7, + PPC_REG_F8, + PPC_REG_F9, + PPC_REG_F10, + PPC_REG_F11, + PPC_REG_F12, + PPC_REG_F13, + PPC_REG_F14, + PPC_REG_F15, + PPC_REG_F16, + PPC_REG_F17, + PPC_REG_F18, + PPC_REG_F19, + PPC_REG_F20, + PPC_REG_F21, + PPC_REG_F22, + PPC_REG_F23, + PPC_REG_F24, + PPC_REG_F25, + PPC_REG_F26, + PPC_REG_F27, + PPC_REG_F28, + PPC_REG_F29, + PPC_REG_F30, + PPC_REG_F31, + PPC_REG_LR, + PPC_REG_R0, + PPC_REG_R1, + PPC_REG_R2, + PPC_REG_R3, + PPC_REG_R4, + PPC_REG_R5, + PPC_REG_R6, + PPC_REG_R7, + PPC_REG_R8, + PPC_REG_R9, + PPC_REG_R10, + PPC_REG_R11, + PPC_REG_R12, + PPC_REG_R13, + PPC_REG_R14, + PPC_REG_R15, + PPC_REG_R16, + PPC_REG_R17, + PPC_REG_R18, + PPC_REG_R19, + PPC_REG_R20, + PPC_REG_R21, + PPC_REG_R22, + PPC_REG_R23, + PPC_REG_R24, + PPC_REG_R25, + PPC_REG_R26, + PPC_REG_R27, + PPC_REG_R28, + PPC_REG_R29, + PPC_REG_R30, + PPC_REG_R31, + PPC_REG_V0, + PPC_REG_V1, + PPC_REG_V2, + PPC_REG_V3, + PPC_REG_V4, + PPC_REG_V5, + PPC_REG_V6, + PPC_REG_V7, + PPC_REG_V8, + PPC_REG_V9, + PPC_REG_V10, + PPC_REG_V11, + PPC_REG_V12, + PPC_REG_V13, + PPC_REG_V14, + PPC_REG_V15, + PPC_REG_V16, + PPC_REG_V17, + PPC_REG_V18, + PPC_REG_V19, + PPC_REG_V20, + PPC_REG_V21, + PPC_REG_V22, + PPC_REG_V23, + PPC_REG_V24, + PPC_REG_V25, + PPC_REG_V26, + PPC_REG_V27, + PPC_REG_V28, + PPC_REG_V29, + PPC_REG_V30, + PPC_REG_V31, + PPC_REG_VRSAVE, + PPC_REG_VS0, + PPC_REG_VS1, + PPC_REG_VS2, + PPC_REG_VS3, + PPC_REG_VS4, + PPC_REG_VS5, + PPC_REG_VS6, + PPC_REG_VS7, + PPC_REG_VS8, + PPC_REG_VS9, + PPC_REG_VS10, + PPC_REG_VS11, + PPC_REG_VS12, + PPC_REG_VS13, + PPC_REG_VS14, + PPC_REG_VS15, + PPC_REG_VS16, + PPC_REG_VS17, + PPC_REG_VS18, + PPC_REG_VS19, + PPC_REG_VS20, + PPC_REG_VS21, + PPC_REG_VS22, + PPC_REG_VS23, + PPC_REG_VS24, + PPC_REG_VS25, + PPC_REG_VS26, + PPC_REG_VS27, + PPC_REG_VS28, + PPC_REG_VS29, + PPC_REG_VS30, + PPC_REG_VS31, + PPC_REG_VS32, + PPC_REG_VS33, + PPC_REG_VS34, + PPC_REG_VS35, + PPC_REG_VS36, + PPC_REG_VS37, + PPC_REG_VS38, + PPC_REG_VS39, + PPC_REG_VS40, + PPC_REG_VS41, + PPC_REG_VS42, + PPC_REG_VS43, + PPC_REG_VS44, + PPC_REG_VS45, + PPC_REG_VS46, + PPC_REG_VS47, + PPC_REG_VS48, + PPC_REG_VS49, + PPC_REG_VS50, + PPC_REG_VS51, + PPC_REG_VS52, + PPC_REG_VS53, + PPC_REG_VS54, + PPC_REG_VS55, + PPC_REG_VS56, + PPC_REG_VS57, + PPC_REG_VS58, + PPC_REG_VS59, + PPC_REG_VS60, + PPC_REG_VS61, + PPC_REG_VS62, + PPC_REG_VS63, + + // extra registers for PPCMapping.c + PPC_REG_RM, + PPC_REG_CTR8, + PPC_REG_LR8, + PPC_REG_CR1EQ, + + PPC_REG_ENDING, // <-- mark the end of the list of registers +} ppc_reg; + +//> Operand type for instruction's operands +typedef enum ppc_op_type { + PPC_OP_INVALID = 0, // = CS_OP_INVALID (Uninitialized). + PPC_OP_REG, // = CS_OP_REG (Register operand). + PPC_OP_IMM, // = CS_OP_IMM (Immediate operand). + PPC_OP_MEM, // = CS_OP_MEM (Memory operand). + PPC_OP_CRX = 64, // Condition Register field +} ppc_op_type; + +// Instruction's operand referring to memory +// This is associated with PPC_OP_MEM operand type above +typedef struct ppc_op_mem { + ppc_reg base; // base register + int32_t disp; // displacement/offset value +} ppc_op_mem; + +typedef struct ppc_op_crx { + unsigned int scale; + ppc_reg reg; + ppc_bc cond; +} ppc_op_crx; + +// Instruction operand +typedef struct cs_ppc_op { + ppc_op_type type; // operand type + union { + ppc_reg reg; // register value for REG operand + int32_t imm; // immediate value for IMM operand + ppc_op_mem mem; // base/disp value for MEM operand + ppc_op_crx crx; // operand with condition register + }; +} cs_ppc_op; + +// Instruction structure +typedef struct cs_ppc { + // branch code for branch instructions + ppc_bc bc; + + // branch hint for branch instructions + ppc_bh bh; + + // if update_cr0 = True, then this 'dot' insn updates CR0 + bool update_cr0; + + // Number of operands of this instruction, + // or 0 when instruction has no operand. + uint8_t op_count; + cs_ppc_op operands[8]; // operands for this instruction. +} cs_ppc; + + +//> PPC instruction +typedef enum ppc_insn { + PPC_INS_INVALID = 0, + + PPC_INS_ADD, + PPC_INS_ADDC, + PPC_INS_ADDE, + PPC_INS_ADDI, + PPC_INS_ADDIC, + PPC_INS_ADDIS, + PPC_INS_ADDME, + PPC_INS_ADDZE, + PPC_INS_AND, + PPC_INS_ANDC, + PPC_INS_ANDIS, + PPC_INS_ANDI, + PPC_INS_B, + PPC_INS_BA, + PPC_INS_BC, + PPC_INS_BCCTR, + PPC_INS_BCCTRL, + PPC_INS_BCL, + PPC_INS_BCLR, + PPC_INS_BCLRL, + PPC_INS_BCTR, + PPC_INS_BCTRL, + PPC_INS_BDNZ, + PPC_INS_BDNZA, + PPC_INS_BDNZL, + PPC_INS_BDNZLA, + PPC_INS_BDNZLR, + PPC_INS_BDNZLRL, + PPC_INS_BDZ, + PPC_INS_BDZA, + PPC_INS_BDZL, + PPC_INS_BDZLA, + PPC_INS_BDZLR, + PPC_INS_BDZLRL, + PPC_INS_BL, + PPC_INS_BLA, + PPC_INS_BLR, + PPC_INS_BLRL, + PPC_INS_BRINC, + PPC_INS_CMPD, + PPC_INS_CMPDI, + PPC_INS_CMPLD, + PPC_INS_CMPLDI, + PPC_INS_CMPLW, + PPC_INS_CMPLWI, + PPC_INS_CMPW, + PPC_INS_CMPWI, + PPC_INS_CNTLZD, + PPC_INS_CNTLZW, + PPC_INS_CREQV, + PPC_INS_CRXOR, + PPC_INS_CRAND, + PPC_INS_CRANDC, + PPC_INS_CRNAND, + PPC_INS_CRNOR, + PPC_INS_CROR, + PPC_INS_CRORC, + PPC_INS_DCBA, + PPC_INS_DCBF, + PPC_INS_DCBI, + PPC_INS_DCBST, + PPC_INS_DCBT, + PPC_INS_DCBTST, + PPC_INS_DCBZ, + PPC_INS_DCBZL, + PPC_INS_DCCCI, + PPC_INS_DIVD, + PPC_INS_DIVDU, + PPC_INS_DIVW, + PPC_INS_DIVWU, + PPC_INS_DSS, + PPC_INS_DSSALL, + PPC_INS_DST, + PPC_INS_DSTST, + PPC_INS_DSTSTT, + PPC_INS_DSTT, + PPC_INS_EIEIO, + PPC_INS_EQV, + PPC_INS_EVABS, + PPC_INS_EVADDIW, + PPC_INS_EVADDSMIAAW, + PPC_INS_EVADDSSIAAW, + PPC_INS_EVADDUMIAAW, + PPC_INS_EVADDUSIAAW, + PPC_INS_EVADDW, + PPC_INS_EVAND, + PPC_INS_EVANDC, + PPC_INS_EVCMPEQ, + PPC_INS_EVCMPGTS, + PPC_INS_EVCMPGTU, + PPC_INS_EVCMPLTS, + PPC_INS_EVCMPLTU, + PPC_INS_EVCNTLSW, + PPC_INS_EVCNTLZW, + PPC_INS_EVDIVWS, + PPC_INS_EVDIVWU, + PPC_INS_EVEQV, + PPC_INS_EVEXTSB, + PPC_INS_EVEXTSH, + PPC_INS_EVLDD, + PPC_INS_EVLDDX, + PPC_INS_EVLDH, + PPC_INS_EVLDHX, + PPC_INS_EVLDW, + PPC_INS_EVLDWX, + PPC_INS_EVLHHESPLAT, + PPC_INS_EVLHHESPLATX, + PPC_INS_EVLHHOSSPLAT, + PPC_INS_EVLHHOSSPLATX, + PPC_INS_EVLHHOUSPLAT, + PPC_INS_EVLHHOUSPLATX, + PPC_INS_EVLWHE, + PPC_INS_EVLWHEX, + PPC_INS_EVLWHOS, + PPC_INS_EVLWHOSX, + PPC_INS_EVLWHOU, + PPC_INS_EVLWHOUX, + PPC_INS_EVLWHSPLAT, + PPC_INS_EVLWHSPLATX, + PPC_INS_EVLWWSPLAT, + PPC_INS_EVLWWSPLATX, + PPC_INS_EVMERGEHI, + PPC_INS_EVMERGEHILO, + PPC_INS_EVMERGELO, + PPC_INS_EVMERGELOHI, + PPC_INS_EVMHEGSMFAA, + PPC_INS_EVMHEGSMFAN, + PPC_INS_EVMHEGSMIAA, + PPC_INS_EVMHEGSMIAN, + PPC_INS_EVMHEGUMIAA, + PPC_INS_EVMHEGUMIAN, + PPC_INS_EVMHESMF, + PPC_INS_EVMHESMFA, + PPC_INS_EVMHESMFAAW, + PPC_INS_EVMHESMFANW, + PPC_INS_EVMHESMI, + PPC_INS_EVMHESMIA, + PPC_INS_EVMHESMIAAW, + PPC_INS_EVMHESMIANW, + PPC_INS_EVMHESSF, + PPC_INS_EVMHESSFA, + PPC_INS_EVMHESSFAAW, + PPC_INS_EVMHESSFANW, + PPC_INS_EVMHESSIAAW, + PPC_INS_EVMHESSIANW, + PPC_INS_EVMHEUMI, + PPC_INS_EVMHEUMIA, + PPC_INS_EVMHEUMIAAW, + PPC_INS_EVMHEUMIANW, + PPC_INS_EVMHEUSIAAW, + PPC_INS_EVMHEUSIANW, + PPC_INS_EVMHOGSMFAA, + PPC_INS_EVMHOGSMFAN, + PPC_INS_EVMHOGSMIAA, + PPC_INS_EVMHOGSMIAN, + PPC_INS_EVMHOGUMIAA, + PPC_INS_EVMHOGUMIAN, + PPC_INS_EVMHOSMF, + PPC_INS_EVMHOSMFA, + PPC_INS_EVMHOSMFAAW, + PPC_INS_EVMHOSMFANW, + PPC_INS_EVMHOSMI, + PPC_INS_EVMHOSMIA, + PPC_INS_EVMHOSMIAAW, + PPC_INS_EVMHOSMIANW, + PPC_INS_EVMHOSSF, + PPC_INS_EVMHOSSFA, + PPC_INS_EVMHOSSFAAW, + PPC_INS_EVMHOSSFANW, + PPC_INS_EVMHOSSIAAW, + PPC_INS_EVMHOSSIANW, + PPC_INS_EVMHOUMI, + PPC_INS_EVMHOUMIA, + PPC_INS_EVMHOUMIAAW, + PPC_INS_EVMHOUMIANW, + PPC_INS_EVMHOUSIAAW, + PPC_INS_EVMHOUSIANW, + PPC_INS_EVMRA, + PPC_INS_EVMWHSMF, + PPC_INS_EVMWHSMFA, + PPC_INS_EVMWHSMI, + PPC_INS_EVMWHSMIA, + PPC_INS_EVMWHSSF, + PPC_INS_EVMWHSSFA, + PPC_INS_EVMWHUMI, + PPC_INS_EVMWHUMIA, + PPC_INS_EVMWLSMIAAW, + PPC_INS_EVMWLSMIANW, + PPC_INS_EVMWLSSIAAW, + PPC_INS_EVMWLSSIANW, + PPC_INS_EVMWLUMI, + PPC_INS_EVMWLUMIA, + PPC_INS_EVMWLUMIAAW, + PPC_INS_EVMWLUMIANW, + PPC_INS_EVMWLUSIAAW, + PPC_INS_EVMWLUSIANW, + PPC_INS_EVMWSMF, + PPC_INS_EVMWSMFA, + PPC_INS_EVMWSMFAA, + PPC_INS_EVMWSMFAN, + PPC_INS_EVMWSMI, + PPC_INS_EVMWSMIA, + PPC_INS_EVMWSMIAA, + PPC_INS_EVMWSMIAN, + PPC_INS_EVMWSSF, + PPC_INS_EVMWSSFA, + PPC_INS_EVMWSSFAA, + PPC_INS_EVMWSSFAN, + PPC_INS_EVMWUMI, + PPC_INS_EVMWUMIA, + PPC_INS_EVMWUMIAA, + PPC_INS_EVMWUMIAN, + PPC_INS_EVNAND, + PPC_INS_EVNEG, + PPC_INS_EVNOR, + PPC_INS_EVOR, + PPC_INS_EVORC, + PPC_INS_EVRLW, + PPC_INS_EVRLWI, + PPC_INS_EVRNDW, + PPC_INS_EVSLW, + PPC_INS_EVSLWI, + PPC_INS_EVSPLATFI, + PPC_INS_EVSPLATI, + PPC_INS_EVSRWIS, + PPC_INS_EVSRWIU, + PPC_INS_EVSRWS, + PPC_INS_EVSRWU, + PPC_INS_EVSTDD, + PPC_INS_EVSTDDX, + PPC_INS_EVSTDH, + PPC_INS_EVSTDHX, + PPC_INS_EVSTDW, + PPC_INS_EVSTDWX, + PPC_INS_EVSTWHE, + PPC_INS_EVSTWHEX, + PPC_INS_EVSTWHO, + PPC_INS_EVSTWHOX, + PPC_INS_EVSTWWE, + PPC_INS_EVSTWWEX, + PPC_INS_EVSTWWO, + PPC_INS_EVSTWWOX, + PPC_INS_EVSUBFSMIAAW, + PPC_INS_EVSUBFSSIAAW, + PPC_INS_EVSUBFUMIAAW, + PPC_INS_EVSUBFUSIAAW, + PPC_INS_EVSUBFW, + PPC_INS_EVSUBIFW, + PPC_INS_EVXOR, + PPC_INS_EXTSB, + PPC_INS_EXTSH, + PPC_INS_EXTSW, + PPC_INS_FABS, + PPC_INS_FADD, + PPC_INS_FADDS, + PPC_INS_FCFID, + PPC_INS_FCFIDS, + PPC_INS_FCFIDU, + PPC_INS_FCFIDUS, + PPC_INS_FCMPU, + PPC_INS_FCPSGN, + PPC_INS_FCTID, + PPC_INS_FCTIDUZ, + PPC_INS_FCTIDZ, + PPC_INS_FCTIW, + PPC_INS_FCTIWUZ, + PPC_INS_FCTIWZ, + PPC_INS_FDIV, + PPC_INS_FDIVS, + PPC_INS_FMADD, + PPC_INS_FMADDS, + PPC_INS_FMR, + PPC_INS_FMSUB, + PPC_INS_FMSUBS, + PPC_INS_FMUL, + PPC_INS_FMULS, + PPC_INS_FNABS, + PPC_INS_FNEG, + PPC_INS_FNMADD, + PPC_INS_FNMADDS, + PPC_INS_FNMSUB, + PPC_INS_FNMSUBS, + PPC_INS_FRE, + PPC_INS_FRES, + PPC_INS_FRIM, + PPC_INS_FRIN, + PPC_INS_FRIP, + PPC_INS_FRIZ, + PPC_INS_FRSP, + PPC_INS_FRSQRTE, + PPC_INS_FRSQRTES, + PPC_INS_FSEL, + PPC_INS_FSQRT, + PPC_INS_FSQRTS, + PPC_INS_FSUB, + PPC_INS_FSUBS, + PPC_INS_ICBI, + PPC_INS_ICCCI, + PPC_INS_ISEL, + PPC_INS_ISYNC, + PPC_INS_LA, + PPC_INS_LBZ, + PPC_INS_LBZU, + PPC_INS_LBZUX, + PPC_INS_LBZX, + PPC_INS_LD, + PPC_INS_LDARX, + PPC_INS_LDBRX, + PPC_INS_LDU, + PPC_INS_LDUX, + PPC_INS_LDX, + PPC_INS_LFD, + PPC_INS_LFDU, + PPC_INS_LFDUX, + PPC_INS_LFDX, + PPC_INS_LFIWAX, + PPC_INS_LFIWZX, + PPC_INS_LFS, + PPC_INS_LFSU, + PPC_INS_LFSUX, + PPC_INS_LFSX, + PPC_INS_LHA, + PPC_INS_LHAU, + PPC_INS_LHAUX, + PPC_INS_LHAX, + PPC_INS_LHBRX, + PPC_INS_LHZ, + PPC_INS_LHZU, + PPC_INS_LHZUX, + PPC_INS_LHZX, + PPC_INS_LI, + PPC_INS_LIS, + PPC_INS_LMW, + PPC_INS_LSWI, + PPC_INS_LVEBX, + PPC_INS_LVEHX, + PPC_INS_LVEWX, + PPC_INS_LVSL, + PPC_INS_LVSR, + PPC_INS_LVX, + PPC_INS_LVXL, + PPC_INS_LWA, + PPC_INS_LWARX, + PPC_INS_LWAUX, + PPC_INS_LWAX, + PPC_INS_LWBRX, + PPC_INS_LWZ, + PPC_INS_LWZU, + PPC_INS_LWZUX, + PPC_INS_LWZX, + PPC_INS_LXSDX, + PPC_INS_LXVD2X, + PPC_INS_LXVDSX, + PPC_INS_LXVW4X, + PPC_INS_MBAR, + PPC_INS_MCRF, + PPC_INS_MFCR, + PPC_INS_MFCTR, + PPC_INS_MFDCR, + PPC_INS_MFFS, + PPC_INS_MFLR, + PPC_INS_MFMSR, + PPC_INS_MFOCRF, + PPC_INS_MFSPR, + PPC_INS_MFSR, + PPC_INS_MFSRIN, + PPC_INS_MFTB, + PPC_INS_MFVSCR, + PPC_INS_MSYNC, + PPC_INS_MTCRF, + PPC_INS_MTCTR, + PPC_INS_MTDCR, + PPC_INS_MTFSB0, + PPC_INS_MTFSB1, + PPC_INS_MTFSF, + PPC_INS_MTLR, + PPC_INS_MTMSR, + PPC_INS_MTMSRD, + PPC_INS_MTOCRF, + PPC_INS_MTSPR, + PPC_INS_MTSR, + PPC_INS_MTSRIN, + PPC_INS_MTVSCR, + PPC_INS_MULHD, + PPC_INS_MULHDU, + PPC_INS_MULHW, + PPC_INS_MULHWU, + PPC_INS_MULLD, + PPC_INS_MULLI, + PPC_INS_MULLW, + PPC_INS_NAND, + PPC_INS_NEG, + PPC_INS_NOP, + PPC_INS_ORI, + PPC_INS_NOR, + PPC_INS_OR, + PPC_INS_ORC, + PPC_INS_ORIS, + PPC_INS_POPCNTD, + PPC_INS_POPCNTW, + PPC_INS_RFCI, + PPC_INS_RFDI, + PPC_INS_RFI, + PPC_INS_RFID, + PPC_INS_RFMCI, + PPC_INS_RLDCL, + PPC_INS_RLDCR, + PPC_INS_RLDIC, + PPC_INS_RLDICL, + PPC_INS_RLDICR, + PPC_INS_RLDIMI, + PPC_INS_RLWIMI, + PPC_INS_RLWINM, + PPC_INS_RLWNM, + PPC_INS_SC, + PPC_INS_SLBIA, + PPC_INS_SLBIE, + PPC_INS_SLBMFEE, + PPC_INS_SLBMTE, + PPC_INS_SLD, + PPC_INS_SLW, + PPC_INS_SRAD, + PPC_INS_SRADI, + PPC_INS_SRAW, + PPC_INS_SRAWI, + PPC_INS_SRD, + PPC_INS_SRW, + PPC_INS_STB, + PPC_INS_STBU, + PPC_INS_STBUX, + PPC_INS_STBX, + PPC_INS_STD, + PPC_INS_STDBRX, + PPC_INS_STDCX, + PPC_INS_STDU, + PPC_INS_STDUX, + PPC_INS_STDX, + PPC_INS_STFD, + PPC_INS_STFDU, + PPC_INS_STFDUX, + PPC_INS_STFDX, + PPC_INS_STFIWX, + PPC_INS_STFS, + PPC_INS_STFSU, + PPC_INS_STFSUX, + PPC_INS_STFSX, + PPC_INS_STH, + PPC_INS_STHBRX, + PPC_INS_STHU, + PPC_INS_STHUX, + PPC_INS_STHX, + PPC_INS_STMW, + PPC_INS_STSWI, + PPC_INS_STVEBX, + PPC_INS_STVEHX, + PPC_INS_STVEWX, + PPC_INS_STVX, + PPC_INS_STVXL, + PPC_INS_STW, + PPC_INS_STWBRX, + PPC_INS_STWCX, + PPC_INS_STWU, + PPC_INS_STWUX, + PPC_INS_STWX, + PPC_INS_STXSDX, + PPC_INS_STXVD2X, + PPC_INS_STXVW4X, + PPC_INS_SUBF, + PPC_INS_SUBFC, + PPC_INS_SUBFE, + PPC_INS_SUBFIC, + PPC_INS_SUBFME, + PPC_INS_SUBFZE, + PPC_INS_SYNC, + PPC_INS_TD, + PPC_INS_TDI, + PPC_INS_TLBIA, + PPC_INS_TLBIE, + PPC_INS_TLBIEL, + PPC_INS_TLBIVAX, + PPC_INS_TLBLD, + PPC_INS_TLBLI, + PPC_INS_TLBRE, + PPC_INS_TLBSX, + PPC_INS_TLBSYNC, + PPC_INS_TLBWE, + PPC_INS_TRAP, + PPC_INS_TW, + PPC_INS_TWI, + PPC_INS_VADDCUW, + PPC_INS_VADDFP, + PPC_INS_VADDSBS, + PPC_INS_VADDSHS, + PPC_INS_VADDSWS, + PPC_INS_VADDUBM, + PPC_INS_VADDUBS, + PPC_INS_VADDUHM, + PPC_INS_VADDUHS, + PPC_INS_VADDUWM, + PPC_INS_VADDUWS, + PPC_INS_VAND, + PPC_INS_VANDC, + PPC_INS_VAVGSB, + PPC_INS_VAVGSH, + PPC_INS_VAVGSW, + PPC_INS_VAVGUB, + PPC_INS_VAVGUH, + PPC_INS_VAVGUW, + PPC_INS_VCFSX, + PPC_INS_VCFUX, + PPC_INS_VCMPBFP, + PPC_INS_VCMPEQFP, + PPC_INS_VCMPEQUB, + PPC_INS_VCMPEQUH, + PPC_INS_VCMPEQUW, + PPC_INS_VCMPGEFP, + PPC_INS_VCMPGTFP, + PPC_INS_VCMPGTSB, + PPC_INS_VCMPGTSH, + PPC_INS_VCMPGTSW, + PPC_INS_VCMPGTUB, + PPC_INS_VCMPGTUH, + PPC_INS_VCMPGTUW, + PPC_INS_VCTSXS, + PPC_INS_VCTUXS, + PPC_INS_VEXPTEFP, + PPC_INS_VLOGEFP, + PPC_INS_VMADDFP, + PPC_INS_VMAXFP, + PPC_INS_VMAXSB, + PPC_INS_VMAXSH, + PPC_INS_VMAXSW, + PPC_INS_VMAXUB, + PPC_INS_VMAXUH, + PPC_INS_VMAXUW, + PPC_INS_VMHADDSHS, + PPC_INS_VMHRADDSHS, + PPC_INS_VMINFP, + PPC_INS_VMINSB, + PPC_INS_VMINSH, + PPC_INS_VMINSW, + PPC_INS_VMINUB, + PPC_INS_VMINUH, + PPC_INS_VMINUW, + PPC_INS_VMLADDUHM, + PPC_INS_VMRGHB, + PPC_INS_VMRGHH, + PPC_INS_VMRGHW, + PPC_INS_VMRGLB, + PPC_INS_VMRGLH, + PPC_INS_VMRGLW, + PPC_INS_VMSUMMBM, + PPC_INS_VMSUMSHM, + PPC_INS_VMSUMSHS, + PPC_INS_VMSUMUBM, + PPC_INS_VMSUMUHM, + PPC_INS_VMSUMUHS, + PPC_INS_VMULESB, + PPC_INS_VMULESH, + PPC_INS_VMULEUB, + PPC_INS_VMULEUH, + PPC_INS_VMULOSB, + PPC_INS_VMULOSH, + PPC_INS_VMULOUB, + PPC_INS_VMULOUH, + PPC_INS_VNMSUBFP, + PPC_INS_VNOR, + PPC_INS_VOR, + PPC_INS_VPERM, + PPC_INS_VPKPX, + PPC_INS_VPKSHSS, + PPC_INS_VPKSHUS, + PPC_INS_VPKSWSS, + PPC_INS_VPKSWUS, + PPC_INS_VPKUHUM, + PPC_INS_VPKUHUS, + PPC_INS_VPKUWUM, + PPC_INS_VPKUWUS, + PPC_INS_VREFP, + PPC_INS_VRFIM, + PPC_INS_VRFIN, + PPC_INS_VRFIP, + PPC_INS_VRFIZ, + PPC_INS_VRLB, + PPC_INS_VRLH, + PPC_INS_VRLW, + PPC_INS_VRSQRTEFP, + PPC_INS_VSEL, + PPC_INS_VSL, + PPC_INS_VSLB, + PPC_INS_VSLDOI, + PPC_INS_VSLH, + PPC_INS_VSLO, + PPC_INS_VSLW, + PPC_INS_VSPLTB, + PPC_INS_VSPLTH, + PPC_INS_VSPLTISB, + PPC_INS_VSPLTISH, + PPC_INS_VSPLTISW, + PPC_INS_VSPLTW, + PPC_INS_VSR, + PPC_INS_VSRAB, + PPC_INS_VSRAH, + PPC_INS_VSRAW, + PPC_INS_VSRB, + PPC_INS_VSRH, + PPC_INS_VSRO, + PPC_INS_VSRW, + PPC_INS_VSUBCUW, + PPC_INS_VSUBFP, + PPC_INS_VSUBSBS, + PPC_INS_VSUBSHS, + PPC_INS_VSUBSWS, + PPC_INS_VSUBUBM, + PPC_INS_VSUBUBS, + PPC_INS_VSUBUHM, + PPC_INS_VSUBUHS, + PPC_INS_VSUBUWM, + PPC_INS_VSUBUWS, + PPC_INS_VSUM2SWS, + PPC_INS_VSUM4SBS, + PPC_INS_VSUM4SHS, + PPC_INS_VSUM4UBS, + PPC_INS_VSUMSWS, + PPC_INS_VUPKHPX, + PPC_INS_VUPKHSB, + PPC_INS_VUPKHSH, + PPC_INS_VUPKLPX, + PPC_INS_VUPKLSB, + PPC_INS_VUPKLSH, + PPC_INS_VXOR, + PPC_INS_WAIT, + PPC_INS_WRTEE, + PPC_INS_WRTEEI, + PPC_INS_XOR, + PPC_INS_XORI, + PPC_INS_XORIS, + PPC_INS_XSABSDP, + PPC_INS_XSADDDP, + PPC_INS_XSCMPODP, + PPC_INS_XSCMPUDP, + PPC_INS_XSCPSGNDP, + PPC_INS_XSCVDPSP, + PPC_INS_XSCVDPSXDS, + PPC_INS_XSCVDPSXWS, + PPC_INS_XSCVDPUXDS, + PPC_INS_XSCVDPUXWS, + PPC_INS_XSCVSPDP, + PPC_INS_XSCVSXDDP, + PPC_INS_XSCVUXDDP, + PPC_INS_XSDIVDP, + PPC_INS_XSMADDADP, + PPC_INS_XSMADDMDP, + PPC_INS_XSMAXDP, + PPC_INS_XSMINDP, + PPC_INS_XSMSUBADP, + PPC_INS_XSMSUBMDP, + PPC_INS_XSMULDP, + PPC_INS_XSNABSDP, + PPC_INS_XSNEGDP, + PPC_INS_XSNMADDADP, + PPC_INS_XSNMADDMDP, + PPC_INS_XSNMSUBADP, + PPC_INS_XSNMSUBMDP, + PPC_INS_XSRDPI, + PPC_INS_XSRDPIC, + PPC_INS_XSRDPIM, + PPC_INS_XSRDPIP, + PPC_INS_XSRDPIZ, + PPC_INS_XSREDP, + PPC_INS_XSRSQRTEDP, + PPC_INS_XSSQRTDP, + PPC_INS_XSSUBDP, + PPC_INS_XSTDIVDP, + PPC_INS_XSTSQRTDP, + PPC_INS_XVABSDP, + PPC_INS_XVABSSP, + PPC_INS_XVADDDP, + PPC_INS_XVADDSP, + PPC_INS_XVCMPEQDP, + PPC_INS_XVCMPEQSP, + PPC_INS_XVCMPGEDP, + PPC_INS_XVCMPGESP, + PPC_INS_XVCMPGTDP, + PPC_INS_XVCMPGTSP, + PPC_INS_XVCPSGNDP, + PPC_INS_XVCPSGNSP, + PPC_INS_XVCVDPSP, + PPC_INS_XVCVDPSXDS, + PPC_INS_XVCVDPSXWS, + PPC_INS_XVCVDPUXDS, + PPC_INS_XVCVDPUXWS, + PPC_INS_XVCVSPDP, + PPC_INS_XVCVSPSXDS, + PPC_INS_XVCVSPSXWS, + PPC_INS_XVCVSPUXDS, + PPC_INS_XVCVSPUXWS, + PPC_INS_XVCVSXDDP, + PPC_INS_XVCVSXDSP, + PPC_INS_XVCVSXWDP, + PPC_INS_XVCVSXWSP, + PPC_INS_XVCVUXDDP, + PPC_INS_XVCVUXDSP, + PPC_INS_XVCVUXWDP, + PPC_INS_XVCVUXWSP, + PPC_INS_XVDIVDP, + PPC_INS_XVDIVSP, + PPC_INS_XVMADDADP, + PPC_INS_XVMADDASP, + PPC_INS_XVMADDMDP, + PPC_INS_XVMADDMSP, + PPC_INS_XVMAXDP, + PPC_INS_XVMAXSP, + PPC_INS_XVMINDP, + PPC_INS_XVMINSP, + PPC_INS_XVMSUBADP, + PPC_INS_XVMSUBASP, + PPC_INS_XVMSUBMDP, + PPC_INS_XVMSUBMSP, + PPC_INS_XVMULDP, + PPC_INS_XVMULSP, + PPC_INS_XVNABSDP, + PPC_INS_XVNABSSP, + PPC_INS_XVNEGDP, + PPC_INS_XVNEGSP, + PPC_INS_XVNMADDADP, + PPC_INS_XVNMADDASP, + PPC_INS_XVNMADDMDP, + PPC_INS_XVNMADDMSP, + PPC_INS_XVNMSUBADP, + PPC_INS_XVNMSUBASP, + PPC_INS_XVNMSUBMDP, + PPC_INS_XVNMSUBMSP, + PPC_INS_XVRDPI, + PPC_INS_XVRDPIC, + PPC_INS_XVRDPIM, + PPC_INS_XVRDPIP, + PPC_INS_XVRDPIZ, + PPC_INS_XVREDP, + PPC_INS_XVRESP, + PPC_INS_XVRSPI, + PPC_INS_XVRSPIC, + PPC_INS_XVRSPIM, + PPC_INS_XVRSPIP, + PPC_INS_XVRSPIZ, + PPC_INS_XVRSQRTEDP, + PPC_INS_XVRSQRTESP, + PPC_INS_XVSQRTDP, + PPC_INS_XVSQRTSP, + PPC_INS_XVSUBDP, + PPC_INS_XVSUBSP, + PPC_INS_XVTDIVDP, + PPC_INS_XVTDIVSP, + PPC_INS_XVTSQRTDP, + PPC_INS_XVTSQRTSP, + PPC_INS_XXLAND, + PPC_INS_XXLANDC, + PPC_INS_XXLNOR, + PPC_INS_XXLOR, + PPC_INS_XXLXOR, + PPC_INS_XXMRGHW, + PPC_INS_XXMRGLW, + PPC_INS_XXPERMDI, + PPC_INS_XXSEL, + PPC_INS_XXSLDWI, + PPC_INS_XXSPLTW, + PPC_INS_BCA, + PPC_INS_BCLA, + + // extra & alias instructions + PPC_INS_SLWI, + PPC_INS_SRWI, + PPC_INS_SLDI, + + PPC_INS_BTA, + PPC_INS_CRSET, + PPC_INS_CRNOT, + PPC_INS_CRMOVE, + PPC_INS_CRCLR, + PPC_INS_MFBR0, + PPC_INS_MFBR1, + PPC_INS_MFBR2, + PPC_INS_MFBR3, + PPC_INS_MFBR4, + PPC_INS_MFBR5, + PPC_INS_MFBR6, + PPC_INS_MFBR7, + PPC_INS_MFXER, + PPC_INS_MFRTCU, + PPC_INS_MFRTCL, + PPC_INS_MFDSCR, + PPC_INS_MFDSISR, + PPC_INS_MFDAR, + PPC_INS_MFSRR2, + PPC_INS_MFSRR3, + PPC_INS_MFCFAR, + PPC_INS_MFAMR, + PPC_INS_MFPID, + PPC_INS_MFTBLO, + PPC_INS_MFTBHI, + PPC_INS_MFDBATU, + PPC_INS_MFDBATL, + PPC_INS_MFIBATU, + PPC_INS_MFIBATL, + PPC_INS_MFDCCR, + PPC_INS_MFICCR, + PPC_INS_MFDEAR, + PPC_INS_MFESR, + PPC_INS_MFSPEFSCR, + PPC_INS_MFTCR, + PPC_INS_MFASR, + PPC_INS_MFPVR, + PPC_INS_MFTBU, + PPC_INS_MTCR, + PPC_INS_MTBR0, + PPC_INS_MTBR1, + PPC_INS_MTBR2, + PPC_INS_MTBR3, + PPC_INS_MTBR4, + PPC_INS_MTBR5, + PPC_INS_MTBR6, + PPC_INS_MTBR7, + PPC_INS_MTXER, + PPC_INS_MTDSCR, + PPC_INS_MTDSISR, + PPC_INS_MTDAR, + PPC_INS_MTSRR2, + PPC_INS_MTSRR3, + PPC_INS_MTCFAR, + PPC_INS_MTAMR, + PPC_INS_MTPID, + PPC_INS_MTTBL, + PPC_INS_MTTBU, + PPC_INS_MTTBLO, + PPC_INS_MTTBHI, + PPC_INS_MTDBATU, + PPC_INS_MTDBATL, + PPC_INS_MTIBATU, + PPC_INS_MTIBATL, + PPC_INS_MTDCCR, + PPC_INS_MTICCR, + PPC_INS_MTDEAR, + PPC_INS_MTESR, + PPC_INS_MTSPEFSCR, + PPC_INS_MTTCR, + PPC_INS_NOT, + PPC_INS_MR, + PPC_INS_ROTLD, + PPC_INS_ROTLDI, + PPC_INS_CLRLDI, + PPC_INS_ROTLWI, + PPC_INS_CLRLWI, + PPC_INS_ROTLW, + PPC_INS_SUB, + PPC_INS_SUBC, + PPC_INS_LWSYNC, + PPC_INS_PTESYNC, + PPC_INS_TDLT, + PPC_INS_TDEQ, + PPC_INS_TDGT, + PPC_INS_TDNE, + PPC_INS_TDLLT, + PPC_INS_TDLGT, + PPC_INS_TDU, + PPC_INS_TDLTI, + PPC_INS_TDEQI, + PPC_INS_TDGTI, + PPC_INS_TDNEI, + PPC_INS_TDLLTI, + PPC_INS_TDLGTI, + PPC_INS_TDUI, + PPC_INS_TLBREHI, + PPC_INS_TLBRELO, + PPC_INS_TLBWEHI, + PPC_INS_TLBWELO, + PPC_INS_TWLT, + PPC_INS_TWEQ, + PPC_INS_TWGT, + PPC_INS_TWNE, + PPC_INS_TWLLT, + PPC_INS_TWLGT, + PPC_INS_TWU, + PPC_INS_TWLTI, + PPC_INS_TWEQI, + PPC_INS_TWGTI, + PPC_INS_TWNEI, + PPC_INS_TWLLTI, + PPC_INS_TWLGTI, + PPC_INS_TWUI, + PPC_INS_WAITRSV, + PPC_INS_WAITIMPL, + PPC_INS_XNOP, + PPC_INS_XVMOVDP, + PPC_INS_XVMOVSP, + PPC_INS_XXSPLTD, + PPC_INS_XXMRGHD, + PPC_INS_XXMRGLD, + PPC_INS_XXSWAPD, + PPC_INS_BT, + PPC_INS_BF, + PPC_INS_BDNZT, + PPC_INS_BDNZF, + PPC_INS_BDZF, + PPC_INS_BDZT, + PPC_INS_BFA, + PPC_INS_BDNZTA, + PPC_INS_BDNZFA, + PPC_INS_BDZTA, + PPC_INS_BDZFA, + PPC_INS_BTCTR, + PPC_INS_BFCTR, + PPC_INS_BTCTRL, + PPC_INS_BFCTRL, + PPC_INS_BTL, + PPC_INS_BFL, + PPC_INS_BDNZTL, + PPC_INS_BDNZFL, + PPC_INS_BDZTL, + PPC_INS_BDZFL, + PPC_INS_BTLA, + PPC_INS_BFLA, + PPC_INS_BDNZTLA, + PPC_INS_BDNZFLA, + PPC_INS_BDZTLA, + PPC_INS_BDZFLA, + PPC_INS_BTLR, + PPC_INS_BFLR, + PPC_INS_BDNZTLR, + PPC_INS_BDZTLR, + PPC_INS_BDZFLR, + PPC_INS_BTLRL, + PPC_INS_BFLRL, + PPC_INS_BDNZTLRL, + PPC_INS_BDNZFLRL, + PPC_INS_BDZTLRL, + PPC_INS_BDZFLRL, + + PPC_INS_ENDING, // <-- mark the end of the list of instructions +} ppc_insn; + +//> Group of PPC instructions +typedef enum ppc_insn_group { + PPC_GRP_INVALID = 0, // = CS_GRP_INVALID + + //> Generic groups + // all jump instructions (conditional+direct+indirect jumps) + PPC_GRP_JUMP, // = CS_GRP_JUMP + + //> Architecture-specific groups + PPC_GRP_ALTIVEC = 128, + PPC_GRP_MODE32, + PPC_GRP_MODE64, + PPC_GRP_BOOKE, + PPC_GRP_NOTBOOKE, + PPC_GRP_SPE, + PPC_GRP_VSX, + PPC_GRP_E500, + PPC_GRP_PPC4XX, + PPC_GRP_PPC6XX, + + PPC_GRP_ENDING, // <-- mark the end of the list of groups +} ppc_insn_group; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/sparc.h b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/sparc.h new file mode 100755 index 0000000..a1fccfa --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/sparc.h @@ -0,0 +1,522 @@ +#ifndef CAPSTONE_SPARC_H +#define CAPSTONE_SPARC_H + +/* Capstone Disassembly Engine */ +/* By Nguyen Anh Quynh , 2014 */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined(_MSC_VER) || !defined(_KERNEL_MODE) +#include +#endif + +#include "platform.h" + +// GCC SPARC toolchain has a default macro called "sparc" which breaks +// compilation +#undef sparc + +#ifdef _MSC_VER +#pragma warning(disable:4201) +#endif + +//> Enums corresponding to Sparc condition codes, both icc's and fcc's. +typedef enum sparc_cc { + SPARC_CC_INVALID = 0, // invalid CC (default) + //> Integer condition codes + SPARC_CC_ICC_A = 8+256, // Always + SPARC_CC_ICC_N = 0+256, // Never + SPARC_CC_ICC_NE = 9+256, // Not Equal + SPARC_CC_ICC_E = 1+256, // Equal + SPARC_CC_ICC_G = 10+256, // Greater + SPARC_CC_ICC_LE = 2+256, // Less or Equal + SPARC_CC_ICC_GE = 11+256, // Greater or Equal + SPARC_CC_ICC_L = 3+256, // Less + SPARC_CC_ICC_GU = 12+256, // Greater Unsigned + SPARC_CC_ICC_LEU = 4+256, // Less or Equal Unsigned + SPARC_CC_ICC_CC = 13+256, // Carry Clear/Great or Equal Unsigned + SPARC_CC_ICC_CS = 5+256, // Carry Set/Less Unsigned + SPARC_CC_ICC_POS = 14+256, // Positive + SPARC_CC_ICC_NEG = 6+256, // Negative + SPARC_CC_ICC_VC = 15+256, // Overflow Clear + SPARC_CC_ICC_VS = 7+256, // Overflow Set + + //> Floating condition codes + SPARC_CC_FCC_A = 8+16+256, // Always + SPARC_CC_FCC_N = 0+16+256, // Never + SPARC_CC_FCC_U = 7+16+256, // Unordered + SPARC_CC_FCC_G = 6+16+256, // Greater + SPARC_CC_FCC_UG = 5+16+256, // Unordered or Greater + SPARC_CC_FCC_L = 4+16+256, // Less + SPARC_CC_FCC_UL = 3+16+256, // Unordered or Less + SPARC_CC_FCC_LG = 2+16+256, // Less or Greater + SPARC_CC_FCC_NE = 1+16+256, // Not Equal + SPARC_CC_FCC_E = 9+16+256, // Equal + SPARC_CC_FCC_UE = 10+16+256, // Unordered or Equal + SPARC_CC_FCC_GE = 11+16+256, // Greater or Equal + SPARC_CC_FCC_UGE = 12+16+256, // Unordered or Greater or Equal + SPARC_CC_FCC_LE = 13+16+256, // Less or Equal + SPARC_CC_FCC_ULE = 14+16+256, // Unordered or Less or Equal + SPARC_CC_FCC_O = 15+16+256, // Ordered +} sparc_cc; + +//> Branch hint +typedef enum sparc_hint { + SPARC_HINT_INVALID = 0, // no hint + SPARC_HINT_A = 1 << 0, // annul delay slot instruction + SPARC_HINT_PT = 1 << 1, // branch taken + SPARC_HINT_PN = 1 << 2, // branch NOT taken +} sparc_hint; + +//> Operand type for instruction's operands +typedef enum sparc_op_type { + SPARC_OP_INVALID = 0, // = CS_OP_INVALID (Uninitialized). + SPARC_OP_REG, // = CS_OP_REG (Register operand). + SPARC_OP_IMM, // = CS_OP_IMM (Immediate operand). + SPARC_OP_MEM, // = CS_OP_MEM (Memory operand). +} sparc_op_type; + +// Instruction's operand referring to memory +// This is associated with SPARC_OP_MEM operand type above +typedef struct sparc_op_mem { + uint8_t base; // base register + uint8_t index; // index register + int32_t disp; // displacement/offset value +} sparc_op_mem; + +// Instruction operand +typedef struct cs_sparc_op { + sparc_op_type type; // operand type + union { + unsigned int reg; // register value for REG operand + int32_t imm; // immediate value for IMM operand + sparc_op_mem mem; // base/disp value for MEM operand + }; +} cs_sparc_op; + +// Instruction structure +typedef struct cs_sparc { + sparc_cc cc; // code condition for this insn + sparc_hint hint; // branch hint: encoding as bitwise OR of sparc_hint. + // Number of operands of this instruction, + // or 0 when instruction has no operand. + uint8_t op_count; + cs_sparc_op operands[4]; // operands for this instruction. +} cs_sparc; + +//> SPARC registers +typedef enum sparc_reg { + SPARC_REG_INVALID = 0, + + SPARC_REG_F0, + SPARC_REG_F1, + SPARC_REG_F2, + SPARC_REG_F3, + SPARC_REG_F4, + SPARC_REG_F5, + SPARC_REG_F6, + SPARC_REG_F7, + SPARC_REG_F8, + SPARC_REG_F9, + SPARC_REG_F10, + SPARC_REG_F11, + SPARC_REG_F12, + SPARC_REG_F13, + SPARC_REG_F14, + SPARC_REG_F15, + SPARC_REG_F16, + SPARC_REG_F17, + SPARC_REG_F18, + SPARC_REG_F19, + SPARC_REG_F20, + SPARC_REG_F21, + SPARC_REG_F22, + SPARC_REG_F23, + SPARC_REG_F24, + SPARC_REG_F25, + SPARC_REG_F26, + SPARC_REG_F27, + SPARC_REG_F28, + SPARC_REG_F29, + SPARC_REG_F30, + SPARC_REG_F31, + SPARC_REG_F32, + SPARC_REG_F34, + SPARC_REG_F36, + SPARC_REG_F38, + SPARC_REG_F40, + SPARC_REG_F42, + SPARC_REG_F44, + SPARC_REG_F46, + SPARC_REG_F48, + SPARC_REG_F50, + SPARC_REG_F52, + SPARC_REG_F54, + SPARC_REG_F56, + SPARC_REG_F58, + SPARC_REG_F60, + SPARC_REG_F62, + SPARC_REG_FCC0, // Floating condition codes + SPARC_REG_FCC1, + SPARC_REG_FCC2, + SPARC_REG_FCC3, + SPARC_REG_FP, + SPARC_REG_G0, + SPARC_REG_G1, + SPARC_REG_G2, + SPARC_REG_G3, + SPARC_REG_G4, + SPARC_REG_G5, + SPARC_REG_G6, + SPARC_REG_G7, + SPARC_REG_I0, + SPARC_REG_I1, + SPARC_REG_I2, + SPARC_REG_I3, + SPARC_REG_I4, + SPARC_REG_I5, + SPARC_REG_I7, + SPARC_REG_ICC, // Integer condition codes + SPARC_REG_L0, + SPARC_REG_L1, + SPARC_REG_L2, + SPARC_REG_L3, + SPARC_REG_L4, + SPARC_REG_L5, + SPARC_REG_L6, + SPARC_REG_L7, + SPARC_REG_O0, + SPARC_REG_O1, + SPARC_REG_O2, + SPARC_REG_O3, + SPARC_REG_O4, + SPARC_REG_O5, + SPARC_REG_O7, + SPARC_REG_SP, + SPARC_REG_Y, + + // special register + SPARC_REG_XCC, + + SPARC_REG_ENDING, // <-- mark the end of the list of registers + + // extras + SPARC_REG_O6 = SPARC_REG_SP, + SPARC_REG_I6 = SPARC_REG_FP, +} sparc_reg; + +//> SPARC instruction +typedef enum sparc_insn { + SPARC_INS_INVALID = 0, + + SPARC_INS_ADDCC, + SPARC_INS_ADDX, + SPARC_INS_ADDXCC, + SPARC_INS_ADDXC, + SPARC_INS_ADDXCCC, + SPARC_INS_ADD, + SPARC_INS_ALIGNADDR, + SPARC_INS_ALIGNADDRL, + SPARC_INS_ANDCC, + SPARC_INS_ANDNCC, + SPARC_INS_ANDN, + SPARC_INS_AND, + SPARC_INS_ARRAY16, + SPARC_INS_ARRAY32, + SPARC_INS_ARRAY8, + SPARC_INS_B, + SPARC_INS_JMP, + SPARC_INS_BMASK, + SPARC_INS_FB, + SPARC_INS_BRGEZ, + SPARC_INS_BRGZ, + SPARC_INS_BRLEZ, + SPARC_INS_BRLZ, + SPARC_INS_BRNZ, + SPARC_INS_BRZ, + SPARC_INS_BSHUFFLE, + SPARC_INS_CALL, + SPARC_INS_CASX, + SPARC_INS_CAS, + SPARC_INS_CMASK16, + SPARC_INS_CMASK32, + SPARC_INS_CMASK8, + SPARC_INS_CMP, + SPARC_INS_EDGE16, + SPARC_INS_EDGE16L, + SPARC_INS_EDGE16LN, + SPARC_INS_EDGE16N, + SPARC_INS_EDGE32, + SPARC_INS_EDGE32L, + SPARC_INS_EDGE32LN, + SPARC_INS_EDGE32N, + SPARC_INS_EDGE8, + SPARC_INS_EDGE8L, + SPARC_INS_EDGE8LN, + SPARC_INS_EDGE8N, + SPARC_INS_FABSD, + SPARC_INS_FABSQ, + SPARC_INS_FABSS, + SPARC_INS_FADDD, + SPARC_INS_FADDQ, + SPARC_INS_FADDS, + SPARC_INS_FALIGNDATA, + SPARC_INS_FAND, + SPARC_INS_FANDNOT1, + SPARC_INS_FANDNOT1S, + SPARC_INS_FANDNOT2, + SPARC_INS_FANDNOT2S, + SPARC_INS_FANDS, + SPARC_INS_FCHKSM16, + SPARC_INS_FCMPD, + SPARC_INS_FCMPEQ16, + SPARC_INS_FCMPEQ32, + SPARC_INS_FCMPGT16, + SPARC_INS_FCMPGT32, + SPARC_INS_FCMPLE16, + SPARC_INS_FCMPLE32, + SPARC_INS_FCMPNE16, + SPARC_INS_FCMPNE32, + SPARC_INS_FCMPQ, + SPARC_INS_FCMPS, + SPARC_INS_FDIVD, + SPARC_INS_FDIVQ, + SPARC_INS_FDIVS, + SPARC_INS_FDMULQ, + SPARC_INS_FDTOI, + SPARC_INS_FDTOQ, + SPARC_INS_FDTOS, + SPARC_INS_FDTOX, + SPARC_INS_FEXPAND, + SPARC_INS_FHADDD, + SPARC_INS_FHADDS, + SPARC_INS_FHSUBD, + SPARC_INS_FHSUBS, + SPARC_INS_FITOD, + SPARC_INS_FITOQ, + SPARC_INS_FITOS, + SPARC_INS_FLCMPD, + SPARC_INS_FLCMPS, + SPARC_INS_FLUSHW, + SPARC_INS_FMEAN16, + SPARC_INS_FMOVD, + SPARC_INS_FMOVQ, + SPARC_INS_FMOVRDGEZ, + SPARC_INS_FMOVRQGEZ, + SPARC_INS_FMOVRSGEZ, + SPARC_INS_FMOVRDGZ, + SPARC_INS_FMOVRQGZ, + SPARC_INS_FMOVRSGZ, + SPARC_INS_FMOVRDLEZ, + SPARC_INS_FMOVRQLEZ, + SPARC_INS_FMOVRSLEZ, + SPARC_INS_FMOVRDLZ, + SPARC_INS_FMOVRQLZ, + SPARC_INS_FMOVRSLZ, + SPARC_INS_FMOVRDNZ, + SPARC_INS_FMOVRQNZ, + SPARC_INS_FMOVRSNZ, + SPARC_INS_FMOVRDZ, + SPARC_INS_FMOVRQZ, + SPARC_INS_FMOVRSZ, + SPARC_INS_FMOVS, + SPARC_INS_FMUL8SUX16, + SPARC_INS_FMUL8ULX16, + SPARC_INS_FMUL8X16, + SPARC_INS_FMUL8X16AL, + SPARC_INS_FMUL8X16AU, + SPARC_INS_FMULD, + SPARC_INS_FMULD8SUX16, + SPARC_INS_FMULD8ULX16, + SPARC_INS_FMULQ, + SPARC_INS_FMULS, + SPARC_INS_FNADDD, + SPARC_INS_FNADDS, + SPARC_INS_FNAND, + SPARC_INS_FNANDS, + SPARC_INS_FNEGD, + SPARC_INS_FNEGQ, + SPARC_INS_FNEGS, + SPARC_INS_FNHADDD, + SPARC_INS_FNHADDS, + SPARC_INS_FNOR, + SPARC_INS_FNORS, + SPARC_INS_FNOT1, + SPARC_INS_FNOT1S, + SPARC_INS_FNOT2, + SPARC_INS_FNOT2S, + SPARC_INS_FONE, + SPARC_INS_FONES, + SPARC_INS_FOR, + SPARC_INS_FORNOT1, + SPARC_INS_FORNOT1S, + SPARC_INS_FORNOT2, + SPARC_INS_FORNOT2S, + SPARC_INS_FORS, + SPARC_INS_FPACK16, + SPARC_INS_FPACK32, + SPARC_INS_FPACKFIX, + SPARC_INS_FPADD16, + SPARC_INS_FPADD16S, + SPARC_INS_FPADD32, + SPARC_INS_FPADD32S, + SPARC_INS_FPADD64, + SPARC_INS_FPMERGE, + SPARC_INS_FPSUB16, + SPARC_INS_FPSUB16S, + SPARC_INS_FPSUB32, + SPARC_INS_FPSUB32S, + SPARC_INS_FQTOD, + SPARC_INS_FQTOI, + SPARC_INS_FQTOS, + SPARC_INS_FQTOX, + SPARC_INS_FSLAS16, + SPARC_INS_FSLAS32, + SPARC_INS_FSLL16, + SPARC_INS_FSLL32, + SPARC_INS_FSMULD, + SPARC_INS_FSQRTD, + SPARC_INS_FSQRTQ, + SPARC_INS_FSQRTS, + SPARC_INS_FSRA16, + SPARC_INS_FSRA32, + SPARC_INS_FSRC1, + SPARC_INS_FSRC1S, + SPARC_INS_FSRC2, + SPARC_INS_FSRC2S, + SPARC_INS_FSRL16, + SPARC_INS_FSRL32, + SPARC_INS_FSTOD, + SPARC_INS_FSTOI, + SPARC_INS_FSTOQ, + SPARC_INS_FSTOX, + SPARC_INS_FSUBD, + SPARC_INS_FSUBQ, + SPARC_INS_FSUBS, + SPARC_INS_FXNOR, + SPARC_INS_FXNORS, + SPARC_INS_FXOR, + SPARC_INS_FXORS, + SPARC_INS_FXTOD, + SPARC_INS_FXTOQ, + SPARC_INS_FXTOS, + SPARC_INS_FZERO, + SPARC_INS_FZEROS, + SPARC_INS_JMPL, + SPARC_INS_LDD, + SPARC_INS_LD, + SPARC_INS_LDQ, + SPARC_INS_LDSB, + SPARC_INS_LDSH, + SPARC_INS_LDSW, + SPARC_INS_LDUB, + SPARC_INS_LDUH, + SPARC_INS_LDX, + SPARC_INS_LZCNT, + SPARC_INS_MEMBAR, + SPARC_INS_MOVDTOX, + SPARC_INS_MOV, + SPARC_INS_MOVRGEZ, + SPARC_INS_MOVRGZ, + SPARC_INS_MOVRLEZ, + SPARC_INS_MOVRLZ, + SPARC_INS_MOVRNZ, + SPARC_INS_MOVRZ, + SPARC_INS_MOVSTOSW, + SPARC_INS_MOVSTOUW, + SPARC_INS_MULX, + SPARC_INS_NOP, + SPARC_INS_ORCC, + SPARC_INS_ORNCC, + SPARC_INS_ORN, + SPARC_INS_OR, + SPARC_INS_PDIST, + SPARC_INS_PDISTN, + SPARC_INS_POPC, + SPARC_INS_RD, + SPARC_INS_RESTORE, + SPARC_INS_RETT, + SPARC_INS_SAVE, + SPARC_INS_SDIVCC, + SPARC_INS_SDIVX, + SPARC_INS_SDIV, + SPARC_INS_SETHI, + SPARC_INS_SHUTDOWN, + SPARC_INS_SIAM, + SPARC_INS_SLLX, + SPARC_INS_SLL, + SPARC_INS_SMULCC, + SPARC_INS_SMUL, + SPARC_INS_SRAX, + SPARC_INS_SRA, + SPARC_INS_SRLX, + SPARC_INS_SRL, + SPARC_INS_STBAR, + SPARC_INS_STB, + SPARC_INS_STD, + SPARC_INS_ST, + SPARC_INS_STH, + SPARC_INS_STQ, + SPARC_INS_STX, + SPARC_INS_SUBCC, + SPARC_INS_SUBX, + SPARC_INS_SUBXCC, + SPARC_INS_SUB, + SPARC_INS_SWAP, + SPARC_INS_TADDCCTV, + SPARC_INS_TADDCC, + SPARC_INS_T, + SPARC_INS_TSUBCCTV, + SPARC_INS_TSUBCC, + SPARC_INS_UDIVCC, + SPARC_INS_UDIVX, + SPARC_INS_UDIV, + SPARC_INS_UMULCC, + SPARC_INS_UMULXHI, + SPARC_INS_UMUL, + SPARC_INS_UNIMP, + SPARC_INS_FCMPED, + SPARC_INS_FCMPEQ, + SPARC_INS_FCMPES, + SPARC_INS_WR, + SPARC_INS_XMULX, + SPARC_INS_XMULXHI, + SPARC_INS_XNORCC, + SPARC_INS_XNOR, + SPARC_INS_XORCC, + SPARC_INS_XOR, + + // alias instructions + SPARC_INS_RET, + SPARC_INS_RETL, + + SPARC_INS_ENDING, // <-- mark the end of the list of instructions +} sparc_insn; + +//> Group of SPARC instructions +typedef enum sparc_insn_group { + SPARC_GRP_INVALID = 0, // = CS_GRP_INVALID + + //> Generic groups + // all jump instructions (conditional+direct+indirect jumps) + SPARC_GRP_JUMP, // = CS_GRP_JUMP + + //> Architecture-specific groups + SPARC_GRP_HARDQUAD = 128, + SPARC_GRP_V9, + SPARC_GRP_VIS, + SPARC_GRP_VIS2, + SPARC_GRP_VIS3, + SPARC_GRP_32BIT, + SPARC_GRP_64BIT, + + SPARC_GRP_ENDING, // <-- mark the end of the list of groups +} sparc_insn_group; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/systemz.h b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/systemz.h new file mode 100755 index 0000000..3020bd7 --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/systemz.h @@ -0,0 +1,832 @@ +#ifndef CAPSTONE_SYSTEMZ_H +#define CAPSTONE_SYSTEMZ_H + +/* Capstone Disassembly Engine */ +/* By Nguyen Anh Quynh , 2014 */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined(_MSC_VER) || !defined(_KERNEL_MODE) +#include +#endif + +#include "platform.h" + +#ifdef _MSC_VER +#pragma warning(disable:4201) +#endif + +//> Enums corresponding to SystemZ condition codes +typedef enum sysz_cc { + SYSZ_CC_INVALID = 0, // invalid CC (default) + + SYSZ_CC_O, + SYSZ_CC_H, + SYSZ_CC_NLE, + SYSZ_CC_L, + SYSZ_CC_NHE, + SYSZ_CC_LH, + SYSZ_CC_NE, + SYSZ_CC_E, + SYSZ_CC_NLH, + SYSZ_CC_HE, + SYSZ_CC_NL, + SYSZ_CC_LE, + SYSZ_CC_NH, + SYSZ_CC_NO, +} sysz_cc; + +//> Operand type for instruction's operands +typedef enum sysz_op_type { + SYSZ_OP_INVALID = 0, // = CS_OP_INVALID (Uninitialized). + SYSZ_OP_REG, // = CS_OP_REG (Register operand). + SYSZ_OP_IMM, // = CS_OP_IMM (Immediate operand). + SYSZ_OP_MEM, // = CS_OP_MEM (Memory operand). + SYSZ_OP_ACREG = 64, // Access register operand. +} sysz_op_type; + +// Instruction's operand referring to memory +// This is associated with SYSZ_OP_MEM operand type above +typedef struct sysz_op_mem { + uint8_t base; // base register + uint8_t index; // index register + uint64_t length; // BDLAddr operand + int64_t disp; // displacement/offset value +} sysz_op_mem; + +// Instruction operand +typedef struct cs_sysz_op { + sysz_op_type type; // operand type + union { + unsigned int reg; // register value for REG operand + int64_t imm; // immediate value for IMM operand + sysz_op_mem mem; // base/disp value for MEM operand + }; +} cs_sysz_op; + +// Instruction structure +typedef struct cs_sysz { + sysz_cc cc; // Code condition + // Number of operands of this instruction, + // or 0 when instruction has no operand. + uint8_t op_count; + cs_sysz_op operands[6]; // operands for this instruction. +} cs_sysz; + +//> SystemZ registers +typedef enum sysz_reg { + SYSZ_REG_INVALID = 0, + + SYSZ_REG_0, + SYSZ_REG_1, + SYSZ_REG_2, + SYSZ_REG_3, + SYSZ_REG_4, + SYSZ_REG_5, + SYSZ_REG_6, + SYSZ_REG_7, + SYSZ_REG_8, + SYSZ_REG_9, + SYSZ_REG_10, + SYSZ_REG_11, + SYSZ_REG_12, + SYSZ_REG_13, + SYSZ_REG_14, + SYSZ_REG_15, + SYSZ_REG_CC, + SYSZ_REG_F0, + SYSZ_REG_F1, + SYSZ_REG_F2, + SYSZ_REG_F3, + SYSZ_REG_F4, + SYSZ_REG_F5, + SYSZ_REG_F6, + SYSZ_REG_F7, + SYSZ_REG_F8, + SYSZ_REG_F9, + SYSZ_REG_F10, + SYSZ_REG_F11, + SYSZ_REG_F12, + SYSZ_REG_F13, + SYSZ_REG_F14, + SYSZ_REG_F15, + + SYSZ_REG_R0L, + + SYSZ_REG_ENDING, +} sysz_reg; + +//> SystemZ instruction +typedef enum sysz_insn { + SYSZ_INS_INVALID = 0, + + SYSZ_INS_A, + SYSZ_INS_ADB, + SYSZ_INS_ADBR, + SYSZ_INS_AEB, + SYSZ_INS_AEBR, + SYSZ_INS_AFI, + SYSZ_INS_AG, + SYSZ_INS_AGF, + SYSZ_INS_AGFI, + SYSZ_INS_AGFR, + SYSZ_INS_AGHI, + SYSZ_INS_AGHIK, + SYSZ_INS_AGR, + SYSZ_INS_AGRK, + SYSZ_INS_AGSI, + SYSZ_INS_AH, + SYSZ_INS_AHI, + SYSZ_INS_AHIK, + SYSZ_INS_AHY, + SYSZ_INS_AIH, + SYSZ_INS_AL, + SYSZ_INS_ALC, + SYSZ_INS_ALCG, + SYSZ_INS_ALCGR, + SYSZ_INS_ALCR, + SYSZ_INS_ALFI, + SYSZ_INS_ALG, + SYSZ_INS_ALGF, + SYSZ_INS_ALGFI, + SYSZ_INS_ALGFR, + SYSZ_INS_ALGHSIK, + SYSZ_INS_ALGR, + SYSZ_INS_ALGRK, + SYSZ_INS_ALHSIK, + SYSZ_INS_ALR, + SYSZ_INS_ALRK, + SYSZ_INS_ALY, + SYSZ_INS_AR, + SYSZ_INS_ARK, + SYSZ_INS_ASI, + SYSZ_INS_AXBR, + SYSZ_INS_AY, + SYSZ_INS_BCR, + SYSZ_INS_BRC, + SYSZ_INS_BRCL, + SYSZ_INS_CGIJ, + SYSZ_INS_CGRJ, + SYSZ_INS_CIJ, + SYSZ_INS_CLGIJ, + SYSZ_INS_CLGRJ, + SYSZ_INS_CLIJ, + SYSZ_INS_CLRJ, + SYSZ_INS_CRJ, + SYSZ_INS_BER, + SYSZ_INS_JE, + SYSZ_INS_JGE, + SYSZ_INS_LOCE, + SYSZ_INS_LOCGE, + SYSZ_INS_LOCGRE, + SYSZ_INS_LOCRE, + SYSZ_INS_STOCE, + SYSZ_INS_STOCGE, + SYSZ_INS_BHR, + SYSZ_INS_BHER, + SYSZ_INS_JHE, + SYSZ_INS_JGHE, + SYSZ_INS_LOCHE, + SYSZ_INS_LOCGHE, + SYSZ_INS_LOCGRHE, + SYSZ_INS_LOCRHE, + SYSZ_INS_STOCHE, + SYSZ_INS_STOCGHE, + SYSZ_INS_JH, + SYSZ_INS_JGH, + SYSZ_INS_LOCH, + SYSZ_INS_LOCGH, + SYSZ_INS_LOCGRH, + SYSZ_INS_LOCRH, + SYSZ_INS_STOCH, + SYSZ_INS_STOCGH, + SYSZ_INS_CGIJNLH, + SYSZ_INS_CGRJNLH, + SYSZ_INS_CIJNLH, + SYSZ_INS_CLGIJNLH, + SYSZ_INS_CLGRJNLH, + SYSZ_INS_CLIJNLH, + SYSZ_INS_CLRJNLH, + SYSZ_INS_CRJNLH, + SYSZ_INS_CGIJE, + SYSZ_INS_CGRJE, + SYSZ_INS_CIJE, + SYSZ_INS_CLGIJE, + SYSZ_INS_CLGRJE, + SYSZ_INS_CLIJE, + SYSZ_INS_CLRJE, + SYSZ_INS_CRJE, + SYSZ_INS_CGIJNLE, + SYSZ_INS_CGRJNLE, + SYSZ_INS_CIJNLE, + SYSZ_INS_CLGIJNLE, + SYSZ_INS_CLGRJNLE, + SYSZ_INS_CLIJNLE, + SYSZ_INS_CLRJNLE, + SYSZ_INS_CRJNLE, + SYSZ_INS_CGIJH, + SYSZ_INS_CGRJH, + SYSZ_INS_CIJH, + SYSZ_INS_CLGIJH, + SYSZ_INS_CLGRJH, + SYSZ_INS_CLIJH, + SYSZ_INS_CLRJH, + SYSZ_INS_CRJH, + SYSZ_INS_CGIJNL, + SYSZ_INS_CGRJNL, + SYSZ_INS_CIJNL, + SYSZ_INS_CLGIJNL, + SYSZ_INS_CLGRJNL, + SYSZ_INS_CLIJNL, + SYSZ_INS_CLRJNL, + SYSZ_INS_CRJNL, + SYSZ_INS_CGIJHE, + SYSZ_INS_CGRJHE, + SYSZ_INS_CIJHE, + SYSZ_INS_CLGIJHE, + SYSZ_INS_CLGRJHE, + SYSZ_INS_CLIJHE, + SYSZ_INS_CLRJHE, + SYSZ_INS_CRJHE, + SYSZ_INS_CGIJNHE, + SYSZ_INS_CGRJNHE, + SYSZ_INS_CIJNHE, + SYSZ_INS_CLGIJNHE, + SYSZ_INS_CLGRJNHE, + SYSZ_INS_CLIJNHE, + SYSZ_INS_CLRJNHE, + SYSZ_INS_CRJNHE, + SYSZ_INS_CGIJL, + SYSZ_INS_CGRJL, + SYSZ_INS_CIJL, + SYSZ_INS_CLGIJL, + SYSZ_INS_CLGRJL, + SYSZ_INS_CLIJL, + SYSZ_INS_CLRJL, + SYSZ_INS_CRJL, + SYSZ_INS_CGIJNH, + SYSZ_INS_CGRJNH, + SYSZ_INS_CIJNH, + SYSZ_INS_CLGIJNH, + SYSZ_INS_CLGRJNH, + SYSZ_INS_CLIJNH, + SYSZ_INS_CLRJNH, + SYSZ_INS_CRJNH, + SYSZ_INS_CGIJLE, + SYSZ_INS_CGRJLE, + SYSZ_INS_CIJLE, + SYSZ_INS_CLGIJLE, + SYSZ_INS_CLGRJLE, + SYSZ_INS_CLIJLE, + SYSZ_INS_CLRJLE, + SYSZ_INS_CRJLE, + SYSZ_INS_CGIJNE, + SYSZ_INS_CGRJNE, + SYSZ_INS_CIJNE, + SYSZ_INS_CLGIJNE, + SYSZ_INS_CLGRJNE, + SYSZ_INS_CLIJNE, + SYSZ_INS_CLRJNE, + SYSZ_INS_CRJNE, + SYSZ_INS_CGIJLH, + SYSZ_INS_CGRJLH, + SYSZ_INS_CIJLH, + SYSZ_INS_CLGIJLH, + SYSZ_INS_CLGRJLH, + SYSZ_INS_CLIJLH, + SYSZ_INS_CLRJLH, + SYSZ_INS_CRJLH, + SYSZ_INS_BLR, + SYSZ_INS_BLER, + SYSZ_INS_JLE, + SYSZ_INS_JGLE, + SYSZ_INS_LOCLE, + SYSZ_INS_LOCGLE, + SYSZ_INS_LOCGRLE, + SYSZ_INS_LOCRLE, + SYSZ_INS_STOCLE, + SYSZ_INS_STOCGLE, + SYSZ_INS_BLHR, + SYSZ_INS_JLH, + SYSZ_INS_JGLH, + SYSZ_INS_LOCLH, + SYSZ_INS_LOCGLH, + SYSZ_INS_LOCGRLH, + SYSZ_INS_LOCRLH, + SYSZ_INS_STOCLH, + SYSZ_INS_STOCGLH, + SYSZ_INS_JL, + SYSZ_INS_JGL, + SYSZ_INS_LOCL, + SYSZ_INS_LOCGL, + SYSZ_INS_LOCGRL, + SYSZ_INS_LOCRL, + SYSZ_INS_LOC, + SYSZ_INS_LOCG, + SYSZ_INS_LOCGR, + SYSZ_INS_LOCR, + SYSZ_INS_STOCL, + SYSZ_INS_STOCGL, + SYSZ_INS_BNER, + SYSZ_INS_JNE, + SYSZ_INS_JGNE, + SYSZ_INS_LOCNE, + SYSZ_INS_LOCGNE, + SYSZ_INS_LOCGRNE, + SYSZ_INS_LOCRNE, + SYSZ_INS_STOCNE, + SYSZ_INS_STOCGNE, + SYSZ_INS_BNHR, + SYSZ_INS_BNHER, + SYSZ_INS_JNHE, + SYSZ_INS_JGNHE, + SYSZ_INS_LOCNHE, + SYSZ_INS_LOCGNHE, + SYSZ_INS_LOCGRNHE, + SYSZ_INS_LOCRNHE, + SYSZ_INS_STOCNHE, + SYSZ_INS_STOCGNHE, + SYSZ_INS_JNH, + SYSZ_INS_JGNH, + SYSZ_INS_LOCNH, + SYSZ_INS_LOCGNH, + SYSZ_INS_LOCGRNH, + SYSZ_INS_LOCRNH, + SYSZ_INS_STOCNH, + SYSZ_INS_STOCGNH, + SYSZ_INS_BNLR, + SYSZ_INS_BNLER, + SYSZ_INS_JNLE, + SYSZ_INS_JGNLE, + SYSZ_INS_LOCNLE, + SYSZ_INS_LOCGNLE, + SYSZ_INS_LOCGRNLE, + SYSZ_INS_LOCRNLE, + SYSZ_INS_STOCNLE, + SYSZ_INS_STOCGNLE, + SYSZ_INS_BNLHR, + SYSZ_INS_JNLH, + SYSZ_INS_JGNLH, + SYSZ_INS_LOCNLH, + SYSZ_INS_LOCGNLH, + SYSZ_INS_LOCGRNLH, + SYSZ_INS_LOCRNLH, + SYSZ_INS_STOCNLH, + SYSZ_INS_STOCGNLH, + SYSZ_INS_JNL, + SYSZ_INS_JGNL, + SYSZ_INS_LOCNL, + SYSZ_INS_LOCGNL, + SYSZ_INS_LOCGRNL, + SYSZ_INS_LOCRNL, + SYSZ_INS_STOCNL, + SYSZ_INS_STOCGNL, + SYSZ_INS_BNOR, + SYSZ_INS_JNO, + SYSZ_INS_JGNO, + SYSZ_INS_LOCNO, + SYSZ_INS_LOCGNO, + SYSZ_INS_LOCGRNO, + SYSZ_INS_LOCRNO, + SYSZ_INS_STOCNO, + SYSZ_INS_STOCGNO, + SYSZ_INS_BOR, + SYSZ_INS_JO, + SYSZ_INS_JGO, + SYSZ_INS_LOCO, + SYSZ_INS_LOCGO, + SYSZ_INS_LOCGRO, + SYSZ_INS_LOCRO, + SYSZ_INS_STOCO, + SYSZ_INS_STOCGO, + SYSZ_INS_STOC, + SYSZ_INS_STOCG, + SYSZ_INS_BASR, + SYSZ_INS_BR, + SYSZ_INS_BRAS, + SYSZ_INS_BRASL, + SYSZ_INS_J, + SYSZ_INS_JG, + SYSZ_INS_BRCT, + SYSZ_INS_BRCTG, + SYSZ_INS_C, + SYSZ_INS_CDB, + SYSZ_INS_CDBR, + SYSZ_INS_CDFBR, + SYSZ_INS_CDGBR, + SYSZ_INS_CDLFBR, + SYSZ_INS_CDLGBR, + SYSZ_INS_CEB, + SYSZ_INS_CEBR, + SYSZ_INS_CEFBR, + SYSZ_INS_CEGBR, + SYSZ_INS_CELFBR, + SYSZ_INS_CELGBR, + SYSZ_INS_CFDBR, + SYSZ_INS_CFEBR, + SYSZ_INS_CFI, + SYSZ_INS_CFXBR, + SYSZ_INS_CG, + SYSZ_INS_CGDBR, + SYSZ_INS_CGEBR, + SYSZ_INS_CGF, + SYSZ_INS_CGFI, + SYSZ_INS_CGFR, + SYSZ_INS_CGFRL, + SYSZ_INS_CGH, + SYSZ_INS_CGHI, + SYSZ_INS_CGHRL, + SYSZ_INS_CGHSI, + SYSZ_INS_CGR, + SYSZ_INS_CGRL, + SYSZ_INS_CGXBR, + SYSZ_INS_CH, + SYSZ_INS_CHF, + SYSZ_INS_CHHSI, + SYSZ_INS_CHI, + SYSZ_INS_CHRL, + SYSZ_INS_CHSI, + SYSZ_INS_CHY, + SYSZ_INS_CIH, + SYSZ_INS_CL, + SYSZ_INS_CLC, + SYSZ_INS_CLFDBR, + SYSZ_INS_CLFEBR, + SYSZ_INS_CLFHSI, + SYSZ_INS_CLFI, + SYSZ_INS_CLFXBR, + SYSZ_INS_CLG, + SYSZ_INS_CLGDBR, + SYSZ_INS_CLGEBR, + SYSZ_INS_CLGF, + SYSZ_INS_CLGFI, + SYSZ_INS_CLGFR, + SYSZ_INS_CLGFRL, + SYSZ_INS_CLGHRL, + SYSZ_INS_CLGHSI, + SYSZ_INS_CLGR, + SYSZ_INS_CLGRL, + SYSZ_INS_CLGXBR, + SYSZ_INS_CLHF, + SYSZ_INS_CLHHSI, + SYSZ_INS_CLHRL, + SYSZ_INS_CLI, + SYSZ_INS_CLIH, + SYSZ_INS_CLIY, + SYSZ_INS_CLR, + SYSZ_INS_CLRL, + SYSZ_INS_CLST, + SYSZ_INS_CLY, + SYSZ_INS_CPSDR, + SYSZ_INS_CR, + SYSZ_INS_CRL, + SYSZ_INS_CS, + SYSZ_INS_CSG, + SYSZ_INS_CSY, + SYSZ_INS_CXBR, + SYSZ_INS_CXFBR, + SYSZ_INS_CXGBR, + SYSZ_INS_CXLFBR, + SYSZ_INS_CXLGBR, + SYSZ_INS_CY, + SYSZ_INS_DDB, + SYSZ_INS_DDBR, + SYSZ_INS_DEB, + SYSZ_INS_DEBR, + SYSZ_INS_DL, + SYSZ_INS_DLG, + SYSZ_INS_DLGR, + SYSZ_INS_DLR, + SYSZ_INS_DSG, + SYSZ_INS_DSGF, + SYSZ_INS_DSGFR, + SYSZ_INS_DSGR, + SYSZ_INS_DXBR, + SYSZ_INS_EAR, + SYSZ_INS_FIDBR, + SYSZ_INS_FIDBRA, + SYSZ_INS_FIEBR, + SYSZ_INS_FIEBRA, + SYSZ_INS_FIXBR, + SYSZ_INS_FIXBRA, + SYSZ_INS_FLOGR, + SYSZ_INS_IC, + SYSZ_INS_ICY, + SYSZ_INS_IIHF, + SYSZ_INS_IIHH, + SYSZ_INS_IIHL, + SYSZ_INS_IILF, + SYSZ_INS_IILH, + SYSZ_INS_IILL, + SYSZ_INS_IPM, + SYSZ_INS_L, + SYSZ_INS_LA, + SYSZ_INS_LAA, + SYSZ_INS_LAAG, + SYSZ_INS_LAAL, + SYSZ_INS_LAALG, + SYSZ_INS_LAN, + SYSZ_INS_LANG, + SYSZ_INS_LAO, + SYSZ_INS_LAOG, + SYSZ_INS_LARL, + SYSZ_INS_LAX, + SYSZ_INS_LAXG, + SYSZ_INS_LAY, + SYSZ_INS_LB, + SYSZ_INS_LBH, + SYSZ_INS_LBR, + SYSZ_INS_LCDBR, + SYSZ_INS_LCEBR, + SYSZ_INS_LCGFR, + SYSZ_INS_LCGR, + SYSZ_INS_LCR, + SYSZ_INS_LCXBR, + SYSZ_INS_LD, + SYSZ_INS_LDEB, + SYSZ_INS_LDEBR, + SYSZ_INS_LDGR, + SYSZ_INS_LDR, + SYSZ_INS_LDXBR, + SYSZ_INS_LDXBRA, + SYSZ_INS_LDY, + SYSZ_INS_LE, + SYSZ_INS_LEDBR, + SYSZ_INS_LEDBRA, + SYSZ_INS_LER, + SYSZ_INS_LEXBR, + SYSZ_INS_LEXBRA, + SYSZ_INS_LEY, + SYSZ_INS_LFH, + SYSZ_INS_LG, + SYSZ_INS_LGB, + SYSZ_INS_LGBR, + SYSZ_INS_LGDR, + SYSZ_INS_LGF, + SYSZ_INS_LGFI, + SYSZ_INS_LGFR, + SYSZ_INS_LGFRL, + SYSZ_INS_LGH, + SYSZ_INS_LGHI, + SYSZ_INS_LGHR, + SYSZ_INS_LGHRL, + SYSZ_INS_LGR, + SYSZ_INS_LGRL, + SYSZ_INS_LH, + SYSZ_INS_LHH, + SYSZ_INS_LHI, + SYSZ_INS_LHR, + SYSZ_INS_LHRL, + SYSZ_INS_LHY, + SYSZ_INS_LLC, + SYSZ_INS_LLCH, + SYSZ_INS_LLCR, + SYSZ_INS_LLGC, + SYSZ_INS_LLGCR, + SYSZ_INS_LLGF, + SYSZ_INS_LLGFR, + SYSZ_INS_LLGFRL, + SYSZ_INS_LLGH, + SYSZ_INS_LLGHR, + SYSZ_INS_LLGHRL, + SYSZ_INS_LLH, + SYSZ_INS_LLHH, + SYSZ_INS_LLHR, + SYSZ_INS_LLHRL, + SYSZ_INS_LLIHF, + SYSZ_INS_LLIHH, + SYSZ_INS_LLIHL, + SYSZ_INS_LLILF, + SYSZ_INS_LLILH, + SYSZ_INS_LLILL, + SYSZ_INS_LMG, + SYSZ_INS_LNDBR, + SYSZ_INS_LNEBR, + SYSZ_INS_LNGFR, + SYSZ_INS_LNGR, + SYSZ_INS_LNR, + SYSZ_INS_LNXBR, + SYSZ_INS_LPDBR, + SYSZ_INS_LPEBR, + SYSZ_INS_LPGFR, + SYSZ_INS_LPGR, + SYSZ_INS_LPR, + SYSZ_INS_LPXBR, + SYSZ_INS_LR, + SYSZ_INS_LRL, + SYSZ_INS_LRV, + SYSZ_INS_LRVG, + SYSZ_INS_LRVGR, + SYSZ_INS_LRVR, + SYSZ_INS_LT, + SYSZ_INS_LTDBR, + SYSZ_INS_LTEBR, + SYSZ_INS_LTG, + SYSZ_INS_LTGF, + SYSZ_INS_LTGFR, + SYSZ_INS_LTGR, + SYSZ_INS_LTR, + SYSZ_INS_LTXBR, + SYSZ_INS_LXDB, + SYSZ_INS_LXDBR, + SYSZ_INS_LXEB, + SYSZ_INS_LXEBR, + SYSZ_INS_LXR, + SYSZ_INS_LY, + SYSZ_INS_LZDR, + SYSZ_INS_LZER, + SYSZ_INS_LZXR, + SYSZ_INS_MADB, + SYSZ_INS_MADBR, + SYSZ_INS_MAEB, + SYSZ_INS_MAEBR, + SYSZ_INS_MDB, + SYSZ_INS_MDBR, + SYSZ_INS_MDEB, + SYSZ_INS_MDEBR, + SYSZ_INS_MEEB, + SYSZ_INS_MEEBR, + SYSZ_INS_MGHI, + SYSZ_INS_MH, + SYSZ_INS_MHI, + SYSZ_INS_MHY, + SYSZ_INS_MLG, + SYSZ_INS_MLGR, + SYSZ_INS_MS, + SYSZ_INS_MSDB, + SYSZ_INS_MSDBR, + SYSZ_INS_MSEB, + SYSZ_INS_MSEBR, + SYSZ_INS_MSFI, + SYSZ_INS_MSG, + SYSZ_INS_MSGF, + SYSZ_INS_MSGFI, + SYSZ_INS_MSGFR, + SYSZ_INS_MSGR, + SYSZ_INS_MSR, + SYSZ_INS_MSY, + SYSZ_INS_MVC, + SYSZ_INS_MVGHI, + SYSZ_INS_MVHHI, + SYSZ_INS_MVHI, + SYSZ_INS_MVI, + SYSZ_INS_MVIY, + SYSZ_INS_MVST, + SYSZ_INS_MXBR, + SYSZ_INS_MXDB, + SYSZ_INS_MXDBR, + SYSZ_INS_N, + SYSZ_INS_NC, + SYSZ_INS_NG, + SYSZ_INS_NGR, + SYSZ_INS_NGRK, + SYSZ_INS_NI, + SYSZ_INS_NIHF, + SYSZ_INS_NIHH, + SYSZ_INS_NIHL, + SYSZ_INS_NILF, + SYSZ_INS_NILH, + SYSZ_INS_NILL, + SYSZ_INS_NIY, + SYSZ_INS_NR, + SYSZ_INS_NRK, + SYSZ_INS_NY, + SYSZ_INS_O, + SYSZ_INS_OC, + SYSZ_INS_OG, + SYSZ_INS_OGR, + SYSZ_INS_OGRK, + SYSZ_INS_OI, + SYSZ_INS_OIHF, + SYSZ_INS_OIHH, + SYSZ_INS_OIHL, + SYSZ_INS_OILF, + SYSZ_INS_OILH, + SYSZ_INS_OILL, + SYSZ_INS_OIY, + SYSZ_INS_OR, + SYSZ_INS_ORK, + SYSZ_INS_OY, + SYSZ_INS_PFD, + SYSZ_INS_PFDRL, + SYSZ_INS_RISBG, + SYSZ_INS_RISBHG, + SYSZ_INS_RISBLG, + SYSZ_INS_RLL, + SYSZ_INS_RLLG, + SYSZ_INS_RNSBG, + SYSZ_INS_ROSBG, + SYSZ_INS_RXSBG, + SYSZ_INS_S, + SYSZ_INS_SDB, + SYSZ_INS_SDBR, + SYSZ_INS_SEB, + SYSZ_INS_SEBR, + SYSZ_INS_SG, + SYSZ_INS_SGF, + SYSZ_INS_SGFR, + SYSZ_INS_SGR, + SYSZ_INS_SGRK, + SYSZ_INS_SH, + SYSZ_INS_SHY, + SYSZ_INS_SL, + SYSZ_INS_SLB, + SYSZ_INS_SLBG, + SYSZ_INS_SLBR, + SYSZ_INS_SLFI, + SYSZ_INS_SLG, + SYSZ_INS_SLBGR, + SYSZ_INS_SLGF, + SYSZ_INS_SLGFI, + SYSZ_INS_SLGFR, + SYSZ_INS_SLGR, + SYSZ_INS_SLGRK, + SYSZ_INS_SLL, + SYSZ_INS_SLLG, + SYSZ_INS_SLLK, + SYSZ_INS_SLR, + SYSZ_INS_SLRK, + SYSZ_INS_SLY, + SYSZ_INS_SQDB, + SYSZ_INS_SQDBR, + SYSZ_INS_SQEB, + SYSZ_INS_SQEBR, + SYSZ_INS_SQXBR, + SYSZ_INS_SR, + SYSZ_INS_SRA, + SYSZ_INS_SRAG, + SYSZ_INS_SRAK, + SYSZ_INS_SRK, + SYSZ_INS_SRL, + SYSZ_INS_SRLG, + SYSZ_INS_SRLK, + SYSZ_INS_SRST, + SYSZ_INS_ST, + SYSZ_INS_STC, + SYSZ_INS_STCH, + SYSZ_INS_STCY, + SYSZ_INS_STD, + SYSZ_INS_STDY, + SYSZ_INS_STE, + SYSZ_INS_STEY, + SYSZ_INS_STFH, + SYSZ_INS_STG, + SYSZ_INS_STGRL, + SYSZ_INS_STH, + SYSZ_INS_STHH, + SYSZ_INS_STHRL, + SYSZ_INS_STHY, + SYSZ_INS_STMG, + SYSZ_INS_STRL, + SYSZ_INS_STRV, + SYSZ_INS_STRVG, + SYSZ_INS_STY, + SYSZ_INS_SXBR, + SYSZ_INS_SY, + SYSZ_INS_TM, + SYSZ_INS_TMHH, + SYSZ_INS_TMHL, + SYSZ_INS_TMLH, + SYSZ_INS_TMLL, + SYSZ_INS_TMY, + SYSZ_INS_X, + SYSZ_INS_XC, + SYSZ_INS_XG, + SYSZ_INS_XGR, + SYSZ_INS_XGRK, + SYSZ_INS_XI, + SYSZ_INS_XIHF, + SYSZ_INS_XILF, + SYSZ_INS_XIY, + SYSZ_INS_XR, + SYSZ_INS_XRK, + SYSZ_INS_XY, + + SYSZ_INS_ENDING, // <-- mark the end of the list of instructions +} sysz_insn; + +//> Group of SystemZ instructions +typedef enum sysz_insn_group { + SYSZ_GRP_INVALID = 0, // = CS_GRP_INVALID + + //> Generic groups + // all jump instructions (conditional+direct+indirect jumps) + SYSZ_GRP_JUMP, // = CS_GRP_JUMP + + //> Architecture-specific groups + SYSZ_GRP_DISTINCTOPS = 128, + SYSZ_GRP_FPEXTENSION, + SYSZ_GRP_HIGHWORD, + SYSZ_GRP_INTERLOCKEDACCESS1, + SYSZ_GRP_LOADSTOREONCOND, + + SYSZ_GRP_ENDING, // <-- mark the end of the list of groups +} sysz_insn_group; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/x86.h b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/x86.h new file mode 100755 index 0000000..2dd162b --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/x86.h @@ -0,0 +1,1632 @@ +#ifndef CAPSTONE_X86_H +#define CAPSTONE_X86_H + +/* Capstone Disassembly Engine */ +/* By Nguyen Anh Quynh , 2013-2014 */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined(_MSC_VER) || !defined(_KERNEL_MODE) +#include +#endif + +// Calculate relative address for X86-64, given cs_insn structure +#define X86_REL_ADDR(insn) (((insn).detail->x86.operands[0].type == X86_OP_IMM) \ + ? (uint64_t)((insn).detail->x86.operands[0].imm) \ + : (((insn).address + (insn).size) + (uint64_t)(insn).detail->x86.disp)) + +//> X86 registers +typedef enum x86_reg { + X86_REG_INVALID = 0, + X86_REG_AH, X86_REG_AL, X86_REG_AX, X86_REG_BH, X86_REG_BL, + X86_REG_BP, X86_REG_BPL, X86_REG_BX, X86_REG_CH, X86_REG_CL, + X86_REG_CS, X86_REG_CX, X86_REG_DH, X86_REG_DI, X86_REG_DIL, + X86_REG_DL, X86_REG_DS, X86_REG_DX, X86_REG_EAX, X86_REG_EBP, + X86_REG_EBX, X86_REG_ECX, X86_REG_EDI, X86_REG_EDX, X86_REG_EFLAGS, + X86_REG_EIP, X86_REG_EIZ, X86_REG_ES, X86_REG_ESI, X86_REG_ESP, + X86_REG_FPSW, X86_REG_FS, X86_REG_GS, X86_REG_IP, X86_REG_RAX, + X86_REG_RBP, X86_REG_RBX, X86_REG_RCX, X86_REG_RDI, X86_REG_RDX, + X86_REG_RIP, X86_REG_RIZ, X86_REG_RSI, X86_REG_RSP, X86_REG_SI, + X86_REG_SIL, X86_REG_SP, X86_REG_SPL, X86_REG_SS, X86_REG_CR0, + X86_REG_CR1, X86_REG_CR2, X86_REG_CR3, X86_REG_CR4, X86_REG_CR5, + X86_REG_CR6, X86_REG_CR7, X86_REG_CR8, X86_REG_CR9, X86_REG_CR10, + X86_REG_CR11, X86_REG_CR12, X86_REG_CR13, X86_REG_CR14, X86_REG_CR15, + X86_REG_DR0, X86_REG_DR1, X86_REG_DR2, X86_REG_DR3, X86_REG_DR4, + X86_REG_DR5, X86_REG_DR6, X86_REG_DR7, X86_REG_FP0, X86_REG_FP1, + X86_REG_FP2, X86_REG_FP3, X86_REG_FP4, X86_REG_FP5, X86_REG_FP6, X86_REG_FP7, + X86_REG_K0, X86_REG_K1, X86_REG_K2, X86_REG_K3, X86_REG_K4, + X86_REG_K5, X86_REG_K6, X86_REG_K7, X86_REG_MM0, X86_REG_MM1, + X86_REG_MM2, X86_REG_MM3, X86_REG_MM4, X86_REG_MM5, X86_REG_MM6, + X86_REG_MM7, X86_REG_R8, X86_REG_R9, X86_REG_R10, X86_REG_R11, + X86_REG_R12, X86_REG_R13, X86_REG_R14, X86_REG_R15, + X86_REG_ST0, X86_REG_ST1, X86_REG_ST2, X86_REG_ST3, + X86_REG_ST4, X86_REG_ST5, X86_REG_ST6, X86_REG_ST7, + X86_REG_XMM0, X86_REG_XMM1, X86_REG_XMM2, X86_REG_XMM3, X86_REG_XMM4, + X86_REG_XMM5, X86_REG_XMM6, X86_REG_XMM7, X86_REG_XMM8, X86_REG_XMM9, + X86_REG_XMM10, X86_REG_XMM11, X86_REG_XMM12, X86_REG_XMM13, X86_REG_XMM14, + X86_REG_XMM15, X86_REG_XMM16, X86_REG_XMM17, X86_REG_XMM18, X86_REG_XMM19, + X86_REG_XMM20, X86_REG_XMM21, X86_REG_XMM22, X86_REG_XMM23, X86_REG_XMM24, + X86_REG_XMM25, X86_REG_XMM26, X86_REG_XMM27, X86_REG_XMM28, X86_REG_XMM29, + X86_REG_XMM30, X86_REG_XMM31, X86_REG_YMM0, X86_REG_YMM1, X86_REG_YMM2, + X86_REG_YMM3, X86_REG_YMM4, X86_REG_YMM5, X86_REG_YMM6, X86_REG_YMM7, + X86_REG_YMM8, X86_REG_YMM9, X86_REG_YMM10, X86_REG_YMM11, X86_REG_YMM12, + X86_REG_YMM13, X86_REG_YMM14, X86_REG_YMM15, X86_REG_YMM16, X86_REG_YMM17, + X86_REG_YMM18, X86_REG_YMM19, X86_REG_YMM20, X86_REG_YMM21, X86_REG_YMM22, + X86_REG_YMM23, X86_REG_YMM24, X86_REG_YMM25, X86_REG_YMM26, X86_REG_YMM27, + X86_REG_YMM28, X86_REG_YMM29, X86_REG_YMM30, X86_REG_YMM31, X86_REG_ZMM0, + X86_REG_ZMM1, X86_REG_ZMM2, X86_REG_ZMM3, X86_REG_ZMM4, X86_REG_ZMM5, + X86_REG_ZMM6, X86_REG_ZMM7, X86_REG_ZMM8, X86_REG_ZMM9, X86_REG_ZMM10, + X86_REG_ZMM11, X86_REG_ZMM12, X86_REG_ZMM13, X86_REG_ZMM14, X86_REG_ZMM15, + X86_REG_ZMM16, X86_REG_ZMM17, X86_REG_ZMM18, X86_REG_ZMM19, X86_REG_ZMM20, + X86_REG_ZMM21, X86_REG_ZMM22, X86_REG_ZMM23, X86_REG_ZMM24, X86_REG_ZMM25, + X86_REG_ZMM26, X86_REG_ZMM27, X86_REG_ZMM28, X86_REG_ZMM29, X86_REG_ZMM30, + X86_REG_ZMM31, X86_REG_R8B, X86_REG_R9B, X86_REG_R10B, X86_REG_R11B, + X86_REG_R12B, X86_REG_R13B, X86_REG_R14B, X86_REG_R15B, X86_REG_R8D, + X86_REG_R9D, X86_REG_R10D, X86_REG_R11D, X86_REG_R12D, X86_REG_R13D, + X86_REG_R14D, X86_REG_R15D, X86_REG_R8W, X86_REG_R9W, X86_REG_R10W, + X86_REG_R11W, X86_REG_R12W, X86_REG_R13W, X86_REG_R14W, X86_REG_R15W, + + X86_REG_ENDING // <-- mark the end of the list of registers +} x86_reg; + +//> Operand type for instruction's operands +typedef enum x86_op_type { + X86_OP_INVALID = 0, // = CS_OP_INVALID (Uninitialized). + X86_OP_REG, // = CS_OP_REG (Register operand). + X86_OP_IMM, // = CS_OP_IMM (Immediate operand). + X86_OP_MEM, // = CS_OP_MEM (Memory operand). + X86_OP_FP, // = CS_OP_FP (Floating-Point operand). +} x86_op_type; + +//> AVX broadcast type +typedef enum x86_avx_bcast { + X86_AVX_BCAST_INVALID = 0, // Uninitialized. + X86_AVX_BCAST_2, // AVX512 broadcast type {1to2} + X86_AVX_BCAST_4, // AVX512 broadcast type {1to4} + X86_AVX_BCAST_8, // AVX512 broadcast type {1to8} + X86_AVX_BCAST_16, // AVX512 broadcast type {1to16} +} x86_avx_bcast; + +//> SSE Code Condition type +typedef enum x86_sse_cc { + X86_SSE_CC_INVALID = 0, // Uninitialized. + X86_SSE_CC_EQ, + X86_SSE_CC_LT, + X86_SSE_CC_LE, + X86_SSE_CC_UNORD, + X86_SSE_CC_NEQ, + X86_SSE_CC_NLT, + X86_SSE_CC_NLE, + X86_SSE_CC_ORD, + X86_SSE_CC_EQ_UQ, + X86_SSE_CC_NGE, + X86_SSE_CC_NGT, + X86_SSE_CC_FALSE, + X86_SSE_CC_NEQ_OQ, + X86_SSE_CC_GE, + X86_SSE_CC_GT, + X86_SSE_CC_TRUE, +} x86_sse_cc; + +//> AVX Code Condition type +typedef enum x86_avx_cc { + X86_AVX_CC_INVALID = 0, // Uninitialized. + X86_AVX_CC_EQ, + X86_AVX_CC_LT, + X86_AVX_CC_LE, + X86_AVX_CC_UNORD, + X86_AVX_CC_NEQ, + X86_AVX_CC_NLT, + X86_AVX_CC_NLE, + X86_AVX_CC_ORD, + X86_AVX_CC_EQ_UQ, + X86_AVX_CC_NGE, + X86_AVX_CC_NGT, + X86_AVX_CC_FALSE, + X86_AVX_CC_NEQ_OQ, + X86_AVX_CC_GE, + X86_AVX_CC_GT, + X86_AVX_CC_TRUE, + X86_AVX_CC_EQ_OS, + X86_AVX_CC_LT_OQ, + X86_AVX_CC_LE_OQ, + X86_AVX_CC_UNORD_S, + X86_AVX_CC_NEQ_US, + X86_AVX_CC_NLT_UQ, + X86_AVX_CC_NLE_UQ, + X86_AVX_CC_ORD_S, + X86_AVX_CC_EQ_US, + X86_AVX_CC_NGE_UQ, + X86_AVX_CC_NGT_UQ, + X86_AVX_CC_FALSE_OS, + X86_AVX_CC_NEQ_OS, + X86_AVX_CC_GE_OQ, + X86_AVX_CC_GT_OQ, + X86_AVX_CC_TRUE_US, +} x86_avx_cc; + +//> AVX static rounding mode type +typedef enum x86_avx_rm { + X86_AVX_RM_INVALID = 0, // Uninitialized. + X86_AVX_RM_RN, // Round to nearest + X86_AVX_RM_RD, // Round down + X86_AVX_RM_RU, // Round up + X86_AVX_RM_RZ, // Round toward zero +} x86_avx_rm; + +//> Instruction prefixes - to be used in cs_x86.prefix[] +typedef enum x86_prefix { + X86_PREFIX_LOCK = 0xf0, // lock (cs_x86.prefix[0] + X86_PREFIX_REP = 0xf3, // rep (cs_x86.prefix[0] + X86_PREFIX_REPNE = 0xf2, // repne (cs_x86.prefix[0] + + X86_PREFIX_CS = 0x2e, // segment override CS (cs_x86.prefix[1] + X86_PREFIX_SS = 0x36, // segment override SS (cs_x86.prefix[1] + X86_PREFIX_DS = 0x3e, // segment override DS (cs_x86.prefix[1] + X86_PREFIX_ES = 0x26, // segment override ES (cs_x86.prefix[1] + X86_PREFIX_FS = 0x64, // segment override FS (cs_x86.prefix[1] + X86_PREFIX_GS = 0x65, // segment override GS (cs_x86.prefix[1] + + X86_PREFIX_OPSIZE = 0x66, // operand-size override (cs_x86.prefix[2] + X86_PREFIX_ADDRSIZE = 0x67, // address-size override (cs_x86.prefix[3] +} x86_prefix; + +// Instruction's operand referring to memory +// This is associated with X86_OP_MEM operand type above +typedef struct x86_op_mem { + unsigned int segment; // segment register (or X86_REG_INVALID if irrelevant) + unsigned int base; // base register (or X86_REG_INVALID if irrelevant) + unsigned int index; // index register (or X86_REG_INVALID if irrelevant) + int scale; // scale for index register + int64_t disp; // displacement value +} x86_op_mem; + +// Instruction operand +typedef struct cs_x86_op { + x86_op_type type; // operand type + union { + x86_reg reg; // register value for REG operand + int64_t imm; // immediate value for IMM operand + double fp; // floating point value for FP operand + x86_op_mem mem; // base/index/scale/disp value for MEM operand + }; + + // size of this operand (in bytes). + uint8_t size; + + // AVX broadcast type, or 0 if irrelevant + x86_avx_bcast avx_bcast; + + // AVX zero opmask {z} + bool avx_zero_opmask; +} cs_x86_op; + +// Instruction structure +typedef struct cs_x86 { + // Instruction prefix, which can be up to 4 bytes. + // A prefix byte gets value 0 when irrelevant. + // prefix[0] indicates REP/REPNE/LOCK prefix (See X86_PREFIX_REP/REPNE/LOCK above) + // prefix[1] indicates segment override (irrelevant for x86_64): + // See X86_PREFIX_CS/SS/DS/ES/FS/GS above. + // prefix[2] indicates operand-size override (X86_PREFIX_OPSIZE) + // prefix[3] indicates address-size override (X86_PREFIX_ADDRSIZE) + uint8_t prefix[4]; + + // Instruction opcode, which can be from 1 to 4 bytes in size. + // This contains VEX opcode as well. + // An trailing opcode byte gets value 0 when irrelevant. + uint8_t opcode[4]; + + // REX prefix: only a non-zero value is relevant for x86_64 + uint8_t rex; + + // Address size, which can be overridden with above prefix[5]. + uint8_t addr_size; + + // ModR/M byte + uint8_t modrm; + + // SIB value, or 0 when irrelevant. + uint8_t sib; + + // Displacement value, or 0 when irrelevant. + int32_t disp; + + /* SIB state */ + // SIB index register, or X86_REG_INVALID when irrelevant. + x86_reg sib_index; + // SIB scale. only applicable if sib_index is relevant. + int8_t sib_scale; + // SIB base register, or X86_REG_INVALID when irrelevant. + x86_reg sib_base; + + // SSE Code Condition + x86_sse_cc sse_cc; + + // AVX Code Condition + x86_avx_cc avx_cc; + + // AVX Suppress all Exception + bool avx_sae; + + // AVX static rounding mode + x86_avx_rm avx_rm; + + // Number of operands of this instruction, + // or 0 when instruction has no operand. + uint8_t op_count; + + cs_x86_op operands[8]; // operands for this instruction. +} cs_x86; + +//> X86 instructions +typedef enum x86_insn { + X86_INS_INVALID = 0, + + X86_INS_AAA, + X86_INS_AAD, + X86_INS_AAM, + X86_INS_AAS, + X86_INS_FABS, + X86_INS_ADC, + X86_INS_ADCX, + X86_INS_ADD, + X86_INS_ADDPD, + X86_INS_ADDPS, + X86_INS_ADDSD, + X86_INS_ADDSS, + X86_INS_ADDSUBPD, + X86_INS_ADDSUBPS, + X86_INS_FADD, + X86_INS_FIADD, + X86_INS_FADDP, + X86_INS_ADOX, + X86_INS_AESDECLAST, + X86_INS_AESDEC, + X86_INS_AESENCLAST, + X86_INS_AESENC, + X86_INS_AESIMC, + X86_INS_AESKEYGENASSIST, + X86_INS_AND, + X86_INS_ANDN, + X86_INS_ANDNPD, + X86_INS_ANDNPS, + X86_INS_ANDPD, + X86_INS_ANDPS, + X86_INS_ARPL, + X86_INS_BEXTR, + X86_INS_BLCFILL, + X86_INS_BLCI, + X86_INS_BLCIC, + X86_INS_BLCMSK, + X86_INS_BLCS, + X86_INS_BLENDPD, + X86_INS_BLENDPS, + X86_INS_BLENDVPD, + X86_INS_BLENDVPS, + X86_INS_BLSFILL, + X86_INS_BLSI, + X86_INS_BLSIC, + X86_INS_BLSMSK, + X86_INS_BLSR, + X86_INS_BOUND, + X86_INS_BSF, + X86_INS_BSR, + X86_INS_BSWAP, + X86_INS_BT, + X86_INS_BTC, + X86_INS_BTR, + X86_INS_BTS, + X86_INS_BZHI, + X86_INS_CALL, + X86_INS_CBW, + X86_INS_CDQ, + X86_INS_CDQE, + X86_INS_FCHS, + X86_INS_CLAC, + X86_INS_CLC, + X86_INS_CLD, + X86_INS_CLFLUSH, + X86_INS_CLGI, + X86_INS_CLI, + X86_INS_CLTS, + X86_INS_CMC, + X86_INS_CMOVA, + X86_INS_CMOVAE, + X86_INS_CMOVB, + X86_INS_CMOVBE, + X86_INS_FCMOVBE, + X86_INS_FCMOVB, + X86_INS_CMOVE, + X86_INS_FCMOVE, + X86_INS_CMOVG, + X86_INS_CMOVGE, + X86_INS_CMOVL, + X86_INS_CMOVLE, + X86_INS_FCMOVNBE, + X86_INS_FCMOVNB, + X86_INS_CMOVNE, + X86_INS_FCMOVNE, + X86_INS_CMOVNO, + X86_INS_CMOVNP, + X86_INS_FCMOVNU, + X86_INS_CMOVNS, + X86_INS_CMOVO, + X86_INS_CMOVP, + X86_INS_FCMOVU, + X86_INS_CMOVS, + X86_INS_CMP, + X86_INS_CMPPD, + X86_INS_CMPPS, + X86_INS_CMPSB, + X86_INS_CMPSD, + X86_INS_CMPSQ, + X86_INS_CMPSS, + X86_INS_CMPSW, + X86_INS_CMPXCHG16B, + X86_INS_CMPXCHG, + X86_INS_CMPXCHG8B, + X86_INS_COMISD, + X86_INS_COMISS, + X86_INS_FCOMP, + X86_INS_FCOMPI, + X86_INS_FCOMI, + X86_INS_FCOM, + X86_INS_FCOS, + X86_INS_CPUID, + X86_INS_CQO, + X86_INS_CRC32, + X86_INS_CVTDQ2PD, + X86_INS_CVTDQ2PS, + X86_INS_CVTPD2DQ, + X86_INS_CVTPD2PS, + X86_INS_CVTPS2DQ, + X86_INS_CVTPS2PD, + X86_INS_CVTSD2SI, + X86_INS_CVTSD2SS, + X86_INS_CVTSI2SD, + X86_INS_CVTSI2SS, + X86_INS_CVTSS2SD, + X86_INS_CVTSS2SI, + X86_INS_CVTTPD2DQ, + X86_INS_CVTTPS2DQ, + X86_INS_CVTTSD2SI, + X86_INS_CVTTSS2SI, + X86_INS_CWD, + X86_INS_CWDE, + X86_INS_DAA, + X86_INS_DAS, + X86_INS_DATA16, + X86_INS_DEC, + X86_INS_DIV, + X86_INS_DIVPD, + X86_INS_DIVPS, + X86_INS_FDIVR, + X86_INS_FIDIVR, + X86_INS_FDIVRP, + X86_INS_DIVSD, + X86_INS_DIVSS, + X86_INS_FDIV, + X86_INS_FIDIV, + X86_INS_FDIVP, + X86_INS_DPPD, + X86_INS_DPPS, + X86_INS_RET, + X86_INS_ENCLS, + X86_INS_ENCLU, + X86_INS_ENTER, + X86_INS_EXTRACTPS, + X86_INS_EXTRQ, + X86_INS_F2XM1, + X86_INS_LCALL, + X86_INS_LJMP, + X86_INS_FBLD, + X86_INS_FBSTP, + X86_INS_FCOMPP, + X86_INS_FDECSTP, + X86_INS_FEMMS, + X86_INS_FFREE, + X86_INS_FICOM, + X86_INS_FICOMP, + X86_INS_FINCSTP, + X86_INS_FLDCW, + X86_INS_FLDENV, + X86_INS_FLDL2E, + X86_INS_FLDL2T, + X86_INS_FLDLG2, + X86_INS_FLDLN2, + X86_INS_FLDPI, + X86_INS_FNCLEX, + X86_INS_FNINIT, + X86_INS_FNOP, + X86_INS_FNSTCW, + X86_INS_FNSTSW, + X86_INS_FPATAN, + X86_INS_FPREM, + X86_INS_FPREM1, + X86_INS_FPTAN, + X86_INS_FRNDINT, + X86_INS_FRSTOR, + X86_INS_FNSAVE, + X86_INS_FSCALE, + X86_INS_FSETPM, + X86_INS_FSINCOS, + X86_INS_FNSTENV, + X86_INS_FXAM, + X86_INS_FXRSTOR, + X86_INS_FXRSTOR64, + X86_INS_FXSAVE, + X86_INS_FXSAVE64, + X86_INS_FXTRACT, + X86_INS_FYL2X, + X86_INS_FYL2XP1, + X86_INS_MOVAPD, + X86_INS_MOVAPS, + X86_INS_ORPD, + X86_INS_ORPS, + X86_INS_VMOVAPD, + X86_INS_VMOVAPS, + X86_INS_XORPD, + X86_INS_XORPS, + X86_INS_GETSEC, + X86_INS_HADDPD, + X86_INS_HADDPS, + X86_INS_HLT, + X86_INS_HSUBPD, + X86_INS_HSUBPS, + X86_INS_IDIV, + X86_INS_FILD, + X86_INS_IMUL, + X86_INS_IN, + X86_INS_INC, + X86_INS_INSB, + X86_INS_INSERTPS, + X86_INS_INSERTQ, + X86_INS_INSD, + X86_INS_INSW, + X86_INS_INT, + X86_INS_INT1, + X86_INS_INT3, + X86_INS_INTO, + X86_INS_INVD, + X86_INS_INVEPT, + X86_INS_INVLPG, + X86_INS_INVLPGA, + X86_INS_INVPCID, + X86_INS_INVVPID, + X86_INS_IRET, + X86_INS_IRETD, + X86_INS_IRETQ, + X86_INS_FISTTP, + X86_INS_FIST, + X86_INS_FISTP, + X86_INS_UCOMISD, + X86_INS_UCOMISS, + X86_INS_VCMP, + X86_INS_VCOMISD, + X86_INS_VCOMISS, + X86_INS_VCVTSD2SS, + X86_INS_VCVTSI2SD, + X86_INS_VCVTSI2SS, + X86_INS_VCVTSS2SD, + X86_INS_VCVTTSD2SI, + X86_INS_VCVTTSD2USI, + X86_INS_VCVTTSS2SI, + X86_INS_VCVTTSS2USI, + X86_INS_VCVTUSI2SD, + X86_INS_VCVTUSI2SS, + X86_INS_VUCOMISD, + X86_INS_VUCOMISS, + X86_INS_JAE, + X86_INS_JA, + X86_INS_JBE, + X86_INS_JB, + X86_INS_JCXZ, + X86_INS_JECXZ, + X86_INS_JE, + X86_INS_JGE, + X86_INS_JG, + X86_INS_JLE, + X86_INS_JL, + X86_INS_JMP, + X86_INS_JNE, + X86_INS_JNO, + X86_INS_JNP, + X86_INS_JNS, + X86_INS_JO, + X86_INS_JP, + X86_INS_JRCXZ, + X86_INS_JS, + X86_INS_KANDB, + X86_INS_KANDD, + X86_INS_KANDNB, + X86_INS_KANDND, + X86_INS_KANDNQ, + X86_INS_KANDNW, + X86_INS_KANDQ, + X86_INS_KANDW, + X86_INS_KMOVB, + X86_INS_KMOVD, + X86_INS_KMOVQ, + X86_INS_KMOVW, + X86_INS_KNOTB, + X86_INS_KNOTD, + X86_INS_KNOTQ, + X86_INS_KNOTW, + X86_INS_KORB, + X86_INS_KORD, + X86_INS_KORQ, + X86_INS_KORTESTW, + X86_INS_KORW, + X86_INS_KSHIFTLW, + X86_INS_KSHIFTRW, + X86_INS_KUNPCKBW, + X86_INS_KXNORB, + X86_INS_KXNORD, + X86_INS_KXNORQ, + X86_INS_KXNORW, + X86_INS_KXORB, + X86_INS_KXORD, + X86_INS_KXORQ, + X86_INS_KXORW, + X86_INS_LAHF, + X86_INS_LAR, + X86_INS_LDDQU, + X86_INS_LDMXCSR, + X86_INS_LDS, + X86_INS_FLDZ, + X86_INS_FLD1, + X86_INS_FLD, + X86_INS_LEA, + X86_INS_LEAVE, + X86_INS_LES, + X86_INS_LFENCE, + X86_INS_LFS, + X86_INS_LGDT, + X86_INS_LGS, + X86_INS_LIDT, + X86_INS_LLDT, + X86_INS_LMSW, + X86_INS_OR, + X86_INS_SUB, + X86_INS_XOR, + X86_INS_LODSB, + X86_INS_LODSD, + X86_INS_LODSQ, + X86_INS_LODSW, + X86_INS_LOOP, + X86_INS_LOOPE, + X86_INS_LOOPNE, + X86_INS_RETF, + X86_INS_RETFQ, + X86_INS_LSL, + X86_INS_LSS, + X86_INS_LTR, + X86_INS_XADD, + X86_INS_LZCNT, + X86_INS_MASKMOVDQU, + X86_INS_MAXPD, + X86_INS_MAXPS, + X86_INS_MAXSD, + X86_INS_MAXSS, + X86_INS_MFENCE, + X86_INS_MINPD, + X86_INS_MINPS, + X86_INS_MINSD, + X86_INS_MINSS, + X86_INS_CVTPD2PI, + X86_INS_CVTPI2PD, + X86_INS_CVTPI2PS, + X86_INS_CVTPS2PI, + X86_INS_CVTTPD2PI, + X86_INS_CVTTPS2PI, + X86_INS_EMMS, + X86_INS_MASKMOVQ, + X86_INS_MOVD, + X86_INS_MOVDQ2Q, + X86_INS_MOVNTQ, + X86_INS_MOVQ2DQ, + X86_INS_MOVQ, + X86_INS_PABSB, + X86_INS_PABSD, + X86_INS_PABSW, + X86_INS_PACKSSDW, + X86_INS_PACKSSWB, + X86_INS_PACKUSWB, + X86_INS_PADDB, + X86_INS_PADDD, + X86_INS_PADDQ, + X86_INS_PADDSB, + X86_INS_PADDSW, + X86_INS_PADDUSB, + X86_INS_PADDUSW, + X86_INS_PADDW, + X86_INS_PALIGNR, + X86_INS_PANDN, + X86_INS_PAND, + X86_INS_PAVGB, + X86_INS_PAVGW, + X86_INS_PCMPEQB, + X86_INS_PCMPEQD, + X86_INS_PCMPEQW, + X86_INS_PCMPGTB, + X86_INS_PCMPGTD, + X86_INS_PCMPGTW, + X86_INS_PEXTRW, + X86_INS_PHADDSW, + X86_INS_PHADDW, + X86_INS_PHADDD, + X86_INS_PHSUBD, + X86_INS_PHSUBSW, + X86_INS_PHSUBW, + X86_INS_PINSRW, + X86_INS_PMADDUBSW, + X86_INS_PMADDWD, + X86_INS_PMAXSW, + X86_INS_PMAXUB, + X86_INS_PMINSW, + X86_INS_PMINUB, + X86_INS_PMOVMSKB, + X86_INS_PMULHRSW, + X86_INS_PMULHUW, + X86_INS_PMULHW, + X86_INS_PMULLW, + X86_INS_PMULUDQ, + X86_INS_POR, + X86_INS_PSADBW, + X86_INS_PSHUFB, + X86_INS_PSHUFW, + X86_INS_PSIGNB, + X86_INS_PSIGND, + X86_INS_PSIGNW, + X86_INS_PSLLD, + X86_INS_PSLLQ, + X86_INS_PSLLW, + X86_INS_PSRAD, + X86_INS_PSRAW, + X86_INS_PSRLD, + X86_INS_PSRLQ, + X86_INS_PSRLW, + X86_INS_PSUBB, + X86_INS_PSUBD, + X86_INS_PSUBQ, + X86_INS_PSUBSB, + X86_INS_PSUBSW, + X86_INS_PSUBUSB, + X86_INS_PSUBUSW, + X86_INS_PSUBW, + X86_INS_PUNPCKHBW, + X86_INS_PUNPCKHDQ, + X86_INS_PUNPCKHWD, + X86_INS_PUNPCKLBW, + X86_INS_PUNPCKLDQ, + X86_INS_PUNPCKLWD, + X86_INS_PXOR, + X86_INS_MONITOR, + X86_INS_MONTMUL, + X86_INS_MOV, + X86_INS_MOVABS, + X86_INS_MOVBE, + X86_INS_MOVDDUP, + X86_INS_MOVDQA, + X86_INS_MOVDQU, + X86_INS_MOVHLPS, + X86_INS_MOVHPD, + X86_INS_MOVHPS, + X86_INS_MOVLHPS, + X86_INS_MOVLPD, + X86_INS_MOVLPS, + X86_INS_MOVMSKPD, + X86_INS_MOVMSKPS, + X86_INS_MOVNTDQA, + X86_INS_MOVNTDQ, + X86_INS_MOVNTI, + X86_INS_MOVNTPD, + X86_INS_MOVNTPS, + X86_INS_MOVNTSD, + X86_INS_MOVNTSS, + X86_INS_MOVSB, + X86_INS_MOVSD, + X86_INS_MOVSHDUP, + X86_INS_MOVSLDUP, + X86_INS_MOVSQ, + X86_INS_MOVSS, + X86_INS_MOVSW, + X86_INS_MOVSX, + X86_INS_MOVSXD, + X86_INS_MOVUPD, + X86_INS_MOVUPS, + X86_INS_MOVZX, + X86_INS_MPSADBW, + X86_INS_MUL, + X86_INS_MULPD, + X86_INS_MULPS, + X86_INS_MULSD, + X86_INS_MULSS, + X86_INS_MULX, + X86_INS_FMUL, + X86_INS_FIMUL, + X86_INS_FMULP, + X86_INS_MWAIT, + X86_INS_NEG, + X86_INS_NOP, + X86_INS_NOT, + X86_INS_OUT, + X86_INS_OUTSB, + X86_INS_OUTSD, + X86_INS_OUTSW, + X86_INS_PACKUSDW, + X86_INS_PAUSE, + X86_INS_PAVGUSB, + X86_INS_PBLENDVB, + X86_INS_PBLENDW, + X86_INS_PCLMULQDQ, + X86_INS_PCMPEQQ, + X86_INS_PCMPESTRI, + X86_INS_PCMPESTRM, + X86_INS_PCMPGTQ, + X86_INS_PCMPISTRI, + X86_INS_PCMPISTRM, + X86_INS_PDEP, + X86_INS_PEXT, + X86_INS_PEXTRB, + X86_INS_PEXTRD, + X86_INS_PEXTRQ, + X86_INS_PF2ID, + X86_INS_PF2IW, + X86_INS_PFACC, + X86_INS_PFADD, + X86_INS_PFCMPEQ, + X86_INS_PFCMPGE, + X86_INS_PFCMPGT, + X86_INS_PFMAX, + X86_INS_PFMIN, + X86_INS_PFMUL, + X86_INS_PFNACC, + X86_INS_PFPNACC, + X86_INS_PFRCPIT1, + X86_INS_PFRCPIT2, + X86_INS_PFRCP, + X86_INS_PFRSQIT1, + X86_INS_PFRSQRT, + X86_INS_PFSUBR, + X86_INS_PFSUB, + X86_INS_PHMINPOSUW, + X86_INS_PI2FD, + X86_INS_PI2FW, + X86_INS_PINSRB, + X86_INS_PINSRD, + X86_INS_PINSRQ, + X86_INS_PMAXSB, + X86_INS_PMAXSD, + X86_INS_PMAXUD, + X86_INS_PMAXUW, + X86_INS_PMINSB, + X86_INS_PMINSD, + X86_INS_PMINUD, + X86_INS_PMINUW, + X86_INS_PMOVSXBD, + X86_INS_PMOVSXBQ, + X86_INS_PMOVSXBW, + X86_INS_PMOVSXDQ, + X86_INS_PMOVSXWD, + X86_INS_PMOVSXWQ, + X86_INS_PMOVZXBD, + X86_INS_PMOVZXBQ, + X86_INS_PMOVZXBW, + X86_INS_PMOVZXDQ, + X86_INS_PMOVZXWD, + X86_INS_PMOVZXWQ, + X86_INS_PMULDQ, + X86_INS_PMULHRW, + X86_INS_PMULLD, + X86_INS_POP, + X86_INS_POPAW, + X86_INS_POPAL, + X86_INS_POPCNT, + X86_INS_POPF, + X86_INS_POPFD, + X86_INS_POPFQ, + X86_INS_PREFETCH, + X86_INS_PREFETCHNTA, + X86_INS_PREFETCHT0, + X86_INS_PREFETCHT1, + X86_INS_PREFETCHT2, + X86_INS_PREFETCHW, + X86_INS_PSHUFD, + X86_INS_PSHUFHW, + X86_INS_PSHUFLW, + X86_INS_PSLLDQ, + X86_INS_PSRLDQ, + X86_INS_PSWAPD, + X86_INS_PTEST, + X86_INS_PUNPCKHQDQ, + X86_INS_PUNPCKLQDQ, + X86_INS_PUSH, + X86_INS_PUSHAW, + X86_INS_PUSHAL, + X86_INS_PUSHF, + X86_INS_PUSHFD, + X86_INS_PUSHFQ, + X86_INS_RCL, + X86_INS_RCPPS, + X86_INS_RCPSS, + X86_INS_RCR, + X86_INS_RDFSBASE, + X86_INS_RDGSBASE, + X86_INS_RDMSR, + X86_INS_RDPMC, + X86_INS_RDRAND, + X86_INS_RDSEED, + X86_INS_RDTSC, + X86_INS_RDTSCP, + X86_INS_ROL, + X86_INS_ROR, + X86_INS_RORX, + X86_INS_ROUNDPD, + X86_INS_ROUNDPS, + X86_INS_ROUNDSD, + X86_INS_ROUNDSS, + X86_INS_RSM, + X86_INS_RSQRTPS, + X86_INS_RSQRTSS, + X86_INS_SAHF, + X86_INS_SAL, + X86_INS_SALC, + X86_INS_SAR, + X86_INS_SARX, + X86_INS_SBB, + X86_INS_SCASB, + X86_INS_SCASD, + X86_INS_SCASQ, + X86_INS_SCASW, + X86_INS_SETAE, + X86_INS_SETA, + X86_INS_SETBE, + X86_INS_SETB, + X86_INS_SETE, + X86_INS_SETGE, + X86_INS_SETG, + X86_INS_SETLE, + X86_INS_SETL, + X86_INS_SETNE, + X86_INS_SETNO, + X86_INS_SETNP, + X86_INS_SETNS, + X86_INS_SETO, + X86_INS_SETP, + X86_INS_SETS, + X86_INS_SFENCE, + X86_INS_SGDT, + X86_INS_SHA1MSG1, + X86_INS_SHA1MSG2, + X86_INS_SHA1NEXTE, + X86_INS_SHA1RNDS4, + X86_INS_SHA256MSG1, + X86_INS_SHA256MSG2, + X86_INS_SHA256RNDS2, + X86_INS_SHL, + X86_INS_SHLD, + X86_INS_SHLX, + X86_INS_SHR, + X86_INS_SHRD, + X86_INS_SHRX, + X86_INS_SHUFPD, + X86_INS_SHUFPS, + X86_INS_SIDT, + X86_INS_FSIN, + X86_INS_SKINIT, + X86_INS_SLDT, + X86_INS_SMSW, + X86_INS_SQRTPD, + X86_INS_SQRTPS, + X86_INS_SQRTSD, + X86_INS_SQRTSS, + X86_INS_FSQRT, + X86_INS_STAC, + X86_INS_STC, + X86_INS_STD, + X86_INS_STGI, + X86_INS_STI, + X86_INS_STMXCSR, + X86_INS_STOSB, + X86_INS_STOSD, + X86_INS_STOSQ, + X86_INS_STOSW, + X86_INS_STR, + X86_INS_FST, + X86_INS_FSTP, + X86_INS_FSTPNCE, + X86_INS_SUBPD, + X86_INS_SUBPS, + X86_INS_FSUBR, + X86_INS_FISUBR, + X86_INS_FSUBRP, + X86_INS_SUBSD, + X86_INS_SUBSS, + X86_INS_FSUB, + X86_INS_FISUB, + X86_INS_FSUBP, + X86_INS_SWAPGS, + X86_INS_SYSCALL, + X86_INS_SYSENTER, + X86_INS_SYSEXIT, + X86_INS_SYSRET, + X86_INS_T1MSKC, + X86_INS_TEST, + X86_INS_UD2, + X86_INS_FTST, + X86_INS_TZCNT, + X86_INS_TZMSK, + X86_INS_FUCOMPI, + X86_INS_FUCOMI, + X86_INS_FUCOMPP, + X86_INS_FUCOMP, + X86_INS_FUCOM, + X86_INS_UD2B, + X86_INS_UNPCKHPD, + X86_INS_UNPCKHPS, + X86_INS_UNPCKLPD, + X86_INS_UNPCKLPS, + X86_INS_VADDPD, + X86_INS_VADDPS, + X86_INS_VADDSD, + X86_INS_VADDSS, + X86_INS_VADDSUBPD, + X86_INS_VADDSUBPS, + X86_INS_VAESDECLAST, + X86_INS_VAESDEC, + X86_INS_VAESENCLAST, + X86_INS_VAESENC, + X86_INS_VAESIMC, + X86_INS_VAESKEYGENASSIST, + X86_INS_VALIGND, + X86_INS_VALIGNQ, + X86_INS_VANDNPD, + X86_INS_VANDNPS, + X86_INS_VANDPD, + X86_INS_VANDPS, + X86_INS_VBLENDMPD, + X86_INS_VBLENDMPS, + X86_INS_VBLENDPD, + X86_INS_VBLENDPS, + X86_INS_VBLENDVPD, + X86_INS_VBLENDVPS, + X86_INS_VBROADCASTF128, + X86_INS_VBROADCASTI128, + X86_INS_VBROADCASTI32X4, + X86_INS_VBROADCASTI64X4, + X86_INS_VBROADCASTSD, + X86_INS_VBROADCASTSS, + X86_INS_VCMPPD, + X86_INS_VCMPPS, + X86_INS_VCMPSD, + X86_INS_VCMPSS, + X86_INS_VCVTDQ2PD, + X86_INS_VCVTDQ2PS, + X86_INS_VCVTPD2DQX, + X86_INS_VCVTPD2DQ, + X86_INS_VCVTPD2PSX, + X86_INS_VCVTPD2PS, + X86_INS_VCVTPD2UDQ, + X86_INS_VCVTPH2PS, + X86_INS_VCVTPS2DQ, + X86_INS_VCVTPS2PD, + X86_INS_VCVTPS2PH, + X86_INS_VCVTPS2UDQ, + X86_INS_VCVTSD2SI, + X86_INS_VCVTSD2USI, + X86_INS_VCVTSS2SI, + X86_INS_VCVTSS2USI, + X86_INS_VCVTTPD2DQX, + X86_INS_VCVTTPD2DQ, + X86_INS_VCVTTPD2UDQ, + X86_INS_VCVTTPS2DQ, + X86_INS_VCVTTPS2UDQ, + X86_INS_VCVTUDQ2PD, + X86_INS_VCVTUDQ2PS, + X86_INS_VDIVPD, + X86_INS_VDIVPS, + X86_INS_VDIVSD, + X86_INS_VDIVSS, + X86_INS_VDPPD, + X86_INS_VDPPS, + X86_INS_VERR, + X86_INS_VERW, + X86_INS_VEXTRACTF128, + X86_INS_VEXTRACTF32X4, + X86_INS_VEXTRACTF64X4, + X86_INS_VEXTRACTI128, + X86_INS_VEXTRACTI32X4, + X86_INS_VEXTRACTI64X4, + X86_INS_VEXTRACTPS, + X86_INS_VFMADD132PD, + X86_INS_VFMADD132PS, + X86_INS_VFMADD213PD, + X86_INS_VFMADD213PS, + X86_INS_VFMADDPD, + X86_INS_VFMADD231PD, + X86_INS_VFMADDPS, + X86_INS_VFMADD231PS, + X86_INS_VFMADDSD, + X86_INS_VFMADD213SD, + X86_INS_VFMADD132SD, + X86_INS_VFMADD231SD, + X86_INS_VFMADDSS, + X86_INS_VFMADD213SS, + X86_INS_VFMADD132SS, + X86_INS_VFMADD231SS, + X86_INS_VFMADDSUB132PD, + X86_INS_VFMADDSUB132PS, + X86_INS_VFMADDSUB213PD, + X86_INS_VFMADDSUB213PS, + X86_INS_VFMADDSUBPD, + X86_INS_VFMADDSUB231PD, + X86_INS_VFMADDSUBPS, + X86_INS_VFMADDSUB231PS, + X86_INS_VFMSUB132PD, + X86_INS_VFMSUB132PS, + X86_INS_VFMSUB213PD, + X86_INS_VFMSUB213PS, + X86_INS_VFMSUBADD132PD, + X86_INS_VFMSUBADD132PS, + X86_INS_VFMSUBADD213PD, + X86_INS_VFMSUBADD213PS, + X86_INS_VFMSUBADDPD, + X86_INS_VFMSUBADD231PD, + X86_INS_VFMSUBADDPS, + X86_INS_VFMSUBADD231PS, + X86_INS_VFMSUBPD, + X86_INS_VFMSUB231PD, + X86_INS_VFMSUBPS, + X86_INS_VFMSUB231PS, + X86_INS_VFMSUBSD, + X86_INS_VFMSUB213SD, + X86_INS_VFMSUB132SD, + X86_INS_VFMSUB231SD, + X86_INS_VFMSUBSS, + X86_INS_VFMSUB213SS, + X86_INS_VFMSUB132SS, + X86_INS_VFMSUB231SS, + X86_INS_VFNMADD132PD, + X86_INS_VFNMADD132PS, + X86_INS_VFNMADD213PD, + X86_INS_VFNMADD213PS, + X86_INS_VFNMADDPD, + X86_INS_VFNMADD231PD, + X86_INS_VFNMADDPS, + X86_INS_VFNMADD231PS, + X86_INS_VFNMADDSD, + X86_INS_VFNMADD213SD, + X86_INS_VFNMADD132SD, + X86_INS_VFNMADD231SD, + X86_INS_VFNMADDSS, + X86_INS_VFNMADD213SS, + X86_INS_VFNMADD132SS, + X86_INS_VFNMADD231SS, + X86_INS_VFNMSUB132PD, + X86_INS_VFNMSUB132PS, + X86_INS_VFNMSUB213PD, + X86_INS_VFNMSUB213PS, + X86_INS_VFNMSUBPD, + X86_INS_VFNMSUB231PD, + X86_INS_VFNMSUBPS, + X86_INS_VFNMSUB231PS, + X86_INS_VFNMSUBSD, + X86_INS_VFNMSUB213SD, + X86_INS_VFNMSUB132SD, + X86_INS_VFNMSUB231SD, + X86_INS_VFNMSUBSS, + X86_INS_VFNMSUB213SS, + X86_INS_VFNMSUB132SS, + X86_INS_VFNMSUB231SS, + X86_INS_VFRCZPD, + X86_INS_VFRCZPS, + X86_INS_VFRCZSD, + X86_INS_VFRCZSS, + X86_INS_VORPD, + X86_INS_VORPS, + X86_INS_VXORPD, + X86_INS_VXORPS, + X86_INS_VGATHERDPD, + X86_INS_VGATHERDPS, + X86_INS_VGATHERPF0DPD, + X86_INS_VGATHERPF0DPS, + X86_INS_VGATHERPF0QPD, + X86_INS_VGATHERPF0QPS, + X86_INS_VGATHERPF1DPD, + X86_INS_VGATHERPF1DPS, + X86_INS_VGATHERPF1QPD, + X86_INS_VGATHERPF1QPS, + X86_INS_VGATHERQPD, + X86_INS_VGATHERQPS, + X86_INS_VHADDPD, + X86_INS_VHADDPS, + X86_INS_VHSUBPD, + X86_INS_VHSUBPS, + X86_INS_VINSERTF128, + X86_INS_VINSERTF32X4, + X86_INS_VINSERTF64X4, + X86_INS_VINSERTI128, + X86_INS_VINSERTI32X4, + X86_INS_VINSERTI64X4, + X86_INS_VINSERTPS, + X86_INS_VLDDQU, + X86_INS_VLDMXCSR, + X86_INS_VMASKMOVDQU, + X86_INS_VMASKMOVPD, + X86_INS_VMASKMOVPS, + X86_INS_VMAXPD, + X86_INS_VMAXPS, + X86_INS_VMAXSD, + X86_INS_VMAXSS, + X86_INS_VMCALL, + X86_INS_VMCLEAR, + X86_INS_VMFUNC, + X86_INS_VMINPD, + X86_INS_VMINPS, + X86_INS_VMINSD, + X86_INS_VMINSS, + X86_INS_VMLAUNCH, + X86_INS_VMLOAD, + X86_INS_VMMCALL, + X86_INS_VMOVQ, + X86_INS_VMOVDDUP, + X86_INS_VMOVD, + X86_INS_VMOVDQA32, + X86_INS_VMOVDQA64, + X86_INS_VMOVDQA, + X86_INS_VMOVDQU16, + X86_INS_VMOVDQU32, + X86_INS_VMOVDQU64, + X86_INS_VMOVDQU8, + X86_INS_VMOVDQU, + X86_INS_VMOVHLPS, + X86_INS_VMOVHPD, + X86_INS_VMOVHPS, + X86_INS_VMOVLHPS, + X86_INS_VMOVLPD, + X86_INS_VMOVLPS, + X86_INS_VMOVMSKPD, + X86_INS_VMOVMSKPS, + X86_INS_VMOVNTDQA, + X86_INS_VMOVNTDQ, + X86_INS_VMOVNTPD, + X86_INS_VMOVNTPS, + X86_INS_VMOVSD, + X86_INS_VMOVSHDUP, + X86_INS_VMOVSLDUP, + X86_INS_VMOVSS, + X86_INS_VMOVUPD, + X86_INS_VMOVUPS, + X86_INS_VMPSADBW, + X86_INS_VMPTRLD, + X86_INS_VMPTRST, + X86_INS_VMREAD, + X86_INS_VMRESUME, + X86_INS_VMRUN, + X86_INS_VMSAVE, + X86_INS_VMULPD, + X86_INS_VMULPS, + X86_INS_VMULSD, + X86_INS_VMULSS, + X86_INS_VMWRITE, + X86_INS_VMXOFF, + X86_INS_VMXON, + X86_INS_VPABSB, + X86_INS_VPABSD, + X86_INS_VPABSQ, + X86_INS_VPABSW, + X86_INS_VPACKSSDW, + X86_INS_VPACKSSWB, + X86_INS_VPACKUSDW, + X86_INS_VPACKUSWB, + X86_INS_VPADDB, + X86_INS_VPADDD, + X86_INS_VPADDQ, + X86_INS_VPADDSB, + X86_INS_VPADDSW, + X86_INS_VPADDUSB, + X86_INS_VPADDUSW, + X86_INS_VPADDW, + X86_INS_VPALIGNR, + X86_INS_VPANDD, + X86_INS_VPANDND, + X86_INS_VPANDNQ, + X86_INS_VPANDN, + X86_INS_VPANDQ, + X86_INS_VPAND, + X86_INS_VPAVGB, + X86_INS_VPAVGW, + X86_INS_VPBLENDD, + X86_INS_VPBLENDMD, + X86_INS_VPBLENDMQ, + X86_INS_VPBLENDVB, + X86_INS_VPBLENDW, + X86_INS_VPBROADCASTB, + X86_INS_VPBROADCASTD, + X86_INS_VPBROADCASTMB2Q, + X86_INS_VPBROADCASTMW2D, + X86_INS_VPBROADCASTQ, + X86_INS_VPBROADCASTW, + X86_INS_VPCLMULQDQ, + X86_INS_VPCMOV, + X86_INS_VPCMP, + X86_INS_VPCMPD, + X86_INS_VPCMPEQB, + X86_INS_VPCMPEQD, + X86_INS_VPCMPEQQ, + X86_INS_VPCMPEQW, + X86_INS_VPCMPESTRI, + X86_INS_VPCMPESTRM, + X86_INS_VPCMPGTB, + X86_INS_VPCMPGTD, + X86_INS_VPCMPGTQ, + X86_INS_VPCMPGTW, + X86_INS_VPCMPISTRI, + X86_INS_VPCMPISTRM, + X86_INS_VPCMPQ, + X86_INS_VPCMPUD, + X86_INS_VPCMPUQ, + X86_INS_VPCOMB, + X86_INS_VPCOMD, + X86_INS_VPCOMQ, + X86_INS_VPCOMUB, + X86_INS_VPCOMUD, + X86_INS_VPCOMUQ, + X86_INS_VPCOMUW, + X86_INS_VPCOMW, + X86_INS_VPCONFLICTD, + X86_INS_VPCONFLICTQ, + X86_INS_VPERM2F128, + X86_INS_VPERM2I128, + X86_INS_VPERMD, + X86_INS_VPERMI2D, + X86_INS_VPERMI2PD, + X86_INS_VPERMI2PS, + X86_INS_VPERMI2Q, + X86_INS_VPERMIL2PD, + X86_INS_VPERMIL2PS, + X86_INS_VPERMILPD, + X86_INS_VPERMILPS, + X86_INS_VPERMPD, + X86_INS_VPERMPS, + X86_INS_VPERMQ, + X86_INS_VPERMT2D, + X86_INS_VPERMT2PD, + X86_INS_VPERMT2PS, + X86_INS_VPERMT2Q, + X86_INS_VPEXTRB, + X86_INS_VPEXTRD, + X86_INS_VPEXTRQ, + X86_INS_VPEXTRW, + X86_INS_VPGATHERDD, + X86_INS_VPGATHERDQ, + X86_INS_VPGATHERQD, + X86_INS_VPGATHERQQ, + X86_INS_VPHADDBD, + X86_INS_VPHADDBQ, + X86_INS_VPHADDBW, + X86_INS_VPHADDDQ, + X86_INS_VPHADDD, + X86_INS_VPHADDSW, + X86_INS_VPHADDUBD, + X86_INS_VPHADDUBQ, + X86_INS_VPHADDUBW, + X86_INS_VPHADDUDQ, + X86_INS_VPHADDUWD, + X86_INS_VPHADDUWQ, + X86_INS_VPHADDWD, + X86_INS_VPHADDWQ, + X86_INS_VPHADDW, + X86_INS_VPHMINPOSUW, + X86_INS_VPHSUBBW, + X86_INS_VPHSUBDQ, + X86_INS_VPHSUBD, + X86_INS_VPHSUBSW, + X86_INS_VPHSUBWD, + X86_INS_VPHSUBW, + X86_INS_VPINSRB, + X86_INS_VPINSRD, + X86_INS_VPINSRQ, + X86_INS_VPINSRW, + X86_INS_VPLZCNTD, + X86_INS_VPLZCNTQ, + X86_INS_VPMACSDD, + X86_INS_VPMACSDQH, + X86_INS_VPMACSDQL, + X86_INS_VPMACSSDD, + X86_INS_VPMACSSDQH, + X86_INS_VPMACSSDQL, + X86_INS_VPMACSSWD, + X86_INS_VPMACSSWW, + X86_INS_VPMACSWD, + X86_INS_VPMACSWW, + X86_INS_VPMADCSSWD, + X86_INS_VPMADCSWD, + X86_INS_VPMADDUBSW, + X86_INS_VPMADDWD, + X86_INS_VPMASKMOVD, + X86_INS_VPMASKMOVQ, + X86_INS_VPMAXSB, + X86_INS_VPMAXSD, + X86_INS_VPMAXSQ, + X86_INS_VPMAXSW, + X86_INS_VPMAXUB, + X86_INS_VPMAXUD, + X86_INS_VPMAXUQ, + X86_INS_VPMAXUW, + X86_INS_VPMINSB, + X86_INS_VPMINSD, + X86_INS_VPMINSQ, + X86_INS_VPMINSW, + X86_INS_VPMINUB, + X86_INS_VPMINUD, + X86_INS_VPMINUQ, + X86_INS_VPMINUW, + X86_INS_VPMOVDB, + X86_INS_VPMOVDW, + X86_INS_VPMOVMSKB, + X86_INS_VPMOVQB, + X86_INS_VPMOVQD, + X86_INS_VPMOVQW, + X86_INS_VPMOVSDB, + X86_INS_VPMOVSDW, + X86_INS_VPMOVSQB, + X86_INS_VPMOVSQD, + X86_INS_VPMOVSQW, + X86_INS_VPMOVSXBD, + X86_INS_VPMOVSXBQ, + X86_INS_VPMOVSXBW, + X86_INS_VPMOVSXDQ, + X86_INS_VPMOVSXWD, + X86_INS_VPMOVSXWQ, + X86_INS_VPMOVUSDB, + X86_INS_VPMOVUSDW, + X86_INS_VPMOVUSQB, + X86_INS_VPMOVUSQD, + X86_INS_VPMOVUSQW, + X86_INS_VPMOVZXBD, + X86_INS_VPMOVZXBQ, + X86_INS_VPMOVZXBW, + X86_INS_VPMOVZXDQ, + X86_INS_VPMOVZXWD, + X86_INS_VPMOVZXWQ, + X86_INS_VPMULDQ, + X86_INS_VPMULHRSW, + X86_INS_VPMULHUW, + X86_INS_VPMULHW, + X86_INS_VPMULLD, + X86_INS_VPMULLW, + X86_INS_VPMULUDQ, + X86_INS_VPORD, + X86_INS_VPORQ, + X86_INS_VPOR, + X86_INS_VPPERM, + X86_INS_VPROTB, + X86_INS_VPROTD, + X86_INS_VPROTQ, + X86_INS_VPROTW, + X86_INS_VPSADBW, + X86_INS_VPSCATTERDD, + X86_INS_VPSCATTERDQ, + X86_INS_VPSCATTERQD, + X86_INS_VPSCATTERQQ, + X86_INS_VPSHAB, + X86_INS_VPSHAD, + X86_INS_VPSHAQ, + X86_INS_VPSHAW, + X86_INS_VPSHLB, + X86_INS_VPSHLD, + X86_INS_VPSHLQ, + X86_INS_VPSHLW, + X86_INS_VPSHUFB, + X86_INS_VPSHUFD, + X86_INS_VPSHUFHW, + X86_INS_VPSHUFLW, + X86_INS_VPSIGNB, + X86_INS_VPSIGND, + X86_INS_VPSIGNW, + X86_INS_VPSLLDQ, + X86_INS_VPSLLD, + X86_INS_VPSLLQ, + X86_INS_VPSLLVD, + X86_INS_VPSLLVQ, + X86_INS_VPSLLW, + X86_INS_VPSRAD, + X86_INS_VPSRAQ, + X86_INS_VPSRAVD, + X86_INS_VPSRAVQ, + X86_INS_VPSRAW, + X86_INS_VPSRLDQ, + X86_INS_VPSRLD, + X86_INS_VPSRLQ, + X86_INS_VPSRLVD, + X86_INS_VPSRLVQ, + X86_INS_VPSRLW, + X86_INS_VPSUBB, + X86_INS_VPSUBD, + X86_INS_VPSUBQ, + X86_INS_VPSUBSB, + X86_INS_VPSUBSW, + X86_INS_VPSUBUSB, + X86_INS_VPSUBUSW, + X86_INS_VPSUBW, + X86_INS_VPTESTMD, + X86_INS_VPTESTMQ, + X86_INS_VPTESTNMD, + X86_INS_VPTESTNMQ, + X86_INS_VPTEST, + X86_INS_VPUNPCKHBW, + X86_INS_VPUNPCKHDQ, + X86_INS_VPUNPCKHQDQ, + X86_INS_VPUNPCKHWD, + X86_INS_VPUNPCKLBW, + X86_INS_VPUNPCKLDQ, + X86_INS_VPUNPCKLQDQ, + X86_INS_VPUNPCKLWD, + X86_INS_VPXORD, + X86_INS_VPXORQ, + X86_INS_VPXOR, + X86_INS_VRCP14PD, + X86_INS_VRCP14PS, + X86_INS_VRCP14SD, + X86_INS_VRCP14SS, + X86_INS_VRCP28PD, + X86_INS_VRCP28PS, + X86_INS_VRCP28SD, + X86_INS_VRCP28SS, + X86_INS_VRCPPS, + X86_INS_VRCPSS, + X86_INS_VRNDSCALEPD, + X86_INS_VRNDSCALEPS, + X86_INS_VRNDSCALESD, + X86_INS_VRNDSCALESS, + X86_INS_VROUNDPD, + X86_INS_VROUNDPS, + X86_INS_VROUNDSD, + X86_INS_VROUNDSS, + X86_INS_VRSQRT14PD, + X86_INS_VRSQRT14PS, + X86_INS_VRSQRT14SD, + X86_INS_VRSQRT14SS, + X86_INS_VRSQRT28PD, + X86_INS_VRSQRT28PS, + X86_INS_VRSQRT28SD, + X86_INS_VRSQRT28SS, + X86_INS_VRSQRTPS, + X86_INS_VRSQRTSS, + X86_INS_VSCATTERDPD, + X86_INS_VSCATTERDPS, + X86_INS_VSCATTERPF0DPD, + X86_INS_VSCATTERPF0DPS, + X86_INS_VSCATTERPF0QPD, + X86_INS_VSCATTERPF0QPS, + X86_INS_VSCATTERPF1DPD, + X86_INS_VSCATTERPF1DPS, + X86_INS_VSCATTERPF1QPD, + X86_INS_VSCATTERPF1QPS, + X86_INS_VSCATTERQPD, + X86_INS_VSCATTERQPS, + X86_INS_VSHUFPD, + X86_INS_VSHUFPS, + X86_INS_VSQRTPD, + X86_INS_VSQRTPS, + X86_INS_VSQRTSD, + X86_INS_VSQRTSS, + X86_INS_VSTMXCSR, + X86_INS_VSUBPD, + X86_INS_VSUBPS, + X86_INS_VSUBSD, + X86_INS_VSUBSS, + X86_INS_VTESTPD, + X86_INS_VTESTPS, + X86_INS_VUNPCKHPD, + X86_INS_VUNPCKHPS, + X86_INS_VUNPCKLPD, + X86_INS_VUNPCKLPS, + X86_INS_VZEROALL, + X86_INS_VZEROUPPER, + X86_INS_WAIT, + X86_INS_WBINVD, + X86_INS_WRFSBASE, + X86_INS_WRGSBASE, + X86_INS_WRMSR, + X86_INS_XABORT, + X86_INS_XACQUIRE, + X86_INS_XBEGIN, + X86_INS_XCHG, + X86_INS_FXCH, + X86_INS_XCRYPTCBC, + X86_INS_XCRYPTCFB, + X86_INS_XCRYPTCTR, + X86_INS_XCRYPTECB, + X86_INS_XCRYPTOFB, + X86_INS_XEND, + X86_INS_XGETBV, + X86_INS_XLATB, + X86_INS_XRELEASE, + X86_INS_XRSTOR, + X86_INS_XRSTOR64, + X86_INS_XSAVE, + X86_INS_XSAVE64, + X86_INS_XSAVEOPT, + X86_INS_XSAVEOPT64, + X86_INS_XSETBV, + X86_INS_XSHA1, + X86_INS_XSHA256, + X86_INS_XSTORE, + X86_INS_XTEST, + + X86_INS_ENDING, // mark the end of the list of insn +} x86_insn; + +//> Group of X86 instructions +typedef enum x86_insn_group { + X86_GRP_INVALID = 0, // = CS_GRP_INVALID + + //> Generic groups + // all jump instructions (conditional+direct+indirect jumps) + X86_GRP_JUMP, // = CS_GRP_JUMP + // all call instructions + X86_GRP_CALL, // = CS_GRP_CALL + // all return instructions + X86_GRP_RET, // = CS_GRP_RET + // all interrupt instructions (int+syscall) + X86_GRP_INT, // = CS_GRP_INT + // all interrupt return instructions + X86_GRP_IRET, // = CS_GRP_IRET + + //> Architecture-specific groups + X86_GRP_VM = 128, // all virtualization instructions (VT-x + AMD-V) + X86_GRP_3DNOW, + X86_GRP_AES, + X86_GRP_ADX, + X86_GRP_AVX, + X86_GRP_AVX2, + X86_GRP_AVX512, + X86_GRP_BMI, + X86_GRP_BMI2, + X86_GRP_CMOV, + X86_GRP_F16C, + X86_GRP_FMA, + X86_GRP_FMA4, + X86_GRP_FSGSBASE, + X86_GRP_HLE, + X86_GRP_MMX, + X86_GRP_MODE32, + X86_GRP_MODE64, + X86_GRP_RTM, + X86_GRP_SHA, + X86_GRP_SSE1, + X86_GRP_SSE2, + X86_GRP_SSE3, + X86_GRP_SSE41, + X86_GRP_SSE42, + X86_GRP_SSE4A, + X86_GRP_SSSE3, + X86_GRP_PCLMUL, + X86_GRP_XOP, + X86_GRP_CDI, + X86_GRP_ERI, + X86_GRP_TBM, + X86_GRP_16BITMODE, + X86_GRP_NOT64BITMODE, + X86_GRP_SGX, + X86_GRP_DQI, + X86_GRP_BWI, + X86_GRP_PFI, + X86_GRP_VLX, + X86_GRP_SMAP, + X86_GRP_NOVLX, + + X86_GRP_ENDING +} x86_insn_group; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/xcore.h b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/xcore.h new file mode 100755 index 0000000..aaf5912 --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/capstone/xcore.h @@ -0,0 +1,237 @@ +#ifndef CAPSTONE_XCORE_H +#define CAPSTONE_XCORE_H + +/* Capstone Disassembly Engine */ +/* By Nguyen Anh Quynh , 2014 */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined(_MSC_VER) || !defined(_KERNEL_MODE) +#include +#endif + +#include "platform.h" + +#ifdef _MSC_VER +#pragma warning(disable:4201) +#endif + +//> Operand type for instruction's operands +typedef enum xcore_op_type { + XCORE_OP_INVALID = 0, // = CS_OP_INVALID (Uninitialized). + XCORE_OP_REG, // = CS_OP_REG (Register operand). + XCORE_OP_IMM, // = CS_OP_IMM (Immediate operand). + XCORE_OP_MEM, // = CS_OP_MEM (Memory operand). +} xcore_op_type; + +// Instruction's operand referring to memory +// This is associated with XCORE_OP_MEM operand type above +typedef struct xcore_op_mem { + uint8_t base; // base register + uint8_t index; // index register + int32_t disp; // displacement/offset value + int direct; // +1: forward, -1: backward +} xcore_op_mem; + +// Instruction operand +typedef struct cs_xcore_op { + xcore_op_type type; // operand type + union { + unsigned int reg; // register value for REG operand + int32_t imm; // immediate value for IMM operand + xcore_op_mem mem; // base/disp value for MEM operand + }; +} cs_xcore_op; + +// Instruction structure +typedef struct cs_xcore { + // Number of operands of this instruction, + // or 0 when instruction has no operand. + uint8_t op_count; + cs_xcore_op operands[8]; // operands for this instruction. +} cs_xcore; + +//> XCore registers +typedef enum xcore_reg { + XCORE_REG_INVALID = 0, + + XCORE_REG_CP, + XCORE_REG_DP, + XCORE_REG_LR, + XCORE_REG_SP, + XCORE_REG_R0, + XCORE_REG_R1, + XCORE_REG_R2, + XCORE_REG_R3, + XCORE_REG_R4, + XCORE_REG_R5, + XCORE_REG_R6, + XCORE_REG_R7, + XCORE_REG_R8, + XCORE_REG_R9, + XCORE_REG_R10, + XCORE_REG_R11, + + //> pseudo registers + XCORE_REG_PC, // pc + + // internal thread registers + // see The-XMOS-XS1-Architecture(X7879A).pdf + XCORE_REG_SCP, // save pc + XCORE_REG_SSR, // save status + XCORE_REG_ET, // exception type + XCORE_REG_ED, // exception data + XCORE_REG_SED, // save exception data + XCORE_REG_KEP, // kernel entry pointer + XCORE_REG_KSP, // kernel stack pointer + XCORE_REG_ID, // thread ID + + XCORE_REG_ENDING, // <-- mark the end of the list of registers +} xcore_reg; + +//> XCore instruction +typedef enum xcore_insn { + XCORE_INS_INVALID = 0, + + XCORE_INS_ADD, + XCORE_INS_ANDNOT, + XCORE_INS_AND, + XCORE_INS_ASHR, + XCORE_INS_BAU, + XCORE_INS_BITREV, + XCORE_INS_BLA, + XCORE_INS_BLAT, + XCORE_INS_BL, + XCORE_INS_BF, + XCORE_INS_BT, + XCORE_INS_BU, + XCORE_INS_BRU, + XCORE_INS_BYTEREV, + XCORE_INS_CHKCT, + XCORE_INS_CLRE, + XCORE_INS_CLRPT, + XCORE_INS_CLRSR, + XCORE_INS_CLZ, + XCORE_INS_CRC8, + XCORE_INS_CRC32, + XCORE_INS_DCALL, + XCORE_INS_DENTSP, + XCORE_INS_DGETREG, + XCORE_INS_DIVS, + XCORE_INS_DIVU, + XCORE_INS_DRESTSP, + XCORE_INS_DRET, + XCORE_INS_ECALLF, + XCORE_INS_ECALLT, + XCORE_INS_EDU, + XCORE_INS_EEF, + XCORE_INS_EET, + XCORE_INS_EEU, + XCORE_INS_ENDIN, + XCORE_INS_ENTSP, + XCORE_INS_EQ, + XCORE_INS_EXTDP, + XCORE_INS_EXTSP, + XCORE_INS_FREER, + XCORE_INS_FREET, + XCORE_INS_GETD, + XCORE_INS_GET, + XCORE_INS_GETN, + XCORE_INS_GETR, + XCORE_INS_GETSR, + XCORE_INS_GETST, + XCORE_INS_GETTS, + XCORE_INS_INCT, + XCORE_INS_INIT, + XCORE_INS_INPW, + XCORE_INS_INSHR, + XCORE_INS_INT, + XCORE_INS_IN, + XCORE_INS_KCALL, + XCORE_INS_KENTSP, + XCORE_INS_KRESTSP, + XCORE_INS_KRET, + XCORE_INS_LADD, + XCORE_INS_LD16S, + XCORE_INS_LD8U, + XCORE_INS_LDA16, + XCORE_INS_LDAP, + XCORE_INS_LDAW, + XCORE_INS_LDC, + XCORE_INS_LDW, + XCORE_INS_LDIVU, + XCORE_INS_LMUL, + XCORE_INS_LSS, + XCORE_INS_LSUB, + XCORE_INS_LSU, + XCORE_INS_MACCS, + XCORE_INS_MACCU, + XCORE_INS_MJOIN, + XCORE_INS_MKMSK, + XCORE_INS_MSYNC, + XCORE_INS_MUL, + XCORE_INS_NEG, + XCORE_INS_NOT, + XCORE_INS_OR, + XCORE_INS_OUTCT, + XCORE_INS_OUTPW, + XCORE_INS_OUTSHR, + XCORE_INS_OUTT, + XCORE_INS_OUT, + XCORE_INS_PEEK, + XCORE_INS_REMS, + XCORE_INS_REMU, + XCORE_INS_RETSP, + XCORE_INS_SETCLK, + XCORE_INS_SET, + XCORE_INS_SETC, + XCORE_INS_SETD, + XCORE_INS_SETEV, + XCORE_INS_SETN, + XCORE_INS_SETPSC, + XCORE_INS_SETPT, + XCORE_INS_SETRDY, + XCORE_INS_SETSR, + XCORE_INS_SETTW, + XCORE_INS_SETV, + XCORE_INS_SEXT, + XCORE_INS_SHL, + XCORE_INS_SHR, + XCORE_INS_SSYNC, + XCORE_INS_ST16, + XCORE_INS_ST8, + XCORE_INS_STW, + XCORE_INS_SUB, + XCORE_INS_SYNCR, + XCORE_INS_TESTCT, + XCORE_INS_TESTLCL, + XCORE_INS_TESTWCT, + XCORE_INS_TSETMR, + XCORE_INS_START, + XCORE_INS_WAITEF, + XCORE_INS_WAITET, + XCORE_INS_WAITEU, + XCORE_INS_XOR, + XCORE_INS_ZEXT, + + XCORE_INS_ENDING, // <-- mark the end of the list of instructions +} xcore_insn; + +//> Group of XCore instructions +typedef enum xcore_insn_group { + XCORE_GRP_INVALID = 0, // = CS_GRP_INVALID + + //> Generic groups + // all jump instructions (conditional+direct+indirect jumps) + XCORE_GRP_JUMP, // = CS_GRP_JUMP + + XCORE_GRP_ENDING, // <-- mark the end of the list of groups +} xcore_insn_group; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/hde64.h b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/hde64.h new file mode 100755 index 0000000..3e223fd --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/hde64.h @@ -0,0 +1,103 @@ +/* + * Hacker Disassembler Engine 64 + * Copyright (c) 2008-2009, Vyacheslav Patkov. + * All rights reserved. + * + * hde64.h: C/C++ header file + * + */ + +#ifndef _HDE64_H_ +#define _HDE64_H_ + +#include + +#define F_MODRM 0x00000001 +#define F_SIB 0x00000002 +#define F_IMM8 0x00000004 +#define F_IMM16 0x00000008 +#define F_IMM32 0x00000010 +#define F_IMM64 0x00000020 +#define F_DISP8 0x00000040 +#define F_DISP16 0x00000080 +#define F_DISP32 0x00000100 +#define F_RELATIVE 0x00000200 +#define F_ERROR 0x00001000 +#define F_ERROR_OPCODE 0x00002000 +#define F_ERROR_LENGTH 0x00004000 +#define F_ERROR_LOCK 0x00008000 +#define F_ERROR_OPERAND 0x00010000 +#define F_PREFIX_REPNZ 0x01000000 +#define F_PREFIX_REPX 0x02000000 +#define F_PREFIX_REP 0x03000000 +#define F_PREFIX_66 0x04000000 +#define F_PREFIX_67 0x08000000 +#define F_PREFIX_LOCK 0x10000000 +#define F_PREFIX_SEG 0x20000000 +#define F_PREFIX_REX 0x40000000 +#define F_PREFIX_ANY 0x7f000000 + +#define PREFIX_SEGMENT_CS 0x2e +#define PREFIX_SEGMENT_SS 0x36 +#define PREFIX_SEGMENT_DS 0x3e +#define PREFIX_SEGMENT_ES 0x26 +#define PREFIX_SEGMENT_FS 0x64 +#define PREFIX_SEGMENT_GS 0x65 +#define PREFIX_LOCK 0xf0 +#define PREFIX_REPNZ 0xf2 +#define PREFIX_REPX 0xf3 +#define PREFIX_OPERAND_SIZE 0x66 +#define PREFIX_ADDRESS_SIZE 0x67 + +#pragma pack(push,1) + +typedef struct { + uint8_t len; + uint8_t p_rep; + uint8_t p_lock; + uint8_t p_seg; + uint8_t p_66; + uint8_t p_67; + uint8_t rex; + uint8_t rex_w; + uint8_t rex_r; + uint8_t rex_x; + uint8_t rex_b; + uint8_t opcode; + uint8_t opcode2; + uint8_t modrm; + uint8_t modrm_mod; + uint8_t modrm_reg; + uint8_t modrm_rm; + uint8_t sib; + uint8_t sib_scale; + uint8_t sib_index; + uint8_t sib_base; + union { + uint8_t imm8; + uint16_t imm16; + uint32_t imm32; + uint64_t imm64; + } imm; + union { + uint8_t disp8; + uint16_t disp16; + uint32_t disp32; + } disp; + uint32_t flags; +} hde64s; + +#pragma pack(pop) + +#ifdef __cplusplus +extern "C" { +#endif + +/* Note, code should point to at least 32 valid bytes. */ +unsigned int hde64_disasm(const void *code, hde64s *hs); + +#ifdef __cplusplus +} +#endif + +#endif /* _HDE64_H_ */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_api.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_api.hpp new file mode 100755 index 0000000..2306964 --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_api.hpp @@ -0,0 +1,382 @@ +// +// kern_api.hpp +// Lilu +// +// Copyright © 2016-2017 vit9696. All rights reserved. +// + +#ifndef kern_api_h +#define kern_api_h + +#include +#include +#include +#include + +#include +#include +#include +#include + +#ifndef __ACIDANTHERA_MAC_SDK +#error "This kext SDK is unsupported. Download from https://github.com/acidanthera/MacKernelSDK" +#endif + +class LiluAPI { +public: + /** + * Initialise lilu api + */ + void init(); + + /** + * Deinitialise lilu api + */ + void deinit(); + + /** + * Errors returned by functions + */ + enum class Error { + NoError, + LockError, + MemoryError, + UnsupportedFeature, + IncompatibleOS, + Disabled, + TooLate, + Offline + }; + + /** + * Minimal API version that guarantees forward ABI compatibility + * Present due to lack of OSBundleCompatibleVersion at kext injection + */ + static constexpr size_t CompatibilityVersion {parseModuleVersion("1.2.0")}; + + /** + * Obtains api access by holding a lock, which is required when accessing out of the main context + * + * @param version api compatibility version + * @param check do not wait on the lock but return Error::LockError on failure + * + * @return Error::NoError on success + */ + EXPORT Error requestAccess(size_t version=CompatibilityVersion, bool check=false); + + /** + * Releases api lock + * + * @return Error::NoError on success + */ + EXPORT Error releaseAccess(); + + /** + * You are supposed declare that your plugins work in at least one of these modes + * It is assumed that single user mode is equal to normal, because it is generally + * used to continue the load of a complete OS, and by default Lilu itself ignores it. + */ + enum RunningMode : uint32_t { + RunningNormal = 1, + AllowNormal = RunningNormal, + RunningInstallerRecovery = 2, + AllowInstallerRecovery = RunningInstallerRecovery, + RunningSafeMode = 4, + AllowSafeMode = RunningSafeMode + }; + + /** + * Obtain current run mode similarly to requirements + * + * @return run mode mask (RunningMode) + */ + inline uint32_t getRunMode() { + return currentRunMode; + } + + /** + * Decides whether you are eligible to continue + * + * @param product product name + * @param version product version + * @param runmode bitmask of allowed enviornments + * @param disableArg pointer to disabling boot arguments array + * @param disableArgNum number of disabling boot arguments + * @param debugArg pointer to debug boot arguments array + * @param debugArgNum number of debug boot arguments + * @param betaArg pointer to beta boot arguments array + * @param betaArgNum number of beta boot arguments + * @param min minimal required kernel version + * @param max maximum supported kernel version + * @param printDebug returns debug printing status (based on debugArg) + * + * @return Error::NoError on success + */ + EXPORT Error shouldLoad(const char *product, size_t version, uint32_t runmode, const char **disableArg, size_t disableArgNum, const char **debugArg, size_t debugArgNum, const char **betaArg, size_t betaArgNum, KernelVersion min, KernelVersion max, bool &printDebug); + + /** + * Kernel patcher loaded callback + * + * @param user user provided pointer at registering + * @param patcher kernel patcher instance + */ + using t_patcherLoaded = void (*)(void *user, KernelPatcher &patcher); + + /** + * Registers custom provided callbacks for later invocation on kernel patcher initialisation + * + * @param callback your callback function + * @param user your pointer that will be passed to the callback function + * + * @return Error::NoError on success + */ + EXPORT Error onPatcherLoad(t_patcherLoaded callback, void *user=nullptr); + + /** + * Registers custom provided callbacks for later invocation on kernel patcher initialisation + * Enforced version, which panics on registration failure (assuming your code cannot continue otherwise) + * + * @param callback your callback function + * @param user your pointer that will be passed to the callback function + */ + inline void onPatcherLoadForce(t_patcherLoaded callback, void *user=nullptr) { + auto err = onPatcherLoad(callback, user); + if (err != Error::NoError) + PANIC("api", "onPatcherLoad failed with code %d", err); + } + + /** + * Kext loaded callback + * Note that you will get notified of all the requested kexts for speed reasons + * + * @param user user provided pointer at registering + * @param patcher kernel patcher instance + * @param id loaded kinfo id + * @param slide loaded slide + * @param size loaded memory size + */ + using t_kextLoaded = void (*)(void *user, KernelPatcher &patcher, size_t id, mach_vm_address_t slide, size_t size); + + /** + * Registers custom provided callbacks for later invocation on kext load + * + * @param infos your kext list (make sure to point to const memory) + * @param num number of provided kext entries + * @param callback your callback function (optional) + * @param user your pointer that will be passed to the callback function (optional) + * + * @return Error::NoError on success + */ + EXPORT Error onKextLoad(KernelPatcher::KextInfo *infos, size_t num=1, t_kextLoaded callback=nullptr, void *user=nullptr); + + /** + * Registers custom provided callbacks for later invocation on kext load + * Enforced version, which panics on registration failure (assuming your code cannot continue otherwise) + * + * @param infos your kext list (make sure to point to const memory) + * @param num number of provided kext entries + * @param callback your callback function (optional) + * @param user your pointer that will be passed to the callback function (optional) + */ + inline void onKextLoadForce(KernelPatcher::KextInfo *infos, size_t num=1, t_kextLoaded callback=nullptr, void *user=nullptr) { + auto err = onKextLoad(infos, num, callback, user); + if (err != Error::NoError) + PANIC("api", "onKextLoad failed with code %d", err); + } + + /** + * Registers custom provided callbacks for later invocation on binary load + * + * @param infos your binary list (make sure to point to const memory) + * @param num number of provided binary entries + * @param callback your callback function (could be null) + * @param user your pointer that will be passed to the callback function + * @param mods optional mod list (make sure to point to const memory) + * @param modnum number of provided mod entries + * + * @return Error::NoError on success + */ + EXPORT Error onProcLoad(UserPatcher::ProcInfo *infos, size_t num=1, UserPatcher::t_BinaryLoaded callback=nullptr, void *user=nullptr, UserPatcher::BinaryModInfo *mods=nullptr, size_t modnum=0); + + /** + * Registers custom provided callbacks for later invocation on binary load + * Enforced version, which panics on registration failure (assuming your code cannot continue otherwise) + * + * @param infos your binary list (make sure to point to const memory) + * @param num number of provided binary entries + * @param callback your callback function (could be null) + * @param user your pointer that will be passed to the callback function + * @param mods optional mod list (make sure to point to const memory) + * @param modnum number of provided mod entries + */ + inline void onProcLoadForce(UserPatcher::ProcInfo *infos, size_t num=1, UserPatcher::t_BinaryLoaded callback=nullptr, void *user=nullptr, UserPatcher::BinaryModInfo *mods=nullptr, size_t modnum=0) { + auto err = onProcLoad(infos, num, callback, user, mods, modnum); + if (err != Error::NoError) + PANIC("api", "onProcLoad failed with code %d", err); + } + + /** + * Kext loaded callback + * Note that you will get notified of all the requested kexts for speed reasons + * + * @param user user provided pointer at registering + * @param task task + * @param entitlement loaded kinfo id + * @param original original entitlement value + */ + using t_entitlementRequested = void (*)(void *user, task_t task, const char *entitlement, OSObject *&original); + + /** + * Registers custom provided callbacks for later invocation on entitlement registration + * + * @param callback your callback function + * @param user your pointer that will be passed to the callback function + * + * @return Error::NoError on success + */ + EXPORT Error onEntitlementRequest(t_entitlementRequested callback, void *user=nullptr); + + /** + * Registers custom provided callbacks for later invocation on entitlement registration + * Enforced version, which panics on registration failure (assuming your code cannot continue otherwise) + * + * @param callback your callback function + * @param user your pointer that will be passed to the callback function + */ + inline void onEntitlementRequestForce(t_entitlementRequested callback, void *user=nullptr) { + auto err = onEntitlementRequest(callback, user); + if (err != Error::NoError) + PANIC("api", "onEntitlementRequest failed with code %d", err); + } + + /** + * Complete plugin registration and perform regulatory actions + */ + void finaliseRequests(); + + /** + * Processes all the registered patcher load callbacks + * + * @param patcher kernel patcher instance + */ + void processPatcherLoadCallbacks(KernelPatcher &patcher); + + /** + * Processes all the registered kext load callbacks + * + * @param patcher kernel patcher instance + * @param id loaded kinfo id + * @param slide loaded slide + * @param size loaded memory size + * @param reloadable kinfo could be unloaded + */ + void processKextLoadCallbacks(KernelPatcher &patcher, size_t id, mach_vm_address_t slide, size_t size, bool reloadable); + + /** + * Processes all the registered user patcher load callbacks + * + * @param patcher user patcher instance + */ + void processUserLoadCallbacks(UserPatcher &patcher); + + /** + * Processes all the registered binary load callbacks + * + * @param patcher kernel patcher instance + * @param map process image vm_map + * @param path path to the binary absolute or relative + * @param len path length excluding null terminator + */ + void processBinaryLoadCallbacks(UserPatcher &patcher, vm_map_t map, const char *path, size_t len); + + /** + * Activates patchers + * + * @param kpatcher kernel patcher instance + * @param upatcher user patcher instance + */ + void activate(KernelPatcher &kpatcher, UserPatcher &upatcher); + +private: + + /** + * Api lock + */ + IOLock *access {nullptr}; + + /** + * Defines current running modes + */ + uint32_t currentRunMode {}; + + /** + * No longer accept any requests + */ + bool apiRequestsOver {false}; + + /** + * Stores call function and user pointer + */ + template + using stored_pair = ppair; + + /** + * Stores multiple callbacks + */ + template + using stored_vector = evector *, stored_pair::deleter>; + + /** + * List of patcher callbacks + */ + stored_vector patcherLoadedCallbacks; + + /** + * List of kext callbacks + */ + stored_vector kextLoadedCallbacks; + + /** + * List of binary callbacks + */ + stored_vector binaryLoadedCallbacks; + + /** + * List of entitlement callbacks + */ + stored_vector entitlementRequestedCallbacks; + + /** + * List of processed kexts + */ + stored_vector storedKexts; + + /** + * List of processed procs + */ + evector storedProcs; + + /** + * List of processed binary mods + */ + evector storedBinaryMods; + + /** + * Copy client entitlement type (see IOUserClient) + */ + using t_copyClientEntitlement = OSObject *(*)(task_t, const char *); + + /** + * Hooked entitlement copying method + */ + static OSObject *copyClientEntitlement(task_t task, const char *entitlement); + + /** + * Trampoline for original entitlement copying method + */ + t_copyClientEntitlement orgCopyClientEntitlement {nullptr}; +}; + +EXPORT extern LiluAPI lilu; + +#endif /* kern_api_h */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_compat.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_compat.hpp new file mode 100755 index 0000000..e10360e --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_compat.hpp @@ -0,0 +1,31 @@ +// +// kern_compat.hpp +// Lilu +// +// Copyright © 2016-2017 vit9696. All rights reserved. +// + +#ifndef kern_compat_hpp +#define kern_compat_hpp + +#include + +// Legacy compatibility layer created to avoid 10.13 SDK macros +// unsupported in older systems and improperly guarded due to +// Availability.h header not being. Currently these macros +// are left to avoid compilation errors. +#define lilu_os_memcpy memcpy +#define lilu_os_memmove memmove +#define lilu_os_strncpy strncpy +#define lilu_os_strncat strncat +#define lilu_os_strlcat strlcat +#define lilu_os_strlcpy strlcpy +#define lilu_os_strcat strcat +#define lilu_os_bcopy bcopy + +// This may not be nice but will protect users from changes in KernInfo strcture. +#ifndef LILU_DISABLE_BRACE_WARNINGS +#pragma clang diagnostic error "-Wmissing-braces" +#endif + +#endif /* kern_compat_hpp */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_compression.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_compression.hpp new file mode 100755 index 0000000..8d2ee20 --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_compression.hpp @@ -0,0 +1,70 @@ +// +// kern_compression.hpp +// Lilu +// +// Copyright © 2016-2017 vit9696. All rights reserved. +// + +#ifndef kern_compression_hpp +#define kern_compression_hpp + +#include + +#ifdef LILU_COMPRESSION_SUPPORT + +#include +#include + +namespace Compression { + + /** + * Compression constants and modes + */ + static constexpr uint32_t Magic {0x706D6F63}; //comp + static constexpr uint32_t ModeLZVN {0x6E767A6C}; //lzvn + static constexpr uint32_t ModeLZSS {0x73737A6C}; //lzss + + /** + * Compressed header structure + */ + struct Header { + uint32_t magic; + uint32_t compression; + uint32_t hash; // adler32 + uint32_t decompressed; + uint32_t compressed; + uint32_t version; + uint32_t padding[90]; + }; + + /** + * Typed decompressing function (currently for lzvn and lzss) + * + * @param compression compression type + * @param dstlen decompression buffer size + * @param src compressed data + * @param srclen compressed data size + * @param buffer preallocated buffer to use + * + * @return decompressed buffer (must be freeded by Buffer::deleter if not preallocated) + */ + EXPORT uint8_t *decompress(uint32_t compression, uint32_t dstlen, const uint8_t *src, uint32_t srclen, uint8_t *buffer=nullptr); + + /** + * Typed compressing function (currently for lzss) + * + * @param compression compression type + * @param dstlen maximum compression buffer size + * @param src uncompressed data + * @param srclen uncompressed data size + * @param buffer preallocated buffer to use + * + * @return compressed buffer with its actual size in dstlen (must be freeded by Buffer::deleter if not preallocated) + */ + EXPORT uint8_t *compress(uint32_t compression, uint32_t &dstlen, const uint8_t *src, uint32_t srclen, uint8_t *buffer=nullptr); + +} + +#endif /* LILU_COMPRESSION_SUPPORT */ + +#endif /* kern_compression_hpp */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_config.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_config.hpp new file mode 100755 index 0000000..d5cdbf2 --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_config.hpp @@ -0,0 +1,33 @@ +// +// kern_config.hpp +// Lilu +// +// Copyright © 2016-2017 vit9696. All rights reserved. +// + +#ifndef kern_config_hpp +#define kern_config_hpp + +/** + * Enable kext patching support + */ +#define LILU_KEXTPATCH_SUPPORT 1 + +/** + * Enable compression and decompression support + */ +#define LILU_COMPRESSION_SUPPORT 1 + +/** + * Enable advanced disassembly API based on capstone + */ +// #define LILU_ADVANCED_DISASSEMBLY 1 + +/** + * Specify custom initialisation code + * Use these in plugins in Xcode Project Preprocessor Macros section. + */ +// #define LILU_CUSTOM_IOKIT_INIT 1 +// #define LILU_CUSTOM_KMOD_INIT 1 + +#endif /* kern_config_hpp */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_cpu.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_cpu.hpp new file mode 100755 index 0000000..6cba531 --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_cpu.hpp @@ -0,0 +1,417 @@ +// +// kern_cpu.hpp +// Lilu +// +// Copyright © 2018 vit9696. All rights reserved. +// + +#ifndef kern_cpu_h +#define kern_cpu_h + +#include +#include +#include + +#include + +/** + * XNU CPU-related exports missing from headers + */ +extern "C" { + int cpu_number(void); + void mp_rendezvous_no_intrs(void (*action_func)(void *), void *arg); +}; + +namespace CPUInfo { + /** + * Keep this in sync to XNU MAX_CPUS from osfmk/i386/mp.h + */ + static constexpr size_t MaxCpus {64}; + + /** + * Contents of CPUID(1) eax register contents describing model version + */ + struct CpuVersion { + uint32_t stepping : 4; + uint32_t model : 4; + uint32_t family : 4; + uint32_t type : 2; + uint32_t reserved1 : 2; + uint32_t extendedModel : 4; + uint32_t extendedFamily : 8; + uint32_t reserved2 : 4; + }; + + static_assert(sizeof(CpuVersion) == sizeof(uint32_t), "CpuVersion size mismatch!"); + + /** + * Intel CPU models as returned by CPUID + * The list is synchronised and updated with XNU source code (osfmk/i386/cpuid.h). + * Names are altered to avoid conflicts just in case. + * Last update: xnu-4903.221.2 + * Some details could be found on http://instlatx64.atw.hu and https://en.wikichip.org/wiki/64-bit_architecture#x86 + * Also: https://www.intel.com/content/dam/www/public/us/en/documents/sa00115-microcode-update-guidance.pdf + */ + enum CpuModel { + CPU_MODEL_UNKNOWN = 0x00, + CPU_MODEL_PENRYN = 0x17, + CPU_MODEL_NEHALEM = 0x1A, + CPU_MODEL_FIELDS = 0x1E, /* Lynnfield, Clarksfield */ + CPU_MODEL_DALES = 0x1F, /* Havendale, Auburndale */ + CPU_MODEL_NEHALEM_EX = 0x2E, + CPU_MODEL_DALES_32NM = 0x25, /* Clarkdale, Arrandale */ + CPU_MODEL_WESTMERE = 0x2C, /* Gulftown, Westmere-EP/-WS */ + CPU_MODEL_WESTMERE_EX = 0x2F, + CPU_MODEL_SANDYBRIDGE = 0x2A, + CPU_MODEL_JAKETOWN = 0x2D, + CPU_MODEL_IVYBRIDGE = 0x3A, + CPU_MODEL_IVYBRIDGE_EP = 0x3E, + CPU_MODEL_CRYSTALWELL = 0x46, + CPU_MODEL_HASWELL = 0x3C, + CPU_MODEL_HASWELL_EP = 0x3F, + CPU_MODEL_HASWELL_ULT = 0x45, + CPU_MODEL_BROADWELL = 0x3D, + CPU_MODEL_BROADWELL_ULX = 0x3D, + CPU_MODEL_BROADWELL_ULT = 0x3D, + CPU_MODEL_BRYSTALWELL = 0x47, + CPU_MODEL_SKYLAKE = 0x4E, + CPU_MODEL_SKYLAKE_ULT = 0x4E, + CPU_MODEL_SKYLAKE_ULX = 0x4E, + CPU_MODEL_SKYLAKE_DT = 0x5E, + CPU_MODEL_SKYLAKE_W = 0x55, + CPU_MODEL_KABYLAKE = 0x8E, + CPU_MODEL_KABYLAKE_ULT = 0x8E, + CPU_MODEL_KABYLAKE_ULX = 0x8E, + CPU_MODEL_KABYLAKE_DT = 0x9E, + CPU_MODEL_CANNONLAKE = 0x66, + CPU_MODEL_ICELAKE_Y = 0x7D, + CPU_MODEL_ICELAKE_U = 0x7E, + CPU_MODEL_ICELAKE_SP = 0x9F, /* Some variation of Ice Lake */ + CPU_MODEL_COMETLAKE_S = 0xA5, /* desktop CometLake */ + CPU_MODEL_COMETLAKE_Y = 0xA5, /* aka 10th generation Amber Lake Y */ + CPU_MODEL_COMETLAKE_U = 0xA6, + }; + + /** + * Known CPU vendors + */ + enum class CpuVendor { + Unknown, + AMD, + Intel + /* Add more processors here if needed */ + }; + + /** + * Intel CPU generations (starting from 0) + */ + enum class CpuGeneration { + Unknown, + Penryn, + Nehalem, + Westmere, + SandyBridge, + IvyBridge, + Haswell, + Broadwell, + Skylake, + KabyLake, + CoffeeLake, + CannonLake, + IceLake, + CometLake, + MaxGeneration + }; + + /* Responses identification request with %eax 0 */ + /* AMD: "AuthenticAMD" */ + static constexpr uint32_t signature_AMD_ebx = 0x68747541; + static constexpr uint32_t signature_AMD_edx = 0x69746e65; + static constexpr uint32_t signature_AMD_ecx = 0x444d4163; + /* CENTAUR: "CentaurHauls" */ + static constexpr uint32_t signature_CENTAUR_ebx = 0x746e6543; + static constexpr uint32_t signature_CENTAUR_edx = 0x48727561; + static constexpr uint32_t signature_CENTAUR_ecx = 0x736c7561; + /* CYRIX: "CyrixInstead" */ + static constexpr uint32_t signature_CYRIX_ebx = 0x69727943; + static constexpr uint32_t signature_CYRIX_edx = 0x736e4978; + static constexpr uint32_t signature_CYRIX_ecx = 0x64616574; + /* INTEL: "GenuineIntel" */ + static constexpr uint32_t signature_INTEL_ebx = 0x756e6547; + static constexpr uint32_t signature_INTEL_edx = 0x49656e69; + static constexpr uint32_t signature_INTEL_ecx = 0x6c65746e; + /* TM1: "TransmetaCPU" */ + static constexpr uint32_t signature_TM1_ebx = 0x6e617254; + static constexpr uint32_t signature_TM1_edx = 0x74656d73; + static constexpr uint32_t signature_TM1_ecx = 0x55504361; + /* TM2: "GenuineTMx86" */ + static constexpr uint32_t signature_TM2_ebx = 0x756e6547; + static constexpr uint32_t signature_TM2_edx = 0x54656e69; + static constexpr uint32_t signature_TM2_ecx = 0x3638784d; + /* NSC: "Geode by NSC" */ + static constexpr uint32_t signature_NSC_ebx = 0x646f6547; + static constexpr uint32_t signature_NSC_edx = 0x43534e20; + static constexpr uint32_t signature_NSC_ecx = 0x79622065; + /* NEXGEN: "NexGenDriven" */ + static constexpr uint32_t signature_NEXGEN_ebx = 0x4778654e; + static constexpr uint32_t signature_NEXGEN_edx = 0x72446e65; + static constexpr uint32_t signature_NEXGEN_ecx = 0x6e657669; + /* RISE: "RiseRiseRise" */ + static constexpr uint32_t signature_RISE_ebx = 0x65736952; + static constexpr uint32_t signature_RISE_edx = 0x65736952; + static constexpr uint32_t signature_RISE_ecx = 0x65736952; + /* SIS: "SiS SiS SiS " */ + static constexpr uint32_t signature_SIS_ebx = 0x20536953; + static constexpr uint32_t signature_SIS_edx = 0x20536953; + static constexpr uint32_t signature_SIS_ecx = 0x20536953; + /* UMC: "UMC UMC UMC " */ + static constexpr uint32_t signature_UMC_ebx = 0x20434d55; + static constexpr uint32_t signature_UMC_edx = 0x20434d55; + static constexpr uint32_t signature_UMC_ecx = 0x20434d55; + /* VIA: "VIA VIA VIA " */ + static constexpr uint32_t signature_VIA_ebx = 0x20414956; + static constexpr uint32_t signature_VIA_edx = 0x20414956; + static constexpr uint32_t signature_VIA_ecx = 0x20414956; + /* VORTEX: "Vortex86 SoC" */ + static constexpr uint32_t signature_VORTEX_ebx = 0x74726f56; + static constexpr uint32_t signature_VORTEX_edx = 0x36387865; + static constexpr uint32_t signature_VORTEX_ecx = 0x436f5320; + + /* Features in %ecx for leaf 1 */ + static constexpr uint32_t bit_SSE3 = 0x00000001; + static constexpr uint32_t bit_PCLMULQDQ = 0x00000002; + static constexpr uint32_t bit_DTES64 = 0x00000004; + static constexpr uint32_t bit_MONITOR = 0x00000008; + static constexpr uint32_t bit_DSCPL = 0x00000010; + static constexpr uint32_t bit_VMX = 0x00000020; + static constexpr uint32_t bit_SMX = 0x00000040; + static constexpr uint32_t bit_EIST = 0x00000080; + static constexpr uint32_t bit_TM2 = 0x00000100; + static constexpr uint32_t bit_SSSE3 = 0x00000200; + static constexpr uint32_t bit_CNXTID = 0x00000400; + static constexpr uint32_t bit_FMA = 0x00001000; + static constexpr uint32_t bit_CMPXCHG16B = 0x00002000; + static constexpr uint32_t bit_xTPR = 0x00004000; + static constexpr uint32_t bit_PDCM = 0x00008000; + static constexpr uint32_t bit_PCID = 0x00020000; + static constexpr uint32_t bit_DCA = 0x00040000; + static constexpr uint32_t bit_SSE41 = 0x00080000; + static constexpr uint32_t bit_SSE42 = 0x00100000; + static constexpr uint32_t bit_x2APIC = 0x00200000; + static constexpr uint32_t bit_MOVBE = 0x00400000; + static constexpr uint32_t bit_POPCNT = 0x00800000; + static constexpr uint32_t bit_TSCDeadline = 0x01000000; + static constexpr uint32_t bit_AESNI = 0x02000000; + static constexpr uint32_t bit_XSAVE = 0x04000000; + static constexpr uint32_t bit_OSXSAVE = 0x08000000; + static constexpr uint32_t bit_AVX = 0x10000000; + static constexpr uint32_t bit_F16C = 0x20000000; + static constexpr uint32_t bit_RDRND = 0x40000000; + + /* Features in %edx for leaf 1 */ + static constexpr uint32_t bit_FPU = 0x00000001; + static constexpr uint32_t bit_VME = 0x00000002; + static constexpr uint32_t bit_DE = 0x00000004; + static constexpr uint32_t bit_PSE = 0x00000008; + static constexpr uint32_t bit_TSC = 0x00000010; + static constexpr uint32_t bit_MSR = 0x00000020; + static constexpr uint32_t bit_PAE = 0x00000040; + static constexpr uint32_t bit_MCE = 0x00000080; + static constexpr uint32_t bit_CX8 = 0x00000100; + static constexpr uint32_t bit_APIC = 0x00000200; + static constexpr uint32_t bit_SEP = 0x00000800; + static constexpr uint32_t bit_MTRR = 0x00001000; + static constexpr uint32_t bit_PGE = 0x00002000; + static constexpr uint32_t bit_MCA = 0x00004000; + static constexpr uint32_t bit_CMOV = 0x00008000; + static constexpr uint32_t bit_PAT = 0x00010000; + static constexpr uint32_t bit_PSE36 = 0x00020000; + static constexpr uint32_t bit_PSN = 0x00040000; + static constexpr uint32_t bit_CLFSH = 0x00080000; + static constexpr uint32_t bit_DS = 0x00200000; + static constexpr uint32_t bit_ACPI = 0x00400000; + static constexpr uint32_t bit_MMX = 0x00800000; + static constexpr uint32_t bit_FXSR = 0x01000000; + static constexpr uint32_t bit_SSE = 0x02000000; + static constexpr uint32_t bit_SSE2 = 0x04000000; + static constexpr uint32_t bit_SS = 0x08000000; + static constexpr uint32_t bit_HTT = 0x10000000; + static constexpr uint32_t bit_TM = 0x20000000; + static constexpr uint32_t bit_PBE = 0x80000000; + + /* Features in %ebx for leaf 7 sub-leaf 0 */ + static constexpr uint32_t bit_FSGSBASE = 0x00000001; + static constexpr uint32_t bit_SGX = 0x00000004; + static constexpr uint32_t bit_BMI = 0x00000008; + static constexpr uint32_t bit_HLE = 0x00000010; + static constexpr uint32_t bit_AVX2 = 0x00000020; + static constexpr uint32_t bit_SMEP = 0x00000080; + static constexpr uint32_t bit_BMI2 = 0x00000100; + static constexpr uint32_t bit_ENH_MOVSB = 0x00000200; + static constexpr uint32_t bit_RTM = 0x00000800; + static constexpr uint32_t bit_MPX = 0x00004000; + static constexpr uint32_t bit_AVX512F = 0x00010000; + static constexpr uint32_t bit_AVX512DQ = 0x00020000; + static constexpr uint32_t bit_RDSEED = 0x00040000; + static constexpr uint32_t bit_ADX = 0x00080000; + static constexpr uint32_t bit_AVX512IFMA = 0x00200000; + static constexpr uint32_t bit_CLFLUSHOPT = 0x00800000; + static constexpr uint32_t bit_CLWB = 0x01000000; + static constexpr uint32_t bit_AVX512PF = 0x04000000; + static constexpr uint32_t bit_AVX51SER = 0x08000000; + static constexpr uint32_t bit_AVX512CD = 0x10000000; + static constexpr uint32_t bit_SHA = 0x20000000; + static constexpr uint32_t bit_AVX512BW = 0x40000000; + static constexpr uint32_t bit_AVX512VL = 0x80000000; + + /* Features in %ecx for leaf 7 sub-leaf 0 */ + static constexpr uint32_t bit_PREFTCHWT1 = 0x00000001; + static constexpr uint32_t bit_AVX512VBMI = 0x00000002; + static constexpr uint32_t bit_PKU = 0x00000004; + static constexpr uint32_t bit_OSPKE = 0x00000010; + static constexpr uint32_t bit_AVX512VPOPCNTDQ = 0x00004000; + static constexpr uint32_t bit_RDPID = 0x00400000; + + /* Features in %edx for leaf 7 sub-leaf 0 */ + static constexpr uint32_t bit_AVX5124VNNIW = 0x00000004; + static constexpr uint32_t bit_AVX5124FMAPS = 0x00000008; + + /* Features in %eax for leaf 13 sub-leaf 1 */ + static constexpr uint32_t bit_XSAVEOPT = 0x00000001; + static constexpr uint32_t bit_XSAVEC = 0x00000002; + static constexpr uint32_t bit_XSAVES = 0x00000008; + + /* Features in %ecx for leaf = 0x80000001 */; + static constexpr uint32_t bit_LAHF_LM = 0x00000001; + static constexpr uint32_t bit_ABM = 0x00000020; + static constexpr uint32_t bit_SSE4a = 0x00000040; + static constexpr uint32_t bit_PRFCHW = 0x00000100; + static constexpr uint32_t bit_XOP = 0x00000800; + static constexpr uint32_t bit_LWP = 0x00008000; + static constexpr uint32_t bit_FMA4 = 0x00010000; + static constexpr uint32_t bit_TBM = 0x00200000; + static constexpr uint32_t bit_MWAITX = 0x20000000; + + /* Features in %edx for leaf = 0x80000001 */; + static constexpr uint32_t bit_MMXEXT = 0x00400000; + static constexpr uint32_t bit_LM = 0x20000000; + static constexpr uint32_t bit_3DNOWP = 0x40000000; + static constexpr uint32_t bit_3DNOW = 0x80000000; + + /* Features in %ebx for leaf = 0x80000001 */; + static constexpr uint32_t bit_CLZERO = 0x00000001; + + /** + * Reads CPU information and other data. + */ + void init(); + + /** + * Installed CPU information mapping + */ + struct CpuTopology { + /** + * Number of physical processors installed + */ + uint8_t packageCount {0}; + + /** + * Number of physical cores per package + */ + uint8_t physicalCount[MaxCpus] {}; + + /** + * Number of logical cores per package + */ + uint8_t logicalCount[MaxCpus] {}; + + /** + * Total number of physical cores + */ + inline uint8_t totalPhysical() { + uint8_t count = physicalCount[0]; + for (uint8_t i = 1; i < packageCount; i++) + count += physicalCount[i]; + return count; + } + + /** + * Total number of logical cores + */ + inline uint8_t totalLogical() { + uint8_t count = logicalCount[0]; + for (uint8_t i = 1; i < packageCount; i++) + count += logicalCount[i]; + return count; + } + + /** + * Mapping of cpu_number() to CPU package from 0 to packageCount + */ + uint8_t numberToPackage[MaxCpus] {}; + + /** + * Mapping of cpu_number() to physical core from 0 to physicalCount in package + */ + uint8_t numberToPhysical[MaxCpus] {}; + + /** + * Mapping of cpu_number() to physical cores from 0 to totalPhysical. + */ + inline uint8_t numberToPhysicalUnique(uint8_t i) { + uint8_t num = 0; + uint8_t package = numberToPackage[i]; + for (uint8_t i = 0; i < package; i++) + num += physicalCount[i]; + return num + numberToPhysical[i]; + } + + /** + * Mapping of cpu_number() to logical thread from 0 to logicalCount in package + * Note, that the list is sorted, and the first physicalCount logical threads + * correspond to their corresponding physical cores. + */ + uint8_t numberToLogical[MaxCpus] {}; + }; + + /** + * Get running CPU generation. + * + * @param ofamily a pointer to store CPU family in + * @param omodel a pointer to store CPU model in + * @param ostepping a pointer to store CPU stepping in + * + * @return detected Intel CPU generation + */ + EXPORT CpuGeneration getGeneration(uint32_t *ofamily=nullptr, uint32_t *omodel=nullptr, uint32_t *ostepping=nullptr) DEPRECATE("Use BaseDeviceInfo");; + + /** + * Obtain CPU topology. + * + * @param topology parsed cpu topology, must be passed zeroed. + * + * @return true on success + */ + EXPORT bool getCpuTopology(CpuTopology &topology); + + /** + * Obtain cpuid registers + * + * @param no cpuid number + * @param count cpuid count + * @param a eax output pointer (optional) + * @param b ebx output pointer (optional) + * @param c ecx output pointer (optional) + * @param d edx output pointer (optional) + * + * @return true if supported + */ + EXPORT bool getCpuid(uint32_t no, uint32_t count, uint32_t *a, uint32_t *b=nullptr, uint32_t *c=nullptr, uint32_t *d=nullptr); + + /** + * Is haswell eligible hardware + */ + EXPORT bool isHaswellEligible(); +} + +#endif /* kern_cpu_h */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_crypto.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_crypto.hpp new file mode 100755 index 0000000..8e6c13d --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_crypto.hpp @@ -0,0 +1,95 @@ +// +// kern_crypto.hpp +// Lilu +// +// Copyright © 2017 vit9696. All rights reserved. +// + +#ifndef kern_crypto_h +#define kern_crypto_h + +#include +#include +#include + +namespace Crypto { + /** + * Currently this is equal to both key size and block size + */ + static constexpr uint32_t BlockSize = 16; + + /** + * Currently this is guaranteed hash size + */ + static constexpr uint32_t MinDigestSize = 32; + + /** + * Encrypted data format + */ + struct PACKED Encrypted { + uint8_t iv[BlockSize]; // Initialisation vector + struct PACKED Data { + uint32_t size; // Actual encrypted buffer size + uint8_t buf[BlockSize - sizeof(uint32_t)]; // Encrypted buffer >= BlockSize + }; + + union { + Data enc; + uint8_t buf[BlockSize]; + }; + }; + + /** + * Securely erase memory buffer + * Based off cc_clear from corecrypto (src/cc_clear.c) + * + * @param len buffer length + * @param dst buffer pointer + */ + inline void zeroMemory(size_t len, void *dst) { + auto vptr = reinterpret_cast(dst); + while (len--) + *vptr++ = '\0'; + } + + /** + * Generates cryptographically secure encryption key (from /dev/random) + * + * @return generated key of at least BlockSize bits long (must be freeded by Buffer::deleter) or nullptr + */ + EXPORT uint8_t *genUniqueKey(uint32_t size=BlockSize); + + /** + * Encrypts data of specified size and stores in Encrypted format + * + * @param key encryption key returned by genUniqueKey + * @param src source data + * @param size data size, encrypted size is returned on success + * + * @return encrypted data in Encrypted format (must be freed by Buffer::deleter) or nullptr + */ + EXPORT uint8_t *encrypt(const uint8_t *key, const uint8_t *src, uint32_t &size); + + /** + * Decrypts data of specified size stored in Encrypted format + * + * @param key encryption key returned by genUniqueKey + * @param src source data + * @param size data size, decrypted size is returned on success + * + * @return decrypted data (must be freed by Buffer::deleter) or nullptr + */ + EXPORT uint8_t *decrypt(const uint8_t *key, const uint8_t *src, uint32_t &size); + + /** + * Calculate digest of given size + * + * @param src source data + * @param size data size + * + * @return digest hash of at least MinDigestSize bytes (must be freeded by Buffer::deleter) or nullptr + */ + EXPORT uint8_t *hash(const uint8_t *src, uint32_t size); +} + +#endif /* kern_crypto_h */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_devinfo.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_devinfo.hpp new file mode 100755 index 0000000..dd649e9 --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_devinfo.hpp @@ -0,0 +1,382 @@ +// +// kern_devinfo.hpp +// Lilu +// +// Copyright © 2018-2020 vit9696. All rights reserved. +// + +#ifndef kern_devinfo_h +#define kern_devinfo_h + +#include +#include +#include +#include +#include + +/** + * Obtain installed devices split into categories. + * Should be used from onPatcherLoad and onwards. + */ +class DeviceInfo { + /** + * Updates reportedLayoutId + */ + void updateLayoutId(); + + /** + * Updates reportedFramebufferId + */ + void updateFramebufferId(); + + /** + * Obtains devices from PCI root + * + * @param pciRoot PCI root instance (commonly PCI0@0 device) + */ + void grabDevicesFromPciRoot(IORegistryEntry *pciRoot); + + /** + * Await for PCI device publishing in IODeviceTree plane + * + * @param obj wait for (PCI) object publishing + */ + void awaitPublishing(IORegistryEntry *obj); + +public: + /** + * Obtains autodetected legacy framebuffer if applicable + * + * @return framebuffer or 0xFFFFFFFF + */ + static uint32_t getLegacyFramebufferId(); + + /** + * Checks whether the framebuffer has connectors or not. + * + * @return true if the framebuffer has no connectors + */ + static bool isConnectorLessPlatformId(uint32_t id); + + /** + * Common external GPU parameter list + */ + struct ExternalVideo { + /** + * Aka GFX0 device + */ + IORegistryEntry *video {nullptr}; + + /** + * Aka HDAU device + */ + IORegistryEntry *audio {nullptr}; + + /** + * External GPU vendor + */ + uint32_t vendor {0}; + }; + + /** + * Aka HDEF device + */ + IORegistryEntry *audioBuiltinAnalog {nullptr}; + + /** + * Aka HDAU device for builtin GPU + */ + IORegistryEntry *audioBuiltinDigital {nullptr}; + + /** + * Aka IGPU device + */ + IORegistryEntry *videoBuiltin {nullptr}; + + /** + * Aka IMEI device + */ + IORegistryEntry *managementEngine {nullptr}; + + /** + * Aka GFX0 devices (kept in sync with audioExternal) + */ + evector videoExternal; + +private: + /** + * This is the default reported layout-id passed to reportedLayoutId. + * The reason for choosing 7 is its presence in 10.14 and the fact + * Apple frameworks still communicate to the files present on disk. + * For information purposes only! Use reportedLayoutId! + */ + static constexpr uint32_t DefaultReportedLayoutId = 7; + + /** + * The boot-arg to override the reported layout-id to AppleHDA. + * For user configuration only! Use reportedLayoutId! + */ + static constexpr const char *ReportedLayoutIdArg = "alcapplid"; + + /** + * The property to override the reported layout-id to AppleHDA. + * For user configuration only! Use reportedLayoutId! + */ + static constexpr const char *ReportedLayoutIdName = "apple-layout-id"; + +public: + /** + * Layout id to be reported by all audio devices (you must update it yourself). + * This follows the standard convention initially found in AppleALC: + * alcapplid=X boot-arg has highest priority and overrides any other value. + * apple-layout-id HDEF prop has normal priority, you may use it if you need. + * DefaultReportedLayoutId will be used if both of the above are not set. + */ + uint32_t reportedLayoutId {0}; + +private: + /** + * The boot-arg to override the reported AAPL,ig-platform-id to Intel drivers. + * For user configuration only! Use reportedFramebufferId! + */ + static constexpr const char *ReportedFrameIdArg = "igfxframe"; + + /** + * The boot-arg to override the reported AAPL,ig-platform-id to Intel drivers. + * Sets VESA framebuffer id (0xFFFFFFFF). + * For user configuration only! Use reportedFramebufferId! + */ + static constexpr const char *ReportedVesaIdArg = "-igfxvesa"; + + /** + * The boot-arg to force-disable any external GPU if found. + * For user configuration only! Use requestedExternalSwitchOff! + */ + static constexpr const char *RequestedExternalSwitchOffArg {"-wegnoegpu"}; + + /** + * The property to set your platform id for Intel drivers (Ivy and newer). + * For user configuration only! Use reportedFramebufferName! + */ + static constexpr const char *ReportedFrameIdName = "AAPL,ig-platform-id"; + + /** + * The property to set your platform id for Intel drivers (Sandy). + * For user configuration only! Use reportedFramebufferName! + */ + static constexpr const char *ReportedFrameIdLegacyName = "AAPL,snb-platform-id"; + + /** + * The IGPU property to force-disable any external GPU if found. + * For user configuration only! Use requestedExternalSwitchOff! + */ + static constexpr const char *RequestedExternalSwitchOffName {"disable-external-gpu"}; + + /** + * Known platform ids used by Intel GPU kexts + * For user configuration only! + */ + static constexpr uint32_t DefaultAppleSkylakePlatformId {0x19120000}; + static constexpr uint32_t DefaultAppleKabyLakePlatformId {0x59160000}; + static constexpr uint32_t DefaultAppleCoffeeLakePlatformId {0x3EA50000}; + static constexpr uint32_t DefaultAppleCannonLakePlatformId {0x5A520000}; + static constexpr uint32_t DefaultAppleIceLakeRealPlatformId {0x8A520000}; + static constexpr uint32_t DefaultAppleIceLakeSimulatorPlatformId {0xFF050000}; + + /** + * Framebuffers without any ports used for hardware acceleration only + * Note 1: Broadwell framebuffers all have connectors added. + * Note 2: Coffee Lake framebuffers without connectors are only present in 10.14. + * Note 3: prerelease Cannon Lake and Ice Lake framebuffers are without connectors. + * For user configuration only! + */ + static constexpr uint32_t ConnectorLessSandyBridgePlatformId1 {0x00030030}; + static constexpr uint32_t ConnectorLessSandyBridgePlatformId2 {0x00050000}; + static constexpr uint32_t ConnectorLessIvyBridgePlatformId1 {0x01620006}; + static constexpr uint32_t ConnectorLessIvyBridgePlatformId2 {0x01620007}; + static constexpr uint32_t ConnectorLessHaswellPlatformId1 {0x04120004}; + static constexpr uint32_t ConnectorLessHaswellPlatformId2 {0x0412000B}; + static constexpr uint32_t ConnectorLessSkylakePlatformId1 {0x19020001}; + static constexpr uint32_t ConnectorLessSkylakePlatformId2 {0x19170001}; + static constexpr uint32_t ConnectorLessSkylakePlatformId3 {0x19120001}; + static constexpr uint32_t ConnectorLessSkylakePlatformId4 {0x19320001}; + static constexpr uint32_t ConnectorLessKabyLakePlatformId1 {0x59180002}; + static constexpr uint32_t ConnectorLessKabyLakePlatformId2 {0x59120003}; + static constexpr uint32_t ConnectorLessCoffeeLakePlatformId1 {0x3E920003}; + static constexpr uint32_t ConnectorLessCoffeeLakePlatformId2 {0x3E910003}; + static constexpr uint32_t ConnectorLessCoffeeLakePlatformId3 {0x3E980003}; + static constexpr uint32_t ConnectorLessCoffeeLakePlatformId4 {0x9BC80003}; + static constexpr uint32_t ConnectorLessCoffeeLakePlatformId5 {0x9BC50003}; + static constexpr uint32_t ConnectorLessCoffeeLakePlatformId6 {0x9BC40003}; + +public: + /** + * Vesa framebuffer identifier + */ + static constexpr uint32_t DefaultVesaPlatformId {0xFFFFFFFF}; + + /** + * Framebuffer id to be reported to IGPU. + * This follows the standard convention initially found in IntelGraphicsFixup: + * igfxframe=X boot-arg has highest priority and overrides any other value. + * -igfxvesa forces 0xFFFFFFFF frame to get into VESA mode. + * Manually specified AAPL,ig-platform-id or AAPL,snb-platform-id go next. + * On Sandy Bridge processors a default AAPL,snb-platform-id will be tried afterwards. + * On Skylake and Kaby Lake processors some default id will be tried afterwards. + */ + uint32_t reportedFramebufferId {0}; + + /** + * Compatible platform id property name for this IGPU + */ + const char *reportedFramebufferName {nullptr}; + + /** + * Set to true if the framebuffer has no connectors + */ + bool reportedFramebufferIsConnectorLess {false}; + + /** + * Known variants of firmware vendors + * Please note, that it may not be possible to always detect the right vendor + */ + enum class FirmwareVendor { + Unknown, + Apple, + VMware, + EDKII, + Parallels, + AMI, + Insyde, + Phoenix, + HP + }; + + /** + * Firmware vendor manufacturer + */ + FirmwareVendor firmwareVendor {FirmwareVendor::Unknown}; + + /** + * Requested external GPU switchoff + */ + bool requestedExternalSwitchOff {false}; + + /** + * Allocate and initialise cached device list. + * + * @return device list or nullptr + */ + static DeviceInfo *createCached(); + + /** + * Allocate and initialise the device list. + * + * @return device list or nullptr + */ + EXPORT static DeviceInfo *create(); + + /** + * Release initialised device list. + * + * @param d device list + */ + EXPORT static void deleter(DeviceInfo *d NONNULL); +}; + +/** + * Simple device information available at early stage. + */ +class BaseDeviceInfo { + /** + * Updates firmwareVendor + */ + void updateFirmwareVendor(); + + /** + * Updates model information + */ + void updateModelInfo(); +public: + /** + * Board identifier board-id (VMware has "440BX Desktop Reference Platform", eek) + */ + char boardIdentifier[48] {}; + + /** + * Model identifier + */ + char modelIdentifier[48] {}; + + /** + * Computer model type. + */ + int modelType {WIOKit::ComputerModel::ComputerAny}; + + /** + * Firmware vendor manufacturer + */ + DeviceInfo::FirmwareVendor firmwareVendor {DeviceInfo::FirmwareVendor::Unknown}; + + /** + * Known variants of bootloader vendors + * Please note, that it may not be possible to always detect the right vendor + */ + enum class BootloaderVendor { + Unknown, + Acidanthera, + Clover + }; + + /** + * Bootloader vendor + */ + BootloaderVendor bootloaderVendor {BootloaderVendor::Unknown}; + + /** + * CPU vendor + */ + CPUInfo::CpuVendor cpuVendor {CPUInfo::CpuVendor::Unknown}; + + /** + * CPU generation + */ + CPUInfo::CpuGeneration cpuGeneration {CPUInfo::CpuGeneration::Unknown}; + + /** + * CPU family + */ + uint32_t cpuFamily {}; + + /** + * CPU model + */ + uint32_t cpuModel {}; + + /** + * CPU stepping + */ + uint32_t cpuStepping {}; + + /** + * CPU max level + */ + uint32_t cpuMaxLevel {}; + + /** + * CPU max level (ext) + */ + uint32_t cpuMaxLevelExt {0x80000000}; + + /** + * Obtain base device info. + */ + EXPORT static const BaseDeviceInfo &get(); + + /** + * Initialize global base device info. + */ + static void init(); +}; + +#endif /* kern_devinfo_h */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_disasm.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_disasm.hpp new file mode 100755 index 0000000..39709b3 --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_disasm.hpp @@ -0,0 +1,165 @@ +// +// kern_disasm.hpp +// Lilu +// +// Copyright © 2016-2017 vit9696. All rights reserved. +// + +#ifndef kern_disasm_hpp +#define kern_disasm_hpp + +#include +#include +#include + +#ifdef LILU_ADVANCED_DISASSEMBLY +#ifndef CAPSTONE_HAS_OSXKERNEL +#define CAPSTONE_HAS_OSXKERNEL 1 +#endif +#include +#endif /* LILU_ADVANCED_DISASSEMBLY */ + +#include +#include + +class Disassembler { +#ifdef LILU_ADVANCED_DISASSEMBLY + /** + * Because captsone handle can be 0 + */ + bool initialised {false}; + + /** + * Internal capstone handle + */ + size_t handle {}; +#endif + + /** + * Max instruction size + */ + static constexpr size_t MaxInstruction {15}; +public: + + /** + * Return the real instruction size contained within min bytes + * Unlike instructionSize this uses HDE engine and at the cost of reduced compatibility it is much faster + * Note: instruction pointer should point to at least min + 32 valid bytes. + * + * @param ptr instruction pointer + * @param min minimal possible size + * + * @return instruction size >= min on success or 0 + */ + EXPORT static size_t quickInstructionSize(mach_vm_address_t ptr, size_t min); + + /* Note, code should point to at least 32 valid bytes. */ + EXPORT static size_t hdeDisasm(mach_vm_address_t code, hde64s *hs); +#ifdef LILU_ADVANCED_DISASSEMBLY + + /** + * Initialise advanced dissassembling framework + * + * @param detailed debugging output necessity + * + * @return true on success + */ + EXPORT bool init(bool detailed=false); + + /** + * Deinitialise advanced dissassembling framework, must be called regardless of the init error + */ + EXPORT void deinit(); + + /** + * Reads size bytes from addr and disassembles them. + * + * @param addr Address to read from + * @param size Size of buffer to read + * @param result Disassembled instructions array. You must free it + * + * @return size of result + */ + EXPORT size_t disasmBuf(mach_vm_address_t addr, size_t size, cs_insn **result); + + /** + * Return the real instruction size contained within min bytes + * + * @param ptr instruction pointer + * @param min minimal possible size + * + * @return instruction size >= min on success or 0 + */ + EXPORT size_t instructionSize(mach_vm_address_t ptr, size_t min); + + /** + * Reads lookup_size bytes from addr and disassembles them. + * After disassembling, tries to find num-th entry with call instruction, which argument is an immediate value (some address). + * + * @param addr Address to read from + * @param num Number of call instruction to search for + * @param lookup_size Number of bytes to read + * + * @note It is assumed that the operand contains a positive relative address. + * + * @return direct address of num-th call instruction on success, else 0 + */ + EXPORT mach_vm_address_t disasmNthSub(mach_vm_address_t addr, size_t num, size_t lookup_size); + + /** + * @brief Reads lookup_size bytes from addr and disassembles them. + * + * After disassembling, tries to find num-th entry with jmp instruction, which argument is an immediate value (some address). + * + * @param addr Address to read from + * @param num Number of jmp instruction to search for + * @param lookup_size Number of bytes to read + * + * @note It is assumed that the operand contains a positive relative address. + * + * @return direct address of num-th jmp instruction on success, else 0 + */ + EXPORT mach_vm_address_t disasmNthJmp(mach_vm_address_t addr, size_t num, size_t lookup_size); + + /** + * Reads lookup_size bytes from addr and disassembles them. + * After disassembling, tries to find num-th entry of inst instruction. + * + * @param addr Addres to read from + * @param ins Instruction code + * @param num Number of ins instruction to search for + * @param lookup_size Number of bytes to read + * + * @return address of found instruction on success, else 0 + */ + EXPORT mach_vm_address_t disasmNthIns(mach_vm_address_t addr, x86_insn ins, size_t num, size_t lookup_size); + + /** + * Disassembly matching structure + */ + struct DisasmSig { + x86_insn ins; // instruction + bool sub; // relevant only for X86_INS_CALL, if its arg is X86_OP_IMM + bool addr; // if you want to return the address of exact inst in sig + + static DisasmSig *create() { return new DisasmSig; } + static void deleter(DisasmSig *sig NONNULL) { delete sig; } + }; + + /** + * Reads lookup_size bytes from addr and disassembles them. + * After disassembling, tries to find num-th entry of sig instruction pattern. + * + * @param addr Address to read from + * @param sig Instruction pattern + * @param num Order of pattern to search for + * @param lookup_size Number of bytes to read + * + * @return direct address of pattern start on success, else 0 + */ + EXPORT mach_vm_address_t disasmSig(mach_vm_address_t addr, evector &sig, size_t num, size_t lookup_size); + +#endif /* LILU_ADVANCED_DISASSEMBLY */ +}; + +#endif /* kern_disasm_hpp */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_efi.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_efi.hpp new file mode 100755 index 0000000..aa31cdb --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_efi.hpp @@ -0,0 +1,86 @@ +// +// kern_efi.hpp +// Lilu +// +// Copyright © 2018 vit9696. All rights reserved. +// + +#ifndef kern_efi_h +#define kern_efi_h + +#include + +#include + +/** + * Convert 32-bit EFI errors provided by Apple to 64-bit EFI errors + */ +#define EFI_ERROR64(x) (((x) & ~(1ULL << 31)) | (1ULL << 63)) +static_assert(EFI_LOAD_ERROR == 0x80000001 && EFI_ERROR64(EFI_LOAD_ERROR) == 0x8000000000000001, + "Apple has finally upgraded EFI headers!"); + +class EfiRuntimeServices { + IOLock *accessLock {nullptr}; + static EfiRuntimeServices *instance; +public: + /** + * Activates EFI Runtime Services + */ + static void activate(); + + /** + * Lilu custom GUIDs exports, see OcSupportPkg/Include/Guid/OcVariables.h + */ + EXPORT static const EFI_GUID LiluVendorGuid; + EXPORT static const EFI_GUID LiluReadOnlyGuid; + EXPORT static const EFI_GUID LiluWriteOnlyGuid; + + /** + * Get EFI Runtime Services wrapper if supported + * + * @param lock lock instance during the run, must be put back + * + * @return wrapper instance + */ + EXPORT static EfiRuntimeServices *get(bool lock=false); + + /** + * Put EFI Runtime Services wrapper to unlock + */ + EXPORT void put(); + + /** + * Perform system reset (does not return on success) + * + * @param type reset type + */ + EXPORT void resetSystem(EFI_RESET_TYPE type); + + /** + * Obtain EFI variable, invokes EFI_RUNTIME_SERVICES::GetVariable. + * + * @param name variable name + * @param guid vendor guid + * @param attr variable attributes + * @param size data buffer size updated on read + * @param data read data + * + * @return EFI_STATUS code + */ + EXPORT uint64_t getVariable(const char16_t *name, const EFI_GUID *guid, uint32_t *attr, uint64_t *size, void *data); + + /** + * Set EFI variable, invokes EFI_RUNTIME_SERVICES::SetVariable. + * + * @param name variable name + * @param guid vendor guid + * @param attr variable attributes + * @param size data buffer size + * @param data data to write + * + * @return EFI_STATUS code + */ + EXPORT uint64_t setVariable(const char16_t *name, const EFI_GUID *guid, uint32_t attr, uint64_t size, void *data); +}; + +#endif /* kern_efi_h */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_file.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_file.hpp new file mode 100755 index 0000000..804eb67 --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_file.hpp @@ -0,0 +1,92 @@ +// +// kern_file.hpp +// Lilu +// +// Copyright © 2016-2017 vit9696. All rights reserved. +// + +#ifndef kern_file_hpp +#define kern_file_hpp + +#include +#include + +#include +#include + +namespace FileIO { + /** + * Reads file data at path + * + * @param path full file path + * @param size bytes read + * + * @return allocated buffer on success or nullptr on error + */ + EXPORT uint8_t *readFileToBuffer(const char *path, size_t &size); + + /** + * Read file data from a vnode + * + * @param buffer output buffer + * @param off file offset + * @param sz bytes to read + * @param vnode file node + * @param ctxt filesystem context + * + * @return 0 on success + */ + EXPORT int readFileData(void *buffer, off_t off, size_t sz, vnode_t vnode, vfs_context_t ctxt); + + /** + * Read file size from a vnode + * + * @param vnode file node + * @param ctxt filesystem context + * + * @return file size or 0 + */ + EXPORT size_t readFileSize(vnode_t vnode, vfs_context_t ctxt); + + /** + * Writes buffer to a file at path + * + * @param path full file path + * @param buffer input buffer + * @param size bytes write + * @param fmode file opening mode + * @param cmode file permissions + * + * @return 0 on success + */ + EXPORT int writeBufferToFile(const char *path, void *buffer, size_t size, int fmode=O_TRUNC | O_CREAT | FWRITE | O_NOFOLLOW, int cmode=S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); + + /** + * Write file data to a vnode + * + * @param buffer input buffer + * @param off file offset + * @param size bytes to write + * @param vnode file node + * @param ctxt filesystem context + * + * @return 0 on success + */ + EXPORT int writeFileData(void *buffer, off_t off, size_t size, vnode_t vnode, vfs_context_t ctxt); + + /** + * Perform file i/o through a vnode + * + * @param buffer input buffer + * @param off file offset + * @param size bytes to write + * @param vnode file node + * @param ctxt filesystem context + * @param write write to buffer otherwise read + * + * @return 0 on success + */ + int performFileIO(void *buffer, off_t off, size_t size, vnode_t vnode, vfs_context_t ctxt, bool write); +} + +#endif /* kern_file_hpp */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_iokit.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_iokit.hpp new file mode 100755 index 0000000..c7f48bc --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_iokit.hpp @@ -0,0 +1,331 @@ +// +// kern_iokit.hpp +// Lilu +// +// Copyright © 2016-2017 vit9696. All rights reserved. +// + +#ifndef kern_iokit_hpp +#define kern_iokit_hpp + +#include +#include +#include + +#include +#include + +namespace WIOKit { + + /** + * AppleHDAEngine::getLocation teaches us to use loop infinitely when talking to IOReg + * This feels mad and insane, since it may prevent the system from booting. + * Although this had never happened, we will use a far bigger fail-safe stop value. + */ + static constexpr size_t bruteMax {0x10000000}; + + /** + * Read typed OSData + * + * @param obj read object + * @param value read value + * @param name propert name + * + * @return true on success + */ + template + inline bool getOSDataValue(const OSObject *obj, const char *name, T &value) { + if (obj) { + auto data = OSDynamicCast(OSData, obj); + if (data && data->getLength() == sizeof(T)) { + value = *static_cast(data->getBytesNoCopy()); + DBGLOG("iokit", "getOSData %s has %llX value", name, static_cast(value)); + return true; + } else { + SYSLOG("iokit", "getOSData %s has unexpected format", name); + } + } else { + DBGLOG("iokit", "getOSData %s was not found", name); + } + return false; + } + + /** + * Read typed OSData through a temp type + * + * @param obj read object + * @param value read value + * @param name propert name + * + * @return true on success + */ + template + inline bool getOSDataValue(const OSObject *obj, const char *name, T &value) { + AS tmp; + if (getOSDataValue(obj, name, tmp)) { + value = static_cast(tmp); + return true; + } + + return false; + } + + /** + * Read typed OSData from IORegistryEntry + * + * @see getOSDataValue + */ + template + inline bool getOSDataValue(const IORegistryEntry *sect, const char *name, T &value) { + return getOSDataValue(sect->getProperty(name), name, value); + } + + /** + * Read typed OSData from IORegistryEntry + * + * @see getOSDataValue + */ + template + inline bool getOSDataValue(const IORegistryEntry *sect, const char *name, T &value) { + return getOSDataValue(sect->getProperty(name), name, value); + } + + /** + * Read typed OSData from IORegistryEntry + * + * @see getOSDataValue + */ + template + inline bool getOSDataValue(const OSDictionary *dict, const char *name, T &value) { + return getOSDataValue(dict->getObject(name), name, value); + } + + /** + * Read typed OSData from IORegistryEntry + * + * @see getOSDataValue + */ + template + inline bool getOSDataValue(const OSDictionary *dict, const char *name, T &value) { + return getOSDataValue(dict->getObject(name), name, value); + } + + /** + * Retrieve property object + * + * @param entry IORegistry entry + * @param property property name + * + * @return property object (must be released) or nullptr + */ + EXPORT LIBKERN_RETURNS_RETAINED OSSerialize *getProperty(IORegistryEntry *entry, const char *property); + + /** + * Model variants + */ + struct ComputerModel { + enum { + ComputerInvalid = 0x0, + ComputerLaptop = 0x1, + ComputerDesktop = 0x2, + ComputerAny = ComputerLaptop | ComputerDesktop + }; + }; + + /** + * PCI GPU Vendor identifiers + */ + struct VendorID { + enum : uint16_t { + ATIAMD = 0x1002, + AMDZEN = 0x1022, + NVIDIA = 0x10DE, + Intel = 0x8086, + VMware = 0x15AD, + QEMU = 0x1B36, + }; + }; + + /** + * PCI class codes + */ + struct ClassCode { + enum : uint32_t { + VGAController = 0x030000, + // I have never seen this one, but laptops are evil. + XGAController = 0x030100, + // Some laptops use this for Optimus GPUs. + Ex3DController = 0x030200, + DisplayController = 0x038000, + PCIBridge = 0x060400, + // HDA device on some laptops like Acer Aspire VN7-592G (INSYDE). + HDAMmDevice = 0x040100, + // Watch out for PCISubclassMask, 0x040380 is common on laptops. + HDADevice = 0x040300, + // This does not seem to be documented. It works on Haswell at least. + IMEI = 0x078000, + // To ignore device subclasses. + PCISubclassMask = 0xFFFF00, + }; + }; + + /** + * Definitions of PCI Config Registers + */ + enum PCIRegister : uint8_t { + kIOPCIConfigVendorID = 0x00, + kIOPCIConfigDeviceID = 0x02, + kIOPCIConfigCommand = 0x04, + kIOPCIConfigStatus = 0x06, + kIOPCIConfigRevisionID = 0x08, + kIOPCIConfigClassCode = 0x09, + kIOPCIConfigCacheLineSize = 0x0C, + kIOPCIConfigLatencyTimer = 0x0D, + kIOPCIConfigHeaderType = 0x0E, + kIOPCIConfigBIST = 0x0F, + kIOPCIConfigBaseAddress0 = 0x10, + kIOPCIConfigBaseAddress1 = 0x14, + kIOPCIConfigBaseAddress2 = 0x18, + kIOPCIConfigBaseAddress3 = 0x1C, + kIOPCIConfigBaseAddress4 = 0x20, + kIOPCIConfigBaseAddress5 = 0x24, + kIOPCIConfigCardBusCISPtr = 0x28, + kIOPCIConfigSubSystemVendorID = 0x2C, + kIOPCIConfigSubSystemID = 0x2E, + kIOPCIConfigExpansionROMBase = 0x30, + kIOPCIConfigCapabilitiesPtr = 0x34, + kIOPCIConfigInterruptLine = 0x3C, + kIOPCIConfigInterruptPin = 0x3D, + kIOPCIConfigMinimumGrant = 0x3E, + kIOPCIConfigMaximumLatency = 0x3F, + kIOPCIConfigGraphicsControl = 0x50 + }; + + /** + * Fixed offsets for PCI Config I/O virtual methods + */ + struct PCIConfigOffset { + enum : size_t { + ConfigRead32 = 0x10A, + ConfigWrite32 = 0x10B, + ConfigRead16 = 0x10C, + ConfigWrite16 = 0x10D, + ConfigRead8 = 0x10E, + ConfigWrite8 = 0x10F, + GetBusNumber = 0x11D, + GetDeviceNumber = 0x11E, + GetFunctionNumber = 0x11F + }; + }; + + /** + * PCI Config I/O method prototypes + */ + using t_PCIConfigRead32 = uint32_t (*)(IORegistryEntry *service, uint32_t space, uint8_t offset); + using t_PCIConfigRead16 = uint16_t (*)(IORegistryEntry *service, uint32_t space, uint8_t offset); + using t_PCIConfigRead8 = uint8_t (*)(IORegistryEntry *service, uint32_t space, uint8_t offset); + using t_PCIConfigWrite32 = void (*)(IORegistryEntry *service, uint32_t space, uint8_t offset, uint32_t data); + using t_PCIConfigWrite16 = void (*)(IORegistryEntry *service, uint32_t space, uint8_t offset, uint16_t data); + using t_PCIConfigWrite8 = void (*)(IORegistryEntry *service, uint32_t space, uint8_t offset, uint8_t data); + using t_PCIGetBusNumber = uint8_t (*)(IORegistryEntry *service); + using t_PCIGetDeviceNumber = uint8_t (*)(IORegistryEntry *service); + using t_PCIGetFunctionNumber = uint8_t (*)(IORegistryEntry *service); + + /** + * Await for device publishing in IOService plane + * + * @param obj wait for (PCI) object publishing + * + * @retval true on success + */ + EXPORT bool awaitPublishing(IORegistryEntry *obj); + + /** + * Read PCI Config register + * + * @param service IOPCIDevice-compatible service. + * @param reg PCI config register + * @param space adress space + * @param size read size for reading custom registers + * + * @return value read + */ + EXPORT uint32_t readPCIConfigValue(IORegistryEntry *service, uint32_t reg, uint32_t space = 0, uint32_t size = 0); + + /** + * Retrieve PCI device address + * + * @param service IOPCIDevice-compatible service. + * @param bus bus address + * @param device device address + * @param function function address + */ + EXPORT void getDeviceAddress(IORegistryEntry *service, uint8_t &bus, uint8_t &device, uint8_t &function); + + /** + * Retrieve the computer type + * + * @return valid computer type or ComputerAny + */ + EXPORT int getComputerModel() DEPRECATE("Use BaseDeviceInfo"); + + /** + * Retrieve computer model and/or board-id properties + * + * @param model model name output buffer or null + * @param modelsz model name output buffer size + * @param board board identifier output buffer or null + * @param boardsz board identifier output buffer size + * + * @return true if relevant properties already are available, otherwise buffers are unchanged + */ + EXPORT bool getComputerInfo(char *model, size_t modelsz, char *board, size_t boardsz) DEPRECATE("Use BaseDeviceInfo"); + + /** + * Retrieve an ioreg entry by path/prefix + * + * @param path an exact lookup path + * @param prefix entry prefix at path + * @param plane plane to lookup in + * @param proc process every found entry with the method + * @param brute kick ioreg until a value is found + * @param user pass some value to the callback function + * + * @return entry pointer (must NOT be released) or nullptr (on failure or in proc mode) + */ + EXPORT LIBKERN_RETURNS_NOT_RETAINED IORegistryEntry *findEntryByPrefix(const char *path, const char *prefix, const IORegistryPlane *plane, bool (*proc)(void *, IORegistryEntry *)=nullptr, bool brute=false, void *user=nullptr); + + /** + * Retrieve an ioreg entry by path/prefix + * + * @param entry an ioreg entry to look in + * @param prefix entry prefix at path + * @param plane plane to lookup in + * @param proc process every found entry with the method + * @param brute kick ioreg until a value is found + * @param user pass some value to the callback function + * + * @return entry pointer (must NOT be released) or nullptr (on failure or in proc mode) + */ + EXPORT LIBKERN_RETURNS_NOT_RETAINED IORegistryEntry *findEntryByPrefix(IORegistryEntry *entry, const char *prefix, const IORegistryPlane *plane, bool (*proc)(void *, IORegistryEntry *)=nullptr, bool brute=false, void *user=nullptr); + + /** + * Check if we are using prelinked kernel/kexts or not + * + * @return true when confirmed that we definitely are + */ + EXPORT bool usingPrelinkedCache(); + + /** + * Properly rename the device + * + * @param entry device to rename + * @param name new name + * @param compat correct compatible + * + * @return true on success + */ + EXPORT bool renameDevice(IORegistryEntry *entry, const char *name, bool compat=true); +} + +#endif /* kern_iokit_hpp */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_mach.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_mach.hpp new file mode 100755 index 0000000..1d1d3ce --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_mach.hpp @@ -0,0 +1,325 @@ +// +// kern_mach.hpp +// Lilu +// +// Certain parts of code are the subject of +// copyright © 2011, 2012, 2013, 2014 fG!, reverser@put.as - http://reverse.put.as +// Copyright © 2016-2017 vit9696. All rights reserved. +// + +#ifndef kern_mach_hpp +#define kern_mach_hpp + +#include +#include + +#include +#include +#include +#include +#include +#include + +class MachInfo { + mach_vm_address_t running_text_addr {0}; // the address of running __TEXT segment + mach_vm_address_t disk_text_addr {0}; // the same address at from a file + mach_vm_address_t kaslr_slide {0}; // the kernel aslr slide, computed as the difference between above's addresses + uint8_t *file_buf {nullptr}; // read file data + OSDictionary *prelink_dict {nullptr}; // read prealinked kext dictionary + uint8_t *prelink_addr {nullptr}; // prelink text base address + mach_vm_address_t prelink_vmaddr {0}; // prelink text base vm address (for kexts this is their actual slide) + uint32_t file_buf_size {0}; // read file data size + uint8_t *linkedit_buf {nullptr}; // pointer to __LINKEDIT buffer containing symbols to solve + bool linkedit_buf_ro {false}; // linkedit_buf is read-only (not copy). + uint64_t linkedit_fileoff {0}; // __LINKEDIT file offset so we can read + uint64_t linkedit_size {0}; + uint32_t symboltable_fileoff {0}; // file offset to symbol table - used to position inside the __LINKEDIT buffer + uint32_t symboltable_nr_symbols {0}; + uint32_t stringtable_fileoff {0}; // file offset to string table + mach_header_64 *running_mh {nullptr}; // pointer to mach-o header of running kernel item + mach_vm_address_t address_slots {0}; // pointer after mach-o header to store pointers + off_t fat_offset {0}; // additional fat offset + size_t memory_size {HeaderSize}; // memory size + bool kaslr_slide_set {false}; // kaslr can be null, used for disambiguation + bool allow_decompress {true}; // allows mach decompression + bool prelink_slid {false}; // assume kaslr-slid kext addresses + bool kernel_collection {false}; // kernel collection (11.0+) + uint64_t self_uuid[2] {}; // saved uuid of the loaded kext or kernel + + /** + * Kernel slide is aligned by 20 bits + */ + static constexpr size_t KASLRAlignment {0x100000}; + + /** + * Retrieve LC_UUID command value from a mach header + * + * @param header mach header pointer + * + * @return UUID or nullptr + */ + uint64_t *getUUID(void *header); + + /** + * Retrieve and preserve LC_UUID command value from a mach header + * + * @param header mach header pointer + * + * @return true on success + */ + bool loadUUID(void *header); + + /** + * Enable/disable the Write Protection bit in CR0 register + * + * @param enable the desired value + * + * @return KERN_SUCCESS if succeeded + */ + static kern_return_t setWPBit(bool enable); + + /** + * Retrieve the first pages of a binary at disk into a buffer + * Version that uses KPI VFS functions and a ripped uio_createwithbuffer() from XNU + * + * @param buffer allocated buffer sized no less than HeaderSize + * @param vnode file node + * @param ctxt filesystem context + * @param decompress enable decompression + * @param off fat offset or 0 + * + * @return KERN_SUCCESS if the read data contains 64-bit mach header + */ + kern_return_t readMachHeader(uint8_t *buffer, vnode_t vnode, vfs_context_t ctxt, off_t off=0); + + /** + * Retrieve the whole linkedit segment into target buffer from kernel binary at disk + * + * @param vnode file node + * @param ctxt filesystem context + * + * @return KERN_SUCCESS on success + */ + kern_return_t readLinkedit(vnode_t vnode, vfs_context_t ctxt); + + /** + * Retrieve necessary mach-o header information from the mach header + * + * @param header read header sized no less than HeaderSize + */ + void processMachHeader(void *header); + + /** + * Load kext info dictionary and addresses if they were not loaded previously + */ + void updatePrelinkInfo(); + + /** + * Lookup mach image in prelinked image + * + * @param identifier identifier + * @param imageSize size of the returned buffer + * @param slide actual slide for symbols (normally kaslr or 0) + * @param missing set to true on successful prelink parsing when image is not needed + * + * @return pointer to const buffer on success or nullptr + */ + uint8_t *findImage(const char *identifier, uint32_t &imageSize, mach_vm_address_t &slide, bool &missing); + + MachInfo(bool asKernel, const char *id) : isKernel(asKernel), objectId(id) { + DBGLOG("mach", "MachInfo asKernel %d object constructed", asKernel); + } + MachInfo(const MachInfo &) = delete; + MachInfo &operator =(const MachInfo &) = delete; + + /** + * Resolve mach data in the kernel via prelinked cache + * + * @param prelink prelink information source (i.e. Kernel MachInfo) + * + * @return KERN_SUCCESS if loaded + */ + kern_return_t initFromPrelinked(MachInfo *prelink); + + /** + * Resolve mach data in the kernel via filesystem access + * + * @param paths filesystem paths for lookup + * @param num the number of paths passed + * + * @return KERN_SUCCESS if loaded + */ + kern_return_t initFromFileSystem(const char * const paths[], size_t num); + + /** + * Resolve mach data in the kernel via memory access + * + * @return KERN_SUCCESS if loaded + */ + kern_return_t initFromMemory(); + +public: + + /** + * Each header is assumed to fit two pages + */ + static constexpr size_t HeaderSize {PAGE_SIZE_64*2}; + + /** + * Representation mode (kernel/kext) + */ + EXPORT const bool isKernel; + + /** + * Specified file identifier + */ + EXPORT const char *objectId {nullptr}; + + /** + * MachInfo object generator + * + * @param asKernel this MachInfo represents a kernel + * @param id kinfo identifier (e.g. CFBundleIdentifier) + * + * @return MachInfo object or nullptr + */ + static MachInfo *create(bool asKernel=false, const char *id=nullptr) { return new MachInfo(asKernel, id); } + static void deleter(MachInfo *i NONNULL) { delete i; } + + /** + * Resolve mach data in the kernel + * + * @param paths filesystem paths for lookup + * @param num the number of paths passed + * @param prelink prelink information source (i.e. Kernel MachInfo) + * @param fsfallback fallback to reading from filesystem if prelink failed + * + * @return KERN_SUCCESS if loaded + */ + EXPORT kern_return_t init(const char * const paths[], size_t num = 1, MachInfo *prelink=nullptr, bool fsfallback=false); + + /** + * Release the allocated memory, must be called regardless of the init error + */ + EXPORT void deinit(); + + /** + * Retrieve the mach header and __TEXT addresses for KC mode + * + * @param slide load slide if calculating for kexts + * + * @return KERN_SUCCESS on success + */ + kern_return_t kcGetRunningAddresses(mach_vm_address_t slide); + + /** + * Get address slot if present + * + * @return address slot on success + * @return NULL on success + */ + mach_vm_address_t getAddressSlot(); + + /** + * Retrieve the mach header and __TEXT addresses + * + * @param slide load slide if calculating for kexts + * @param size memory size + * @param force force address recalculation + * + * @return KERN_SUCCESS on success + */ + EXPORT kern_return_t getRunningAddresses(mach_vm_address_t slide=0, size_t size=0, bool force=false); + + /** + * Set the mach header address + * + * @param slide load address + * @param size memory size + * + * @return KERN_SUCCESS on success + */ + EXPORT kern_return_t setRunningAddresses(mach_vm_address_t slide=0, size_t size=0); + + /** + * Retrieve running mach positions + * + * @param header pointer to header + * @param size file size + */ + EXPORT void getRunningPosition(uint8_t * &header, size_t &size); + + /** + * Solve a mach symbol (running addresses must be calculated) + * + * @param symbol symbol to solve + * + * @return running symbol address or 0 + */ + EXPORT mach_vm_address_t solveSymbol(const char *symbol); + + /** + * Find the kernel base address (mach-o header) + * + * @return kernel base address or 0 + */ + EXPORT mach_vm_address_t findKernelBase(); + + /** + * Compare the loaded kernel with the current UUID (see loadUUID) + * + * @param base image base, pass 0 to use kernel base + * + * @return true if image uuids match + */ + EXPORT bool isCurrentBinary(mach_vm_address_t base=0); + + /** + * Enable/disable interrupt handling + * this is similar to ml_set_interrupts_enabled except the return value + * + * @param enable the desired value + * + * @return true if changed the value and false if it is unchanged + */ + EXPORT static bool setInterrupts(bool enable); + + /** + * Enable/disable kernel memory write protection + * + * @param enable the desired value + * @param lock use spinlock to disable cpu preemption (see KernelPatcher::kernelWriteLock) + * + * @return KERN_SUCCESS if succeeded + */ + EXPORT static kern_return_t setKernelWriting(bool enable, IOSimpleLock *lock); + + /** + * Find section bounds in a passed binary for provided cpu + * + * @param ptr pointer to a complete mach-o binary + * @param sourceSize size of the mach-o binary + * @param vmsegment returned vm segment pointer + * @param vmsection returned vm section pointer + * @param sectionptr returned section pointer + * @param sectionSize returned section size or 0 on failure + * @param segmentName segment name + * @param sectionName section name + * @param cpu cpu to look for in case of fat binaries + */ + EXPORT static void findSectionBounds(void *ptr, size_t sourceSize, vm_address_t &vmsegment, vm_address_t &vmsection, void *§ionptr, size_t §ionSize, const char *segmentName="__TEXT", const char *sectionName="__text", cpu_type_t cpu=CPU_TYPE_X86_64); + + /** + * Request to free file buffer resources (not including linkedit symtable) + */ + void freeFileBufferResources(); + + /** + * Get fat offset of the initialised image + */ + off_t getFatOffset() { + return fat_offset; + } +}; + +#endif /* kern_mach_hpp */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_nvram.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_nvram.hpp new file mode 100755 index 0000000..de4cd3a --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_nvram.hpp @@ -0,0 +1,198 @@ +// +// kern_nvram.hpp +// Lilu +// +// Copyright © 2017 vit9696. All rights reserved. +// + +#ifndef kern_nvram_hpp +#define kern_nvram_hpp + +#include +#include +#include +#include +#include + +/** + * Some of the most common GUIDs used for variable storage on macOS + */ +#define NVRAM_GLOBAL_GUID "8BE4DF61-93CA-11D2-AA0D-00E098032B8C" +#define NVRAM_APPLE_BOOT_GUID "7C436110-AB2A-4BBB-A880-FE41995C9F82" +#define NVRAM_APPLE_VENDOR_GUID "4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14" +#define NVRAM_APPLE_FILEVAULT_GUID "8D63D4FE-BD3C-4AAD-881D-86FD974BC1DF" +#define NVRAM_APPLE_PASSWORD_UI_GUID "9EBA2D25-BBE3-4AC2-A2C6-C87F44A1278C" + +/** + * Custom GUIDs used for Lilu preferences + * Must be kept in sync to OcSupportPkg/Include/Guid/OcVariables.h + */ +#define LILU_VENDOR_GUID "4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102" +#define LILU_READ_ONLY_GUID "E09B9297-7928-4440-9AAB-D1F8536FBF0A" +#define LILU_WRITE_ONLY_GUID "F0B9AF8F-2222-4840-8A37-ECF7CC8C12E1" + +/** + * Prefix variable name with a GUID + */ +#define NVRAM_PREFIX(x, y) x ":" y + +class NVStorage { + /** + * Local nvram controller reference + */ + IORegistryEntry *dtEntry {nullptr}; + +public: + /** + * Compress data with a default compression algorithm + * + * @param src source data + * @param size data size (updated with new size) + * @param sensitive contains sensitive data + * + * @return compressed data (must be freed with Buffer::deleter) or nullptr + */ + EXPORT uint8_t *compress(const uint8_t *src, uint32_t &size, bool sensitive=false); + + /** + * Decompress data compressed with compress + * + * @param src compressed data + * @param size data size (updated with new size) + * @param sensitive contains sensitive data + * + * @return decompressed data (must be freed with Buffer::deleter) or nullptr + */ + EXPORT uint8_t *decompress(const uint8_t *src, uint32_t &size, bool sensitive=false); + + /** + * Value storage options + */ + enum Options { + OptAuto = 0, // Default options + OptRaw = 1, // i/o as raw buffer + OptCompressed = 2, // Apply compression (see kern_compression.hpp) + OptEncrypted = 4, // Apply encryption with device-unique key (see kern_crypto.hpp) + OptChecksum = 8, // Append CRC32 checksum to the end + OptSensitive = 16 // Value contains sensitive data + }; + + /** + * Prepended value header unless OptRaw is used + * After the header the following fields should go: + * uint8_t iv[16]; aes initialisation vector (if OptEncrypted is set) + * uint32_t size; decryption size (if OptEncrypted is set, encrypted) + * uint32_t size; decompression size (if OptCompressed is set, encrypted if OptEncrypted) + * uint8_t data[]; content data (encrypted if OptEncrypted) + * uint32_t crc32; CRC32 cheksum (if OptChecksum is set) + */ + struct PACKED Header { + static constexpr uint16_t Magic = 0xC717; + static constexpr uint8_t MaxVer = 1; + using Checksum = uint32_t; + + uint16_t magic {Magic}; + uint8_t version {MaxVer}; + uint8_t opts {OptAuto}; + }; + + /** + * Attempt to connect to active nvram, may fail at early stages + * + * @return true on success + */ + EXPORT bool init(); + + /** + * Relinquish resources used, must be called regardless of the init error + */ + EXPORT void deinit(); + + /** + * Read data from nvram + * + * @param key key name + * @param size amount of data read + * @param opts bitmask of Options, may set option requirements + * @param enckey encryption key (platform-defined if OptEncrypted is set) + * + * @return pointer to data (must be freed via Buffer::deleter), nullptr on failure + */ + EXPORT uint8_t *read(const char *key, uint32_t &size, uint8_t opts=OptAuto, const uint8_t *enckey=nullptr); + + /** + * Read data from nvram + * + * @param key key name + * @param opts bitmask of Options, may set option requirements + * @param enckey encryption key (platform-defined if OptEncrypted is set) + * + * @return pointer to data (must be freed via OSData::release), nullptr on failure + */ + EXPORT OSData *read(const char *key, uint8_t opts=OptAuto, const uint8_t *enckey=nullptr); + + /** + * Write data to nvram + * + * @param key key name + * @param src source buffer + * @param size buffer size + * @param opts bitmask of Options + * @param enckey encryption key (platform-defined if OptEncrypted is set) + * + * @return true on success + */ + EXPORT bool write(const char *key, const uint8_t *src, uint32_t sz, uint8_t opts=OptAuto, const uint8_t *enckey=nullptr); + + /** + * Write data to nvram + * + * @param key key name + * @param data data object to write + * @param opts bitmask of Options + * @param enckey encryption key (platform-defined if OptEncrypted is set) + * + * @return true on success + */ + EXPORT bool write(const char *key, const OSData *data, uint8_t opts=OptAuto, const uint8_t *enckey=nullptr); + + /** + * Delete key from nvram + * + * @param key key name + * @param sensitive sensitive data + * + * @return true on successful deletion or if key is missing + */ + EXPORT bool remove(const char *key, bool sensitive=false); + + /** + * Synchronize with nvram controller + * This method might fail if synchronisation was done recently. + * + * @return true if synchronised + */ + EXPORT bool sync(); + + /** + * Exports nvram to a plist file + * + * @param filename file path + * @oaram max max output size + * @param sensitive contains sensitive data + * + * @return true if saved + */ + EXPORT bool save(const char *filename, uint32_t max=0x20000, bool sensitive=false); + + /** + * Check whether key exists + * + * @param key key name + * + * @return true if key exists + */ + EXPORT bool exists(const char *key); +}; + +#endif /* kern_nvram_hpp */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_patcher.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_patcher.hpp new file mode 100755 index 0000000..9932cb9 --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_patcher.hpp @@ -0,0 +1,831 @@ +// +// kern_patcher.hpp +// Lilu +// +// Copyright © 2016-2017 vit9696. All rights reserved. +// + +#ifndef kern_patcher_hpp +#define kern_patcher_hpp + +#include +#include +#include +#include +#include + +#include + +namespace Patch { union All; void deleter(All * NONNULL); } +#ifdef LILU_KEXTPATCH_SUPPORT +union OSKextLoadedKextSummaryHeaderAny; +#endif /* LILU_KEXTPATCH_SUPPORT */ + +class KernelPatcher { +public: + + /** + * Errors set by functions + */ + enum class Error { + NoError, + NoKinfoFound, + NoSymbolFound, + KernInitFailure, + KernRunningInitFailure, + KextListeningFailure, + DisasmFailure, + MemoryIssue, + MemoryProtection, + PointerRange, + AlreadyDone, + LockError, + Unsupported, + InvalidSymbolFound + }; + + /** + * Get last error + * + * @return error code + */ + EXPORT Error getError(); + + /** + * Reset all the previous errors + */ + EXPORT void clearError(); + + /** + * Initialise KernelPatcher, prepare for modifications + */ + void init(); + + /** + * Deinitialise KernelPatcher, must be called regardless of the init error + */ + void deinit(); + + /** + * Kernel write lock used for performing kernel & kext writes to disable cpu preemption + * See MachInfo::setKernelWriting + */ + EXPORT static IOSimpleLock *kernelWriteLock; + + /** + * Kext information + */ + struct KextInfo; + +#ifdef LILU_KEXTPATCH_SUPPORT + struct KextInfo { + static constexpr size_t Unloaded {0}; + enum SysFlags : size_t { + Loaded, // invoke for kext if it is already loaded + Reloadable, // allow the kext to unload and get patched again + Disabled, // do not load this kext (formerly achieved pathNum = 0, this no longer works) + FSOnly, // do not use prelinkedkernel (kextcache) as a symbol source + FSFallback, // perform fs fallback if kextcache failed + Reserved, + SysFlagNum, + }; + static constexpr size_t UserFlagNum {sizeof(size_t)-SysFlagNum}; + static_assert(UserFlagNum > 0, "There should be at least one user flag"); + const char *id {nullptr}; + const char **paths {nullptr}; + size_t pathNum {0}; + bool sys[SysFlagNum] {}; + bool user[UserFlagNum] {}; + size_t loadIndex {Unloaded}; // Updated after loading + + /** + * Disable this info from being used + * May be called from onPatcherLoad callbacks to disable certain kexts + */ + void switchOff() { + sys[KernelPatcher::KextInfo::Disabled] = true; + } + }; + + static_assert(sizeof(KextInfo) == 5 * sizeof(size_t), "KextInfo is no longer ABI compatible"); +#endif /* LILU_KEXTPATCH_SUPPORT */ + + /** + * Loads and stores kinfo information locally + * + * @param id kernel item identifier + * @param paths item filesystem path array + * @param num number of path entries + * @param isKernel kinfo is kernel info + * @param fsonly avoid using prelinkedkernel for kexts + * @param fsfallback fallback to reading from filesystem if prelink failed + * + * @return loaded kinfo id + */ + EXPORT size_t loadKinfo(const char *id, const char * const paths[], size_t num=1, bool isKernel=false, bool fsonly=false, bool fsfallback=false); + +#ifdef LILU_KEXTPATCH_SUPPORT + /** + * Loads and stores kinfo information locally + * + * @param info kext to load, updated on success + * + * @return loaded kinfo id + */ + EXPORT size_t loadKinfo(KextInfo *info); +#endif /* LILU_KEXTPATCH_SUPPORT */ + + /** + * Kernel kinfo id + */ + static constexpr size_t KernelID {0}; + + /** + * Update running information + * + * @param id loaded kinfo id + * @param slide loaded slide + * @param size loaded memory size + * @param force force recalculatiob + * + * @return new size + */ + EXPORT size_t updateRunningInfo(size_t id, mach_vm_address_t slide=0, size_t size=0, bool force=false); + + /** + * Any kernel + */ + static constexpr uint32_t KernelAny {0}; + + /** + * Check kernel compatibility + * + * @param min minimal requested version or KernelAny + * @param max maximum supported version or KernelAny + * + * @return true on success + */ + EXPORT static bool compatibleKernel(uint32_t min, uint32_t max); + + /** + * Erase coverage instruction prefix (like inc qword ptr[]), that causes function routing to fail + * + * @param addr address to valid instruction code + * @param count amount of instructions to inspect + */ + EXPORT void eraseCoverageInstPrefix(mach_vm_address_t addr, size_t count=5); + + /** + * Erase coverage instruction prefix (like inc qword ptr[]), that causes function routing to fail + * + * @param addr address to valid instruction code + * @param count amount of instructions to inspect + * @param limit amount of bytes to inspect + */ + EXPORT void eraseCoverageInstPrefix(mach_vm_address_t addr, size_t count, off_t limit); + + /** + * Solve a kinfo symbol + * + * @param id loaded kinfo id + * @param symbol symbol to solve + * + * @return running symbol address or 0 + */ + EXPORT mach_vm_address_t solveSymbol(size_t id, const char *symbol); + + /** + * Solve a kinfo symbol in range with designated type + * + * @param id loaded kinfo id + * @param symbol symbol to solve + * @param start start address range + * @param size address range size + * @param crash kernel panic on invalid non-zero address + * + * @return running symbol address or 0 casted to type T (mach_vm_address_t) + */ + template + inline T solveSymbol(size_t id, const char *symbol, mach_vm_address_t start, size_t size, bool crash=false) { + auto addr = solveSymbol(id, symbol); + if (addr) { + if (addr >= start && addr < start + size) + return (T)addr; + + code = Error::InvalidSymbolFound; + SYSTRACE("patcher", "address " PRIKADDR " is out of range " PRIKADDR " with size %lX", + CASTKADDR(addr), CASTKADDR(start), size); + + PANIC_COND(crash, "patcher", "address " PRIKADDR " is out of range " PRIKADDR " with size %lX", + CASTKADDR(addr), CASTKADDR(start), size); + } + + return (T)nullptr; + } + + /** + * Solve request to resolve multiple symbols in one shot and simplify error handling + * + * @seealso solveMultiple(). + */ + struct SolveRequest { + /** + * The symbol to solve + */ + const char *symbol {nullptr}; + + /** + * The symbol address on success, otherwise NULL. + */ + mach_vm_address_t *address {nullptr}; + + /** + * Construct a solve request conveniently + */ + template + SolveRequest(const char *s, T &addr) : + symbol(s), address(reinterpret_cast(&addr)) { } + }; + + /** + * Solve multiple functions with basic error handling + * + * @param id loaded kinfo id + * @param requests an array of requests to solve + * @param num requests array size + * @param start start address range + * @param size address range size + * @param crash kernel panic on invalid non-zero address + * @param force continue on first error + * + * @return false if at least one symbol cannot be solved. + */ + inline bool solveMultiple(size_t id, SolveRequest *requests, size_t num, mach_vm_address_t start, size_t size, bool crash=false, bool force=false) { + for (size_t index = 0; index < num; index++) { + auto result = solveSymbol(id, requests[index].symbol, start, size, crash); + if (result) { + *requests[index].address = result; + } else { + clearError(); + if (!force) return false; + } + } + return true; + } + + /** + * Solve multiple functions with basic error handling + * + * @param id loaded kinfo id + * @param requests an array of requests to solve + * @param start start address range + * @param size address range size + * @param crash kernel panic on invalid non-zero address + * @param force continue on first error + * + * @return false if at least one symbol cannot be solved. + */ + template + inline bool solveMultiple(size_t id, SolveRequest (&requests)[N], mach_vm_address_t start, size_t size, bool crash=false, bool force=false) { + return solveMultiple(id, requests, N, start, size, crash, force); + } + + /** + * Hook kext loading and unloading to access kexts at early stage + */ + EXPORT void setupKextListening(); + + /** + * Free file buffer resources and effectively make prelinked kext loading impossible + */ + void freeFileBufferResources(); + + /** + * Activates monitoring functions if necessary + */ + void activate(); + + /** + * Load handling structure + */ + class KextHandler { + using t_handler = void (*)(KextHandler *); + KextHandler(const char * const i, size_t idx, t_handler h, bool l, bool r) : + id(i), index(idx), handler(h), loaded(l), reloadable(r) {} + public: + static KextHandler *create(const char * const i, size_t idx, t_handler h, bool l=false, bool r=false) { + return new KextHandler(i, idx, h, l, r); + } + static void deleter(KextHandler *i NONNULL) { + delete i; + } + + void *self {nullptr}; + const char * const id {nullptr}; + size_t index {0}; + mach_vm_address_t address {0}; + size_t size {0}; + t_handler handler {nullptr}; + bool loaded {false}; + bool reloadable {false}; + }; + +#ifdef LILU_KEXTPATCH_SUPPORT + /** + * Enqueue handler processing at kext loading + * + * @param handler handler to process + */ + EXPORT void waitOnKext(KextHandler *handler); + + /** + * Update kext handler features + * + * @param info loaded kext info with features + */ + void updateKextHandlerFeatures(KextInfo *info); + + /** + * Arbitrary kext find/replace patch + */ + struct LookupPatch { + KextInfo *kext; + const uint8_t *find; + const uint8_t *replace; + size_t size; + size_t count; + }; + + /** + * Apply a find/replace patch + * + * @param patch patch to apply + */ + EXPORT void applyLookupPatch(const LookupPatch *patch); + + /** + * Apply a find/replace patch with additional constraints + * + * @param patch patch to apply + * @param startingAddress start with this address (or kext/kernel lowest address) + * @param maxSize maximum size to lookup (or kext/kernel max size) + */ + EXPORT void applyLookupPatch(const LookupPatch *patch, uint8_t *startingAddress, size_t maxSize); +#endif /* LILU_KEXTPATCH_SUPPORT */ + + /** + * Route function to function + * + * @param from function to route + * @param to routed function + * @param buildWrapper create entrance wrapper + * @param kernelRoute kernel change requiring memory protection changes and patch reverting at unload + * @param revertible patches could be reverted + * + * @return wrapper pointer or 0 on success + */ + EXPORT mach_vm_address_t routeFunction(mach_vm_address_t from, mach_vm_address_t to, bool buildWrapper=false, bool kernelRoute=true, bool revertible=true); + + /** + * Route function to function with long jump + * + * @param from function to route + * @param to routed function + * @param buildWrapper create entrance wrapper + * @param kernelRoute kernel change requiring memory protection changes and patch reverting at unload + * @param revertible patches could be reverted + * + * @return wrapper pointer or 0 on success + */ + EXPORT mach_vm_address_t routeFunctionLong(mach_vm_address_t from, mach_vm_address_t to, bool buildWrapper=false, bool kernelRoute=true, bool revertible=true); + + /** + * Route function to function with short jump + * + * @param from function to route + * @param to routed function + * @param buildWrapper create entrance wrapper + * @param kernelRoute kernel change requiring memory protection changes and patch reverting at unload + * @param revertible patches could be reverted + * + * @return wrapper pointer or 0 on success + */ + EXPORT mach_vm_address_t routeFunctionShort(mach_vm_address_t from, mach_vm_address_t to, bool buildWrapper=false, bool kernelRoute=true, bool revertible=true); + + /** + * Route block at assembly level + * + * @param from address to route + * @param opcodes opcodes to insert + * @param opnum number of opcodes + * @param buildWrapper create entrance wrapper + * @param kernelRoute kernel change requiring memory protection changes and patch reverting at unload + * + * @return wrapper pointer or 0 on success + */ + EXPORT mach_vm_address_t routeBlock(mach_vm_address_t from, const uint8_t *opcodes, size_t opnum, bool buildWrapper=false, bool kernelRoute=true); + + /** + * Route virtual function to function + * + * @param obj OSObject-compatible instance + * @param off function offset in a virtual table (arch-neutral, i.e. divided by sizeof(uintptr_t) + * @param func function to replace with + * @param orgFunc pointer to store the original function + * + * @return true on success + */ + template + static inline bool routeVirtual(void *obj, size_t off, T func, T *orgFunc=nullptr) { + // First OSObject (and similar) field is its virtual table. + auto vt = obj ? reinterpret_cast(obj)[0] : nullptr; + if (vt) { + // Do not try to replace twice! + if (vt[off] == func) + return false; + if (orgFunc) *orgFunc = vt[off]; + vt[off] = func; + return true; + } + return false; + } + + /** + * Route request to simplify casting and error handling + * See routeMultiple. + * + * symbol symbol to lookup + * from solved symbol (assigned by routeMultiple) + * to destination address + * org trampoline storage to the original symbol + */ + struct RouteRequest { + const char *symbol {nullptr}; + mach_vm_address_t from {0}; + const mach_vm_address_t to {0}; + mach_vm_address_t *org {nullptr}; + + /** + * Construct RouteRequest for wrapping a function + * @param s symbol to lookup + * @param t destination address + * @param o trampoline storage to the original symbol + */ + template + RouteRequest(const char *s, T t, mach_vm_address_t &o) : + symbol(s), to(reinterpret_cast(t)), org(&o) { } + + /** + * Construct RouteRequest for wrapping a function + * @param s symbol to lookup + * @param t destination address + * @param o trampoline storage to the original symbol + */ + template + RouteRequest(const char *s, T t, O &o) : + RouteRequest(s, t, reinterpret_cast(o)) { } + + /** + * Construct RouteRequest for routing a function + * @param s symbol to lookup + * @param t destination address + */ + template + RouteRequest(const char *s, T t) : + symbol(s), to(reinterpret_cast(t)) { } + }; + + /** + * Simple route multiple functions with basic error handling + * + * @param id kernel item identifier + * @param requests an array of requests to replace + * @param num requests array size + * @param start start address range + * @param size address range size + * @param kernelRoute kernel change requiring memory protection changes and patch reverting at unload + * @param force continue on first error + * + * @return false if it at least one error happened + */ + EXPORT bool routeMultiple(size_t id, RouteRequest *requests, size_t num, mach_vm_address_t start=0, size_t size=0, bool kernelRoute=true, bool force=false); + + /** + * Simple route multiple functions with basic error handling with long routes + * + * @param id kernel item identifier + * @param requests an array of requests to replace + * @param num requests array size + * @param start start address range + * @param size address range size + * @param kernelRoute kernel change requiring memory protection changes and patch reverting at unload + * @param force continue on first error + * + * @return false if it at least one error happened + */ + EXPORT bool routeMultipleLong(size_t id, RouteRequest *requests, size_t num, mach_vm_address_t start=0, size_t size=0, bool kernelRoute=true, bool force=false); + + /** + * Simple route multiple functions with basic error handling with short routes + * + * @param id kernel item identifier + * @param requests an array of requests to replace + * @param num requests array size + * @param start start address range + * @param size address range size + * @param kernelRoute kernel change requiring memory protection changes and patch reverting at unload + * @param force continue on first error + * + * @return false if it at least one error happened + */ + EXPORT bool routeMultipleShort(size_t id, RouteRequest *requests, size_t num, mach_vm_address_t start=0, size_t size=0, bool kernelRoute=true, bool force=false); + + /** + * Simple route multiple functions with basic error handling + * + * @param id kernel item identifier + * @param requests an array of requests to replace + * @param start start address range + * @param size address range size + * @param kernelRoute kernel change requiring memory protection changes and patch reverting at unload + * @param force continue on first error + * + * @return false if it at least one error happened + */ + template + inline bool routeMultiple(size_t id, RouteRequest (&requests)[N], mach_vm_address_t start=0, size_t size=0, bool kernelRoute=true, bool force=false) { + return routeMultiple(id, requests, N, start, size, kernelRoute, force); + } + + /** + * Simple route multiple functions with basic error handling with long routes + * + * @param id kernel item identifier + * @param requests an array of requests to replace + * @param start start address range + * @param size address range size + * @param kernelRoute kernel change requiring memory protection changes and patch reverting at unload + * @param force continue on first error + * + * @return false if it at least one error happened + */ + template + inline bool routeMultipleLong(size_t id, RouteRequest (&requests)[N], mach_vm_address_t start=0, size_t size=0, bool kernelRoute=true, bool force=false) { + return routeMultipleLong(id, requests, N, start, size, kernelRoute, force); + } + + /** + * Simple route multiple functions with basic error handling with long routes + * + * @param id kernel item identifier + * @param requests an array of requests to replace + * @param start start address range + * @param size address range size + * @param kernelRoute kernel change requiring memory protection changes and patch reverting at unload + * @param force continue on first error + * + * @return false if it at least one error happened + */ + template + inline bool routeMultipleShort(size_t id, RouteRequest (&requests)[N], mach_vm_address_t start=0, size_t size=0, bool kernelRoute=true, bool force=false) { + return routeMultipleShort(id, requests, N, start, size, kernelRoute, force); + } + + /** + * Simple find and replace in kernel memory. + */ + static inline bool findAndReplace(void *data, size_t dataSize, const void *find, size_t findSize, const void *replace, size_t replaceSize) { + void *res; + if (UNLIKELY((res = lilu_os_memmem(data, dataSize, find, findSize)) != nullptr)) { + if (UNLIKELY(MachInfo::setKernelWriting(true, KernelPatcher::kernelWriteLock) != KERN_SUCCESS)) { + SYSLOG("patcher", "failed to obtain write permissions for f/r"); + return false; + } + + lilu_os_memcpy(res, replace, replaceSize); + + if (UNLIKELY(MachInfo::setKernelWriting(false, KernelPatcher::kernelWriteLock) != KERN_SUCCESS)) { + SYSLOG("patcher", "failed to restore write permissions for f/r"); + } + + return true; + } + + return false; + } + +private: + /** + * Jump type for routing + */ + enum class JumpType { + Auto, + Long, + Short, + Medium + }; + + /** + * The minimal reasonable memory requirement + */ + static constexpr size_t TempExecutableMemorySize {4096}; + + /** + * As of 10.12 we seem to be not allowed to call vm_ functions from several places including onKextSummariesUpdated. + */ + static uint8_t tempExecutableMemory[TempExecutableMemorySize]; + + /** + * Offset to tempExecutableMemory that is safe to use + */ + size_t tempExecutableMemoryOff {0}; + + /** + * Patcher status + */ + _Atomic(bool) activated = false; + + /** + * Read previous jump destination from function + * + * @param from formerly routed function + * + * @return wrapper pointer on success or 0 + */ + mach_vm_address_t readChain(mach_vm_address_t from); + + /** + * Created routed trampoline page + * + * @param func original area + * @param min minimal amount of bytes that will be overwritten + * @param opcodes opcodes to insert before function + * @param opnum number of opcodes + * + * @return trampoline pointer or 0 + */ + mach_vm_address_t createTrampoline(mach_vm_address_t func, size_t min, const uint8_t *opcodes=nullptr, size_t opnum=0); + + /** + * Route function to function + * + * @param from function to route + * @param to routed function + * @param buildWrapper create entrance wrapper + * @param kernelRoute kernel change requiring memory protection changes and patch reverting at unload + * @param revertible patches could be reverted + * @param jumpType jump type to use, relative short or absolute long + * @param info info to access address slots to use for shorter routing + * @param org write pointer to this variable + * + * @return wrapper pointer or 0 on success + */ + mach_vm_address_t routeFunctionInternal(mach_vm_address_t from, mach_vm_address_t to, bool buildWrapper=false, bool kernelRoute=true, bool revertible=true, JumpType jumpType=JumpType::Auto, MachInfo *info=nullptr, mach_vm_address_t *org=nullptr); + + /** + * Simple route multiple functions with basic error handling with long routes + * + * @param id kernel item identifier + * @param requests an array of requests to replace + * @param num requests array size + * @param start start address range + * @param size address range size + * @param kernelRoute kernel change requiring memory protection changes and patch reverting at unload + * @param force continue on first error + * @param jumpType jump type to use, relative short or absolute long + * + * @return false if it at least one error happened + */ + bool routeMultipleInternal(size_t id, RouteRequest *requests, size_t num, mach_vm_address_t start=0, size_t size=0, bool kernelRoute=true, bool force=false, JumpType jumpType=JumpType::Auto); + +#ifdef LILU_KEXTPATCH_SUPPORT + /** + * Called at kext loading and unloading if kext listening is enabled + */ + static void onKextSummariesUpdated(); + + /** + * A pointer to loaded kext information + */ + OSKextLoadedKextSummaryHeaderAny **loadedKextSummaries {nullptr}; + + /** + * A pointer to kext summaries update + */ + void (*orgUpdateLoadedKextSummaries)(void) {nullptr}; + + /** + * Process already loaded kexts once at the start + * + * @param summaries loaded kext summaries + * @param num number of loaded kext summaries + */ + void processAlreadyLoadedKexts(OSKextLoadedKextSummaryHeaderAny *summaries, size_t num); + +#endif /* LILU_KEXTPATCH_SUPPORT */ + + /** + * Kernel prelink image in case prelink is used + */ + MachInfo *prelinkInfo {nullptr}; + + /** + * Loaded kernel items + */ + evector kinfos; + + /** + * Applied patches + */ + evector kpatches; + +#ifdef LILU_KEXTPATCH_SUPPORT + /** + * Awaiting kext notificators + */ + evector khandlers; + + /** + * Awaiting already loaded kext list + */ + bool waitingForAlreadyLoadedKexts {false}; + + /** + * Number of processed kext summaries + */ + uint32_t numSummaries {0}; + +#endif /* LILU_KEXTPATCH_SUPPORT */ + + /** + * Current error code + */ + Error code {Error::NoError}; + static constexpr size_t INVALID {0}; + + /** + * Jump instruction sizes + */ + static constexpr size_t SmallJump {1 + sizeof(int32_t)}; + static constexpr size_t LongJump {6 + sizeof(uint64_t)}; + static constexpr size_t MediumJump {6}; + static constexpr uint8_t SmallJumpPrefix {0xE9}; + static constexpr uint16_t LongJumpPrefix {0x25FF}; + + /** + * Atomic trampoline generator, wraps jumper into 64-bit or 128-bit storage + */ + union FunctionPatch { + struct PACKED LongPatch { + uint16_t opcode; + uint32_t argument; + uint64_t disp; + uint8_t org[2]; + } l; + static_assert(sizeof(l) == sizeof(unsigned __int128), "Invalid long patch rounding"); + struct PACKED MediumPatch { + uint16_t opcode; + uint32_t argument; + uint8_t org[2]; + } m; + static_assert(sizeof(m) == sizeof(uint64_t), "Invalid medium patch rounding"); + struct PACKED SmallPatch { + uint8_t opcode; + uint32_t argument; + uint8_t org[3]; + } s; + static_assert(sizeof(s) == sizeof(uint64_t), "Invalid small patch rounding"); + template + inline void sourceIt(mach_vm_address_t source) { + // Note, this one violates strict aliasing, but we play with the memory anyway. + for (size_t i = 0; i < sizeof(T::org); ++i) + reinterpret_cast(this)->org[i] = *reinterpret_cast(source + offsetof(T, org) + i); + } + uint64_t value64; + unsigned __int128 value128; + } patch; + + /** + * Possible kernel paths + */ +#ifdef LILU_COMPRESSION_SUPPORT + const char *prelinkKernelPaths[6] { + // This is the usual kernel cache place, which often the best thing to use + "/System/Library/Caches/com.apple.kext.caches/Startup/kernelcache", + // Otherwise fallback to one of the prelinked kernels + // Since we always verify the LC_UUID value, trying the kernels could be done in any order. + "/System/Library/PrelinkedKernels/prelinkedkernel", // normal + "/macOS Install Data/Locked Files/Boot Files/prelinkedkernel", // 10.13 installer + "/com.apple.boot.R/prelinkedkernel", // 10.12+ fusion drive installer + "/com.apple.boot.S/System/Library/PrelinkedKernels/prelinkedkernel", // 10.11 fusion drive installer + "/com.apple.recovery.boot/prelinkedkernel" // recovery + }; +#endif + + const char *kernelPaths[2] { + "/System/Library/Kernels/kernel", //since 10.10 + "/mach_kernel" + }; +}; + +#endif /* kern_patcher_hpp */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_policy.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_policy.hpp new file mode 100755 index 0000000..d467fd8 --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_policy.hpp @@ -0,0 +1,65 @@ +// +// kern_policy.hpp +// Lilu +// +// Copyright © 2016-2017 vit9696. All rights reserved. +// + +#ifndef kern_policy_hpp +#define kern_policy_hpp + +#include + +#include +#include + +#include +#include +#include + +class Policy { + /** + * TrustedBSD Policy handle + */ + mac_policy_handle_t policyHandle {0}; + + /** + * TrustedBSD policy configuration + */ + mac_policy_conf policyConf; +public: + /** + * Compile-time policy constructor + * + * @param name policy name literal + * @param descr policy description literal + * @param ops policy functions + */ + constexpr Policy(const char *name, const char *descr, struct mac_policy_ops *ops) : policyConf{ + .mpc_name = name, + .mpc_fullname = descr, + .mpc_labelnames = nullptr, + .mpc_labelname_count = 0, + .mpc_ops = ops, + // Our policies are loaded very early and are static. We cannot unload them. + .mpc_loadtime_flags = 0 /*MPC_LOADTIME_FLAG_UNLOADOK*/, + .mpc_field_off = nullptr, + .mpc_runtime_flags = 0 + } { } + + /** + * Registers TrustedBSD policy + * + * @return true on success + */ + EXPORT bool registerPolicy(); + + /** + * Unregisters TrustedBSD policy if allowed + * + * @return true on success + */ + EXPORT bool unregisterPolicy(); +}; + +#endif /* kern_policy_hpp */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_rtc.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_rtc.hpp new file mode 100755 index 0000000..18edb50 --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_rtc.hpp @@ -0,0 +1,236 @@ +// +// kern_rtc.hpp +// Lilu +// +// Copyright © 2018 vit9696. All rights reserved. +// + +#ifndef kern_rtc_h +#define kern_rtc_h + +#include +#include +#include + +class RTCStorage { + /** + * Apple-specific RTC checksum addresses + */ + static constexpr uint8_t APPLERTC_HASHED_ADDR = 0x0E; + static constexpr uint8_t APPLERTC_CHECKSUM_ADDR1 = 0x58; + static constexpr uint8_t APPLERTC_CHECKSUM_ADDR2 = 0x59; + + /** + * AppleRTC service handle + */ + IOService *rtcSrv {nullptr}; + + /** + * Low-level RTC read (does not check memory availability). + * + * @param dev RTC ACPI device + * @param offset offset + * + * @result read value + */ + static uint8_t readByte(IOACPIPlatformDevice *dev, uint8_t offset); + + /** + * Low-level RTC write (does not check memory availability). + * + * @param dev RTC ACPI device + * @param offset offset + * @param value value + */ + static void writeByte(IOACPIPlatformDevice *dev, uint8_t offset, uint8_t value); +public: + /** + * General access RTC ports on x86 systems. + */ + static constexpr uint8_t R_PCH_RTC_INDEX = 0x70; + static constexpr uint8_t R_PCH_RTC_TARGET = 0x71; + static constexpr uint8_t R_PCH_RTC_EXT_INDEX = 0x72; + static constexpr uint8_t R_PCH_RTC_EXT_TARGET = 0x73; + + /** + * RTC has N banks (we support up to 2) of memory. + */ + static constexpr uint8_t RTC_BANK_SIZE = 0x80; + + /** + * Non-ext RTC index register uses higher bit for nmi. + */ + static constexpr uint8_t RTC_DATA_MASK = 0x7F; + static constexpr uint8_t RTC_NMI_MASK = 0x80; + + /** + * Time offsets. + */ + static constexpr uint8_t RTC_SEC = 0x00; + static constexpr uint8_t RTC_MIN = 0x02; + static constexpr uint8_t RTC_HOUR = 0x04; + + static constexpr uint8_t RTC_DAY = 0x07; + static constexpr uint8_t RTC_MON = 0x08; + static constexpr uint8_t RTC_YEAR = 0x09; + + /** + * Attempt to connect to active RTC service + * + * @param wait wait for service availability + * + * @return true on success + */ + EXPORT bool init(bool wait=true); + + /** + * Release obtained RTC service + */ + EXPORT void deinit(); + + /** + * Check whether extended (higher 128 bytes) is available + * + * @return true on success + */ + EXPORT bool checkExtendedMemory(); + + /** + * Read memory from RTC + * + * @param off offset to read data from + * @param size data size + * @param buffer data buffer to read to + * + * @return true on success + */ + EXPORT bool read(uint64_t off, uint32_t size, uint8_t *buffer); + + /** + * Write memory to RTC + * + * @param off offset to write data to + * @param size data size + * @param buffer data buffer to write from + * + * @return true on success + */ + EXPORT bool write(uint64_t off, uint32_t size, uint8_t *buffer); + + /** + * Obtain RTC device for direct writing. + * Written as inline to avoid IOACPIPlatformDevice dependency. + * + * @param name device name + * + * @return RTC ACPI device for I/O access, must be released + */ + static inline IOACPIPlatformDevice *getRTCDevice(const char *name = "PNP0B00") { + IOService *rtcDev = nullptr; + auto matching = IOService::nameMatching(name); + if (matching) { + rtcDev = IOService::waitForMatchingService(matching); + matching->release(); + } else { + SYSLOG("rtc", "failed to allocate rtc device matching"); + } + + if (rtcDev) { + DBGLOG("rtc", "got rtc device"); + auto acpiDev = OSDynamicCast(IOACPIPlatformDevice, rtcDev); + if (acpiDev) { + DBGLOG("rtc", "got rtc acpi device"); + return acpiDev; + } else { + SYSLOG("rtc", "failed to obtain rtc acpi device"); + rtcDev->release(); + } + } + + SYSLOG("rtc", "failed to get rtc device"); + return nullptr; + } + + /** + * Directly read RTC memory (UNSAFE, usage with caution!) + * + * @param dev RTC device + * @param off offset to read data from + * @param size data size + * @param buffer data buffer to read to + * @param introff turn interrupts off + * + * @return true on success + */ + EXPORT static void readDirect(IOACPIPlatformDevice *dev, uint8_t off, uint16_t size, uint8_t *buffer, bool introff); + + /** + * Directly write RTC memory (UNSAFE, usage with caution!) + * + * @param dev RTC device + * @param off offset to read data from + * @param size data size + * @param buffer data buffer to read to + * @param updatecrc recalculate crc on write + * @param introff turn interrupts off + * + * @return true on success + */ + EXPORT static void writeDirect(IOACPIPlatformDevice *dev, uint8_t off, uint16_t size, uint8_t *buffer, bool updatecrc, bool introff); + + + /** + * Directly read RTC memory (UNSAFE, usage with caution!), this is just a compatibility function. + * + * @param off offset to read data from + * @param size data size + * @param buffer data buffer to read to + * @param introff turn interrupts off + * + * @return true on success + */ + static inline bool readDirect(uint8_t off, uint16_t size, uint8_t *buffer, bool introff) { + if (size > RTC_BANK_SIZE*2 - off) { + SYSLOG("rtc", "reading unsupported size"); + return false; + } + + auto rtc = getRTCDevice(); + if (rtc) { + readDirect(rtc, off, size, buffer, introff); + rtc->release(); + return true; + } + + return false; + } + + /** + * Directly write RTC memory (UNSAFE, usage with caution!), this is just a compatibility function. + * + * @param off offset to read data from + * @param size data size + * @param buffer data buffer to read to + * @param updatecrc recalculate crc on write + * @param introff turn interrupts off + * + * @return true on success + */ + static inline bool writeDirect(uint8_t off, uint16_t size, uint8_t *buffer, bool updatecrc, bool introff) { + if (size > RTC_BANK_SIZE*2 - off) { + SYSLOG("rtc", "writing unsupported size"); + return false; + } + + auto rtc = getRTCDevice(); + if (rtc) { + writeDirect(rtc, off, size, buffer, updatecrc, introff); + rtc->release(); + return true; + } + + return false; + } +}; + +#endif /* kern_rtc_h */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_time.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_time.hpp new file mode 100755 index 0000000..41d2f91 --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_time.hpp @@ -0,0 +1,135 @@ +// +// kern_time.hpp +// Lilu +// +// Copyright © 2018 vit9696. All rights reserved. +// + +#ifndef kern_time_hpp +#define kern_time_hpp + +#include + +/** + * Obtain current system time in nanoseconds + * + * @return current time + */ +inline uint64_t getCurrentTimeNs() { + uint64_t currt = 0; + absolutetime_to_nanoseconds(mach_absolute_time(), &currt); + return currt; +} + +/** + * Obtain current calendar system time in nanoseconds + * + * @return current time + */ +inline uint64_t getCalendarTimeNs() { + clock_sec_t sc; + clock_nsec_t ns; + clock_get_calendar_nanotime(&sc, &ns); + return static_cast(sc) * NSEC_PER_SEC + ns; +} + +/** + * Obtain time passed since some timestamp in nanoseconds + * + * @param start starting timestamp + * @param current timestamp to check against (pass 0 for current time) + * + * @return delta or 0 (if current time equals or precedeces the start) + */ +inline uint64_t getTimeSinceNs(uint64_t start, uint64_t current = 0) { + if (current == 0) + current = getCurrentTimeNs(); + if (current > start) + return current - start; + return 0; +} + +/** + * Obtain time left till a timestamp in the future in nanoseconds + * + * @param start starting timestamp + * @param timeout timeout for the event + * @param current timestamp to check against (pass 0 for current time) + * + * @return delta or 0 (if the timeout is over) + */ +inline uint64_t getTimeLeftNs(uint64_t start, uint64_t timeout, uint64_t current = 0) { + if (current == 0) + current = getCurrentTimeNs(); + if (start + timeout > current) + return start + timeout - current; + return 0; +} + +/** + * Convert from nanoseconds to milliseconds + * + * @param t timestamp in ns + * + * @return timestamp in ms + */ +constexpr uint64_t convertNsToMs(uint64_t t) { + return t / 1000000; +} + +/** + * Convert from nanoseconds to seconds + * + * @param t timestamp in ns + * + * @return timestamp in s + */ +constexpr uint64_t convertNsToSc(uint64_t t) { + return t / 1000000000; +} + +/** + * Convert from milliseconds to seconds + * + * @param t timestamp in ms + * + * @return timestamp in s + */ +constexpr uint64_t convertMsToSc(uint64_t t) { + return t / 1000; +} + +/** + * Convert from milliseconds to nanoseconds + * + * @param t timestamp in ms + * + * @return timestamp in ns + */ +constexpr uint64_t convertMsToNs(uint64_t t) { + return t * 1000000; +} + +/** + * Convert from seconds to nanoseconds + * + * @param t timestamp in s + * + * @return timestamp in ns + */ +constexpr uint64_t convertScToNs(uint64_t t) { + return t * 1000000000; +} + +/** + * Convert from seconds to milliseconds + * + * @param t timestamp in s + * + * @return timestamp in ms + */ +constexpr uint64_t convertScToMs(uint64_t t) { + return t * 1000; +} + +#endif /* kern_time_hpp */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_user.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_user.hpp new file mode 100755 index 0000000..a503390 --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_user.hpp @@ -0,0 +1,600 @@ +// +// kern_user.hpp +// Lilu +// +// Copyright © 2016-2017 vit9696. All rights reserved. +// + +#ifndef kern_user_hpp +#define kern_user_hpp + +#include +#include + +#include +#include + +class UserPatcher { +public: + /** + * Initialise UserPatcher, prepare for modifications + * + * @param patcher kernel patcher instance + * @param preferSlowMode policy boot type + * + * @return true on success + */ + bool init(KernelPatcher &patcher, bool preferSlowMode); + + /** + * Deinitialise UserPatcher, must be called regardless of the init error + */ + void deinit(); + + /** + * Obtain page protection + * + * @param map vm map + * @param addr map offset + * + * @return protection + */ + EXPORT vm_prot_t getPageProtection(vm_map_t map, vm_map_address_t addr); + + /** + * Mach segment/section references for patch locations + */ + enum FileSegment : uint32_t { + SegmentsTextStart, + SegmentTextText = SegmentsTextStart, + SegmentTextStubs, + SegmentTextConst, + SegmentTextCstring, + SegmentTextUstring, + SegmentsTextEnd = SegmentTextUstring, + SegmentsDataStart, + SegmentDataConst = SegmentsDataStart, + SegmentDataCfstring, + SegmentDataCommon, + SegmentsDataEnd = SegmentDataCommon, + SegmentTotal + }; + + /** + * Mach segment names kept in sync with FileSegment + */ + const char *fileSegments[SegmentTotal] { + "__TEXT", + "__TEXT", + "__TEXT", + "__TEXT", + "__TEXT", + "__DATA", + "__DATA", + "__DATA" + }; + + /** + * Mach section names kept in sync with FileSegment + */ + const char *fileSections[SegmentTotal] { + "__text", + "__stubs", + "__const", + "__cstring", + "__ustring", + "__const", + "__cfstring", + "__common" + }; + + /** + * Binary modification patches flags + */ + enum BinaryModPatchFlags { + /* + * Only applies to one process, not globally. + */ + LocalOnly = 1 + }; + + /** + * Structure holding lookup-style binary patches + */ + struct BinaryModPatch { + cpu_type_t cpu; + uint32_t flags; + const uint8_t *find; + const uint8_t *replace; + size_t size; + size_t skip; + size_t count; + FileSegment segment; + uint32_t section; + }; + + static_assert(sizeof(BinaryModPatch) == 56, "BinaryModPatch ABI compatibility failure"); + + /** + * Structure describing the modifications for the binary + */ + struct BinaryModInfo { + const char *path; + BinaryModPatch *patches; + size_t count; + vm_address_t startTEXT; + vm_address_t endTEXT; + vm_address_t startDATA; + vm_address_t endDATA; + }; + + /** + * Structure describing relevant processes run + */ + struct ProcInfo { + /** + * Process matching flags + */ + enum ProcFlags { + MatchExact = 0, + MatchAny = 1, + MatchPrefix = 2, + MatchSuffix = 4, + MatchMask = MatchExact | MatchAny | MatchPrefix | MatchSuffix + }; + + /** + * Unused (aka disabled) proc info section + */ + static constexpr uint32_t SectionDisabled {0}; + + const char *path {nullptr}; + uint32_t len {0}; + uint32_t section {SectionDisabled}; + uint32_t flags {MatchExact}; + }; + + /** + * External callback type for on process invocation + * + * @param user user provided pointer at registering + * @param patcher user patcher instance + * @param map process image vm_map + * @param path path to the binary absolute or relative + * @param len path length excluding null terminator + */ + using t_BinaryLoaded = void (*)(void *user, UserPatcher &patcher, vm_map_t map, const char *path, size_t len); + + /** + * Instructs user patcher to do further actions + * + * @param procs process list + * @param procNum process list size + * @param mods modification list + * @param modNum modification list size + * @param callback callback function + * @param user pointer that will be passed to the callback function + */ + bool registerPatches(ProcInfo **procs, size_t procNum, BinaryModInfo **mods, size_t modNum, t_BinaryLoaded callback, void *user); + + /** + * Reads current process header + * + * @param map vm map + * @param header Mach-O header + * + * @return false on failure + */ + EXPORT bool getTaskHeader(vm_map_t map, mach_header_64 &header); + + /** + * Disables dyld_shared_cache for the current process + * + * @param map vm map + * + * @return false on mach image failure + */ + EXPORT bool injectRestrict(vm_map_t map); + + /** + * Injects payload into the process right after the header with EP replacement. + * + * @param map vm map + * @param payload code + * @param size code size (up to PAGE_SIZE) + * @param ep original entrypoint (may be written to code before copying) + * + * @return false on mach image failure + */ + EXPORT bool injectPayload(vm_map_t map, uint8_t *payload, size_t size, void *ep=nullptr); + + /** + * Allocates a new segment in the process. + * + * @param map vm map + * @param addr allocation address (e.g. a little below SHARED_REGION_BASE_X86_64) + * @param payload code + * @param size code size (must be PAGE_SIZE-aligned) + * @param prot segment protection + * + * @return allocated address or 0 on failure + */ + EXPORT vm_address_t injectSegment(vm_map_t taskPort, vm_address_t addr, uint8_t *payload, size_t size, vm_prot_t prot); + + /** + * Activates monitoring functions if necessary + */ + void activate(); + + /** + * Get active dyld shared cache path. + * + * @return shared cache path constant + */ + EXPORT static const char *getSharedCachePath(); + +private: + + /** + * Kernel function prototypes + */ + using vm_shared_region_t = void *; + using shared_file_mapping_np = void *; + using t_currentMap = vm_map_t (*)(void); + using t_getTaskMap = vm_map_t (*)(task_t); + using t_getMapMin = vm_map_offset_t (*)(vm_map_t); + using t_vmMapSwitchProtect = void (*)(vm_map_t, boolean_t); + using t_vmMapCheckProtection = boolean_t (*)(vm_map_t, vm_offset_t, vm_offset_t, vm_prot_t); + using t_vmMapReadUser = kern_return_t (*)(vm_map_t, vm_map_address_t, const void *, vm_size_t); + using t_vmMapWriteUser = kern_return_t (*)(vm_map_t, const void *, vm_map_address_t, vm_size_t); + + /** + * Original kernel function trampolines + */ + mach_vm_address_t orgCodeSignValidatePageWrapper {}; + mach_vm_address_t orgCodeSignValidateRangeWrapper {}; + mach_vm_address_t orgVmSharedRegionMapFile {}; + mach_vm_address_t orgVmSharedRegionSlide {}; + mach_vm_address_t orgVmSharedRegionSlideMojave {}; + t_currentMap orgCurrentMap {nullptr}; + t_getMapMin orgGetMapMin {nullptr}; + t_getTaskMap orgGetTaskMap {nullptr}; + t_vmMapSwitchProtect orgVmMapSwitchProtect {nullptr}; + t_vmMapCheckProtection orgVmMapCheckProtection {nullptr}; + t_vmMapReadUser orgVmMapReadUser {nullptr}; + t_vmMapWriteUser orgVmMapWriteUser {nullptr}; + mach_vm_address_t orgTaskSetMainThreadQos {}; + + /** + * Kernel function wrappers + */ + static boolean_t codeSignValidatePageWrapper(void *blobs, memory_object_t pager, memory_object_offset_t page_offset, const void *data, unsigned *tainted); + static boolean_t codeSignValidateRangeWrapper(void *blobs, memory_object_t pager, memory_object_offset_t range_offset, const void *data, memory_object_size_t data_size, unsigned *tainted); + static vm_map_t swapTaskMap(task_t task, thread_t thread, vm_map_t map, boolean_t doswitch); + static vm_map_t vmMapSwitch(vm_map_t map); + static kern_return_t vmSharedRegionMapFile(vm_shared_region_t shared_region, unsigned int mappings_count, shared_file_mapping_np *mappings, memory_object_control_t file_control, memory_object_size_t file_size, void *root_dir, uint32_t slide, user_addr_t slide_start, user_addr_t slide_size); + static void execsigs(proc_t p, thread_t thread); + static int vmSharedRegionSlide(uint32_t slide, mach_vm_offset_t entry_start_address, mach_vm_size_t entry_size, mach_vm_offset_t slide_start, mach_vm_size_t slide_size, memory_object_control_t sr_file_control); + static int vmSharedRegionSlideMojave(uint32_t slide, mach_vm_offset_t entry_start_address, mach_vm_size_t entry_size, mach_vm_offset_t slide_start, mach_vm_size_t slide_size, mach_vm_offset_t slid_mapping, memory_object_control_t sr_file_control); + static void taskSetMainThreadQos(task_t task, thread_t main_thread); + + /** + * Applies page patches to the memory range + * + * @param data_ptr pages in kernel memory + * @param data_size data size divisible by PAGE_SIZE + */ + void performPagePatch(const void *data_ptr, size_t data_size); + + /** + * dyld shared cache map entry structure + */ + struct MapEntry { + const char *filename; + size_t length; + vm_address_t startTEXT; + vm_address_t endTEXT; + vm_address_t startDATA; + vm_address_t endDATA; + }; + + /** + * Obtains __TEXT addresses from .map files + * + * @param mapBuf read .map file + * @param mapSz .map file size + * @param mapEntries entries to look for + * @param nentries number of entries + * + * @return number of entries found + */ + size_t mapAddresses(const char *mapBuf, MapEntry *mapEntries, size_t nentries); + + /** + * Stored ASLR slide of dyld shared cache + */ + uint32_t storedSharedCacheSlide {0}; + + /** + * Set once shared cache slide is defined + */ + bool sharedCacheSlideStored {false}; + + /** + * Set on init to decide on whether to use __RESTRICT or patch dyld shared cache + */ + bool patchDyldSharedCache {false}; + + /** + * Kernel patcher instance + */ + KernelPatcher *patcher {nullptr}; + + /** + * Pending callback entry + */ + struct PendingUser { + /** + * Patch requested for path + */ + char path[MAXPATHLEN] {}; + + /** + * Patch requested for path + */ + uint32_t pathLen {0}; + }; + + /** + * Stored pending callback + */ + ThreadLocal pending; + + /** + * Current minimal proc name length + */ + uint32_t currentMinProcLength {0}; + + /** + * Provided binary modification list + */ + BinaryModInfo **binaryMod {nullptr}; + + /** + * Amount of provided binary modifications + */ + size_t binaryModSize {0}; + + /** + * Provided process list + */ + ProcInfo **procInfo {nullptr}; + + /** + * Amount of provided processes + */ + size_t procInfoSize {0}; + + /** + * Provided global callback for on proc invocation + */ + ppair userCallback {}; + + /** + * Applies dyld shared cache patches + * + * @param map current process map + * @param slide ASLR offset + * @param cpu cache cpu type + * @param restore true to rollback the changes + */ + void patchSharedCache(vm_map_t map, uint32_t slide, cpu_type_t cpu, bool applyChanges=true); + + /** + * Structure holding userspace lookup patches + */ + struct LookupStorage { + struct PatchRef { + size_t i {0}; + evector pageOffs; + evector segOffs; + static PatchRef *create() { + return new PatchRef; + } + static void deleter(PatchRef *r NONNULL) { + r->pageOffs.deinit(); + r->segOffs.deinit(); + delete r; + } + }; + + const BinaryModInfo *mod {nullptr}; + evector refs; + Page *page {nullptr}; + vm_address_t pageOff {0}; + + static LookupStorage *create() { + auto p = new LookupStorage; + if (p) { + p->page = Page::create(); + if (!p->page) { + deleter(p); + p = nullptr; + } + } + return p; + } + + static void deleter(LookupStorage *p NONNULL) { + if (p->page) { + Page::deleter(p->page); + p->page = nullptr; + } + p->refs.deinit(); + delete p; + } + }; + + struct Lookup { + uint32_t offs[4] {}; + static constexpr size_t matchNum {4}; + evector c[matchNum]; + }; + + evector lookupStorage; + Lookup lookup; + + /** + * Restrict 64-bit entry overlapping DYLD_SHARED_CACHE to enforce manual library loading + */ + segment_command_64 restrictSegment64 { + LC_SEGMENT_64, + sizeof(segment_command_64), + "__RESTRICT", + SHARED_REGION_BASE_X86_64, + 1, 0, 0, 0, 0, 0, 0 + }; + + /** + * Restrict 32-bit entry overlapping DYLD_SHARED_CACHE to enforce manual library loading + */ + segment_command restrictSegment32 { + LC_SEGMENT, + sizeof(segment_command), + "__RESTRICT", + SHARED_REGION_BASE_I386, + 1, 0, 0, 0, 0, 0, 0 + }; + + /** + * Temporary buffer for reading image data + */ + uint8_t tmpBufferData[PAGE_SIZE*3] {}; + + /** + * Kernel auth listener handle + */ + kauth_listener_t listener {nullptr}; + + /** + * Patcher status + */ + _Atomic(bool) activated = false; + + /** + * Validation cookie + */ + void *cookie {nullptr}; + + /** + * Flags for codesign (PL) offset in struct proc. (uint32_t p_csflags) + */ + size_t csFlagsOffset {0}; + + /** + * Exec callback + * + * @param credential kauth credential + * @param idata cookie + * @param action passed action, we only need KAUTH_FILEOP_EXEC + * @param arg0 pointer to vnode (vnode *) for executable + * @param arg1 pointer to path (char *) to executable + * + * @return 0 to allow further execution + */ + static int execListener(kauth_cred_t /* credential */, void *idata, kauth_action_t action, uintptr_t /* arg0 */, uintptr_t arg1, uintptr_t, uintptr_t); + + /** + * Unrestricted vm_protect, that takes care of Mojave codesign limitations for everyone's good. + * See vm_protect description. + */ + kern_return_t vmProtect(vm_map_t map, vm_offset_t start, vm_size_t size, boolean_t set_maximum, vm_prot_t new_protection); + + /** + * Callback invoked at process loading + * + * @param path binary path + * @param len path length + */ + void onPath(const char *path, uint32_t len); + + /** + * Reads files from BinaryModInfos and prepares lookupStorage + * + * @return true on success + */ + bool loadFilesForPatching(); + + /** + * Reads dyld shared cache and obtains segment offsets + * + * @return true on success + */ + bool loadDyldSharedCacheMapping(); + + /** + * Prepares quick page lookup based on lookupStorage values + * + * @return true on success + */ + bool loadLookups(); + + /** + * Hooks memory access to get ready for patching + * + * @return true on success + */ + bool hookMemoryAccess(); + + /** + * Peforms the actual binary patching + * + * @param map vm map + * @param path binary path + * @param len path length + */ + void patchBinary(vm_map_t map, const char *path, uint32_t len); + + /** + * DYLD shared cache map path for 10.10+ on Haswell + */ + static constexpr const char *SharedCacheMapHaswell {"/private/var/db/dyld/dyld_shared_cache_x86_64h.map"}; + + /** + * DYLD shared cache map path for all other systems and older CPUs + */ + static constexpr const char *SharedCacheMapLegacy {"/private/var/db/dyld/dyld_shared_cache_x86_64.map"}; + + /** + * DYLD shared cache path on Haswell+ before Big Sur + */ + static constexpr const char *sharedCacheHaswell {"/private/var/db/dyld/dyld_shared_cache_x86_64h"}; + + /** + * DYLD shared cache path on older systems before Big Sur + */ + static constexpr const char *sharedCacheLegacy {"/private/var/db/dyld/dyld_shared_cache_x86_64"}; + + /** + * DYLD shared cache map path on Haswell+ on Big Sur + */ + static constexpr const char *bigSurSharedCacheMapHaswell {"/System/Library/dyld/dyld_shared_cache_x86_64h.map"}; + + /** + * DYLD shared cache map path on older systems on Big Sur + */ + static constexpr const char *bigSurSharedCacheMapLegacy {"/System/Library/dyld/dyld_shared_cache_x86_64.map"}; + + /** + * DYLD shared cache path on Haswell+ on Big Sur + */ + static constexpr const char *bigSurSharedCacheHaswell {"/System/Library/dyld/dyld_shared_cache_x86_64h"}; + + /** + * DYLD shared cache path on older systems on Big Sur + */ + static constexpr const char *bigSurSharedCacheLegacy {"/System/Library/dyld/dyld_shared_cache_x86_64"}; + +}; + +#endif /* kern_user_hpp */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_util.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_util.hpp new file mode 100755 index 0000000..820cf9c --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_util.hpp @@ -0,0 +1,912 @@ +// +// kern_util.hpp +// Lilu +// +// Copyright © 2016-2017 vit9696. All rights reserved. +// + +#ifndef kern_util_hpp +#define kern_util_hpp + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#define xStringify(a) Stringify(a) +#define Stringify(a) #a + +#define xConcat(a, b) Concat(a, b) +#define Concat(a, b) a ## b + +/** + * Prefix name with your plugin name (to ease symbolication and avoid conflicts) + */ +#define ADDPR(a) xConcat(xConcat(PRODUCT_NAME, _), a) + +/** + * Debugging state exported for your plugin + */ +extern bool ADDPR(debugEnabled); + +/** + * Debugging print delay used as an ugly hack around printf bufferisation, + * which results in messages not appearing in the boot log. + * Use liludelay=1000 (1 second) boot-arg to put a second after each message. + */ +extern uint32_t ADDPR(debugPrintDelay); + +/** + * Kernel version major + */ +extern const int version_major; + +/** + * Kernel version minor + */ +extern const int version_minor; + +/** + * Kernel map + */ +extern vm_map_t kernel_map; + +/** + * Kernel proc + */ +extern proc_t kernproc; + +/** + * For noreturn failures + */ +#define UNREACHABLE() do { __builtin_unreachable(); } while (0) + +/** + * Conditional logging to system log prefixed with you plugin name + * + * @param cond precondition + * @param str printf-like string + */ +#define SYSLOG_COND(cond, module, str, ...) \ + do { \ + if (cond) \ + lilu_os_log( "%s%10s: @ " str "\n", xStringify(PRODUCT_NAME), safeString(module), ## __VA_ARGS__); \ + } while (0) + +/** + * Write to system log prefixed with you plugin name + * + * @param module log module + * @param str printf-like string + */ +#define SYSLOG(module, str, ...) SYSLOG_COND(true, module, str, ## __VA_ARGS__) + +/** + * Conditional tracing to system log prefixed with you plugin name + * + * @param cond precondition + * @param module log module + * @param str printf-like string + */ +#define SYSTRACE_COND(cond, module, str, ...) \ + do { \ + if (cond) { \ + SYSLOG(module, str, ## __VA_ARGS__); \ + OSReportWithBacktrace( "%s%10s: @ " str "\n", xStringify(PRODUCT_NAME), safeString(module), ## __VA_ARGS__); \ + } \ + } while (0) + +/** + * Write call trace to system log prefixed with you plugin name + * + * @param module log module + * @param str printf-like string + */ +#define SYSTRACE(module, str, ...) SYSTRACE_COND(true, module, str, ## __VA_ARGS__) + +/** + * Conditional panic prefixed with you plugin name + * + * @param cond precondition + * @param module log module + * @param str printf-like string + */ +#define PANIC_COND(cond, module, str, ...) \ + do { \ + if (cond) { \ + (panic)( "%s%10s: @ " str "\n", xStringify(PRODUCT_NAME), safeString(module), ## __VA_ARGS__); \ + UNREACHABLE(); \ + } \ + } while (0) + +/** + * Cause immediate kernel panic prefixed with you plugin name + * + * @param module log module + * @param str printf-like string + */ +#define PANIC(module, str, ...) PANIC_COND(true, module, str, ## __VA_ARGS__) + +#ifdef DEBUG + +/** + * Conditional debug logging to system log prefixed with you plugin name + * + * @param cond precondition + * @param module log module + * @param str printf-like string + */ +#define DBGLOG_COND(cond, module, str, ...) \ + do { \ + SYSLOG_COND(ADDPR(debugEnabled) && (cond), module, "%s" str, "(DBG) ", ## __VA_ARGS__); \ + } while (0) + +/** + * Write debug message to system log prefixed with you plugin name + * + * @param module log module + * @param str printf-like string + */ +#define DBGLOG(module, str, ...) DBGLOG_COND(true, module, str, ## __VA_ARGS__) + +/** + * Conditional debug tracing to system log prefixed with you plugin name + * + * @param cond precondition + * @param module log module + * @param str printf-like string + */ +#define DBGTRACE_COND(cond, module, str, ...) \ + do { \ + SYSTRACE_COND(ADDPR(debugEnabled) && (cond), module, "%s" str, "(DBG) ", ## __VA_ARGS__); \ + } while (0) + +/** + * Write debug call trace to system log prefixed with you plugin name + * + * @param module log module + * @param str printf-like string + */ +#define DBGTRACE(module, str, ...) DBGTRACE_COND(true, module, str, ## __VA_ARGS__) + +#else /* DEBUG */ + +#define DBGLOG_COND(module, str, ...) do { } while (0) +#define DBGLOG(module, str, ...) do { } while (0) +#define DBGTRACE_COND(module, str, ...) do { } while (0) +#define DBGTRACE(module, str, ...) do { } while (0) + +#endif + +/** + * Macros to bypass kernel address printing protection + */ +#define PRIKADDR "0x%08X%08X" +#define CASTKADDR(x) \ + static_cast(reinterpret_cast(x) >> 32), \ + static_cast(reinterpret_cast(x)) + +/** + * Ugly floating point printing macros + */ +#define PRIFRAC "%lld.%04lld" +#define CASTFRAC(x) static_cast(x), static_cast(((x) - static_cast(x)) * 10000) + +/** + * Macros to print the UUID + */ +#define PRIUUID "%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X" +#define CASTUUID(uuid) \ + reinterpret_cast(uuid)[0], \ + reinterpret_cast(uuid)[1], \ + reinterpret_cast(uuid)[2], \ + reinterpret_cast(uuid)[3], \ + reinterpret_cast(uuid)[4], \ + reinterpret_cast(uuid)[5], \ + reinterpret_cast(uuid)[6], \ + reinterpret_cast(uuid)[7], \ + reinterpret_cast(uuid)[8], \ + reinterpret_cast(uuid)[9], \ + reinterpret_cast(uuid)[10], \ + reinterpret_cast(uuid)[11], \ + reinterpret_cast(uuid)[12], \ + reinterpret_cast(uuid)[13], \ + reinterpret_cast(uuid)[14], \ + reinterpret_cast(uuid)[15] + +/** + * Export function or symbol for linking + */ +#define EXPORT __attribute__((visibility("default"))) + +/** + * Ensure the symbol is not exported + */ +#define PRIVATE __attribute__((visibility("hidden"))) + +/** + * For private fallback symbol definition + */ +#define WEAKFUNC __attribute__((weak)) + +/** + * Remove padding between fields + */ +#define PACKED __attribute__((packed)) + +/** + * Deprecate the interface + */ +#define DEPRECATE(x) __attribute__((deprecated(x))) + +/** + * Non-null argument + */ +#define NONNULL __attribute__((nonnull)) + +/** + * Compiler hints regarding branching + */ +#define LIKELY(x) __builtin_expect(!!(x), 1) +#define UNLIKELY(x) __builtin_expect(!!(x), 0) + +/** + * This function is supposed to workaround missing entries in the system log. + * By providing its own buffer for logging data. + * + * @param format formatted string + */ +EXPORT extern "C" void lilu_os_log(const char *format, ...); + +/** + * Two-way substring search + * + * @param stack String to search in + * @param needle Substring to search for + * @param len Length of substring + * + * @return substring address if there or nullptr + */ +EXPORT const char *strstr(const char *stack, const char *needle, size_t len=0); + +/** + * Reverse character search + * + * @param stack String to search in + * @param ch Character to search for + * + * @return character address if there or null + */ +EXPORT char *strrchr(const char *stack, int ch); + +/** + * XNU kernel implementation of a C-standard qsort function normally not exported by the kernel. + * + * @param a array to sort + * @param n array length + * @param es array element size + * @param cmp array element comparator + */ +EXPORT void qsort(void *a, size_t n, size_t es, int (*cmp)(const void *, const void *)); + +/** + * Portable implementation of memmem function performing byte sequence (needle) search in another byte sequence (haystack). + * + * @param h0 haystack + * @param k haystack size + * @param n0 needle + * @param l needle size + * + * @return pointer to found sequence or NULL + */ +EXPORT void *lilu_os_memmem(const void *h0, size_t k, const void *n0, size_t l); + +/** + * Portable implementation of memchr function performing byte search in a byte sequence. + * + * @param src source to search in + * @param c byte to find + * @param n source size in bytes + * + * @return pointer to found byte or NULL + */ +EXPORT void *lilu_os_memchr(const void *src, int c, size_t n); + +/** + * Count array elements + * + * @param array Array to process + * + * @return number of elements + */ +template +constexpr size_t arrsize(const T (&array)[N]) { + return N; +} + +/** + * C-style memory management from libkern, missing from headers + */ +extern "C" { + void *kern_os_malloc(size_t size); + void *kern_os_calloc(size_t num, size_t size); + void kern_os_free(void *addr); + void *kern_os_realloc(void *addr, size_t nsize); + // kern_os_free does not check its argument for nullptr + EXPORT void lilu_os_free(void *addr); +} + +/** + * Known kernel versions + */ +enum KernelVersion { + SnowLeopard = 10, + Lion = 11, + MountainLion = 12, + Mavericks = 13, + Yosemite = 14, + ElCapitan = 15, + Sierra = 16, + HighSierra = 17, + Mojave = 18, + Catalina = 19, + BigSur = 20, +}; + +/** + * Kernel minor version for symmetry + */ +using KernelMinorVersion = int; + +/** + * Obtain major kernel version + * + * @return numeric kernel version + */ +inline KernelVersion getKernelVersion() { + return static_cast(version_major); +} + +/** + * Obtain minor kernel version + * + * @return numeric minor kernel version + */ +inline KernelMinorVersion getKernelMinorVersion() { + return static_cast(version_minor); +} + +/** + * Check whether kernel boot argument is passed ignoring the value (e.g. -arg or arg). + * + * @param name argument name + * + * @return true if argument was passed + */ +inline bool checkKernelArgument(const char *name) { + int val[16]; + return PE_parse_boot_argn(name, val, sizeof(val)); +} + +/** + * Parse apple version at compile time + * + * @param version string literal representing apple version (e.g. 1.1.1) + * + * @return numeric kernel version + */ +constexpr size_t parseModuleVersion(const char *version) { + return (size_t)(version[0] - '0') * 100 + (version[2] - '0') * 10 + (version[4] - '0'); +} + +/** + * Access struct member by its offset + * + * @param T pointer to the field you need + * @param that pointer to struct + * @param off offset in bytes to the member + * + * @return reference to the struct member + */ +template +inline T &getMember(void *that, size_t off) { + return *reinterpret_cast(static_cast(that) + off); +} + +/** + * Align value by align (page size by default) + * + * @param size value + * + * @return algined value + */ +template +inline T alignValue(T size, T align = 4096) { + return (size + align - 1) & (~(align - 1)); +} + +/** + * Check pointer alignment for type T + * + * @param p pointer + * + * @return true if properly aligned + */ +template +inline bool isAligned(T *p) { + return reinterpret_cast(p) % alignof(T) == 0; +} + +/** + * Obtain bit value of size sizeof(T) + * Warning, you are suggested to always pass the type explicitly! + * + * @param n bit no + * + * @return bit value + */ +template +constexpr T getBit(T n) { + return static_cast(1U) << n; +} + +/** + * Obtain bit mask of size sizeof(T) + * Warning, you are suggested to always pass the type explicitly! + * + * @param hi starting high bit + * @param lo ending low bit + * + * @return bit mask + */ +template +constexpr T getBitMask(T hi, T lo) { + return (getBit(hi)|(getBit(hi)-1U)) & ~(getBit(lo)-1U); +} + +/** + * Obtain bit field of size sizeof(T) + * Warning, you are suggested to always pass the type explicitly! + * + * @param so source + * @param hi starting high bit + * @param lo ending low bit + * + * @return bit field value + */ +template +constexpr T getBitField(T so, T hi, T lo) { + return (so & getBitMask(hi, lo)) >> lo; +} + +/** + * Set bit field of size sizeof(T) + * Warning, you are suggested to always pass the type explicitly! + * + * @param va value + * @param hi starting high bit + * @param lo ending low bit + * + * @return bit field value + */ +template +constexpr T setBitField(T so, T hi, T lo) { + return (so << lo) & getBitMask(hi, lo); +} + +/** + * This is an ugly replacement to std::find_if, allowing you + * to check whether a container consists only of value values. + * + * @param in container + * @param size container size + * @param value value to look for + * + * @return true if an element different from value was found + */ +template +inline bool findNotEquals(T &in, size_t size, Y value) { + for (size_t i = 0; i < size; i++) + if (in[i] != value) + return true; + return false; +} + +/** + * Returns non-null string when they can be null + * + * @param str original string + * + * @return non-null string + */ +inline const char *safeString(const char *str) { + return str ? str : "(null)"; +} + +/** + * A shorter form of writing reinterpret_cast(ptr) + */ +template +inline T FunctionCast(T org, mach_vm_address_t ptr) { + return reinterpret_cast(ptr); +} + +/** + * Reference cleaner + */ +template struct remove_reference {typedef T type;}; +template struct remove_reference {typedef T type;}; +template struct remove_reference {typedef T type;}; + + +/** + * Typed buffer allocator + */ +namespace Buffer { + /** + * Allocating more than 1 GB is unreasonable for stability purposes. + */ + static constexpr size_t BufferMax = 1024*1024*1024; + + template + inline T *create(size_t size) { + size_t s = sizeof(T) * size; + if (s > BufferMax) return nullptr; + return static_cast(kern_os_malloc(s)); + } + + template + inline bool resize(T *&buf, size_t size) { + size_t s = sizeof(T) * size; + if (s > BufferMax) return false; + auto nbuf = static_cast(kern_os_realloc(buf, s)); + if (nbuf) { + buf = nbuf; + return true; + } + + return false; + } + + template + inline void deleter(T *buf NONNULL) { + lilu_os_free(buf); + } +} + +/** + * Dynamically allocated page + */ +struct Page { + /** + * Allocates a page + * + * @return true on success + */ + EXPORT bool alloc(); + + /** + * Sets page protection + * + * @param prot protection bitmask + * + * @return true on success + */ + EXPORT bool protect(vm_prot_t prot); + + /** + * Deletes the page + * + * @param p page + */ + EXPORT static void deleter(Page *p NONNULL); + + /** + * Creates a page object + * + * @return pointer to new page object or nullptr + */ + EXPORT static Page *create(); + + /** + * Page buffer + */ + uint8_t *p {nullptr}; +}; + +/** + * Thread specific container of T values in up to N threads + */ +template +class ThreadLocal { + /** + * A list of tread identifiers + */ + _Atomic(thread_t) threads[N] {}; + + /** + * A list of value references + */ + T values[N] {}; + +public: + /** + * Initialise storage + */ + void init() {} + + /** + * Deinitialise storage + */ + void deinit() { + for (size_t i = 0; i < N; i++) { + atomic_store_explicit(&threads[i], nullptr, memory_order_relaxed); + values[i] = {}; + } + } + + /** + * Set or overwrite thread specific value + * + * @param value value to store + * + * @return true on success + */ + bool set(T value) { + auto currThread = current_thread(); + T *ptr = nullptr; + + // Find previous value if any + for (size_t i = 0; ptr == nullptr && i < N; i++) + if (atomic_load_explicit(&threads[i], memory_order_acquire) == currThread) + ptr = &values[i]; + + // Find null value if any + for (size_t i = 0; ptr == nullptr && i < N; i++) { + thread_t nullThread = nullptr; + if (atomic_compare_exchange_strong_explicit(&threads[i], &nullThread, currThread, + memory_order_acq_rel, memory_order_acq_rel)) + ptr = &values[i]; + } + + // Insert if we can + if (ptr) *ptr = value; + + return ptr != nullptr; + } + + /** + * Get thread specific value + * + * @return pointer to stored value on success + */ + T *get() { + auto currThread = current_thread(); + + for (size_t i = 0; i < N; i++) + if (atomic_load_explicit(&threads[i], memory_order_acquire) == currThread) + return &values[i]; + + return nullptr; + } + + /** + * Unset thread specific value if present + * + * @return true on success + */ + bool erase() { + auto currThread = current_thread(); + + for (size_t i = 0; i < N; i++) { + if (atomic_load_explicit(&threads[i], memory_order_acquire) == currThread) { + values[i] = {}; + thread_t nullThread = nullptr; + return atomic_compare_exchange_strong_explicit(&threads[i], &currThread, + nullThread, memory_order_acq_rel, memory_order_acq_rel); + } + } + + return false; + } +}; + +/** + * Use this deleter when storing scalar types + */ +template +static void emptyDeleter(T) { /* no dynamic alloc */ } + +template , void (*deleterY)(Y)=emptyDeleter> +struct ppair { + T first; + Y second; + + static ppair *create() { + return new ppair; + } + + static void deleter(ppair *p NONNULL) { + deleterT(p->first); + deleterY(p->second); + delete p; + } +}; + +/** + * Embedded vector-like container + * You must call deinit before destruction + * Ugh, someone, please, port libc++ to XNU... + * + * @param T held type + * @param P destructible type + * @param deleter type destructor + */ +template > +class evector_base { + T *ptr {nullptr}; + size_t cnt {0}; + size_t rsvd {0}; +public: + /** + * Return evector size + * + * @return element count + */ + size_t size() const { + return cnt; + } + + /** + * Return pointer to the elements + * Valid until evector contents change + * + * @return elements ptr + */ + T *data() const { + return ptr; + } + + /** + * Return last element id + * + * @return element id + */ + size_t last() const { + return cnt-1; + } + + /** + * Return evector element reference + * + * @param index array index + * + * @return the element at provided index + */ + T &operator [](size_t index) { + return ptr[index]; + } + + /** + * Return evector const element reference + * + * @param index array index + * + * @return the element at provided index + */ + const T &operator [](size_t index) const { + return ptr[index]; + } + + /** + * Reserve memory for at least N elements + * + * @param num amount of elements + * + * @return elements ptr or null + */ + template + T *reserve(size_t num) { + if (rsvd < num) { + T *nPtr = static_cast(kern_os_realloc(ptr, MUL * num * sizeof(T))); + if (nPtr) { + ptr = nPtr; + rsvd = MUL * num; + } else { + return nullptr; + } + } + + return ptr; + } + + /** + * Erase evector element + * + * @param index element index + */ + void erase(size_t index, bool free=true) { + deleter(ptr[index]); + if (--cnt != index) + lilu_os_memmove(&ptr[index], &ptr[index + 1], (cnt - index) * sizeof(T)); + + if (free && cnt == 0) { + kern_os_free(ptr); + ptr = nullptr; + rsvd = 0; + } + } + + /** + * Add an element to evector end + * + * @param &element an element to add + * + * @return true on success + */ + template + bool push_back(T &element) { + if (reserve(cnt+1)) { + ptr[cnt] = element; + cnt++; + return true; + } + + SYSLOG("evector", "insertion failure"); + return false; + } + + /** + * Add an element to evector end + * + * @param &element an element to add + * + * @return true on success + */ + template + bool push_back(T &&element) { + if (reserve(cnt+1)) { + ptr[cnt] = element; + cnt++; + return true; + } + + SYSLOG("evector", "insertion failure"); + return false; + } + + evector_base() = default; + evector_base(const evector_base &) = delete; + evector_base operator =(const evector_base &) = delete; + + /** + * Free the used memory + */ + void deinit() { + if (ptr) { + for (size_t i = 0; i < cnt; i++) + deleter(ptr[i]); + kern_os_free(ptr); + ptr = nullptr; + cnt = rsvd = 0; + } + } +}; + +/** +* Embedded vector-like container, simplified specialisation +* You must call deinit before destruction +* +* @param T held type +* @param deleter type destructor +*/ +template > +class evector : public evector_base::type, T, deleter> { }; + +#endif /* kern_util_hpp */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_version.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_version.hpp new file mode 100755 index 0000000..41cae0a --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/kern_version.hpp @@ -0,0 +1,85 @@ +// +// kern_version.hpp +// Lilu +// +// Copyright © 2016-2020 vit9696. All rights reserved. +// + +#ifndef kern_version_hpp +#define kern_version_hpp + +#include + +#include +#include + +/** + * Slightly non-standard helpers to get the date in a YYYY-MM-DD format. + */ +template +inline constexpr char getBuildYear() { + static_assert(i < 4, "Year consists of four digits"); + return __DATE__[7+i]; +} + +template +inline constexpr char getBuildMonth() { + static_assert(i < 2, "Month consists of two digits"); + auto mon = static_cast(__DATE__[0]) + | (static_cast(__DATE__[1]) << 8U) + | (static_cast(__DATE__[2]) << 16U) + | (static_cast(__DATE__[3]) << 24U); + switch (mon) { + case ' naJ': + return "01"[i]; + case ' beF': + return "02"[i]; + case ' raM': + return "03"[i]; + case ' rpA': + return "04"[i]; + case ' yaM': + return "05"[i]; + case ' nuJ': + return "06"[i]; + case ' luJ': + return "07"[i]; + case ' guA': + return "08"[i]; + case ' peS': + return "09"[i]; + case ' tcO': + return "10"[i]; + case ' voN': + return "11"[i]; + case ' ceD': + return "12"[i]; + default: + return '0'; + } +} + +template +inline constexpr char getBuildDay() { + static_assert(i < 2, "Day consists of two digits"); + if (i == 0 && __DATE__[4+i] == ' ') + return '0'; + return __DATE__[4+i]; +} + +#if !defined(LILU_CUSTOM_KMOD_INIT) || !defined(LILU_CUSTOM_IOKIT_INIT) || defined(LILU_USE_KEXT_VERSION) + +static const char kextVersion[] { +#ifdef DEBUG + 'D', 'B', 'G', '-', +#else + 'R', 'E', 'L', '-', +#endif + xStringify(MODULE_VERSION)[0], xStringify(MODULE_VERSION)[2], xStringify(MODULE_VERSION)[4], '-', + getBuildYear<0>(), getBuildYear<1>(), getBuildYear<2>(), getBuildYear<3>(), '-', + getBuildMonth<0>(), getBuildMonth<1>(), '-', getBuildDay<0>(), getBuildDay<1>(), '\0' +}; + +#endif + +#endif /* kern_version_hpp */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/plugin_start.hpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/plugin_start.hpp new file mode 100755 index 0000000..a86c3b8 --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Headers/plugin_start.hpp @@ -0,0 +1,53 @@ +// +// kern_start.hpp +// AppleALC +// +// Copyright © 2016 vit9696. All rights reserved. +// + +#ifndef kern_start_hpp +#define kern_start_hpp + +#include + +#include +#include + +struct PluginConfiguration { + const char *product; // Product name (e.g. xStringify(PRODUCT_NAME)) + size_t version; // Product version (e.g. parseModuleVersion(xStringify(MODULE_VERSION))) + uint32_t runmode; // Product supported environments (e.g. LiluAPI::AllowNormal) + const char **disableArg; // Pointer to disabling boot arguments array + size_t disableArgNum; // Number of disabling boot arguments + const char **debugArg; // Pointer to debug boot arguments array + size_t debugArgNum; // Number of debug boot arguments + const char **betaArg; // Pointer to beta boot arguments array + size_t betaArgNum; // Number of beta boot arguments + KernelVersion minKernel; // Minimal required kernel version + KernelVersion maxKernel; // Maximum supported kernel version + void (*pluginStart)(); // Main function +}; + +#ifndef LILU_CUSTOM_KMOD_INIT + +extern PluginConfiguration ADDPR(config); + +extern bool ADDPR(startSuccess); + +#endif /* LILU_CUSTOM_KMOD_INIT */ + +#ifndef LILU_CUSTOM_IOKIT_INIT + +class EXPORT PRODUCT_NAME : public IOService { + OSDeclareDefaultStructors(PRODUCT_NAME) +public: + IOService *probe(IOService *provider, SInt32 *score) override; + bool start(IOService *provider) override; + void stop(IOService *provider) override; +}; + +extern PRODUCT_NAME *ADDPR(selfInstance); + +#endif /* LILU_CUSTOM_IOKIT_INIT */ + +#endif /* kern_start_hpp */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Library/plugin_start.cpp b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Library/plugin_start.cpp new file mode 100755 index 0000000..bbd7cf4 --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Library/plugin_start.cpp @@ -0,0 +1,99 @@ +// +// plugin_start.cpp +// Lilu +// +// Copyright © 2016-2017 vit9696. All rights reserved. +// + +#include +#include +#include +#include + +#ifndef LILU_CUSTOM_KMOD_INIT +bool ADDPR(startSuccess) = false; +#else +// Workaround custom kmod code and enable by default +bool ADDPR(startSuccess) = true; +#endif /* LILU_CUSTOM_KMOD_INIT */ + +bool ADDPR(debugEnabled) = false; +uint32_t ADDPR(debugPrintDelay) = 0; + +#ifndef LILU_CUSTOM_IOKIT_INIT + +OSDefineMetaClassAndStructors(PRODUCT_NAME, IOService) + +PRODUCT_NAME *ADDPR(selfInstance) = nullptr; + +IOService *PRODUCT_NAME::probe(IOService *provider, SInt32 *score) { + ADDPR(selfInstance) = this; + setProperty("VersionInfo", kextVersion); + auto service = IOService::probe(provider, score); + return ADDPR(startSuccess) ? service : nullptr; +} + +bool PRODUCT_NAME::start(IOService *provider) { + ADDPR(selfInstance) = this; + if (!IOService::start(provider)) { + SYSLOG("init", "failed to start the parent"); + return false; + } + + return ADDPR(startSuccess); +} + +void PRODUCT_NAME::stop(IOService *provider) { + ADDPR(selfInstance) = nullptr; + IOService::stop(provider); +} + +#endif /* LILU_CUSTOM_IOKIT_INIT */ + +#ifndef LILU_CUSTOM_KMOD_INIT + +EXPORT extern "C" kern_return_t ADDPR(kern_start)(kmod_info_t *, void *) { + // This is an ugly hack necessary on some systems where buffering kills most of debug output. + PE_parse_boot_argn("liludelay", &ADDPR(debugPrintDelay), sizeof(ADDPR(debugPrintDelay))); + + auto error = lilu.requestAccess(); + if (error == LiluAPI::Error::NoError) { + error = lilu.shouldLoad(ADDPR(config).product, ADDPR(config).version, ADDPR(config).runmode, ADDPR(config).disableArg, ADDPR(config).disableArgNum, + ADDPR(config).debugArg, ADDPR(config).debugArgNum, ADDPR(config).betaArg, ADDPR(config).betaArgNum, ADDPR(config).minKernel, + ADDPR(config).maxKernel, ADDPR(debugEnabled)); + + if (error == LiluAPI::Error::NoError) { + DBGLOG("init", "%s bootstrap %s", xStringify(PRODUCT_NAME), kextVersion); + (void)kextVersion; + ADDPR(startSuccess) = true; + ADDPR(config).pluginStart(); + } else { + SYSLOG("init", "parent said we should not continue %d", error); + } + + lilu.releaseAccess(); + } else { + SYSLOG("init", "failed to call parent %d", error); + + for (size_t i = 0; i < ADDPR(config).debugArgNum; i++) { + if (checkKernelArgument(ADDPR(config).debugArg[i])) { + ADDPR(debugEnabled) = true; + break; + } + } + + if (checkKernelArgument("-liludbgall")) + ADDPR(debugEnabled) = true; + } + + // Report success but actually do not start and let I/O Kit unload us. + // This works better and increases boot speed in some cases. + return KERN_SUCCESS; +} + +EXPORT extern "C" kern_return_t ADDPR(kern_stop)(kmod_info_t *, void *) { + // It is not safe to unload Lilu plugins unless they were disabled! + return ADDPR(startSuccess) ? KERN_FAILURE : KERN_SUCCESS; +} + +#endif /* LILU_CUSTOM_KMOD_INIT */ diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Library/wrappers/build.tool b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Library/wrappers/build.tool new file mode 100755 index 0000000..14c6dae --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Library/wrappers/build.tool @@ -0,0 +1,57 @@ +#!/bin/bash +# +# build.tool +# Lilu +# +# Copyright © 2018 vit9696. All rights reserved. +# + +cd $(dirname "$0") || exit 1 + +rm -f *.o *.bin wrappers.inc entry32 entry64 + +clang -m32 -c entry32.S || exit 1 +clang -m64 -c entry64.S || exit 1 + +clang -m32 entry32.o -o entry32 || exit 1 +clang -m64 entry64.o -o entry64 || exit 1 + +if [ "$(nm entry32.o | grep '00000000 T _main')" == "" ] || [ "$(nm entry64.o | grep '0000000000000000 T _main')" == "" ]; then + echo "Invalid main address" + exit 1 +fi + +otool -t entry32 | grep -E '^0000' | sed 's#^[0-9a-f]*##' | xxd -r -p > entry32.bin +otool -t entry64 | grep -E '^0000' | sed 's#^[0-9a-f]*##' | xxd -r -p > entry64.bin + +sz32=$(stat -f '%z' entry32.bin) +sz64=$(stat -f '%z' entry64.bin) + +btr32=$(nm entry32.o | grep -E 't booter$' | cut -f1 -d' ') +btr64=$(nm entry64.o | grep -E 't booter$' | cut -f1 -d' ') + +ep32=$(nm entry32.o | grep -E 't entrypoint$' | cut -f1 -d' ') +ep64=$(nm entry64.o | grep -E 't entrypoint$' | cut -f1 -d' ') + +echo '//' > wrappers.inc +echo '// wrappers.inc' >> wrappers.inc +echo '// Lilu' >> wrappers.inc +echo '//' >> wrappers.inc +echo '// Copyright © 2018 vit9696. All rights reserved.' >> wrappers.inc +echo '//' >> wrappers.inc +echo '' >> wrappers.inc +echo '// This is an autogenerated file, do not edit!' >> wrappers.inc +echo 'static uint8_t entryWrapper32[] = {' >> wrappers.inc +cat entry32.bin | xxd -i >> wrappers.inc +echo '};' >> wrappers.inc +echo 'static uint8_t entryWrapper64[] = {' >> wrappers.inc +cat entry64.bin | xxd -i >> wrappers.inc +echo '};' >> wrappers.inc +echo "static_assert(sizeof(entryWrapper32) == ${sz32}, \"Invalid entryWrapper32 size\");" >> wrappers.inc +echo "static_assert(sizeof(entryWrapper64) == ${sz64}, \"Invalid entryWrapper64 size\");" >> wrappers.inc +echo "static constexpr size_t EntryWrapper32Booter {0x${btr32}};" >> wrappers.inc +echo "static constexpr size_t EntryWrapper64Booter {0x${btr64}};" >> wrappers.inc +echo "static constexpr size_t EntryWrapper32Entry {0x${ep32}};" >> wrappers.inc +echo "static constexpr size_t EntryWrapper64Entry {0x${ep64}};" >> wrappers.inc + +rm -f *.o *.bin entry32 entry64 diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Library/wrappers/entry32.S b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Library/wrappers/entry32.S new file mode 100755 index 0000000..249172e --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Library/wrappers/entry32.S @@ -0,0 +1,41 @@ +# +# entry32.S +# Lilu +# +# Copyright © 2018 vit9696. All rights reserved. +# + +.text +.global _main +_main: + push %ebp + mov %esp, %ebp + # ensure 16-byte alignment + and $0xfffffff0, %esp + # int main(int argc, const char* argv[], const char* envp[], const char* apple[]); + push 20(%ebp) + push 16(%ebp) + push 12(%ebp) + push 8(%ebp) + call get_booter +# entrypoint-compatible wrapper +booter: + .word 0xFFFF + .word 0xFFFF +get_booter: + pop %edx + mov (%edx), %edx + call *%edx + xor %eax, %eax + mov %ebp, %esp + pop %ebp + call get_entrypoint +# original entrypoint (main) +entrypoint: + .word 0xFFFF + .word 0xFFFF +get_entrypoint: + pop %edx + mov (%edx), %edx + jmp *%edx +_end: diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Library/wrappers/entry64.S b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Library/wrappers/entry64.S new file mode 100755 index 0000000..01ccc45 --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Library/wrappers/entry64.S @@ -0,0 +1,41 @@ +# +# entry64.S +# Lilu +# +# Copyright © 2018 vit9696. All rights reserved. +# + +.text +.global _main +_main: + push %rbp + mov %rsp, %rbp + # ensure 16-byte alignment + and $0xfffffffffffffff0, %rsp + # int main(int argc, const char* argv[], const char* envp[], const char* apple[]); + push %rdi + push %rsi + push %rdx + push %rcx + call *booter(%rip) + xor %eax, %eax + pop %rcx + pop %rdx + pop %rsi + pop %rdi + mov %rbp, %rsp + pop %rbp + jmp *entrypoint(%rip) +# original entrypoint (main) +entrypoint: + .word 0xFFFF + .word 0xFFFF + .word 0xFFFF + .word 0xFFFF +# entrypoint-compatible wrapper +booter: + .word 0xFFFF + .word 0xFFFF + .word 0xFFFF + .word 0xFFFF +_end: diff --git a/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Library/wrappers/wrappers.inc b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Library/wrappers/wrappers.inc new file mode 100755 index 0000000..62d919c --- /dev/null +++ b/EFI/OC/Kexts/Lilu.kext/Contents/Resources/Library/wrappers/wrappers.inc @@ -0,0 +1,28 @@ +// +// wrappers.inc +// Lilu +// +// Copyright © 2018 vit9696. All rights reserved. +// + +// This is an autogenerated file, do not edit! +static uint8_t entryWrapper32[] = { + 0x55, 0x89, 0xe5, 0x83, 0xe4, 0xf0, 0xff, 0x75, 0x14, 0xff, 0x75, 0x10, + 0xff, 0x75, 0x0c, 0xff, 0x75, 0x08, 0xe8, 0x04, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x5a, 0x8b, 0x12, 0xff, 0xd2, 0x31, 0xc0, 0x89, 0xec, + 0x5d, 0xe8, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x5a, 0x8b, + 0x12, 0xff, 0xe2 +}; +static uint8_t entryWrapper64[] = { + 0x55, 0x48, 0x89, 0xe5, 0x48, 0x83, 0xe4, 0xf0, 0x57, 0x56, 0x52, 0x51, + 0xff, 0x15, 0x18, 0x00, 0x00, 0x00, 0x31, 0xc0, 0x59, 0x5a, 0x5e, 0x5f, + 0x48, 0x89, 0xec, 0x5d, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff +}; +static_assert(sizeof(entryWrapper32) == 51, "Invalid entryWrapper32 size"); +static_assert(sizeof(entryWrapper64) == 50, "Invalid entryWrapper64 size"); +static constexpr size_t EntryWrapper32Booter {0x00000017}; +static constexpr size_t EntryWrapper64Booter {0x000000000000002a}; +static constexpr size_t EntryWrapper32Entry {0x0000002a}; +static constexpr size_t EntryWrapper64Entry {0x0000000000000022}; diff --git a/EFI/OC/Kexts/RTCMemoryFixup.kext/Contents/Info.plist b/EFI/OC/Kexts/RTCMemoryFixup.kext/Contents/Info.plist new file mode 100755 index 0000000..4762e77 --- /dev/null +++ b/EFI/OC/Kexts/RTCMemoryFixup.kext/Contents/Info.plist @@ -0,0 +1,81 @@ + + + + + BuildMachineOSBuild + 18E226 + CFBundleDevelopmentRegion + en + CFBundleExecutable + RTCMemoryFixup + CFBundleIdentifier + as.lvs1974.RTCMemoryFixup + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + RTCMemoryFixup + CFBundlePackageType + KEXT + CFBundleShortVersionString + 1.0.6 + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 1.0.6 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 10E1001 + DTPlatformVersion + GM + DTSDKBuild + 18E219 + DTSDKName + macosx10.14 + DTXcode + 1020 + DTXcodeBuild + 10E1001 + IOKitPersonalities + + as.lvs1974.RTCMemoryFixup + + CFBundleIdentifier + as.lvs1974.RTCMemoryFixup + IOClass + RTCMemoryFixup + IONameMatch + PNP0B00 + IOProbeScore + 100 + IOProviderClass + IOACPIPlatformDevice + + + NSHumanReadableCopyright + Copyright © 2018 lvs1974. All rights reserved. + OSBundleCompatibleVersion + 1.0 + OSBundleLibraries + + as.vit9696.Lilu + 1.2.0 + com.apple.kpi.bsd + 12.0.0 + com.apple.kpi.dsep + 12.0.0 + com.apple.kpi.iokit + 12.0.0 + com.apple.kpi.libkern + 12.0.0 + com.apple.kpi.mach + 12.0.0 + com.apple.kpi.unsupported + 12.0.0 + + OSBundleRequired + Root + + diff --git a/EFI/OC/Kexts/RTCMemoryFixup.kext/Contents/MacOS/RTCMemoryFixup b/EFI/OC/Kexts/RTCMemoryFixup.kext/Contents/MacOS/RTCMemoryFixup new file mode 100755 index 0000000..326a9db Binary files /dev/null and b/EFI/OC/Kexts/RTCMemoryFixup.kext/Contents/MacOS/RTCMemoryFixup differ diff --git a/EFI/OC/Kexts/RealtekRTL8111.kext/Contents/Info.plist b/EFI/OC/Kexts/RealtekRTL8111.kext/Contents/Info.plist new file mode 100755 index 0000000..9752f6a --- /dev/null +++ b/EFI/OC/Kexts/RealtekRTL8111.kext/Contents/Info.plist @@ -0,0 +1,106 @@ + + + + + BuildMachineOSBuild + 19H512 + CFBundleDevelopmentRegion + English + CFBundleExecutable + RealtekRTL8111 + CFBundleIdentifier + com.insanelymac.RealtekRTL8111 + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + RealtekRTL8111 + CFBundlePackageType + KEXT + CFBundleShortVersionString + 2.4.0 + CFBundleSignature + ???? + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 2.4.0 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 10G8 + DTPlatformVersion + GM + DTSDKBuild + 18G74 + DTSDKName + macosx10.14 + DTXcode + 1030 + DTXcodeBuild + 10G8 + IOKitPersonalities + + RTL8111 PCIe Adapter + + CFBundleIdentifier + com.insanelymac.RealtekRTL8111 + Driver Parameters + + disableASPM + + enableCSO6 + + enableEEE + + enableTSO4 + + enableTSO6 + + fallbackMAC + + intrMitigate + 53080 + rxPolling + + + Driver_Version + 2.4.0 + IOClass + RTL8111 + IOPCIMatch + 0x816810ec 0x81681186 0x250210ec 0x260010ec + IOProbeScore + 1000 + IOProviderClass + IOPCIDevice + Model + RTL8111 + Vendor + Realtek + + + LSMinimumSystemVersion + 10.14 + NSHumanReadableCopyright + Copyright © 2013 Laura Müller. All rights reserved. + OSBundleLibraries + + com.apple.iokit.IONetworkingFamily + 1.5.0 + com.apple.iokit.IOPCIFamily + 1.7 + com.apple.kpi.bsd + 8.10.0 + com.apple.kpi.iokit + 8.10.0 + com.apple.kpi.libkern + 8.10.0 + com.apple.kpi.mach + 8.10.0 + + OSBundleRequired + Network-Root + + diff --git a/EFI/OC/Kexts/RealtekRTL8111.kext/Contents/MacOS/RealtekRTL8111 b/EFI/OC/Kexts/RealtekRTL8111.kext/Contents/MacOS/RealtekRTL8111 new file mode 100755 index 0000000..18cc77c Binary files /dev/null and b/EFI/OC/Kexts/RealtekRTL8111.kext/Contents/MacOS/RealtekRTL8111 differ diff --git a/EFI/OC/Kexts/RealtekRTL8111.kext/Contents/Resources/en.lproj/InfoPlist.strings b/EFI/OC/Kexts/RealtekRTL8111.kext/Contents/Resources/en.lproj/InfoPlist.strings new file mode 100755 index 0000000..5e45963 Binary files /dev/null and b/EFI/OC/Kexts/RealtekRTL8111.kext/Contents/Resources/en.lproj/InfoPlist.strings differ diff --git a/EFI/OC/Kexts/USBInjectAll.kext/Contents/Info.plist b/EFI/OC/Kexts/USBInjectAll.kext/Contents/Info.plist new file mode 100755 index 0000000..90d37b1 --- /dev/null +++ b/EFI/OC/Kexts/USBInjectAll.kext/Contents/Info.plist @@ -0,0 +1,6863 @@ + + + + + BuildMachineOSBuild + 18B75 + CFBundleDevelopmentRegion + English + CFBundleExecutable + USBInjectAll + CFBundleGetInfoString + 0.7.1 Copyright © 2015 RehabMan. All rights reserved. + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + USBInjectAll + CFBundlePackageType + KEXT + CFBundleShortVersionString + 0.7.1 + CFBundleSignature + ???? + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 0.7.1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 9F2000 + DTPlatformVersion + GM + DTSDKBuild + 15E60 + DTSDKName + macosx10.11 + DTXcode + 0941 + DTXcodeBuild + 9F2000 + IOKitPersonalities + + ConfigurationData + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + Configuration + + 8086_1e31 + + port-count + + CAAAAA== + + ports + + HS01 + + UsbConnector + 3 + port + + AQAAAA== + + + HS02 + + UsbConnector + 3 + port + + AgAAAA== + + + HS03 + + UsbConnector + 3 + port + + AwAAAA== + + + HS04 + + UsbConnector + 3 + port + + BAAAAA== + + + SS01 + + UsbConnector + 3 + port + + BQAAAA== + + + SS02 + + UsbConnector + 3 + port + + BgAAAA== + + + SS03 + + UsbConnector + 3 + port + + BwAAAA== + + + SS04 + + UsbConnector + 3 + port + + CAAAAA== + + + + + 8086_8xxx + + port-count + + FQAAAA== + + ports + + HS01 + + UsbConnector + 3 + port + + AQAAAA== + + + HS02 + + UsbConnector + 3 + port + + AgAAAA== + + + HS03 + + UsbConnector + 3 + port + + AwAAAA== + + + HS04 + + UsbConnector + 3 + port + + BAAAAA== + + + HS05 + + UsbConnector + 3 + port + + BQAAAA== + + + HS06 + + UsbConnector + 3 + port + + BgAAAA== + + + HS07 + + UsbConnector + 3 + port + + BwAAAA== + + + HS08 + + UsbConnector + 3 + port + + CAAAAA== + + + HS09 + + UsbConnector + 3 + port + + CQAAAA== + + + HS10 + + UsbConnector + 3 + port + + CgAAAA== + + + HS11 + + UsbConnector + 3 + port + + CwAAAA== + + + HS12 + + UsbConnector + 3 + port + + DAAAAA== + + + HS13 + + UsbConnector + 3 + port + + DQAAAA== + + + HS14 + + UsbConnector + 3 + port + + DgAAAA== + + + SS01 + + UsbConnector + 3 + port + + EAAAAA== + + + SS02 + + UsbConnector + 3 + port + + EQAAAA== + + + SS03 + + UsbConnector + 3 + port + + EgAAAA== + + + SS04 + + UsbConnector + 3 + port + + EwAAAA== + + + SS05 + + UsbConnector + 3 + port + + FAAAAA== + + + SS06 + + UsbConnector + 3 + port + + FQAAAA== + + + + + 8086_9cb1 + + port-count + + DwAAAA== + + ports + + HS01 + + UsbConnector + 3 + port + + AQAAAA== + + + HS02 + + UsbConnector + 3 + port + + AgAAAA== + + + HS03 + + UsbConnector + 3 + port + + AwAAAA== + + + HS04 + + UsbConnector + 3 + port + + BAAAAA== + + + HS05 + + UsbConnector + 3 + port + + BQAAAA== + + + HS06 + + UsbConnector + 3 + port + + BgAAAA== + + + HS07 + + UsbConnector + 3 + port + + BwAAAA== + + + HS08 + + UsbConnector + 3 + port + + CAAAAA== + + + HS09 + + UsbConnector + 3 + port + + CQAAAA== + + + HS10 + + UsbConnector + 3 + port + + CgAAAA== + + + HS11 + + UsbConnector + 3 + port + + CwAAAA== + + + SS01 + + UsbConnector + 3 + port + + DAAAAA== + + + SS02 + + UsbConnector + 3 + port + + DQAAAA== + + + SS03 + + UsbConnector + 3 + port + + DgAAAA== + + + SS04 + + UsbConnector + 3 + port + + DwAAAA== + + + + + 8086_9dxx + + port-count + + EgAAAA== + + ports + + HS01 + + UsbConnector + 3 + port + + AQAAAA== + + + HS02 + + UsbConnector + 3 + port + + AgAAAA== + + + HS03 + + UsbConnector + 3 + port + + AwAAAA== + + + HS04 + + UsbConnector + 3 + port + + BAAAAA== + + + HS05 + + UsbConnector + 3 + port + + BQAAAA== + + + HS06 + + UsbConnector + 3 + port + + BgAAAA== + + + HS07 + + UsbConnector + 3 + port + + BwAAAA== + + + HS08 + + UsbConnector + 3 + port + + CAAAAA== + + + HS09 + + UsbConnector + 3 + port + + CQAAAA== + + + HS10 + + UsbConnector + 3 + port + + CgAAAA== + + + SS01 + + UsbConnector + 3 + port + + DQAAAA== + + + SS02 + + UsbConnector + 3 + port + + DgAAAA== + + + SS03 + + UsbConnector + 3 + port + + DwAAAA== + + + SS04 + + UsbConnector + 3 + port + + EAAAAA== + + + SS05 + + UsbConnector + 3 + port + + EQAAAA== + + + SS06 + + UsbConnector + 3 + port + + EgAAAA== + + + USR1 + + UsbConnector + 3 + port + + CwAAAA== + + + USR2 + + UsbConnector + 3 + port + + DAAAAA== + + + + + 8086_9xxx + + port-count + + DQAAAA== + + ports + + HS01 + + UsbConnector + 3 + port + + AQAAAA== + + + HS02 + + UsbConnector + 3 + port + + AgAAAA== + + + HS03 + + UsbConnector + 3 + port + + AwAAAA== + + + HS04 + + UsbConnector + 3 + port + + BAAAAA== + + + HS05 + + UsbConnector + 3 + port + + BQAAAA== + + + HS06 + + UsbConnector + 3 + port + + BgAAAA== + + + HS07 + + UsbConnector + 3 + port + + BwAAAA== + + + HS08 + + UsbConnector + 3 + port + + CAAAAA== + + + HS09 + + UsbConnector + 3 + port + + CQAAAA== + + + SS01 + + UsbConnector + 3 + port + + CgAAAA== + + + SS02 + + UsbConnector + 3 + port + + CwAAAA== + + + SS03 + + UsbConnector + 3 + port + + DAAAAA== + + + SS04 + + UsbConnector + 3 + port + + DQAAAA== + + + + + 8086_a12f + + port-count + + GgAAAA== + + ports + + HS01 + + UsbConnector + 3 + port + + AQAAAA== + + + HS02 + + UsbConnector + 3 + port + + AgAAAA== + + + HS03 + + UsbConnector + 3 + port + + AwAAAA== + + + HS04 + + UsbConnector + 3 + port + + BAAAAA== + + + HS05 + + UsbConnector + 3 + port + + BQAAAA== + + + HS06 + + UsbConnector + 3 + port + + BgAAAA== + + + HS07 + + UsbConnector + 3 + port + + BwAAAA== + + + HS08 + + UsbConnector + 3 + port + + CAAAAA== + + + HS09 + + UsbConnector + 3 + port + + CQAAAA== + + + HS10 + + UsbConnector + 3 + port + + CgAAAA== + + + HS11 + + UsbConnector + 3 + port + + CwAAAA== + + + HS12 + + UsbConnector + 3 + port + + DAAAAA== + + + HS13 + + UsbConnector + 3 + port + + DQAAAA== + + + HS14 + + UsbConnector + 3 + port + + DgAAAA== + + + SS01 + + UsbConnector + 3 + port + + EQAAAA== + + + SS02 + + UsbConnector + 3 + port + + EgAAAA== + + + SS03 + + UsbConnector + 3 + port + + EwAAAA== + + + SS04 + + UsbConnector + 3 + port + + FAAAAA== + + + SS05 + + UsbConnector + 3 + port + + FQAAAA== + + + SS06 + + UsbConnector + 3 + port + + FgAAAA== + + + SS07 + + UsbConnector + 3 + port + + FwAAAA== + + + SS08 + + UsbConnector + 3 + port + + GAAAAA== + + + SS09 + + UsbConnector + 3 + port + + GQAAAA== + + + SS10 + + UsbConnector + 3 + port + + GgAAAA== + + + USR1 + + UsbConnector + 3 + port + + DwAAAA== + + + USR2 + + UsbConnector + 3 + port + + EAAAAA== + + + + + 8086_a2af + + port-count + + GgAAAA== + + ports + + HS01 + + UsbConnector + 3 + port + + AQAAAA== + + + HS02 + + UsbConnector + 3 + port + + AgAAAA== + + + HS03 + + UsbConnector + 3 + port + + AwAAAA== + + + HS04 + + UsbConnector + 3 + port + + BAAAAA== + + + HS05 + + UsbConnector + 3 + port + + BQAAAA== + + + HS06 + + UsbConnector + 3 + port + + BgAAAA== + + + HS07 + + UsbConnector + 3 + port + + BwAAAA== + + + HS08 + + UsbConnector + 3 + port + + CAAAAA== + + + HS09 + + UsbConnector + 3 + port + + CQAAAA== + + + HS10 + + UsbConnector + 3 + port + + CgAAAA== + + + HS11 + + UsbConnector + 3 + port + + CwAAAA== + + + HS12 + + UsbConnector + 3 + port + + DAAAAA== + + + HS13 + + UsbConnector + 3 + port + + DQAAAA== + + + HS14 + + UsbConnector + 3 + port + + DgAAAA== + + + SS01 + + UsbConnector + 3 + port + + EQAAAA== + + + SS02 + + UsbConnector + 3 + port + + EgAAAA== + + + SS03 + + UsbConnector + 3 + port + + EwAAAA== + + + SS04 + + UsbConnector + 3 + port + + FAAAAA== + + + SS05 + + UsbConnector + 3 + port + + FQAAAA== + + + SS06 + + UsbConnector + 3 + port + + FgAAAA== + + + SS07 + + UsbConnector + 3 + port + + FwAAAA== + + + SS08 + + UsbConnector + 3 + port + + GAAAAA== + + + SS09 + + UsbConnector + 3 + port + + GQAAAA== + + + SS10 + + UsbConnector + 3 + port + + GgAAAA== + + + USR1 + + UsbConnector + 3 + port + + DwAAAA== + + + USR2 + + UsbConnector + 3 + port + + EAAAAA== + + + + + 8086_a36d + + port-count + + GgAAAA== + + ports + + HS01 + + UsbConnector + 3 + port + + AQAAAA== + + + HS02 + + UsbConnector + 3 + port + + AgAAAA== + + + HS03 + + UsbConnector + 3 + port + + AwAAAA== + + + HS04 + + UsbConnector + 3 + port + + BAAAAA== + + + HS05 + + UsbConnector + 3 + port + + BQAAAA== + + + HS06 + + UsbConnector + 3 + port + + BgAAAA== + + + HS07 + + UsbConnector + 3 + port + + BwAAAA== + + + HS08 + + UsbConnector + 3 + port + + CAAAAA== + + + HS09 + + UsbConnector + 3 + port + + CQAAAA== + + + HS10 + + UsbConnector + 3 + port + + CgAAAA== + + + HS11 + + UsbConnector + 3 + port + + CwAAAA== + + + HS12 + + UsbConnector + 3 + port + + DAAAAA== + + + HS13 + + UsbConnector + 3 + port + + DQAAAA== + + + HS14 + + UsbConnector + 3 + port + + DgAAAA== + + + SS01 + + UsbConnector + 3 + port + + EQAAAA== + + + SS02 + + UsbConnector + 3 + port + + EgAAAA== + + + SS03 + + UsbConnector + 3 + port + + EwAAAA== + + + SS04 + + UsbConnector + 3 + port + + FAAAAA== + + + SS05 + + UsbConnector + 3 + port + + FQAAAA== + + + SS06 + + UsbConnector + 3 + port + + FgAAAA== + + + SS07 + + UsbConnector + 3 + port + + FwAAAA== + + + SS08 + + UsbConnector + 3 + port + + GAAAAA== + + + SS09 + + UsbConnector + 3 + port + + GQAAAA== + + + SS10 + + UsbConnector + 3 + port + + GgAAAA== + + + USR1 + + UsbConnector + 3 + port + + DwAAAA== + + + USR2 + + UsbConnector + 3 + port + + EAAAAA== + + + + + EH01 + + port-count + + CAAAAA== + + ports + + PR11 + + UsbConnector + 255 + port + + AQAAAA== + + + PR12 + + UsbConnector + 0 + port + + AgAAAA== + + + PR13 + + UsbConnector + 0 + port + + AwAAAA== + + + PR14 + + UsbConnector + 0 + port + + BAAAAA== + + + PR15 + + UsbConnector + 0 + port + + BQAAAA== + + + PR16 + + UsbConnector + 0 + port + + BgAAAA== + + + PR17 + + UsbConnector + 0 + port + + BwAAAA== + + + PR18 + + UsbConnector + 0 + port + + CAAAAA== + + + + + EH02 + + port-count + + BgAAAA== + + ports + + PR21 + + UsbConnector + 255 + port + + AQAAAA== + + + PR22 + + UsbConnector + 0 + port + + AgAAAA== + + + PR23 + + UsbConnector + 0 + port + + AwAAAA== + + + PR24 + + UsbConnector + 0 + port + + BAAAAA== + + + PR25 + + UsbConnector + 0 + port + + BQAAAA== + + + PR26 + + UsbConnector + 0 + port + + BgAAAA== + + + + + HUB1 + + port-count + + CAAAAA== + + ports + + HP11 + + port + + AQAAAA== + + portType + 0 + + HP12 + + port + + AgAAAA== + + portType + 0 + + HP13 + + port + + AwAAAA== + + portType + 0 + + HP14 + + port + + BAAAAA== + + portType + 0 + + HP15 + + port + + BQAAAA== + + portType + 0 + + HP16 + + port + + BgAAAA== + + portType + 0 + + HP17 + + port + + BwAAAA== + + portType + 0 + + HP18 + + port + + CAAAAA== + + portType + 0 + + + + HUB2 + + port-count + + CAAAAA== + + ports + + HP21 + + port + + AQAAAA== + + portType + 0 + + HP22 + + port + + AgAAAA== + + portType + 0 + + HP23 + + port + + AwAAAA== + + portType + 0 + + HP24 + + port + + BAAAAA== + + portType + 0 + + HP25 + + port + + BQAAAA== + + portType + 0 + + HP26 + + port + + BgAAAA== + + portType + 0 + + HP27 + + port + + BwAAAA== + + portType + 0 + + HP28 + + port + + CAAAAA== + + portType + 0 + + + + + IOClass + USBInjectAll_config + IOMatchCategory + USBInjectAll_config + IOProviderClass + IOResources + + MacBook10,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBook10,1 + + MacBook10,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBook10,1 + + MacBook8,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBook8,1 + + MacBook8,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBook8,1 + + MacBook8,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBook8,1 + + MacBook8,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBook8,1 + + MacBook8,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBook8,1 + + MacBook9,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBook9,1 + + MacBook9,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBook9,1 + + MacBookAir4,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookAir4,1 + + MacBookAir4,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookAir4,1 + + MacBookAir4,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookAir4,1 + + MacBookAir4,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookAir4,1 + + MacBookAir4,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookAir4,1 + + MacBookAir4,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookAir4,2 + + MacBookAir4,2-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookAir4,2 + + MacBookAir4,2-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookAir4,2 + + MacBookAir4,2-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookAir4,2 + + MacBookAir4,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookAir4,2 + + MacBookAir5,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookAir5,1 + + MacBookAir5,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookAir5,1 + + MacBookAir5,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookAir5,1 + + MacBookAir5,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookAir5,1 + + MacBookAir5,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookAir5,1 + + MacBookAir5,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookAir5,2 + + MacBookAir5,2-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookAir5,2 + + MacBookAir5,2-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookAir5,2 + + MacBookAir5,2-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookAir5,2 + + MacBookAir5,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookAir5,2 + + MacBookAir6,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookAir6,1 + + MacBookAir6,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookAir6,1 + + MacBookAir6,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookAir6,1 + + MacBookAir6,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookAir6,1 + + MacBookAir6,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookAir6,1 + + MacBookAir6,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookAir6,2 + + MacBookAir6,2-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookAir6,2 + + MacBookAir6,2-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookAir6,2 + + MacBookAir6,2-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookAir6,2 + + MacBookAir6,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookAir6,2 + + MacBookAir7,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookAir7,1 + + MacBookAir7,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookAir7,1 + + MacBookAir7,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookAir7,1 + + MacBookAir7,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookAir7,1 + + MacBookAir7,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookAir7,1 + + MacBookAir7,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookAir7,2 + + MacBookAir7,2-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookAir7,2 + + MacBookAir7,2-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookAir7,2 + + MacBookAir7,2-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookAir7,2 + + MacBookAir7,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookAir7,2 + + MacBookAir8,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookAir8,1 + + MacBookAir8,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookAir8,1 + + MacBookPro10,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro10,1 + + MacBookPro10,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookPro10,1 + + MacBookPro10,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookPro10,1 + + MacBookPro10,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookPro10,1 + + MacBookPro10,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro10,1 + + MacBookPro10,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro10,2 + + MacBookPro10,2-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookPro10,2 + + MacBookPro10,2-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookPro10,2 + + MacBookPro10,2-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookPro10,2 + + MacBookPro10,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro10,2 + + MacBookPro11,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro11,1 + + MacBookPro11,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookPro11,1 + + MacBookPro11,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookPro11,1 + + MacBookPro11,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookPro11,1 + + MacBookPro11,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro11,1 + + MacBookPro11,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro11,2 + + MacBookPro11,2-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookPro11,2 + + MacBookPro11,2-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookPro11,2 + + MacBookPro11,2-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookPro11,2 + + MacBookPro11,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro11,2 + + MacBookPro11,3-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro11,3 + + MacBookPro11,3-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookPro11,3 + + MacBookPro11,3-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookPro11,3 + + MacBookPro11,3-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookPro11,3 + + MacBookPro11,3-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro11,3 + + MacBookPro11,4-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro11,4 + + MacBookPro11,4-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookPro11,4 + + MacBookPro11,4-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookPro11,4 + + MacBookPro11,4-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookPro11,4 + + MacBookPro11,4-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro11,4 + + MacBookPro11,5-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro11,5 + + MacBookPro11,5-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookPro11,5 + + MacBookPro11,5-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookPro11,5 + + MacBookPro11,5-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookPro11,5 + + MacBookPro11,5-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro11,5 + + MacBookPro12,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro12,1 + + MacBookPro12,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookPro12,1 + + MacBookPro12,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookPro12,1 + + MacBookPro12,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookPro12,1 + + MacBookPro12,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro12,1 + + MacBookPro12,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro12,2 + + MacBookPro12,2-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookPro12,2 + + MacBookPro12,2-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookPro12,2 + + MacBookPro12,2-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookPro12,2 + + MacBookPro12,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro12,2 + + MacBookPro13,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro13,1 + + MacBookPro13,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro13,1 + + MacBookPro13,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro13,2 + + MacBookPro13,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro13,2 + + MacBookPro13,3-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro13,3 + + MacBookPro13,3-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro13,3 + + MacBookPro14,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro14,1 + + MacBookPro14,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro14,1 + + MacBookPro14,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro14,2 + + MacBookPro14,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro14,2 + + MacBookPro14,3-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro14,3 + + MacBookPro14,3-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro14,3 + + MacBookPro15,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro15,1 + + MacBookPro15,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro15,1 + + MacBookPro15,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro15,2 + + MacBookPro15,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro15,2 + + MacBookPro6,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro6,1 + + MacBookPro6,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookPro6,1 + + MacBookPro6,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookPro6,1 + + MacBookPro6,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookPro6,1 + + MacBookPro6,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro6,1 + + MacBookPro6,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro6,2 + + MacBookPro6,2-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookPro6,2 + + MacBookPro6,2-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookPro6,2 + + MacBookPro6,2-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookPro6,2 + + MacBookPro6,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro6,2 + + MacBookPro7,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro7,1 + + MacBookPro7,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookPro7,1 + + MacBookPro7,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookPro7,1 + + MacBookPro7,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookPro7,1 + + MacBookPro7,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro7,1 + + MacBookPro8,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro8,1 + + MacBookPro8,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookPro8,1 + + MacBookPro8,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookPro8,1 + + MacBookPro8,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookPro8,1 + + MacBookPro8,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro8,1 + + MacBookPro8,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro8,2 + + MacBookPro8,2-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookPro8,2 + + MacBookPro8,2-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookPro8,2 + + MacBookPro8,2-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookPro8,2 + + MacBookPro8,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro8,2 + + MacBookPro8,3-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro8,3 + + MacBookPro8,3-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookPro8,3 + + MacBookPro8,3-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookPro8,3 + + MacBookPro8,3-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookPro8,3 + + MacBookPro8,3-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro8,3 + + MacBookPro9,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro9,1 + + MacBookPro9,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookPro9,1 + + MacBookPro9,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookPro9,1 + + MacBookPro9,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookPro9,1 + + MacBookPro9,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro9,1 + + MacBookPro9,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacBookPro9,2 + + MacBookPro9,2-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacBookPro9,2 + + MacBookPro9,2-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacBookPro9,2 + + MacBookPro9,2-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacBookPro9,2 + + MacBookPro9,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacBookPro9,2 + + MacPro3,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacPro3,1 + + MacPro3,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacPro3,1 + + MacPro3,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacPro3,1 + + MacPro3,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacPro3,1 + + MacPro3,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacPro3,1 + + MacPro4,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacPro4,1 + + MacPro4,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacPro4,1 + + MacPro4,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacPro4,1 + + MacPro4,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacPro4,1 + + MacPro4,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacPro4,1 + + MacPro5,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacPro5,1 + + MacPro5,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacPro5,1 + + MacPro5,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacPro5,1 + + MacPro5,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacPro5,1 + + MacPro5,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacPro5,1 + + MacPro6,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + MacPro6,1 + + MacPro6,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + MacPro6,1 + + MacPro6,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + MacPro6,1 + + MacPro6,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + MacPro6,1 + + MacPro6,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + MacPro6,1 + + Macmini5,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + Macmini5,1 + + Macmini5,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + Macmini5,1 + + Macmini5,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + Macmini5,1 + + Macmini5,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + Macmini5,1 + + Macmini5,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + Macmini5,1 + + Macmini5,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + Macmini5,2 + + Macmini5,2-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + Macmini5,2 + + Macmini5,2-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + Macmini5,2 + + Macmini5,2-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + Macmini5,2 + + Macmini5,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + Macmini5,2 + + Macmini5,3-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + Macmini5,3 + + Macmini5,3-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + Macmini5,3 + + Macmini5,3-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + Macmini5,3 + + Macmini5,3-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + Macmini5,3 + + Macmini5,3-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + Macmini5,3 + + Macmini6,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + Macmini6,1 + + Macmini6,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + Macmini6,1 + + Macmini6,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + Macmini6,1 + + Macmini6,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + Macmini6,1 + + Macmini6,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + Macmini6,1 + + Macmini6,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + Macmini6,2 + + Macmini6,2-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + Macmini6,2 + + Macmini6,2-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + Macmini6,2 + + Macmini6,2-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + Macmini6,2 + + Macmini6,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + Macmini6,2 + + Macmini7,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + Macmini7,1 + + Macmini7,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + Macmini7,1 + + Macmini7,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + Macmini7,1 + + Macmini7,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + Macmini7,1 + + Macmini7,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + Macmini7,1 + + Macmini8,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + Macmini8,1 + + Macmini8,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + Macmini8,1 + + iMac10,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac10,1 + + iMac10,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac10,1 + + iMac10,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac10,1 + + iMac10,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac10,1 + + iMac10,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac10,1 + + iMac11,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac11,1 + + iMac11,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac11,1 + + iMac11,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac11,1 + + iMac11,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac11,1 + + iMac11,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac11,1 + + iMac11,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac11,2 + + iMac11,2-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac11,2 + + iMac11,2-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac11,2 + + iMac11,2-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac11,2 + + iMac11,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac11,2 + + iMac11,3-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac11,3 + + iMac11,3-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac11,3 + + iMac11,3-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac11,3 + + iMac11,3-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac11,3 + + iMac11,3-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac11,3 + + iMac12,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac12,1 + + iMac12,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac12,1 + + iMac12,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac12,1 + + iMac12,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac12,1 + + iMac12,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac12,1 + + iMac12,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac12,2 + + iMac12,2-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac12,2 + + iMac12,2-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac12,2 + + iMac12,2-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac12,2 + + iMac12,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac12,2 + + iMac13,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac13,1 + + iMac13,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac13,1 + + iMac13,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac13,1 + + iMac13,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac13,1 + + iMac13,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac13,1 + + iMac13,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac13,2 + + iMac13,2-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac13,2 + + iMac13,2-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac13,2 + + iMac13,2-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac13,2 + + iMac13,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac13,2 + + iMac14,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac14,1 + + iMac14,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac14,1 + + iMac14,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac14,1 + + iMac14,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac14,1 + + iMac14,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac14,1 + + iMac14,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac14,2 + + iMac14,2-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac14,2 + + iMac14,2-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac14,2 + + iMac14,2-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac14,2 + + iMac14,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac14,2 + + iMac14,3-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac14,3 + + iMac14,3-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac14,3 + + iMac14,3-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac14,3 + + iMac14,3-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac14,3 + + iMac14,3-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac14,3 + + iMac15,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac15,1 + + iMac15,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac15,1 + + iMac15,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac15,1 + + iMac15,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac15,1 + + iMac15,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac15,1 + + iMac16,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac16,1 + + iMac16,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac16,1 + + iMac16,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac16,1 + + iMac16,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac16,1 + + iMac16,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac16,1 + + iMac16,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac16,2 + + iMac16,2-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac16,2 + + iMac16,2-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac16,2 + + iMac16,2-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac16,2 + + iMac16,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac16,2 + + iMac17,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac17,1 + + iMac17,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac17,1 + + iMac18,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac18,1 + + iMac18,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac18,1 + + iMac18,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac18,2 + + iMac18,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac18,2 + + iMac18,3-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac18,3 + + iMac18,3-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac18,3 + + iMac19,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac19,1 + + iMac19,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac19,1 + + iMac4,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac4,1 + + iMac4,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac4,1 + + iMac4,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac4,1 + + iMac4,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac4,1 + + iMac4,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac4,1 + + iMac4,2-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac4,2 + + iMac4,2-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac4,2 + + iMac4,2-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac4,2 + + iMac4,2-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac4,2 + + iMac4,2-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac4,2 + + iMac5,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac5,1 + + iMac5,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac5,1 + + iMac5,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac5,1 + + iMac5,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac5,1 + + iMac5,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac5,1 + + iMac6,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac6,1 + + iMac6,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac6,1 + + iMac6,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac6,1 + + iMac6,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac6,1 + + iMac6,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac6,1 + + iMac7,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac7,1 + + iMac7,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac7,1 + + iMac7,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac7,1 + + iMac7,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac7,1 + + iMac7,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac7,1 + + iMac8,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac8,1 + + iMac8,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac8,1 + + iMac8,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac8,1 + + iMac8,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac8,1 + + iMac8,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac8,1 + + iMac9,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMac9,1 + + iMac9,1-EHCI + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + EH01 + EH02 + + IOProviderClass + AppleUSBEHCIPCI + model + iMac9,1 + + iMac9,1-HUB1 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB1 + locationID + 487587840 + model + iMac9,1 + + iMac9,1-HUB2 + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProbeScore + 5000 + IOProviderClass + AppleUSB20InternalHub + kName + HUB2 + locationID + 437256192 + model + iMac9,1 + + iMac9,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMac9,1 + + iMacPro1,1-ABPC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IOProviderClass + AppleBusPowerController + kName + AppleBusPowerController + model + iMacPro1,1 + + iMacPro1,1-XHC + + CFBundleIdentifier + com.rehabman.driver.USBInjectAll + IOClass + USBInjectAll + IONameMatch + + XHC + XHCI + + IOProviderClass + AppleUSBXHCIPCI + model + iMacPro1,1 + + + NSHumanReadableCopyright + Copyright © 2015 RehabMan. All rights reserved. + OSBundleLibraries + + com.apple.iokit.IOACPIFamily + 1.0d1 + com.apple.iokit.IOPCIFamily + 1.0.0b1 + com.apple.kpi.iokit + 9.0.0 + com.apple.kpi.libkern + 9.0.0 + + OSBundleRequired + Root + Source Code + https://github.com/RehabMan/OS-X-USB-Inject-All + + diff --git a/EFI/OC/Kexts/USBInjectAll.kext/Contents/MacOS/USBInjectAll b/EFI/OC/Kexts/USBInjectAll.kext/Contents/MacOS/USBInjectAll new file mode 100755 index 0000000..edc9229 Binary files /dev/null and b/EFI/OC/Kexts/USBInjectAll.kext/Contents/MacOS/USBInjectAll differ diff --git a/EFI/OC/Kexts/VirtualSMC.kext/Contents/Info.plist b/EFI/OC/Kexts/VirtualSMC.kext/Contents/Info.plist new file mode 100755 index 0000000..79f7ed8 --- /dev/null +++ b/EFI/OC/Kexts/VirtualSMC.kext/Contents/Info.plist @@ -0,0 +1,414 @@ + + + + + BuildMachineOSBuild + 19H512 + CFBundleDevelopmentRegion + en + CFBundleExecutable + VirtualSMC + CFBundleIdentifier + as.vit9696.VirtualSMC + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + VirtualSMC + CFBundlePackageType + KEXT + CFBundleShortVersionString + 1.2.1 + CFBundleSignature + ???? + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 1.2.1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 12B45b + DTPlatformName + macosx + DTPlatformVersion + 11.0 + DTSDKBuild + 20A2408 + DTSDKName + macosx11.0 + DTXcode + 1220 + DTXcodeBuild + 12B45b + IOKitPersonalities + + as.vit9696.VirtualSMC + + CFBundleIdentifier + as.vit9696.VirtualSMC + IOClass + VirtualSMC + IODeviceMemory + + + + address + 768 + length + 32 + + + + + address + 4277141504 + length + 65536 + + + + IOInterruptControllers + + io-apic-0 + + IOInterruptSpecifiers + + + BgAAAAAAAAA= + + + IOMatchCategory + IOACPIPlatformDevice + IOName + SMC + IOProbeScore + 60000 + IOProviderClass + AppleACPIPlatformExpert + Keystore + + Generic + + + attr + + iA== + + comment + Total fan number, this should be put to a plugin + name + + Rk51bQ== + + type + + dWk4IA== + + value + + AA== + + + + attr + + gA== + + comment + CPU plimit + name + + TVNUYw== + + type + + dWk4IA== + + value + + AA== + + + + attr + + gA== + + comment + FAN plimit (supposedly) + name + + TVNUZg== + + type + + dWk4IA== + + value + + AA== + + + + attr + + gA== + + comment + Memory plimit + name + + TVNUbQ== + + type + + dWk4IA== + + value + + AA== + + + + attr + + gA== + + comment + This should be 1 on laptops, and is overriden by sensors + name + + QkFUUA== + + type + + ZmxhZw== + + value + + AA== + + + + attr + + gA== + + comment + Only MacPros have custom illumination controllers + name + + THNOTQ== + + type + + dWk4IA== + + value + + AA== + + + + GenericDesktopV1 + + GenericDesktopV2 + + GenericLaptopV1 + + GenericLaptopV2 + + GenericV1 + + + attr + + gA== + + comment + GPU plimit + name + + TVNUZw== + + type + + dWk4IA== + + value + + AA== + + + + GenericV2 + + + attr + + gA== + + comment + E plimit (???) + name + + TVNUZQ== + + type + + dWk4IA== + + value + + AA== + + + + attr + + gA== + + comment + I plimit (???) + name + + TVNUaQ== + + type + + dWk4IA== + + value + + AA== + + + + attr + + gA== + + comment + J plimit (???) + name + + TVNUag== + + type + + dWk4IA== + + value + + AA== + + + + + ModelInfo + + GenericV1 + + branch + + ajUyAAAAAAA= + + hwname + + c21jLXBpa2V0b24A + + platform + + ajUyAAAAAAA= + + rev + + AXQPAAAE + + revfb + + AXQPAAAE + + revfu + + AXQPAAAE + + + GenericV2 + + branch + + ajUyAAAAAAA= + + hwname + + c21jLWh1cm9ucml2ZXIA + + platform + + ajUyAAAAAAA= + + rev + + AigPAAAH + + revfb + + AigPAAAH + + revfu + + AigPAAAH + + + GenericV3 + + hwname + + c21jLWh1cm9ucml2ZXIA + + platform + + ajUyAAAAAAA= + + + + _STA + 11 + name + + QVBQMDAwMQA= + + + + LSMinimumSystemVersion + 10.6 + NSHumanReadableCopyright + Copyright © 2017 vit9696. All rights reserved. + OSBundleCompatibleVersion + 1.0 + OSBundleLibraries + + as.vit9696.Lilu + 1.2.0 + com.apple.iokit.IOACPIFamily + 1.0.0d1 + com.apple.kpi.bsd + 10.0.0 + com.apple.kpi.dsep + 10.0.0 + com.apple.kpi.iokit + 10.0.0 + com.apple.kpi.libkern + 10.0.0 + com.apple.kpi.mach + 10.0.0 + com.apple.kpi.unsupported + 10.0.0 + + OSBundleRequired + Root + + diff --git a/EFI/OC/Kexts/VirtualSMC.kext/Contents/MacOS/VirtualSMC b/EFI/OC/Kexts/VirtualSMC.kext/Contents/MacOS/VirtualSMC new file mode 100755 index 0000000..fd43ebe Binary files /dev/null and b/EFI/OC/Kexts/VirtualSMC.kext/Contents/MacOS/VirtualSMC differ diff --git a/EFI/OC/Kexts/VirtualSMC.kext/Contents/Resources/VirtualSMCSDK/AppleSmc.h b/EFI/OC/Kexts/VirtualSMC.kext/Contents/Resources/VirtualSMCSDK/AppleSmc.h new file mode 100755 index 0000000..1169052 --- /dev/null +++ b/EFI/OC/Kexts/VirtualSMC.kext/Contents/Resources/VirtualSMCSDK/AppleSmc.h @@ -0,0 +1,437 @@ +/** @file +Copyright (C) 2014 - 2016, Download-Fritz. All rights reserved.
+This program and the accompanying materials are licensed and made available +under the terms and conditions of the BSD License which accompanies this +distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php. + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +#ifndef APPLE_SMC_H +#define APPLE_SMC_H + +// +// SMC uses Big Endian byte order to store keys. +// For some reason AppleSmcIo protocol in UEFI takes little endian keys. +// As this header is used by both UEFI and Kernel VirtualSMC parts, +// we define SMC_MAKE_IDENTIFIER to produce Little Endian keys in UEFI (EFIAPI), +// and Big Endian keys in all other places. +// +// NB: This code assumes Little Endian host byte order, which so far is the +// only supported byte order in UEFI. +// +#ifdef EFIAPI +#define SMC_MAKE_IDENTIFIER(A, B, C, D) \ + ((UINT32)(((UINT32)(A) << 24U) | ((UINT32)(B) << 16U) | ((UINT32)(C) << 8U) | (UINT32)(D))) +#else +#define SMC_MAKE_IDENTIFIER(A, B, C, D) \ + ((UINT32)(((UINT32)(D) << 24U) | ((UINT32)(C) << 16U) | ((UINT32)(B) << 8U) | (UINT32)(A))) +#endif + +// PMIO + +#define SMC_PORT_BASE 0x0300 +#define SMC_PORT_LENGTH 0x0020 + +#define SMC_PORT_OFFSET_DATA 0x00 +#define SMC_PORT_OFFSET_COMMAND 0x04 +#define SMC_PORT_OFFSET_STATUS SMC_PORT_OFFSET_COMMAND +#define SMC_PORT_OFFSET_RESULT 0x1E +#define SMC_PORT_OFFSET_EVENT 0x1F + +// MMIO + +#define SMC_MMIO_BASE_ADDRESS 0xFEF00000 +#define SMC_MMIO_LENGTH 0x00010000 + +#define SMC_MMIO_DATA_VARIABLE 0x00 +#define SMC_MMIO_DATA_FIXED 0x78 + +// MMIO offsets + +#define SMC_MMIO_OFFSET_KEY 0x00 +#define SMC_MMIO_OFFSET_KEY_TYPE SMC_MMIO_OFFSET_KEY +#define SMC_MMIO_OFFSET_SMC_MODE SMC_MMIO_OFFSET_KEY +#define SMC_MMIO_OFFSET_DATA_SIZE 0x05 +#define SMC_MMIO_OFFSET_KEY_ATTRIBUTES 0x06 +#define SMC_MMIO_OFFSET_COMMAND 0x07 +#define SMC_MMIO_OFFSET_RESULT SMC_MMIO_OFFSET_COMMAND +#define SMC_MMIO_OFFSET_LOG 0x08 + +// Read addresses + +#define SMC_MMIO_READ_KEY \ + (SMC_MMIO_DATA_VARIABLE + SMC_MMIO_OFFSET_KEY) + +#define SMC_MMIO_READ_KEY_TYPE \ + (SMC_MMIO_DATA_VARIABLE + SMC_MMIO_OFFSET_KEY_TYPE) + +#define SMC_MMIO_READ_DATA_SIZE \ + (SMC_MMIO_DATA_VARIABLE + SMC_MMIO_OFFSET_DATA_SIZE) + +#define SMC_MMIO_READ_KEY_ATTRIBUTES \ + (SMC_MMIO_DATA_VARIABLE + SMC_MMIO_OFFSET_KEY_ATTRIBUTES) + +#define SMC_MMIO_READ_LOG \ + (SMC_MMIO_DATA_FIXED + SMC_MMIO_OFFSET_LOG) + +#define SMC_MMIO_READ_RESULT \ + (SMC_MMIO_DATA_FIXED + SMC_MMIO_OFFSET_RESULT) + +#define SMC_MMIO_READ_EVENT_STATUS 0x4000 +#define SMC_MMIO_READ_UNKNOWN1 0x4004 +#define SMC_MMIO_READ_KEY_STATUS 0x4005 + +// Write addresses + +#define SMC_MMIO_WRITE_MODE \ + (SMC_MMIO_DATA_VARIABLE + SMC_MMIO_OFFSET_SMC_MODE) + +#define SMC_MMIO_WRITE_KEY \ + (SMC_MMIO_DATA_FIXED + SMC_MMIO_OFFSET_KEY) + +#define SMC_MMIO_WRITE_INDEX \ + (SMC_MMIO_DATA_FIXED + SMC_MMIO_OFFSET_KEY_TYPE) + +#define SMC_MMIO_WRITE_DATA_SIZE \ + (SMC_MMIO_DATA_FIXED + SMC_MMIO_OFFSET_DATA_SIZE) + +#define SMC_MMIO_WRITE_KEY_ATTRIBUTES \ + (SMC_MMIO_DATA_FIXED + SMC_MMIO_OFFSET_KEY_ATTRIBUTES) + +#define SMC_MMIO_WRITE_COMMAND \ + (SMC_MMIO_DATA_FIXED + SMC_MMIO_OFFSET_COMMAND) + +typedef UINT32 SMC_ADDRESS; + +// Modes + +#define SMC_MODE_APPCODE 'A' +#define SMC_MODE_UPDATE 'U' +#define SMC_MODE_BASE 'B' + +// SMC_MODE +typedef CHAR8 *SMC_MODE; + +enum { + SmcResetModeMaster = 0, + SmcResetModeAppCode = 1, + SmcResetModeUpdate = 2, + SmcResetModeBase = 3 +}; + +typedef UINT8 SMC_RESET_MODE; + +enum { + SmcFlashTypeAppCode = 1, + SmcFlashTypeBase = 2, + SmcFlashTypeUpdate = 3, + SmcFlashTypeEpm = 4 +}; + +typedef UINT8 SMC_FLASH_TYPE; + +enum { + SmcFlashModeAppCode = SmcResetModeMaster, + SmcFlashModeUpdate = SmcResetModeBase, + SmcFlashModeBase = SmcResetModeUpdate, + SmcFlashModeEpm = SmcResetModeMaster +}; + +typedef UINT8 SMC_FLASH_MODE; + +// Commands + +enum { + SmcCmdReadValue = 0x10, + SmcCmdWriteValue = 0x11, + SmcCmdGetKeyFromIndex = 0x12, + SmcCmdGetKeyInfo = 0x13, + SmcCmdReset = 0x14, + SmcCmdWriteValueAtIndex = 0x15, + SmcCmdReadValueAtIndex = 0x16, + SmcCmdGetSramAddress = 0x17, + SmcCmdReadPKey = 0x20, // response based on payload submitted + SmcCmdUnknown1 = 0x77, + SmcCmdFlashWrite = 0xF1, + SmcCmdFlashAuth = 0xF2, + SmcCmdFlashType = 0xF4, + SmcCmdFlashWriteMoreData = 0xF5, // write more data than available at once + SmcCmdFlashAuthMoreData = 0xF6 // auth more data than available at once +}; + +typedef UINT8 SMC_COMMAND; + +// Reports + +#define SMC_STATUS_AWAITING_DATA BIT0 ///< Ready to read data. +#define SMC_STATUS_IB_CLOSED BIT1 /// A write is pending. +#define SMC_STATUS_BUSY BIT2 ///< Busy processing a command. +#define SMC_STATUS_GOT_COMMAND BIT3 ///< The last input was a command. +#define SMC_STATUS_UKN_0x16 BIT4 +#define SMC_STATUS_KEY_DONE BIT5 +#define SMC_STATUS_READY BIT6 // Ready to work +#define SMC_STATUS_UKN_0x80 BIT7 // error + +// SMC_STATUS +typedef UINT8 SMC_STATUS; + +enum { + SmcSuccess = 0, + SmcError = 1, + + SmcCommCollision = 128, + SmcSpuriousData = 129, + SmcBadCommand = 130, + SmcBadParameter = 131, + SmcNotFound = 132, + SmcNotReadable = 133, + SmcNotWritable = 134, + SmcKeySizeMismatch = 135, + SmcFramingError = 136, + SmcBadArgumentError = 137, + + SmcTimeoutError = 183, + SmcKeyIndexRangeError = 184, + + SmcBadFunctionParameter = 192, + SmcEventBufferWrongOrder = 196, + SmcEventBufferReadError = 197, + SmcDeviceAccessError = 199, + SmcUnsupportedFeature = 203, + SmcSmbAccessError = 204, + + SmcInvalidSize = 206 +}; + +#define SMC_ERROR(a) (((UINTN)(a)) > 0) + +#define EFI_STATUS_FROM_SMC_RESULT(x) \ + ((((UINTN)(x)) == SmcSuccess) ? EFI_SUCCESS : EFIERR ((UINTN)(x))) + +#define EFI_SMC_SUCCESS SmcSuccess +#define EFI_SMC_ERROR EFIERR (SmcError) + +#define EFI_SMC_COMM_COLLISION EFIERR (SmcCommCollision) +#define EFI_SMC_SPURIOUS_DATA EFIERR (SmcSpuriousData) +#define EFI_SMC_BAD_COMMAND EFIERR (SmcBadCommand) +#define EFI_SMC_BAD_PARAMETER EFIERR (SmcBadParameter) +#define EFI_SMC_NOT_FOUND EFIERR (SmcNotFound) +#define EFI_SMC_NOT_READABLE EFIERR (SmcNotReadable) +#define EFI_SMC_NOT_WRITABLE EFIERR (SmcNotWritable) +#define EFI_SMC_KEY_MISMATCH EFIERR (SmcKeySizeMismatch) +#define EFI_SMC_FRAMING_ERROR EFIERR (SmcFramingError) +#define EFI_SMC_BAD_ARGUMENT_ERROR EFIERR (SmcBadArgumentError) + +#define EFI_SMC_TIMEOUT_ERROR EFIERR (SmcTimeoutError) +#define EFI_SMC_KEY_INDEX_RANGE_ERROR EFIERR (SmcKeyIndexRangeError) + +#define EFI_SMC_BAD_FUNCTION_PARAMETER EFIERR (SmcBadFunctionParameter) +#define EFI_SMC_EVENT_BUFFER_WRONG_ORDER EFIERR (SmcEventBufferWrongOrder) +#define EFI_SMC_EVENT_BUFFER_READ_ERROR EFIERR (SmcEventBufferReadError) +#define EFI_SMC_DEVICE_ACCESS_ERROR EFIERR (SmcDeviceAccessError) +#define EFI_SMC_UNSUPPORTED_FEATURE EFIERR (SmcUnsupportedFeature) +#define EFI_SMB_ACCESS_ERROR EFIERR (SmcSmbAccessError) + +#define EFI_SMC_INVALID_SIZE EFIERR (SmcInvalidSize) + +// SMC_RESULT +typedef UINT8 SMC_RESULT; + +// Key Types + +#define SMC_MAKE_KEY_TYPE(A, B, C, D) SMC_MAKE_IDENTIFIER ((A), (B), (C), (D)) + +enum { + SmcKeyTypeCh8s = SMC_MAKE_KEY_TYPE ('c', 'h', '8', '*'), + SmcKeyTypeChar = SMC_MAKE_KEY_TYPE ('c', 'h', 'a', 'r'), + SmcKeyTypeFloat = SMC_MAKE_KEY_TYPE ('f', 'l', 't', ' '), + SmcKeyTypeFlag = SMC_MAKE_KEY_TYPE ('f', 'l', 'a', 'g'), + SmcKeyTypeFp1f = SMC_MAKE_KEY_TYPE ('f', 'p', '1', 'f'), + SmcKeyTypeFp2e = SMC_MAKE_KEY_TYPE ('f', 'p', '2', 'e'), + SmcKeyTypeFp3d = SMC_MAKE_KEY_TYPE ('f', 'p', '3', 'd'), + SmcKeyTypeFp4c = SMC_MAKE_KEY_TYPE ('f', 'p', '4', 'c'), + SmcKeyTypeFp5b = SMC_MAKE_KEY_TYPE ('f', 'p', '5', 'b'), + SmcKeyTypeFp6a = SMC_MAKE_KEY_TYPE ('f', 'p', '6', 'a'), + SmcKeyTypeFp79 = SMC_MAKE_KEY_TYPE ('f', 'p', '7', '9'), + SmcKeyTypeFp88 = SMC_MAKE_KEY_TYPE ('f', 'p', '8', '8'), + SmcKeyTypeFp97 = SMC_MAKE_KEY_TYPE ('f', 'p', '9', '7'), + SmcKeyTypeFpa6 = SMC_MAKE_KEY_TYPE ('f', 'p', 'a', '6'), + SmcKeyTypeFpb5 = SMC_MAKE_KEY_TYPE ('f', 'p', 'b', '5'), + SmcKeyTypeFpc4 = SMC_MAKE_KEY_TYPE ('f', 'p', 'c', '4'), + SmcKeyTypeFpd3 = SMC_MAKE_KEY_TYPE ('f', 'p', 'd', '3'), + SmcKeyTypeFpe2 = SMC_MAKE_KEY_TYPE ('f', 'p', 'e', '2'), + SmcKeyTypeFpf1 = SMC_MAKE_KEY_TYPE ('f', 'p', 'f', '1'), + SmcKeyTypeHex = SMC_MAKE_KEY_TYPE ('h', 'e', 'x', '_'), + SmcKeyTypeIoft = SMC_MAKE_KEY_TYPE ('i', 'o', 'f', 't'), + SmcKeyTypeSint8 = SMC_MAKE_KEY_TYPE ('s', 'i', '8', ' '), + SmcKeyTypeSint16 = SMC_MAKE_KEY_TYPE ('s', 'i', '1', '6'), + SmcKeyTypeSint32 = SMC_MAKE_KEY_TYPE ('s', 'i', '3', '2'), + SmcKeyTypeSint64 = SMC_MAKE_KEY_TYPE ('s', 'i', '6', '4'), + SmcKeyTypeSp1e = SMC_MAKE_KEY_TYPE ('s', 'p', '1', 'e'), + SmcKeyTypeSp2d = SMC_MAKE_KEY_TYPE ('s', 'p', '2', 'd'), + SmcKeyTypeSp3c = SMC_MAKE_KEY_TYPE ('s', 'p', '3', 'c'), + SmcKeyTypeSp4b = SMC_MAKE_KEY_TYPE ('s', 'p', '4', 'b'), + SmcKeyTypeSp5a = SMC_MAKE_KEY_TYPE ('s', 'p', '5', 'a'), + SmcKeyTypeSp69 = SMC_MAKE_KEY_TYPE ('s', 'p', '6', '9'), + SmcKeyTypeSp78 = SMC_MAKE_KEY_TYPE ('s', 'p', '7', '8'), + SmcKeyTypeSp87 = SMC_MAKE_KEY_TYPE ('s', 'p', '8', '7'), + SmcKeyTypeSp96 = SMC_MAKE_KEY_TYPE ('s', 'p', '9', '6'), + SmcKeyTypeSpa5 = SMC_MAKE_KEY_TYPE ('s', 'p', 'a', '5'), + SmcKeyTypeSpb4 = SMC_MAKE_KEY_TYPE ('s', 'p', 'b', '4'), + SmcKeyTypeSpc3 = SMC_MAKE_KEY_TYPE ('s', 'p', 'c', '3'), + SmcKeyTypeSpd2 = SMC_MAKE_KEY_TYPE ('s', 'p', 'd', '2'), + SmcKeyTypeSpe1 = SMC_MAKE_KEY_TYPE ('s', 'p', 'e', '1'), + SmcKeyTypeSpf0 = SMC_MAKE_KEY_TYPE ('s', 'p', 'f', '0'), + SmcKeyTypeUint8z = SMC_MAKE_KEY_TYPE ('u', 'i', '8', '\0'), + SmcKeyTypeUint8 = SMC_MAKE_KEY_TYPE ('u', 'i', '8', ' '), + SmcKeyTypeUint8s = SMC_MAKE_KEY_TYPE ('u', 'i', '8', '*'), + SmcKeyTypeUint16 = SMC_MAKE_KEY_TYPE ('u', 'i', '1', '6'), + SmcKeyTypeUint32 = SMC_MAKE_KEY_TYPE ('u', 'i', '3', '2'), + SmcKeyTypeUint64 = SMC_MAKE_KEY_TYPE ('u', 'i', '6', '4'), + SmcKeyTypeAla = SMC_MAKE_KEY_TYPE ('{', 'a', 'l', 'a'), + SmcKeyTypeAlc = SMC_MAKE_KEY_TYPE ('{', 'a', 'l', 'c'), + SmcKeyTypeAli = SMC_MAKE_KEY_TYPE ('{', 'a', 'l', 'i'), + SmcKeyTypeAlp = SMC_MAKE_KEY_TYPE ('{', 'a', 'l', 'p'), + SmcKeyTypeAlr = SMC_MAKE_KEY_TYPE ('{', 'a', 'l', 'r'), + SmcKeyTypeAlt = SMC_MAKE_KEY_TYPE ('{', 'a', 'l', 't'), + SmcKeyTypeAlv = SMC_MAKE_KEY_TYPE ('{', 'a', 'l', 'v'), + SmcKeyTypeClc = SMC_MAKE_KEY_TYPE ('{', 'c', 'l', 'c'), + SmcKeyTypeClh = SMC_MAKE_KEY_TYPE ('{', 'c', 'l', 'h'), + SmcKeyTypeFds = SMC_MAKE_KEY_TYPE ('{', 'f', 'd', 's'), + SmcKeyTypeHdi = SMC_MAKE_KEY_TYPE ('{', 'h', 'd', 'i'), + SmcKeyTypeJst = SMC_MAKE_KEY_TYPE ('{', 'j', 's', 't'), + SmcKeyTypeLia = SMC_MAKE_KEY_TYPE ('{', 'l', 'i', 'a'), + SmcKeyTypeLic = SMC_MAKE_KEY_TYPE ('{', 'l', 'i', 'c'), + SmcKeyTypeLim = SMC_MAKE_KEY_TYPE ('{', 'l', 'i', 'm'), + SmcKeyTypeLkb = SMC_MAKE_KEY_TYPE ('{', 'l', 'k', 'b'), + SmcKeyTypeLks = SMC_MAKE_KEY_TYPE ('{', 'l', 'k', 's'), + SmcKeyTypeLsc = SMC_MAKE_KEY_TYPE ('{', 'l', 's', 'c'), + SmcKeyTypeLsd = SMC_MAKE_KEY_TYPE ('{', 'l', 's', 'd'), + SmcKeyTypeLsf = SMC_MAKE_KEY_TYPE ('{', 'l', 's', 'f'), + SmcKeyTypeLso = SMC_MAKE_KEY_TYPE ('{', 'l', 's', 'o'), + SmcKeyTypeMss = SMC_MAKE_KEY_TYPE ('{', 'm', 's', 's'), + SmcKeyTypePwm = SMC_MAKE_KEY_TYPE ('{', 'p', 'w', 'm'), + SmcKeyTypeRev = SMC_MAKE_KEY_TYPE ('{', 'r', 'e', 'v') +}; + +// SMC_KEY_TYPE +typedef UINT32 SMC_KEY_TYPE; + +// Key Attributes + +#define SMC_KEY_ATTRIBUTE_PRIVATE_WRITE BIT0 +#define SMC_KEY_ATTRIBUTE_PRIVATE_READ BIT1 +#define SMC_KEY_ATTRIBUTE_ATOMIC BIT2 +#define SMC_KEY_ATTRIBUTE_CONST BIT3 +#define SMC_KEY_ATTRIBUTE_FUNCTION BIT4 +#define SMC_KEY_ATTRIBUTE_UKN_0x20 BIT5 +#define SMC_KEY_ATTRIBUTE_WRITE BIT6 +#define SMC_KEY_ATTRIBUTE_READ BIT7 + +// SMC_KEY_ATTRIBUTES +typedef UINT8 SMC_KEY_ATTRIBUTES; + + +// Data + +#define SMC_MAX_DATA_SIZE (SMC_MMIO_DATA_FIXED - SMC_MMIO_DATA_VARIABLE) + +typedef UINT8 SMC_DATA; +typedef UINT8 SMC_DATA_SIZE; + +// Keys + +// SMC_KEY_IS_VALID_CHAR +#define SMC_KEY_IS_VALID_CHAR(x) (((x) >= 0x20) && ((x) <= 0x7E)) + +// SMC_MAKE_KEY +#define SMC_MAKE_KEY(A, B, C, D) SMC_MAKE_IDENTIFIER ((A), (B), (C), (D)) + +#define SMC_KEY_NUM SMC_MAKE_KEY ('$', 'N', 'u', 'm') +#define SMC_KEY_ADR SMC_MAKE_KEY ('$', 'A', 'd', 'r') +#define SMC_KEY_LDKN SMC_MAKE_KEY ('L', 'D', 'K', 'N') +#define SMC_KEY_HBKP SMC_MAKE_KEY ('H', 'B', 'K', 'P') +#define SMC_KEY_KEY SMC_MAKE_KEY ('#', 'K', 'E', 'Y') +#define SMC_KEY_RMde SMC_MAKE_KEY ('R', 'M', 'd', 'e') +#define SMC_KEY_BRSC SMC_MAKE_KEY ('B', 'R', 'S', 'C') +#define SMC_KEY_MSLD SMC_MAKE_KEY ('M', 'S', 'L', 'D') +#define SMC_KEY_BATP SMC_MAKE_KEY ('B', 'A', 'T', 'P') +#define SMC_KEY_BBIN SMC_MAKE_KEY ('B', 'B', 'I', 'N') + +typedef UINT32 SMC_KEY; +typedef UINT32 SMC_KEY_INDEX; + +typedef UINT8 SMC_DEVICE_INDEX; + +// Flash data + +// SMC_FLASH_SIZE_MAX +#define SMC_FLASH_SIZE_MAX 0x0800 + +// SMC_FLASH_SIZE +typedef UINT16 SMC_FLASH_SIZE; + +// Events + +enum { + SmcEventALSChange = 0x2A, + SmcEventShutdownImminent = 0x40, + SmcEventBridgeOSPanic = 0x41, + SmcEventLogMessage = 0x4C, + SmcEventKeyDone = 0x4B, + SmcEventPThermalLevelChanged = 0x54, + SmcEventCallPlatformFunction = 0x55, + SmcEventSMSDrop = 0x60, + SmcEventUnknown6A = 0x6A, // Bug?? + SmcEventSMSOrientation = 0x69, + SmcEventSMSShock = 0x6F, + SmcEventSystemStateNotify = 0x70, + SmcEventPowerStateNotify = 0x71, + SmcEventHidEventNotify = 0x72, + SmcEventPLimitChange = 0x80, + SmcEventPCIeReady = 0x83, // Not certain +}; + +// SmcEventSystemStateNotify subtypes, not always certain +// Mostly from bridgeOS kernelcache and ramrod. +// Check SMCRegisterForSubTypeNotification in libSMC.dylib. +enum { + SmcSystemStateNotifyMacOsPanicCause = 4, // Name unclear + SmcSystemStateNotifyPrepareForS0 = 6, + SmcSystemStateNotifyMacOsPanicDone = 10, + SmcSystemStateNotifyRestart = 15, + SmcSystemStateNotifyMacEfiFirmwareUpdated = 16, + SmcSystemStateNotifyQuiesceDevices = 17, + SmcSystemStateNotifyResumeDevices = 18, + SmcSystemStateNotifyGPUPanelPowerOn = 19, +}; + +// SmcSystemStateNotifyMacOsPanicCause values, received after PanicDone +enum { + SmcSystemStateNotifyPanicUnknown = 0, + SmcSystemStateNotifyPanicMacOSPanic = 1, + SmcSystemStateNotifyPanicMacOSWatchdog = 2, + SmcSystemStateNotifyPanicX86StraightS5Shutdown = 3, + SmcSystemStateNotifyPanicX86GlobalReset = 4, + SmcSystemStateNotifyPanicX86CpuCATERR = 5, + SmcSystemStateNotifyPanicACPIPanic = 6, +}; + +// SMC_EVENT_CODE +typedef UINT8 SMC_EVENT_CODE; + +// Log + +#define SMC_MAX_LOG_SIZE 0x80 + +typedef UINT8 SMC_LOG; +typedef UINT8 SMC_LOG_SIZE; + +// Hard drive encryption + +#define SMC_HBKP_SIZE 0x20 + +#endif // APPLE_SMC_H diff --git a/EFI/OC/Kexts/VirtualSMC.kext/Contents/Resources/VirtualSMCSDK/AppleSmcBridge.hpp b/EFI/OC/Kexts/VirtualSMC.kext/Contents/Resources/VirtualSMCSDK/AppleSmcBridge.hpp new file mode 100755 index 0000000..4155450 --- /dev/null +++ b/EFI/OC/Kexts/VirtualSMC.kext/Contents/Resources/VirtualSMCSDK/AppleSmcBridge.hpp @@ -0,0 +1,31 @@ +// +// AppleSmcBridge.hpp +// AppleSmcBridge +// +// Copyright © 2017 vit9696. All rights reserved. +// + +#ifndef AppleSmcBridge_hpp +#define AppleSmcBridge_hpp + +#include + +using CHAR8 = char; +using UINT8 = uint8_t; +using UINT16 = uint16_t; +using UINT32 = uint32_t; + +static constexpr uint8_t BIT0 = 0b00000001; +static constexpr uint8_t BIT1 = 0b00000010; +static constexpr uint8_t BIT2 = 0b00000100; +static constexpr uint8_t BIT3 = 0b00001000; +static constexpr uint8_t BIT4 = 0b00010000; +static constexpr uint8_t BIT5 = 0b00100000; +static constexpr uint8_t BIT6 = 0b01000000; +static constexpr uint8_t BIT7 = 0b10000000; + +extern "C" { + #include "AppleSmc.h" +} + +#endif /* AppleSmcBridge_hpp */ diff --git a/EFI/OC/Kexts/VirtualSMC.kext/Contents/Resources/VirtualSMCSDK/kern_keyvalue.hpp b/EFI/OC/Kexts/VirtualSMC.kext/Contents/Resources/VirtualSMCSDK/kern_keyvalue.hpp new file mode 100755 index 0000000..d799793 --- /dev/null +++ b/EFI/OC/Kexts/VirtualSMC.kext/Contents/Resources/VirtualSMCSDK/kern_keyvalue.hpp @@ -0,0 +1,125 @@ +// +// kern_keyvalue.hpp +// VirtualSMC +// +// Copyright © 2017 vit9696. All rights reserved. +// + +#ifndef kern_keyvalue_hpp +#define kern_keyvalue_hpp + +#include +#include +#include + +struct VirtualSMCKeyValue { + /** + * Key name + */ + SMC_KEY key; + + /** + * Key value + */ + _Atomic(VirtualSMCValue *) value = ATOMIC_VAR_INIT(nullptr); + + /** + * Original value + */ + _Atomic(VirtualSMCValue *) backup = nullptr; + + /** + * Should key value pair be serialisable + * + * @param confidential confidential serialisation stores are allowed + * + * @return true if should be saved + */ + bool serializable(bool confidential) const; + + /** + * Get serialized size (normally key, size, key data) + * + * @return size in bytes + */ + size_t serializedSize() const; + + /** + * Write serialized data to the buffer + * + * @param dst serialization buffer reference of at least serializedSize() + */ + void serialize(uint8_t *&dst) const; + + /** + * Read serialized data + * + * @param src serialization buffer reference (increased) + * @param size serialization buffer size (decreased) + * @param name read key name + * @param out read key data (must be preallocated) + * @param outsz key data size + * + * @return true on succesful read + */ + static bool deserialize(const uint8_t *&src, uint32_t &size, SMC_KEY &name, SMC_DATA *out, SMC_DATA_SIZE &outsz); + + /** + * Create key/value pair for storage + * + * @param k key name + * @param v key value + * + * @return key/value pair + */ + static VirtualSMCKeyValue create(SMC_KEY k, VirtualSMCValue *v) { + VirtualSMCKeyValue kv {k}; + atomic_init(&kv.value, v); + atomic_init(&kv.backup, nullptr); + return kv; + } + + /** + * Key/value deleter responsible for freeing value dynamic memory + * + * @param kv key/value pair + */ + static void deleter(VirtualSMCKeyValue &kv) { + // This is just an old compiler crash workaround, no need for atomicity here! + auto v = atomic_load_explicit(&kv.value, memory_order_relaxed); + auto b = atomic_load_explicit(&kv.backup, memory_order_relaxed); + if (v) VirtualSMCValue::deleter(v); + if (b) VirtualSMCValue::deleter(b); + } + + /** + * Key comparator for sorting + * + * @param a first key + * @param b second key + * + * @return like qsort (<0 if a goes before b) + */ + static int compare(const SMC_KEY a, const SMC_KEY b) { + if (a == b) + return 0; + else if (OSSwapInt32(a) < OSSwapInt32(b)) + return -1; + return 1; + } + + /** + * Key value comparator for sorting + * + * @param a opaque k/v pointer + * @param b opaque k/v pointer + * + * @return like qsort (<0 if a goes before b) + */ + static int compare(const void *a, const void *b) { + return compare(static_cast(a)->key, static_cast(b)->key); + } +}; + + +#endif /* kern_keyvalue_hpp */ diff --git a/EFI/OC/Kexts/VirtualSMC.kext/Contents/Resources/VirtualSMCSDK/kern_smcinfo.hpp b/EFI/OC/Kexts/VirtualSMC.kext/Contents/Resources/VirtualSMCSDK/kern_smcinfo.hpp new file mode 100755 index 0000000..65960a5 --- /dev/null +++ b/EFI/OC/Kexts/VirtualSMC.kext/Contents/Resources/VirtualSMCSDK/kern_smcinfo.hpp @@ -0,0 +1,256 @@ +// +// kern_smcinfo.hpp +// VirtualSMC +// +// Copyright © 2017 vit9696. All rights reserved. +// + +#ifndef kern_smcinfo_h +#define kern_smcinfo_h + +#include + +#include + +class SMCInfo { + /** + * Device-specific reproducible random state + */ + uint64_t generatorState {}; + +public: + + /** + * Size in bytes for SmcKeyTypeRev keys + */ + static constexpr SMC_DATA_SIZE RevisionSize = 6; + + /** + * Size in bytes for branch keys (usually ch8*) + */ + static constexpr SMC_DATA_SIZE BranchSize = 8; + + /** + * Size in bytes for hardware model name + */ + static constexpr SMC_DATA_SIZE ModelSize = 64; + + /** + * Size in bytes for MAC value + */ + static constexpr SMC_DATA_SIZE MacSize = 6; + + /** + * Size in bytes for Serial value + */ + static constexpr SMC_DATA_SIZE SerialSize = 16; + + /** + * Size in bytes for Motherboard Serial value + */ + static constexpr SMC_DATA_SIZE MotherboardSerialSize = 17; + + /** + * Device generation: + * - V1 is Big Endian Hitachi + * - V2 is Little Endian ARM + * - Unspecified is used for autodetection code + */ + enum class Generation { + Unspecified = 0, + V1 = 1, + V2 = 2, + V3 = 3 + }; + + /** + * Device memory layout information + */ + struct Memory { + mach_vm_address_t start; + mach_vm_size_t size; + vm_prot_t prot; + }; + + /** + * Buffers describing device version information + */ + enum class Buffer { + RevMain, + RevFlasherBase, + RevFlasherUpdate, + Branch, + Platform, + HardwareModel, + MacAddress, + Serial, + MotherboardSerial + }; + + /** + * Corresponds to REV key contents + */ + SMC_DATA main[RevisionSize] {}; + + /** + * Corresponds to RVBF key contents + */ + SMC_DATA flasherBase[RevisionSize] {}; + + /** + * Corresponds to RVUF key contents + */ + SMC_DATA flasherUpdate[RevisionSize] {}; + + /** + * Corresponds to RBr key contents + */ + SMC_DATA branch[BranchSize] {}; + + /** + * Corresponds to RPlt key contents + */ + SMC_DATA platform[BranchSize] {}; + + /** + * Corresponds to SMC hardware model (aka compatible key) + */ + SMC_DATA hardwareModel[ModelSize] {}; + + /** + * Corresponds to RMAC key contents + */ + SMC_DATA macAddress[MacSize] {}; + + /** + * Corresponds to RSSN key contents + */ + SMC_DATA serial[SerialSize] {}; + + /** + * Corresponds to RSSN key contents + */ + SMC_DATA motherboardSerial[MotherboardSerialSize] {}; + + /** + * Get device generation based on obtained buffers + * + * @return device generation + */ + Generation getGeneration() const { + if (main[0] == 1) + return Generation::V1; + else if (main[0] == 2) + return Generation::V2; + else if (main[0] == 3 || main[0] == 0) + return Generation::V3; + DBGLOG("smcinfo", "invalid generation %X, defaulting to V2", main[0]); + return Generation::V2; + } + + /** + * Initialise reproducible pseudo-random number generator with device info + */ + void generatorSeed() { + union { + uint8_t arr[8]; + uint64_t raw; + } seed; + + seed.arr[0] = main[0]; + seed.arr[1] = main[1]; + seed.arr[2] = main[3]; + seed.arr[3] = main[5]; + seed.arr[4] = branch[0]; + seed.arr[5] = branch[1]; + seed.arr[6] = branch[2]; + seed.arr[7] = branch[4]; + + generatorState = seed.raw ^ 0x106689D45497FDB5; + } + + /** + * Get next reproducible pseudo-random number based on device info + * generatorSeed must be called before using this function + * + * @return pseudo-random number + */ + uint64_t generatorRand() { + uint64_t x = generatorState; + x ^= x >> 12; // a + x ^= x << 25; // b + x ^= x >> 27; // c + generatorState = x; + return x * 0x2545F4914F6CDD1D; + } + + /** + * Get device information buffer + * + * @param id buffer id + * + * @return pointer to the buffer + */ + SMC_DATA *getBuffer(Buffer id) { + switch (id) { + case Buffer::RevMain: + return main; + case Buffer::RevFlasherBase: + return flasherBase; + case Buffer::RevFlasherUpdate: + return flasherUpdate; + case Buffer::Branch: + return branch; + case Buffer::Platform: + return platform; + case Buffer::HardwareModel: + return hardwareModel; + case Buffer::MacAddress: + return macAddress; + case Buffer::Serial: + return serial; + case Buffer::MotherboardSerial: + return motherboardSerial; + } + } + + /** + * Get device information buffer size + * + * @param id buffer id + * + * @return buffer size + */ + SMC_DATA_SIZE getBufferSize(Buffer id) { + switch (id) { + case Buffer::RevMain: + case Buffer::RevFlasherBase: + case Buffer::RevFlasherUpdate: + return RevisionSize; + case Buffer::Branch: + case Buffer::Platform: + return BranchSize; + case Buffer::HardwareModel: + return ModelSize; + case Buffer::MacAddress: + return MacSize; + case Buffer::Serial: + return SerialSize; + case Buffer::MotherboardSerial: + return MotherboardSerialSize; + } + } + + /** + * Check if the necessary buffer information was supplied previously + * + * @return true if version info is ok + */ + bool isValid() const { + // Note, we do not check mac/serial validity, as they are optional! + // Everything but platform was also removed by T2! + return platform[0] && hardwareModel[0]; + } +}; + +#endif /* kern_smcinfo_h */ diff --git a/EFI/OC/Kexts/VirtualSMC.kext/Contents/Resources/VirtualSMCSDK/kern_value.hpp b/EFI/OC/Kexts/VirtualSMC.kext/Contents/Resources/VirtualSMCSDK/kern_value.hpp new file mode 100755 index 0000000..666a81f --- /dev/null +++ b/EFI/OC/Kexts/VirtualSMC.kext/Contents/Resources/VirtualSMCSDK/kern_value.hpp @@ -0,0 +1,149 @@ +// +// kern_keyvalue.hpp +// VirtualSMC +// +// Copyright © 2018 vit9696. All rights reserved. +// + +#ifndef kern_value_hpp +#define kern_value_hpp + +#include +#include + +#include + +/** + * Serialization level determining external value storage necessity + */ +enum class EXPORT SerializeLevel { + None, + Normal, + Confidential, + Default = Confidential +}; + +class VirtualSMCKeystore; +class VirtualSMCKeyValue; + +class EXPORT VirtualSMCValue { + friend VirtualSMCKeystore; + friend VirtualSMCKeyValue; +protected: + + /** + * Value contents retrieved by other protocols + */ + SMC_DATA data[SMC_MAX_DATA_SIZE] {}; + + /** + * Actual value contents size (could be less than SMC_MAX_DATA_SIZE) + */ + SMC_DATA_SIZE size {}; + + /** + * One of the enum types defined in AppleSmc.h specifying value type + */ + SMC_KEY_TYPE type {}; + + /** + * Bitmask of key attributes defined in AppleSmc.h defining value abilities + */ + SMC_KEY_ATTRIBUTES attr {}; + + /** + * Serialization level defining the necessity to serialize values on power events + */ + SerializeLevel serializeLevel {SerializeLevel::None}; + + /** + * On read access, update the data if needed, and perform custom access control. + * For base value, always allow the access if keystore allowed it. + * + * @return SmcSuccess if allowed + */ + virtual SMC_RESULT readAccess() { + return SmcSuccess; + } + + /** + * On write access, update the data if needed, and perform custom access control. + * For base value, always allow the access if keystore allowed it. + * + * @return SmcSuccess if allowed + */ + virtual SMC_RESULT writeAccess() { + return SmcSuccess; + } + +public: + /** + * Initialises a value with existing data. + * + * @param data Initial data, must be at least size bytes + * @param size Amount of data bytes used, at most SMC_MAX_DATA_SIZE + * @param type Value type + * @param attr Value attributes + * @param level Serialization necessity + * + * @return true on success + */ + EXPORT bool init(const SMC_DATA *data, SMC_DATA_SIZE size, SMC_KEY_TYPE type, SMC_KEY_ATTRIBUTES attr, SerializeLevel level = SerializeLevel::None); + + /** + * Initialises a value with an OSDictionary. + * Dictionary keys are described in VirtualKeystore::merge(const OSArray *) method. + * + * @param dict An OSDictionary that describes the value + * + * @return true on success + */ + EXPORT bool init(const OSDictionary *dict); + + /** + * Obtain value contents + * + * @param size Amount of used bytes + * + * @return Pointer to the value data buffer. + * + * The buffer shall never be modified externally. + */ + const SMC_DATA *get(SMC_DATA_SIZE &size) const; + + /** + * Update the internal buffer, assuming the same + * amount of bytes is used for this value. + * + * @param src new contents + */ + virtual SMC_RESULT update(const SMC_DATA *src); + + /** + * Checks serialization necessity + * + * @param confidential confidential information storage is allowed + * + * @retrurn true if the value needs to be serialized + */ + bool serializable(bool confidential) const { + return serializeLevel == SerializeLevel::Normal || + (serializeLevel == SerializeLevel::Confidential && confidential); + } + + /** + * It is not recommended to free created values but you can if you need + */ + virtual ~VirtualSMCValue() = default; + + /** + * Used for storing values in evector + * + * @param inst value to be freed + */ + static void deleter(VirtualSMCValue *inst) { + delete inst; + } +}; + +#endif /* kern_value_hpp */ diff --git a/EFI/OC/Kexts/VirtualSMC.kext/Contents/Resources/VirtualSMCSDK/kern_vsmcapi.hpp b/EFI/OC/Kexts/VirtualSMC.kext/Contents/Resources/VirtualSMCSDK/kern_vsmcapi.hpp new file mode 100755 index 0000000..93a9fe6 --- /dev/null +++ b/EFI/OC/Kexts/VirtualSMC.kext/Contents/Resources/VirtualSMCSDK/kern_vsmcapi.hpp @@ -0,0 +1,328 @@ +// +// kern_vsmcapi.hpp +// VirtualSMC +// +// Copyright © 2018 vit9696. All rights reserved. +// + +#ifndef kern_vsmcapi_hpp +#define kern_vsmcapi_hpp + +#include +#include +#include +#include + +namespace VirtualSMCAPI { + /** + * SMC device service name. Please be aware that the same name is used for any (including physical) SMC device. + */ + static constexpr const char *ServiceName = "APP0001"; + + /** + * Main communication platform function interface. + * Takes plugin IOService and VirtualSMCPlugin as arguments. No modifications to struct contents are allowed once it is submitted. + * Virtual key functions may be invoked asynchronously from inside IOSimpleLock context, so they should be designed + * with the help of lock-free algorithms. + */ + static constexpr const char *SubmitPlugin = "VirtualSMCSubmitPlugin"; + + /** + * A total maximum of allowed plugins for installation. + */ + static constexpr size_t PluginMax = 16; + + /** + * Accepted plugin API (and ABI) compatibility + */ + static constexpr size_t Version = 1; + + /** + * Sorted key storage containing pairs of keys and values. + */ + using KeyStorage = evector; + + /** + * Main description structure submitted by a plugin. Must be unchanged and never deallocated after submission. + */ + struct Plugin { + const char *product; // Product name (e.g. xStringify(PRODUCT_NAME)) + size_t version; // Product version (e.g. parseModuleVersion(xStringify(MODULE_VERSION))) + size_t apiver; // Product API compatibility (i.e. VirtualSMCAPIVersion) + // Please note, that storage vectors MUST be sorted. Otherwise the behaviour is undefined. + KeyStorage data, dataHidden; + }; + + /** + * Register plugin handler for plugin loading + * + * @param handler function to handle the notification + * @param context function context + * + * @result notifier (must be released) or nullptr + */ + EXPORT IONotifier *registerHandler(IOServiceMatchingNotificationHandler handler, void *context); + + /** + * Asynchronous event poster, which may be used for submitting plugin events. + * Note, this may only be used after SubmitPlugin. + * + * @param code event code to post + * @param data data to include in the interrupt + * @param dataSize size of the supplied data + * + * @return true on success + */ + EXPORT bool postInterrupt(SMC_EVENT_CODE code, const void *data=nullptr, uint32_t dataSize=0); + + /** + * Obtain emulated SMC device info to determine used keys and their format. + * Note, this may only be used within SubmitPlugin or afterwards. + * + * @param info device info object to be copied to + * + * @return true on success + */ + EXPORT bool getDeviceInfo(SMCInfo &info); + + /** + * Adds a key with given value to a key storage. + * Does nothing if given value is nullptr. + * + * @param key an SMC key + * @param data a key storage to add the key to + * @param val an SMC value for the given key + * + * @return true on success + */ + EXPORT bool addKey(SMC_KEY key, KeyStorage &data, VirtualSMCValue *val); + + /** + * Initializes the given value with the appropriate data. Creates new value if nullptr passed as thisValue. + * + * @param smcData a pointer to SMC_DATA to be used for the value. + * @param smcDataSize a size of given SMC_DATA. Cannot be 0. + * @param smcKeyType a key type to init value with. + * @param thisValue a pointer to VirtualSMCValue. Must always be heap-based, don't use address take operator (&). If nullptr passed an instance of VirtualSMCValue will be created for you. Defaults to nullptr. + * @param smcKeyAttrs a key attributes as SMC_KEY_ATTRIBUTES flags. Defaults to SMC_KEY_ATTRIBUTE_READ. + * @param serializeLevel a serialize level needed. Defaults to SerializeLevel::None. + * + * @return thisValue either passed or created new on success, nullptr if something went wrong. + */ + EXPORT VirtualSMCValue *valueWithData(const SMC_DATA *smcData, SMC_DATA_SIZE smcDataSize, SMC_KEY_TYPE smcKeyType, VirtualSMCValue *thisValue = nullptr, SMC_KEY_ATTRIBUTES smcKeyAttrs = SMC_KEY_ATTRIBUTE_READ, SerializeLevel serializeLevel = SerializeLevel::None); + + /** + * Decode Apple SP signed fixed point fractional format + * + * @param type encoding type, e.g. SmcKeyTypeSp78 + * @param value value as it is read from SMC_DATA field + * + * @return floating point value + */ + EXPORT double decodeSp(uint32_t type, uint16_t value); + + /** + * Encode Apple SP signed fixed point fractional format + * + * @param type encoding type, e.g. SmcKeyTypeSp78 + * @param value source value + * + * @return value as it is to be written to SMC_DATA field + */ + EXPORT uint16_t encodeSp(uint32_t type, double value); + + /** + * Decode Apple FP unsigned fixed point fractional format + * + * @param type encoding type, e.g. SmcKeyTypeFp88 + * @param value value as it is read from SMC_DATA field + * + * @return floating point value + */ + EXPORT double decodeFp(uint32_t type, uint16_t value); + + /** + * Encode Apple FP unsigned fixed point fractional format + * + * @param type encoding type, e.g. SmcKeyTypeFp88 + * @param value source value + * + * @return value as it is to be written to SMC_DATA field + */ + EXPORT uint16_t encodeFp(uint32_t type, double value); + + /** + * Decode Apple FP signed integral number + * + * @param type encoding type, e.g. SmcKeyTypeSp78 + * @param value value as it is read from SMC_DATA field + * + * @return floating point value + */ + EXPORT int16_t decodeIntSp(uint32_t type, uint16_t value); + + /** + * Encode Apple FP signed integral number + * + * @param type encoding type, e.g. SmcKeyTypeSp78 + * @param value source value + * + * @return value as it is to be written to SMC_DATA field + */ + EXPORT uint16_t encodeIntSp(uint32_t type, int16_t value); + + /** + * Decode Apple FP unsigned integral number + * + * @param type encoding type, e.g. SmcKeyTypeFpe2 + * @param value value as it is read from SMC_DATA field + * + * @return floating point value + */ + EXPORT uint16_t decodeIntFp(uint32_t type, uint16_t value); + + /** + * Encode Apple FP unsigned integral number + * + * @param type encoding type, e.g. SmcKeyTypeFpe2 + * @param value source value + * + * @return value as it is to be written to SMC_DATA field + */ + EXPORT uint16_t encodeIntFp(uint32_t type, uint16_t value); + + /** + * Decode Apple float fractional format + * + * @param value value as it is read from SMC_DATA field + * + * @return floating point value + */ + inline float decodeFlt(uint32_t value) { + union { uint32_t u32; float f; } v {value}; + return v.f; + } + + /** + * Encode Apple float fractional format + * + * @param value source value + * + * @return value as it is to be written to SMC_DATA field + */ + inline uint32_t encodeFlt(float value) { + union { float f; uint32_t u32; } v {value}; + return v.u32; + } + + /** + * A convenient method for initializing flag type key value. + * + * @param flagValue a boolean true or false. + * @see VirtualSMCAPI::valueWithData + */ + inline VirtualSMCValue *valueWithFlag(bool flagValue, VirtualSMCValue *thisValue = nullptr, SMC_KEY_ATTRIBUTES smcKeyAttrs = SMC_KEY_ATTRIBUTE_READ, SerializeLevel serializeLevel = SerializeLevel::None) { + return valueWithData(reinterpret_cast(&flagValue), sizeof(bool), SmcKeyTypeFlag, thisValue, smcKeyAttrs, serializeLevel); + } + + /** + * A convenient method for initializing Uint8 type key value. + * + * @param uint8Value an integer of 0..255 range. + * @see VirtualSMCAPI::valueWithData + */ + inline VirtualSMCValue *valueWithUint8(uint8_t uint8Value, VirtualSMCValue *thisValue = nullptr, SMC_KEY_ATTRIBUTES smcKeyAttrs = SMC_KEY_ATTRIBUTE_READ, SerializeLevel serializeLevel = SerializeLevel::None) { + return valueWithData(reinterpret_cast(&uint8Value), sizeof(uint8_t), SmcKeyTypeUint8, thisValue, smcKeyAttrs, serializeLevel); + } + + /** + * A convenient method for initializing Sint8 type key value. + * + * @param sint8Value an integer of -128..127 range. + * @see VirtualSMCAPI::valueWithData + */ + inline VirtualSMCValue *valueWithSint8(int8_t sint8Value, VirtualSMCValue *thisValue = nullptr, SMC_KEY_ATTRIBUTES smcKeyAttrs = SMC_KEY_ATTRIBUTE_READ, SerializeLevel serializeLevel = SerializeLevel::None) { + return valueWithData(reinterpret_cast(&sint8Value), sizeof(uint8_t), SmcKeyTypeSint8, thisValue, smcKeyAttrs, serializeLevel); + } + + /** + * A convenient method for initializing Sint16 type key value. + * + * @param int16Value an integer of -32767..32768 range. + * @see VirtualSMCAPI::valueWithData + */ + inline VirtualSMCValue *valueWithSint16(int16_t int16Value, VirtualSMCValue *thisValue = nullptr, SMC_KEY_ATTRIBUTES smcKeyAttrs = SMC_KEY_ATTRIBUTE_READ, SerializeLevel serializeLevel = SerializeLevel::None) { + int16_t t = OSSwapHostToBigInt16(int16Value); + return valueWithData(reinterpret_cast(&t), sizeof(int16_t), SmcKeyTypeSint16, thisValue, smcKeyAttrs, serializeLevel); + } + + /** + * A convenient method for initializing Uint16 type key value. + * + * @param uint16Value an integer of 0..65535 range. + * @see VirtualSMCAPI::valueWithData + */ + inline VirtualSMCValue *valueWithUint16(uint16_t uint16Value, VirtualSMCValue *thisValue = nullptr, SMC_KEY_ATTRIBUTES smcKeyAttrs = SMC_KEY_ATTRIBUTE_READ, SerializeLevel serializeLevel = SerializeLevel::None) { + uint16_t t = OSSwapHostToBigInt16(uint16Value); + return valueWithData(reinterpret_cast(&t), sizeof(uint16_t), SmcKeyTypeUint16, thisValue, smcKeyAttrs, serializeLevel); + } + + /** + * A convenient method for initializing Sint32 type key value. + * + * @param int32Value an integer of –2147483648..2147483647 range. + * @see VirtualSMCAPI::valueWithData + */ + inline VirtualSMCValue *valueWithSint32(int32_t int32Value, VirtualSMCValue *thisValue = nullptr, SMC_KEY_ATTRIBUTES smcKeyAttrs = SMC_KEY_ATTRIBUTE_READ, SerializeLevel serializeLevel = SerializeLevel::None) { + int32_t t = OSSwapHostToBigInt32(int32Value); + return valueWithData(reinterpret_cast(&t), sizeof(int32_t), SmcKeyTypeSint32, thisValue, smcKeyAttrs, serializeLevel); + } + + /** + * A convenient method for initializing uint32_t type key value. + * + * @param uint32Value an integer of 0..4294967295 range. + * @see VirtualSMCAPI::valueWithData + */ + inline VirtualSMCValue *valueWithUint32(uint32_t uint32Value, VirtualSMCValue *thisValue = nullptr, SMC_KEY_ATTRIBUTES smcKeyAttrs = SMC_KEY_ATTRIBUTE_READ, SerializeLevel serializeLevel = SerializeLevel::None) { + uint32_t t = OSSwapHostToBigInt32(uint32Value); + return valueWithData(reinterpret_cast(&t), sizeof(uint32_t), SmcKeyTypeUint32, thisValue, smcKeyAttrs, serializeLevel); + } + + /** + * A convenient method for initializing spXX key value + * + * @param value floating point value + * @param type Apple sp type (see encodeSp) + * @see VirtualSMCAPI::valueWithData + */ + inline VirtualSMCValue *valueWithSp(double value, SMC_KEY_TYPE spType, VirtualSMCValue *thisValue = nullptr, SMC_KEY_ATTRIBUTES smcKeyAttrs = SMC_KEY_ATTRIBUTE_READ, SerializeLevel serializeLevel = SerializeLevel::None) { + auto e = encodeSp(spType, value); + return valueWithData(reinterpret_cast(&e), sizeof(e), spType, thisValue, smcKeyAttrs, serializeLevel); + } + + /** + * A convenient method for initializing fpXX key value + * + * @param value floating point value + * @param type Apple fp type (see encodeFp) + * @see VirtualSMCAPI::valueWithData + */ + inline VirtualSMCValue *valueWithFp(double value, SMC_KEY_TYPE fpType, VirtualSMCValue *thisValue = nullptr, SMC_KEY_ATTRIBUTES smcKeyAttrs = SMC_KEY_ATTRIBUTE_READ, SerializeLevel serializeLevel = SerializeLevel::None) { + auto e = encodeFp(fpType, value); + return valueWithData(reinterpret_cast(&e), sizeof(e), fpType, thisValue, smcKeyAttrs, serializeLevel); + } + + /** + * A convenient method for initializing flt key value + * + * @param value floating point value + * @see VirtualSMCAPI::valueWithData + */ + inline VirtualSMCValue *valueWithFlt(float value, VirtualSMCValue *thisValue = nullptr, SMC_KEY_ATTRIBUTES smcKeyAttrs = SMC_KEY_ATTRIBUTE_READ, SerializeLevel serializeLevel = SerializeLevel::None) { + auto e = encodeFlt(value); + return valueWithData(reinterpret_cast(&e), sizeof(e), SmcKeyTypeFloat, thisValue, smcKeyAttrs, serializeLevel); + } +} + +#endif /* kern_vsmcapi_hpp */ diff --git a/EFI/OC/Kexts/WhateverGreen.kext/Contents/Info.plist b/EFI/OC/Kexts/WhateverGreen.kext/Contents/Info.plist new file mode 100755 index 0000000..d2f3791 --- /dev/null +++ b/EFI/OC/Kexts/WhateverGreen.kext/Contents/Info.plist @@ -0,0 +1,106 @@ + + + + + BuildMachineOSBuild + 19H512 + CFBundleDevelopmentRegion + en + CFBundleExecutable + WhateverGreen + CFBundleIdentifier + as.vit9696.WhateverGreen + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + WhateverGreen + CFBundlePackageType + KEXT + CFBundleShortVersionString + 1.4.8 + CFBundleSignature + ???? + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 1.4.8 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 12B45b + DTPlatformName + macosx + DTPlatformVersion + 11.0 + DTSDKBuild + 20A2408 + DTSDKName + macosx11.0 + DTXcode + 1220 + DTXcodeBuild + 12B45b + IOKitPersonalities + + NVHDAEnabler + + CFBundleIdentifier + as.vit9696.WhateverGreen + IOClass + NVHDAEnabler + IOMatchCategory + IOFramebuffer + IOPCIClassMatch + 0x03000000&0xff000000 + IOPCIMatch + 0x000010de&0x0000ffff + IOProbeScore + 300000 + IOProviderClass + IOPCIDevice + + as.vit9696.WhateverGreen + + CFBundleIdentifier + as.vit9696.WhateverGreen + IOClass + WhateverGreen + IOMatchCategory + WhateverGreen + IOProviderClass + IOResources + IOResourceMatch + IOKit + + + LSMinimumSystemVersion + 10.8 + NSHumanReadableCopyright + Copyright © 2018 vit9696. All rights reserved. + OSBundleCompatibleVersion + 1.0 + OSBundleLibraries + + as.vit9696.Lilu + 1.2.0 + com.apple.iokit.IOPCIFamily + 1.0.0b1 + com.apple.kpi.bsd + 12.0.0 + com.apple.kpi.dsep + 12.0.0 + com.apple.kpi.iokit + 12.0.0 + com.apple.kpi.libkern + 12.0.0 + com.apple.kpi.mach + 12.0.0 + com.apple.kpi.unsupported + 12.0.0 + + OSBundleRequired + Root + + diff --git a/EFI/OC/Kexts/WhateverGreen.kext/Contents/MacOS/WhateverGreen b/EFI/OC/Kexts/WhateverGreen.kext/Contents/MacOS/WhateverGreen new file mode 100755 index 0000000..ddcfce1 Binary files /dev/null and b/EFI/OC/Kexts/WhateverGreen.kext/Contents/MacOS/WhateverGreen differ diff --git a/EFI/OC/OpenCore.efi b/EFI/OC/OpenCore.efi new file mode 100755 index 0000000..c88ac3e Binary files /dev/null and b/EFI/OC/OpenCore.efi differ diff --git a/EFI/OC/Tools/BootKicker.efi.bak b/EFI/OC/Tools/BootKicker.efi.bak new file mode 100755 index 0000000..03f610f Binary files /dev/null and b/EFI/OC/Tools/BootKicker.efi.bak differ diff --git a/EFI/OC/Tools/ChipTune.efi.bak b/EFI/OC/Tools/ChipTune.efi.bak new file mode 100755 index 0000000..6bcede6 Binary files /dev/null and b/EFI/OC/Tools/ChipTune.efi.bak differ diff --git a/EFI/OC/Tools/CleanNvram.efi.bak b/EFI/OC/Tools/CleanNvram.efi.bak new file mode 100755 index 0000000..a77be05 Binary files /dev/null and b/EFI/OC/Tools/CleanNvram.efi.bak differ diff --git a/EFI/OC/Tools/GopStop.efi.bak b/EFI/OC/Tools/GopStop.efi.bak new file mode 100755 index 0000000..6350c0a Binary files /dev/null and b/EFI/OC/Tools/GopStop.efi.bak differ diff --git a/EFI/OC/Tools/KeyTester.efi.bak b/EFI/OC/Tools/KeyTester.efi.bak new file mode 100755 index 0000000..2b51c5b Binary files /dev/null and b/EFI/OC/Tools/KeyTester.efi.bak differ diff --git a/EFI/OC/Tools/MmapDump.efi.bak b/EFI/OC/Tools/MmapDump.efi.bak new file mode 100755 index 0000000..35327b5 Binary files /dev/null and b/EFI/OC/Tools/MmapDump.efi.bak differ diff --git a/EFI/OC/Tools/OpenControl.efi.bak b/EFI/OC/Tools/OpenControl.efi.bak new file mode 100755 index 0000000..7d34118 Binary files /dev/null and b/EFI/OC/Tools/OpenControl.efi.bak differ diff --git a/EFI/OC/Tools/OpenShell.efi b/EFI/OC/Tools/OpenShell.efi new file mode 100755 index 0000000..8589021 Binary files /dev/null and b/EFI/OC/Tools/OpenShell.efi differ diff --git a/EFI/OC/Tools/ResetSystem.efi.bak b/EFI/OC/Tools/ResetSystem.efi.bak new file mode 100755 index 0000000..005b5b1 Binary files /dev/null and b/EFI/OC/Tools/ResetSystem.efi.bak differ diff --git a/EFI/OC/Tools/RtcRw.efi.bak b/EFI/OC/Tools/RtcRw.efi.bak new file mode 100755 index 0000000..99d3f53 Binary files /dev/null and b/EFI/OC/Tools/RtcRw.efi.bak differ diff --git a/EFI/OC/Tools/VerifyMsrE2.efi.bak b/EFI/OC/Tools/VerifyMsrE2.efi.bak new file mode 100755 index 0000000..f34b33b Binary files /dev/null and b/EFI/OC/Tools/VerifyMsrE2.efi.bak differ diff --git a/EFI/OC/config.plist b/EFI/OC/config.plist new file mode 100755 index 0000000..aff8a23 --- /dev/null +++ b/EFI/OC/config.plist @@ -0,0 +1,921 @@ + + + + + #WARNING - 1 + This is just a sample. Do NOT try loading it. + #WARNING - 2 + Ensure you understand EVERY field before booting. + #WARNING - 3 + In most cases recommended to use Sample.plist + #WARNING - 4 + Use SampleCustom.plist only for special cases. + ACPI + + Add + + + Comment + + Enabled + + Path + SSDT-AWAC.aml + + + Comment + + Enabled + + Path + SSDT-PMC.aml + + + Comment + + Enabled + + Path + SSDT-EC-USBX-DESKTOP.aml + + + Comment + + Enabled + + Path + SSDT-PLUG-DRTNIA.aml + + + Delete + + Patch + + Quirks + + FadtEnableReset + + NormalizeHeaders + + RebaseRegions + + ResetHwSig + + ResetLogoStatus + + + + Booter + + MmioWhitelist + + + Address + 4160749568 + Comment + MMIO devirt 0xF8000000 (0x4000 pages, 0x8000000000000000) + Enabled + + + + Address + 4261412864 + Comment + MMIO devirt 0xFE000000 (0x11 pages, 0x8000000000000001) + Enabled + + + + Address + 4273995776 + Comment + MMIO devirt 0xFEC00000 (0x1 pages, 0x8000000000000001) + Enabled + + + + Address + 4275044352 + Comment + MMIO devirt 0xFED00000 (0x1 pages, 0x8000000000000001) + Enabled + + + + Address + 4276092928 + Comment + MMIO devirt 0xFEE00000 (0x1 pages, 0x800000000000100D) + Enabled + + + + Address + 4278190080 + Comment + MMIO devirt 0xFF000000 (0x1000 pages, 0x800000000000100D) + Enabled + + + + Patch + + Quirks + + AllowRelocationBlock + + AvoidRuntimeDefrag + + DevirtualiseMmio + + DisableSingleUser + + DisableVariableWrite + + DiscardHibernateMap + + EnableSafeModeSlide + + EnableWriteUnprotector + + ForceExitBootServices + + ProtectMemoryRegions + + ProtectSecureBoot + + ProtectUefiServices + + ProvideCustomSlide + + ProvideMaxSlide + 0 + RebuildAppleMemoryMap + + SetupVirtualMap + + SignalAppleOS + + SyncRuntimePermissions + + + + DeviceProperties + + Add + + Delete + + + Kernel + + Add + + + Arch + x86_64 + BundlePath + Lilu.kext + Comment + Patch engine + Enabled + + ExecutablePath + Contents/MacOS/Lilu + MaxKernel + + MinKernel + 10.0.0 + PlistPath + Contents/Info.plist + + + Arch + x86_64 + BundlePath + VirtualSMC.kext + Comment + SMC emulator + Enabled + + ExecutablePath + Contents/MacOS/VirtualSMC + MaxKernel + + MinKernel + 10.0.0 + PlistPath + Contents/Info.plist + + + Arch + x86_64 + BundlePath + WhateverGreen.kext + Comment + Video patches + Enabled + + ExecutablePath + Contents/MacOS/WhateverGreen + MaxKernel + + MinKernel + 12.0.0 + PlistPath + Contents/Info.plist + + + Arch + x86_64 + BundlePath + AppleALC.kext + Comment + Audio patches + Enabled + + ExecutablePath + Contents/MacOS/AppleALC + MaxKernel + + MinKernel + 12.0.0 + PlistPath + Contents/Info.plist + + + Arch + x86_64 + BundlePath + USBInjectAll.kext + Comment + + Enabled + + ExecutablePath + Contents/MacOS/USBInjectAll + MaxKernel + + MinKernel + + PlistPath + Contents/Info.plist + + + Arch + x86_64 + BundlePath + RealtekRTL8111.kext + Comment + + Enabled + + ExecutablePath + Contents/MacOS/RealtekRTL8111 + MaxKernel + + MinKernel + + PlistPath + Contents/Info.plist + + + Arch + x86_64 + BundlePath + RTCMemoryFixup.kext + Comment + + Enabled + + ExecutablePath + Contents/MacOS/RTCMemoryFixup + MaxKernel + + MinKernel + + PlistPath + Contents/Info.plist + + + Block + + Emulate + + Cpuid1Data + oAYDAAAAAAAAAAAAAAAAAA== + Cpuid1Mask + /////wAAAAAAAAAAAAAAAA== + DummyPowerManagement + + MaxKernel + + MinKernel + + + Force + + Patch + + + Arch + Any + Base + + Comment + Enable TRIM for SSD + Count + 0 + Enabled + + Find + AEFQUExFIFNTRAA= + Identifier + com.apple.iokit.IOAHCIBlockStorage + Limit + 0 + Mask + + MaxKernel + + MinKernel + + Replace + AAAAAAAAAAAAAAA= + ReplaceMask + + Skip + 0 + + + Arch + Any + Base + + Comment + + Count + 0 + Enabled + + Find + oBCTT1NGTAA= + Identifier + + Limit + 0 + Mask + + MaxKernel + + MinKernel + + Replace + pAoPo6Ojo6M= + ReplaceMask + + Skip + 0 + + + Quirks + + AppleCpuPmCfgLock + + AppleXcpmCfgLock + + AppleXcpmExtraMsrs + + AppleXcpmForceBoost + + CustomSMBIOSGuid + + DisableIoMapper + + DisableLinkeditJettison + + DisableRtcChecksum + + ExtendBTFeatureFlags + + ExternalDiskIcons + + ForceSecureBootScheme + + IncreasePciBarSize + + LapicKernelPanic + + LegacyCommpage + + PanicNoKextDump + + PowerTimeoutKernelPanic + + SetApfsTrimTimeout + -1 + ThirdPartyDrives + + XhciPortLimit + + + Scheme + + FuzzyMatch + + KernelArch + x86_64 + KernelCache + Auto + + + Misc + + BlessOverride + + Boot + + ConsoleAttributes + 0 + HibernateMode + None + HideAuxiliary + + LauncherOption + Disabled + LauncherPath + Default + PickerAttributes + 17 + PickerAudioAssist + + PickerMode + Builtin + PickerVariant + Auto + PollAppleHotKeys + + ShowPicker + + TakeoffDelay + 0 + Timeout + 5 + + Debug + + AppleDebug + + ApplePanic + + DisableWatchDog + + DisplayDelay + 0 + DisplayLevel + 2147483650 + SerialInit + + SysReport + + Target + 67 + + Entries + + Security + + AllowNvramReset + + AllowSetDefault + + ApECID + 0 + AuthRestart + + BlacklistAppleUpdate + + DmgLoading + Signed + EnablePassword + + ExposeSensitiveData + 6 + HaltLevel + 2147483648 + PasswordHash + + PasswordSalt + + ScanPolicy + 0 + SecureBootModel + Default + Vault + Optional + + Tools + + + NVRAM + + Add + + 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 + + DefaultBackgroundColor + AAAAAA== + UIScale + AQ== + + 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102 + + rtc-blacklist + + + 7C436110-AB2A-4BBB-A880-FE41995C9F82 + + SystemAudioVolume + Rg== + boot-args + keepsyms=1 debug=0x100 alcid=11 rtcfx_exclude=00-FF igfxonln=1 + csr-active-config + AAAAAA== + prev-lang:kbd + + run-efi-updater + No + + + Delete + + 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 + + UIScale + DefaultBackgroundColor + + 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102 + + rtc-blacklist + + 7C436110-AB2A-4BBB-A880-FE41995C9F82 + + boot-args + + + LegacyEnable + + LegacyOverwrite + + LegacySchema + + 7C436110-AB2A-4BBB-A880-FE41995C9F82 + + EFILoginHiDPI + EFIBluetoothDelay + LocationServicesEnabled + SystemAudioVolume + SystemAudioVolumeDB + SystemAudioVolumeSaved + bluetoothActiveControllerInfo + bluetoothInternalControllerInfo + flagstate + fmm-computer-name + fmm-mobileme-token-FMM + fmm-mobileme-token-FMM-BridgeHasAccount + nvda_drv + prev-lang:kbd + + 8BE4DF61-93CA-11D2-AA0D-00E098032B8C + + Boot0080 + Boot0081 + Boot0082 + BootNext + BootOrder + + + WriteFlash + + + PlatformInfo + + Automatic + + CustomMemory + + DataHub + + ARTFrequency + 0 + BoardProduct + Mac-AA95B1DDAB278B95 + BoardRevision + Bw== + DevicePathsSupported + 0 + FSBFrequency + 0 + InitialTSC + 0 + PlatformName + + SmcBranch + ajEzOF85AAA= + SmcPlatform + ajEzOAAAAAA= + SmcRevision + AkYPAAAS + StartupPowerEvents + 0 + SystemProductName + iMac19,1 + SystemSerialNumber + C02ZT9YFJV3Q + SystemUUID + 73FAFF76-3747-4901-9F24-E9F3A2A46141 + + Generic + + AdviseWindows + + MaxBIOSVersion + + MLB + C02950405CDLNV91M + ProcessorType + 0 + ROM + ESIzRFVm + SpoofVendor + + SystemMemoryStatus + Auto + SystemProductName + iMac19,1 + SystemSerialNumber + C02ZT9YFJV3Q + SystemUUID + 73FAFF76-3747-4901-9F24-E9F3A2A46141 + + SMBIOS + + BIOSReleaseDate + 01/05/2021 + BIOSVendor + + BIOSVersion + 1554.80.3.0.0 + BoardAssetTag + Base Board Asset Tag + BoardLocationInChassis + Part Component + BoardManufacturer + + BoardProduct + Mac-AA95B1DDAB278B95 + BoardSerialNumber + C02950405CDLNV91M + BoardType + 10 + BoardVersion + iMac19,1 + ChassisAssetTag + Asset Tag# + ChassisManufacturer + + ChassisSerialNumber + C02ZT9YFJV3Q + ChassisType + 13 + ChassisVersion + Mac-AA95B1DDAB278B95 + FirmwareFeatures + dvWP/QAAAAA= + FirmwareFeaturesMask + f//f/wAAAAA= + PlatformFeature + 32 + ProcessorType + 4105 + SmcVersion + + SystemFamily + iMac + SystemManufacturer + + SystemProductName + iMac19,1 + SystemSKUNumber + System SKU# + SystemSerialNumber + C02ZT9YFJV3Q + SystemUUID + 73FAFF76-3747-4901-9F24-E9F3A2A46141 + SystemVersion + 1.0 + + UpdateDataHub + + UpdateNVRAM + + UpdateSMBIOS + + UpdateSMBIOSMode + Create + UseRawUuidEncoding + + + UEFI + + APFS + + EnableJumpstart + + GlobalConnect + + HideVerbose + + JumpstartHotPlug + + MinDate + 0 + MinVersion + 0 + + Audio + + AudioCodec + 0 + AudioDevice + PciRoot(0x0)/Pci(0x1b,0x0) + AudioOut + 0 + AudioSupport + + MinimumVolume + 20 + PlayChime + Auto + ResetTrafficClass + + SetupDelay + 0 + VolumeAmplifier + 0 + + ConnectDrivers + + Drivers + + HfsPlusLegacy.efi + OpenRuntime.efi + #OpenCanopy.efi + #AudioDxe.efi + #OpenPartitionDxe.efi + #OpenUsbKbDxe.efi + #UsbMouseDxe.efi + #Ps2KeyboardDxe.efi + #Ps2MouseDxe.efi + #HiiDatabase.efi + #NvmExpressDxe.efi + #XhciDxe.efi + #ExFatDxe.efi + #CrScreenshotDxe.efi + + Input + + KeyFiltering + + KeyForgetThreshold + 5 + KeySupport + + KeySupportMode + Auto + KeySwap + + PointerSupport + + PointerSupportMode + ASUS + TimerResolution + 50000 + + Output + + ClearScreenOnModeSwitch + + ConsoleMode + + DirectGopRendering + + ForceResolution + + GopPassThrough + + IgnoreTextInGraphics + + ProvideConsoleGop + + ReconnectOnResChange + + ReplaceTabWithSpace + + Resolution + Max + SanitiseClearScreen + + TextRenderer + BuiltinGraphics + UgaPassThrough + + + ProtocolOverrides + + AppleAudio + + AppleBootPolicy + + AppleDebugLog + + AppleEvent + + AppleFramebufferInfo + + AppleImageConversion + + AppleImg4Verification + + AppleKeyMap + + AppleRtcRam + + AppleSecureBoot + + AppleSmcIo + + AppleUserInterfaceTheme + + DataHub + + DeviceProperties + + FirmwareVolume + + HashServices + + OSInfo + + UnicodeCollation + + + Quirks + + ActivateHpetSupport + + DisableSecurityPolicy + + ExitBootServicesDelay + 0 + IgnoreInvalidFlexRatio + + ReleaseUsbOwnership + + RequestBootVarRouting + + TscSyncTimeout + 0 + UnblockFsConnect + + + ReservedMemory + + + Address + 268435456 + Comment + HD3000: IGPU memory corruption errata + Enabled + + Size + 268435456 + Type + Reserved + + + Address + 569344 + Comment + Fix black screen on wake from hibernation for Lenovo Thinkpad T490 + Enabled + + Size + 4096 + Type + RuntimeCode + + + + + \ No newline at end of file