#include <linux/acpi.h>
#include <linux/errno.h>
#include <linux/i2c.h>
#include <linux/miscdevice.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/poll.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <linux/semaphore.h>
#include <linux/kthread.h>
#include <linux/wait.h>
#include <linux/ipmi_msgdefs.h>
#include <linux/ipmi_smi.h>
#define DEVICE_NAME …
static int bmcaddr = …;
module_param(bmcaddr, int, 0644);
MODULE_PARM_DESC(…) …;
static unsigned int retry_time_ms = …;
module_param(retry_time_ms, uint, 0644);
MODULE_PARM_DESC(…) …;
static unsigned int max_retries = …;
module_param(max_retries, uint, 0644);
MODULE_PARM_DESC(…) …;
#define IPMB_MAX_MSG_LEN …
struct ipmi_ipmb_dev { … };
static bool valid_ipmb(struct ipmi_ipmb_dev *iidev)
{ … }
static void ipmi_ipmb_check_msg_done(struct ipmi_ipmb_dev *iidev)
{ … }
static int ipmi_ipmb_slave_cb(struct i2c_client *client,
enum i2c_slave_event event, u8 *val)
{ … }
static void ipmi_ipmb_send_response(struct ipmi_ipmb_dev *iidev,
struct ipmi_smi_msg *msg, u8 cc)
{ … }
static void ipmi_ipmb_format_for_xmit(struct ipmi_ipmb_dev *iidev,
struct ipmi_smi_msg *msg)
{ … }
static int ipmi_ipmb_thread(void *data)
{ … }
static int ipmi_ipmb_start_processing(void *send_info,
struct ipmi_smi *new_intf)
{ … }
static void ipmi_ipmb_stop_thread(struct ipmi_ipmb_dev *iidev)
{ … }
static void ipmi_ipmb_shutdown(void *send_info)
{ … }
static void ipmi_ipmb_sender(void *send_info,
struct ipmi_smi_msg *msg)
{ … }
static void ipmi_ipmb_request_events(void *send_info)
{ … }
static void ipmi_ipmb_cleanup(struct ipmi_ipmb_dev *iidev)
{ … }
static void ipmi_ipmb_remove(struct i2c_client *client)
{ … }
static int ipmi_ipmb_probe(struct i2c_client *client)
{ … }
#ifdef CONFIG_OF
static const struct of_device_id of_ipmi_ipmb_match[] = …;
MODULE_DEVICE_TABLE(of, of_ipmi_ipmb_match);
#else
#define of_ipmi_ipmb_match …
#endif
static const struct i2c_device_id ipmi_ipmb_id[] = …;
MODULE_DEVICE_TABLE(i2c, ipmi_ipmb_id);
static struct i2c_driver ipmi_ipmb_driver = …;
module_i2c_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;