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

fsi.h (2318B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/* FSI device & driver interfaces
      3 *
      4 * Copyright (C) IBM Corporation 2016
      5 */
      6
      7#ifndef LINUX_FSI_H
      8#define LINUX_FSI_H
      9
     10#include <linux/device.h>
     11
     12struct fsi_device {
     13	struct device		dev;
     14	u8			engine_type;
     15	u8			version;
     16	u8			unit;
     17	struct fsi_slave	*slave;
     18	uint32_t		addr;
     19	uint32_t		size;
     20};
     21
     22extern int fsi_device_read(struct fsi_device *dev, uint32_t addr,
     23		void *val, size_t size);
     24extern int fsi_device_write(struct fsi_device *dev, uint32_t addr,
     25		const void *val, size_t size);
     26extern int fsi_device_peek(struct fsi_device *dev, void *val);
     27
     28struct fsi_device_id {
     29	u8	engine_type;
     30	u8	version;
     31};
     32
     33#define FSI_VERSION_ANY		0
     34
     35#define FSI_DEVICE(t) \
     36	.engine_type = (t), .version = FSI_VERSION_ANY,
     37
     38#define FSI_DEVICE_VERSIONED(t, v) \
     39	.engine_type = (t), .version = (v),
     40
     41struct fsi_driver {
     42	struct device_driver		drv;
     43	const struct fsi_device_id	*id_table;
     44};
     45
     46#define to_fsi_dev(devp) container_of(devp, struct fsi_device, dev)
     47#define to_fsi_drv(drvp) container_of(drvp, struct fsi_driver, drv)
     48
     49extern int fsi_driver_register(struct fsi_driver *fsi_drv);
     50extern void fsi_driver_unregister(struct fsi_driver *fsi_drv);
     51
     52/* module_fsi_driver() - Helper macro for drivers that don't do
     53 * anything special in module init/exit.  This eliminates a lot of
     54 * boilerplate.  Each module may only use this macro once, and
     55 * calling it replaces module_init() and module_exit()
     56 */
     57#define module_fsi_driver(__fsi_driver) \
     58		module_driver(__fsi_driver, fsi_driver_register, \
     59				fsi_driver_unregister)
     60
     61/* direct slave API */
     62extern int fsi_slave_claim_range(struct fsi_slave *slave,
     63		uint32_t addr, uint32_t size);
     64extern void fsi_slave_release_range(struct fsi_slave *slave,
     65		uint32_t addr, uint32_t size);
     66extern int fsi_slave_read(struct fsi_slave *slave, uint32_t addr,
     67		void *val, size_t size);
     68extern int fsi_slave_write(struct fsi_slave *slave, uint32_t addr,
     69		const void *val, size_t size);
     70
     71extern struct bus_type fsi_bus_type;
     72extern const struct device_type fsi_cdev_type;
     73
     74enum fsi_dev_type {
     75	fsi_dev_cfam,
     76	fsi_dev_sbefifo,
     77	fsi_dev_scom,
     78	fsi_dev_occ
     79};
     80
     81extern int fsi_get_new_minor(struct fsi_device *fdev, enum fsi_dev_type type,
     82			     dev_t *out_dev, int *out_index);
     83extern void fsi_free_minor(dev_t dev);
     84
     85#endif /* LINUX_FSI_H */