Author: wmb Date: 2009-06-25 23:13:27 +0200 (Thu, 25 Jun 2009) New Revision: 1222
Added: cpu/x86/pc/olpc/via/acpi.fth cpu/x86/pc/olpc/via/dsdt.dsl cpu/x86/pc/olpc/via/rtcwake.fth Log: Checked in new files
Added: cpu/x86/pc/olpc/via/acpi.fth =================================================================== --- cpu/x86/pc/olpc/via/acpi.fth (rev 0) +++ cpu/x86/pc/olpc/via/acpi.fth 2009-06-25 21:13:27 UTC (rev 1222) @@ -0,0 +1,577 @@ +\ Make some ACPI descriptor tables + +h# 0. 2constant xsdt-adr + +create fadt +( 000 4 ) " FACP" $, \ Signature +( 004 4 ) h# 84 l, \ Table Length +( 008 1 ) h# 02 c, \ Revision (supports reset adr) +( 009 1 ) h# 00 c, \ Checksum +( 00A 6 ) " OLPC " $, \ Oem ID +( 010 8 ) " OLPC_000" $, \ Oem Table ID +( 018 4 ) " 0000" $, \ Oem Revision +( 01C 4 ) " OLPC" $, \ Asl Compiler ID +( 020 4 ) " 0000" $, \ Asl Compiler Revision +( 024 4 ) facs-adr l, \ FACS Address +( 028 4 ) dsdt-adr l, \ DSDT Address +( 02C 1 ) h# 00 c, \ Was Model, now reserved +( 02D 1 ) h# 00 c, \ PM Profile +( 02E 2 ) h# 000a w, \ SCI Interrupt + +\ Setting all of these to 0 tells the OS that the system is always in ACPI mode +( 030 4 ) h# 0 l, \ SMI Command Port +( 034 1 ) h# 0 c, \ ACPI Enable Value +( 035 1 ) h# 0 c, \ ACPI Disable Value + +( 036 1 ) h# 00 c, \ S4BIOS Command +( 037 1 ) h# 00 c, \ P-State Control +( 038 4 ) h# 400 l, \ PM1A Event Block Address +( 03C 4 ) h# 0 l, \ PM1B Event Block Address +\ ( 040 4 ) h# 9c28 l, \ PM1A Control Block Address +( 040 4 ) h# 404 l, \ PM1A Control Block Address +( 044 4 ) h# 0 l, \ PM1B Control Block Address +( 048 4 ) h# 0 l, \ PM2 Control Block Address (don't support) +\ ( 04C 4 ) h# 9c10 l, \ PM Timer Block Address +( 04C 4 ) h# 408 l, \ PM Timer Block Address +( 050 4 ) h# 420 l, \ GPE0 Block Address +( 054 4 ) h# 0 l, \ GPE1 Block Address +( 058 1 ) h# 4 c, \ PM1 Event Block Length +( 059 1 ) h# 2 c, \ PM1 Control Block Length +( 05A 1 ) h# 0 c, \ PM2 Control Block Length +( 05B 1 ) h# 4 c, \ PM Timer Block Length +( 05C 1 ) h# 4 c, \ GPE0 Block Length +( 05D 1 ) h# 0 c, \ GPE1 Block Length +( 05E 1 ) h# 10 c, \ GPE1 Base Offset +( 05F 1 ) h# 85 c, \ _CST Support +( 060 2 ) h# 1 w, \ C2 Latency +( 062 2 ) h# 1 w, \ C3 Latency +( 064 2 ) h# 0 w, \ CPU Cache Size +( 066 2 ) h# 0 w, \ Cache Flush Stride +( 068 1 ) h# 0 c, \ Duty Cycle Offset +( 069 1 ) h# 4 c, \ Duty Cycle Width +( 06A 1 ) h# 7d c, \ RTC Day Alarm Index +( 06B 1 ) h# 7e c, \ RTC Month Alarm Index +( 06C 1 ) h# 7f c, \ RTC Century Index +( 06D 2 ) h# 0 w, \ Boot Architecture Flags +( 06F 1 ) h# 0 c, \ Reserved +( 070 4 ) h# 5a5 l, \ Flags - see below for bit definitions +( 074 12 ) 1 c, 8 c, 0 c, 1 c, h# 92. d, \ Reset register - I/O, 8 bits, 0 offset, byte access + +( 080 1 ) h# 1 c, \ Reset value +( 081 3 ) 0 c, 0 c, 0 c, \ Reserved +here fadt - constant /fadt + +\ FADT Flags: +\ WBINVD is operational : 1 +\ WBINVD does not invalidate : 0 +\ All CPUs support C1 : 1 +\ C2 works on MP system : 0 +\ Power button is generic : 0 +\ Sleep button is generic : 1 +\ RTC wakeup not fixed : 0 +\ RTC wakeup/S4 not possible : 1 +\ 32-bit PM Timer : 1 +\ Docking Supported : 0 +\ Reset Register Supported: 1 + +create rsdp +( 00 8 ) " RSD PTR " $, \ Signature +( 08 1 ) 00 c, \ Checksum +( 09 6 ) " OLPC " $, \ Oem Id +( 0f 1 ) 2 c, \ ACPI revision (3.0b) +( 10 4 ) rsdt-adr l, \ RSDT Address + +( 14 4 ) d# 36 l, \ Length for extended version +( 18 8 ) xsdt-adr d, \ XSDT Address +( 20 1 ) 0 c, \ extended checksum +( 21 3 ) 0 c, 0 c, 0 c, \ reserved +here rsdp - constant /rsdp + +create madt \ Multiple APIC Descriptor Table +( 000 4 ) " APIC" $, \ Signature +( 004 4 ) h# 5a l, \ Table Length +( 008 1 ) h# 01 c, \ Revision +( 009 1 ) h# 00 c, \ Checksum +( 00A 6 ) " OLPC " $, \ Oem ID +( 010 8 ) " OLPC_000" $, \ Oem Table ID +( 018 4 ) " 0000" $, \ Oem Revision +( 01C 4 ) " OLPC" $, \ Asl Compiler ID +( 020 4 ) " 0000" $, \ Asl Compiler Revision +( 024 4 ) apic-mmio-base l, \ APIC base address +( 028 4 ) 1 l, \ Flags - 1 means that an 8259 PIC is present too + +( 02c 1 ) 0 c, \ Processor-local APIC +( 02d 1 ) 8 c, \ length +( 02e 1 ) 0 c, \ processor ID +( 02f 1 ) 0 c, \ ACPI ID +( 030 4 ) 1 l, \ Flags - 1 means this processor is usable + + +( 034 1 ) 1 c, \ I/O APIC +( 035 1 ) d# 12 c, \ length +( 036 1 ) 1 c, \ I/O APIC ID +( 037 1 ) 0 c, \ reserved +( 038 4 ) io-apic-mmio-base l, \ I/O APIC base address +( 03c 4 ) 0 l, \ Global system interrupt base + +( 040 1 ) 4 c, \ local APIC NMI +( 041 1 ) 6 c, \ length +( 042 1 ) 0 c, \ processor ID +( 043 2 ) 5 w, \ flags - edge-triggered, active high +( 045 1 ) 1 c, \ Local APIC LINT# + +( 046 1 ) 2 c, \ Int src override (for PIT timer) +( 047 1 ) d# 10 c, \ length +( 048 1 ) 0 c, \ Bus - ISA +( 049 1 ) 0 c, \ Bus-relative IRQ +( 04a 4 ) 2 l, \ Interrupt # that this source will trigger +( 04e 2 ) 5 w, \ flags - edge-triggered, active high + +( 050 1 ) 2 c, \ Int src override +( 051 1 ) d# 10 c, \ length +( 052 1 ) 0 c, \ Bus - ISA +( 053 1 ) 9 c, \ Bus-relative IRQ +( 054 4 ) 9 l, \ Interrupt # that this source will trigger +( 058 2 ) h# f w, \ Flags - active low, level triggered +here madt - constant /madt + +create hpet \ High Precision Event Timer table +( 000 4 ) " HPET" $, \ Signature +( 004 4 ) h# 38 l, \ Table Length +( 008 1 ) h# 01 c, \ Revision +( 009 1 ) h# 00 c, \ Checksum +( 00A 6 ) " OLPC " $, \ Oem ID +( 010 8 ) " OLPC_000" $, \ Oem Table ID +( 018 4 ) " 0000" $, \ Oem Revision +( 01C 4 ) " OLPC" $, \ Asl Compiler ID +( 020 4 ) " 0000" $, \ Asl Compiler Revision + +( 024 4 ) h# 11068201 l, \ Hardware ID of event timer block - 1106 is PCI VID, rest are misc, see HPET spec +( 028 1 ) 0 c, \ ID +( 029 1 ) 0 c, \ Bit width +( 02a 1 ) 0 c, \ Bit offset +( 02b 1 ) 0 c, \ Access width +( 02c 8 ) hpet-mmio-base d, \ HPET base address +( 034 1 ) 0 c, \ Sequence +( 035 2 ) 0 w, \ Min tick +( 037 1 ) 0 c, \ flags +here hpet - constant /hpet + +create rsdt +( 00 4 ) " RSDT" $, \ Signature +( 04 4 ) h# 34 l, \ Length +\ ( 04 4 ) h# 30 l, \ Length +\ ( 04 4 ) h# 2c l, \ Length +( 08 1 ) 1 c, \ Revision +( 09 1 ) 00 c, \ Checksum +( 0a 6 ) " OLPC " $, \ Oem Id +( 10 8 ) " OLPC_000" $, \ Oem Table Id +( 18 4 ) " 0000" $, \ Oem revision +( 1c 4 ) " OLPC" $, \ Creator ID +( 20 4 ) " 0000" $, \ Creator revision +( 24 4 ) fadt-adr l, \ FADT Address +( 28 4 ) dsdt-adr l, \ DSDT Address +( 2c 4 ) madt-adr l, \ MADT Address +( 30 4 ) hpet-adr l, \ HPET Address +\ ( 2c 4 ) dbgp-adr l, \ DBGP Address +\ ( 30 4 ) ssdt-adr l, \ SSDT Address +\ ( 30 4 ) prtn-adr l, \ PRTN Address +here rsdt - constant /rsdt + +0 [if] +create dbgp +( 00 4 ) " DBGP" $, \ Signature +( 04 4 ) d# 52 l, \ Length +( 08 1 ) 1 c, \ Revision +( 09 1 ) 00 c, \ Checksum +( 0a 6 ) " OLPC " $, \ Oem Id +( 10 8 ) " OLPC_000" $, \ Oem Table Id +( 18 4 ) " 0000" $, \ Oem revision +( 1c 4 ) " OLPC" $, \ Creator ID +( 20 4 ) " 0000" $, \ Creator revision +( 24 1 ) 0 c, \ Full 16550 interface +( 25 3 ) 0 c, 0 c, 0 c, \ reserved +( 28 c ) 1 c, 8 c, 0 c, 1 c, h# 3f8 l, 0 l, \ Port base address (generic register descriptor) +here dbgp - constant /dbgp +[then] + +create facs +( 00 4 ) " FACS" $, \ Signature +( 04 4 ) h# 40 l, \ Length +( 08 4 ) h# 1234 l, \ Hardware signature +( 0c 4 ) 0 l, \ Waking vector +( 10 4 ) 0 l, \ Global lock +( 14 4 ) 0 l, \ Flags +( 18 8 ) 0. d, \ 64-bit waking vector +( 20 1 ) 1 c, \ Version +( 21 1f ) here d# 31 dup allot erase +here facs - constant /facs + +: fix-checksum ( table /table checksum-offset -- ) + >r over >r ( table /table r: cksum-offset table ) + 0 -rot bounds ?do i c@ + loop ( sum ) + negate h# ff and r> r> + c! +; + +: memory-limit ( -- limit ) + " /memory" find-package 0= abort" No /memory node" ( phandle ) + " available" rot get-package-property abort" No available property" ( $ ) + -1 >r ( $ ) ( r: limit ) + begin dup 0> while ( $ ) + decode-int >r decode-int r> + ( $ piece-end ) + dup 1meg u<= if drop else ( $ piece-end ) + r> umin >r ( $ ) ( r: limit' ) + then ( $ ) + repeat ( $ ) + 2drop r> ( limit ) + h# 1000 - \ Safety page +; + +: setup-acpi ( -- ) +[ifdef] notdef + \ This has to agree with the _SB's _INI method, which gets the memory size + \ from offset h# 180 in the EBDA + memory-limit d# 10 rshift 'ebda h# 180 + l! +[then] + + \ Copy rsdt and fadt to low memory + rsdp rsdp-adr /rsdp move rsdp-adr h# 14 8 fix-checksum rsdp-adr /rsdp h# 20 fix-checksum + rsdt rsdt-adr /rsdt move rsdt-adr /rsdt 9 fix-checksum + fadt fadt-adr /fadt move fadt-adr /fadt 9 fix-checksum + madt madt-adr /madt move madt-adr /madt 9 fix-checksum + hpet hpet-adr /hpet move hpet-adr /hpet 9 fix-checksum +\ dbgp dbgp-adr /dbgp move dbgp-adr /dbgp 9 fix-checksum + facs facs-adr /facs move + + \ Copy in the DSDT + \ I suppose we could point to it in FLASH - if so don't compress it, + \ and fixup the address in the fadt and rechecksum the fadt + " dsdt" find-drop-in 0= abort" No DSDT " ( adr len ) + 2dup dsdt-adr swap move free-mem + +[ifdef] notdef + \ Copy in the SSDT + \ I suppose we could point to it in FLASH - if so don't compress it, + \ and fixup the address in the fadt and rechecksum the fadt + " ssdt" find-drop-in 0= abort" No SSDT " ( adr len ) + 2dup ssdt-adr swap move free-mem +[then] + + 4 acpi-w@ 1 or 4 acpi-w! \ Set SCI_EN bit + h# ffffffff h# 20 acpi-l! \ Ack all leftover events +; + +.( Not setting up ACPI automatically) cr +stand-init: ACPI tables +." Not setting up ACPI automatically" cr +\ setup-acpi +; + +\ Geode h# 6000 constant xp-smbus-base + +defer more-platform-fixup ' noop to more-platform-fixup +: rm-platform-fixup ( -- ) +[ifdef] Later +Geode xp-smbus-base h# f001 h# 5140.000b 3dup msr! find-msr-entry 2! +Geode xp-smbus-base 1+ h# 10 isa-hdr >hdr-value l! + + begin sci-queue@ 0= until \ Clean out the SCI queue + h# 20 acpi-w@ h# 20 acpi-w! \ Ack outstanding events +Geode h# 4e sci-mask! \ Include in the mask only events we care about + +Geode 0 h# 40 pm! \ Restore long delay for power-off button +[then] + more-platform-fixup +; + +0 [if] +===== +APIC @ 0x3beb6f32 + 0000: 41 50 49 43 5a 00 00 00 01 3c 50 54 4c 54 44 20 APICZ....<PTLTD + 0010: 09 20 41 50 49 43 20 20 00 00 04 06 20 4c 54 50 . APIC .... LTP + 0020: 00 00 00 00 + 00 00 e0 fe address of local apic + 01 00 00 00 flags - 1 means that an ISA PIC is present too + + 00 Processor-local APIC 08 length + 00 processor ID + 00 ACPI ID + 0030: 01 00 00 00 flags - 1 means usable + + 01 I/O APIC 0c length + 01 I/O APIC ID + 00 reserved + + 00 00 c0 fe I/O APIC address MMIO Address + 00 00 00 00 Global system interrupt base + + 0040: 04 local APIC NMI 06 length + 00 processor ID + 05 00 flags - edge-triggered, active high + 01 Local APIC LINT# + + 02 Int src override 0a length + 00 Bus - ISA + 00 Bus-relative IRQ + 02 00 00 00 Interrupt # that this source will trigger + 05 00 flags - edge-triggered, active high + + 0050: 02 Int src override 0a length + 00 Bus - ISA + 09 Bus-relative IRQ + 09 00 00 00 Interrupt # that this source will trigger + 0f 00 Flags - active low, level triggered + +MCFG is for memory-mapped PCI config space - unnecessary for us +MCFG @ 0x3beb6f8c + 0000: 4d 43 46 47 + 4 0000003c len + 8 01 rev + 9 67 csum + a "PTLTD " OEM ID + 0010: " MCFG " OEM Table ID + 0018: 00 00 04 06 OEM revision # + 1c: " LTP" Compiler ID + 0020: 00000000 compiler rev + 24: 00 00 00 00 00 00 00 00 reserved + 2c e0000000 00000000 BaseAddress.64 + 34: 0000 pci segment group # + 36: 00 start bus # + 37: 00 end bus # + 38: 00 00 00 00 res + +HPET @ 0x3beb6fc8 + 0000: 48 50 45 54 + 4: 00000038 length + 8: 01 rev + 9: 38 csum + a: "PTLTD " OEM ID + 0010: "HPETTBL " OEM table ID + 00 00 04 06 OEM revision # + 1c: " LTP" Compiler ID + 0020: 00000001 Compiler revision ID + 24: 01 82 06 11 hardware ID of event timer block + 28: 00 00 00 00 id bit_width bit_offset access_width + 2c: fed00000 00000000 address + 34: 00 0000 00 seq, min tick, flags + +XSDT @ 0x3beb2a81 + 0000: 58 53 44 54 4c 00 00 00 01 a2 50 54 4c 54 44 20 XSDTL.....PTLTD + 0010: 09 20 58 53 44 54 20 20 00 00 04 06 20 4c 54 50 . XSDT .... LTP + 0020: 00 00 00 00 + Pointers: +84 69 eb 3b 00 00 00 00 +78 6a eb 3b 00 00 00 00 +32 6f eb 3b 00 00 00 00 +8c 6f eb 3b 00 00 00 00 +c8 6f eb 3b 00 00 00 00 + +FACP @ 0x3beb6910 + 0000: 46 41 43 50 74 00 00 00 01 f6 56 58 38 35 35 20 FACPt.....VX855 + 0010: 50 54 4c 54 57 20 20 20 00 00 04 06 50 54 4c 5f PTLTW ....PTL_ + 0020: 40 42 0f 00 + c0 7f eb 3b &facs + cd 2a eb 3b &dsdt + 00 00 model, preferred profile + 0a 00 sci_interrupt !!! + 0030: 2f 40 00 00 sci_command port + 34 f0 acpi_enable + 35 f1 acpi_disable + 36 00 s4bios_request value + 37 80 pstate control + 38 00 40 00 00 pm1a event block + 3c 00 00 00 00 pm1b event block + 0040: 04 40 00 00 pm1a control block + 00 00 00 00 pm1b control block + 22 00 00 00 pm2 control block + 08 40 00 00 pm_timer block + 0050: 20 40 00 00 gpe0_block + 00 00 00 00 gpe1_block + 04 pm1 event block len + 02 pm1 control block len + 01 pm2 control block len + 04 pm timer block length + 04 gpe0 block len + 00 gpe1 block len + 10 gpe1 base offset + 85 _cst latency + 0060: 01 00 C2_latency + 01 00 C3_latency + 00 00 CPU cache size + 00 00 cache flus stride + 00 duty cycle offset + 04 duty cycle width + 7d rtc day alarm indes + 7e rtc month alarm index + 32 rtc century index + 00 00 boot architecture flags + 00 reserved + 0070: a5 00 00 00 flags + +RSDT @ 0x3beb2a49 + 0000: 52 53 44 54 38 00 00 00 01 1f 50 54 4c 54 44 20 RSDT8.....PTLTD + 0010: 20 20 52 53 44 54 20 20 00 00 04 06 20 4c 54 50 RSDT .... LTP + 0020: 00 00 00 00 + Pointers + 24 10 69 eb 3b + 78 6a eb 3b + 32 6f eb 3b + 0030: 8c 6f eb 3b + c8 6f eb 3b + +RSD PTR @ 0xf7c70 + 0000: 52 53 44 20 50 54 52 20 9e 50 54 4c 54 44 20 02 RSD PTR .PTLTD . + 0010: 49 2a eb 3b rsdt-adr + 24 00 00 00 len + 81 2a eb 3b 00 00 00 00 xdst-adr + 0020: 0b ext-csum res + 00 00 00 .... + +FACS @ 0x3beb7fc0 + 0000: 46 41 43 53 signature + 40 00 00 00 len + 00 00 00 00 HW signature + 00 00 00 00 waking vector + 0010: 00 00 00 00 global lock + 00 00 00 00 flags + 00 00 00 00 00 00 00 00 64-bit waking vector + 0020: 01 00 00 00 version + 00 00 00 00 00 00 00 00 00 00 00 00 working area + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 working area + +FACP @ 0x3beb6984 (version 3, 244 bytes) + 0000: 46 41 43 50 f4 00 00 00 03 27 56 58 38 35 35 20 FACP.....'VX855 + 0010: 50 54 4c 54 57 20 20 20 00 00 04 06 50 54 4c 5f PTLTW ....PTL_ + 0020: 40 42 0f 00 + c0 7f eb 3b facs-adr + cd 2a eb 3b dsdt-adr + 00 res + 00 pm-profile + 0a 00 sci-interrupt + 0030: 2f 40 00 00 + f0 + f1 + 00 + 80 + 00 40 00 00 + 00 00 00 00 /@.......@...... + 0040: 04 40 00 00 + 00 00 00 00 + 22 00 00 00 + 08 40 00 00 + 0050: 20 40 00 00 + 00 00 00 00 + 04 + 02 + 01 + 04 + 04 + 00 + 10 + 85 + 0060: 01 00 + 01 00 + 00 00 + 00 00 + 00 + 04 + 7d + 7e + 32 + 00 00 + 00 + 0070: a5 00 00 00 + + 00 00 00 00 00 00 00 00 00 00 00 00 reset register + 0080: 00 reset value + 00 00 00 res + c0 7f eb 3b 00 00 00 00 facs-adr-64 + cd 2a eb 3b 00 00 00 00 dsdt-adr-64 + 94: 01 20 00 00 00 40 00 00 00 00 00 00 pm1a-event-reg-block + 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 pm1b-event-reg-block + 01 10 00 00 04 40 00 00 00 00 00 00 pm1a-cnt-block + b8: 00 00 00 00 00 00 00 00 00 00 00 00 pm1b-cnt-block + 01 08 00 00 22 00 00 00 00 00 00 00 pm2-cnt-block + 00d0: 01 20 00 00 08 40 00 00 00 00 00 00 pm_tmr_block + 01 20 00 00 20 40 00 00 00 00 00 00 gpe0-block + 00 00 00 00 00 00 00 00 00 00 00 00 gpe1-block + +SSDT @ 0x3beb6a78 + 0000: 53 53 44 54 ba 04 00 00 01 3c 50 50 6d 6d 52 65 SSDT.....<PPmmRe + 0010: 50 50 6d 00 00 00 00 00 00 00 04 06 49 4e 54 4c PPm.........INTL + 0020: 24 02 03 20 10 45 49 5c 2e 5f 50 52 5f 43 50 55 $.. .EI._PR_CPU + 0030: 30 08 50 44 43 54 0a 00 08 50 44 43 52 0a 01 08 0.PDCT...PDCR... + 0040: 50 44 43 4d 0a 01 14 4c 06 5f 50 44 43 01 70 87 PDCM...L._PDC.p. + 0050: 68 60 08 50 44 43 42 11 03 0a 14 70 68 50 44 43 h`.PDCB....phPDC + 0060: 42 8a 50 44 43 42 0a 00 52 45 56 5f 8a 50 44 43 B.PDCB..REV_.PDC + 0070: 42 0a 04 53 49 5a 45 a0 0e 92 93 52 45 56 5f 50 B..SIZE....REV_P + 0080: 44 43 52 a4 0a 00 a0 0b 95 53 49 5a 45 0a 01 a4 DCR......SIZE... + 0090: 0a 00 8a 50 44 43 42 0a 08 44 41 54 30 a0 12 7b ...PDCB..DAT0..{ + 00a0: 44 41 54 30 50 44 43 4d 00 70 0a 01 50 44 43 54 DAT0PDCM.p..PDCT + 00b0: a4 0a 01 08 50 43 54 31 12 2c 02 11 14 0a 11 82 ....PCT1.,...... + 00c0: 0c 00 7f 00 00 00 00 00 00 00 00 00 00 00 79 00 ..............y. + 00d0: 11 14 0a 11 82 0c 00 7f 00 00 00 00 00 00 00 00 ................ + 00e0: 00 00 00 79 00 08 50 43 54 32 12 2c 02 11 14 0a ...y..PCT2.,.... + 00f0: 11 82 0c 00 01 08 00 00 2f 40 00 00 00 00 00 00 ......../@...... + 0100: 79 00 11 14 0a 11 82 0c 00 01 08 00 00 80 00 00 y............... + 0110: 00 00 00 00 00 79 00 08 58 43 54 31 12 2c 02 11 .....y..XCT1.,.. + 0120: 14 0a 11 82 0c 00 7f 40 00 00 99 01 00 00 00 00 .......@........ + 0130: 00 00 79 00 11 14 0a 11 82 0c 00 7f 40 00 00 00 ..y.........@... + 0140: 00 00 00 00 00 00 00 79 00 14 37 5f 50 43 54 00 .......y..7_PCT. + 0150: a0 19 5c 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 .._OSI.Windows + 0160: 32 30 30 36 00 a4 58 43 54 31 a1 16 a0 0d 93 50 2006..XCT1.....P + 0170: 44 43 54 0a 00 a4 50 43 54 32 a1 06 a4 50 43 54 DCT...PCT2...PCT + 0180: 31 08 58 50 53 53 12 4b 1b 02 12 36 08 0c e8 03 1.XPSS.K...6.... + 0190: 00 00 0c 10 27 00 00 0c 0a 00 00 00 0c 0a 00 00 ....'........... + 01a0: 00 11 07 0a 04 06 0a 00 00 11 07 0a 04 00 00 00 ................ + 01b0: 00 11 07 0a 04 00 00 00 00 11 07 0a 04 06 0a 00 ................ + 01c0: 00 12 36 08 0c 90 01 00 00 0c a0 0f 00 00 0c 0a ..6............. + 01d0: 00 00 00 0c 0a 00 00 00 11 07 0a 04 06 04 00 00 ................ + 01e0: 11 07 0a 04 00 00 00 00 11 07 0a 04 00 00 00 00 ................ + 01f0: 11 07 0a 04 06 04 00 00 12 36 08 0c 90 01 00 00 .........6...... + 0200: 0c a0 0f 00 00 0c 0a 00 00 00 0c 0a 00 00 00 11 ................ + 0210: 07 0a 04 06 04 00 00 11 07 0a 04 00 00 00 00 11 ................ + 0220: 07 0a 04 00 00 00 00 11 07 0a 04 06 04 00 00 12 ................ + 0230: 36 08 0c 90 01 00 00 0c a0 0f 00 00 0c 0a 00 00 6............... + 0240: 00 0c 0a 00 00 00 11 07 0a 04 06 04 00 00 11 07 ................ + 0250: 0a 04 00 00 00 00 11 07 0a 04 00 00 00 00 11 07 ................ + 0260: 0a 04 06 04 00 00 12 36 08 0c 90 01 00 00 0c a0 .......6........ + 0270: 0f 00 00 0c 0a 00 00 00 0c 0a 00 00 00 11 07 0a ................ + 0280: 04 06 04 00 00 11 07 0a 04 00 00 00 00 11 07 0a ................ + 0290: 04 00 00 00 00 11 07 0a 04 06 04 00 00 12 36 08 ..............6. + 02a0: 0c 90 01 00 00 0c a0 0f 00 00 0c 0a 00 00 00 0c ................ + 02b0: 0a 00 00 00 11 07 0a 04 06 04 00 00 11 07 0a 04 ................ + 02c0: 00 00 00 00 11 07 0a 04 00 00 00 00 11 07 0a 04 ................ + 02d0: 06 04 00 00 12 36 08 0c 90 01 00 00 0c a0 0f 00 .....6.......... + 02e0: 00 0c 0a 00 00 00 0c 0a 00 00 00 11 07 0a 04 06 ................ + 02f0: 04 00 00 11 07 0a 04 00 00 00 00 11 07 0a 04 00 ................ + 0300: 00 00 00 11 07 0a 04 06 04 00 00 12 36 08 0c 90 ............6... + 0310: 01 00 00 0c a0 0f 00 00 0c 0a 00 00 00 0c 0a 00 ................ + 0320: 00 00 11 07 0a 04 06 04 00 00 11 07 0a 04 00 00 ................ + 0330: 00 00 11 07 0a 04 00 00 00 00 11 07 0a 04 06 04 ................ + 0340: 00 00 08 50 50 53 31 12 43 0a 02 12 13 06 0b e8 ...PPS1.C....... + 0350: 03 0b 10 27 0b 0a 00 0a 0a 0b 06 0a 0b 06 0a 12 ...'............ + 0360: 13 06 0b 90 01 0b a0 0f 0b 0a 00 0a 0a 0b 06 04 ................ + 0370: 0b 06 04 12 13 06 0b 90 01 0b a0 0f 0b 0a 00 0a ................ + 0380: 0a 0b 06 04 0b 06 04 12 13 06 0b 90 01 0b a0 0f ................ + 0390: 0b 0a 00 0a 0a 0b 06 04 0b 06 04 12 13 06 0b 90 ................ + 03a0: 01 0b a0 0f 0b 0a 00 0a 0a 0b 06 04 0b 06 04 12 ................ + 03b0: 13 06 0b 90 01 0b a0 0f 0b 0a 00 0a 0a 0b 06 04 ................ + 03c0: 0b 06 04 12 13 06 0b 90 01 0b a0 0f 0b 0a 00 0a ................ + 03d0: 0a 0b 06 04 0b 06 04 12 13 06 0b 90 01 0b a0 0f ................ + 03e0: 0b 0a 00 0a 0a 0b 06 04 0b 06 04 08 50 50 53 32 ............PPS2 + 03f0: 12 43 0a 02 12 13 06 0b e8 03 0b 10 27 0b 26 02 .C..........'.&. + 0400: 0a 0a 0b b0 00 0b b0 00 12 13 06 0b 90 01 0b a0 ................ + 0410: 0f 0b bc 02 0a 0a 0b b1 00 0b b1 00 12 13 06 0b ................ + 0420: 90 01 0b a0 0f 0b bc 02 0a 0a 0b b2 00 0b b2 00 ................ + 0430: 12 13 06 0b 90 01 0b a0 0f 0b bc 02 0a 0a 0b b3 ................ + 0440: 00 0b b3 00 12 13 06 0b 90 01 0b a0 0f 0b bc 02 ................ + 0450: 0a 0a 0b b4 00 0b b4 00 12 13 06 0b 90 01 0b a0 ................ + 0460: 0f 0b bc 02 0a 0a 0b b5 00 0b b5 00 12 13 06 0b ................ + 0470: 90 01 0b a0 0f 0b bc 02 0a 0a 0b b6 00 0b b6 00 ................ + 0480: 12 13 06 0b 90 01 0b a0 0f 0b bc 02 0a 0a 0b b7 ................ + 0490: 00 0b b7 00 14 1b 5f 50 53 53 00 a0 0d 93 50 44 ......_PSS....PD + 04a0: 43 54 0a 00 a4 50 50 53 32 a1 06 a4 50 50 53 31 CT...PPS2...PPS1 + 04b0: 14 09 5f 50 50 43 00 a4 0a 00 .._PPC.... +[then] +
Added: cpu/x86/pc/olpc/via/dsdt.dsl =================================================================== --- cpu/x86/pc/olpc/via/dsdt.dsl (rev 0) +++ cpu/x86/pc/olpc/via/dsdt.dsl 2009-06-25 21:13:27 UTC (rev 1222) @@ -0,0 +1,2449 @@ +DefinitionBlock ("dsdt.aml", // AML file name + "DSDT", // Table signature, DSDT + 0x01, // Compliance Revision + "OLPC", // OEM ID + "XO-1.5 ", // Table ID + 0x00000001) // OEM Revision +{ + +OperationRegion(CMS1, SystemIO, 0x74, 0x2) +Field(CMS1, ByteAcc, NoLock, Preserve) { + CMSI, 8, + CMSD, 8 +} + +Method (CMSW, 2) +{ + Store (Arg0, CMSI) + Store (Arg1, CMSD) +} + // Processor Objects + Scope(_PR) { + Processor(_PR.CPU0,0x00,0x00000410,0x06){} + } + + // System Sleep States + Name(_S0,Package(){0,0,0,0}) + Name(_S1,Package(){4,4,4,4}) + Name(_S3,Package(){1,1,1,1}) + Name(_S4,Package(){2,2,2,2}) + Name(_S5,Package(){2,2,2,2}) + + OperationRegion(\DEBG, SystemIO, 0x80, 0x1) + Field(\DEBG, ByteAcc, NoLock, Preserve) { + DBG1, 8, + } + + OperationRegion(\GPST, SystemIO, 0x0420, 0x2) + Field(\GPST, ByteAcc, NoLock, Preserve) { + GS00,1, + GS01,1, + GS02,1, + GS03,1, + GS04,1, + GS05,1, + GS06,1, + GS07,1, + GS08,1, + GS09,1, + GS10,1, + GS11,1, + GS12,1, + GS13,1, + GS14,1, + GS15,1, + } + + OperationRegion(\GPSE, SystemIO, 0x0424, 0x2) // Genernal Purpose SMI Enable + Field(\GPSE, ByteAcc, NoLock, Preserve) { + GPS0, 1, // GPI0 SMI Enable + GPS1, 1, // GPI1 SMI Enable + KBCE, 1, // PS2 KB PME Enable + , 1, + EXTE, 1, // EXT SMI Enable + PME, 1, // PCI PME Enable + , 2, + RING, 1, // Ring Wakeup + , 5, + USBE, 1, // USB Resume + , 1, + } + + OperationRegion(\Glos, SystemIO, 0x0428, 0x2) // Global Status + Field(\Glos, ByteAcc, NoLock, Preserve) { + , 6, // + SSMI, 1, // software SMI + PRII, 1, // primary IRQ + , 2, // + SLPE, 1, // sleep enable(Rx05) + SIRS, 1, // serirq status + , 4, + } + + OperationRegion(\WIRQ, SystemIO, 0x042a, 0x1) // IRQ Resume Reg + Field(\WIRQ, ByteAcc, NoLock, Preserve) { + IRQR, 8, + } + + OperationRegion(\Stus, SystemIO, 0x0430, 0x1) // Global Status + Field(\Stus, ByteAcc, NoLock, Preserve) { + PADS, 8, + } + + OperationRegion(\Prie, SystemIO, 0x0434, 0x1) + Field(\Prie, ByteAcc, NoLock, Preserve) { + , 5, + CMAE, 1, // COMA_EN + CMBE, 1, // COMB_EN + } + + // + // General Purpose Event + // + Scope(_GPE) + { + Method(_L02) { + Notify(_SB.PCI0.VT86.PS2K, 0x02) //Internal Keyboard PME Status + } + + Method(_L04) { + Notify(_SB.SLPB, 0x80) + } + + Method(_L05) { + Notify(_SB.PCI0,0x2) + } + + Method(_L08) { + Notify(_SB.PCI0.VT86.EUR1, 0x2) + Notify(_SB.PCI0.VT86.EUR2, 0x2) + } + + Method(_L09) { + Notify(_SB.PCI0.VT86.PS2M, 0x02) //Internal Mouse Controller PME Status + } + + Method(_L0D) { + Notify(_SB.PCI0.HDAC, 0x02) + } + + Method(_L0E) { //USB Wake up Status + Notify(_SB.PCI0.USB1, 0x02) + Notify(_SB.PCI0.USB2, 0x02) + Notify(_SB.PCI0.USB3, 0x02) + Notify(_SB.PCI0.EHCI, 0x02) + } + } + + Name(PICF,0x00) // PIC or APIC? + Method(_PIC, 0x01, NotSerialized) { + Store (Arg0, PICF) + } + + // + // System Wake up + // + Method(_WAK, 1, Serialized) + { + Notify(_SB.PCI0.USB1, 0x00) + Notify(_SB.PCI0.USB2, 0x00) + Notify(_SB.PCI0.USB3, 0x00) + Notify(_SB.PCI0.EHCI, 0x00) + + If (LEqual (Arg0, 1)) //S1 + { + Notify (_SB.SLPB, 0x02) + } + + Or (Arg0, 0xA0, Local0) + Store (Local0, DBG1) //80 Port: A1, A2, A3.... + + IF (LEqual(Arg0, 0x01)) { //S1 + And(IRQR,0x7F,IRQR) //Disable IRQ Resume Reg, IRQR:Rx2A + While(PRII){ //PRII:Rx28[7] + Store (One, PRII) //Clear Primary IRQ resume Status + } + While(LNotEqual(PADS, 0x00)){ //PADS: Rx30[1:7] + Store (PADS, PADS) //Clear Primary Activity Detect Status + } + } + + Notify(_SB.SLPB, 0x2) + + IF (LEqual(Arg0, 0x03)) //S3 + { + Store(0x2,_SB.PCI0.MEMC.FSEG) //Set F Segment to Read only + } + + Or (Arg0, 0xB0, Local0) + Store (Local0, DBG1) //80 Port: B1, B2, B3.... + Return (0) + } + + // + // System sleep down + // + Method (_PTS, 1, NotSerialized) + { + + Or (Arg0, 0xF0, Local0) + Store (Local0, DBG1) //80 Port: F1, F2, F3.... + + IF (LEqual(Arg0, 0x01)) { // S1 + While(PRII) + { + Store (One, PRII) //Clear Primary IRQ resume Status + } + While(LNotEqual(PADS, 0x00)) + { + Store (PADS, PADS) //Clear Primary Activity Detect Status + } + Or(IRQR,0x80,IRQR) //Enable IRQ Resume Reg + + } //End of Arg0 EQ 0x01 + + IF (LEqual(Arg0, 0x03)) { //S3 + Store(0x0,_SB.PCI0.MEMC.FSEG) //Disable F Segment Read/Write + } + + IF (LEqual(Arg0, 0x04)) { //S4 + } + + IF (LEqual(Arg0, 0x05)) { //S5 + Store (Zero, GS04) // Clear EXTSMI# Status, why? + } + sleep(0x64) + Return (0x00) + } + + + Method(STRC, 2) { // Compare two String + If(LNotEqual(Sizeof(Arg0), Sizeof(Arg1))) { + Return(1) + } + + Add(Sizeof(Arg0), 1, Local0) + + Name(BUF0, Buffer(Local0) {}) + Name(BUF1, Buffer(Local0) {}) + + Store(Arg0, BUF0) + Store(Arg1, BUF1) + + While(Local0) { + Decrement(Local0) + If(LNotEqual(Derefof(Index(BUF0, Local0)), Derefof(Index(BUF1, Local0)))) { + Return(1) + } + } + Return(0) // Str1 & Str2 are match + } + + + // + // System Bus + // + Scope(_SB) + { + + // define Sleeping button as mentioned in ACPI spec 2.0 + Device (SLPB) + { + Name (_HID, EISAID("PNP0C0E")) // Hardware Device ID SLEEPBTN + Method(_STA, 0) { + Return(0x0B) // non-present, enabled, functioning + } + + Name(_PRW, Package(2){0x04,5}) //Internal Keyboard Controller PME Status; S5 + } + +Device(PCI0) +{ + Name(_HID,EISAID ("PNP0A08")) // Indicates PCI Express host bridge hierarchy + Name(_CID,EISAID ("PNP0A03")) // For legacy OS that doesn't understand the new HID + + Name(_ADR,0x00000000) // Device (HI WORD)=0, Func (LO WORD)=0 + + + Name (_BBN,0) + + Method(_INI, 0) + { + } + + Name (_S3D, 3) + + Method(_STA, 0) { + Return(0x0F) // present, enabled, functioning + } + + Name(_PRW, Package(2){0x5,0x4}) // PME# + + Method(_CRS,0) { + Name(BUF0,ResourceTemplate() { + WORDBusNumber( // Bus 0 + ResourceConsumer, + MinNotFixed, + MaxNotFixed, + PosDecode, + 0x0000, + 0x0000, + 0x00FF, + 0x0000, + 0x0100 + ) + + IO( // IO Resource for PCI Bus + Decode16, + 0x0CF8, + 0x0CF8, + 1, + 8 + ) + + WORDIO( // IO from 0x0000 - 0x0cf7 + ResourceProducer, + MinFixed, + MaxFixed, + PosDecode, + EntireRange, + 0x0000, + 0x0000, + 0x0CF7, + 0x0000, + 0x0CF8 + ) + + WORDIO( // IO from 0x0d00 - 0xffff + ResourceProducer, + MinFixed, + MaxFixed, + PosDecode, + EntireRange, + 0x0000, + 0x0D00, + 0xFFFF, + 0x0000, + 0xF300 + ) + + DWORDMemory( + ResourceProducer, + PosDecode, + MinFixed, + MaxFixed, + Cacheable, + ReadWrite, + 0x00000000, + 0x000A0000, + 0x000BFFFF, + 0x00000000, + 0x00020000 + ) + + DWORDMemory( + ResourceProducer, + PosDecode, + MinFixed, + MaxFixed, + Cacheable, + ReadWrite, + 0x00000000, + 0x000C0000, + 0x000DFFFF, + 0x00000000, + 0x00020000 + ) +// XXX I don't know what this is + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, + 0xFED40000, + 0xFED44FFF, + 0x00000000, + 0x00005000, + ) + DWORDMemory( // Consumed-and-produced resource(all of memory space) + ResourceProducer, // bit 0 of general flags is 0 + PosDecode, // positive Decode + MinFixed, // Range is fixed + MaxFixed, // Range is fixed + Cacheable, + ReadWrite, + 0x00000000, // Granularity + 0x80000000, // Min (calculated dynamically) + 0xBfffffff, // Max = 4GB - 1MB (fwh + fwh alias...) + 0x00000000, // Translation + 0x40000000, // Range Length (calculated dynamically) + , // Optional field left blank + , // Optional field left blank + MEM3 // Name declaration for this descriptor + ) + }) // end of BUF0 + + CreateDWordField(BUF0,MEM3._MIN, PMRN) + CreateDWordField(BUF0,MEM3._MAX, PMRM) + CreateDWordField(BUF0,MEM3._LEN, PMRL) + \ XXX top of PCI memory space + Store(0xFFE80000, PMRM) + Store(_SB.PCI0.MEMC.LTMA, Local0) + ShiftLeft(Local0, 16, PMRN) + Subtract (PMRM, PMRN, PMRL) + + Return(BUF0) + } // end of CRS + + Device(MEMC) { + Name(_ADR, 0x00000003) + + Method(_STA, 0) { + Return(0x0F) // present, enabled, functioning + } + + OperationRegion(MCPS,PCI_Config,0x00,0x100) + Field(MCPS,ByteAcc,NoLock,Preserve) + { + Offset(0x83), + , 4, + FSEG, 2, //Rx83[4:5] + , 2, + Offset(0x84), + LTMA, 16, //Rx84 and Rx85. Low Top Address of Memory + Offset(0x86), + , 2, + ENTS, 1, //Enable Top SMRAM Size + , 3, + TSMS, 2, // Top SMRAM Size + Offset(0xA1), + , 4, + FBSZ, 3, // Frame Buffer Size + ENIG, 1, // Enable Internal Graphic + } + } + + // USBD Controller + Device (USBD) + { + Name(_ADR, 0x000B0000) + + OperationRegion(RUDC,PCI_Config,0x00,0x100) + Field(RUDC,ByteAcc,NoLock,Preserve){ + Offset(0x00), + VID, 16, + Offset(0x04), + CMDR, 3, + } + + Method(_STA, 0) + { + If(LNotEqual(_SB.PCI0.USBD.VID, 0x1106)) { + Return(0x00) + }Else { + If(LEqual(_SB.PCI0.USBD.CMDR, 0x00)) { + Return(0x0D) + }Else{ + Return(0x0F) // present, enabled, functioning + } + } + } + }//Device(USBD) + + // SDIO Controller + Device (SDIO) + { + Name(_ADR, 0x000C0000) + + OperationRegion(RSDC,PCI_Config,0x00,0x100) + Field(RSDC,ByteAcc,NoLock,Preserve){ + Offset(0x00), + VID, 16, + Offset(0x04), + CMDR, 3, + } + + Method(_STA, 0) + { + If(LNotEqual(_SB.PCI0.SDIO.VID, 0x1106)) { + Return(0x00) + }Else { + If(LEqual(_SB.PCI0.SDIO.CMDR, 0x00)) { + Return(0x0D) + }Else{ + Return(0x0F) // present, enabled, functioning + } + } + } + }//Device(SDIO) + + // SD $ MS Controller + Device (SDMS) + { + Name(_ADR, 0x000D0000) + + OperationRegion(RSDM,PCI_Config,0x00,0x100) + Field(RSDM,ByteAcc,NoLock,Preserve){ + Offset(0x00), + VID, 16, + Offset(0x04), + CMDR, 3, + } + + Method(_STA, 0) + { + If(LNotEqual(_SB.PCI0.SDMS.VID, 0x1106)) { + Return(0x00) + }Else { + If(LEqual(_SB.PCI0.SDMS.CMDR, 0x00)) { + Return(0x0D) + }Else{ + Return(0x0F) // present, enabled, functioning + } + } + } + }//Device(SDMS) + + // CE-ATA $ NF Controller(Card Boot) + Device(CENF) + { + Name(_ADR, 0x000E0000) + + OperationRegion(RENF,PCI_Config,0x00,0x100) + Field(RENF,ByteAcc,NoLock,Preserve){ + Offset(0x00), + VID, 16, + Offset(0x04), + CMDR, 3, + } + + Method(_STA, 0) + { + If(LNotEqual(_SB.PCI0.CENF.VID, 0x1106)) { + Return(0x00) + }Else { + If(LEqual(_SB.PCI0.CENF.CMDR, 0x00)) { + Return(0x0D) + }Else{ + Return(0x0F) // present, enabled, functioning + } + } + } + } + +Device(IDEC) +{ + + Name(_ADR, 0x000F0000) //D15F0: a Pata device + + Method(_STA,0,NotSerialized) //Status of the Pata Device + { + If(LNot(LEqual(_SB.PCI0.IDEC.VID,0x1106))) + { + Return(0x00) //device not exists + } + Else + { + If(LEqual(_SB.PCI0.IDEC.CMDR,0x00)) + { + Return(0x0D) //device exists & disable + } + Else + { + Return(0x0F) //device exists & enable + } + } + } + OperationRegion(SAPR,PCI_Config,0x00,0xC2) + Field(SAPR,ByteAcc,NoLock,Preserve) + { + VID,16, + Offset(0x04), + CMDR,3, + Offset(0x40), + , 1, + EPCH, 1, // Enable Primary channel. + Offset(0x4A), + PSPT, 8, // IDE Timings, Primary Slave + PMPT, 8, // IDE Timings, Primary Master + Offset(0x52), + PSUT, 4, // Primary Slave UDMA Timing + PSCT, 1, // Primary Drive Slave Cabal Type + PSUE, 3, // Primary Slave UDMA Enable + PMUT, 4, // Primary Master UDMA Timing + PMCT, 1, // Primary Drive Master Cabal Type + PMUE, 3, // Primary Master UDMA Enable + } + + Name(REGF,0x01) //accessible OpRegion default + Method(_REG,2,NotSerialized) // is PCI Config space accessible as OpRegion? + { + If(LEqual(Arg0,0x02)) + { + Store(Arg1,REGF) + } + } + /* + Name(TIM0,Package(0x04){ + Package(){0x78,0xB4,0xF0,0x017F,0x0258}, + Package(){0x20,0x22,0x33,0x47,0x5D}, + Package(){0x78,0x50,0x3C,0x2D,0x1E,0x14,0x0F}, + Package(){0x06,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x00} + }) +*/ + Name(TIM0, Package() + { // Primary / Secondary channels timings + Package(){120, 180, 240, 383, 600}, // Timings in ns - Mode 4,3,2,1,0 defined from ATA spec. + Package(){0x20, 0x22, 0x33, 0x47, 0x5D }, // PIO Timing - Mode 4,3,2,1,0 + Package(){4, 3, 2, 1, 0}, // PIO mode (TIM0,0) + Package(){2, 1, 0, 0}, // Multi-word DMA mode + Package(){120, 80, 60, 45, 30, 20, 15}, // Min UDMA Timings in ns + Package(){6,5,4,4,3,3,2,2,1,1,1,1,1,1,0}, // UDMA mode + Package(){0x0E, 8, 6, 4, 2, 1, 0}, // UDMA timing + }) + + Name(TMD0,Buffer(0x14){}) + CreateDwordField(TMD0,0x00,PIO0) + CreateDwordField(TMD0,0x04,DMA0) + CreateDwordField(TMD0,0x08,PIO1) + CreateDwordField(TMD0,0x0C,DMA1) + CreateDwordField(TMD0,0x10,CHNF) + + Name(GMPT, 0) // Master PIO Timings + Name(GMUE, 0) // Master UDMA enable + Name(GMUT, 0) // Master UDMA Timings + Name(GSPT, 0) // Slave PIO Timings + Name(GSUE, 0) // Slave UDMA enable + Name(GSUT, 0) // Slave UDMA Timings + + Device(CHN0) //Primary Channel: Pata device + { + Name(_ADR,0x00) + + Method(_STA,0,NotSerialized) + { + If(LNotEqual(_SB.PCI0.IDEC.EPCH, 0x1)) + { + Return(0x00) //channel disable + } + Else + { + Return(0x0F) //channel enable + } + } + Method(_GTM,0,NotSerialized) //Get Timing Mode + { + Return(GTM(PMPT,PMUE,PMUT,PSPT,PSUE,PSUT)) + } + Method(_STM, 3) // Set Timing PIO/DMA Mode + { + Store(Arg0, TMD0) // Copy Arg0 into TMD0 buffer + Store(PMPT, GMPT) // Master PIO Timings + Store(PMUE, GMUE) // Master UDMA enable + Store(PMUT, GMUT) // Master UDMA Timings + Store(PSPT, GSPT) // Slave PIO Timings + Store(PSUE, GSUE) // Slave UDMA enable + Store(PSUT, GSUT) // Slave UDMA Timings + STM() + Store(GMPT, PMPT) // Master PIO Timings + Store(GMUE, PMUE) // Master UDMA enable + Store(GMUT, PMUT) // Master UDMA Timings + Store(GSPT, PSPT) // Slave PIO Timings + Store(GSUE, PSUE) // Slave UDMA enable + Store(GSUT, PSUT) // Slave UDMA Timings + } // end Method _STM + + Device(DRV0) //Master Device + { + Name(_ADR,0x00) //0 indicates master drive + Method(_GTF,0,NotSerialized) //Get Task File: return a buffer of ATA command used to re-initialize the device + { + Return(GTF(0,PMUE,PMUT,PMPT)) + } + } + Device(DRV1) //Slave Device + { + Name(_ADR,0x01) //1 indicates slave drive + Method(_GTF,0,NotSerialized) //Get Task File: return a buffer of ATA command used to re-initialize the device + { + Return(GTF(0,PSUE,PSUT,PSPT)) + } + } + } + + Method(GTM,6,Serialized) + { + Store(Ones,PIO0) //default value: all bits set to 1 + Store(Ones,PIO1) //default value: all bits set to 1 + Store(Ones,DMA0) //default value: all bits set to 1 + Store(Ones,DMA1) //default value: all bits set to 1 + Store(0x10,CHNF) //default value: 0x10 + If(REGF) + { + } + Else + { + Return(TMD0) //unable to setup PCI config space as opRegion;return default value + } + Store(Match(DeRefOf(Index(TIM0,0x01)),MEQ,Arg0,MTR,0x00,0x00),Local6) + If(LLess(Local6,Ones)) + { + Store(DeRefOf(Index(DeRefOf(Index(TIM0,0x00)),Local6)),Local7) + Store(Local7,DMA0) + Store(Local7,PIO0) + } + Store(Match(DeRefOf(Index(TIM0,0x01)),MEQ,Arg3,MTR,0x00,0x00),Local6) + If(LLess(Local6,Ones)) + { + Store(DeRefOf(Index(DeRefOf(Index(TIM0,0x00)),Local6)),Local7) + Store(Local7,DMA1) + Store(Local7,PIO1) + } + If(Arg1) + { + Store(DeRefOf(Index(DeRefOf(Index(TIM0,0x05)),Arg2)),Local5) + Store(DeRefOf(Index(DeRefOf(Index(TIM0,0x04)),Local5)),DMA0) + Or(CHNF,0x01,CHNF) + } + If(Arg4) + { + Store(DeRefOf(Index(DeRefOf(Index(TIM0,0x05)),Arg5)),Local5) + Store(DeRefOf(Index(DeRefOf(Index(TIM0,0x04)),Local5)),DMA1) + Or(CHNF,0x04,CHNF) + } + Return(TMD0) //return timing mode + } + + + Method(STM, 0, Serialized) + { + + If(REGF){} // PCI space not accessible + Else { Return(TMD0) } + + Store(0x00, GMUE) // Master UDMA Disable + Store(0x00, GSUE) // Slave UDMA Disable + Store(0x07, GMUT) // Master UDMA Mode 0 + Store(0x07, GSUT) // Slave UDMA Mode 0 + + If(And(CHNF, 0x1)) + { + Store(Match(DeRefOf(Index(TIM0, 4)), MLE, DMA0, MTR,0,0), Local0) // Get DMA mode + Store(DeRefOf(Index(DeReFof(Index(TIM0, 6)), Local0)), GMUT) // Timing bit mask 66Mhz + Or(GMUE, 0x07, GMUE) // Enable UltraDMA for Device 0 + } + Else // non - UDMA mode. Possible Multi word DMA + { + If(Or(LEqual(PIO0,Ones), LEqual(PIO0,0))) + { + If(And(LLess(DMA0,Ones), LGreater(DMA0,0))) + { + Store(DMA0, PIO0) // Make PIO0=DMA0 + } + } + } + + If(And(CHNF, 0x4)) + { + Store(Match(DeRefOf(Index(TIM0, 4)), MLE, DMA1, MTR,0,0), Local0) + Store(DeRefOf(Index(DeReFof(Index(TIM0, 6)), Local0)), GSUT) // Timing bit mask 66Mhz + Or(GSUE, 0x07, GSUE) // Enable UltraDMA for Device 0 + } + Else // non - UDMA mode. Possible Multi word DMA + { + If(Or(LEqual(PIO1, Ones), LEqual(PIO1,0))) + { + If(And(LLess(DMA1, Ones), LGreater(DMA1,0))) + { + Store(DMA1, PIO1) // Make PIO1 = DMA1 + } + } + } + + And(Match(DeRefOf(Index(TIM0, 0)), MGE, PIO0, MTR,0,0), 0x3, Local0) + Store(DeRefOf(Index(DeReFof(Index(TIM0, 1)), Local0)), Local1) + Store(Local1, GMPT) + + And(Match(DeRefOf(Index(TIM0, 0)), MGE, PIO1, MTR,0,0), 0x3, Local0) + Store(DeRefOf(Index(DeReFof(Index(TIM0, 1)), Local0)), Local1) + Store(Local1, GSPT) + Return(TMD0) + } // end Method STM + + Method(GTF , 4 , Serialized) + { + Store(Buffer(7){0x03, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xEF}, Local1) + Store(Buffer(7){0x03, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xEF}, Local2) + CreateByteField(Local1, 1, Mode) // PIO mode + CreateByteField(Local2, 1, UMOD) // Ultra mode + CreateByteField(Local1, 5, PCHA) // master or slave + CreateByteField(Local2, 5, UCHA) // master or slave + And(Arg0,0x03,Local3) + + If(Lequal(And(Local3,0x01),0x01)) + { + Store(0xB0,PCHA) // drive 1 + Store(0xB0,UCHA) // drive 1 + } + + If(Arg1) + { + Store(DeRefOf(Index(DeReFof(Index(TIM0, 5)), Arg2)), UMOD) //Programming DMA Mode + Or( UMOD, 0x40, UMOD) + } + Else + { // non-UltraDMA + Store(Match(DeRefOf(Index(TIM0, 1)), MEQ, Arg3, MTR,0,0), Local0) + Or(0x20, DeRefOf(Index(DeReFof(Index(TIM0, 3)), Local0)), UMOD) + } + + Store(Match(DeRefOf(Index(TIM0, 1)), MEQ, Arg3, MTR,0,0), Local0) + Or(0x08, DeRefOf(Index(DeReFof(Index(TIM0, 2)), Local0)), Mode) + Concatenate(Local1, Local2, Local6) + Return(Local6) + + } // end of GTF +} + +//---------------------------------------------------------------- +// +// Copyright (c) 2005-2012 VIA Technologies, Inc. +// This program contains proprietary and confidential information. +// All rights reserved except as may be permitted by prior written +// consent. +// +//---------------------------------------------------------------- +//Rev Date Name Description +//---------------------------------------------------------------- + +Device(USB1) { + Name(_ADR,0x00100000) //Address+function. + + Name(_PRW, Package(2){0x0E,3}) + + Name(_S3D, 3) + + OperationRegion(U2F0,PCI_Config,0x00,0xC2) + Field(U2F0,ByteAcc,NoLock,Preserve){ + Offset(0x00), + VID, 16, + Offset(0x04), + CMDR, 3, + Offset(0x3c), + U3IR, 4, //USB1 Interrupt Line + Offset(0x84), + ECDX, 2 //USB1 PM capability status register + } + + Method(_STA,0) { //Status of the USB1 Device + If(LEqual(_SB.PCI0.USB1.CMDR, 0x00)) { + Return(0x0D) + } Else { + Return(0x0F) + } + } +} + +Device(USB2) { + Name(_ADR,0x00100001) //Address+function. + + Name(_PRW, Package(2){0x0E,3}) + + Name(_S3D, 3) + + OperationRegion(U2F1,PCI_Config,0x00,0xC2) + Field(U2F1,ByteAcc,NoLock,Preserve){ + Offset(0x00), + VID, 16, + Offset(0x04), + CMDR, 3, + Offset(0x3c), + U4IR, 4, //USB2 Interrupt Line + Offset(0x84), + ECDX, 2 //USB2 PM capability status register + } + + Method(_STA,0) { //Status of the USB2 Device + If(LEqual(_SB.PCI0.USB2.CMDR, 0x00)) { + Return(0x0D) + } Else { + Return(0x0F) + } + } +} + +Device(USB3){ + Name(_ADR,0x00100002) //Address+function. + + Name(_PRW, Package(2){0x0E,3}) + + Name(_S3D, 3) + + OperationRegion(U2F2,PCI_Config,0x00,0xC2) + Field(U2F2,ByteAcc,NoLock,Preserve){ + Offset(0x00), + VID, 16, + Offset(0x04), + CMDR, 3, + Offset(0x3c), + U5IR, 4, //USB3 Interrupt Line + Offset(0x84), + ECDX, 2 //USB3 PM capability status register + } + + Method(_STA,0) { //Status of the USB3 Device + If(LEqual(_SB.PCI0.USB3.CMDR, 0x00)) { + Return(0x0D) + } Else { + Return(0x0F) + } + } +} + + +Device(EHCI) { + Name(_ADR,0x00100004) //Address+function. + + Name(_PRW, Package(2){0x0E,3}) + + Name(_S3D, 3) + + OperationRegion(U2F4,PCI_Config,0x00,0xC2) + Field(U2F4,ByteAcc,NoLock,Preserve){ + Offset(0x00), + VID, 16, + Offset(0x04), + CMDR, 3, + Offset(0x3c), + U7IR, 4, //EHCI1 Interrupt Line + Offset(0x84), + ECDX, 2 //EHCI1 PM capability status register + } + + Method(_STA,0) { //Status of the EHCI1 Device + If(LEqual(_SB.PCI0.EHCI.CMDR, 0x00)) { + Return(0x0D) + } Else { + Return(0x0F) + } + } +} + + Device (PEXX) + { + Name (_HID, EISAID ("PNP0C01")) + Method (_STA, 0) + { + Return (0x0F) + } + Name (PXXE, ResourceTemplate () + { + Memory32Fixed (ReadWrite, + 0xE0000000, + 0x10000000, + ) + }) + Method (_CRS, 0) + { + + Return (PXXE) + } + } + +//---------------------------------------------------------------- +// +// Copyright (c) 2005-2012 VIA Technologies, Inc. +// This program contains proprietary and confidential information. +// All rights reserved except as may be permitted by prior written +// consent. +// +//---------------------------------------------------------------- +//Rev Date Name Description +//---------------------------------------------------------------- + + + + + +Device(VT86) { + Name(_ADR,0x00110000) //Address+function. + + + OperationRegion(VTSB, PCI_Config, 0x00, 0x100) + Field(_SB.PCI0.VT86.VTSB,ByteAcc,NoLock,Preserve) { + Offset(0x2), + DEID, 16, // Device ID + Offset(0x2C), + ID2C,8, // RX2C + ID2D,8, // RX2D + ID2E,8, // RX2E + ID2F,8, // RX2F + Offset(0x44), + PIRE, 4, + PIRF, 4, + PIRG, 4, + PIRH, 4, // PIRQH# Routing + Offset(0x46), + POLE, 1, // INTE polarity + POLF, 1, // INTF polarity + POLG, 1, // INTG polarity + POLH, 1, // INTH polarity + ENR8, 1, // enable INTE~H routing by Rx44~Rx45. + , 1, + ECOM, 1, + Offset(0x4E), + , 3, + EP74, 1, // Enable 74/75 Access CMOS + , 4, + Offset(0x50), + , 1, + ESB3, 1, // RX5001 EHCI1 + ESB2, 1, // RX5002 USB3 + EIDE, 1, // RX5003 EIDE + EUSB, 1, // RX5004 USB1 + ESB1, 1, // RX5005 USB2 + USBD, 1, // RX5006 USB Device Mode controller + Offset(0x51), + EKBC, 1, // RX5100 Internal Keyboard controller + KBCC, 1, // RX5101 Internal KBC Configuration + EPS2, 1, // RX5102 Internal PS2 Mouse + ERTC, 1, // RX5103 Internal RTC + SDIO, 1, // RX5104 enable SDIO controller + , 2, + Offset(0x55), + , 4, + PIRA, 4, // PCI IRQA + PIRB, 4, // PCI IRQB + PIRC, 4, // PCI IRQC + , 4, + PIRD, 4, // PCI IRQD + + Offset(0x58), + , 6, + ESIA, 1, // Enable Source Bridge IO APIC + , 1, + + Offset(0x81), // Enable ACPI I/O + , 7, + ENIO, 1, + Offset(0x88), + , 7, + IOBA, 9, //Power Management I/O Base + + Offset(0x94), + , 5, + PLLD, 1, // RX9405 Internal PLL Reset During Suspend 0:Enable,1:Disable + + Offset(0xB0), + , 4, + EU1E, 1, //Embedded COM1 + EU2E, 1, //Embedded COM2 + , 2, + Offset(0xB2), + UIQ1, 4, // UART1 IRQ + UIQ2, 4, // UART2 IRQ + Offset(0xB4), + U1BA, 7, // UART1 I/O base address. + , 1, + U2BA, 7, // UART2 I/O base address. + , 1, + Offset(0xB7), + , 3, + UDFE, 1, // UART DMA Funtion Enable + Offset(0xB8), + , 2, + DIBA, 14, // UART DMA I/O Base Address + + Offset(0xBC), + SPIB, 24, + Offset(0xD0), + , 4, + SMBA, 12, //SMBus I/O Base (16-byte I/O space) + Offset(0xD2), + ENSM, 1, //Enable SMBus IO + , 7, + Offset(0xF6), + REBD, 8, //Internal Revision ID + } + + Device(APCM) // APIC MMIO + { + Name(_HID, EISAID("PNP0C02")) // Hardware Device ID, Motherboard Resources + Name(_UID, 0x1100) + + Name(CRS, ResourceTemplate() + { + Memory32Fixed(ReadWrite, 0xFEE00000, 0x00001000, LAPM) // Local APIC MMIO Space + Memory32Fixed(ReadWrite, 0x00000000, 0x00000000, SIAM) // Sourth Bridge IO APIC MMIO Space + }) + + Method(_CRS, 0) + { + CreateDWordField(CRS, ^SIAM._BAS, BAS1) + CreateDWordField(CRS, ^SIAM._LEN, LEN1) + + + If(LEqual(_SB.PCI0.VT86.ESIA, 1)) + { + Store(0xFEC00000, BAS1) + Store(0x1000, LEN1) + } + + Return(CRS) + } + + } + + +//---------------------------------------------------------------- +// +// Copyright (c) 2005-2012 VIA Technologies, Inc. +// This program contains proprietary and confidential information. +// All rights reserved except as may be permitted by prior written +// consent. +// +//---------------------------------------------------------------- +//Rev Date Name Description +//---------------------------------------------------------------- + + + + + + + +//---------------------------------------------------------------- +// +// Copyright (c) 2005-2012 VIA Technologies, Inc. +// This program contains proprietary and confidential information. +// All rights reserved except as may be permitted by prior written +// consent. +// +//---------------------------------------------------------------- +//Rev Date Name Description +//---------------------------------------------------------------- + + +Device(PS2M) //PS2 Mouse Device +{ + Name(_HID,EISAID("PNP0F13")) // Hardware Device ID + + Method(_STA,0) //Status of the PS2 Mouse device + { + Return(0x0F) + } + + Method(_CRS,0) + { // Current Resource + Name (BUF1, ResourceTemplate () + { + IRQNoFlags () + {12} + }) + Return(BUF1) + } + + Name(_PRW, Package(){0x09, 0x04}) +} + +Device(PS2K) // PS2 Keyboard Device +{ + Name(_HID,EISAID("PNP0303")) // Hardware Device ID + Name(_CID,EISAID("PNP030B")) // PNP030B is Microsoft reserved + + Method(_STA,0) //Status of the PS2 Keyboard device + { + Return(0x0F) + } + + Name (_CRS, ResourceTemplate () + { + IO (Decode16, + 0x0060, // Address Range Minimum + 0x0060, // Address Range Maximum + 0x01, // Address Alignment + 0x01, // Address Length + ) + IO (Decode16, + 0x0064, // Address Range Minimum + 0x0064, // Address Range Maximum + 0x01, // Address Alignment + 0x01, // Address Length + ) + IRQNoFlags () + {1} + }) + Name(_PRW, Package(){0x02, 0x04}) +} + + +Device(DMAC) +{ + Name(_HID, EISAID("PNP0200")) + + Name(_CRS,ResourceTemplate() { + IO(Decode16, 0x0, 0x0, 0, 0x10) // Master DMA Controller + IO(Decode16, 0x81, 0x81, 0, 0x3) // DMA Page Registers + IO(Decode16, 0x87, 0x87, 0, 0x1) + IO(Decode16, 0x89, 0x89, 0, 0x3) + IO(Decode16, 0x8F, 0x8F, 0, 0x1) + IO(Decode16, 0xC0, 0xC0, 0, 0x20) // Slave DMA Controller + DMA(Compatibility,NotBusMaster,Transfer8) {4} // Channel 4 is used to cascade the two DMA controller. + }) +} + +Device(RTC) +{ + Name(_HID,EISAID("PNP0B00")) + + Name(BUF0,ResourceTemplate() + { + IO(Decode16, 0x70, 0x70, 0x00, 0x02) + IO(Decode16, 0x74, 0x74, 0x00, 0x00, AAAA) + IRQNoFlags() {8} // Active High, Edge Sensitive, Non-sharable + }) + + Method(_CRS,0,Serialized) + { + CreateByteField(BUF0, ^AAAA._LEN, LEN1) + If(LEqual(_SB.PCI0.VT86.EP74, 0x01)) + { + Store(0x02, LEN1) + } + Return(BUF0) + } +} + +Device(PIC) +{ + Name(_HID,EISAID("PNP0000")) + + Name(_CRS,ResourceTemplate() { + IO(Decode16,0x20,0x20,0x00,0x02) + IO(Decode16,0xA0,0xA0,0x00,0x02) + }) +} + +Device(FPU) +{ + Name(_HID,EISAID("PNP0C04")) + + Name(_CRS,ResourceTemplate() { + IO(Decode16,0xF0,0xF0,0x00,0x1) + IRQNoFlags(){13} + }) +} + +Device(TMR) +{ + Name(_HID,EISAID("PNP0100")) + + Name(BUF0, ResourceTemplate() + { + IO(Decode16,0x40,0x40,0x00,0x04) + IRQNoFlags() {0} + }) + + Method(_CRS, 0, Serialized) + { + Return(BUF0) + } +} + +Device(SPKR) // System Speaker +{ + Name(_HID,EISAID("PNP0800")) + + Name(_CRS,ResourceTemplate() { + IO(Decode16,0x61,0x61,0x01,0x01) + }) +} + + + + + +//---------------------------------------------------------------- +// +// Copyright (c) 2005-2012 VIA Technologies, Inc. +// This program contains proprietary and confidential information. +// All rights reserved except as may be permitted by prior written +// consent. +// +//---------------------------------------------------------------- +//Rev Date Name Description +//---------------------------------------------------------------- + + + + + + +Name (ICRS, ResourceTemplate () +{ + IRQ (Level, ActiveLow, Shared) // The flags is the value of Byte 3 of IRQ Description Definition + { } // The value decides the value of Byte 1 and byte 2 of IRQ Description Definition +}) + +Name(PRSA, ResourceTemplate() +{ + IRQ(Level, ActiveLow, Shared) + {3, 4, 5, 6, 7, 10, 11, 12, 14, 15} +}) +Alias(PRSA, PRSB) +Alias(PRSA, PRSC) +Alias(PRSA, PRSD) +Alias(PRSA, PRSE) +Alias(PRSA, PRSF) +Alias(PRSA, PRSG) +Alias(PRSA, PRSH) + +Device(LNKA) { + Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link + Name(_UID, 1) + Method(_STA, 0) + { + If(LEqual(_SB.PCI0.VT86.PIRA, 0x00)) + { + Return(0x09) //disabled + }Else { + Return(0x0B) //enabled, but no UI + } + } + + Method(_PRS) + { + Return(PRSA) + } + + Method(_DIS) + { + Store(0x0, _SB.PCI0.VT86.PIRA) + } + + Method(_CRS) + { + CreateWordField (ICRS, 1, IRA0) + Store (1, Local1) + ShiftLeft (Local1, _SB.PCI0.VT86.PIRA, IRA0) + Return (ICRS) + } + + Method(_SRS, 1) { + CreateWordField (Arg0, 1, IRA) //Byte 1 and Byte 2 in the IRQ Descriptor Definition + FindSetRightBit (IRA, Local0) + Decrement (Local0) + Store (Local0, _SB.PCI0.VT86.PIRA) + } +} + + +Device(LNKB) { + Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link + Name(_UID, 2) + Method(_STA, 0) + { + If(LEqual(_SB.PCI0.VT86.PIRB, 0x00)) + { + Return(0x09) //disabled + }Else { + Return(0x0B) //enabled, but no UI + } + } + + Method(_PRS) + { + Return(PRSB) + } + + Method(_DIS) + { + Store(0x0, _SB.PCI0.VT86.PIRB) + } + + Method(_CRS) + { + CreateWordField (ICRS, 1, IRA0) + Store (1, Local1) + ShiftLeft (Local1, _SB.PCI0.VT86.PIRB, IRA0) + Return (ICRS) + } + + Method(_SRS, 1) { + CreateWordField (Arg0, 1, IRA) //Byte 1 and Byte 2 in the IRQ Descriptor Definition + FindSetRightBit (IRA, Local0) + Decrement (Local0) + Store (Local0, _SB.PCI0.VT86.PIRB) + } +} + + +Device(LNKC) { + Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link + Name(_UID, 3) + Method(_STA, 0) + { + If(LEqual(_SB.PCI0.VT86.PIRC, 0x00)) + { + Return(0x09) //disabled + }Else { + Return(0x0B) //enabled, but no UI + } + } + + Method(_PRS) + { + Return(PRSC) + } + + Method(_DIS) + { + Store(0x0, _SB.PCI0.VT86.PIRC) + } + + Method(_CRS) + { + CreateWordField (ICRS, 1, IRA0) + Store (1, Local1) + ShiftLeft (Local1, _SB.PCI0.VT86.PIRC, IRA0) + Return (ICRS) + } + + Method(_SRS, 1) { + CreateWordField (Arg0, 1, IRA) //Byte 1 and Byte 2 in the IRQ Descriptor Definition + FindSetRightBit (IRA, Local0) + Decrement (Local0) + Store (Local0, _SB.PCI0.VT86.PIRC) + } +} + +Device(LNKD) { + Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link + Name(_UID, 4) + Method(_STA, 0) + { + If(LEqual(_SB.PCI0.VT86.PIRD, 0x00)) + { + Return(0x09) //disabled + }Else { + Return(0x0B) //enabled, but no UI + } + } + + Method(_PRS) + { + Return(PRSD) + } + + Method(_DIS) + { + Store(0x0, _SB.PCI0.VT86.PIRD) + } + + Method(_CRS) + { + CreateWordField (ICRS, 1, IRA0) + Store (1, Local1) + ShiftLeft (Local1, _SB.PCI0.VT86.PIRD, IRA0) + Return (ICRS) + } + + Method(_SRS, 1) { + CreateWordField (Arg0, 1, IRA) //Byte 1 and Byte 2 in the IRQ Descriptor Definition + FindSetRightBit (IRA, Local0) + Decrement (Local0) + Store (Local0, _SB.PCI0.VT86.PIRD) + } +} +Device(LNKE) { + Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link + Name(_UID, 5) + Method(_STA, 0) + { + If(LEqual(_SB.PCI0.VT86.PIRE, 0x00)) + { + Return(0x09) //disabled + }Else { + Return(0x0B) //enabled, but no UI + } + } + + Method(_PRS) + { + Return(PRSE) + } + + Method(_DIS) + { + Store(0x0, _SB.PCI0.VT86.PIRE) + } + + Method(_CRS) + { + CreateWordField (ICRS, 1, IRA0) + Store (1, Local1) + ShiftLeft (Local1, _SB.PCI0.VT86.PIRE, IRA0) + Return (ICRS) + } + + Method(_SRS, 1) { + CreateWordField (Arg0, 1, IRA) //Byte 1 and Byte 2 in the IRQ Descriptor Definition + FindSetRightBit (IRA, Local0) + Decrement (Local0) + Store (Local0, _SB.PCI0.VT86.PIRE) + Store(One,ENR8) + Store(Zero,POLE) + } +} +Device(LNKF) { + Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link + Name(_UID, 6) + Method(_STA, 0) + { + If(LEqual(_SB.PCI0.VT86.PIRF, 0x00)) + { + Return(0x09) //disabled + }Else { + Return(0x0B) //enabled, but no UI + } + } + + Method(_PRS) + { + Return(PRSF) + } + + Method(_DIS) + { + Store(0x0, _SB.PCI0.VT86.PIRF) + } + + Method(_CRS) + { + CreateWordField (ICRS, 1, IRA0) + Store (1, Local1) + ShiftLeft (Local1, _SB.PCI0.VT86.PIRF, IRA0) + Return (ICRS) + } + + Method(_SRS, 1) { + CreateWordField (Arg0, 1, IRA) //Byte 1 and Byte 2 in the IRQ Descriptor Definition + FindSetRightBit (IRA, Local0) + Decrement (Local0) + Store (Local0, _SB.PCI0.VT86.PIRF) + Store(One,ENR8) + Store(Zero,POLF) + } +} +Device(LNK0) { + Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link + Name(_UID, 7) + Method(_STA, 0) + { + If(LEqual(_SB.PCI0.VT86.PIRG, 0x00)) + { + Return(0x09) //disabled + }Else { + Return(0x0B) //enabled, but no UI + } + } + + Method(_PRS) + { + Return(PRSG) + } + + Method(_DIS) + { + Store(0x0, _SB.PCI0.VT86.PIRG) + } + + Method(_CRS) + { + CreateWordField (ICRS, 1, IRA0) + Store (1, Local1) + ShiftLeft (Local1, _SB.PCI0.VT86.PIRG, IRA0) + Return (ICRS) + } + + Method(_SRS, 1) { + CreateWordField (Arg0, 1, IRA) //Byte 1 and Byte 2 in the IRQ Descriptor Definition + FindSetRightBit (IRA, Local0) + Decrement (Local0) + Store (Local0, _SB.PCI0.VT86.PIRG) + Store(One,ENR8) + Store(Zero,POLG) + } +} +Device(LNK1) +{ + Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link + Name(_UID, 8) + Method(_STA, 0) + { + If(LEqual(_SB.PCI0.VT86.PIRH, 0x00)) + { + Return(0x09) //disabled + }Else { + Return(0x0B) //enabled, but no UI + } + } + + Method(_PRS) + { + Return(PRSH) + } + + Method(_DIS) + { + Store(0x0, _SB.PCI0.VT86.PIRH) + } + + Method(_CRS) + { + CreateWordField (ICRS, 1, IRA0) + Store (1, Local1) + ShiftLeft (Local1, _SB.PCI0.VT86.PIRH, IRA0) + Return (ICRS) + } + + Method(_SRS, 1) { + CreateWordField (Arg0, 1, IRA) //Byte 1 and Byte 2 in the IRQ Descriptor Definition + FindSetRightBit (IRA, Local0) + Decrement (Local0) + Store (Local0, _SB.PCI0.VT86.PIRH) + Store(One,ENR8) + Store(Zero,POLH) + } +} + +// +// Embedded UART1 +// +Device(EUR1) // Communication Device (Modem Port) +{ + Name(_HID, EISAID("PNP0501")) // PnP Device ID 16550 Type + Name(_UID, 0x1) + + Name(_PRW, Package(){8, 4}) + + Method(_PSW, 1) + { + Store(0x20, PADS) // clear _STS first //PMIO Rx30[5] + And(IRQR,0xFE,IRQR) // don not issue SMI //PMIO Rx2A[0] + + If (Arg0) + { + Store(One, CMAE) + } + Else + { + Store(Zero, CMAE) + } + } + + Method(_STA) // Status of the COM device + { + Store(0x00, Local0) + + If(LNotEqual(_SB.PCI0.VT86.ECOM, Zero)) + { + If(_SB.PCI0.VT86.EU1E) + { + Store(0x0F, Local0) + } + Else + { // if base address is not equal to zero. + If(LNotEqual(_SB.PCI0.VT86.U1BA, Zero)) + { + Store(0x0D, Local0) + } + } + } + Return(Local0) + } + + Method(_DIS,0) + { + Store(Zero, _SB.PCI0.VT86.EU1E) // disable embedded COM A. + } + + Name(RSRC,ResourceTemplate (){ + IO(Decode16,0x0,0x0,0x08,0x08) + IRQNoFlags() {} + }) + + Method(_CRS, 0) + { + And(_STA(), 0x04, Local0) // If the device is disabled, return the blank template. + If(LEqual(Local0,Zero)) // + { // + Return(RSRC) // + } // + + Name(BUF1,ResourceTemplate() { // This is the buffer prepared for OS. + IO(Decode16,0x3F8,0x3F8,0x08,0x08) + IO(Decode16,0x4080,0x4080,0x02,0x02) + IRQNoFlags(){4} + DMA(Compatibility, NotBusMaster, Transfer8, ) {0x00} // DMA 0 + }) + + CreateByteField(BUF1, 0x02, IOLO) // IO Port MIN Low + CreateByteField(BUF1, 0x03, IOHI) // IO Port MIN High + CreateByteField(BUF1, 0x04, IORL) // IO Port MAX Low + CreateByteField(BUF1, 0x05, IORH) // IO Port MAX High + + if(LNotEqual(_SB.PCI0.VT86.UDFE, 0x00)) // if enable DMA + { + CreateByteField(BUF1, 0x0A, DILO) // DMA IO Port MIN Low + CreateByteField(BUF1, 0x0B, DIHI) // DMA IO Port MIN High + CreateByteField(BUF1, 0x0C, DIRL) // DMA IO Port MAX Low + CreateByteField(BUF1, 0x0D, DIRH) // DMA IO Port MAX High + } + + CreateWordField(BUF1, 0x11, IRQV) // IRQ mask + + ShiftLeft(_SB.PCI0.VT86.U1BA, 0x03, local0) // IO low. AD7~AD0 + ShiftRight(_SB.PCI0.VT86.U1BA, 0x05, local1) // IO high. AD9~AD8 + + Store(local0, IOLO) + Store(local1, IOHI) + Store(local0, IORL) + Store(local1, IORH) + + Store(0x00, IRQV) // reset IRQ resource. + If(LNotEqual(_SB.PCI0.VT86.UIQ1, 0x00)) + { // put assigned IRQ to return buffer if there is any. + ShiftLeft(One, _SB.PCI0.VT86.UIQ1, IRQV) + } + + if(LNotEqual(_SB.PCI0.VT86.UDFE, 0x00)) // if enable DMA + { + ShiftLeft(_SB.PCI0.VT86.DIBA, 0x02, local0) // IO low. AD7~AD0 + ShiftRight(_SB.PCI0.VT86.DIBA, 0x06, local1) // IO high. AD16~AD8 + + Store(local0, DILO) + Store(local1, DIHI) + Store(local0, DIRL) + Store(local1, DIRH) + } + Return(BUF1) + + } // _CRS + + Name(_PRS,ResourceTemplate() + { + StartDependentFn(0,0) + { + IO(Decode16,0x3F8,0x3F8,0x1,0x8) + IO(Decode16,0x4080,0x4080,0x02,0x02) + IRQ(Edge,ActiveHigh,Exclusive) {0x4} + DMA(Compatibility, NotBusMaster, Transfer8, ) {0x00} // DMA 0 + } + StartDependentFnNoPri() + { + IO(Decode16,0x2F8,0x2F8,0x1,0x8) + IO(Decode16,0x4080,0x4080,0x02,0x02) + IRQ(Edge,ActiveHigh,Exclusive) {0x3} + DMA(Compatibility, NotBusMaster, Transfer8, ) {0x00} // DMA 0 + } + StartDependentFnNoPri() + { + IO(Decode16,0x3E8,0x3E8,0x1,0x8) + IO(Decode16,0x4080,0x4080,0x02,0x02) + IRQ(Edge,ActiveHigh,Exclusive) {0x4} + DMA(Compatibility, NotBusMaster, Transfer8, ) {0x00} // DMA 0 + } + StartDependentFnNoPri() + { + IO(Decode16,0x2E8,0x2E8,0x1,0x8) + IO(Decode16,0x4080,0x4080,0x02,0x02) + IRQ(Edge,ActiveHigh,Exclusive) {0x3} + DMA(Compatibility, NotBusMaster, Transfer8, ) {0x00} // DMA 0 + } + StartDependentFn(2,2) + { + IO(Decode16,0x3F8,0x3F8,0x1,0x8) + IO(Decode16,0x4080,0x4080,0x02,0x02) + IRQ(Edge,ActiveHigh,Exclusive) {0x3} + DMA(Compatibility, NotBusMaster, Transfer8, ) {0x00} // DMA 0 + } + StartDependentFn(2,2) + { + IO(Decode16,0x2F8,0x2F8,0x1,0x8) + IO(Decode16,0x4080,0x4080,0x02,0x02) + IRQ(Edge,ActiveHigh,Exclusive) {0x4} + DMA(Compatibility, NotBusMaster, Transfer8, ) {0x00} // DMA 0 + } + StartDependentFn(2,2) + { + IO(Decode16,0x3E8,0x3E8,0x1,0x8) + IO(Decode16,0x4080,0x4080,0x02,0x02) + IRQ(Edge,ActiveHigh,Exclusive) {0x3} + DMA(Compatibility, NotBusMaster, Transfer8, ) {0x00} // DMA 0 + } + StartDependentFn(2,2) + { + IO(Decode16,0x2E8,0x2E8,0x1,0x8) + IO(Decode16,0x4080,0x4080,0x02,0x02) + IRQ(Edge,ActiveHigh,Exclusive) {0x4} + DMA(Compatibility, NotBusMaster, Transfer8, ) {0x00} // DMA 0 + } + EndDependentFn() + })// _PRS + + Method(_SRS, 1) + { + // + // The Arg0 format is the same as _PRS, and _CRS. + // + CreateByteField (Arg0, 0x02, IOLO) // IO Port Low + CreateByteField (Arg0, 0x03, IOHI) // IO Port High + if(LNotEqual(_SB.PCI0.VT86.UDFE, 0x00)) // if enable DMA + { + CreateByteField (Arg0, 0x0A, DILO) // DMA IO Port Low + CreateByteField (Arg0, 0x0B, DIHI) // DMA IO Port High + } + CreateWordField (Arg0, 0x11, IRQW) // IRQ + + Store(One, _SB.PCI0.VT86.EU1E) // enable embedded COM A. + + ShiftRight(IOLO, 0x03, local0) // set embedded COM A IO base. + ShiftLeft(IOHI, 0x05, local1) // + Or(local0, local1, _SB.PCI0.VT86.U1BA)// + + if(LNotEqual(_SB.PCI0.VT86.UDFE, 0x00)) // if enable DMA + { + ShiftRight(DILO, 0x02, local0) // set embedded COM A DMA IO base. + ShiftLeft(DIHI, 0x06, local1) // + Or(local0, local1, _SB.PCI0.VT86.DIBA) // + } + + FindSetLeftBit(IRQW, Local0) // set embedded COM A IRQ. + If(LNotEqual(Local0, Zero)) // + { // + Subtract(Local0, 0x01, Local0) // IRQ is in a bit-mask fashion. + } // + // + Store(Local0, _SB.PCI0.VT86.UIQ1) + + }// _SRS + +}// embedded UART1. + +// +// Embedded UART2 +// +Device(EUR2) // Communication Device (Modem Port) +{ + Name(_HID, EISAID("PNP0501")) // PnP Device ID 16550 Type + Name(_UID, 0x2) + + Name(_PRW, Package(){8, 4}) + + Method(_PSW, 1) + { + Store(0x40, PADS) // clear _STS first //PMIO Rx30[6] + And(IRQR,0xFE,IRQR) // don not issue SMI //PMIO Rx2A[0]I + + If (Arg0) + { + Store(One, CMBE) + } + Else + { + Store(Zero, CMBE) + } + } + + // + // An empty resource. + // + Name(RSRC,ResourceTemplate (){ + IO(Decode16,0x0,0x0,0x08,0x08) + IRQNoFlags() {} + }) + + Method(_STA) // Status of the COM device + { + Store(0x00, Local0) + + If(LNotEqual(_SB.PCI0.VT86.ECOM, Zero)) + { + If(_SB.PCI0.VT86.EU2E) + { + Store(0x0F, Local0) + } + Else + { // if base address is not equal to zero. + If(LNotEqual(_SB.PCI0.VT86.U2BA, Zero)) + { + Store(0x0D, Local0) + } + } + } + Return(Local0) + } + + Method(_DIS,0) + { + Store(Zero, _SB.PCI0.VT86.EU2E) // disable embedded COM B. + } + + Method(_CRS, 0) + { + And(_STA(), 0x04, Local0) // If the device is disabled, return the blank template. + If(LEqual(Local0,Zero)) // + { // + Return(RSRC) // + } // + + Name(BUF1,ResourceTemplate() { // This is the buffer prepared for OS. + IO(Decode16,0x2F8,0x2F8,0x08,0x08) + IO(Decode16,0x4082,0x4082,0x02,0x02) + IRQNoFlags(){3} + DMA(Compatibility, NotBusMaster, Transfer8, ) {0x03} // + }) + + CreateByteField(BUF1, 0x02, IOLO) // IO Port MIN Low + CreateByteField(BUF1, 0x03, IOHI) // IO Port MIN High + CreateByteField(BUF1, 0x04, IORL) // IO Port MAX Low + CreateByteField(BUF1, 0x05, IORH) // IO Port MAX High + + if(LNotEqual(_SB.PCI0.VT86.UDFE, 0x00)) // if enable DMA + { + CreateByteField(BUF1, 0x0A, DILO) // DMA IO Port MIN Low + CreateByteField(BUF1, 0x0B, DIHI) // DMA IO Port MIN High + CreateByteField(BUF1, 0x0C, DIRL) // DMA IO Port MAX Low + CreateByteField(BUF1, 0x0D, DIRH) // DMA IO Port MAX High + } + CreateWordField(BUF1, 0x11, IRQV) // IRQ mask + + ShiftLeft(_SB.PCI0.VT86.U2BA, 0x03, local0) // IO low. AD7~AD0 + ShiftRight(_SB.PCI0.VT86.U2BA, 0x05, local1) // IO high. AD9~AD8 + + Store(local0, IOLO) + Store(local1, IOHI) + Store(local0, IORL) + Store(local1, IORH) + + Store(0x00, IRQV) // reset IRQ resource. + If(LNotEqual(_SB.PCI0.VT86.UIQ2, 0x00)) + { // put assigned IRQ to return buffer if there is any. + ShiftLeft(One, _SB.PCI0.VT86.UIQ2, IRQV) + } + + if(LNotEqual(_SB.PCI0.VT86.UDFE, 0x00)) // if enable DMA + { + ShiftLeft(_SB.PCI0.VT86.DIBA, 0x02, local0) // IO low. AD7~AD0 + ShiftRight(_SB.PCI0.VT86.DIBA, 0x06, local1) // IO high. AD16~AD8 + + Store(local0, DILO) + Store(local1, DIHI) + Store(local0, DIRL) + Store(local1, DIRH) + } + Return(BUF1) + + } // _CRS + + Name(_PRS,ResourceTemplate() + { + StartDependentFn(0,0) + { + IO(Decode16,0x3F8,0x3F8,0x1,0x8) + IO(Decode16,0x4082,0x4082,0x02,0x02) + IRQ(Edge,ActiveHigh,Exclusive) {0x4} + DMA(Compatibility, NotBusMaster, Transfer8, ) {0x03} // + } + StartDependentFnNoPri() + { + IO(Decode16,0x2F8,0x2F8,0x1,0x8) + IO(Decode16,0x4082,0x4082,0x02,0x02) + IRQ(Edge,ActiveHigh,Exclusive) {0x3} + DMA(Compatibility, NotBusMaster, Transfer8, ) {0x03} // + } + StartDependentFnNoPri() + { + IO(Decode16,0x3E8,0x3E8,0x1,0x8) + IO(Decode16,0x4082,0x4082,0x02,0x02) + IRQ(Edge,ActiveHigh,Exclusive) {0x4} + DMA(Compatibility, NotBusMaster, Transfer8, ) {0x03} // + } + StartDependentFnNoPri() + { + IO(Decode16,0x2E8,0x2E8,0x1,0x8) + IO(Decode16,0x4082,0x4082,0x02,0x02) + IRQ(Edge,ActiveHigh,Exclusive) {0x3} + DMA(Compatibility, NotBusMaster, Transfer8, ) {0x03} // + } + StartDependentFn(2,2) + { + IO(Decode16,0x3F8,0x3F8,0x1,0x8) + IO(Decode16,0x4082,0x4082,0x02,0x02) + IRQ(Edge,ActiveHigh,Exclusive) {0x3} + DMA(Compatibility, NotBusMaster, Transfer8, ) {0x03} // + } + StartDependentFn(2,2) + { + IO(Decode16,0x2F8,0x2F8,0x1,0x8) + IO(Decode16,0x4082,0x4082,0x02,0x02) + IRQ(Edge,ActiveHigh,Exclusive) {0x4} + DMA(Compatibility, NotBusMaster, Transfer8, ) {0x03} // + } + StartDependentFn(2,2) + { + IO(Decode16,0x3E8,0x3E8,0x1,0x8) + IO(Decode16,0x4082,0x4082,0x02,0x02) + IRQ(Edge,ActiveHigh,Exclusive) {0x3} + DMA(Compatibility, NotBusMaster, Transfer8, ) {0x03} // + } + StartDependentFn(2,2) + { + IO(Decode16,0x2E8,0x2E8,0x1,0x8) + IO(Decode16,0x4082,0x4082,0x02,0x02) + IRQ(Edge,ActiveHigh,Exclusive) {0x4} + DMA(Compatibility, NotBusMaster, Transfer8, ) {0x03} // + } + EndDependentFn() + })// _PRS + + Method(_SRS, 1) + { + // + // The Arg0 format is the same as _PRS, and _CRS. + // + CreateByteField (Arg0, 0x02, IOLO) // IO Port Low + CreateByteField (Arg0, 0x03, IOHI) // IO Port High + if(LNotEqual(_SB.PCI0.VT86.UDFE, 0x00)) // if enable DMA + { + CreateByteField (Arg0, 0x0A, DILO) // DMA IO Port Low + CreateByteField (Arg0, 0x0B, DIHI) // DMA IO Port High + } + CreateWordField (Arg0, 0x11, IRQW) // IRQ + + Store(One, _SB.PCI0.VT86.EU2E) // enable embedded COM A. + + ShiftRight(IOLO, 0x03, local0) // set embedded COM A IO base. + ShiftLeft(IOHI, 0x05, local1) // + Or(local0, local1, _SB.PCI0.VT86.U2BA) // + + if(LNotEqual(_SB.PCI0.VT86.UDFE, 0x00)) // if enable DMA + { + ShiftRight(DILO, 0x02, local0) // set embedded COM A DMA IO base. + ShiftLeft(DIHI, 0x06, local1) // + Or(local0, local1, _SB.PCI0.VT86.DIBA) // + } + FindSetLeftBit(IRQW, Local0) // set embedded COM A IRQ. + If(LNotEqual(Local0, Zero)) // + { // + Subtract(Local0, 0x01, Local0) // IRQ is in a bit-mask fashion. + } // + // + Store(Local0, _SB.PCI0.VT86.UIQ2) + + }// _SRS + +}// embedded UART2. + + + + + Device(RMSC) // all "PNP0C02" devices- pieces that don't fit anywhere else + { + Name(_HID,EISAID("PNP0C02")) // Generic motherboard devices + Name (_UID, 0x13) + + Name(CRS,ResourceTemplate(){ + + IO(Decode16,0x10,0x10,0x00,0x10) + IO(Decode16,0x22,0x22,0x00,0x1E) + IO(Decode16,0x44,0x44,0x00,0x1C) + IO(Decode16,0x62,0x62,0x00,0x02) + IO(Decode16,0x65,0x65,0x00,0x0B) + IO(Decode16,0x72,0x72,0x00,0x02) + IO(Decode16,0x76,0x76,0x00,0x09) + IO(Decode16,0x80,0x80,0x00,0x01) + IO(Decode16,0x84,0x84,0x00,0x03) + IO(Decode16,0x88,0x88,0x00,0x01) + IO(Decode16,0x8c,0x8c,0x00,0x03) + IO(Decode16,0x90,0x90,0x00,0x02) + IO(Decode16,0x92,0x92,0x00,0x01) // INIT & Fast A20 port + IO(Decode16,0x93,0x93,0x00,0x0C) + IO(Decode16,0xA2,0xA2,0x00,0x1E) + IO(Decode16,0xE0,0xE0,0x00,0x10) + IO(Decode16,0x3E0,0x3E0,0x00,0x8) + + // Reserve 4D0 and 4D1 for IRQ edge/level control port + IO(Decode16, 0x4D0,0x4D0,0x00,0x2) + // ACPI IO base address allocation + IO(Decode16, 0, 0, 0, 0, IO0) + // SMBus I/O space if applicable + IO(Decode16, 0, 0, 0, 0, IO1) + // SPI Memory Map IO Base + Memory32Fixed(ReadWrite, 0x00000000, 0x00000000, MEM0) + }) + + Method(_CRS, 0){ + If(LEqual(_SB.PCI0.VT86.ENIO, 0x01)) // If we should privide the DSDT, ACPI IO must be enabled. + { + CreateWordField(CRS, ^IO0._MIN, MIN0) + CreateWordField(CRS, ^IO0._MAX, MAX0) + CreateByteField(CRS, ^IO0._LEN, LEN0) + Store(_SB.PCI0.VT86.IOBA, Local0) + ShiftLeft(Local0, 7, Local0) + Store(Local0, MIN0) + Store(Local0, MAX0) + Store(0x80, LEN0) + } + + If(LEqual(_SB.PCI0.VT86.ENSM, 0x01)) + { + CreateWordField(CRS, ^IO1._MIN, MIN1) + CreateWordField(CRS, ^IO1._MAX, MAX1) + CreateByteField(CRS, ^IO1._LEN, LEN1) + Store(_SB.PCI0.VT86.SMBA, Local0) + ShiftLeft(Local0, 4, Local0) + Store(Local0, MIN1) + Store(Local0, MAX1) + Store(0x10, LEN1) // Length: 16 Byte + } + + If(LNotEqual(_SB.PCI0.VT86.SPIB, 0x00)) + { + CreateDWordField(CRS, ^MEM0._BAS, BAS2) + CreateDWordField(CRS, ^MEM0._LEN, LEN2) + Store(_SB.PCI0.VT86.SPIB, Local0) + ShiftLeft(Local0, 8, Local0) + Store(Local0, BAS2) + Store(0x100, LEN2) + } + + Return(CRS) + } + } + + +} // End of VT86 + + + +//---------------------------------------------------------------- +// +// Copyright (c) 2005-2012 VIA Technologies, Inc. +// This program contains proprietary and confidential information. +// All rights reserved except as may be permitted by prior written +// consent. +// +//---------------------------------------------------------------- +//Rev Date Name Description +//---------------------------------------------------------------- + +Name(PICM, Package(){ + + // VIA VGA Device(Integrated Graphics Device) + Package(){0x0001ffff, 0, _SB.PCI0.VT86.LNKA, 0}, // VGA, INTA + + //PCI Slot 1 + Package(){0x0008ffff, 0, _SB.PCI0.VT86.LNKA, 0}, // Slot 1, INTA + Package(){0x0008ffff, 1, _SB.PCI0.VT86.LNKA, 0}, // Slot 1, INTB + Package(){0x0008ffff, 2, _SB.PCI0.VT86.LNKA, 0}, // Slot 1, INTC + Package(){0x0008ffff, 3, _SB.PCI0.VT86.LNKA, 0}, // Slot 1, INTD + + //PCI Slot 2 + Package(){0x0009ffff, 0, _SB.PCI0.VT86.LNKA, 0}, // Slot 2, INTA + Package(){0x0009ffff, 1, _SB.PCI0.VT86.LNKA, 0}, // Slot 2, INTB + Package(){0x0009ffff, 2, _SB.PCI0.VT86.LNKA, 0}, // Slot 2, INTC + Package(){0x0009ffff, 3, _SB.PCI0.VT86.LNKA, 0}, // Slot 2, INTD + + //PCI Slot 3 + Package(){0x000Affff, 0, _SB.PCI0.VT86.LNKA, 0}, // Slot 3, INTA + Package(){0x000Affff, 1, _SB.PCI0.VT86.LNKA, 0}, // Slot 3, INTB + Package(){0x000Affff, 2, _SB.PCI0.VT86.LNKA, 0}, // Slot 3, INTC + Package(){0x000Affff, 3, _SB.PCI0.VT86.LNKA, 0}, // Slot 3, INTD + + // USB Device Controller + Package(){0x000Bffff, 0, _SB.PCI0.VT86.LNKA, 0}, + + // SDIO Controller + Package(){0x000cffff, 0, _SB.PCI0.VT86.LNKA, 0}, + // SD $ MS Controller + Package(){0x000dffff, 0, _SB.PCI0.VT86.LNKB, 0}, + // CE-ATA $ NF Controller(Card Boot) + Package(){0x000effff, 0, _SB.PCI0.VT86.LNKC, 0}, + // VIA VX800 IDE + Package(){0x000fffff, 0, _SB.PCI0.VT86.LNKB, 0}, + + // VIA UHCI USB1 Device + Package(){0x0010ffff, 0, _SB.PCI0.VT86.LNKA, 0}, + // VIA UHCI USB2 Device + Package(){0x0010ffff, 1, _SB.PCI0.VT86.LNKB, 0}, + // VIA UHCI USB3 Device + Package(){0x0010ffff, 2, _SB.PCI0.VT86.LNKC, 0}, + // VIA EHCI USB 2.0 Device + Package(){0x0010ffff, 3, _SB.PCI0.VT86.LNKD, 0}, + + // SB HDAC(Azalia) Audio + Package(){0x0014ffff, 0, _SB.PCI0.VT86.LNKA, 0}, // HD Audio, INTA + + }) + +Name(APIC, Package(){ + + // VIA VGA Device(Integrated Graphics Device) + Package(){0x0001ffff, 0, 0, 0x10}, + + //PCI Slot 1 + Package(){0x0008ffff, 0, 0, 0x10}, + Package(){0x0008ffff, 1, 0, 0x10}, + Package(){0x0008ffff, 2, 0, 0x10}, + Package(){0x0008ffff, 3, 0, 0x10}, + + //PCI Slot 2 + Package(){0x0009ffff, 0, 0, 0x10}, + Package(){0x0009ffff, 1, 0, 0x10}, + Package(){0x0009ffff, 2, 0, 0x10}, + Package(){0x0009ffff, 3, 0, 0x10}, + + //PCI Slot 3 + Package(){0x000Affff, 0, 0, 0x10}, + Package(){0x000Affff, 1, 0, 0x10}, + Package(){0x000Affff, 2, 0, 0x10}, + Package(){0x000Affff, 3, 0, 0x10}, + + // USB Device Controller + Package(){0x000Bffff, 0, 0, 0x13}, // USBD, INTA + + // SDIO Controller + Package(){0x000cffff, 0, 0, 0x16}, // SDIO, INTA + // SD $ MS Controller + Package(){0x000dffff, 0, 0, 0x17}, // Card Reader, INTA + // CE-ATA $ NF Controller(Card Boot) + Package(){0x000effff, 0, 0, 0x14}, // Card Boot(NAND Flash), INTA + // VIA VX800 IDE + Package(){0x000fffff, 0, 0, 0x15}, //IDE, INTA + + // VIA UHCI USB1 Device + Package(){0x0010ffff, 0, 0, 0x14}, + // VIA UHCI USB2 Device + Package(){0x0010ffff, 1, 0, 0x16}, + // VIA UHCI USB3 Device + Package(){0x0010ffff, 2, 0, 0x15}, + // VIA EHCI USB 2.0 Device + Package(){0x0010ffff, 3, 0, 0x17}, + + // SB HDAC(Azalia) Audio + Package(){0x0014ffff, 0, 0, 0x11}, //HD Audio , INTA + +}) // end of APIX + +Method(_PRT, 0, NotSerialized) +{ + If(LNot(PICF)) + { + //PIC + Return(PICM) + }Else{ + //APIC + Return(APIC) + } +} + + Device(P2PB) + { + Name (_ADR, 0x00130000) + + OperationRegion(RP2P,PCI_Config,0x00,0x100) + Field(RP2P,ByteAcc,NoLock,Preserve){ + Offset(0x00), + VID, 16, + Offset(0x04), + CMDR, 3, + Offset(0x19), + BUS1, 8, + } + + Method(_BBN,0) + { + Return(BUS1) + } + + Method(_STA, 0) + { + If(LNotEqual(_SB.PCI0.P2PB.VID, 0x1106)) { + Return(0x00) + }Else { + If(LEqual(_SB.PCI0.P2PB.CMDR, 0x00)) { + Return(0x0D) + }Else{ + Return(0x0F) // present, enabled, functioning + } + } + } + + Name(PIC4, Package(){ + Package(){0x0003ffff, 0,_SB.PCI0.VT86.LNKA , 0}, + Package(){0x0003ffff, 1,_SB.PCI0.VT86.LNKA , 0}, + Package(){0x0003ffff, 2,_SB.PCI0.VT86.LNKA , 0}, + Package(){0x0003ffff, 3,_SB.PCI0.VT86.LNKA , 0}, + + Package(){0x0004ffff, 0,_SB.PCI0.VT86.LNKA , 0}, + Package(){0x0004ffff, 1,_SB.PCI0.VT86.LNKA , 0}, + Package(){0x0004ffff, 2,_SB.PCI0.VT86.LNKA , 0}, + Package(){0x0004ffff, 3,_SB.PCI0.VT86.LNKA , 0}, + + Package(){0x0005ffff, 0,_SB.PCI0.VT86.LNKA , 0}, + Package(){0x0005ffff, 1,_SB.PCI0.VT86.LNKA , 0}, + Package(){0x0005ffff, 2,_SB.PCI0.VT86.LNKA , 0}, + Package(){0x0005ffff, 3,_SB.PCI0.VT86.LNKA , 0}, + + }) + + Name(API4, Package(){ + Package(){0x0003ffff, 0, 0, 0x10}, + Package(){0x0003ffff, 1, 0, 0x10}, + Package(){0x0003ffff, 2, 0, 0x10}, + Package(){0x0003ffff, 3, 0, 0x10}, + + Package(){0x0004ffff, 0, 0, 0x10}, + Package(){0x0004ffff, 1, 0, 0x10}, + Package(){0x0004ffff, 2, 0, 0x10}, + Package(){0x0004ffff, 3, 0, 0x10}, + + Package(){0x0005ffff, 0, 0, 0x10}, + Package(){0x0005ffff, 1, 0, 0x10}, + Package(){0x0005ffff, 2, 0, 0x10}, + Package(){0x0005ffff, 3, 0, 0x10}, + + }) + + Method(_PRT, 0x0, NotSerialized) + { + If(LNot(PICF)) + { + Return(PIC4) + }Else { + Return(API4) + } + } + + Method(_PRW, 0x00, NotSerialized) + { + Return(Package(){0x05,4}) //PME# + } + Device(P4D3) + { + Name(_ADR, 0x00030000) + } + } // Device(P2PB) + + Device(HDAC) + { + Name(_ADR, 0x00140000) + + OperationRegion(RHDA,PCI_Config,0x00,0x100) + Field(RHDA,ByteAcc,NoLock,Preserve){ + Offset(0x00), + VID, 16, + Offset(0x04), + CMDR, 3, + } + + Method(_STA, 0) + { + If(LNotEqual(_SB.PCI0.HDAC.VID, 0x1106)) { + Return(0x00) + }Else { + If(LEqual(_SB.PCI0.HDAC.CMDR, 0x00)) { + Return(0x0D) + }Else{ + Return(0x0F) // present, enabled, functioning + } + } + } + + Method(_PRW) + { + Return (Package(){0xD, 4}) + } + }//Device(HDAC) + + +} // Device(PCI0) + +//----------------------------------------------------------------------- +// System board extension Device node for ACPI BIOS +//----------------------------------------------------------------------- +/* + +Procedure: RMEM + +Description: System board extension Device node for ACPI BIOS +Place the device under _SB scope, As per Msft the MEM +Device is used to reserve Resources that are decoded out of PCI Bus +Important consideration : +Logic to reserve the memory within 0xC0000 - 0xFFFFF Extended BIOS area is based on assumption, that +the BIOS Post has detected all expansion ROMs in the region and made their memory ranges +shadowable ( copied to RAM at the same address, for performance reasons). The rest of the region is left non-Shadowable, +hence no memory is decoded there. Such region is decoded to PCI bus (to be reserved in PCI0._CRS) +Whatever memory is Shadowed, thus, decoded as non "FF"s, is required to be reserved in "SYSM" System board extension Device node, +unless is not already reserved by some of PCI Device drivers. There have been observed the difference of how Win9x & Win2000 +OSes deal with Expansion ROM memory. Win9x Device drivers are tend to claim its expension ROMs regions as used +by the device; Win2000 never use such ROM regions for its devices. Therefore there can be different +approach used for different OSes in reservation unclaimed memory in "SYSM" Device node. +is forwarded to PCI Bus + +Input: Nothing + +Output: _CRS buffer + +**************************************************************************/ + +Device(RMEM) { + Name(_HID, EISAID("PNP0C01")) // Hardware Device ID, System Board + + Name(_UID, 1) + Name(CRS, ResourceTemplate() + { + // Base Address 0 - 0x9FFFF , 640k DOS memory + Memory32Fixed(ReadWrite,0x0000, 0xA0000 ) //Writeable + // Shadow RAM1, C0000 - E0000, 128k Expansion BIOS + Memory32Fixed(ReadOnly, 0x00000, 0x00000, RAM1) //Non-writeable + // Shadow RAM2, E0000 - 1M, 128k System BIOS + Memory32Fixed(ReadOnly, 0xE0000, 0x20000, RAM2) //Non-writeable + // Base Address 1M - Top of system present memory + Memory32Fixed(ReadWrite,0x100000,0x00000, RAM3) //Writeable + + }) + + Method (_CRS, 0) + { + CreateDWordField(CRS, ^RAM1._BAS, BAS1) + CreateDWordField(CRS, ^RAM1._LEN, LEN1) + CreateDWordField(CRS, ^RAM2._BAS, BAS2) + CreateDWordField(CRS, ^RAM2._LEN, LEN2) + CreateDWordField(CRS, ^RAM3._LEN, LEN3) + + //RAM3 + Store(_SB.PCI0.MEMC.LTMA, Local0) + ShiftLeft(Local0, 0x10, Local2) + Store(_SB.PCI0.MEMC.ENIG, Local1) + If(LEqual(Local1, 1)) // Check whether the Internal Graphic is enabled. + { + Add(_SB.PCI0.MEMC.FBSZ, 2, Local3) + ShiftLeft(1, Local3, Local4) + ShiftLeft(Local4, 0x14, Local4) + Subtract(Local2, Local4, Local2) // Subtract the Framebuffer Size + } + Store(_SB.PCI0.MEMC.ENTS, Local1) + If(LEqual(Local1, 1)) // Check Whether the Top SMRAM Segment is Enabled + { + ShiftLeft(1, _SB.PCI0.MEMC.TSMS, Local5) + ShiftLeft(Local5, 0x14, Local5) + Subtract(Local2, Local5, Local2) // Subtract Top SM RAM Size + } + Subtract(Local2, 0x100000, LEN3) + + Return(CRS) + } +} + + }//Scope(_SB) +}
Added: cpu/x86/pc/olpc/via/rtcwake.fth =================================================================== --- cpu/x86/pc/olpc/via/rtcwake.fth (rev 0) +++ cpu/x86/pc/olpc/via/rtcwake.fth 2009-06-25 21:13:27 UTC (rev 1222) @@ -0,0 +1,97 @@ +purpose: Suspend/resume test with RTC wakeup +\ See license at end of file + +h# 7d constant cmos-alarm-day \ Offset of day alarm in CMOS +h# 7e constant cmos-alarm-month \ Offset of month alarm in CMOS +h# 7f constant cmos-century \ Offset of century byte in CMOS + +dev /rtc + +cmos-alarm-day " alarm_day" integer-property +cmos-alarm-month " alarm_month" integer-property +cmos-century " century" integer-property + +\ There are a couple of reasons why you might not want to enable the IRQ: +\ a) It might be shared with the timer IRQ so it is already enabled +\ b) When using the alarm to wakeup from sleep, the IRQ might be unnecessary. + +0 value alarm-irq +false value enable-alarm-irq? + +defer alarm-hook ' noop to alarm-hook + +: disable-alarm ( -- ) + enable-alarm-irq? if alarm-irq disable-interrupt then + h# b cmos@ h# 20 invert and h# b cmos! +; + +: rtc-handler ( -- ) + disable-alarm + h# c cmos@ drop \ Clear RTC interrupt flags + alarm-hook +; + +: enable-alarm ( -- ) + ['] rtc-handler 8 interrupt-handler! + enable-alarm-irq? if alarm-irq disable-interrupt then + h# c cmos@ drop \ Clear RTC interrupt flags + h# b cmos@ h# 20 or h# b cmos! +; + +: set-alarm ( [ handler-xt ] secs -- ) \ No handler-xt if secs is 0 + disable-alarm + ?dup 0= if exit then ( handler-xt secs ) + swap to alarm-hook ( secs ) + now ( secs s m h ) + d# 60 * d# 60 * swap d# 60 * + + + ( s ) + d# 60 /mod d# 60 /mod d# 24 mod ( s m h ) + h# c0 cmos-alarm-month cmos! ( s m h ) \ Any day + h# c0 cmos-alarm-day cmos! ( s m h ) \ Any month + 5 bcd! 3 bcd! 1 bcd! ( ) + enable-alarm +; + +dend + +: show-rtc-wake ." R" ; + +d# 1 constant rtc-alarm-delay +: pm-sleep-rtc ( -- ) + 0 acpi-l@ h# 400.0000 or 0 acpi-l! \ Enable RTC SCI + ['] show-rtc-wake rtc-alarm-delay " set-alarm" clock-node @ $call-method + s + 0 acpi-l@ h# 400.0000 invert and 0 acpi-l! \ Disable RTC SCI +; +: rtc-wackup + 0 + begin pm-sleep-rtc space dup . (cr 1+ key? until + key drop +; + +stand-init: Century + h# 20 cmos-century cmos! \ The century is in BCD, hence h# +; + +\ LICENSE_BEGIN +\ Copyright (c) 2009 FirmWorks +\ +\ Permission is hereby granted, free of charge, to any person obtaining +\ a copy of this software and associated documentation files (the +\ "Software"), to deal in the Software without restriction, including +\ without limitation the rights to use, copy, modify, merge, publish, +\ distribute, sublicense, and/or sell copies of the Software, and to +\ permit persons to whom the Software is furnished to do so, subject to +\ the following conditions: +\ +\ The above copyright notice and this permission notice shall be +\ included in all copies or substantial portions of the Software. +\ +\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +\ +\ LICENSE_END