brintos

brintos / linux-shallow public Read only

0
0
Text · 2.6 KiB · 6e47143 Raw
93 lines · c
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	bool writable;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/removal65	   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 driver82 * @__mtd_blktrans: mtd_blktrans_ops struct83 *84 * Helper macro for mtd blktrans drivers which do not do anything special in85 * module init/exit. This eliminates a lot of boilerplate. Each module may only86 * 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__ */93