#include <linux/platform_device.h>
#include <linux/acpi.h>
#include <linux/dma-mapping.h>
#include <linux/dmi.h>
#include <linux/errno.h>
#include <linux/cpu.h>
#include <linux/gfp.h>
#include <linux/init.h>
#include <linux/io.h>
#include <linux/kernel.h>
#include <linux/mc146818rtc.h>
#include <linux/module.h>
#include <linux/reboot.h>
#include <linux/sched.h>
#include <linux/smp.h>
#include <linux/spinlock.h>
#include <linux/string.h>
#include <linux/types.h>
#include <linux/mutex.h>
#include "dcdbas.h"
#define DRIVER_NAME …
#define DRIVER_VERSION …
#define DRIVER_DESCRIPTION …
static struct platform_device *dcdbas_pdev;
static unsigned long max_smi_data_buf_size = …;
static DEFINE_MUTEX(smi_data_lock);
static u8 *bios_buffer;
static struct smi_buffer smi_buf;
static unsigned int host_control_action;
static unsigned int host_control_smi_type;
static unsigned int host_control_on_shutdown;
static bool wsmt_enabled;
int dcdbas_smi_alloc(struct smi_buffer *smi_buffer, unsigned long size)
{ … }
EXPORT_SYMBOL_GPL(…);
void dcdbas_smi_free(struct smi_buffer *smi_buffer)
{ … }
EXPORT_SYMBOL_GPL(…);
static void smi_data_buf_free(void)
{ … }
static int smi_data_buf_realloc(unsigned long size)
{ … }
static ssize_t smi_data_buf_phys_addr_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{ … }
static ssize_t smi_data_buf_size_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{ … }
static ssize_t smi_data_buf_size_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{ … }
static ssize_t smi_data_read(struct file *filp, struct kobject *kobj,
struct bin_attribute *bin_attr,
char *buf, loff_t pos, size_t count)
{ … }
static ssize_t smi_data_write(struct file *filp, struct kobject *kobj,
struct bin_attribute *bin_attr,
char *buf, loff_t pos, size_t count)
{ … }
static ssize_t host_control_action_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{ … }
static ssize_t host_control_action_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{ … }
static ssize_t host_control_smi_type_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{ … }
static ssize_t host_control_smi_type_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{ … }
static ssize_t host_control_on_shutdown_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{ … }
static ssize_t host_control_on_shutdown_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{ … }
static int raise_smi(void *par)
{ … }
int dcdbas_smi_request(struct smi_cmd *smi_cmd)
{ … }
EXPORT_SYMBOL(…);
static ssize_t smi_request_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{ … }
static int host_control_smi(void)
{ … }
static void dcdbas_host_control(void)
{ … }
static u8 checksum(u8 *buffer, u8 length)
{ … }
static inline struct smm_eps_table *check_eps_table(u8 *addr)
{ … }
static int dcdbas_check_wsmt(void)
{ … }
static int dcdbas_reboot_notify(struct notifier_block *nb, unsigned long code,
void *unused)
{ … }
static struct notifier_block dcdbas_reboot_nb = …;
static DCDBAS_BIN_ATTR_RW(smi_data);
static struct bin_attribute *dcdbas_bin_attrs[] = …;
static DCDBAS_DEV_ATTR_RW(smi_data_buf_size);
static DCDBAS_DEV_ATTR_RO(smi_data_buf_phys_addr);
static DCDBAS_DEV_ATTR_WO(smi_request);
static DCDBAS_DEV_ATTR_RW(host_control_action);
static DCDBAS_DEV_ATTR_RW(host_control_smi_type);
static DCDBAS_DEV_ATTR_RW(host_control_on_shutdown);
static struct attribute *dcdbas_dev_attrs[] = …;
static const struct attribute_group dcdbas_attr_group = …;
static int dcdbas_probe(struct platform_device *dev)
{ … }
static void dcdbas_remove(struct platform_device *dev)
{ … }
static struct platform_driver dcdbas_driver = …;
static const struct platform_device_info dcdbas_dev_info __initconst = …;
static struct platform_device *dcdbas_pdev_reg;
static int __init dcdbas_init(void)
{ … }
static void __exit dcdbas_exit(void)
{ … }
subsys_initcall_sync(dcdbas_init);
module_exit(dcdbas_exit);
MODULE_DESCRIPTION(…) …;
MODULE_VERSION(…);
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;
MODULE_ALIAS(…) …;