1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef _SCSI_SCSI_DRIVER_H 3*4882a593Smuzhiyun #define _SCSI_SCSI_DRIVER_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/blk_types.h> 6*4882a593Smuzhiyun #include <linux/device.h> 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun struct module; 9*4882a593Smuzhiyun struct request; 10*4882a593Smuzhiyun struct scsi_cmnd; 11*4882a593Smuzhiyun struct scsi_device; 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun struct scsi_driver { 14*4882a593Smuzhiyun struct device_driver gendrv; 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun void (*rescan)(struct device *); 17*4882a593Smuzhiyun blk_status_t (*init_command)(struct scsi_cmnd *); 18*4882a593Smuzhiyun void (*uninit_command)(struct scsi_cmnd *); 19*4882a593Smuzhiyun int (*done)(struct scsi_cmnd *); 20*4882a593Smuzhiyun int (*eh_action)(struct scsi_cmnd *, int); 21*4882a593Smuzhiyun void (*eh_reset)(struct scsi_cmnd *); 22*4882a593Smuzhiyun }; 23*4882a593Smuzhiyun #define to_scsi_driver(drv) \ 24*4882a593Smuzhiyun container_of((drv), struct scsi_driver, gendrv) 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun extern int scsi_register_driver(struct device_driver *); 27*4882a593Smuzhiyun #define scsi_unregister_driver(drv) \ 28*4882a593Smuzhiyun driver_unregister(drv); 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun extern int scsi_register_interface(struct class_interface *); 31*4882a593Smuzhiyun #define scsi_unregister_interface(intf) \ 32*4882a593Smuzhiyun class_interface_unregister(intf) 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun #endif /* _SCSI_SCSI_DRIVER_H */ 35