2010-11-30 8 views
6

मैंने this .NET program का उपयोग HKLM/Hardware/ACPI/DSDT पर विंडोज रजिस्ट्री के बाइनरी डंप करने के लिए किया था।मुझे इस एसीपीआई स्रोत भाषा कोड को समझने में मदद करें?

फिर, चल माइक्रोसॉफ्ट के ASL Compiler उस पर, मैं प्राप्त कर सकते हैं इस ACPI स्रोत भाषा:

Scope(\_TZ_) 
{ 
    Name(TBSE, 0xaac) 
    Name(CRT0, 0x0) 
    Name(PSV0, 0x0) 
    ThermalZone(TZS0) 
    { 
     Method(_TMP, 0x0, NotSerialized) 
     { 
      If(\ECON) 
      { 
       Store(\_SB_.PCI0.LPC0.EC0_.THS0, Local0) 
       Store(\_SB_.PCI0.LPC0.EC0_.KCSS, Local1) 
       Store(\_SB_.PCI0.LPC0.EC0_.KOSD, Local2) 
      } 
      Else 
      { 
       Store(RBEC(0x92), Local0) 
       And(Local0, 0x1, Local1) 
       And(Local0, 0x8, Local2) 
       Store(RBEC(0xa8), Local0) 
      } 
      If(Local1) 
      { 
       Add(PSV0, 0x1, Local0) 
      } 
      If(Local2) 
      { 
       If(LNot(LGreater(Local0, CRT0))) 
       { 
        Add(CRT0, 0x2, Local0) 
       } 
      } 
      Return(C2K_(Local0)) 
     } 
     Method(_HOT, 0x0, NotSerialized) 
     { 
      If(LEqual(OSYS, 0x7d6)) 
      { 
       If(\ECON) 
       { 
        Store(0x20, \_SB_.PCI0.LPC0.EC0_.TIID) 
        Store(\_SB_.PCI0.LPC0.EC0_.TSC0, Local0) 
       } 
       Else 
       { 
        WBEC(0x1, 0x20) 
        Store(RBEC(0xd1), Local0) 
       } 
       If(LOr(LNot(LLess(Local0, 0x80)), LLess(Local0, 0x1e))) 
       { 
        Store(0x78, Local0) 
       } 
       Store(Local0, CRT0) 
       Return(C2K_(Local0)) 
      } 
      Else 
      { 
       Return(C2K_(0x78)) 
      } 
     } 
     Method(_CRT, 0x0, NotSerialized) 
     { 
      If(LNot(LEqual(OSYS, 0x7d6))) 
      { 
       If(\ECON) 
       { 
        Store(0x20, \_SB_.PCI0.LPC0.EC0_.TIID) 
        Store(\_SB_.PCI0.LPC0.EC0_.TSC0, Local0) 
       } 
       Else 
       { 
        WBEC(0x1, 0x20) 
        Store(RBEC(0xd1), Local0) 
       } 
       If(LOr(LNot(LLess(Local0, 0x80)), LLess(Local0, 0x1e))) 
       { 
        Store(0x78, Local0) 
       } 
       Store(Local0, CRT0) 
       Return(C2K_(Local0)) 
      } 
      Else 
      { 
       Return(C2K_(0x78)) 
      } 
     } 
     Name(_PSL, Package(0x1) 
     { 
      \_PR_.CPU0 
     }) 
     Method(_PSV, 0x0, NotSerialized) 
     { 
      If(\ECON) 
      { 
       Store(0x20, \_SB_.PCI0.LPC0.EC0_.TIID) 
       Store(\_SB_.PCI0.LPC0.EC0_.TSP0, Local0) 
      } 
      Else 
      { 
       WBEC(0x1, 0x20) 
       Store(RBEC(0xd0), Local0) 
      } 
      If(LOr(LNot(LLess(Local0, 0x80)), LLess(Local0, 0x1e))) 
      { 
       Store(0x5a, Local0) 
      } 
      Store(Local0, PSV0) 
      Return(C2K_(Local0)) 
     } 
     Name(_TC1, 0x4) 
     Name(_TC2, 0x3) 
     Name(_TSP, 0x96) 
     Method(FMAX, 0x0, NotSerialized) 
     { 
      If(\ECON) 
      { 
       Store(0x40, \_SB_.PCI0.LPC0.EC0_.TIID) 
       Store(\_SB_.PCI0.LPC0.EC0_.TSP3, Local0) 
      } 
      Else 
      { 
       WBEC(0x1, 0x40) 
       Store(RBEC(0xd6), Local0) 
      } 
      Return(FSTL(Local0)) 
     } 
     Method(FMIN, 0x0, NotSerialized) 
     { 
      If(\ECON) 
      { 
       Store(0x40, \_SB_.PCI0.LPC0.EC0_.TIID) 
       Store(\_SB_.PCI0.LPC0.EC0_.TSP0, Local0) 
      } 
      Else 
      { 
       WBEC(0x1, 0x40) 
       Store(RBEC(0xd0), Local0) 
      } 
      Return(FSTL(Local0)) 
     } 
     Method(FRSP, 0x0, NotSerialized) 
     { 
      If(\ECON) 
      { 
       Store(\_SB_.PCI0.LPC0.EC0_.FSR1, Local0) 
      } 
      Else 
      { 
       Store(RBEC(0x95), Local0) 
      } 
      Return(FSTL(Local0)) 
     } 
     Method(FSSP, 0x1, NotSerialized) 
     { 
      If(LEqual(Arg0, 0x0)) 
      { 
       If(\ECON) 
       { 
        Store(0x1, \_SB_.PCI0.LPC0.EC0_.FSHC) 
        Sleep(0x64) 
        Store(0xff, \_SB_.PCI0.LPC0.EC0_.FSW1) 
       } 
       Else 
       { 
        Store(RBEC(0x93), Local0) 
        Or(Local0, 0x10, Local0) 
        WBEC(0x93, Local0) 
        Sleep(0x64) 
        WBEC(0x94, 0xff) 
       } 
      } 
      Else 
      { 
       If(\ECON) 
       { 
        Store(0x0, \_SB_.PCI0.LPC0.EC0_.FSHC) 
       } 
       Else 
       { 
        WBEC(0x93, 0x0) 
       } 
      } 
     } 
     Method(FSTL, 0x1, NotSerialized) 
     { 
      If(LOr(LEqual(Arg0, 0x0), LEqual(Arg0, 0xff))) 
      { 
       Store(Zero, Local1) 
      } 
      Else 
      { 
       Divide(0x78000, Arg0, Local0, Local1) 
      } 
      Return(Local1) 
     } 
    } 
    .... 

मैं केवल बिट और टुकड़े को समझते हैं। टीजेड थर्मल जोन (मुझे लगता है) को समर्पित एक दायरे को संदर्भित करता है।

ACPI Spec पढ़ने से, मुझे लगता है कि _HOT और _CRT तापमान थ्रेसहोल्ड से संबंधित ओएसपीएम ऑब्जेक्ट्स हैं।

_HOT वस्तु महत्वपूर्ण तापमान जिस पर OSPM एस 4 सो राज्य में प्रणाली संक्रमण के लिए, यदि समर्थित चुन सकते हैं वाणी; _CRT ऑब्जेक्ट महत्वपूर्ण तापमान घोषित करता है जिस पर ओएसपीएम को महत्वपूर्ण शट डाउन करना होगा।

तो मैं DSDT की कि स्निप लगाना कर रहा हूँ लैपटॉप प्रशंसक थर्मल क्षेत्र 0. में महसूस तापमान के आधार पर है कि मेरा अनुमान है कि यह है कि इसके बाद के संस्करण में FSTL फैन है पर निर्भर करता है गति से छेड़छाड़ के साथ कुछ है -सेट-स्तर या कुछ समान, और FMAX और FMIN क्रमशः फैन-मैक्स-स्पीड और -इन-स्पीड हैं। मुझे लगता है कि C2K एक कन्वर्ट-टू-केल्विन फ़ंक्शन है। इसके अलावा मैं अनुमानों के आधार पर अनुमान लगा रहा हूं।

संपादित करें: दोबारा समीक्षा करने के, _PSL निष्क्रिय सूची है, जो निष्क्रिय तापमान नियंत्रण उपकरणों की एक सूची देता है (ACPI युक्ति के अनुसार) है। जहां प्रशंसकों को "सक्रिय" तापमान नियंत्रण माना जाता है, "निष्क्रिय" अस्थायी नियंत्रण का एक उदाहरण वोल्टेज या एक सीपीयू पर गति को बदल देगा। तो मुझे यकीन नहीं है कि यह अनुभाग प्रशंसक को बिल्कुल नियंत्रित करता है। यह पूरी तरह से निष्क्रिय अस्थायी नियंत्रण के लिए समर्पित किया जा सकता है।


जो मैं करने की कोशिश कर रहा हूं वह लैपटॉप प्रशंसक गति को संशोधित करता है जो विभिन्न तापमानों के लिए उपयोग किया जाता है। कुछ डीएसडीटी में, अस्थायी और प्रशंसक की गति के बीच मैपिंग एक साफ छोटी मेज में है, और मैपिंग को संशोधित करना केवल कुछ संख्याओं को बदलने का मामला है। ऐसा नहीं लगता है कि इस एएसएल फ़ाइल में ऐसी एक सारणी है, इसलिए मुझे लगता है कि मैपिंग करने वाले कुछ प्रोग्राम तर्क होना चाहिए।

क्या कोई इसे मेरे लिए समझने में मदद कर सकता है?


मैं वास्तव में क्या करने की कोशिश कर रहा हूं वह प्रशंसक को एचपी जी 60-244 डीएक्स लैपटॉप पर आराम करने के लिए मिलता है। सीपीयू निष्क्रिय होने पर भी यह बहुत जोर से चलता है, और ... यदि यह मेरे पिछले एचपी एनसी 8430 लैपटॉप की तरह है, तो प्रशंसक की गति अनावश्यक रूप से ऊंची है। प्रशंसक की गति को कम करना संभव है, फिर भी सीपीयू तापमान को वही रखें।

मुझे लगता है कि प्रशंसक गति को संशोधित करने के लिए मुझे डीएसडीटी को पैच करने की आवश्यकता है, और यही कारण है कि मैं उपरोक्त को समझना चाहता हूं।

बहुत धन्यवाद।


संभवतः संबंधित:
Setting an ACPI field in Linux

+0

[स्पीडफ़ान] (http://www.almico.com/speedfan.php) इसे आपके लिए करने के लिए आसान नहीं होगा? – kichik

+0

हाँ यह होगा! अगर स्पीडफ़ान वास्तव में इस प्रकार के पीसी के लिए काम करता है। मैंने इसे चलाया और यह मुझे temps बताता है, लेकिन मुझे कुछ भी बदलने नहीं देता है। – Cheeso

उत्तर

0

मेरा HP dm1-3100ev पर एक ही प्रक्रिया के प्रयास में इस जबकि बारे में जाना। कोई प्रत्यक्ष प्रशंसक गति सेटिंग नहीं है, इसकी गणना कोड में की जानी चाहिए। निकटतम खोज एफएमआईएन और एफएमएक्स सेटिंग्स की तरह कुछ है, क्रमशः 20 और 56 पर सेट है (क्या यह न्यूनतम और अधिकतम प्रशंसक गति के लिए तापमान सीमा की तरह दिखता नहीं है?) उन लोगों को बदलना काम नहीं करता है, हालांकि (हो सकता है कि एचपी कूलसेंस चीजों को ओवरराइड कर रहा हो)।

अगर मैं कुछ भी ढूंढने का प्रबंधन करता हूं तो मैं आपको बता दूंगा!

संपादित करें: मैं गलत था, एफएमआईएन और एफएमएक्स क्रमशः न्यूनतम और अधिकतम प्रशंसक गति निर्दिष्ट करता है: 2000 और 5600। दुर्भाग्यवश, उनको बदलना अभी भी काम नहीं करता है।

संबंधित मुद्दे