1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Driver for Microtek Scanmaker X6 USB scanner and possibly others. 4 * 5 * (C) Copyright 2000 John Fremlin <vii@penguinpowered.com> 6 * (C) Copyright 2000 Oliver Neukum <Oliver.Neukum@lrz.uni-muenchen.de> 7 * 8 * See microtek.c for history 9 * 10 */ 11 12 typedef void (*mts_scsi_cmnd_callback)(struct scsi_cmnd *); 13 14 15 struct mts_transfer_context 16 { 17 struct mts_desc *instance; 18 mts_scsi_cmnd_callback final_callback; 19 struct scsi_cmnd *srb; 20 21 void *data; 22 unsigned data_length; 23 int data_pipe; 24 struct scatterlist *curr_sg; 25 26 u8 *scsi_status; /* status returned from ep_response after command completion */ 27 }; 28 29 30 struct mts_desc { 31 struct mts_desc *next; 32 struct mts_desc *prev; 33 34 struct usb_device *usb_dev; 35 struct usb_interface *usb_intf; 36 37 /* Endpoint addresses */ 38 u8 ep_out; 39 u8 ep_response; 40 u8 ep_image; 41 42 struct Scsi_Host *host; 43 44 struct urb *urb; 45 struct mts_transfer_context context; 46 }; 47 48 49 #define MTS_EP_OUT 0x1 50 #define MTS_EP_RESPONSE 0x2 51 #define MTS_EP_IMAGE 0x3 52 #define MTS_EP_TOTAL 0x3 53 54 #define MTS_SCSI_ERR_MASK ~0x3fu 55 56