1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef _LINUX_BSG_H 3*4882a593Smuzhiyun #define _LINUX_BSG_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <uapi/linux/bsg.h> 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun struct request; 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #ifdef CONFIG_BLK_DEV_BSG 10*4882a593Smuzhiyun struct bsg_ops { 11*4882a593Smuzhiyun int (*check_proto)(struct sg_io_v4 *hdr); 12*4882a593Smuzhiyun int (*fill_hdr)(struct request *rq, struct sg_io_v4 *hdr, 13*4882a593Smuzhiyun fmode_t mode); 14*4882a593Smuzhiyun int (*complete_rq)(struct request *rq, struct sg_io_v4 *hdr); 15*4882a593Smuzhiyun void (*free_rq)(struct request *rq); 16*4882a593Smuzhiyun }; 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun struct bsg_class_device { 19*4882a593Smuzhiyun struct device *class_dev; 20*4882a593Smuzhiyun int minor; 21*4882a593Smuzhiyun struct request_queue *queue; 22*4882a593Smuzhiyun const struct bsg_ops *ops; 23*4882a593Smuzhiyun }; 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun int bsg_register_queue(struct request_queue *q, struct device *parent, 26*4882a593Smuzhiyun const char *name, const struct bsg_ops *ops); 27*4882a593Smuzhiyun int bsg_scsi_register_queue(struct request_queue *q, struct device *parent); 28*4882a593Smuzhiyun void bsg_unregister_queue(struct request_queue *q); 29*4882a593Smuzhiyun #else bsg_scsi_register_queue(struct request_queue * q,struct device * parent)30*4882a593Smuzhiyunstatic inline int bsg_scsi_register_queue(struct request_queue *q, 31*4882a593Smuzhiyun struct device *parent) 32*4882a593Smuzhiyun { 33*4882a593Smuzhiyun return 0; 34*4882a593Smuzhiyun } bsg_unregister_queue(struct request_queue * q)35*4882a593Smuzhiyunstatic inline void bsg_unregister_queue(struct request_queue *q) 36*4882a593Smuzhiyun { 37*4882a593Smuzhiyun } 38*4882a593Smuzhiyun #endif /* CONFIG_BLK_DEV_BSG */ 39*4882a593Smuzhiyun #endif /* _LINUX_BSG_H */ 40