162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci /*
362306a36Sopenharmony_ci * Driver for Microtek Scanmaker X6 USB scanner and possibly others.
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * (C) Copyright 2000 John Fremlin <vii@penguinpowered.com>
662306a36Sopenharmony_ci * (C) Copyright 2000 Oliver Neukum <Oliver.Neukum@lrz.uni-muenchen.de>
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci * See microtek.c for history
962306a36Sopenharmony_ci *
1062306a36Sopenharmony_ci */
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_citypedef void (*mts_scsi_cmnd_callback)(struct scsi_cmnd *);
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_cistruct mts_transfer_context
1662306a36Sopenharmony_ci{
1762306a36Sopenharmony_ci	struct mts_desc *instance;
1862306a36Sopenharmony_ci	mts_scsi_cmnd_callback final_callback;
1962306a36Sopenharmony_ci	struct scsi_cmnd *srb;
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci	void *data;
2262306a36Sopenharmony_ci	unsigned data_length;
2362306a36Sopenharmony_ci	int data_pipe;
2462306a36Sopenharmony_ci	struct scatterlist *curr_sg;
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci	u8 *scsi_status; /* status returned from ep_response after command completion */
2762306a36Sopenharmony_ci};
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_cistruct mts_desc {
3162306a36Sopenharmony_ci	struct mts_desc *next;
3262306a36Sopenharmony_ci	struct mts_desc *prev;
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci	struct usb_device *usb_dev;
3562306a36Sopenharmony_ci	struct usb_interface *usb_intf;
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci	/* Endpoint addresses */
3862306a36Sopenharmony_ci	u8 ep_out;
3962306a36Sopenharmony_ci	u8 ep_response;
4062306a36Sopenharmony_ci	u8 ep_image;
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci	struct Scsi_Host *host;
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci	struct urb *urb;
4562306a36Sopenharmony_ci	struct mts_transfer_context context;
4662306a36Sopenharmony_ci};
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci#define MTS_EP_OUT	0x1
5062306a36Sopenharmony_ci#define MTS_EP_RESPONSE	0x2
5162306a36Sopenharmony_ci#define MTS_EP_IMAGE	0x3
5262306a36Sopenharmony_ci#define MTS_EP_TOTAL	0x3
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci#define MTS_SCSI_ERR_MASK ~0x3fu
5562306a36Sopenharmony_ci
56