22 #include <linux/module.h>
23 #include <scsi/scsi.h>
40 #define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \
41 vendorName, productName, useProtocol, useTransport, \
42 initFunction, flags) \
43 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
44 .driver_info = (flags) }
57 #define UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax, \
58 vendor_name, product_name, use_protocol, use_transport, \
59 init_function, Flags) \
61 .vendorName = vendor_name, \
62 .productName = product_name, \
63 .useProtocol = use_protocol, \
64 .useTransport = use_transport, \
65 .initFunction = init_function, \
92 memcpy(save_cmnd, srb->
cmnd,
sizeof(save_cmnd));
96 if (save_cmnd[1] >> 5)
99 switch((save_cmnd[1] >> 1) & 0xf) {
116 srb->
cmnd[3] = 0xff - 1;
120 if (save_cmnd[0] ==
ATA_16) {
121 srb->
cmnd[ 6] = save_cmnd[ 4];
122 srb->
cmnd[ 7] = save_cmnd[ 6];
123 srb->
cmnd[ 8] = save_cmnd[ 8];
124 srb->
cmnd[ 9] = save_cmnd[10];
125 srb->
cmnd[10] = save_cmnd[12];
126 srb->
cmnd[11] = save_cmnd[13];
127 srb->
cmnd[12] = save_cmnd[14];
129 if (save_cmnd[1] & 0x01) {
131 if (save_cmnd[3] || save_cmnd[5] || save_cmnd[7] || save_cmnd[9]
137 srb->
cmnd[ 6] = save_cmnd[3];
138 srb->
cmnd[ 7] = save_cmnd[4];
139 srb->
cmnd[ 8] = save_cmnd[5];
140 srb->
cmnd[ 9] = save_cmnd[6];
141 srb->
cmnd[10] = save_cmnd[7];
142 srb->
cmnd[11] = save_cmnd[8];
143 srb->
cmnd[12] = save_cmnd[9];
152 srb->
cmnd[2] |= (1<<7);
162 US_DEBUGP(
"cypress atacb not supported ???\n");
171 save_cmnd[2] & 0x20) {
173 unsigned char regs[8];
175 unsigned char *
desc = sb + 8;
187 srb->
cmnd = ses.cmnd;
240 memcpy(srb->
cmnd, save_cmnd,
sizeof(save_cmnd));
253 (
id - cypress_usb_ids) + cypress_unusual_dev_list);
264 static struct usb_driver cypress_driver = {
265 .name =
"ums-cypress",
266 .probe = cypress_probe,
273 .id_table = cypress_usb_ids,