#define pr_fmt(fmt) …
#define dev_fmt …
#include <linux/types.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/of_irq.h>
#include <linux/platform_device.h>
#include <linux/property.h>
#include <linux/acpi.h>
#include "ipmi_si.h"
#include "ipmi_dmi.h"
static bool platform_registered;
static bool si_tryplatform = …;
#ifdef CONFIG_ACPI
static bool si_tryacpi = …;
#endif
#ifdef CONFIG_OF
static bool si_tryopenfirmware = …;
#endif
#ifdef CONFIG_DMI
static bool si_trydmi = …;
#else
static bool si_trydmi = false;
#endif
module_param_named(tryplatform, si_tryplatform, bool, 0);
MODULE_PARM_DESC(…) …;
#ifdef CONFIG_ACPI
module_param_named(tryacpi, si_tryacpi, bool, 0);
MODULE_PARM_DESC(…) …;
#endif
#ifdef CONFIG_OF
module_param_named(tryopenfirmware, si_tryopenfirmware, bool, 0);
MODULE_PARM_DESC(…) …;
#endif
#ifdef CONFIG_DMI
module_param_named(trydmi, si_trydmi, bool, 0);
MODULE_PARM_DESC(…) …;
#endif
#ifdef CONFIG_ACPI
static u32 ipmi_acpi_gpe(acpi_handle gpe_device,
u32 gpe_number, void *context)
{ … }
static void acpi_gpe_irq_cleanup(struct si_sm_io *io)
{ … }
static int acpi_gpe_irq_setup(struct si_sm_io *io)
{ … }
#endif
static void ipmi_set_addr_data_and_space(struct resource *r, struct si_sm_io *io)
{ … }
static struct resource *
ipmi_get_info_from_resources(struct platform_device *pdev,
struct si_sm_io *io)
{ … }
static int platform_ipmi_probe(struct platform_device *pdev)
{ … }
#ifdef CONFIG_OF
static const struct of_device_id of_ipmi_match[] = …;
MODULE_DEVICE_TABLE(of, of_ipmi_match);
static int of_ipmi_probe(struct platform_device *pdev)
{ … }
#else
#define of_ipmi_match …
static int of_ipmi_probe(struct platform_device *dev)
{
return -ENODEV;
}
#endif
#ifdef CONFIG_ACPI
static int find_slave_address(struct si_sm_io *io, int slave_addr)
{ … }
static int acpi_ipmi_probe(struct platform_device *pdev)
{ … }
static const struct acpi_device_id acpi_ipmi_match[] = …;
MODULE_DEVICE_TABLE(acpi, acpi_ipmi_match);
#else
static int acpi_ipmi_probe(struct platform_device *dev)
{
return -ENODEV;
}
#endif
static int ipmi_probe(struct platform_device *pdev)
{ … }
static void ipmi_remove(struct platform_device *pdev)
{ … }
static int pdev_match_name(struct device *dev, const void *data)
{ … }
void ipmi_remove_platform_device_by_name(char *name)
{ … }
static const struct platform_device_id si_plat_ids[] = …;
struct platform_driver ipmi_platform_driver = …;
void ipmi_si_platform_init(void)
{ … }
void ipmi_si_platform_shutdown(void)
{ … }