acpi-build.c (0403b0f539f40a21da60409b825b4653b273ab39) acpi-build.c (ff80dc7fa8045e2b2531888d965424d2b0e1d1b6)
1/* Support for generating ACPI tables and passing them to Guests
2 *
3 * Copyright (C) 2008-2010 Kevin O'Connor <kevin@koconnor.net>
4 * Copyright (C) 2006 Fabrice Bellard
5 * Copyright (C) 2013 Red Hat Inc
6 *
7 * Author: Michael S. Tsirkin <mst@redhat.com>
8 *

--- 606 unchanged lines hidden (view full) ---

615
616 /* Reserve space for header */
617 acpi_data_push(ssdt->buf, sizeof(AcpiTableHeader));
618
619 scope = aml_scope("\\_SB.PCI0");
620 /* build PCI0._CRS */
621 crs = aml_resource_template();
622 aml_append(crs,
1/* Support for generating ACPI tables and passing them to Guests
2 *
3 * Copyright (C) 2008-2010 Kevin O'Connor <kevin@koconnor.net>
4 * Copyright (C) 2006 Fabrice Bellard
5 * Copyright (C) 2013 Red Hat Inc
6 *
7 * Author: Michael S. Tsirkin <mst@redhat.com>
8 *

--- 606 unchanged lines hidden (view full) ---

615
616 /* Reserve space for header */
617 acpi_data_push(ssdt->buf, sizeof(AcpiTableHeader));
618
619 scope = aml_scope("\\_SB.PCI0");
620 /* build PCI0._CRS */
621 crs = aml_resource_template();
622 aml_append(crs,
623 aml_word_bus_number(aml_min_fixed, aml_max_fixed, aml_pos_decode,
623 aml_word_bus_number(AML_MIN_FIXED, AML_MAX_FIXED, AML_POS_DECODE,
624 0x0000, 0x0000, 0x00FF, 0x0000, 0x0100));
624 0x0000, 0x0000, 0x00FF, 0x0000, 0x0100));
625 aml_append(crs, aml_io(aml_decode16, 0x0CF8, 0x0CF8, 0x01, 0x08));
625 aml_append(crs, aml_io(AML_DECODE16, 0x0CF8, 0x0CF8, 0x01, 0x08));
626
627 aml_append(crs,
626
627 aml_append(crs,
628 aml_word_io(aml_min_fixed, aml_max_fixed,
629 aml_pos_decode, aml_entire_range,
628 aml_word_io(AML_MIN_FIXED, AML_MAX_FIXED,
629 AML_POS_DECODE, AML_ENTIRE_RANGE,
630 0x0000, 0x0000, 0x0CF7, 0x0000, 0x0CF8));
631 aml_append(crs,
630 0x0000, 0x0000, 0x0CF7, 0x0000, 0x0CF8));
631 aml_append(crs,
632 aml_word_io(aml_min_fixed, aml_max_fixed,
633 aml_pos_decode, aml_entire_range,
632 aml_word_io(AML_MIN_FIXED, AML_MAX_FIXED,
633 AML_POS_DECODE, AML_ENTIRE_RANGE,
634 0x0000, 0x0D00, 0xFFFF, 0x0000, 0xF300));
635 aml_append(crs,
634 0x0000, 0x0D00, 0xFFFF, 0x0000, 0xF300));
635 aml_append(crs,
636 aml_dword_memory(aml_pos_decode, aml_min_fixed, aml_max_fixed,
637 aml_cacheable, aml_ReadWrite,
636 aml_dword_memory(AML_POS_DECODE, AML_MIN_FIXED, AML_MAX_FIXED,
637 AML_CACHEABLE, AML_READ_WRITE,
638 0, 0x000A0000, 0x000BFFFF, 0, 0x00020000));
639 aml_append(crs,
638 0, 0x000A0000, 0x000BFFFF, 0, 0x00020000));
639 aml_append(crs,
640 aml_dword_memory(aml_pos_decode, aml_min_fixed, aml_max_fixed,
641 aml_non_cacheable, aml_ReadWrite,
640 aml_dword_memory(AML_POS_DECODE, AML_MIN_FIXED, AML_MAX_FIXED,
641 AML_NON_CACHEABLE, AML_READ_WRITE,
642 0, pci->w32.begin, pci->w32.end - 1, 0,
643 pci->w32.end - pci->w32.begin));
644 if (pci->w64.begin) {
645 aml_append(crs,
642 0, pci->w32.begin, pci->w32.end - 1, 0,
643 pci->w32.end - pci->w32.begin));
644 if (pci->w64.begin) {
645 aml_append(crs,
646 aml_qword_memory(aml_pos_decode, aml_min_fixed, aml_max_fixed,
647 aml_cacheable, aml_ReadWrite,
646 aml_qword_memory(AML_POS_DECODE, AML_MIN_FIXED, AML_MAX_FIXED,
647 AML_CACHEABLE, AML_READ_WRITE,
648 0, pci->w64.begin, pci->w64.end - 1, 0,
649 pci->w64.end - pci->w64.begin));
650 }
651 aml_append(scope, aml_name_decl("_CRS", crs));
652
653 /* reserve GPE0 block resources */
654 dev = aml_device("GPE0");
655 aml_append(dev, aml_name_decl("_HID", aml_string("PNP0A06")));
656 aml_append(dev, aml_name_decl("_UID", aml_string("GPE0 resources")));
657 /* device present, functioning, decoding, not shown in UI */
658 aml_append(dev, aml_name_decl("_STA", aml_int(0xB)));
659 crs = aml_resource_template();
660 aml_append(crs,
648 0, pci->w64.begin, pci->w64.end - 1, 0,
649 pci->w64.end - pci->w64.begin));
650 }
651 aml_append(scope, aml_name_decl("_CRS", crs));
652
653 /* reserve GPE0 block resources */
654 dev = aml_device("GPE0");
655 aml_append(dev, aml_name_decl("_HID", aml_string("PNP0A06")));
656 aml_append(dev, aml_name_decl("_UID", aml_string("GPE0 resources")));
657 /* device present, functioning, decoding, not shown in UI */
658 aml_append(dev, aml_name_decl("_STA", aml_int(0xB)));
659 crs = aml_resource_template();
660 aml_append(crs,
661 aml_io(aml_decode16, pm->gpe0_blk, pm->gpe0_blk, 1, pm->gpe0_blk_len)
661 aml_io(AML_DECODE16, pm->gpe0_blk, pm->gpe0_blk, 1, pm->gpe0_blk_len)
662 );
663 aml_append(dev, aml_name_decl("_CRS", crs));
664 aml_append(scope, dev);
665
666 /* reserve PCIHP resources */
667 if (pm->pcihp_io_len) {
668 dev = aml_device("PHPR");
669 aml_append(dev, aml_name_decl("_HID", aml_string("PNP0A06")));
670 aml_append(dev,
671 aml_name_decl("_UID", aml_string("PCI Hotplug resources")));
672 /* device present, functioning, decoding, not shown in UI */
673 aml_append(dev, aml_name_decl("_STA", aml_int(0xB)));
674 crs = aml_resource_template();
675 aml_append(crs,
662 );
663 aml_append(dev, aml_name_decl("_CRS", crs));
664 aml_append(scope, dev);
665
666 /* reserve PCIHP resources */
667 if (pm->pcihp_io_len) {
668 dev = aml_device("PHPR");
669 aml_append(dev, aml_name_decl("_HID", aml_string("PNP0A06")));
670 aml_append(dev,
671 aml_name_decl("_UID", aml_string("PCI Hotplug resources")));
672 /* device present, functioning, decoding, not shown in UI */
673 aml_append(dev, aml_name_decl("_STA", aml_int(0xB)));
674 crs = aml_resource_template();
675 aml_append(crs,
676 aml_io(aml_decode16, pm->pcihp_io_base, pm->pcihp_io_base, 1,
676 aml_io(AML_DECODE16, pm->pcihp_io_base, pm->pcihp_io_base, 1,
677 pm->pcihp_io_len)
678 );
679 aml_append(dev, aml_name_decl("_CRS", crs));
680 aml_append(scope, dev);
681 }
682 aml_append(ssdt, scope);
683
684 /* create S3_ / S4_ / S5_ packages if necessary */

--- 30 unchanged lines hidden (view full) ---

715 dev = aml_device("SMC");
716
717 aml_append(dev, aml_name_decl("_HID", aml_eisaid("APP0001")));
718 /* device present, functioning, decoding, not shown in UI */
719 aml_append(dev, aml_name_decl("_STA", aml_int(0xB)));
720
721 crs = aml_resource_template();
722 aml_append(crs,
677 pm->pcihp_io_len)
678 );
679 aml_append(dev, aml_name_decl("_CRS", crs));
680 aml_append(scope, dev);
681 }
682 aml_append(ssdt, scope);
683
684 /* create S3_ / S4_ / S5_ packages if necessary */

--- 30 unchanged lines hidden (view full) ---

715 dev = aml_device("SMC");
716
717 aml_append(dev, aml_name_decl("_HID", aml_eisaid("APP0001")));
718 /* device present, functioning, decoding, not shown in UI */
719 aml_append(dev, aml_name_decl("_STA", aml_int(0xB)));
720
721 crs = aml_resource_template();
722 aml_append(crs,
723 aml_io(aml_decode16, misc->applesmc_io_base, misc->applesmc_io_base,
723 aml_io(AML_DECODE16, misc->applesmc_io_base, misc->applesmc_io_base,
724 0x01, APPLESMC_MAX_DATA_LENGTH)
725 );
726 aml_append(crs, aml_irq_no_flags(6));
727 aml_append(dev, aml_name_decl("_CRS", crs));
728
729 aml_append(scope, dev);
730 aml_append(ssdt, scope);
731 }
732
733 if (misc->pvpanic_port) {
734 scope = aml_scope("\\_SB.PCI0.ISA");
735
736 dev = aml_device("PEVR");
737 aml_append(dev, aml_name_decl("_HID", aml_string("QEMU0001")));
738
739 crs = aml_resource_template();
740 aml_append(crs,
724 0x01, APPLESMC_MAX_DATA_LENGTH)
725 );
726 aml_append(crs, aml_irq_no_flags(6));
727 aml_append(dev, aml_name_decl("_CRS", crs));
728
729 aml_append(scope, dev);
730 aml_append(ssdt, scope);
731 }
732
733 if (misc->pvpanic_port) {
734 scope = aml_scope("\\_SB.PCI0.ISA");
735
736 dev = aml_device("PEVR");
737 aml_append(dev, aml_name_decl("_HID", aml_string("QEMU0001")));
738
739 crs = aml_resource_template();
740 aml_append(crs,
741 aml_io(aml_decode16, misc->pvpanic_port, misc->pvpanic_port, 1, 1)
741 aml_io(AML_DECODE16, misc->pvpanic_port, misc->pvpanic_port, 1, 1)
742 );
743 aml_append(dev, aml_name_decl("_CRS", crs));
744
742 );
743 aml_append(dev, aml_name_decl("_CRS", crs));
744
745 aml_append(dev, aml_operation_region("PEOR", aml_system_io,
745 aml_append(dev, aml_operation_region("PEOR", AML_SYSTEM_IO,
746 misc->pvpanic_port, 1));
746 misc->pvpanic_port, 1));
747 field = aml_field("PEOR", aml_byte_acc, aml_preserve);
747 field = aml_field("PEOR", AML_BYTE_ACC, AML_PRESERVE);
748 aml_append(field, aml_named_field("PEPT", 8));
749 aml_append(dev, field);
750
751 method = aml_method("RDPT", 0);
752 aml_append(method, aml_store(aml_name("PEPT"), aml_local(0)));
753 aml_append(method, aml_return(aml_local(0)));
754 aml_append(dev, method);
755

--- 12 unchanged lines hidden (view full) ---

768 aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0A06")));
769 aml_append(dev,
770 aml_name_decl("_UID", aml_string("CPU Hotplug resources"))
771 );
772 /* device present, functioning, decoding, not shown in UI */
773 aml_append(dev, aml_name_decl("_STA", aml_int(0xB)));
774 crs = aml_resource_template();
775 aml_append(crs,
748 aml_append(field, aml_named_field("PEPT", 8));
749 aml_append(dev, field);
750
751 method = aml_method("RDPT", 0);
752 aml_append(method, aml_store(aml_name("PEPT"), aml_local(0)));
753 aml_append(method, aml_return(aml_local(0)));
754 aml_append(dev, method);
755

--- 12 unchanged lines hidden (view full) ---

768 aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0A06")));
769 aml_append(dev,
770 aml_name_decl("_UID", aml_string("CPU Hotplug resources"))
771 );
772 /* device present, functioning, decoding, not shown in UI */
773 aml_append(dev, aml_name_decl("_STA", aml_int(0xB)));
774 crs = aml_resource_template();
775 aml_append(crs,
776 aml_io(aml_decode16, pm->cpu_hp_io_base, pm->cpu_hp_io_base, 1,
776 aml_io(AML_DECODE16, pm->cpu_hp_io_base, pm->cpu_hp_io_base, 1,
777 pm->cpu_hp_io_len)
778 );
779 aml_append(dev, aml_name_decl("_CRS", crs));
780 aml_append(sb_scope, dev);
781 /* declare CPU hotplug MMIO region and PRS field to access it */
782 aml_append(sb_scope, aml_operation_region(
777 pm->cpu_hp_io_len)
778 );
779 aml_append(dev, aml_name_decl("_CRS", crs));
780 aml_append(sb_scope, dev);
781 /* declare CPU hotplug MMIO region and PRS field to access it */
782 aml_append(sb_scope, aml_operation_region(
783 "PRST", aml_system_io, pm->cpu_hp_io_base, pm->cpu_hp_io_len));
784 field = aml_field("PRST", aml_byte_acc, aml_preserve);
783 "PRST", AML_SYSTEM_IO, pm->cpu_hp_io_base, pm->cpu_hp_io_len));
784 field = aml_field("PRST", AML_BYTE_ACC, AML_PRESERVE);
785 aml_append(field, aml_named_field("PRS", 256));
786 aml_append(sb_scope, field);
787
788 /* build Processor object for each processor */
789 for (i = 0; i < acpi_cpus; i++) {
790 dev = aml_processor(i, 0, 0, "CP%.02X", i);
791
792 method = aml_method("_MAT", 0);

--- 47 unchanged lines hidden (view full) ---

840 assert(nr_mem <= ACPI_MAX_RAM_SLOTS);
841 scope = aml_scope("\\_SB.PCI0." stringify(MEMORY_HOTPLUG_DEVICE));
842 aml_append(scope,
843 aml_name_decl(stringify(MEMORY_SLOTS_NUMBER), aml_int(nr_mem))
844 );
845
846 crs = aml_resource_template();
847 aml_append(crs,
785 aml_append(field, aml_named_field("PRS", 256));
786 aml_append(sb_scope, field);
787
788 /* build Processor object for each processor */
789 for (i = 0; i < acpi_cpus; i++) {
790 dev = aml_processor(i, 0, 0, "CP%.02X", i);
791
792 method = aml_method("_MAT", 0);

--- 47 unchanged lines hidden (view full) ---

840 assert(nr_mem <= ACPI_MAX_RAM_SLOTS);
841 scope = aml_scope("\\_SB.PCI0." stringify(MEMORY_HOTPLUG_DEVICE));
842 aml_append(scope,
843 aml_name_decl(stringify(MEMORY_SLOTS_NUMBER), aml_int(nr_mem))
844 );
845
846 crs = aml_resource_template();
847 aml_append(crs,
848 aml_io(aml_decode16, pm->mem_hp_io_base, pm->mem_hp_io_base, 0,
848 aml_io(AML_DECODE16, pm->mem_hp_io_base, pm->mem_hp_io_base, 0,
849 pm->mem_hp_io_len)
850 );
851 aml_append(scope, aml_name_decl("_CRS", crs));
852
853 aml_append(scope, aml_operation_region(
849 pm->mem_hp_io_len)
850 );
851 aml_append(scope, aml_name_decl("_CRS", crs));
852
853 aml_append(scope, aml_operation_region(
854 stringify(MEMORY_HOTPLUG_IO_REGION), aml_system_io,
854 stringify(MEMORY_HOTPLUG_IO_REGION), AML_SYSTEM_IO,
855 pm->mem_hp_io_base, pm->mem_hp_io_len)
856 );
857
855 pm->mem_hp_io_base, pm->mem_hp_io_len)
856 );
857
858 field = aml_field(stringify(MEMORY_HOTPLUG_IO_REGION), aml_dword_acc,
859 aml_preserve);
858 field = aml_field(stringify(MEMORY_HOTPLUG_IO_REGION), AML_DWORD_ACC,
859 AML_PRESERVE);
860 aml_append(field, /* read only */
861 aml_named_field(stringify(MEMORY_SLOT_ADDR_LOW), 32));
862 aml_append(field, /* read only */
863 aml_named_field(stringify(MEMORY_SLOT_ADDR_HIGH), 32));
864 aml_append(field, /* read only */
865 aml_named_field(stringify(MEMORY_SLOT_SIZE_LOW), 32));
866 aml_append(field, /* read only */
867 aml_named_field(stringify(MEMORY_SLOT_SIZE_HIGH), 32));
868 aml_append(field, /* read only */
869 aml_named_field(stringify(MEMORY_SLOT_PROXIMITY), 32));
870 aml_append(scope, field);
871
860 aml_append(field, /* read only */
861 aml_named_field(stringify(MEMORY_SLOT_ADDR_LOW), 32));
862 aml_append(field, /* read only */
863 aml_named_field(stringify(MEMORY_SLOT_ADDR_HIGH), 32));
864 aml_append(field, /* read only */
865 aml_named_field(stringify(MEMORY_SLOT_SIZE_LOW), 32));
866 aml_append(field, /* read only */
867 aml_named_field(stringify(MEMORY_SLOT_SIZE_HIGH), 32));
868 aml_append(field, /* read only */
869 aml_named_field(stringify(MEMORY_SLOT_PROXIMITY), 32));
870 aml_append(scope, field);
871
872 field = aml_field(stringify(MEMORY_HOTPLUG_IO_REGION), aml_byte_acc,
873 aml_write_as_zeros);
872 field = aml_field(stringify(MEMORY_HOTPLUG_IO_REGION), AML_BYTE_ACC,
873 AML_WRITE_AS_ZEROS);
874 aml_append(field, aml_reserved_field(160 /* bits, Offset(20) */));
875 aml_append(field, /* 1 if enabled, read only */
876 aml_named_field(stringify(MEMORY_SLOT_ENABLED), 1));
877 aml_append(field,
878 /*(read) 1 if has a insert event. (write) 1 to clear event */
879 aml_named_field(stringify(MEMORY_SLOT_INSERT_EVENT), 1));
880 aml_append(field,
881 /* (read) 1 if has a remove event. (write) 1 to clear event */
882 aml_named_field(stringify(MEMORY_SLOT_REMOVE_EVENT), 1));
883 aml_append(field,
884 /* initiates device eject, write only */
885 aml_named_field(stringify(MEMORY_SLOT_EJECT), 1));
886 aml_append(scope, field);
887
874 aml_append(field, aml_reserved_field(160 /* bits, Offset(20) */));
875 aml_append(field, /* 1 if enabled, read only */
876 aml_named_field(stringify(MEMORY_SLOT_ENABLED), 1));
877 aml_append(field,
878 /*(read) 1 if has a insert event. (write) 1 to clear event */
879 aml_named_field(stringify(MEMORY_SLOT_INSERT_EVENT), 1));
880 aml_append(field,
881 /* (read) 1 if has a remove event. (write) 1 to clear event */
882 aml_named_field(stringify(MEMORY_SLOT_REMOVE_EVENT), 1));
883 aml_append(field,
884 /* initiates device eject, write only */
885 aml_named_field(stringify(MEMORY_SLOT_EJECT), 1));
886 aml_append(scope, field);
887
888 field = aml_field(stringify(MEMORY_HOTPLUG_IO_REGION), aml_dword_acc,
889 aml_preserve);
888 field = aml_field(stringify(MEMORY_HOTPLUG_IO_REGION), AML_DWORD_ACC,
889 AML_PRESERVE);
890 aml_append(field, /* DIMM selector, write only */
891 aml_named_field(stringify(MEMORY_SLOT_SLECTOR), 32));
892 aml_append(field, /* _OST event code, write only */
893 aml_named_field(stringify(MEMORY_SLOT_OST_EVENT), 32));
894 aml_append(field, /* _OST status code, write only */
895 aml_named_field(stringify(MEMORY_SLOT_OST_STATUS), 32));
896 aml_append(scope, field);
897

--- 685 unchanged lines hidden ---
890 aml_append(field, /* DIMM selector, write only */
891 aml_named_field(stringify(MEMORY_SLOT_SLECTOR), 32));
892 aml_append(field, /* _OST event code, write only */
893 aml_named_field(stringify(MEMORY_SLOT_OST_EVENT), 32));
894 aml_append(field, /* _OST status code, write only */
895 aml_named_field(stringify(MEMORY_SLOT_OST_STATUS), 32));
896 aml_append(scope, field);
897

--- 685 unchanged lines hidden ---