10 Sep, 2016

2 commits

  • ACPICA commit ed6a5fbc694f3a27d93014391aa9a6f6fe490461

    This patch adds 2 new table events to indicate table
    installation/uninstallation.

    Currently, as ACPICA never uninstalls tables, this patch thus only adds
    table handler invocation for the table installation event. Lv Zheng.

    The 2 events are to be used to fix a sysfs table handling issue related to
    LoadTable opcode (see Link # [1] below). The actual sysfs fixing code is
    not included, the sysfs fixes will be sent as separate patches.

    Link: https://bugzilla.kernel.org/show_bug.cgi?id=150841 # [1]
    Link: https://github.com/acpica/acpica/commit/ed6a5fbc
    Reported-by: Jason Voelz
    Reported-by: Francisco Leoner
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     
  • ACPICA commit fcc129d04f865161f308d3b8743496cc3f4d233e

    There are wrong table event macros, this patch cleans them up.

    Link: https://bugs.acpica.org/show_bug.cgi?id=1321
    Link: https://github.com/acpica/acpica/commit/fcc129d0
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

13 Aug, 2016

2 commits

  • …)/errno/perror() instead

    ACPICA commit 189429fb7d06cdb89043ae32d615faf553467f1d

    This patch follows new ACPICA design, eliminates old portable OSLs, and
    implements fopen/fread/fwrite/fclose/fseek/ftell for GNU EFI
    environment. This patch also eliminates acpi_log_error(), convering them
    into fprintf(stderr)/perror(). Lv Zheng.

    Link: https://github.com/acpica/acpica/commit/189429fb
    Link: https://bugs.acpica.org/show_bug.cgi?id=1302
    Signed-off-by: Lv Zheng <lv.zheng@intel.com>
    Signed-off-by: Bob Moore <robert.moore@intel.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

    Lv Zheng
     
  • ACPICA commit 23a417ca406a527e7ae1710893e59a8b6db30e14

    There is a facility in Linux, developers can control the enabling/disabling
    of a GPE via /sys/firmware/acpi/interrupts/gpexx. This is mainly for
    debugging purposes.

    But many users expect to use this facility to implement quirks to mask a
    specific GPE when there is a gap in Linux causing this GPE to flood. This
    is not working correctly because currently this facility invokes
    enabling/disabling counting based GPE driver APIs:
    acpi_enable_gpe()/acpi_disable_gpe()
    and the GPE drivers can still affect the count to mess up the GPE
    masking purposes.

    However, most of the IRQ chip designs allow masking/unmasking IRQs via a
    masking bit which is different from the enabled bit to achieve the same
    purpose. But the GPE hardware doesn't contain such a feature, this brings
    the trouble.

    In this patch, we introduce a software mechanism to implement the GPE
    masking feature, and acpi_mask_gpe() are provided to the OSPMs to
    mask/unmask GPEs in the above mentioned situation instead of
    acpi_enable_gpe()/acpi_disable_gpe(). ACPICA BZ 1102. Lv Zheng.

    Link: https://github.com/acpica/acpica/commit/23a417ca
    Link: https://bugs.acpica.org/show_bug.cgi?id=1102
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

05 May, 2016

1 commit

  • ACPICA commit b2294cae776f5a66a7697414b21949d307e6856f

    This patch removes unwanted spaces for typedef. This solution doesn't cover
    function types.

    Note that the linuxize result of this commit is very giant and should have
    many conflicts against the current Linux upstream. Thus it is required to
    modify the linuxize result of this commit and the commits around it
    manually in order to have them merged to the Linux upstream. Since this is
    very costy, we should do this only once, and if we can't ensure to do this
    only once, we need to revert the Linux code to the wrong indentation result
    before merging the linuxize result of this commit. Lv Zheng.

    Link: https://github.com/acpica/acpica/commit/b2294cae
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

05 Apr, 2016

2 commits


16 Jan, 2016

1 commit


01 Jan, 2016

1 commit

  • ACPICA commit e4743959b59ad93eab7310adf756adc930be0ddb

    This reverts commit 8e7a8753827660c3dd1f571f3185610402b756f0.

    The _SUB method was found to be problematic for this interface
    because some implementations use control methods. Therefore,
    it is being removed.

    Operations cannot be used because this interface is called
    during the device discovery scan and the region handlers are
    not fully installed at that time.

    Link: https://github.com/acpica/acpica/commit/e4743959
    Signed-off-by: Bob Moore
    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    Bob Moore
     

26 Aug, 2015

1 commit

  • ACPICA commit bba222c15c2ce79076eb3a5e9d4d5f7120db8a00

    If "Objects" command is invoked with no arguments, the counts
    for each object type are displayed.

    Linux kernel is not affected by this commit as currently debugger is
    not enabled in the Linux kernel.

    Link: https://github.com/acpica/acpica/commit/bba222c1
    Signed-off-by: Bob Moore
    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    Bob Moore
     

24 Jul, 2015

2 commits

  • ACPICA commit e8e4a9b19d0b72a7b165398bdc961fc2f6f502ec

    This patch adds OSL trace hook support.

    OSPMs are encouraged to use acpi_os_trace_point() with
    ACPI_USE_SYSTEM_TRACER defined to implement platform specific trace
    facility. Lv Zheng.

    Link: https://github.com/acpica/acpica/commit/e8e4a9b1
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     
  • ACPICA commit 6e0229bb156d71675f2e07dc7960adb7ec0a60ea

    This patch adds functions to return normalized full path instead of
    "external path". The external path contains trailing "_" for each
    name segment while the normalized full path doesn't contain the
    trailing "_".

    Currently this function is used by the method tracing users to specify a
    none trailing "_" attached name path. Lv Zheng.

    Note that we need to validate and switch all Linux kernel acpi_get_name()
    users to use the new name type before removing the old name type from
    ACPICA.

    Link: https://github.com/acpica/acpica/commit/6e0229bb
    Signed-off-by: Lv Zheng
    Reviewed-by: Ruiyi Zhang
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

02 Jul, 2015

3 commits

  • ACPICA commit 3b1026e0bdd3c32eb6d5d313f3ba0b1fee7597b4
    ACPICA commit 00f0dc83f5cfca53b27a3213ae0d7719b88c2d6b
    ACPICA commit 47d22a738d0e19fd241ffe4e3e9d4e198e4afc69

    Across all of ACPICA. Replace C library macros such as ACPI_STRLEN with the
    standard names such as strlen. The original purpose for these macros is
    long since obsolete.
    Also cast various invocations as necessary. Bob Moore, Jung-uk Kim, Lv Zheng.

    Link: https://github.com/acpica/acpica/commit/3b1026e0
    Link: https://github.com/acpica/acpica/commit/00f0dc83
    Link: https://github.com/acpica/acpica/commit/47d22a73
    Signed-off-by: Bob Moore
    Signed-off-by: Jung-uk Kim
    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    Bob Moore
     
  • ACPICA commit 9a2b638acb3a7215209432e070c6bd0312374229

    ACPI Device object often contains a _CLS object to supply PCI-defined class
    code for the device. This patch introduces logic to process the _CLS
    object. Suravee Suthikulpanit, Lv Zheng.

    Link: https://github.com/acpica/acpica/commit/9a2b638a
    Acked-by: Mika Westerberg
    Reviewed-by: Hanjun Guo
    Signed-off-by: Suravee Suthikulpanit
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Suravee Suthikulpanit
     
  • ACPICA commit 90f5332a15e9d9ba83831ca700b2b9f708274658

    This patch adds a new FACS initialization flag for acpi_tb_initialize().
    acpi_enable_subsystem() might be invoked several times in OS bootup process,
    and we don't want FACS initialization to be invoked twice. Lv Zheng.

    Link: https://github.com/acpica/acpica/commit/90f5332a
    Cc: All applicable # All applicable
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

22 May, 2015

1 commit

  • ACPICA commit 5de82757aef5d6163e37064033aacbce193abbca

    Using a minus number with ACPI_ADD_PTR() will cause compiler warnings, such
    warnings cannot be eliminated by force casting an unsigned value to a
    signed value. This patch thus introduces ACPI_SUB_PTR() to be used with
    minus numbers. Lv Zheng.

    Link: https://github.com/acpica/acpica/commit/5de82757
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

19 May, 2015

1 commit

  • There are two same "define"s in the actypes.h for ACPI_USE_NATIVE_DIVIDE,
    this patch removes one of them as it is useless and is not in the ACPICA
    upstream. It is likely that the useless block is there because of the
    issues in the old ACPICA release process.

    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

29 Apr, 2015

1 commit

  • During commit e252652fb266 ("ACPICA: acpidump: Remove integer types
    translation protection.") two 'unsigned char' types got converted to 'u8'.

    The result does not compile with gcc-4.5, it can not cope with duplicate
    typedefs.

    Signed-off-by: Olaf Hering
    Signed-off-by: Rafael J. Wysocki

    Olaf Hering
     

15 Apr, 2015

1 commit

  • It is reported that ACPI interrupts do not work any more on
    Dell Latitude D600 after commit c50f13c672df (ACPICA: Save
    current masks of enabled GPEs after enable register writes).
    The problem turns out to be related to the fact that the
    enable_mask and enable_for_run GPE bit masks are not in
    sync (in the absence of any system suspend/resume events)
    for at least one GPE register on that machine.

    Address this problem by writing the enable_for_run mask into
    enable_mask as soon as enable_for_run is updated instead of
    doing that only after the subsequent register write has
    succeeded. For consistency, update acpi_hw_gpe_enable_write()
    to store the bit mask to be written into the GPE register
    in enable_mask unconditionally before the write.

    Since the ACPI_GPE_SAVE_MASK flag is not necessary any more after
    that, drop it along with the symbols depending on it.

    Reported-and-tested-by: Jim Bos
    Fixes: c50f13c672df (ACPICA: Save current masks of enabled GPEs after enable register writes)
    Cc: 3.19+ # 3.19+
    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     

14 Apr, 2015

3 commits

  • ACPICA commit b293f602a67da478ae0bec129e68bd99787d9908

    This change adds this string for Windows 10.

    Link: https://github.com/acpica/acpica/commit/b293f602
    Signed-off-by: Bob Moore
    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    Bob Moore
     
  • ACPICA commit e25d791e4b3d5b9f4ead298269610cb05f89749a

    There is a facility in Linux, developers can obtain GPE and fixed event
    status via /sys/firmware/interrupts/. This is implemented using
    acpi_get_event_status() and acpi_get_gpe_status(). Recently while debugging some
    GPE race issues, it is found that the facility is lacking in the ability to
    obtain real hardware register values, the confusing information makes
    debugging difficult.

    This patch modifies acpi_get_gpe_status() to return EN register values to fix
    this gap. Then flags returned from acpi_get_event_status() and
    acpi_get_gpe_status() are also cleaned up to reflect this change.

    The old ACPI_EVENT_FLAG_SET is carefully kept to avoid regressions. It can
    be deleted after we can make sure all its references are removed from OSPM
    code. Lv Zheng.

    Link: https://github.com/acpica/acpica/commit/e25d791e
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     
  • ACPICA commit aacf863cfffd46338e268b7415f7435cae93b451

    It is reported that on a physically 64-bit addressed machine, 32-bit kernel
    can trigger crashes in accessing the memory regions that are beyond the
    32-bit boundary. The region field's start address should still be 32-bit
    compliant, but after a calculation (adding some offsets), it may exceed the
    32-bit boundary. This case is rare and buggy, but there are real BIOSes
    leaked with such issues (see References below).

    This patch fixes this gap by always defining IO addresses as 64-bit, and
    allows OSPMs to optimize it for a real 32-bit machine to reduce the size of
    the internal objects.

    Internal acpi_physical_address usages in the structures that can be fixed
    by this change include:
    1. struct acpi_object_region:
    acpi_physical_address address;
    2. struct acpi_address_range:
    acpi_physical_address start_address;
    acpi_physical_address end_address;
    3. struct acpi_mem_space_context;
    acpi_physical_address address;
    4. struct acpi_table_desc
    acpi_physical_address address;
    See known issues 1 for other usages.

    Note that acpi_io_address which is used for ACPI_PROCESSOR may also suffer
    from same problem, so this patch changes it accordingly.

    For iasl, it will enforce acpi_physical_address as 32-bit to generate
    32-bit OSPM compatible tables on 32-bit platforms, we need to define
    ACPI_32BIT_PHYSICAL_ADDRESS for it in acenv.h.

    Known issues:
    1. Cleanup of mapped virtual address
    In struct acpi_mem_space_context, acpi_physical_address is used as a virtual
    address:
    acpi_physical_address mapped_physical_address;
    It is better to introduce acpi_virtual_address or use acpi_size instead.
    This patch doesn't make such a change. Because this should be done along
    with a change to acpi_os_map_memory()/acpi_os_unmap_memory().
    There should be no functional problem to leave this unchanged except
    that only this structure is enlarged unexpectedly.

    Link: https://github.com/acpica/acpica/commit/aacf863c
    Reference: https://bugzilla.kernel.org/show_bug.cgi?id=87971
    Reference: https://bugzilla.kernel.org/show_bug.cgi?id=79501
    Reported-and-tested-by: Paul Menzel
    Reported-and-tested-by: Sial Nije
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Cc: All applicable
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

05 Feb, 2015

3 commits

  • ACPICA commit 199cad16530a45aea2bec98e528866e20c5927e1

    Since whether the GPE should be disabled/enabled/cleared should only be
    determined by the GPE driver's state machine:
    1. GPE should be disabled if the driver wants to switch to the GPE polling
    mode when a GPE storm condition is indicated and should be enabled if
    the driver wants to switch back to the GPE interrupt mode when all of
    the storm conditions are cleared. The conditions should be protected by
    the driver's specific lock.
    2. GPE should be enabled if the driver has accepted more than one request
    and should be disabled if the driver has completed all of the requests.
    The request count should be protected by the driver's specific lock.
    3. GPE should be cleared either when the driver is about to handle an edge
    triggered GPE or when the driver has completed to handle a level
    triggered GPE. The handling code should be protected by the driver's
    specific lock.
    Thus the GPE enabling/disabling/clearing operations are likely to be
    performed with the driver's specific lock held while we currently cannot do
    this. This is because:
    1. We have the acpi_gbl_gpe_lock held before invoking the GPE driver's
    handler. Driver's specific lock is likely to be held inside of the
    handler, thus we can see some dead lock issues due to the reversed
    locking order or recursive locking. In order to solve such dead lock
    issues, we need to unlock the acpi_gbl_gpe_lock before invoking the
    handler. BZ 1100.
    2. Since GPE disabling/enabling/clearing should be determined by the GPE
    driver's state machine, we shouldn't perform such operations inside of
    ACPICA for a GPE handler to mess up the driver's state machine. BZ 1101.

    Originally this patch includes a logic to flush GPE handlers, it is dropped
    due to the following reasons:
    1. This is a different issue;
    2. Linux OSL has fixed this by flushing SCI in acpi_os_wait_events_complete().
    We will pick up this topic when the Linux OSL fix turns out to be not
    sufficient.

    Note that currently the internal operations and the acpi_gbl_gpe_lock are
    also used by ACPI_GPE_DISPATCH_METHOD and ACPI_GPE_DISPATCH_NOTIFY. In
    order not to introduce regressions, we add one
    ACPI_GPE_DISPATCH_RAW_HANDLER type to be distiguished from
    ACPI_GPE_DISPATCH_HANDLER. For which the acpi_gbl_gpe_lock is unlocked before
    invoking the GPE handler and the internal enabling/disabling operations are
    bypassed to allow drivers to perform them at a proper position using the
    GPE APIs and ACPI_GPE_DISPATCH_RAW_HANDLER users should invoke acpi_set_gpe()
    instead of acpi_enable_gpe()/acpi_disable_gpe() to bypass the internal GPE
    clearing code in acpi_enable_gpe(). Lv Zheng.

    Known issues:
    1. Edge-triggered GPE lost for frequent enablings
    On some buggy silicon platforms, GPE enable line may not be directly
    wired to the GPE trigger line. In that case, when GPE enabling is
    frequently performed for edge-triggered GPEs, GPE status may stay set
    without being triggered.
    This patch may maginify this problem as it allows GPE enabling to be
    parallel performed during the process the GPEs are handled.
    This is an existing issue, because:
    1. For task context:
    Current ACPI_GPE_DISPATCH_METHOD practices have proven that this
    isn't a real issue - we can re-enable edge-triggered GPE in a work
    queue where the GPE status bit might already be set.
    2. For IRQ context:
    This can even happen when the GPE enabling occurs before returning
    from the GPE handler and after unlocking the GPE lock.
    Thus currently no code is included to protect this.

    Link: https://github.com/acpica/acpica/commit/199cad16
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     
  • ACPICA commit 8990e73ab2aa15d6a0068b860ab54feff25bee36

    Link: https://github.com/acpica/acpica/commit/8990e73a
    Signed-off-by: David E. Box
    Signed-off-by: Bob Moore
    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    David E. Box
     
  • ACPICA commit 7926d5ca9452c87f866938dcea8f12e1efb58f89

    There is an issue in acpi_install_gpe_handler() and acpi_remove_gpe_handler().
    The code to obtain the GPE dispatcher type from the Handler->original_flags
    is wrong:
    if (((Handler->original_flags & ACPI_GPE_DISPATCH_METHOD) ||
    (Handler->original_flags & ACPI_GPE_DISPATCH_NOTIFY)) &&
    ACPI_GPE_DISPATCH_NOTIFY is 0x03 and ACPI_GPE_DISPATCH_METHOD is 0x02, thus
    this statement is TRUE for the following dispatcher types:
    0x01 (ACPI_GPE_DISPATCH_HANDLER): not expected
    0x02 (ACPI_GPE_DISPATCH_METHOD): expected
    0x03 (ACPI_GPE_DISPATCH_NOTIFY): expected

    There is no functional issue due to this because Handler->original_flags is
    only set in acpi_install_gpe_handler(), and an earlier checker has excluded
    the ACPI_GPE_DISPATCH_HANDLER:
    if ((gpe_event_info->Flags & ACPI_GPE_DISPATCH_MASK) ==
    ACPI_GPE_DISPATCH_HANDLER)
    {
    Status = AE_ALREADY_EXISTS;
    goto free_and_exit;
    }
    ...
    Handler->original_flags = (u8) (gpe_event_info->Flags &
    (ACPI_GPE_XRUPT_TYPE_MASK | ACPI_GPE_DISPATCH_MASK));

    We need to clean this up before modifying the GPE dispatcher type values.

    In order to prevent such issue from happening in the future, this patch
    introduces ACPI_GPE_DISPATCH_TYPE() macro to be used to obtain the GPE
    dispatcher types. Lv Zheng.

    Link: https://github.com/acpica/acpica/commit/7926d5ca
    Signed-off-by: Lv Zheng
    Signed-off-by: David E. Box
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

02 Dec, 2014

1 commit

  • There is a race condition between acpi_hw_disable_all_gpes() or
    acpi_enable_all_wakeup_gpes() and acpi_ev_asynch_enable_gpe() such
    that if the latter wins the race, it may mistakenly enable a GPE
    disabled by the former. This may lead to premature system wakeups
    during system suspend and potentially to more serious consequences.

    The source of the problem is how acpi_hw_low_set_gpe() works when
    passed ACPI_GPE_CONDITIONAL_ENABLE as the second argument. In that
    case, the GPE will be enabled if the corresponding bit is set in the
    enable_for_run mask of the GPE enable register containing that bit.
    However, acpi_hw_disable_all_gpes() and acpi_enable_all_wakeup_gpes()
    don't modify the enable_for_run masks of GPE registers when writing
    to them. In consequence, if acpi_ev_asynch_enable_gpe(), which
    eventually calls acpi_hw_low_set_gpe() with the second argument
    equal to ACPI_GPE_CONDITIONAL_ENABLE, is executed in parallel with
    one of these functions, it may reverse changes made by them.

    To fix the problem, introduce a new enable_mask field in struct
    acpi_gpe_register_info in which to store the current mask of
    enabled GPEs and modify acpi_hw_low_set_gpe() to take this
    mask into account instead of enable_for_run when its second
    argument is equal to ACPI_GPE_CONDITIONAL_ENABLE. Also modify
    the low-level routines called by acpi_hw_disable_all_gpes(),
    acpi_enable_all_wakeup_gpes() and acpi_enable_all_runtime_gpes()
    to update the enable_mask masks of GPE registers after all
    (successful) writes to those registers.

    Acked-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     

21 Oct, 2014

2 commits

  • This patch is partial linuxized result of the following ACPICA commit:
    ACPICA commit: a73b66c6aa1846d055bb6390d9c9b9902f7d804d
    Subject: Add "has handler" flag to event/gpe status interfaces.
    This change adds a new flag, ACPI_EVENT_FLAGS_HAS_HANDLER to the
    acpi_get_event_status and acpi_get_gpe_status external interfaces. It
    is set if the event/gpe currently has a handler associated with it.
    This patch contains the code to rename ACPI_EVENT_FLAG_HANDLE to
    ACPI_EVENT_FLAG_HAS_HANDLER, and the corresponding updates of its usages.

    Link: https://github.com/acpica/acpica/commit/a73b66c6
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     
  • This patch is a partial linuxized result of the following ACPICA commit:
    ACPICA commit: a73b66c6aa1846d055bb6390d9c9b9902f7d804d
    Subject: Add "has handler" flag to event/gpe status interfaces.
    This change adds a new flag, ACPI_EVENT_FLAGS_HAS_HANDLER to the
    acpi_get_event_status and acpi_get_gpe_status external interfaces. It
    is set if the event/gpe currently has a handler associated with it.
    This commit back ports ACPI_EVENT_FLAG_HANDLE from Linux upstream to
    ACPICA, the flag along with its support code currently can only be found
    in the Linux upstream and is used by the ACPI sysfs GPE interfaces and
    the ACPI bus scanning support.

    Link: https://github.com/acpica/acpica/commit/a73b66c6
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

31 Jul, 2014

2 commits


08 Jul, 2014

3 commits

  • This patch enhances acpi_getopt() by converting the standard C library
    invocations into portable ACPI string APIs and acpi_log_error() to improve
    portability. Lv Zheng.

    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     
  • This patch introduces formatted printing APIs to handle ACPICA specific
    formatted print requirements. Currently only specific OSPMs will use this
    customized printing support, Linux kernel doesn't use these APIs at this
    time. It will be enabled for Linux kernel resident ACPICA after being well
    tested. So currently this patch is a no-op.

    The specific formatted printing APIs are useful to ACPICA as:
    1. Some portable applications do not link standard C library, so they
    cannot use standard formatted print APIs directly.
    2. Platform specific printing format may differ and thus not portable, for
    example, u64 is %ull for Linux kernel and is %uI64 for some MSVC
    versions.
    3. Platform specific printing format may conflict with ACPICA's usages
    while it is not possible for ACPICA developers to test their code for
    all platforms. For example, developers may generate %pRxxx while Linux
    kernel treats %pR as structured resource printing and decodes variable
    argument as a "struct resource" pointer.
    This patch solves above issues by introducing the new APIs.

    Note that users of such APIs are not introduced in this patch. Users of
    acpi_os_file_vprintf()/acpi_ut_file_printf() need to invoke acpi_os_initialize(),
    this should be taken care by the further patches where such users are
    introduced. Lv Zheng.

    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     
  • This patch adds portable file IO to generic OSL to improve the portability
    of the applications.

    A portable application may use different file IO interfaces than the
    standard C library ones. This patch thus introduces an abstract file IO
    layer into the generic OSL.

    Note that this patch does not introduce users of such interfaces, further
    patches should introduce users one by one carefully with build tests
    performed. Lv Zheng.

    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

07 May, 2014

1 commit

  • OSPMs like Linux trend to include all header files but leave empty stub
    macros for a feature that is not configured during build.

    For macros defined without other symbols referencesd it is safe to leave
    them without protections.

    By investigation, there are only the following internal/external
    symbols referenced by the ACPICA macros:
    1. C library symbols, including string, ctype, stdarg APIs. Since such
    symbols are always accessbile in the kernel source tree, it is safe to
    leave macros referencing them without protected for Linux.
    2. ACPICA OSL symbols, such symbols are designed to be used only by ACPICA
    internal APIs. And there are macros directly referencing mutex and
    memory allocation OSL symbols. We need to examine the external usages
    of such macros.
    For macros referencing the mutex OSL symbols, fortunately, there is no
    external user directly invoking such macros.
    ========================================================================
    !! IMPORTANT !!
    ========================================================================
    For macros referencing memory allocation OSL symbols -
    1. 'free' - ACPI_FREE
    2. 'alloc' - ACPI_ALLOCATE, ACPI_ALLOCATE_ZEROED, ACPI_ALLOCATE_BUFFER,
    ACPI_ALLOCATE_LOCAL_BUFFER
    there are external users directly invoking 'alloc' macros. And the more
    complicated situation is the reversals of such macros are not ACPI_FREE
    but acpi_os_free (or kfree) in Linux. Though we can define such macros
    into no-op, we in fact cannot define their reversals into no-op.
    This patch adds mechanism to protect ACPICA memory allocation APIs for
    Linux so that acpi_os_free (or kfree) invoked in Linux can have a zero
    address returned by 'alloc' macros to free. In this
    way, acpi_os_free (or kfree) can be converted into no-op.
    ========================================================================
    3. ACPI_OFFSET and other macros that would access structure members, we
    need to check if such structure members are not accessible under a
    specific configuration. Fortunately, currently Linux doesn't use such
    structure members when CONFIG_ACPI is disabled.

    This patch thus only adds mechanism useful for implementing stubs for
    ACPICA provided macros - the configurability of memory allocation APIs.

    This patch doesn't include code for Linux to use this new mechanism, thus
    no functional changes. Lv Zheng.

    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

18 Mar, 2014

1 commit


27 Feb, 2014

1 commit

  • Use push and pop to both guarantee that the correct alignment is used,
    and to restore the alignment to whatever it was before the header
    was included.

    It is reported that the #pragma pack(push/pop) directives are not supported
    by the specific GCCs, but this patch still doesn't affect kernel build
    as there are already #pragma pack([1]) directives used in the old ACPICA
    headers, which means there shouldn't be GCCs that are currently used to
    compile the ACPI kernels do not support #pragma pack() directives.

    References: https://bugs.acpica.org/show_bug.cgi?id=1058
    Signed-off-by: Bob Moore
    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    Bob Moore
     

13 Feb, 2014

1 commit

  • Remove translation protection for applications as Linux tools folder will
    start to use such types.

    In Linux kernel source tree, after removing this translation protection,
    the u8/u16/u32/u64/s32/s64 typedefs are exposed for both __KERNEL__ builds
    and !__KERNEL__ builds (tools/power/acpi) and the original definitions of
    ACPI_UINT8/16/32/64_MAX are changed.

    For !__KERNEL__ builds, this kind of defintions should already been tested
    by the distribution vendors that are distributing binary ACPICA package and
    we've achieved the successful built/run test result in the kernel source
    tree.

    For __KERNEL__ builds, there are 2 things affected:
    1. u8/u16/u32/u64/s32/s64 type definitions:
    Since Linux has already type defined u8/u16/u32/u64/s32/s64 in
    include/uapi/asm-generic/int-ll64.h for __KERNEL__. In order not to
    introduce build regressions where the 2 typedefs are differed,
    ACPI_USE_SYSTEM_INTTYPES is introduced to mask out ACPICA's typedefs.
    It must be defined for Linux __KERNEL__ builds.
    2. ACPI_UINT8/16/32/64_MAX definitions:
    Before applying this change:
    ACPI_UINT8_MAX: sizeof (UINT8)
    UINT8: unsigned char
    ACPI_UINT16_MAX: sizeof (UINT16)
    UINT16: unsigned short
    ACPI_UINT32_MAX: sizeof (UINT32)
    INT32: int
    UINT32: unsigned int
    ACPI_UINT64_MAX: sizeof (UINT64)
    INT64: COMPILER_DEPENDENT_INT64
    COMPILER_DEPENDENT_INT64: signed long (IA64) or
    signed long long (IA32)
    UINT64: COMPILER_DEPENDENT_UINT64
    COMPILER_DEPENDENT_UINT64: unsigned long (IA64) or
    unsigned long long (IA32)
    After applying this change:
    ACPI_UINT8_MAX: sizeof (u8)
    u8: unsigned char
    UINT8: (removed from actypes.h)
    ACPI_UINT16_MAX: sizeof (u16)
    u16: unsigned short
    UINT16: (removed from actypes.h)
    ACPI_UINT32_MAX: sizeof (u32)
    INT32/UINT32: (removed from actypes.h)
    s32: signed int
    u32: unsigned int
    ACPI_UINT64_MAX: sizeof (u64)
    INT64/UINT64: (removed from actypes.h)
    u64: unsigned long long
    s64: signed long long
    COMPILER_DEPENDENT_INT64: signed long (IA64) (not used any more)
    signed long long (IA32) (not used any more)
    COMPILER_DEPENDENT_UINT64: unsigned long (IA64) (not used any more)
    unsigned long long (IA32) (not used any more)
    All definitions are equal except ACPI_UINT64_MAX for CONFIG_IA64. It
    is changed from sizeof(unsigned long) to sizeof(unsigned long long).
    By investigation, 64bit Linux kernel build is LP64 compliant, i.e.,
    sizeof(long) and (pointer) are 64. As sizeof(unsigned long) equals to
    sizeof(unsigned long long) on IA64 platform where CONFIG_64BIT cannot be
    disabled, this change actually will not affect the value of
    ACPI_UINT64_MAX on IA64 platforms.

    This patch is necessary for the ACPICA's acpidump tool to build
    correctly. Lv Zheng.

    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

11 Feb, 2014

1 commit


08 Jan, 2014

1 commit


31 Oct, 2013

1 commit