Jump to content
59 posts in this topic

Recommended Posts

1 hour ago, Mike Ranger said:

Thanks all for clarifying. I can confirm that the new Super I/O is really working great. All is missing is the link to the well known Apps like Istat for example.

The question is really if I understood you correctly:

 

How to close that bridge from the raw data Super I/O to, for example IStat, which most Mac/Hack users have installed and using. I think the main reason that not more users have switched to VirtualSMC is exactly that reason.... and sorry for stating that in this thread....hope it is not off-topic.

 

If I officially submit that as a request, where would that go.... into the VirtualSMC one?

 

Thanks again, Mike

to support sensors in iStat Menus you need to write help@bjango.zendesk.com, maybe they will agree to consider this possibility.

Quote

to support sensors in iStat Menus you need to write help@bjango.zendesk.com, maybe they will agree to consider this possibility.

 

I am pretty certain they will not.

The FakeSMC Sensor Kexts are programmed so that Apps like Istat can work with the data.

 

I wanted to share my perspective that the main reason VirtualSMC together with the provided Sensor-Kexts is not used by more users due to the lack of providing sensor information that can be used by e.g. Istat.

I tried to communicate here what I have read in numerous forums why people stick with FakeSMC plus Sensors. For me this is working perfectly fine and also the reason why I have not switched to VirtualSMC.

 

My point is what currently hinders adoption of VirtualSMC plus Sensor.kexts it that missing link to Istat. And there seems no appetite by any developers to start implementing any drivers. For this reason, VirtualSMC will probably not be used by many Hackintosh users for the time being, until that changes.

 

 

 

iStat implements support for HWSensors sensors by explicitly detecting FakeSMC kext presence and using a dedicated SMC key mapping for it. It is up to them whether to also add support for Acidanthera sensors, but for obvious reasons we will not create a FakeSMC service in I/O Registry or add HWSensors SMC keys.

 

  • Like 1
  • Thanks 1

@vit9696: gotcha..... I think you will  agree that adoption of VirtualSMC&Sensors  will not really happen unless happy Istat users (like myself) have a solution. I am not proposing who should implement this solution, just saying that FakeSMC will remain most Hack-Users choice for that reason.

 

 

On 1/8/2020 at 8:44 AM, Mike Ranger said:

So I can confirm that everything works.... 

In order to get more functionality, I would have to create a DSDT for the LCP  sensors. The problem I have however is, that looking through my DSDT, I have no good idea how to translate this info correctly.

I will try to better understand.

Hi @Mike Ranger if you manage to create a working SSDT-xxx for LCP sensors, please can you share it? I would also need to create one and I also do not know where to start from nor how to structure the ACPI code inside... thank you!

I have SuperIO chip (Winbond) registers in DSDT and yes, it is possible to read Voltages, FANs and Temps from here

but this part of code is not available in all the DSDTs

OperationRegion (HWRE, SystemIO, IOHW, 0x0A)
        Field (HWRE, ByteAcc, NoLock, Preserve)
        {
            Offset (0x05), 
            HIDX,   8, 
            HDAT,   8
        }

        IndexField (HIDX, HDAT, ByteAcc, NoLock, Preserve)
        {
            Offset (0x04), 
            CHNM,   1, 
            CFNM,   1, 
            CHNS,   2, 
            CFNS,   2, 
            Offset (0x05), 
            SYST,   8, 
            TRGT,   8, 
            Offset (0x08), 
            SSDN,   8, 
            CSDN,   8, 
            SSUP,   8, 
            CSUP,   8, 
            Offset (0x20), 
            VCOR,   8, 
            V12V,   8, 
            Offset (0x23), 
            V33V,   8, 
            Offset (0x25), 
            V50V,   8, 
            Offset (0x27), 
            MBTE,   8, 
            FAN1,   8, 
            FAN2,   8, 
            FAN3,   8, 
            Offset (0x3F), 
            CFN3,   8, 
            Offset (0x47), 
            FDR1,   8, 
            Offset (0x4B), 
            FD13,   8, 
            FD15,   8, 
            Offset (0x4E), 
            BSEL,   3, 
            Offset (0x4F), 
            Offset (0x50), 
            TSR1,   8, 
                ,   7, 
            TSR2,   1, 
            Offset (0x53), 
            FAN4,   8, 
            Offset (0x59), 
            FND4,   8, 
            Offset (0x5D), 
            FD21,   8
        }
    }

 

  • Slice pinned this topic
1 hour ago, Mike Ranger said:

@Rodion2010

Can you give more context for your DSDT?

What do you achieve with it?

Thanks, Mike

Sample SSDT to read from SuperIO for ACPI.kext (HWsensors3)

/*
 * Intel ACPI Component Architecture
 * AML/ASL+ Disassembler version 20200110 (64-bit version)
 * Copyright (c) 2000 - 2020 Intel Corporation
 * 
 * Disassembling to symbolic ASL+ operators
 *
 * Disassembly of iASLrFLzrb.aml, Tue Jan 14 11:57:21 2020
 *
 * Original Table Header:
 *     Signature        "SSDT"
 *     Length           0x00000CCA (3274)
 *     Revision         0x01
 *     Checksum         0x19
 *     OEM ID           "APPLE"
 *     OEM Table ID     "SSDT-MON"
 *     OEM Revision     0x00000001 (1)
 *     Compiler ID      "INTL"
 *     Compiler Version 0x20190509 (538510601)
 */
DefinitionBlock ("", "SSDT", 1, "APPLE", "SSDT-MON", 0x00000001)
{
    External (_SB_.PCI0.LPCB, DeviceObj)

    Name (IOHW, 0x0290)
    Scope (_SB.PCI0.LPCB)
    {
        Device (SIOR)
        {
            Name (_HID, EisaId ("PNP0C02") /* PNP Motherboard Resources */)  // _HID: Hardware ID
            Method (HWV0, 0, NotSerialized)
            {
                Return ((VCOR * 0x08))
            }

            Method (HWV1, 0, NotSerialized)
            {
                Return ((V12V * 0x08))
            }

            Method (HWV3, 0, NotSerialized)
            {
                Return ((V33V * 0x08))
            }

            Method (HWV5, 0, NotSerialized)
            {
                Return ((V50V * 0x08))
            }

            Method (HWT0, 0, NotSerialized)
            {
                Local1 = MBTE /* \_SB_.PCI0.LPCB.SIOR.MBTE */
                Local1 *= 0x0A
                Return (Local1)
            }

            Method (HWT1, 0, NotSerialized)
            {
                BSEL = One
                Local1 = TSR1 /* \_SB_.PCI0.LPCB.SIOR.TSR1 */
                Local1 *= 0x0A
                Local2 = TSR2 /* \_SB_.PCI0.LPCB.SIOR.TSR2 */
                Local2 *= 0x05
                Local1 += Local2
                Return (Local1)
            }

            Method (HWF0, 0, NotSerialized)
            {
                Local0 = FAN1 /* \_SB_.PCI0.LPCB.SIOR.FAN1 */
                BSEL = Zero
                Local1 = (FD21 & 0x20)
                Local1 >>= 0x05
                Local1 *= 0x04
                Local2 = (FDR1 & 0x30)
                Local2 >>= 0x04
                Local1 += Local2
                If (((Local1 > 0x05) || (Local1 < 0x02)))
                {
                    If ((Local0 > 0xF0))
                    {
                        Local1 = 0x02
                    }
                    ElseIf ((Local0 < 0x1E))
                    {
                        Local1 = 0x05
                    }
                    Else
                    {
                        Local1 = 0x03
                    }

                    Divide (Local1, 0x04, Local2, Local3)
                    Local3 <<= 0x05
                    Local4 = FD21 /* \_SB_.PCI0.LPCB.SIOR.FD21 */
                    Local4 &= 0xDF
                    FD21 = (Local3 | Local4)
                    Local4 = FDR1 /* \_SB_.PCI0.LPCB.SIOR.FDR1 */
                    Local4 &= 0xCF
                    Local2 <<= 0x04
                    Local4 |= One
                    FDR1 = (Local4 | Local2)
                }

                While ((((Local0 > 0xF0) && (Local1 < 0x05)) || ((Local0 < 
                    0x1E) && (Local1 > 0x02))))
                {
                    If (((Local0 > 0xF0) && (Local1 < 0x05)))
                    {
                        Local1 += One
                        Divide (Local1, 0x04, Local2, Local3)
                        BSEL = Zero
                        Local3 <<= 0x05
                        Local4 = FD21 /* \_SB_.PCI0.LPCB.SIOR.FD21 */
                        Local4 &= 0xDF
                        FD21 = (Local3 | Local4)
                        Local4 = FDR1 /* \_SB_.PCI0.LPCB.SIOR.FDR1 */
                        Local4 &= 0xCF
                        Local2 <<= 0x04
                        Local4 |= One
                        FDR1 = (Local4 | Local2)
                        Sleep (0x32)
                        Local0 = FAN1 /* \_SB_.PCI0.LPCB.SIOR.FAN1 */
                        Sleep (0x32)
                        Local0 = FAN1 /* \_SB_.PCI0.LPCB.SIOR.FAN1 */
                        Sleep (0x32)
                        Local0 = FAN1 /* \_SB_.PCI0.LPCB.SIOR.FAN1 */
                    }
                    Else
                    {
                        Local1 -= One
                        Divide (Local1, 0x04, Local2, Local3)
                        BSEL = Zero
                        Local3 <<= 0x05
                        Local4 = FD21 /* \_SB_.PCI0.LPCB.SIOR.FD21 */
                        Local4 &= 0xDF
                        FD21 = (Local3 | Local4)
                        Local4 = FDR1 /* \_SB_.PCI0.LPCB.SIOR.FDR1 */
                        Local4 &= 0xCF
                        Local2 <<= 0x04
                        Local4 |= One
                        FDR1 = (Local4 | Local2)
                        Sleep (0x32)
                        Local0 = FAN1 /* \_SB_.PCI0.LPCB.SIOR.FAN1 */
                        Sleep (0x32)
                        Local0 = FAN1 /* \_SB_.PCI0.LPCB.SIOR.FAN1 */
                        Sleep (0x32)
                        Local0 = FAN1 /* \_SB_.PCI0.LPCB.SIOR.FAN1 */
                    }
                }

                If (((Local0 == 0xFF) && (Local1 == 0x05)))
                {
                    Return (Zero)
                }

                If (((Local0 == Zero) && (Local1 == 0x02)))
                {
                    Return (0xFFFF)
                }

                Local2 = One
                While (Local1)
                {
                    Local2 *= 0x02
                    Local1--
                }

                Local0 *= Local2
                Divide (0x00149970, Local0, Local1, Local0)
                Return (Local0)
            }

            Method (HWF1, 0, NotSerialized)
            {
                BSEL = Zero
                Local0 = FAN2 /* \_SB_.PCI0.LPCB.SIOR.FAN2 */
                Local1 = (FD21 & 0x40)
                Local1 >>= 0x06
                Local1 *= 0x04
                Local2 = (FDR1 & 0xC0)
                Local2 >>= 0x06
                Local1 += Local2
                If (((Local1 > 0x05) || (Local1 < 0x02)))
                {
                    If ((Local0 > 0xF0))
                    {
                        Local1 = 0x02
                    }
                    ElseIf ((Local0 < 0x1E))
                    {
                        Local1 = 0x05
                    }
                    Else
                    {
                        Local1 = 0x03
                    }

                    Divide (Local1, 0x04, Local2, Local3)
                    Local3 <<= 0x06
                    Local4 = FD21 /* \_SB_.PCI0.LPCB.SIOR.FD21 */
                    Local4 &= 0xBF
                    FD21 = (Local3 | Local4)
                    Local4 = FDR1 /* \_SB_.PCI0.LPCB.SIOR.FDR1 */
                    Local4 &= 0x3F
                    Local2 <<= 0x06
                    Local4 |= One
                    FDR1 = (Local4 | Local2)
                }

                While ((((Local0 > 0xF0) && (Local1 < 0x05)) || ((Local0 < 
                    0x1E) && (Local1 > 0x02))))
                {
                    If (((Local0 < 0x1E) && (Local1 > 0x02)))
                    {
                        Local1 -= One
                        Divide (Local1, 0x04, Local2, Local3)
                        BSEL = Zero
                        Local3 <<= 0x06
                        Local4 = FD21 /* \_SB_.PCI0.LPCB.SIOR.FD21 */
                        Local4 &= 0xBF
                        FD21 = (Local3 | Local4)
                        Local4 = FDR1 /* \_SB_.PCI0.LPCB.SIOR.FDR1 */
                        Local4 &= 0x3F
                        Local2 <<= 0x06
                        Local4 |= One
                        FDR1 = (Local4 | Local2)
                        Sleep (0x32)
                        BSEL = Zero
                        Local0 = FAN2 /* \_SB_.PCI0.LPCB.SIOR.FAN2 */
                        Sleep (0x32)
                        Local0 = FAN2 /* \_SB_.PCI0.LPCB.SIOR.FAN2 */
                        Sleep (0x32)
                        Local0 = FAN2 /* \_SB_.PCI0.LPCB.SIOR.FAN2 */
                    }
                    Else
                    {
                        Local1 += One
                        Divide (Local1, 0x04, Local2, Local3)
                        BSEL = Zero
                        Local3 <<= 0x06
                        Local4 = FD21 /* \_SB_.PCI0.LPCB.SIOR.FD21 */
                        Local4 &= 0xBF
                        FD21 = (Local3 | Local4)
                        Local4 = FDR1 /* \_SB_.PCI0.LPCB.SIOR.FDR1 */
                        Local4 &= 0x3F
                        Local2 <<= 0x06
                        Local4 |= One
                        FDR1 = (Local4 | Local2)
                        Sleep (0x32)
                        BSEL = Zero
                        Local0 = FAN2 /* \_SB_.PCI0.LPCB.SIOR.FAN2 */
                        Sleep (0x32)
                        Local0 = FAN2 /* \_SB_.PCI0.LPCB.SIOR.FAN2 */
                        Sleep (0x32)
                        Local0 = FAN2 /* \_SB_.PCI0.LPCB.SIOR.FAN2 */
                    }
                }

                If (((Local0 == 0xFF) && (Local1 == 0x05)))
                {
                    Return (Zero)
                }

                If (((Local0 == Zero) && (Local1 == 0x02)))
                {
                    Return (0xFFFF)
                }

                Local2 = One
                While (Local1)
                {
                    Local2 *= 0x02
                    Local1--
                }

                Local0 *= Local2
                Divide (0x00149970, Local0, Local1, Local0)
                Return (Local0)
            }

            Method (HWF2, 0, NotSerialized)
            {
                Local0 = FAN3 /* \_SB_.PCI0.LPCB.SIOR.FAN3 */
                BSEL = Zero
                Local1 = (FD21 & 0x80)
                Local1 >>= 0x07
                Local1 *= 0x04
                Divide (FD13, 0x40, Local2, Local3)
                Local1 += Local3
                If (((Local1 > 0x05) || (Local1 < 0x02)))
                {
                    If ((Local0 > 0xF0))
                    {
                        Local1 = 0x02
                    }
                    ElseIf ((Local0 < 0x1E))
                    {
                        Local1 = 0x05
                    }
                    Else
                    {
                        Local1 = 0x03
                    }

                    Divide (Local1, 0x04, Local2, Local3)
                    Local3 <<= 0x07
                    Local4 = FD21 /* \_SB_.PCI0.LPCB.SIOR.FD21 */
                    Local4 &= 0x7F
                    FD21 = (Local3 | Local4)
                    Local3 = FD13 /* \_SB_.PCI0.LPCB.SIOR.FD13 */
                    Local3 &= 0x3F
                    Local2 *= 0x40
                    Local2 += Local3
                    FD13 = Local2
                }

                While ((((Local0 > 0xF0) && (Local1 < 0x05)) || ((Local0 < 
                    0x1E) && (Local1 > 0x02))))
                {
                    If (((Local0 > 0xF0) && (Local1 < 0x05)))
                    {
                        If ((Local0 == 0xFF))
                        {
                            Local1 = 0x05
                        }
                        Else
                        {
                            Local1 += One
                        }

                        Divide (Local1, 0x04, Local2, Local3)
                        BSEL = Zero
                        Local3 <<= 0x07
                        Local4 = FD21 /* \_SB_.PCI0.LPCB.SIOR.FD21 */
                        Local4 &= 0x7F
                        FD21 = (Local3 | Local4)
                        Local3 = FD13 /* \_SB_.PCI0.LPCB.SIOR.FD13 */
                        Local3 &= 0x3F
                        Local2 *= 0x40
                        Local2 += Local3
                        FD13 = Local2
                        If ((Local0 != 0xFF))
                        {
                            Sleep (0x32)
                        }

                        Local0 = FAN3 /* \_SB_.PCI0.LPCB.SIOR.FAN3 */
                        Sleep (0x32)
                        Local0 = FAN3 /* \_SB_.PCI0.LPCB.SIOR.FAN3 */
                        Sleep (0x32)
                        Local0 = FAN3 /* \_SB_.PCI0.LPCB.SIOR.FAN3 */
                    }
                    Else
                    {
                        Local1 -= One
                        Divide (Local1, 0x04, Local2, Local3)
                        BSEL = Zero
                        Local3 <<= 0x07
                        Local4 = FD21 /* \_SB_.PCI0.LPCB.SIOR.FD21 */
                        Local4 &= 0x7F
                        FD21 = (Local3 | Local4)
                        Local3 = FD13 /* \_SB_.PCI0.LPCB.SIOR.FD13 */
                        Local3 &= 0x3F
                        Local2 *= 0x40
                        Local2 += Local3
                        FD13 = Local2
                        Sleep (0x32)
                        Local0 = FAN3 /* \_SB_.PCI0.LPCB.SIOR.FAN3 */
                        Sleep (0x32)
                        Local0 = FAN3 /* \_SB_.PCI0.LPCB.SIOR.FAN3 */
                        Sleep (0x32)
                        Local0 = FAN3 /* \_SB_.PCI0.LPCB.SIOR.FAN3 */
                    }
                }

                If (((Local0 == 0xFF) && (Local1 == 0x05)))
                {
                    Return (Zero)
                }

                If (((Local0 == Zero) && (Local1 == 0x02)))
                {
                    Return (0xFFFF)
                }

                Local2 = One
                While (Local1)
                {
                    Local2 *= 0x02
                    Local1--
                }

                Local0 *= Local2
                Divide (0x00149970, Local0, Local1, Local0)
                Return (Local0)
            }

            Method (HWF4, 0, NotSerialized)
            {
                BSEL = 0x05
                Local0 = FAN4 /* \_SB_.PCI0.LPCB.SIOR.FAN4 */
                BSEL = Zero
                Local1 = (FND4 & 0x80)
                Local1 >>= 0x08
                Local1 *= 0x04
                Local2 = (FND4 & 0x0C)
                Local2 >>= 0x02
                Local1 += Local2
                If (((Local1 > 0x05) || (Local1 < 0x02)))
                {
                    If ((Local0 > 0xF0))
                    {
                        Local1 = 0x02
                    }
                    ElseIf ((Local0 < 0x1E))
                    {
                        Local1 = 0x05
                    }
                    Else
                    {
                        Local1 = 0x03
                    }

                    Divide (Local1, 0x04, Local2, Local3)
                    Local3 <<= 0x08
                    Local2 <<= 0x02
                    Local4 = FND4 /* \_SB_.PCI0.LPCB.SIOR.FND4 */
                    Local4 &= 0x73
                    Local3 |= Local2
                    FND4 = (Local3 | Local4)
                }

                While ((((Local0 > 0xF0) && (Local1 < 0x05)) || ((Local0 < 
                    0x1E) && (Local1 > 0x02))))
                {
                    If (((Local0 > 0xF0) && (Local1 < 0x05)))
                    {
                        Local1 += One
                        Divide (Local1, 0x04, Local2, Local3)
                        BSEL = Zero
                        Local3 <<= 0x08
                        Local2 <<= 0x02
                        Local4 = FND4 /* \_SB_.PCI0.LPCB.SIOR.FND4 */
                        Local4 &= 0x73
                        Local3 |= Local2
                        FND4 = (Local3 | Local4)
                        If ((Local0 != 0xFF))
                        {
                            Sleep (0x32)
                        }

                        BSEL = 0x05
                        Local0 = FAN4 /* \_SB_.PCI0.LPCB.SIOR.FAN4 */
                        Sleep (0x32)
                        Local0 = FAN4 /* \_SB_.PCI0.LPCB.SIOR.FAN4 */
                        Sleep (0x32)
                        Local0 = FAN4 /* \_SB_.PCI0.LPCB.SIOR.FAN4 */
                        BSEL = Zero
                    }
                    Else
                    {
                        Local1 -= One
                        Divide (Local1, 0x04, Local2, Local3)
                        BSEL = Zero
                        Local3 <<= 0x08
                        Local2 <<= 0x02
                        Local4 = FND4 /* \_SB_.PCI0.LPCB.SIOR.FND4 */
                        Local4 &= 0x73
                        Local3 |= Local2
                        FND4 = (Local3 | Local4)
                        Sleep (0x32)
                        BSEL = 0x05
                        Local0 = FAN4 /* \_SB_.PCI0.LPCB.SIOR.FAN4 */
                        Sleep (0x32)
                        Local0 = FAN4 /* \_SB_.PCI0.LPCB.SIOR.FAN4 */
                        Sleep (0x32)
                        Local0 = FAN4 /* \_SB_.PCI0.LPCB.SIOR.FAN4 */
                        BSEL = Zero
                    }
                }

                If (((Local0 == 0xFF) && (Local1 == 0x05)))
                {
                    Return (Zero)
                }

                If (((Local0 == Zero) && (Local1 == 0x02)))
                {
                    Return (0xFFFF)
                }

                Local2 = One
                While (Local1)
                {
                    Local2 *= 0x02
                    Local1--
                }

                Local0 *= Local2
                Divide (0x00149970, Local0, Local1, Local0)
                Return (Local0)
            }

            Name (FNDT, Package (0x08)
            {
                One, 
                0x02, 
                0x04, 
                0x08, 
                0x10, 
                0x20, 
                0x40, 
                0x80
            })
            Method (HWF3, 0, NotSerialized)
            {
                BSEL = Zero
                Local0 = CFN3 /* \_SB_.PCI0.LPCB.SIOR.CFN3 */
                Local1 = (FD15 & 0x80)
                Local1 >>= 0x05
                Local2 = (FND4 & 0x03)
                Local1 |= Local2
                If (((Local1 > 0x05) || (Local1 < 0x02)))
                {
                    If ((Local0 > 0xF0))
                    {
                        Local1 = 0x02
                    }
                    ElseIf ((Local0 < 0x1E))
                    {
                        Local1 = 0x05
                    }
                    Else
                    {
                        Local1 = 0x03
                    }

                    Local2 = (Local1 << 0x05)
                    Local2 &= 0x80
                    Local3 = (FD15 & 0x7F)
                    Local3 |= Local2
                    FD15 = Local3
                    Local2 = (Local1 & 0x03)
                    Local3 = (FND4 & 0xFC)
                    Local3 |= Local2
                    FND4 = Local3
                }

                While ((((Local0 > 0xF0) && (Local1 < 0x05)) || ((Local0 < 
                    0x1E) && (Local1 > 0x02))))
                {
                    If (((Local0 > 0xF0) && (Local1 < 0x05)))
                    {
                        Local1++
                    }
                    Else
                    {
                        Local1--
                    }

                    Local2 = (Local1 << 0x05)
                    Local2 &= 0x80
                    Local3 = (FD15 & 0x7F)
                    Local3 |= Local2
                    FD15 = Local3
                    Local2 = (Local1 & 0x03)
                    Local3 = (FND4 & 0xFC)
                    Local3 |= Local2
                    FND4 = Local3
                    Sleep (0x32)
                    Local0 = CFN3 /* \_SB_.PCI0.LPCB.SIOR.CFN3 */
                    Sleep (0x32)
                    Local0 = CFN3 /* \_SB_.PCI0.LPCB.SIOR.CFN3 */
                    Sleep (0x32)
                    Local0 = CFN3 /* \_SB_.PCI0.LPCB.SIOR.CFN3 */
                }

                If (((Local0 == 0xFF) && (Local1 == 0x05)))
                {
                    Return (Zero)
                }

                If (((Local0 == Zero) && (Local1 == 0x02)))
                {
                    Return (0xFFFF)
                }

                Local2 = DerefOf (FNDT [Local1])
                Local0 *= Local2
                Divide (0x00149970, Local0, Local1, Local0)
                Return (Local0)
            }

            OperationRegion (HWRE, SystemIO, IOHW, 0x0A)
            Field (HWRE, ByteAcc, NoLock, Preserve)
            {
                Offset (0x05), 
                HIDX,   8, 
                HDAT,   8
            }

            IndexField (HIDX, HDAT, ByteAcc, NoLock, Preserve)
            {
                Offset (0x04), 
                CHNM,   1, 
                CFNM,   1, 
                CHNS,   2, 
                CFNS,   2, 
                Offset (0x05), 
                SYST,   8, 
                TRGT,   8, 
                Offset (0x08), 
                SSDN,   8, 
                CSDN,   8, 
                SSUP,   8, 
                CSUP,   8, 
                Offset (0x20), 
                VCOR,   8, 
                V12V,   8, 
                Offset (0x23), 
                V33V,   8, 
                Offset (0x25), 
                V50V,   8, 
                Offset (0x27), 
                MBTE,   8, 
                FAN1,   8, 
                FAN2,   8, 
                FAN3,   8, 
                Offset (0x3F), 
                CFN3,   8, 
                Offset (0x47), 
                FDR1,   8, 
                Offset (0x4B), 
                FD13,   8, 
                FD15,   8, 
                Offset (0x4E), 
                BSEL,   3, 
                Offset (0x4F), 
                Offset (0x50), 
                TSR1,   8, 
                    ,   7, 
                TSR2,   1, 
                Offset (0x53), 
                FAN4,   8, 
                Offset (0x59), 
                FND4,   8, 
                Offset (0x5D), 
                FD21,   8
            }
        }

        Device (ASOC)
        {
            Name (_HID, "ATK0110")  // _HID: Hardware ID
            Name (VPAR, Package (0x04)
            {
                Package (0x03)
                {
                    Zero, 
                    One, 
                    Zero
                }, 

                Package (0x03)
                {
                    0x22, 
                    0x22, 
                    Zero
                }, 

                Package (0x03)
                {
                    0x14, 
                    0x0A, 
                    Zero
                }, 

                Package (0x03)
                {
                    0x3C, 
                    0x0A, 
                    Zero
                }
            })
            Method (VGET, 1, NotSerialized)
            {
                If ((Arg0 == Zero))
                {
                    Return (^^SIOR.HWV0 ())
                }

                If ((Arg0 == One))
                {
                    Return (^^SIOR.HWV3 ())
                }

                If ((Arg0 == 0x02))
                {
                    Return (^^SIOR.HWV5 ())
                }

                If ((Arg0 == 0x03))
                {
                    Return (^^SIOR.HWV1 ())
                }

                Return (Zero)
            }

            Method (TGET, 1, NotSerialized)
            {
                If ((Arg0 == Zero))
                {
                    Return (^^SIOR.HWT1 ())
                }

                If ((Arg0 == One))
                {
                    Return (^^SIOR.HWT0 ())
                }

                Return (Zero)
            }

            Method (FGET, 1, NotSerialized)
            {
                If ((Arg0 == Zero))
                {
                    Return (^^SIOR.HWF1 ())
                }

                If ((Arg0 == One))
                {
                    Return (^^SIOR.HWF2 ())
                }

                If ((Arg0 == 0x02))
                {
                    Return (^^SIOR.HWF4 ())
                }

                If ((Arg0 == 0x03))
                {
                    Return (^^SIOR.HWF0 ())
                }

                If ((Arg0 == 0x04))
                {
                    Return (^^SIOR.HWF3 ())
                }

                Return (Zero)
            }

            Method (RVLT, 1, NotSerialized)
            {
                Local0 = (Arg0 & 0xFFFF)
                Local1 = VGET (Local0)
                Local2 = DerefOf (DerefOf (VPAR [Local0]) [Zero])
                Local3 = DerefOf (DerefOf (VPAR [Local0]) [One])
                Local4 = DerefOf (DerefOf (VPAR [Local0]) [0x02])
                Local5 = (Local1 * (Local2 + Local3))
                Local5 /= Local3
                Local5 += Local4
                Return (Local5)
            }

            Method (RTMP, 1, NotSerialized)
            {
                Local0 = (Arg0 & 0xFFFF)
                Local1 = TGET (Local0)
                Return (Local1)
            }

            Method (RFAN, 1, NotSerialized)
            {
                Local0 = (Arg0 & 0xFFFF)
                Local1 = FGET (Local0)
                Return (Local1)
            }
        }

        Device (FSAM)
        {
            Name (_HID, EisaId ("APP0111"))  // _HID: Hardware ID
            Name (_CID, "monitor")  // _CID: Compatible ID
            Method (TSYS, 0, NotSerialized)
            {
                Local1 = \_SB.PCI0.LPCB.ASOC.RTMP (One)
                Return ((Local1 / 0x0A))
            }

            Method (TCPU, 0, NotSerialized)
            {
                Local1 = \_SB.PCI0.LPCB.ASOC.RTMP (Zero)
                Return ((Local1 / 0x0A))
            }

            Method (VCPU, 0, NotSerialized)
            {
                Return (\_SB.PCI0.LPCB.ASOC.RVLT (Zero))
            }

            Method (VP0R, 0, NotSerialized)
            {
                Return (\_SB.PCI0.LPCB.ASOC.RVLT (0x03))
            }

            Method (VSN3, 0, NotSerialized)
            {
                Return (\_SB.PCI0.LPCB.ASOC.RVLT (One))
            }

            Method (VSN1, 0, NotSerialized)
            {
                Return (\_SB.PCI0.LPCB.ASOC.RVLT (0x02))
            }

            Method (FAN0, 0, NotSerialized)
            {
                Return (\_SB.PCI0.LPCB.ASOC.RFAN (Zero))
            }

            Method (FAN1, 0, NotSerialized)
            {
                Return (\_SB.PCI0.LPCB.ASOC.RFAN (One))
            }

            Method (FAN2, 0, NotSerialized)
            {
                Return (\_SB.PCI0.LPCB.ASOC.RFAN (0x02))
            }
        }
    }
}

 

@Rodion2010

It would help, if you could provide the following information:

- FakeSMC or VirtualSMC?

- Does this work with Istat as well?

 

I have a perfect solution for FakeSMC plus Sensors.... So I am looking for options around that utilize VirtualSMC, particularly with IStat, since I moved from Clover to OpenCore.

If that is what you provided, how to tweak your SSDT for other systems?

 

Regards, Mike

19 hours ago, Mike Ranger said:

@Rodion2010

It would help, if you could provide the following information:

- FakeSMC or VirtualSMC?

- Does this work with Istat as well?

 

I have a perfect solution for FakeSMC plus Sensors.... So I am looking for options around that utilize VirtualSMC, particularly with IStat, since I moved from Clover to OpenCore.

If that is what you provided, how to tweak your SSDT for other systems?

 

Regards, Mike

1 FakeSMC + ACPIMonitor from here https://github.com/CloverHackyColor/FakeSMC3_with_plugins

2 yes

There is no ACPIMonitor for VSMC yet

yes... the current strategy seems the SuperIO.

I am looking for a solution for the SuperIO because I am using OpenCore.

OpenCore officially does not support FakeSMC anymore.

 

SuperIO seems to provide the raw-data.... drivers are missing... so only HWSensors apps are fully working.

 

Regards, Mike

5 hours ago, Rodion2010 said:

Where is this info from? FakeSMC can be loaded by OpenCore exactly as any other kext

Well.... if you read the documentation, it tells me that everything around FakeSMC might work but then it might not.

The use of FakeSMC is certainly not encouraged.... so.... with further development of OpenCore, things might actually break with FakeSMC.

 

 

1 hour ago, Mike Ranger said:

... if you read the documentation,

 

what , more exactly, " tells me that everything around FakeSMC might work but then it might not."

https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/Configuration.pdf

  1. SmcRevision
    Type: plist data, 6 bytes
    Failsafe: Not installed
    Description: Sets REV in gEfiMiscSubClassGuid. Custom property read by VirtualSMC or FakeSMC to generate SMC REV key.

  2. SmcBranch
    Type: plist data, 8 bytes
    Failsafe: Not installed
    Description: Sets RBr in gEfiMiscSubClassGuid. Custom property read by VirtualSMC or FakeSMC to generate SMC RBr key.

  3. SmcPlatform
    Type: plist data, 8 bytes
    Failsafe: Not installed
    Description: Sets RPlt in gEfiMiscSubClassGuid. Custom property read by VirtualSMC or FakeSMC to generate SMC RPlt key.

  4.  

    1. AppleSmcIo
      Type: plist boolean

    Description: Reinstalls Apple SMC I/O protocol with a builtin version.

    This protocol replaces legacy VirtualSmc UEFI driver, and is compatible with any SMC kernel extension. However, in case FakeSMC kernel extension is used, manual NVRAM key variable addition may be needed.

     

    no more results for FakeSMC and we may use any of them

    What documentation do you read?

Edited by Rodion2010
18 hours ago, Mike Ranger said:

Well.... if you read the documentation, it tells me that everything around FakeSMC might work but then it might not.

 

 

answer from the author:

"There are no compatibility restrictions with Apple SMC / FakeSMC / VirtualSMC."

I think he knows better ))

Edited by Rodion2010
  • 4 weeks later...
6 hours ago, vector sigma said:

Care to update your bootloader as is not showing the motherboard name? Say that because without OEM informations the configuration will not be automatically detected.

I'm using the OpenCore 0.5.5 bootloader, not sure what I need to do?

 

On 2/18/2020 at 4:40 AM, vector sigma said:

Thanks to had taken the time to ensure fans connectors are right. The file is identical on what it's already on Github..

 

@vector sigma

  Please take a look. My motherboard is MSI B360M BAZOOKA PlUS, Clover boot, VirtualSMC.kext and its sensors. Now the name of the motherboard is correctly identified, but each voltage value is wrong. Use AIDA64 to check the sensor model is Nuvoton NCT6797D-M , What should I do to get the correct voltage value and fans value?

MSI.thumb.png.72c3772132737876b867153afc1a774f.png

 

1964997679_MSIAIDA64.png.c9531c42bc1a0297abf45d2288ea3ecb.png

×
×
  • Create New...