1#include <sys/cdefs.h> |
2__FBSDID("$FreeBSD: head/sys/dev/usb/storage/umass.c 190186 2009-03-20 22:10:36Z 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 190186 2009-03-20 22:10:36Z 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.callback = &umass_t_bbb_reset1_callback, 1067 .mh.timeout = 5000, /* 5 seconds */ 1068 .mh.interval = 500, /* 500 milliseconds */ 1069 }, 1070 1071 [UMASS_T_BBB_RESET2] = { 1072 .type = UE_CONTROL, 1073 .endpoint = 0x00, /* Control pipe */ 1074 .direction = UE_DIR_ANY, 1075 .mh.bufsize = sizeof(struct usb2_device_request), |
1076 .mh.callback = &umass_t_bbb_reset2_callback, 1077 .mh.timeout = 5000, /* 5 seconds */ 1078 .mh.interval = 50, /* 50 milliseconds */ 1079 }, 1080 1081 [UMASS_T_BBB_RESET3] = { 1082 .type = UE_CONTROL, 1083 .endpoint = 0x00, /* Control pipe */ 1084 .direction = UE_DIR_ANY, 1085 .mh.bufsize = sizeof(struct usb2_device_request), |
1086 .mh.callback = &umass_t_bbb_reset3_callback, 1087 .mh.timeout = 5000, /* 5 seconds */ 1088 .mh.interval = 50, /* 50 milliseconds */ 1089 }, 1090 1091 [UMASS_T_BBB_COMMAND] = { 1092 .type = UE_BULK, 1093 .endpoint = UE_ADDR_ANY, 1094 .direction = UE_DIR_OUT, 1095 .mh.bufsize = sizeof(umass_bbb_cbw_t), |
1096 .mh.callback = &umass_t_bbb_command_callback, 1097 .mh.timeout = 5000, /* 5 seconds */ 1098 }, 1099 1100 [UMASS_T_BBB_DATA_READ] = { 1101 .type = UE_BULK, 1102 .endpoint = UE_ADDR_ANY, 1103 .direction = UE_DIR_IN, 1104 .mh.bufsize = UMASS_BULK_SIZE, 1105 .mh.flags = {.proxy_buffer = 1,.short_xfer_ok = 1, UMASS_USB_FLAGS}, 1106 .mh.callback = &umass_t_bbb_data_read_callback, 1107 .mh.timeout = 0, /* overwritten later */ 1108 }, 1109 1110 [UMASS_T_BBB_DATA_RD_CS] = { 1111 .type = UE_CONTROL, 1112 .endpoint = 0x00, /* Control pipe */ 1113 .direction = UE_DIR_ANY, 1114 .mh.bufsize = sizeof(struct usb2_device_request), |
1115 .mh.callback = &umass_t_bbb_data_rd_cs_callback, 1116 .mh.timeout = 5000, /* 5 seconds */ 1117 }, 1118 1119 [UMASS_T_BBB_DATA_WRITE] = { 1120 .type = UE_BULK, 1121 .endpoint = UE_ADDR_ANY, 1122 .direction = UE_DIR_OUT, 1123 .mh.bufsize = UMASS_BULK_SIZE, 1124 .mh.flags = {.proxy_buffer = 1,.short_xfer_ok = 1, UMASS_USB_FLAGS}, 1125 .mh.callback = &umass_t_bbb_data_write_callback, 1126 .mh.timeout = 0, /* overwritten later */ 1127 }, 1128 1129 [UMASS_T_BBB_DATA_WR_CS] = { 1130 .type = UE_CONTROL, 1131 .endpoint = 0x00, /* Control pipe */ 1132 .direction = UE_DIR_ANY, 1133 .mh.bufsize = sizeof(struct usb2_device_request), |
1134 .mh.callback = &umass_t_bbb_data_wr_cs_callback, 1135 .mh.timeout = 5000, /* 5 seconds */ 1136 }, 1137 1138 [UMASS_T_BBB_STATUS] = { 1139 .type = UE_BULK, 1140 .endpoint = UE_ADDR_ANY, 1141 .direction = UE_DIR_IN, --- 7 unchanged lines hidden (view full) --- 1149struct usb2_config umass_cbi_config[UMASS_T_CBI_MAX] = { 1150 1151 [UMASS_T_CBI_RESET1] = { 1152 .type = UE_CONTROL, 1153 .endpoint = 0x00, /* Control pipe */ 1154 .direction = UE_DIR_ANY, 1155 .mh.bufsize = (sizeof(struct usb2_device_request) + 1156 UMASS_CBI_DIAGNOSTIC_CMDLEN), |
1157 .mh.callback = &umass_t_cbi_reset1_callback, 1158 .mh.timeout = 5000, /* 5 seconds */ 1159 .mh.interval = 500, /* 500 milliseconds */ 1160 }, 1161 1162 [UMASS_T_CBI_RESET2] = { 1163 .type = UE_CONTROL, 1164 .endpoint = 0x00, /* Control pipe */ 1165 .direction = UE_DIR_ANY, 1166 .mh.bufsize = sizeof(struct usb2_device_request), |
1167 .mh.callback = &umass_t_cbi_reset2_callback, 1168 .mh.timeout = 5000, /* 5 seconds */ 1169 .mh.interval = 50, /* 50 milliseconds */ 1170 }, 1171 1172 [UMASS_T_CBI_RESET3] = { 1173 .type = UE_CONTROL, 1174 .endpoint = 0x00, /* Control pipe */ 1175 .direction = UE_DIR_ANY, 1176 .mh.bufsize = sizeof(struct usb2_device_request), |
1177 .mh.callback = &umass_t_cbi_reset3_callback, 1178 .mh.timeout = 5000, /* 5 seconds */ 1179 .mh.interval = 50, /* 50 milliseconds */ 1180 }, 1181 1182 [UMASS_T_CBI_COMMAND] = { 1183 .type = UE_CONTROL, 1184 .endpoint = 0x00, /* Control pipe */ 1185 .direction = UE_DIR_ANY, 1186 .mh.bufsize = (sizeof(struct usb2_device_request) + 1187 UMASS_MAX_CMDLEN), |
1188 .mh.callback = &umass_t_cbi_command_callback, 1189 .mh.timeout = 5000, /* 5 seconds */ 1190 }, 1191 1192 [UMASS_T_CBI_DATA_READ] = { 1193 .type = UE_BULK, 1194 .endpoint = UE_ADDR_ANY, 1195 .direction = UE_DIR_IN, 1196 .mh.bufsize = UMASS_BULK_SIZE, 1197 .mh.flags = {.proxy_buffer = 1,.short_xfer_ok = 1, UMASS_USB_FLAGS}, 1198 .mh.callback = &umass_t_cbi_data_read_callback, 1199 .mh.timeout = 0, /* overwritten later */ 1200 }, 1201 1202 [UMASS_T_CBI_DATA_RD_CS] = { 1203 .type = UE_CONTROL, 1204 .endpoint = 0x00, /* Control pipe */ 1205 .direction = UE_DIR_ANY, 1206 .mh.bufsize = sizeof(struct usb2_device_request), |
1207 .mh.callback = &umass_t_cbi_data_rd_cs_callback, 1208 .mh.timeout = 5000, /* 5 seconds */ 1209 }, 1210 1211 [UMASS_T_CBI_DATA_WRITE] = { 1212 .type = UE_BULK, 1213 .endpoint = UE_ADDR_ANY, 1214 .direction = UE_DIR_OUT, 1215 .mh.bufsize = UMASS_BULK_SIZE, 1216 .mh.flags = {.proxy_buffer = 1,.short_xfer_ok = 1, UMASS_USB_FLAGS}, 1217 .mh.callback = &umass_t_cbi_data_write_callback, 1218 .mh.timeout = 0, /* overwritten later */ 1219 }, 1220 1221 [UMASS_T_CBI_DATA_WR_CS] = { 1222 .type = UE_CONTROL, 1223 .endpoint = 0x00, /* Control pipe */ 1224 .direction = UE_DIR_ANY, 1225 .mh.bufsize = sizeof(struct usb2_device_request), |
1226 .mh.callback = &umass_t_cbi_data_wr_cs_callback, 1227 .mh.timeout = 5000, /* 5 seconds */ 1228 }, 1229 1230 [UMASS_T_CBI_STATUS] = { 1231 .type = UE_INTERRUPT, 1232 .endpoint = UE_ADDR_ANY, 1233 .direction = UE_DIR_IN, 1234 .mh.flags = {.short_xfer_ok = 1,}, 1235 .mh.bufsize = sizeof(umass_cbi_sbl_t), 1236 .mh.callback = &umass_t_cbi_status_callback, 1237 .mh.timeout = 5000, /* ms */ 1238 }, 1239 1240 [UMASS_T_CBI_RESET4] = { 1241 .type = UE_CONTROL, 1242 .endpoint = 0x00, /* Control pipe */ 1243 .direction = UE_DIR_ANY, 1244 .mh.bufsize = sizeof(struct usb2_device_request), |
1245 .mh.callback = &umass_t_cbi_reset4_callback, 1246 .mh.timeout = 5000, /* ms */ 1247 }, 1248}; 1249 1250/* If device cannot return valid inquiry data, fake it */ 1251static const uint8_t fake_inq_data[SHORT_INQUIRY_LENGTH] = { 1252 0, /* removable */ 0x80, SCSI_REV_2, SCSI_REV_2, --- 2358 unchanged lines hidden --- |