/*
 * Copyright 2005 AMD
 */
DefinitionBlock ("DSDT.aml", "DSDT", 1, "AMD-K8", "AMDACPI", 100925440)
{
    Scope (_PR)
    {
        Processor (CPU0, 0x00, 0x0000C010, 0x06) {}
        Processor (CPU1, 0x01, 0x00000000, 0x00) {}
        Processor (CPU2, 0x02, 0x00000000, 0x00) {}
        Processor (CPU3, 0x03, 0x00000000, 0x00) {}

    }

    Method (FWSO, 0, NotSerialized) { }

    Name (_S0, Package (0x04) { 0x00, 0x00, 0x00, 0x00 })
    Name (_S1, Package (0x04) { 0x01, 0x01, 0x01, 0x01 })
    Name (_S3, Package (0x04) { 0x05, 0x05, 0x05, 0x05 })
    Name (_S5, Package (0x04) { 0x07, 0x07, 0x07, 0x07 })

    Scope (_SB)
    {
        Device (PCI0)
        {
	    /* BUS0 root bus */

/*
//hardcode begin
            Name (BUSN, Package (0x04) { 0x04010003, 0x06050013, 0x00000000, 0x00000000 })
            Name (MMIO, Package (0x10) { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
                                         0x00f43003, 0x00f44f01, 0x0000d003, 0x00efff01, 0x00f40003, 0x00f42f00, 0x00f45003, 0x00f44f00 })
            Name (PCIO, Package (0x08) { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00001003, 0x00001000, 0x00002003, 0x00002001 })
            Name (SBLK, 0x00)
            Name (TOM1, 0x40000000)

	    // for AMD opteron we could have four chains, so we will have PCI1, PCI2, PCI3, PCI4
	    // PCI1 must be SBLK Chain
	    // If you have HT IO card that is connected to PCI2, PCI3, PCI4, then you man put Device in SSDT2, SSDT3, SSDT4,  
	    //    in acpi_tables.c you can link those SSDT to RSDT according to it's presence.
	    // Otherwise put the PCI2, PCI3, PCI4 in this dsdt
    	    Name (HCLK, Package (0x04) { 0x00000001, 0x00000011, 0x00000000, 0x00000000 }) //[0,3]=1 enable [4,7]=node_id, [8,15]=linkn

	    Name (SBDN, 3)  // 8111 UnitID Base
//hardcode end
*/
	    External (BUSN)
	    External (MMIO)
	    External (PCIO)
	    External (SBLK)
	    External (TOM1)
	    External (HCLK)
	    External (SBDN)
	    External (HCDN)

            Name (_HID, EisaId ("PNP0A03"))
            Name (_ADR, 0x00180000)
            Name (_UID, 0x01)
	    Name (_BBN, 0)


	    // define L1IC Link1 on node0 init completed, so node1 is installed
	    // We must make sure our bus is 0 ? 
            OperationRegion (LDT1, PCI_Config, 0xA4, 0x01)
            Field (LDT1, ByteAcc, Lock, Preserve)
            {
                    ,   5,
                L1IC,   1
            }

	}
	
	Device (PCI1)
	{
	    Name (HCIN, 0x00)  // HC1
	    // BUS 1 first HT Chain
            Name (_HID, EisaId ("PNP0A03"))
            Name (_ADR, 0x00180000)  // Fake 
            Name (_UID, 0x02)
            Method (_BBN, 0, NotSerialized)
            {
                Return (GBUS (0x00, \_SB.PCI0.SBLK))
            }

            Method (_CRS, 0, NotSerialized)
            {
                Name (BUF0, ResourceTemplate ()
                {
                    IO (Decode16, 0x0CF8, 0x0CF8, 0x01, 0x08) //CF8-CFFh
                    IO (Decode16, 0xC000, 0xC000, 0x01, 0x80) //8000h
                    IO (Decode16, 0xC080, 0xC080, 0x01, 0x80) //8080h

                    WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
                        0x0000, // Address Space Granularity
                        0x8100, // Address Range Minimum
                        0xFFFF, // Address Range Maximum
                        0x0000, // Address Translation Offset
                        0x7F00,,,
                        , TypeStatic)    //8100h-FFFFh

                    DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
                        0x00000000, // Address Space Granularity
                        0x000C0000, // Address Range Minimum
                        0x00000000, // Address Range Maximum
                        0x00000000, // Address Translation Offset
                        0x00000000,,,
                        , AddressRangeMemory, TypeStatic)   //Video BIOS A0000h-C7FFFh

                    Memory32Fixed (ReadWrite, 0x000D8000, 0x00004000)//USB HC D8000-DBFFF

                    WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
                        0x0000, // Address Space Granularity
                        0x0000, // Address Range Minimum
                        0x03AF, // Address Range Maximum
                        0x0000, // Address Translation Offset
                        0x03B0,,,
                        , TypeStatic)  //0-CF7h

                    WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
                        0x0000, // Address Space Granularity
                        0x03E0, // Address Range Minimum
                        0x0CF7, // Address Range Maximum
                        0x0000, // Address Translation Offset
                        0x0918,,,
                        , TypeStatic)  //0-CF7h
                })
                \_SB.OSTP ()
                CreateDWordField (BUF0, 0x3E, VLEN)
                CreateDWordField (BUF0, 0x36, VMAX)
                CreateDWordField (BUF0, 0x32, VMIN)
                ShiftLeft (VGA1, 0x09, Local0)
                Add (VMIN, Local0, VMAX)
                Decrement (VMAX)
                Store (Local0, VLEN)
                Concatenate (\_SB.GMEM (0x00, \_SB.PCI0.SBLK), BUF0, Local1)
                Concatenate (\_SB.GIOR (0x00, \_SB.PCI0.SBLK), Local1, Local2)
                Concatenate (\_SB.GWBN (0x00, \_SB.PCI0.SBLK), Local2, Local3)
                Return (Local3) 
	    }

	    Include ("pci1_hc.asl")
		
        }

    }

    Scope (_GPE)
    {
        Method (_L08, 0, NotSerialized)
        {
            Notify (\_SB.PCI1, 0x02) //PME# Wakeup
        }

        Method (_L0F, 0, NotSerialized)
        {
            Notify (\_SB.PCI1.TP2P.USB0, 0x02)  //USB Wakeup
        }

        Method (_L22, 0, NotSerialized) // GPIO18 (LID) - Pogo 0 Bridge B
        {
            Notify (\_SB.PCI1.PG0B, 0x02)
        }

        Method (_L29, 0, NotSerialized) // GPIO25 (Suspend) - Pogo 0 Bridge A 
        {
            Notify (\_SB.PCI1.PG0A, 0x02)
        }
    }

    Method (_PTS, 1, NotSerialized)
    {
        Or (Arg0, 0xF0, Local0)
        Store (Local0, DBG1)
    }
/*
    Method (_WAK, 1, NotSerialized)
    {
        Or (Arg0, 0xE0, Local0)
        Store (Local0, DBG1)
    }
*/
    Name (PICF, 0x00) //Flag Variable for PIC vs. I/O APIC Mode
    Method (_PIC, 1, NotSerialized) //PIC Flag and Interface Method
    {
        Store (Arg0, PICF)
    }

    OperationRegion (DEBG, SystemIO, 0x80, 0x01)
    Field (DEBG, ByteAcc, Lock, Preserve)
    {
        DBG1,   8
    }

    OperationRegion (EXTM, SystemMemory, 0x000FF83C, 0x04)
    Field (EXTM, WordAcc, Lock, Preserve)
    {
        AMEM,   32
    }

    OperationRegion (VGAM, SystemMemory, 0x000C0002, 0x01)
    Field (VGAM, ByteAcc, Lock, Preserve)
    {
        VGA1,   8
    }

    OperationRegion (GRAM, SystemMemory, 0x0400, 0x0100)
    Field (GRAM, ByteAcc, Lock, Preserve)
    {
        Offset (0x10), 
        FLG0,   8
    }

    OperationRegion (GSTS, SystemIO, 0xC028, 0x02)
    Field (GSTS, ByteAcc, NoLock, Preserve)
    {
            ,   4, 
        IRQR,   1
    }

    OperationRegion (Z007, SystemIO, 0x21, 0x01)
    Field (Z007, ByteAcc, NoLock, Preserve)
    {
        Z008,   8
    }

    OperationRegion (Z009, SystemIO, 0xA1, 0x01)
    Field (Z009, ByteAcc, NoLock, Preserve)
    {
        Z00A,   8
    }

    Include ("amdk8_util.asl")

}

