cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

fieldbus_dev.h (3591B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Fieldbus Device Driver Core
      4 *
      5 */
      6
      7#ifndef __FIELDBUS_DEV_H
      8#define __FIELDBUS_DEV_H
      9
     10#include <linux/cdev.h>
     11#include <linux/wait.h>
     12
     13enum fieldbus_dev_type {
     14	FIELDBUS_DEV_TYPE_UNKNOWN = 0,
     15	FIELDBUS_DEV_TYPE_PROFINET,
     16};
     17
     18enum fieldbus_dev_offl_mode {
     19	FIELDBUS_DEV_OFFL_MODE_CLEAR = 0,
     20	FIELDBUS_DEV_OFFL_MODE_FREEZE,
     21	FIELDBUS_DEV_OFFL_MODE_SET
     22};
     23
     24/**
     25 * struct fieldbus_dev - Fieldbus device
     26 * @read_area:		[DRIVER] function to read the process data area of the
     27 *				 device. same parameters/return values as
     28 *				 the read function in struct file_operations
     29 * @write_area:		[DRIVER] function to write to the process data area of
     30 *				 the device. same parameters/return values as
     31 *				 the write function in struct file_operations
     32 * @write_area_sz	[DRIVER] size of the writable process data area
     33 * @read_area_sz	[DRIVER] size of the readable process data area
     34 * @card_name		[DRIVER] name of the card, e.g. "ACME Inc. profinet"
     35 * @fieldbus_type	[DRIVER] fieldbus type of this device, e.g.
     36 *					FIELDBUS_DEV_TYPE_PROFINET
     37 * @enable_get		[DRIVER] function which returns true if the card
     38 *				 is enabled, false otherwise
     39 * @fieldbus_id_get	[DRIVER] function to retrieve the unique fieldbus id
     40 *				 by which this device can be identified;
     41 *				 return value follows the snprintf convention
     42 * @simple_enable_set	[DRIVER] (optional) function to enable the device
     43 *				 according to its default settings
     44 * @parent		[DRIVER] (optional) the device's parent device
     45 */
     46struct fieldbus_dev {
     47	ssize_t (*read_area)(struct fieldbus_dev *fbdev, char __user *buf,
     48			     size_t size, loff_t *offset);
     49	ssize_t (*write_area)(struct fieldbus_dev *fbdev,
     50			      const char __user *buf, size_t size,
     51			      loff_t *offset);
     52	size_t write_area_sz, read_area_sz;
     53	const char *card_name;
     54	enum fieldbus_dev_type fieldbus_type;
     55	bool (*enable_get)(struct fieldbus_dev *fbdev);
     56	int (*fieldbus_id_get)(struct fieldbus_dev *fbdev, char *buf,
     57			       size_t max_size);
     58	int (*simple_enable_set)(struct fieldbus_dev *fbdev, bool enable);
     59	struct device *parent;
     60
     61	/* private data */
     62	int id;
     63	struct cdev cdev;
     64	struct device *dev;
     65	int dc_event;
     66	wait_queue_head_t dc_wq;
     67	bool online;
     68};
     69
     70#if IS_ENABLED(CONFIG_FIELDBUS_DEV)
     71
     72/**
     73 * fieldbus_dev_unregister()
     74 *	- unregister a previously registered fieldbus device
     75 * @fb:		Device structure previously registered
     76 **/
     77void fieldbus_dev_unregister(struct fieldbus_dev *fb);
     78
     79/**
     80 * fieldbus_dev_register()
     81 *	- register a device with the fieldbus device subsystem
     82 * @fb:		Device structure filled by the device driver
     83 **/
     84int __must_check fieldbus_dev_register(struct fieldbus_dev *fb);
     85
     86/**
     87 * fieldbus_dev_area_updated()
     88 *	- notify the subsystem that an external fieldbus controller updated
     89 *			the process data area
     90 * @fb:		Device structure
     91 **/
     92void fieldbus_dev_area_updated(struct fieldbus_dev *fb);
     93
     94/**
     95 * fieldbus_dev_online_changed()
     96 *	- notify the subsystem that the fieldbus online status changed
     97 * @fb:		Device structure
     98 **/
     99void fieldbus_dev_online_changed(struct fieldbus_dev *fb, bool online);
    100
    101#else /* IS_ENABLED(CONFIG_FIELDBUS_DEV) */
    102
    103static inline void fieldbus_dev_unregister(struct fieldbus_dev *fb) {}
    104static inline int __must_check fieldbus_dev_register(struct fieldbus_dev *fb)
    105{
    106	return -ENOTSUPP;
    107}
    108
    109static inline void fieldbus_dev_area_updated(struct fieldbus_dev *fb) {}
    110static inline void fieldbus_dev_online_changed(struct fieldbus_dev *fb,
    111					       bool online) {}
    112
    113#endif /* IS_ENABLED(CONFIG_FIELDBUS_DEV) */
    114#endif /* __FIELDBUS_DEV_H */