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

blktrans.h (2682B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * Copyright © 2003-2010 David Woodhouse <dwmw2@infradead.org>
      4 */
      5
      6#ifndef __MTD_TRANS_H__
      7#define __MTD_TRANS_H__
      8
      9#include <linux/mutex.h>
     10#include <linux/kref.h>
     11#include <linux/sysfs.h>
     12
     13struct hd_geometry;
     14struct mtd_info;
     15struct mtd_blktrans_ops;
     16struct file;
     17struct inode;
     18
     19struct mtd_blktrans_dev {
     20	struct mtd_blktrans_ops *tr;
     21	struct list_head list;
     22	struct mtd_info *mtd;
     23	struct mutex lock;
     24	int devnum;
     25	bool bg_stop;
     26	unsigned long size;
     27	int readonly;
     28	int open;
     29	struct kref ref;
     30	struct gendisk *disk;
     31	struct attribute_group *disk_attributes;
     32	struct request_queue *rq;
     33	struct list_head rq_list;
     34	struct blk_mq_tag_set *tag_set;
     35	spinlock_t queue_lock;
     36	void *priv;
     37	fmode_t file_mode;
     38};
     39
     40struct mtd_blktrans_ops {
     41	char *name;
     42	int major;
     43	int part_bits;
     44	int blksize;
     45	int blkshift;
     46
     47	/* Access functions */
     48	int (*readsect)(struct mtd_blktrans_dev *dev,
     49		    unsigned long block, char *buffer);
     50	int (*writesect)(struct mtd_blktrans_dev *dev,
     51		     unsigned long block, char *buffer);
     52	int (*discard)(struct mtd_blktrans_dev *dev,
     53		       unsigned long block, unsigned nr_blocks);
     54	void (*background)(struct mtd_blktrans_dev *dev);
     55
     56	/* Block layer ioctls */
     57	int (*getgeo)(struct mtd_blktrans_dev *dev, struct hd_geometry *geo);
     58	int (*flush)(struct mtd_blktrans_dev *dev);
     59
     60	/* Called with mtd_table_mutex held; no race with add/remove */
     61	int (*open)(struct mtd_blktrans_dev *dev);
     62	void (*release)(struct mtd_blktrans_dev *dev);
     63
     64	/* Called on {de,}registration and on subsequent addition/removal
     65	   of devices, with mtd_table_mutex held. */
     66	void (*add_mtd)(struct mtd_blktrans_ops *tr, struct mtd_info *mtd);
     67	void (*remove_dev)(struct mtd_blktrans_dev *dev);
     68
     69	struct list_head devs;
     70	struct list_head list;
     71	struct module *owner;
     72};
     73
     74extern int register_mtd_blktrans(struct mtd_blktrans_ops *tr);
     75extern int deregister_mtd_blktrans(struct mtd_blktrans_ops *tr);
     76extern int add_mtd_blktrans_dev(struct mtd_blktrans_dev *dev);
     77extern int del_mtd_blktrans_dev(struct mtd_blktrans_dev *dev);
     78extern int mtd_blktrans_cease_background(struct mtd_blktrans_dev *dev);
     79
     80/**
     81 * module_mtd_blktrans() - Helper macro for registering a mtd blktrans driver
     82 * @__mtd_blktrans: mtd_blktrans_ops struct
     83 *
     84 * Helper macro for mtd blktrans drivers which do not do anything special in
     85 * module init/exit. This eliminates a lot of boilerplate. Each module may only
     86 * use this macro once, and calling it replaces module_init() and module_exit()
     87 */
     88#define module_mtd_blktrans(__mtd_blktrans) \
     89	module_driver(__mtd_blktrans, register_mtd_blktrans, \
     90					deregister_mtd_blktrans)
     91
     92#endif /* __MTD_TRANS_H__ */