18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci /*
38c2ecf20Sopenharmony_ci * Driver for Microtek Scanmaker X6 USB scanner and possibly others.
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * (C) Copyright 2000 John Fremlin <vii@penguinpowered.com>
68c2ecf20Sopenharmony_ci * (C) Copyright 2000 Oliver Neukum <Oliver.Neukum@lrz.uni-muenchen.de>
78c2ecf20Sopenharmony_ci *
88c2ecf20Sopenharmony_ci * See microtek.c for history
98c2ecf20Sopenharmony_ci *
108c2ecf20Sopenharmony_ci */
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_citypedef void (*mts_scsi_cmnd_callback)(struct scsi_cmnd *);
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_cistruct mts_transfer_context
168c2ecf20Sopenharmony_ci{
178c2ecf20Sopenharmony_ci	struct mts_desc *instance;
188c2ecf20Sopenharmony_ci	mts_scsi_cmnd_callback final_callback;
198c2ecf20Sopenharmony_ci	struct scsi_cmnd *srb;
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ci	void *data;
228c2ecf20Sopenharmony_ci	unsigned data_length;
238c2ecf20Sopenharmony_ci	int data_pipe;
248c2ecf20Sopenharmony_ci	struct scatterlist *curr_sg;
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ci	u8 *scsi_status; /* status returned from ep_response after command completion */
278c2ecf20Sopenharmony_ci};
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_cistruct mts_desc {
318c2ecf20Sopenharmony_ci	struct mts_desc *next;
328c2ecf20Sopenharmony_ci	struct mts_desc *prev;
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ci	struct usb_device *usb_dev;
358c2ecf20Sopenharmony_ci	struct usb_interface *usb_intf;
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci	/* Endpoint addresses */
388c2ecf20Sopenharmony_ci	u8 ep_out;
398c2ecf20Sopenharmony_ci	u8 ep_response;
408c2ecf20Sopenharmony_ci	u8 ep_image;
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci	struct Scsi_Host *host;
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci	struct urb *urb;
458c2ecf20Sopenharmony_ci	struct mts_transfer_context context;
468c2ecf20Sopenharmony_ci};
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ci#define MTS_EP_OUT	0x1
508c2ecf20Sopenharmony_ci#define MTS_EP_RESPONSE	0x2
518c2ecf20Sopenharmony_ci#define MTS_EP_IMAGE	0x3
528c2ecf20Sopenharmony_ci#define MTS_EP_TOTAL	0x3
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ci#define MTS_SCSI_ERR_MASK ~0x3fu
558c2ecf20Sopenharmony_ci
56