2013-07-24 17:56:02 +02:00
|
|
|
/*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
|
|
|
* You should have received a copy of the GNU General Public License along
|
|
|
|
* with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* PCI CRS (current resources) definition. */
|
|
|
|
Scope(\_SB.PCI0) {
|
|
|
|
|
|
|
|
Name(CRES, ResourceTemplate() {
|
|
|
|
WordBusNumber(ResourceProducer, MinFixed, MaxFixed, PosDecode,
|
|
|
|
0x0000, // Address Space Granularity
|
|
|
|
0x0000, // Address Range Minimum
|
|
|
|
0x00FF, // Address Range Maximum
|
|
|
|
0x0000, // Address Translation Offset
|
|
|
|
0x0100, // Address Length
|
|
|
|
,, )
|
|
|
|
IO(Decode16,
|
|
|
|
0x0CF8, // Address Range Minimum
|
|
|
|
0x0CF8, // Address Range Maximum
|
|
|
|
0x01, // Address Alignment
|
|
|
|
0x08, // Address Length
|
|
|
|
)
|
2014-01-09 17:36:35 +01:00
|
|
|
BOARD_SPECIFIC_PCI_RESOURSES
|
2013-07-24 17:56:02 +02:00
|
|
|
DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
|
|
|
|
0x00000000, // Address Space Granularity
|
|
|
|
0x000A0000, // Address Range Minimum
|
|
|
|
0x000BFFFF, // Address Range Maximum
|
|
|
|
0x00000000, // Address Translation Offset
|
|
|
|
0x00020000, // Address Length
|
|
|
|
,, , AddressRangeMemory, TypeStatic)
|
|
|
|
DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite,
|
|
|
|
0x00000000, // Address Space Granularity
|
|
|
|
0xE0000000, // Address Range Minimum
|
|
|
|
0xFEBFFFFF, // Address Range Maximum
|
|
|
|
0x00000000, // Address Translation Offset
|
|
|
|
0x1EC00000, // Address Length
|
|
|
|
,, PW32, AddressRangeMemory, TypeStatic)
|
|
|
|
})
|
|
|
|
|
|
|
|
Name(CR64, ResourceTemplate() {
|
|
|
|
QWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
|
|
|
|
0x00000000, // Address Space Granularity
|
|
|
|
0x8000000000, // Address Range Minimum
|
|
|
|
0xFFFFFFFFFF, // Address Range Maximum
|
|
|
|
0x00000000, // Address Translation Offset
|
|
|
|
0x8000000000, // Address Length
|
|
|
|
,, PW64, AddressRangeMemory, TypeStatic)
|
|
|
|
})
|
|
|
|
|
|
|
|
Method(_CRS, 0) {
|
|
|
|
/* Fields provided by dynamically created ssdt */
|
|
|
|
External(P0S, IntObj)
|
|
|
|
External(P0E, IntObj)
|
|
|
|
External(P1V, IntObj)
|
|
|
|
External(P1S, BuffObj)
|
|
|
|
External(P1E, BuffObj)
|
|
|
|
External(P1L, BuffObj)
|
|
|
|
|
|
|
|
/* fixup 32bit pci io window */
|
|
|
|
CreateDWordField(CRES, \_SB.PCI0.PW32._MIN, PS32)
|
|
|
|
CreateDWordField(CRES, \_SB.PCI0.PW32._MAX, PE32)
|
|
|
|
CreateDWordField(CRES, \_SB.PCI0.PW32._LEN, PL32)
|
|
|
|
Store(P0S, PS32)
|
|
|
|
Store(P0E, PE32)
|
|
|
|
Store(Add(Subtract(P0E, P0S), 1), PL32)
|
|
|
|
|
|
|
|
If (LEqual(P1V, Zero)) {
|
|
|
|
Return (CRES)
|
|
|
|
}
|
|
|
|
|
|
|
|
/* fixup 64bit pci io window */
|
|
|
|
CreateQWordField(CR64, \_SB.PCI0.PW64._MIN, PS64)
|
|
|
|
CreateQWordField(CR64, \_SB.PCI0.PW64._MAX, PE64)
|
|
|
|
CreateQWordField(CR64, \_SB.PCI0.PW64._LEN, PL64)
|
|
|
|
Store(P1S, PS64)
|
|
|
|
Store(P1E, PE64)
|
|
|
|
Store(P1L, PL64)
|
|
|
|
/* add window and return result */
|
|
|
|
ConcatenateResTemplate(CRES, CR64, Local0)
|
|
|
|
Return (Local0)
|
|
|
|
}
|
|
|
|
}
|