#include <linux/ipmi.h>
#include <linux/module.h>
#include <linux/hwmon.h>
#include <linux/hwmon-sysfs.h>
#include <linux/jiffies.h>
#include <linux/mutex.h>
#include <linux/slab.h>
#include <linux/err.h>
#define REFRESH_INTERVAL …
#define DRVNAME …
#define PEX_GET_VERSION …
#define PEX_GET_SENSOR_COUNT …
#define PEX_GET_SENSOR_NAME …
#define PEX_RESET_HIGH_LOW …
#define PEX_GET_SENSOR_DATA …
#define PEX_NET_FUNCTION …
#define PEX_COMMAND …
static inline u16 extract_value(const char *data, int offset)
{ … }
#define TEMP_SENSOR …
#define POWER_SENSOR …
#define PEX_SENSOR_TYPE_LEN …
static u8 const power_sensor_sig[] = …;
static u8 const temp_sensor_sig[] = …;
#define PEX_MULT_LEN …
static u8 const watt_sensor_sig[] = …;
#define PEX_NUM_SENSOR_FUNCS …
static const char * const sensor_name_suffixes[] = …;
static void ibmpex_msg_handler(struct ipmi_recv_msg *msg, void *user_msg_data);
static void ibmpex_register_bmc(int iface, struct device *dev);
static void ibmpex_bmc_gone(int iface);
struct ibmpex_sensor_data { … };
struct ibmpex_bmc_data { … };
struct ibmpex_driver_data { … };
static struct ibmpex_driver_data driver_data = …;
static int ibmpex_send_message(struct ibmpex_bmc_data *data)
{ … }
static int ibmpex_ver_check(struct ibmpex_bmc_data *data)
{ … }
static int ibmpex_query_sensor_count(struct ibmpex_bmc_data *data)
{ … }
static int ibmpex_query_sensor_name(struct ibmpex_bmc_data *data, int sensor)
{ … }
static int ibmpex_query_sensor_data(struct ibmpex_bmc_data *data, int sensor)
{ … }
static int ibmpex_reset_high_low_data(struct ibmpex_bmc_data *data)
{ … }
static void ibmpex_update_device(struct ibmpex_bmc_data *data)
{ … }
static struct ibmpex_bmc_data *get_bmc_data(int iface)
{ … }
static DEVICE_STRING_ATTR_RO(name, 0444, DRVNAME);
static ssize_t ibmpex_show_sensor(struct device *dev,
struct device_attribute *devattr,
char *buf)
{ … }
static ssize_t ibmpex_high_low_store(struct device *dev,
struct device_attribute *devattr,
const char *buf, size_t count)
{ … }
static SENSOR_DEVICE_ATTR_WO(reset_high_low, ibmpex_high_low, 0);
static int is_power_sensor(const char *sensor_id, int len)
{ … }
static int is_temp_sensor(const char *sensor_id, int len)
{ … }
static int power_sensor_multiplier(struct ibmpex_bmc_data *data,
const char *sensor_id, int len)
{ … }
static int create_sensor(struct ibmpex_bmc_data *data, int type,
int counter, int sensor, int func)
{ … }
static int ibmpex_find_sensors(struct ibmpex_bmc_data *data)
{ … }
static void ibmpex_register_bmc(int iface, struct device *dev)
{ … }
static void ibmpex_bmc_delete(struct ibmpex_bmc_data *data)
{ … }
static void ibmpex_bmc_gone(int iface)
{ … }
static void ibmpex_msg_handler(struct ipmi_recv_msg *msg, void *user_msg_data)
{ … }
static int __init ibmpex_init(void)
{ … }
static void __exit ibmpex_exit(void)
{ … }
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
module_init(…) …;
module_exit(ibmpex_exit);
MODULE_ALIAS(…) …;
MODULE_ALIAS(…) …;
MODULE_ALIAS(…) …;
MODULE_ALIAS(…) …;
MODULE_ALIAS(…) …;