#include <linux/blkdev.h>
#include <linux/smp_lock.h>
#include <linux/completion.h>
-#include "scsi.h"
-#include <scsi/scsi_host.h>
struct us_data;
+struct scsi_cmnd;
/*
* Unusual device list definitions
#define US_FL_SCM_MULT_TARG 0x00000020 /* supports multiple targets */
#define US_FL_FIX_INQUIRY 0x00000040 /* INQUIRY response needs faking */
#define US_FL_FIX_CAPACITY 0x00000080 /* READ CAPACITY response too big */
+#define US_FL_IGNORE_RESIDUE 0x00000100 /* reported residue is wrong */
+#define US_FL_BULK32 0x00000200 /* Uses 32-byte CBW length */
/* Dynamic flag definitions: used in set_bit() etc. */
#define US_FLIDX_URB_ACTIVE 18 /* 0x00040000 current_urb is in use */
#define ABORTING_OR_DISCONNECTING ((1UL << US_FLIDX_ABORTING) | \
(1UL << US_FLIDX_DISCONNECTING))
#define US_FLIDX_RESETTING 22 /* 0x00400000 device reset in progress */
+#define US_FLIDX_TIMED_OUT 23 /* 0x00800000 SCSI midlayer timed out */
-/* processing state machine states */
-#define US_STATE_IDLE 1
-#define US_STATE_RUNNING 2
-#define US_STATE_RESETTING 3
-#define US_STATE_ABORTING 4
-
#define USB_STOR_STRING_LEN 32
/*
#define US_IOBUF_SIZE 64 /* Size of the DMA-mapped I/O buffer */
-typedef int (*trans_cmnd)(Scsi_Cmnd*, struct us_data*);
+typedef int (*trans_cmnd)(struct scsi_cmnd *, struct us_data*);
typedef int (*trans_reset)(struct us_data*);
-typedef void (*proto_cmnd)(Scsi_Cmnd*, struct us_data*);
+typedef void (*proto_cmnd)(struct scsi_cmnd*, struct us_data*);
typedef void (*extra_data_destructor)(void *); /* extra data destructor */
/* we allocate one of these for every device that we remember */
/* SCSI interfaces */
struct Scsi_Host *host; /* our dummy host data */
- Scsi_Cmnd *srb; /* current srb */
+ struct scsi_cmnd *srb; /* current srb */
/* thread information */
int pid; /* control thread */
- int sm_state; /* what we are doing */
/* control and bulk communications data */
struct urb *current_urb; /* USB requests */
struct semaphore sema; /* to sleep thread on */
struct completion notify; /* thread begin/end */
wait_queue_head_t dev_reset_wait; /* wait during reset */
+ wait_queue_head_t scsi_scan_wait; /* wait before scanning */
+ struct completion scsi_scan_done; /* scan thread end */
/* subdriver information */
void *extra; /* Any extra data */
#define scsi_unlock(host) spin_unlock_irq(host->host_lock)
#define scsi_lock(host) spin_lock_irq(host->host_lock)
+
+/* Vendor ID list for devices that require special handling */
+#define USB_VENDOR_ID_GENESYS 0x05e3 /* Genesys Logic */
+
#endif