Jump to content

black.dragon74

Retired
  • Posts

    190
  • Joined

  • Last visited

  • Days Won

    17

Everything posted by black.dragon74

  1. Not yet but I might have some news. PM if you want to test.
  2. Attach output of https://osxlatitude.com/index.php?/topic/10154-tool-problem-reporting-file-generator/
  3. U need to fix USB power properties and ports if you haven’t done so. Attach output of gen_debug to get started.
  4. @lucasdessyYou may try using a VM to create a installer USB. Google for vmdk of Sierra or High Sierra. Note that VM is not recommended generally but as you have no other option at your disposal this is your lucky pass. Regards
  5. Retaining HFS+J instead of APFS: In case of fresh install: APFS might work for you but is not recommended on a hack as it has some serious issues like slow boot times and battery status failing. If your boot drive is an SSD and you are installing macOS 10.13+ installer will automatically convert it to APFS. In order to stop that, do the following: Open Disk Utility in the installer and format your SSD/HDD as HFS+J partitioned disk. Quit disk utility and then open up terminal using Utilities > Terminal (at the menu bar) Run this command: /Volumes/"Image Volume"/"install macOS High Sierra.app"/Contents/Resources/startosinstall --volume /Volumes/"SSD/HDD Name" --agreetolicense --converttoapfs NO ` That's it. Installer will copy the files and then at the CLOVER screen you can boot by selecting "Boot macOS Install from XXX". Note that it is normal for the installer to restart you machine a few times (2 times in my case). In case you are upgrading to High Sierra: ​Open terminal and type the following # You must have a downloaded copy of the Installer in /Applications /Applications/Install\ macOS\ High\ Sierra.app/Contents/Resources/startosinstall --converttoapfs NO ` That's it. Installer will copy the files and then at the CLOVER screen you can boot by selecting "Boot macOS Install from XXX". Note that it is normal for the installer to restart you machine a few times (2 times in my case). Regards
  6. Hello guys, This guide is there to be used as a reference or a starting point for anyone trying to install macOS on a non Apple machine. This guide covers installation using CLOVER as it is very much the standard now. Also, most of the systems nowadays are UEFI enabled and CLOVER can take full advantage of it. Things you will need: An USB Drive with capacity of 16GB or larger (8GB might work too) An existing macOS install (Real mac/Hackintosh) A downloaded macOS Installer An internet connection A little bit of your time Note: It is not recommended to create a bootable USB using a VM as it corrupts the installer in some cases. Although If you have no other option at your disposal you may try resorting to it. You have been warned. BIOS Settings: When it comes to installing OS X on a non Apple machine BIOS settings play a very important role. Here are a few common settings that should be changed if they exist VT-d - Disabled (You may use dart=0 if this option is not in the BIOS) DvMT - 64MB (If you can change this setting, please do. If you set DvMT > 64MB you will have to patch framebuffer to take advantage of it) DEP - Enabled SATA Mode - AHCI (Very important) Secure Boot - Disabled Legacy Boot - Disabled (I rarely boot legacy, you may leave it Enabled though, no harms) CSM Module - Disabled (Available as "Launch CSM" on ASUS. You may try toggling it. It tends to help in cases of garbled screen) Fast Boot - Dsiabled Boot from USB - Enabled Creating the installer USB: It is obvious but writing it anyway, make sure that if there exists any data on USB drive that will be erased. Take a backup before attempting the steps below. There are two ways of creating the installer USB. 1. createinstallmedia Method (can be used on Real Macs. Only method that gives you a OS X recovery partition. Preferred.) 2. BaseBinariesClone Method (Use when trying to boot legacy system or if the above method doesn't work for you.) Please note that we are going to use a install creator utility written by me for both of the above methods. In that: New Way refers to createinstallmedia Old Way refers to Base Binaries Clone So, choose your options accordingly. Note: Base Binaries Clone doesn't work for 10.13.x or above Getting the script: ` Open up terminal and type: cd ~/Desktop curl -o bkit https://raw.githubusercontent.com/black-dragon74/Bkit/master/bkit chmod a+x bkit ` You will have the utility on your Desktop. Now we need to get hold of a few utlities: Download CLOVER from here Download FakeSMC from here Download HFSPlus.efi from here If preparing for Sierra or above you might need Lilu and IntelGraphicsFixup Laptop Specific Note: I prefer to use external mouse and keyboard when installing macOS. If you want to use your internal keyboard and trackpad you might need VoodooPS2Controller. (Works only for Trackpads on PS2 Bus. You may try VoodooI2C for trackpads on I2C bus) For Elan1200 I2C trackpad use the kext attached in my ELAN1200 guide at: https://osxlatitude.com/index.php?/topic/10165-guide-elan1200-i2c-trackpad/ Formatting USB and Installing Clover: Time has come to invoke Bkit. Open terminal and type ~/Desktop/bkit ` Now just keep following the instructions from the script: Choose your preferred way (New way or Old Way) Choose macOS version (Bkit supports 10.9 - 10.13. Requires Install macOS xxx.app in /Applications) Press Y to agree to the warning that says USB data will be erased. Now, Bkit will ask you for your USB device's disk identifier. Here is how to find the same. Open terminal and type: diskutil list external You will get a list of external USB devices along with disk identifier like, /dev/disk1 or /dev/disk2 You don't have to write full /dev/disk1 just type the "diskx" part. Like, for /dev/disk2 I would type disk2 in Bkit. The script will now verify if the disk is indeed an external one (to save from your data loss it is used as a failsafe method). Now it will ask you to install clover then type c (continue). Installing CLOVER to USB for UEFI: Open clover installer package and click on Continue. You will get a README. Select Continue. Now you will get a screen to select Install location. Choose "Change Install Location" Now select your USB drive and click continue You will get back to previous screen. Select "Customize" Tick the following options: Install for UEFI booting only Select themes if you would like so (I use BGM) Select Drivers64UEFI > AptioMemoryFix (Latest build as of Sat Mar 3 19:31:12 IST 2018 is attached to this post) Now click on "Install". Punch in your password and press ENTER (Return) Installing CLOVER to USB for Legacy: Open clover installer package and click on Continue. You will get a README. Select Continue. Now you will get a screen to select Install location. Choose "Change Install Location" Now select your USB drive and click continue You will get back to previous screen. Select "Customize" Tick the following options: Install CLOVER in the ESP Boot-loader > Install boot0af in MBR Clover EFI > EFI 64bits SATA Select themes if you would like so (I use BGM) Select Drivers64UEFI > OsxAptioFixDrv (You may try OsxAptioFix2Drv if it doesn't work for you) Now click on "Install". Punch in your password and press ENTER (Return) Once finished, click on Close and get back to terminal where Bkit is waiting for our response. Type continue/c at Bkit's prompt. It will now verify CLOVER installation and then proceed to copy installation files. Please DO NOT close Terminal until you get confirmation message from the tool. It may take 5-10 mins for the script to finish (might take longer on slow machines) A successful run looks like this: Preparing to boot USB: Now as we are mostly done with everything, in order for CLOVER to be able to boot macOS install it needs the kexts and a config.plist file. You have already downloaded the required kexts above. Unzip them and then open your USB drive's EFI partition. Copy the unzipped kexts and then paste then into: USB's EFI/EFI/CLOVER/kexts/Other Copy downloaded HFSPlus.efi in: USB's EFI/EFI/CLOVER/drivers64UEFI (VBoxHfs is disabled as it is not that reliable) Now we need to install a proper config.plist file. Download the one attached to this post and then paste it in: USB's EFI/EFI/CLOVER Make double sure that the name of the file you just pasted is "config.plist". CLOVER won't read any other config file. Booting USB: Plug your USB device into a USB port (USB2 port recommended) Keep pressing your BIOS hotkey at POST screen (Esc key for ASUS laptops) Select "UEFI: Your USB" You will get CLOVER boot screen. (Hint: You may press F4 now to dump origin ACPI tables. It is required later) Press ENTER or wait for 5 seconds to boot automatically. General notes: Bkit can also be used to create installer for real macs. Use "bkit -nc" arg for that. You might consider having ethernet connected while installing macOS. Download kexts for (Realtek | Intel) and paste them in USB's EFI/EFI/CLOVER/kexts/Other The plist file just gets you to installer screen. It does nothing even close to a full install. If you get a reboot it is likely due to DvMT prealloc set to less than 64MB. You may use IntelGraphicsDVMTFixup with Lilu to overcome this issue. However, after installing you must patch framebuffer as IntelGraphicsDVMTFixup has a heavy reliance on framebuffer data and will panic when you use patches for HDMI or Cursor Bytes. If you get no device to boot in CLOVER screen it is surely due to missing HFSPlus.efi (Double check that you have it) If you get some error related to window server it is because of your Nvidia/AMD GPU trying to load up. To get around you will have to disable the device using ACPI patching (Will save it for some other day) Problem Reporting: If you face any problems please post them below. As this is a preinstall process you won't be able to get any logs or debug info hence, post your issue with screen capture (photo) of the panic along with your USB device's CLOVER folder. I'll be glad to help. Cheers config.plist.zip AptioMemoryFix.efi.zip
  7. Add a few lines to unload the trackpad kext and then reload it. You can see how it is implemented in my guide for ELAN1200. See https://osxlatitude.com/index.php?/topic/10165-guide-elan1200-i2c-trackpad/ Regards
  8. Check activity monitor's energy tab and see if you find something that's draining all the juice.
  9. It is impossible to predict the future. You may try using it. P.S: It will only work if you trackpad in on PS2 bus. Many newer laptops have trackpads on I2C Bus. Regards
  10. @savage24x, When you wake it up, does it work normally? It would be better if we have a debug report to troubleshoot. See How to generate proper problem reporting files
  11. This kext will be getting a major update from the developer anytime soon. Until then, bear with us. P.S: You may use VoodooPS2 but you won't get "the advanced" features of ApplePS2SmartTouchpad. I rarely use all caps. Shift+{Any Key} works fine when it comes to capitalizing for me. Regards
  12. For black screen after sleep see https://osxlatitude.com/index.php?/topic/10236-how-to-fix-black-screen-in-high-sierra/&do=findComment&comment=75529 For CapsLock reliability, What kext are you using, VoodooPS2 or AppleSmartPS2? Regards
  13. Power nap is SMBIOS specific, I guess. Anyways, it doesn't work reliably on a hack. So, I wouldn't worry about it. It appears in my case (using SMBIOS of MacBook Air 6,2) Regards
  14. IGPU device is failing to initialize. U need to disable igfx firmware on macOS 10.13.x If using clover, use boot-arg: -disablegfxfirmware You will get to login screen. Regards
  15. Anyone can't help you without proper diagnostic report. See https://osxlatitude.com/index.php?/topic/10209-how-to-generate-proper-problem-reporting-files/for help on generating such report.
  16. Installing on windows is not that easy. Use this to have a working macOS VM on windows https://techsviewer.com/install-macos-high-sierra-vmware-windows/
  17. Normal for an Injector. Your issue is 100% due to missing PNLF device Place the attached SSDT in EFI/CLOVER/ACPI/patched Remember, You need to have your GFX0 device renamed to IGPU in your ACPi tables. If something doesn't work, Attach proper problem reporting files. See How to generate proper problem reporting files Regards SSDT-PNLF.zip
  18. Log out of iCloud on both iPhone and hack. Then log back into iCloud on both the devices. That might solve this issue. Note: Handoff is known not to work reliably on macOS versions 10.11+
  19. Update 11 Dec 2017: Please note that in HWMonitor you will see two system fans namely: System Fan and System FAN (note the capitalization in the second name). It is not harmful but just in case you hate two system FANs in HWMonitor, you can fix this easily. To fix this, once you download the attached SSDT-FAN.aml you can open it and in Device (SMCD) scope you will see a name field like: Name (TACH, Package(){ "System FAN", "FAN0" } Change it to: Name (TACH, Package(){ "System Fan", "FAN0" } Regards
  20. Heya! After a lot of playing around with ASUS acpi tables I have finally come up with a SSDT that will work nearly on all ASUS laptops (Haswell or above) for reading FAN RPM, CPU TEMP and also Custom Controlling FAN. I do not have hardware below Haswell so can't test. If someone get's it working using this SSDT on machines prior to haswell. Let me and others know. Background Info: The system FAN is generally controlled by the embedded controller (EC) but there are methods in ACPI that can let you read and control your system FAN. As you might know, ASUS machines are the best for hackintosh as they have the best written ACPI code. Like, if it was HP instead of ASUS you would have to acquire a mutex object. Write a value to the EC and then release the object. But in ASUS machines there is a method that takes arguments and does this job automatically. Still. There are multiple methods in our DSDT that allow us to read and control system FAN. For example to read FAN speed, there are two ways. If you observe, the FAN speed is at offset 0x93 of EC (Use RWEverything to find out) So, when we search for Offset 0x93 in the DSDT we get a result like this: Offset (0x93), TAH0, 16, // TAH0 stands for FAN1 TAH1, 16, // TAH1 stands for FAN2 (in case your laptop has 2 fans) TSTP, 16, // TSTP stores current fan value in some bytes Note: Instead of using RWEverything if you have a look at method TACH you can see that it stores the values in TAH0 and TAH1 depending upon the Args supplied. So, searching for TAH0 or TAH1 we can see that they are located at offset 0x93 So, now we can read the value from these registers in some units and then we will have to use some formula to convert that unit to RPM. In order to find that formula, if you have a look at Method TACH in dsdt, you will see: Method (TACH, 1, Serialized) { Name (_T_0, Zero) If (ECAV ()) { While (One) { _T_0 = Arg0 If ((_T_0 == Zero)) { Local0 = TAH0 Break } ElseIf ((_T_0 == One)) { Local0 = TAH1 Break } Else { Return (Ones) } Break } Local0 *= 0x02 If ((Local0 != Zero)) { Divide (0x0041CDB4, Local0, Local1, Local0) Return (Local0) } Else { Return (Ones) } } Else { Return (Ones) } } So, we know that we have to store the value from TAH0 or TAH1 (depends on Arg0) and then we have to multiply it by 2 and then we have to divide it by 0x0041CDB4 (4312500) to get the value in RPMs. Once we know that, we could write a simple ACPI code to return the value in RPMs like: // GRPM means get RPM Method (GRPM, 0) { // Store value in Local0 Local0 = \_SB.PCI0.LPCB.EC0.TAH0 // If local0 is not equal to 0 If (Local0 != 0){ // Multiply by 2 Local0 = Local0 * 2 // Divide by 4312500 Divide (0x0041CDB4, Local0, Local1, Local0) } // Return the value Return (Local0) } As you can see this is very expensive method. But what we learned here is, If we execute method TACH with Arg0 as 0 (Zero) it will give us the speed in RPM of FAN 1. Similarly, if we use Arg0 as 1 (One) it will return the value in RPM for FAN 2 My laptop only has one FAN so, I can execute method TACH like, \SB.PCI0.LPCB.EC0.TACH(0) // Using Arg0 as Zero for FAN 1 And it will give me FANs RPM, so, instead of reading from EC and converting bits to RPM this is more preferable. Also, EC bytes may change while patching DSDT so it is a good idea to use dynamic methods so that a single SSDT could work for all machines. One such example is, If you use ACPIBatteryManager then you will have to convert 16bits registers to 8bits. And then, to use that "reading RPM from EC method you will have to create a new method to combine 2 8 bits registers to 1 16 bit like, // JEBR = Join 8 bit registers Method (JEBR, 2) { Return ((Arg0 | (Arg1 << 8))) // Arg0 and Arg1 will be 8Bit register 1 and 2 respectively (AH00, AH01) } Now moving to FAN control, If you have a look at method QMOD in DSDT: Method (QMOD, 1, NotSerialized) { If ((Arg0 == Zero)) { Return (Zero) // If arg0 is Zero. Terminate by returning 0 } If ((Arg0 == One)) { ^^PCI0.LPCB.EC0.ST98 (QFAN) // Hmm, ST98 is somewhat related to FAN control } If ((Arg0 == 0x02)) { ^^PCI0.LPCB.EC0.ST98 (0xFF) // Okay, ST98 again.. Something is interesting } Return (One) } Now, if you look at ST98 you can see: Method (ST98, 1, Serialized) { If (ECAV ()) // Checked if EC is available, will you write to it? { Acquire (MU4T, 0xFFFF) // Oh! So you are acquiring a mutex object CMD = 0xFF EDA1 = 0x98 EDA2 = Arg0 // Oh, so you did write Arg0 in EDA2 (Located in EC01 OperationRegion) ECAC () Release (MU4T) // Released it here, you did write something to the EC for sure Return (Zero) } Return (Ones) } Now, we can understand that, method QMOD (Quiet Mode?) Takes 1 argument that could be (0, 1 or 2). We can eliminate 0 as when we pass Arg0 as 0 it simply returns. Interesting are args 1 and 2 When using 1 it passes Arg0 to ST98 as QFAN's value (Hmm.. What is this QFAN) When using 2 it passes Arg0 to ST98 as 0xFF (255) (Oh wait! according to ACPI spec, 255 is max allowed FAN value.) Gotcha! We can use ST98 and pass it an arg ranging between 0x0 (0) to 0xFF (255) where 0 is for FAN off and 255 is for Max allowed or auto. But, why is there a QMOD method then? There might be some good reason for that. So, we will not invoke ST98 directly but will use the modus operandi of method QMOD Like, we will first store that max allowed FAN value in QFAN Then, we will invoke QMOD with Arg0 as 1 (One). Which will invoke ST98 for us hence, setting the max allowed speed for FAN. So, the ACPI code for this would be: Method (SETR, 0) { QFAN = 200 // Suppose we want to use max allowed value as 200 // Now we can call QMOD with Arg0 as 1 QMOD (1) } Now we know what to do. We now just need to write a method that can calculate the CPU temperature and then set FAN RPM accordingly. This is when you will use my SSDT-FAN How to implement: Requirements: FakeSMC kext along with sensors installed at /L/E or /S/L/E (DO NOT INJECT USING CLOVER) ACPIPoller.kext HWMonitor for monitoring CPU Temp and FANS My SSDT-FAN.aml Installation: Place SSDT-FAN.aml to /EFI/CLOVER/ACPI/patched (If using sorted order make sure you add SSDT-FAN to it) Install ACPIPoller to /L/E or /S/L/E (not both and definitely do not inject using CLOVER) Configuration: You can set "Name (UCFC, One)" to "Name (UCFC, Zero)" in my SSDT-FAN in case you want to use default FAN control method as provided by your OEM. My SSDT will only provide FAN RPM reading and CPU Temp reading.Achievements: Default scaling that ASUS provided was from 2200RPM to 2900RPM (Fan spinning fast without use) I managed to bring scale it from 255RPM to 5026RPM (Fan turns off if temp Temp rarely goes above 53˚C (Went up to 68 earlier) Technicalities: As we know know how to implement custom fan control using various methods in our DSDT we can't really use them as is in real life scenarios as FAN will literally be dancing. You might have observed that temperature keeps fluctuating a few degrees every second while you are working on something. Moreover, we need an automated method that can read and set FAN RPM. So, my SSDT calculates average temperature and then also waits for 2 seconds (to handle fluctuation) before increasing the RPM and waits for 5 seconds (to let CPU cool) before lowering RPM. You can edit this timeout by editing "Name (FCTU, 2)" for FanControlTimeoutUp and "Name (FCTD, 5)" for FanControlTimeoutDown. Method to calculate average accredited to RehabMan as he wrote the code first. There is only one known way to calculate average in maths. LOL. If you want to know how it is implemented, read this code: Note: This code is a part of my single optimizer SSDT project for ASUS laptops (Means, I am working on a single SSDT that you could place in your CLOVER/ACPI/patched and will have everything working without patching DSDT. You can customize SSDT using Device ANKD (A Nick's Device) like you can configure this SSDT to use custom FAN control or not). You can have a look at WIP code here // SSDT for FAN readings and custom FAN control for ASUS laptops // Copyright, black.dragon74 <www.osxlatitude.com> // Please configure the options in Device ANKD before compiling this SSDT DefinitionBlock("SSDT-FAN", "SSDT", 2, "Nick", "AsusFan", 0) { // Declare externals External (\_SB.QFAN, FieldUnitObj) External (\_SB.ATKD.QMOD, MethodObj) External (\_SB.PCI0.LPCB.EC0.ECAV, MethodObj) External (\_SB.PCI0.LPCB.EC0.ECPU, FieldUnitObj) External (\_SB.PCI0.LPCB.EC0.ST83, MethodObj) External (\_SB.PCI0.LPCB.EC0.ST98, MethodObj) External (\_SB.PCI0.LPCB.EC0.TACH, MethodObj) // Create a Nick's device to take care of this SSDT's configurations Device (ANKD) { Name (_HID, "ANKD0000") // Required. DO NOT change Name (UCFC, 1) // Set this to 0 if you don't wanna use my custom FAN control } // Create devices required by FakeSMC_ACPISensors Device (SMCD) { Name (_HID, "FAN0000") // Required, DO NOT change // Add tachometer Name (TACH, Package() { "System FAN", "FAN0" }) // Add CPU heatsink Name (TEMP, Package() { "CPU Heatsink", "TCPU" }) // Method to read FAN RPM (tachometer) Method (FAN0, 0) { // Check is EC is ready If (\_SB.PCI0.LPCB.EC0.ECAV()) { // Continue Local0 = \_SB.PCI0.LPCB.EC0.ST83(0) // Method ST83 acquires mutex and writes value to EC. O stands for FAN 1, Use 1 for FAN 2 If (Local0 == 255) { // If ST83 is 0xFF (Max fan speed) terminate by returning FAN RPM Return (Local0) } // Else, Get RPM and store it in Local0 Local0 = \_SB.PCI0.LPCB.EC0.TACH(0) // Method TACH in DSDT returns current FAN RPM in 100s, Arg0 as 0 is for FAN 1, for FAN 2, use Arg0 as 1 } Else { // Terminate, return Zero Local0 = 0 } // Return 255, 0 or Fan RPM based on conditionals above Return (Local0) } // Method to read CPU temp (CPU Heatsink) Method (TCPU, 0) { // Check if EC is ready If (\_SB.PCI0.LPCB.EC0.ECAV()) { // Then Local0 = \_SB.PCI0.LPCB.EC0.ECPU // EC Field storing current CPU temp Local1 = 60 // From DSDT If (Local0 < 128) { Local1 = Local0 } } Else { // Terminate, return Zero Local1 = 0 } // Return final CPU temp. ACPISensors take care of unit conversion. Return (Local1) } // Custom FAN table by black.dragon74 for ASUS laptops based on RehabMan's idea // Quietest fan operation yet coolest CPU. // Scaling from values as low as 255 RPM to values as high as 5026 RPM (That's great!) // Scaling that ASUS provided was from 2200 RPM to 2900 RPM (Duh!) // Temperatures. 0xFF means if temp is above 52C, let bios take control of things(auto). Name(FTA1, Package() { 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 0xFF, }) // Fan speeds. 255(0xFF) is max/auto, 0(0x00) is for fan off Name(FTA2, Package() { 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 160, 185, 205, 225, 245, 250, 255 }) // Time out values Name (FCTU, 2) // RPM Up Name (FCTD, 5) // RPM Down // Table to keep track of past temperatures (to track average) Name (FHST, Buffer() { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }) // Size should match the count of above FTA1 and FTA2 package Name (FIDX, 0) // current index in buffer above Name (FNUM, 0) // number of entries in above buffer to count in avg Name (FSUM, 0) // current sum of entries in buffer // Keeps track of last fan speed set, and counter to set new one Name (FLST, 0xFF) // last index for fan control Name (FCNT, 0) // count of times it has been "wrong", 0 means no counter // Method to control FAN wrt TEMP // Name in ACPIPoller.kext's Info.plist should be FCPU with HID FAN0000 Method (FCPU, 0) { // If UCFC is set to 0, terminate If (\ANKD.UCFC == 0) { Return (0) } // If EC is not ready, terminate If (!\_SB.PCI0.LPCB.EC0.ECAV()) { Return (0) } Local5 = \_SB.PCI0.LPCB.EC0.ECPU // Current temperature of the CPU Heatsink If (Local5 < 128) { Local0 = Local5 // Store temperature in Local0 } Else { Local0 = 60 // As per BIOS } // calculate average temperature Local1 = Local0 + FSUM Local2 = FIDX Local1 -= DerefOf(FHST[Local2]) FHST[Local2] = Local0 FSUM = Local1 // Local1 is new sum // adjust current index into temperature history table Local2++ if (Local2 >= SizeOf(FHST)) { Local2 = 0 } FIDX = Local2 // adjust total items collected in temp table Local2 = FNUM if (Local2 != SizeOf(FHST)) { Local2++ FNUM = Local2 } // Local1 is new sum, Local2 is number of entries in sum Local0 = Local1 / Local2 // Local0 is now average temp // table based search (use avg temperature to search) if (Local0 > 255) { Local0 = 255 } Local2 = Match(FTA1, MGE, Local0, MTR, 0, 0) // calculate difference between current and found index if (Local2 > FLST) { Local1 = Local2 - FLST Local4 = FCTU } else { Local1 = FLST - Local2 Local4 = FCTD } // set new fan speed, if necessary if (!Local1) { // no difference, so leave current fan speed and reset count FCNT = 0 } else { // there is a difference, start/continue process of changing fan Local3 = FCNT FCNT++ // how long to wait depends on how big the difference // 20 secs if diff is 2, 5 secs if diff is 4, etc. Local1 = Local4 / Local1 if (Local3 >= Local1) { // timeout expired, so start setting new fan speed FLST = Local2 // Method 1 (Recommended) // Store custom fan value from table in Local5 Local5 = DerefOf(FTA2[Local2]) // Set QFAN value to that of Local5 \_SB.QFAN = Local5 // Execute QMOD with Arg0 as 1(One) to set FAN's max allowed speed to that of \_SB.QFAN \_SB.ATKD.QMOD(1) // End Method 1 // Method 2 (Works but not recommended) Uncomment the line below to use this (remember to comment lines in method 1) // \_SB.PCI0.LPCB.EC0.ST98 (DerefOf(FTA2[Local2])) // End Method 2 // Reset FAN count (Required in either methods) FCNT = 0 } } Return (1) // Return something as this is a requirement of a ACPI Method } } } Moment of joy: Problem Reporting: Attach proper problem reporting files. See How to generate proper problem reporting files Note: If you see FAN RPM = 255 and hear a lot of noise from FAN it means your FAN is running at it's maximum speed. Regards ACPIPoller.zip SSDT-FAN.zip
  21. Attach proper problem reporting files. See How to generate proper problem reporting files P.S: Try replacing name with com.apple.iokit.IOBluetoothFamily instead of IOBluetoothFamily. You may give https://github.com/dokterdok/Continuity-Activation-Tool/tree/beta a try.
  22. Add this in your clover Kexts To Patch: Kext: IOBluetoothFamily Find: 48 85 FF 74 47 48 8B 07 Replace: 41 BE 0F 00 00 00 EB 44 Comment: Handoff Patch Regards
×
×
  • Create New...