• John Hubbard's avatar
    ACPI / bus: Make ACPI_HANDLE() work for non-GPL code again · 9e987b70
    John Hubbard authored
    Due to commit db3e50f3 (device property: Get rid of struct
    fwnode_handle type field), ACPI_HANDLE() inadvertently became
    a GPL-only call. The call path that led to that was:
    
    ACPI_HANDLE()
        ACPI_COMPANION()
            to_acpi_device_node()
                is_acpi_device_node()
                    acpi_device_fwnode_ops
                        DECLARE_ACPI_FWNODE_OPS(acpi_device_fwnode_ops);
    
    ...and the new DECLARE_ACPI_FWNODE_OPS() includes
    EXPORT_SYMBOL_GPL, whereas previously it was a static struct.
    
    In order to avoid changing any of that, let's instead provide ever
    so slightly better encapsulation of those struct fwnode_operations
    instances. Those do not really need to be directly used in
    inline function calls in header files. Simply moving two small
    functions (is_acpi_device_node and is_acpi_data_node) out of
    acpi_bus.h, and into a .c file, does that.
    
    That leaves the internals of struct fwnode_operations as GPL-only
    (which I think was the intent all along), but un-breaks any driver
    code out there that relies on the ACPI subsystem's being (historically)
    an EXPORT_SYMBOL-usable system. By that, I mean, ACPI_HANDLE() and
    other basic ACPI calls were non-GPL-protected.
    
    Also, while I'm there, remove a tiny bit of redundancy that was missed
    in the earlier commit, by having is_acpi_node() use the other two
    routines, instead of checking fwnode directly.
    
    Fixes: db3e50f3 (device property: Get rid of struct fwnode_handle type field)
    Signed-off-by: default avatarJohn Hubbard <jhubbard@nvidia.com>
    Acked-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
    Acked-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    9e987b70
acpi_bus.h 19 KB