2 * This file is part of the coreboot project.
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; version 2 of the License.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
15 /* PCIe Configuration Space for CONFIG_MMCONF_BUS_NUMBER busses */
16 OperationRegion(PCFG, SystemMemory, PCBA, PCLN) /* Each bus consumes 1MB */
17 Field(PCFG, ByteAcc, NoLock, Preserve) {
18 /* Byte offsets are computed using the following technique:
19 * ((bus number + 1) * ((device number * 8) * 4096)) + register offset
20 * The 8 comes from 8 functions per device, and 4096 bytes per function config space
22 Offset(0x00088024), /* Byte offset to SATA register 24h - Bus 0, Device 17, Function 0 */
24 Offset(0x00098042), /* Byte offset to OHCI0 register 42h - Bus 0, Device 19, Function 0 */
35 Offset(0x000a0004), /* Byte offset to SMBUS register 4h - Bus 0, Device 20, Function 0 */
38 Offset(0x000a0008), /* Byte offset to SMBUS register 8h - Bus 0, Device 20, Function 0 */
40 Offset(0x000a0014), /* Byte offset to SMBUS register 14h - Bus 0, Device 20, Function 0 */
42 Offset(0x000a0078), /* Byte offset to SMBUS register 78h - Bus 0, Device 20, Function 0 */
44 P92E, 1, /* Port92 decode enable */
47 OperationRegion(SB5, SystemMemory, STB5, 0x1000)
48 Field(SB5, AnyAcc, NoLock, Preserve){
50 Offset(0x120), /* Port 0 Task file status */
56 Offset(0x128), /* Port 0 Serial ATA status */
60 Offset(0x12c), /* Port 0 Serial ATA control */
62 Offset(0x130), /* Port 0 Serial ATA error */
67 offset(0x1a0), /* Port 1 Task file status */
73 Offset(0x1a8), /* Port 1 Serial ATA status */
77 Offset(0x1ac), /* Port 1 Serial ATA control */
79 Offset(0x1b0), /* Port 1 Serial ATA error */
84 Offset(0x220), /* Port 2 Task file status */
90 Offset(0x228), /* Port 2 Serial ATA status */
94 Offset(0x22c), /* Port 2 Serial ATA control */
96 Offset(0x230), /* Port 2 Serial ATA error */
101 Offset(0x2a0), /* Port 3 Task file status */
107 Offset(0x2a8), /* Port 3 Serial ATA status */
111 Offset(0x2aC), /* Port 3 Serial ATA control */
113 Offset(0x2b0), /* Port 3 Serial ATA error */
118 Method(_PIC, 0x01, NotSerialized)
127 Method(CIRQ, 0x00, NotSerialized){
130 Name(IRQB, ResourceTemplate(){
131 IRQ(Level,ActiveLow,Shared){15}
134 Name(IRQP, ResourceTemplate(){
135 IRQ(Level,ActiveLow,Exclusive){3, 4, 5, 7, 10, 11, 12, 15}
138 Name(PITF, ResourceTemplate(){
139 IRQ(Level,ActiveLow,Exclusive){9}
143 Name(_HID, EISAID("PNP0C0F"))
148 Return(0x0b) /* sata is invisible */
150 Return(0x09) /* sata is disabled */
152 } /* End Method(_SB.INTA._STA) */
155 /* DBGO("\\_SB\\LNKA\\_DIS\n") */
156 } /* End Method(_SB.INTA._DIS) */
159 /* DBGO("\\_SB\\LNKA\\_PRS\n") */
161 } /* Method(_SB.INTA._PRS) */
164 /* DBGO("\\_SB\\LNKA\\_CRS\n") */
165 CreateWordField(IRQB, 0x1, IRQN)
166 ShiftLeft(1, PIRA, IRQN)
168 } /* Method(_SB.INTA._CRS) */
171 /* DBGO("\\_SB\\LNKA\\_SRS\n") */
172 CreateWordField(ARG0, 1, IRQM)
174 /* Use lowest available IRQ */
175 FindSetRightBit(IRQM, Local0)
180 } /* End Method(_SB.INTA._SRS) */
181 } /* End Device(INTA) */
184 Name(_HID, EISAID("PNP0C0F"))
189 Return(0x0b) /* sata is invisible */
191 Return(0x09) /* sata is disabled */
193 } /* End Method(_SB.INTB._STA) */
196 /* DBGO("\\_SB\\LNKB\\_DIS\n") */
197 } /* End Method(_SB.INTB._DIS) */
200 /* DBGO("\\_SB\\LNKB\\_PRS\n") */
202 } /* Method(_SB.INTB._PRS) */
205 /* DBGO("\\_SB\\LNKB\\_CRS\n") */
206 CreateWordField(IRQB, 0x1, IRQN)
207 ShiftLeft(1, PIRB, IRQN)
209 } /* Method(_SB.INTB._CRS) */
212 /* DBGO("\\_SB\\LNKB\\_CRS\n") */
213 CreateWordField(ARG0, 1, IRQM)
215 /* Use lowest available IRQ */
216 FindSetRightBit(IRQM, Local0)
221 } /* End Method(_SB.INTB._SRS) */
222 } /* End Device(INTB) */
225 Name(_HID, EISAID("PNP0C0F"))
230 Return(0x0b) /* sata is invisible */
232 Return(0x09) /* sata is disabled */
234 } /* End Method(_SB.INTC._STA) */
237 /* DBGO("\\_SB\\LNKC\\_DIS\n") */
238 } /* End Method(_SB.INTC._DIS) */
241 /* DBGO("\\_SB\\LNKC\\_PRS\n") */
243 } /* Method(_SB.INTC._PRS) */
246 /* DBGO("\\_SB\\LNKC\\_CRS\n") */
247 CreateWordField(IRQB, 0x1, IRQN)
248 ShiftLeft(1, PIRC, IRQN)
250 } /* Method(_SB.INTC._CRS) */
253 /* DBGO("\\_SB\\LNKC\\_CRS\n") */
254 CreateWordField(ARG0, 1, IRQM)
256 /* Use lowest available IRQ */
257 FindSetRightBit(IRQM, Local0)
262 } /* End Method(_SB.INTC._SRS) */
263 } /* End Device(INTC) */
266 Name(_HID, EISAID("PNP0C0F"))
271 Return(0x0b) /* sata is invisible */
273 Return(0x09) /* sata is disabled */
275 } /* End Method(_SB.INTD._STA) */
278 /* DBGO("\\_SB\\LNKD\\_DIS\n") */
279 } /* End Method(_SB.INTD._DIS) */
282 /* DBGO("\\_SB\\LNKD\\_PRS\n") */
284 } /* Method(_SB.INTD._PRS) */
287 /* DBGO("\\_SB\\LNKD\\_CRS\n") */
288 CreateWordField(IRQB, 0x1, IRQN)
289 ShiftLeft(1, PIRD, IRQN)
291 } /* Method(_SB.INTD._CRS) */
294 /* DBGO("\\_SB\\LNKD\\_CRS\n") */
295 CreateWordField(ARG0, 1, IRQM)
297 /* Use lowest available IRQ */
298 FindSetRightBit(IRQM, Local0)
303 } /* End Method(_SB.INTD._SRS) */
304 } /* End Device(INTD) */
307 Name(_HID, EISAID("PNP0C0F"))
312 Return(0x0b) /* sata is invisible */
314 Return(0x09) /* sata is disabled */
316 } /* End Method(_SB.INTE._STA) */
319 /* DBGO("\\_SB\\LNKE\\_DIS\n") */
320 } /* End Method(_SB.INTE._DIS) */
323 /* DBGO("\\_SB\\LNKE\\_PRS\n") */
325 } /* Method(_SB.INTE._PRS) */
328 /* DBGO("\\_SB\\LNKE\\_CRS\n") */
329 CreateWordField(IRQB, 0x1, IRQN)
330 ShiftLeft(1, PIRE, IRQN)
332 } /* Method(_SB.INTE._CRS) */
335 /* DBGO("\\_SB\\LNKE\\_CRS\n") */
336 CreateWordField(ARG0, 1, IRQM)
338 /* Use lowest available IRQ */
339 FindSetRightBit(IRQM, Local0)
344 } /* End Method(_SB.INTE._SRS) */
345 } /* End Device(INTE) */
348 Name(_HID, EISAID("PNP0C0F"))
353 Return(0x0b) /* sata is invisible */
355 Return(0x09) /* sata is disabled */
357 } /* End Method(_SB.INTF._STA) */
360 /* DBGO("\\_SB\\LNKF\\_DIS\n") */
361 } /* End Method(_SB.INTF._DIS) */
364 /* DBGO("\\_SB\\LNKF\\_PRS\n") */
366 } /* Method(_SB.INTF._PRS) */
369 /* DBGO("\\_SB\\LNKF\\_CRS\n") */
370 CreateWordField(IRQB, 0x1, IRQN)
371 ShiftLeft(1, PIRF, IRQN)
373 } /* Method(_SB.INTF._CRS) */
376 /* DBGO("\\_SB\\LNKF\\_CRS\n") */
377 CreateWordField(ARG0, 1, IRQM)
379 /* Use lowest available IRQ */
380 FindSetRightBit(IRQM, Local0)
385 } /* End Method(_SB.INTF._SRS) */
386 } /* End Device(INTF) */
389 Name(_HID, EISAID("PNP0C0F"))
394 Return(0x0b) /* sata is invisible */
396 Return(0x09) /* sata is disabled */
398 } /* End Method(_SB.INTG._STA) */
401 /* DBGO("\\_SB\\LNKG\\_DIS\n") */
402 } /* End Method(_SB.INTG._DIS) */
405 /* DBGO("\\_SB\\LNKG\\_PRS\n") */
407 } /* Method(_SB.INTG._CRS) */
410 /* DBGO("\\_SB\\LNKG\\_CRS\n") */
411 CreateWordField(IRQB, 0x1, IRQN)
412 ShiftLeft(1, PIRG, IRQN)
414 } /* Method(_SB.INTG._CRS) */
417 /* DBGO("\\_SB\\LNKG\\_CRS\n") */
418 CreateWordField(ARG0, 1, IRQM)
420 /* Use lowest available IRQ */
421 FindSetRightBit(IRQM, Local0)
426 } /* End Method(_SB.INTG._SRS) */
427 } /* End Device(INTG) */
430 Name(_HID, EISAID("PNP0C0F"))
435 Return(0x0b) /* sata is invisible */
437 Return(0x09) /* sata is disabled */
439 } /* End Method(_SB.INTH._STA) */
442 /* DBGO("\\_SB\\LNKH\\_DIS\n") */
443 } /* End Method(_SB.INTH._DIS) */
446 /* DBGO("\\_SB\\LNKH\\_PRS\n") */
448 } /* Method(_SB.INTH._CRS) */
451 /* DBGO("\\_SB\\LNKH\\_CRS\n") */
452 CreateWordField(IRQB, 0x1, IRQN)
453 ShiftLeft(1, PIRH, IRQN)
455 } /* Method(_SB.INTH._CRS) */
458 /* DBGO("\\_SB\\LNKH\\_CRS\n") */
459 CreateWordField(ARG0, 1, IRQM)
461 /* Use lowest available IRQ */
462 FindSetRightBit(IRQM, Local0)
467 } /* End Method(_SB.INTH._SRS) */
468 } /* End Device(INTH) */