#include <linux/mutex.h>
#include <linux/module.h>
#include <linux/device.h>
#include <linux/idr.h>
#include <linux/fs.h>
#include <linux/slab.h>
#include <linux/poll.h>
#include "fieldbus_dev.h"
#define MAX_FIELDBUSES …
static dev_t fieldbus_devt;
static DEFINE_IDA(fieldbus_ida);
static DEFINE_MUTEX(fieldbus_mtx);
static ssize_t online_show(struct device *dev, struct device_attribute *attr,
char *buf)
{ … }
static DEVICE_ATTR_RO(online);
static ssize_t enabled_show(struct device *dev, struct device_attribute *attr,
char *buf)
{ … }
static ssize_t enabled_store(struct device *dev, struct device_attribute *attr,
const char *buf, size_t n)
{ … }
static DEVICE_ATTR_RW(enabled);
static ssize_t card_name_show(struct device *dev, struct device_attribute *attr,
char *buf)
{ … }
static DEVICE_ATTR_RO(card_name);
static ssize_t read_area_size_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static DEVICE_ATTR_RO(read_area_size);
static ssize_t write_area_size_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static DEVICE_ATTR_RO(write_area_size);
static ssize_t fieldbus_id_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static DEVICE_ATTR_RO(fieldbus_id);
static ssize_t fieldbus_type_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static DEVICE_ATTR_RO(fieldbus_type);
static struct attribute *fieldbus_attrs[] = …;
static umode_t fieldbus_is_visible(struct kobject *kobj, struct attribute *attr,
int n)
{ … }
static const struct attribute_group fieldbus_group = …;
__ATTRIBUTE_GROUPS(…);
static const struct class fieldbus_class = …;
struct fb_open_file { … };
static int fieldbus_open(struct inode *inode, struct file *filp)
{ … }
static int fieldbus_release(struct inode *node, struct file *filp)
{ … }
static ssize_t fieldbus_read(struct file *filp, char __user *buf, size_t size,
loff_t *offset)
{ … }
static ssize_t fieldbus_write(struct file *filp, const char __user *buf,
size_t size, loff_t *offset)
{ … }
static __poll_t fieldbus_poll(struct file *filp, poll_table *wait)
{ … }
static const struct file_operations fieldbus_fops = …;
void fieldbus_dev_area_updated(struct fieldbus_dev *fb)
{ … }
EXPORT_SYMBOL_GPL(…);
void fieldbus_dev_online_changed(struct fieldbus_dev *fb, bool online)
{ … }
EXPORT_SYMBOL_GPL(…);
static void __fieldbus_dev_unregister(struct fieldbus_dev *fb)
{ … }
void fieldbus_dev_unregister(struct fieldbus_dev *fb)
{ … }
EXPORT_SYMBOL_GPL(…);
static int __fieldbus_dev_register(struct fieldbus_dev *fb)
{ … }
int fieldbus_dev_register(struct fieldbus_dev *fb)
{ … }
EXPORT_SYMBOL_GPL(…);
static int __init fieldbus_init(void)
{ … }
static void __exit fieldbus_exit(void)
{ … }
subsys_initcall(fieldbus_init);
module_exit(fieldbus_exit);
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;