Deleted Added
sdiff udiff text old ( 190172 ) new ( 190186 )
full compact
1#include <sys/cdefs.h>
2__FBSDID("$FreeBSD: head/sys/dev/usb/storage/umass.c 190172 2009-03-20 18:56:27Z thompsa $");
3
4/*-
5 * Copyright (c) 1999 MAEKAWA Masahide <bishop@rr.iij4u.or.jp>,
6 * Nick Hibma <n_hibma@FreeBSD.org>
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions

--- 11 unchanged lines hidden (view full) ---

22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
30 * $FreeBSD: head/sys/dev/usb/storage/umass.c 190172 2009-03-20 18:56:27Z thompsa $
31 * $NetBSD: umass.c,v 1.28 2000/04/02 23:46:53 augustss Exp $
32 */
33
34/* Also already merged from NetBSD:
35 * $NetBSD: umass.c,v 1.67 2001/11/25 19:05:22 augustss Exp $
36 * $NetBSD: umass.c,v 1.90 2002/11/04 19:17:33 pooka Exp $
37 * $NetBSD: umass.c,v 1.108 2003/11/07 17:03:25 wiz Exp $
38 * $NetBSD: umass.c,v 1.109 2003/12/04 13:57:31 keihan Exp $

--- 1019 unchanged lines hidden (view full) ---

1058
1059struct usb2_config umass_bbb_config[UMASS_T_BBB_MAX] = {
1060
1061 [UMASS_T_BBB_RESET1] = {
1062 .type = UE_CONTROL,
1063 .endpoint = 0x00, /* Control pipe */
1064 .direction = UE_DIR_ANY,
1065 .mh.bufsize = sizeof(struct usb2_device_request),
1066 .mh.flags = {},
1067 .mh.callback = &umass_t_bbb_reset1_callback,
1068 .mh.timeout = 5000, /* 5 seconds */
1069 .mh.interval = 500, /* 500 milliseconds */
1070 },
1071
1072 [UMASS_T_BBB_RESET2] = {
1073 .type = UE_CONTROL,
1074 .endpoint = 0x00, /* Control pipe */
1075 .direction = UE_DIR_ANY,
1076 .mh.bufsize = sizeof(struct usb2_device_request),
1077 .mh.flags = {},
1078 .mh.callback = &umass_t_bbb_reset2_callback,
1079 .mh.timeout = 5000, /* 5 seconds */
1080 .mh.interval = 50, /* 50 milliseconds */
1081 },
1082
1083 [UMASS_T_BBB_RESET3] = {
1084 .type = UE_CONTROL,
1085 .endpoint = 0x00, /* Control pipe */
1086 .direction = UE_DIR_ANY,
1087 .mh.bufsize = sizeof(struct usb2_device_request),
1088 .mh.flags = {},
1089 .mh.callback = &umass_t_bbb_reset3_callback,
1090 .mh.timeout = 5000, /* 5 seconds */
1091 .mh.interval = 50, /* 50 milliseconds */
1092 },
1093
1094 [UMASS_T_BBB_COMMAND] = {
1095 .type = UE_BULK,
1096 .endpoint = UE_ADDR_ANY,
1097 .direction = UE_DIR_OUT,
1098 .mh.bufsize = sizeof(umass_bbb_cbw_t),
1099 .mh.flags = {},
1100 .mh.callback = &umass_t_bbb_command_callback,
1101 .mh.timeout = 5000, /* 5 seconds */
1102 },
1103
1104 [UMASS_T_BBB_DATA_READ] = {
1105 .type = UE_BULK,
1106 .endpoint = UE_ADDR_ANY,
1107 .direction = UE_DIR_IN,
1108 .mh.bufsize = UMASS_BULK_SIZE,
1109 .mh.flags = {.proxy_buffer = 1,.short_xfer_ok = 1, UMASS_USB_FLAGS},
1110 .mh.callback = &umass_t_bbb_data_read_callback,
1111 .mh.timeout = 0, /* overwritten later */
1112 },
1113
1114 [UMASS_T_BBB_DATA_RD_CS] = {
1115 .type = UE_CONTROL,
1116 .endpoint = 0x00, /* Control pipe */
1117 .direction = UE_DIR_ANY,
1118 .mh.bufsize = sizeof(struct usb2_device_request),
1119 .mh.flags = {},
1120 .mh.callback = &umass_t_bbb_data_rd_cs_callback,
1121 .mh.timeout = 5000, /* 5 seconds */
1122 },
1123
1124 [UMASS_T_BBB_DATA_WRITE] = {
1125 .type = UE_BULK,
1126 .endpoint = UE_ADDR_ANY,
1127 .direction = UE_DIR_OUT,
1128 .mh.bufsize = UMASS_BULK_SIZE,
1129 .mh.flags = {.proxy_buffer = 1,.short_xfer_ok = 1, UMASS_USB_FLAGS},
1130 .mh.callback = &umass_t_bbb_data_write_callback,
1131 .mh.timeout = 0, /* overwritten later */
1132 },
1133
1134 [UMASS_T_BBB_DATA_WR_CS] = {
1135 .type = UE_CONTROL,
1136 .endpoint = 0x00, /* Control pipe */
1137 .direction = UE_DIR_ANY,
1138 .mh.bufsize = sizeof(struct usb2_device_request),
1139 .mh.flags = {},
1140 .mh.callback = &umass_t_bbb_data_wr_cs_callback,
1141 .mh.timeout = 5000, /* 5 seconds */
1142 },
1143
1144 [UMASS_T_BBB_STATUS] = {
1145 .type = UE_BULK,
1146 .endpoint = UE_ADDR_ANY,
1147 .direction = UE_DIR_IN,

--- 7 unchanged lines hidden (view full) ---

1155struct usb2_config umass_cbi_config[UMASS_T_CBI_MAX] = {
1156
1157 [UMASS_T_CBI_RESET1] = {
1158 .type = UE_CONTROL,
1159 .endpoint = 0x00, /* Control pipe */
1160 .direction = UE_DIR_ANY,
1161 .mh.bufsize = (sizeof(struct usb2_device_request) +
1162 UMASS_CBI_DIAGNOSTIC_CMDLEN),
1163 .mh.flags = {},
1164 .mh.callback = &umass_t_cbi_reset1_callback,
1165 .mh.timeout = 5000, /* 5 seconds */
1166 .mh.interval = 500, /* 500 milliseconds */
1167 },
1168
1169 [UMASS_T_CBI_RESET2] = {
1170 .type = UE_CONTROL,
1171 .endpoint = 0x00, /* Control pipe */
1172 .direction = UE_DIR_ANY,
1173 .mh.bufsize = sizeof(struct usb2_device_request),
1174 .mh.flags = {},
1175 .mh.callback = &umass_t_cbi_reset2_callback,
1176 .mh.timeout = 5000, /* 5 seconds */
1177 .mh.interval = 50, /* 50 milliseconds */
1178 },
1179
1180 [UMASS_T_CBI_RESET3] = {
1181 .type = UE_CONTROL,
1182 .endpoint = 0x00, /* Control pipe */
1183 .direction = UE_DIR_ANY,
1184 .mh.bufsize = sizeof(struct usb2_device_request),
1185 .mh.flags = {},
1186 .mh.callback = &umass_t_cbi_reset3_callback,
1187 .mh.timeout = 5000, /* 5 seconds */
1188 .mh.interval = 50, /* 50 milliseconds */
1189 },
1190
1191 [UMASS_T_CBI_COMMAND] = {
1192 .type = UE_CONTROL,
1193 .endpoint = 0x00, /* Control pipe */
1194 .direction = UE_DIR_ANY,
1195 .mh.bufsize = (sizeof(struct usb2_device_request) +
1196 UMASS_MAX_CMDLEN),
1197 .mh.flags = {},
1198 .mh.callback = &umass_t_cbi_command_callback,
1199 .mh.timeout = 5000, /* 5 seconds */
1200 },
1201
1202 [UMASS_T_CBI_DATA_READ] = {
1203 .type = UE_BULK,
1204 .endpoint = UE_ADDR_ANY,
1205 .direction = UE_DIR_IN,
1206 .mh.bufsize = UMASS_BULK_SIZE,
1207 .mh.flags = {.proxy_buffer = 1,.short_xfer_ok = 1, UMASS_USB_FLAGS},
1208 .mh.callback = &umass_t_cbi_data_read_callback,
1209 .mh.timeout = 0, /* overwritten later */
1210 },
1211
1212 [UMASS_T_CBI_DATA_RD_CS] = {
1213 .type = UE_CONTROL,
1214 .endpoint = 0x00, /* Control pipe */
1215 .direction = UE_DIR_ANY,
1216 .mh.bufsize = sizeof(struct usb2_device_request),
1217 .mh.flags = {},
1218 .mh.callback = &umass_t_cbi_data_rd_cs_callback,
1219 .mh.timeout = 5000, /* 5 seconds */
1220 },
1221
1222 [UMASS_T_CBI_DATA_WRITE] = {
1223 .type = UE_BULK,
1224 .endpoint = UE_ADDR_ANY,
1225 .direction = UE_DIR_OUT,
1226 .mh.bufsize = UMASS_BULK_SIZE,
1227 .mh.flags = {.proxy_buffer = 1,.short_xfer_ok = 1, UMASS_USB_FLAGS},
1228 .mh.callback = &umass_t_cbi_data_write_callback,
1229 .mh.timeout = 0, /* overwritten later */
1230 },
1231
1232 [UMASS_T_CBI_DATA_WR_CS] = {
1233 .type = UE_CONTROL,
1234 .endpoint = 0x00, /* Control pipe */
1235 .direction = UE_DIR_ANY,
1236 .mh.bufsize = sizeof(struct usb2_device_request),
1237 .mh.flags = {},
1238 .mh.callback = &umass_t_cbi_data_wr_cs_callback,
1239 .mh.timeout = 5000, /* 5 seconds */
1240 },
1241
1242 [UMASS_T_CBI_STATUS] = {
1243 .type = UE_INTERRUPT,
1244 .endpoint = UE_ADDR_ANY,
1245 .direction = UE_DIR_IN,
1246 .mh.flags = {.short_xfer_ok = 1,},
1247 .mh.bufsize = sizeof(umass_cbi_sbl_t),
1248 .mh.callback = &umass_t_cbi_status_callback,
1249 .mh.timeout = 5000, /* ms */
1250 },
1251
1252 [UMASS_T_CBI_RESET4] = {
1253 .type = UE_CONTROL,
1254 .endpoint = 0x00, /* Control pipe */
1255 .direction = UE_DIR_ANY,
1256 .mh.bufsize = sizeof(struct usb2_device_request),
1257 .mh.flags = {},
1258 .mh.callback = &umass_t_cbi_reset4_callback,
1259 .mh.timeout = 5000, /* ms */
1260 },
1261};
1262
1263/* If device cannot return valid inquiry data, fake it */
1264static const uint8_t fake_inq_data[SHORT_INQUIRY_LENGTH] = {
1265 0, /* removable */ 0x80, SCSI_REV_2, SCSI_REV_2,

--- 2358 unchanged lines hidden ---