0x10000040
     YˆÇÓƒŽ½ÒÁÖ 
v    Y/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * Copyright Â© 2003-2010 David Woodhouse <dwmw2@infradead.org>
 */

#ifndef __MTD_TRANS_H__
#define __MTD_TRANS_H__

#include <linux/mutex.h>
#include <linux/kref.h>
#include <linux/sysfs.h>

struct hd_geometry;
struct mtd_info;
struct mtd_blktrans_ops;
struct file;
struct inode;

struct mtd_blktrans_dev {
	struct mtd_blktrans_ops *tr;
	struct list_head list;
	struct mtd_info *mtd;
	struct mutex lock;
	int devnum;
	bool bg_stop;
	unsigned long size;
	int readonly;
	int open;
	struct kref ref;
	struct gendisk *disk;
	struct attribute_group *disk_attributes;
	struct request_queue *rq;
	struct list_head rq_list;
	struct blk_mq_tag_set *tag_set;
	spinlock_t queue_lock;
	void *priv;
	bool writable;
};

struct mtd_blktrans_ops {
	char *name;
	int major;
	int part_bits;
	int blksize;
	int blkshift;

	/* Access functions */
	int (*readsect)(struct mtd_blktrans_dev *dev,
		    unsigned long block, char *buffer);
	int (*writesect)(struct mtd_blktrans_dev *dev,
		     unsigned long block, char *buffer);
	int (*discard)(struct mtd_blktrans_dev *dev,
		       unsigned long block, unsigned nr_blocks);
	void (*background)(struct mtd_blktrans_dev *dev);

	/* Block layer ioctls */
	int (*getgeo)(struct mtd_blktrans_dev *dev, struct hd_geometry *geo);
	int (*flush)(struct mtd_blktrans_dev *dev);

	/* Called with mtd_table_mutex held; no race with add/remove */
	int (*open)(struct mtd_blktrans_dev *dev);
	void (*release)(struct mtd_blktrans_dev *dev);

	/* Called on {de,}registration and on subsequent addition/removal
	   of devices, with mtd_table_mutex held. */
	void (*add_mtd)(struct mtd_blktrans_ops *tr, struct mtd_info *mtd);
	void (*remove_dev)(struct mtd_blktrans_dev *dev);

	struct list_head devs;
	struct list_head list;
	struct module *owner;
};

extern int register_mtd_blktrans(struct mtd_blktrans_ops *tr);
extern int deregister_mtd_blktrans(struct mtd_blktrans_ops *tr);
extern int add_mtd_blktrans_dev(struct mtd_blktrans_dev *dev);
extern int del_mtd_blktrans_dev(struct mtd_blktrans_dev *dev);
extern int mtd_blktrans_cease_background(struct mtd_blktrans_dev *dev);

/**
 * module_mtd_blktrans() - Helper macro for registering a mtd blktrans driver
 * @__mtd_blktrans: mtd_blktrans_ops struct
 *
 * Helper macro for mtd blktrans drivers which do not do anything special in
 * module init/exit. This eliminates a lot of boilerplate. Each module may only
 * use this macro once, and calling it replaces module_init() and module_exit()
 */
#define module_mtd_blktrans(__mtd_blktrans) \
	module_driver(__mtd_blktrans, register_mtd_blktrans, \
					deregister_mtd_blktrans)

#endif /* __MTD_TRANS_H__ */
  "   [ˆl–Ü4ý( ©³( 	Å€fàD¦-ÿÔƒe–ŸÂ×     [config DRM_USE_DYNAMIC_DEBUG
	bool "use dynamic debug to implement drm.debug"
	default n
	depends on BROKEN
	depends on DRM
	depends on DYNAMIC_DEBUG || DYNAMIC_DEBUG_CORE
	depends on JUMP_LABEL
	help
	 Use dynamic-debug to avoid drm_debug_enabled() runtime overheads.
	 Due to callsite counts in DRM drivers (~4k in amdgpu) and 56
	 bytes per callsite, the .data costs can be substantial, and
	 are therefore configurable.

config DRM_WERROR
	bool "Compile the drm subsystem with warnings as errors"
	depends on DRM && EXPERT
	depends on !WERROR
	default n
	help
	  A kernel build should not cause any compiler warnings, and this
	  enables the '-Werror' flag to enforce that rule in the drm subsystem.

	  The drm subsystem enables more warnings than the kernel default, so
	  this config option is disabled by default.

	  If in doubt, say N.

config DRM_HEADER_TEST
	bool "Ensure DRM headers are self-contained and pass kernel-doc"
	depends on DRM && EXPERT && BROKEN
	default n
	help
	  Ensure the DRM subsystem headers both under drivers/gpu/drm and
	  include/drm compile, are self-contained, have header guards, and have
	  no kernel-doc warnings.

	  If in doubt, say N.

config DRM_DEBUG_MM
	bool "Insert extra checks and debug info into the DRM range managers"
	default n
	depends on DRM
	depends on STACKTRACE_SUP