brintos

brintos / linux-shallow public Read only

0
0
Text · 2.5 KiB · 4df943c Raw
91 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * Header file for SCSI device handler infrastructure.4 *5 * Modified version of patches posted by Mike Christie <michaelc@cs.wisc.edu>6 *7 * Copyright IBM Corporation, 20078 *      Authors:9 *               Chandra Seetharaman <sekharan@us.ibm.com>10 *               Mike Anderson <andmike@linux.vnet.ibm.com>11 */12 13#include <scsi/scsi_device.h>14 15enum {16	SCSI_DH_OK = 0,17	/*18	 * device errors19	 */20	SCSI_DH_DEV_FAILED,	/* generic device error */21	SCSI_DH_DEV_TEMP_BUSY,22	SCSI_DH_DEV_UNSUPP,	/* device handler not supported */23	SCSI_DH_DEVICE_MAX,	/* max device blkerr definition */24 25	/*26	 * transport errors27	 */28	SCSI_DH_NOTCONN = SCSI_DH_DEVICE_MAX + 1,29	SCSI_DH_CONN_FAILURE,30	SCSI_DH_TRANSPORT_MAX,	/* max transport blkerr definition */31 32	/*33	 * driver and generic errors34	 */35	SCSI_DH_IO = SCSI_DH_TRANSPORT_MAX + 1,	/* generic error */36	SCSI_DH_INVALID_IO,37	SCSI_DH_RETRY,		/* retry the req, but not immediately */38	SCSI_DH_IMM_RETRY,	/* immediately retry the req */39	SCSI_DH_TIMED_OUT,40	SCSI_DH_RES_TEMP_UNAVAIL,41	SCSI_DH_DEV_OFFLINED,42	SCSI_DH_NOMEM,43	SCSI_DH_NOSYS,44	SCSI_DH_DRIVER_MAX,45};46 47typedef void (*activate_complete)(void *, int);48struct scsi_device_handler {49	/* Used by the infrastructure */50	struct list_head list; /* list of scsi_device_handlers */51 52	/* Filled by the hardware handler */53	struct module *module;54	const char *name;55	enum scsi_disposition (*check_sense)(struct scsi_device *,56					     struct scsi_sense_hdr *);57	int (*attach)(struct scsi_device *);58	void (*detach)(struct scsi_device *);59	int (*activate)(struct scsi_device *, activate_complete, void *);60	blk_status_t (*prep_fn)(struct scsi_device *, struct request *);61	int (*set_params)(struct scsi_device *, const char *);62	void (*rescan)(struct scsi_device *);63};64 65#ifdef CONFIG_SCSI_DH66extern int scsi_dh_activate(struct request_queue *, activate_complete, void *);67extern int scsi_dh_attach(struct request_queue *, const char *);68extern const char *scsi_dh_attached_handler_name(struct request_queue *, gfp_t);69extern int scsi_dh_set_params(struct request_queue *, const char *);70#else71static inline int scsi_dh_activate(struct request_queue *req,72					activate_complete fn, void *data)73{74	fn(data, 0);75	return 0;76}77static inline int scsi_dh_attach(struct request_queue *req, const char *name)78{79	return SCSI_DH_NOSYS;80}81static inline const char *scsi_dh_attached_handler_name(struct request_queue *q,82							gfp_t gfp)83{84	return NULL;85}86static inline int scsi_dh_set_params(struct request_queue *req, const char *params)87{88	return -SCSI_DH_NOSYS;89}90#endif91