⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 link.asl

📁 <B>Award BIOS(Basic Input/Output System)(电脑启动时所必需)的源码</B>
💻 ASL
字号:

        Device(LNKA)	{
                Name(_HID, EISAID("PNP0C0F")) 	// PCI interrupt link
                Name(_UID, 1)
                Method(_STA, 0) {
                               And(PIRA, 0x80, Local0)
                        If(LEqual(Local0, 0x80)) {
                                Return(0x09)	//R01 disabled
                                }
                        Else {
                                Return(0x0B)  	//R01 enabled, but no UI
                                }
                        }

                Method(_PRS) {
                        Name(BUFA, ResourceTemplate() {
                                IRQ(Level, ActiveLow, Shared) {
                                        3,4,5,6,7,9,10,11,12,14,15}
                        }) // Name(BUFA, ...)

                        Return(BUFA)
                } // Method(_PRS)

                Method(_DIS) {
                        Store(1, Local3)
                        And(PIRA, 0x0F, Local1)
                        Store(Local1, Local2)
                        If(LGreater(Local1, 8)) {
                                Subtract(Local1, 8, Local1)
                        }

                        ShiftLeft(Local3, Local1, Local3)
                        Not(Local3, Local3)

                        If(LGreater(Local2, 8)) {
                                And(ELC2, Local3, ELC2)}
                        Else {
                                And(ELC1, Local3, ELC1)}

                               Or(PIRA, 0x80, PIRA)
                }

                Method(_CRS) {
                        Name(BUFA, Buffer(){
                                0x23, 0x00, 0x00, 0x18,

                                0x79, 0})

                        CreateByteField(BUFA, 0x01, IRA1) // IRQ mask 1
                        CreateByteField(BUFA, 0x02, IRA2) // IRQ mask 2

                        Store(0x00, Local3)
                        Store(0x00, Local4)
                        And(PIRA, 0x8F, Local1)
                        If(LLess(Local1, 0x80)) { // Routing enable
                                And(Local1, 0x0F, Local1) // Mask off enable bit
                                If(LGreater(Local1, 0x07)) { // For upper byte mask
                                        Subtract(Local1, 8, Local2) // Adjust it
                                        ShiftLeft(One, Local2, Local4)} // Convert to bit mask
                                Else {If(LGreater(Local1, 0)) { // For lower byte mask
                                        ShiftLeft(One, Local1, Local3)}} // Convert to bit mask
                                Store(Local3, IRA1)     // update buffer
                                Store(Local4, IRA2)
                                }
                        Return(BUFA)
                } // Method(_CRS)

                Method(_SRS, 1) {
                        CreateByteField(ARG0, 0x01, IRA1) // IRQ mask 1
                        CreateByteField(ARG0, 0x02, IRA2) // IRQ mask 2

                        ShiftLeft(IRA2, 8, Local0) // Shift into upper byte
                        Or(Local0, IRA1, Local0)   // Convert to word

                        Store(0, Local1)
                        ShiftRight(Local0, 1, Local0) // Adjust for zero based
                        While(LGreater(Local0, 0)) { // Convert bit position to number
                                Increment(Local1)
                                ShiftRight(Local0, 1, Local0) 
                        }       

                               And(PIRA, 0x70, Local0)
                               Or(Local1, Local0, PIRA)
                } // Method(_SRS)
        }

        Device(LNKB)	{
                Name(_HID, EISAID("PNP0C0F")) 	// PCI interrupt link
                Name(_UID, 2)
                Method(_STA, 0) {
                               And(PIRB, 0x80, Local0)
                        If(LEqual(Local0, 0x80)) {
                                Return(0x09)	//R01 disabled
                                }
                        Else {
                                Return(0x0B)  	//R01 enabled, but no UI
                                }
                        }

                Method(_PRS) {
                        Name(BUFB, ResourceTemplate() {
                                IRQ(Level, ActiveLow, Shared) {
                                        3,4,5,6,7,9,10,11,12,14,15}
                        }) // Name(BUFB, ...)

                        Return(BUFB)
                } // Method(_PRS)

                Method(_DIS) {
                        Store(1, Local3)
                        And(PIRB, 0x0F, Local1)
                        Store(Local1, Local2)
                        If(LGreater(Local1, 8)) {
                                Subtract(Local1, 8, Local1)
                        }

                        ShiftLeft(Local3, Local1, Local3)
                        Not(Local3, Local3)
        
                        If(LGreater(Local2, 8)) {
                                And(ELC2, Local3, ELC2)}
                        Else {
                                And(ELC1, Local3, ELC1)}

                               Or(PIRB, 0x80, PIRB)
                }

                Method(_CRS) {
                        Name(BUFB, Buffer(){
                                0x23, 0x00, 0x00, 0x18,

                                0x79, 0})

                        CreateByteField(BUFB, 0x01, IRB1) // IRQ mask 1
                        CreateByteField(BUFB, 0x02, IRB2) // IRQ mask 2

                        Store(0x00, Local3)
                        Store(0x00, Local4)
                        And(PIRB, 0x8F, Local1)
                        If(LLess(Local1, 0x80)) { // Routing enable
                                And(Local1, 0x0F, Local1) // Mask off enable bit
                                If(LGreater(Local1, 0x07)) { // For upper byte mask
                                        Subtract(Local1, 8, Local2) // Adjust it
                                        ShiftLeft(One, Local2, Local4)} // Convert to bit mask
                                Else {If(LGreater(Local1, 0)) { // For lower byte mask
                                        ShiftLeft(One, Local1, Local3)}} // Convert to bit mask
                                Store(Local3, IRB1)     // update buffer
                                Store(Local4, IRB2)
                                }
                        Return(BUFB)
                } // Method(_CRS)

                Method(_SRS, 1) {
                        CreateByteField(ARG0, 0x01, IRB1) // IRQ mask 1
                        CreateByteField(ARG0, 0x02, IRB2) // IRQ mask 2

                        ShiftLeft(IRB2, 8, Local0) // Shift into upper byte
                        Or(Local0, IRB1, Local0)   // Convert to word

                        Store(0, Local1)
                        ShiftRight(Local0, 1, Local0) // Adjust for zero based
                        While(LGreater(Local0, 0)) { // Convert bit position to number
                                Increment(Local1)
                                ShiftRight(Local0, 1, Local0) 
                        }       

                               And(PIRB, 0x70, Local0)
                               Or(Local1, Local0, PIRB)
                } // Method(_SRS)
        }

        Device(LNKC)	{
                Name(_HID, EISAID("PNP0C0F")) 	// PCI interrupt link
                Name(_UID, 3)
                Method(_STA, 0) {
                               And(PIRC, 0x80, Local0)
                        If(LEqual(Local0, 0x80)) {
                                Return(0x09)	//R01 disabled
                        }
                        Else {
                                Return(0x0B)  	//R01 enabled, but no UI
                        }
                }

                Name(_PRS, ResourceTemplate() {
                        IRQ(Level, ActiveLow, Shared) {
                                3,4,5,6,7,9,10,11,12,14,15}
                }) // Name(_PRS, ...)

                Method(_DIS) {
                        Store(1, Local3)
                        And(PIRC, 0x0F, Local1)
                        Store(Local1, Local2)
                        If(LGreater(Local1, 8)) {
                                Subtract(Local1, 8, Local1)
                        }
                        
                        ShiftLeft(Local3, Local1, Local3)
                        Not(Local3, Local3)
                        
                        If(LGreater(Local2, 8)) {
                                And(ELC2, Local3, ELC2)}
                        Else {
                                And(ELC1, Local3, ELC1)}

                               Or(PIRC, 0x80, PIRC)
                }

                Method(_CRS) {
                        Name(BUFC, Buffer(){
                                0x23, 0x00, 0x00, 0x18,

                                0x79, 0})

                        CreateByteField(BUFC, 0x01, IRC1) // IRQ mask 1
                        CreateByteField(BUFC, 0x02, IRC2) // IRQ mask 2

                        Store(0, Local3)
                        Store(0, Local4)
                               And(PIRC, 0x8F, Local0) // Get register value
                        If(LLess(Local0, 0x80)) { // Routing enable
                                And(Local0, 0x0F, Local0) // Mask off enable bit
                                If(LGreater(Local0, 0x07)) { // For upper byte mask
                                        Subtract(Local0, 8, Local2) // Adjust it
                                        ShiftLeft(One, Local2, Local4)} // Convert to bit mask
                                Else {If(LGreater(Local0, 0)) { // For lower byte mask
                                        ShiftLeft(One, Local0, Local3)}} // Convert to bit mask
                                Store(Local3, IRC1)     // update buffer
                                Store(Local4, IRC2)
                        }

                        Return(BUFC)
                } // Method(_CRS)

                Method(_SRS, 1) {
                        CreateByteField(ARG0, 0x01, IRC1) // IRQ mask 1
                        CreateByteField(ARG0, 0x02, IRC2) // IRQ mask 2

                        ShiftLeft(IRC2, 8, Local0) // Shift into upper byte
                        Or(Local0, IRC1, Local0)   // Convert to word

                        Store(0, Local1)
                        ShiftRight(Local0, 1, Local0) // Adjust for zero based
                        While(LGreater(Local0, 0)) { // Convert bit position to number
                                Increment(Local1)
                                ShiftRight(Local0, 1, Local0) 
                        }       

                               And(PIRC, 0x70, Local0)
                               Or(Local1, Local0, PIRC)
                } // Method(_SRS)
        }

        Device(LNKD)	{
                Name(_HID, EISAID("PNP0C0F")) 	// PCI interrupt link
                Name(_UID, 4)
                Method(_STA, 0) {
                               And(PIRD, 0x80, Local0)
                        If(LEqual(Local0, 0x80)) {
                                Return(0x09)	//R01 disabled
                        }
                        Else {
                                Return(0x0B)  	//R01 enabled, but no UI
                        }
                }

                Name(_PRS, ResourceTemplate() {
                        IRQ(Level, ActiveLow, Shared) {
                                3,4,5,6,7,9,10,11,12,14,15}
                }) // Name(_PRS, ...)

                Method(_DIS) {
                        Store(1, Local3)
                        And(PIRD, 0x0F, Local1)
                        Store(Local1, Local2)
                        If(LGreater(Local1, 8)) {
                                Subtract(Local1, 8, Local1)
                        }
                        
                        ShiftLeft(Local3, Local1, Local3)
                        Not(Local3, Local3)
                        
                        If(LGreater(Local2, 8)) {
                                And(ELC2, Local3, ELC2)}
                        Else {
                                And(ELC1, Local3, ELC1)}
                               Or(PIRD, 0x80, PIRD)
                }

                Method(_CRS) {
                        Name(BUFD, Buffer(){
                                0x23, 0x00, 0x00, 0x18,

                                0x79, 0})

                        CreateByteField(BUFD, 0x01, IRD1) // IRQ mask 1
                        CreateByteField(BUFD, 0x02, IRD2) // IRQ mask 2

                        Store(0, Local3)
                        Store(0, Local4)
                               And(PIRD, 0x8F, Local0) // Get register value
                        If(LLess(Local0, 0x80)) { // Routing enable
                                And(Local0, 0x0F, Local0) // Mask off enable bit
                                If(LGreater(Local0, 0x07)) { // For upper byte mask
                                        Subtract(Local0, 8, Local2) // Adjust it
                                        ShiftLeft(One, Local2, Local4)} // Convert to bit mask
                                Else {If(LGreater(Local0, 0)) { // For lower byte mask
                                        ShiftLeft(One, Local0, Local3)}} // Convert to bit mask
                                Store(Local3, IRD1)     // update buffer
                                Store(Local4, IRD2)
                        }

                        Return(BUFD)
                } // Method(_CRS)

                Method(_SRS, 1) {
                        CreateByteField(ARG0, 0x01, IRD1) // IRQ mask 1
                        CreateByteField(ARG0, 0x02, IRD2) // IRQ mask 2

                        ShiftLeft(IRD2, 8, Local0) // Shift into upper byte
                        Or(Local0, IRD1, Local0)   // Convert to word

                        Store(0, Local1)
                        ShiftRight(Local0, 1, Local0) // Adjust for zero based
                        While(LGreater(Local0, 0)) { // Convert bit position to number
                                Increment(Local1)
                                ShiftRight(Local0, 1, Local0)
                        }       

                               And(PIRD, 0x70, Local0)
                               Or(Local1, Local0, PIRD)
                } // Method(_SRS)
        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -