Lines Matching refs:common

126 static int rkusb_check_lun(struct fsg_common *common)  in rkusb_check_lun()  argument
131 if (common->lun >= 0 && common->lun < common->nluns) { in rkusb_check_lun()
132 curlun = &common->luns[common->lun]; in rkusb_check_lun()
133 if (common->cmnd[0] != SC_REQUEST_SENSE) { in rkusb_check_lun()
139 common->bad_lun_okay = 0; in rkusb_check_lun()
145 if (common->cmnd[0] != SC_INQUIRY && in rkusb_check_lun()
146 common->cmnd[0] != SC_REQUEST_SENSE) { in rkusb_check_lun()
147 debug("unsupported LUN %d\n", common->lun); in rkusb_check_lun()
170 static int rkusb_do_reset(struct fsg_common *common, in rkusb_do_reset() argument
173 common->data_size_from_cmnd = common->cmnd[4]; in rkusb_do_reset()
174 common->residue = 0; in rkusb_do_reset()
178 rkusb_rst_code = !common->cmnd[1] ? 0xff : common->cmnd[1]; in rkusb_do_reset()
187 static int rkusb_do_switch_to_usb3(struct fsg_common *common, in rkusb_do_switch_to_usb3() argument
190 g_dnl_set_serialnumber((char *)&common->cmnd[1]); in rkusb_do_switch_to_usb3()
197 static int rkusb_do_test_unit_ready(struct fsg_common *common, in rkusb_do_test_unit_ready() argument
200 struct blk_desc *desc = &ums[common->lun].block_dev; in rkusb_do_test_unit_ready()
207 else if (common->cmnd[1] == 0xf7 && FSG_BUFLEN >= 0x400000) in rkusb_do_test_unit_ready()
213 common->usb_trb_size = min(usb_trb_size, FSG_BUFLEN); in rkusb_do_test_unit_ready()
214 common->residue = residue << 24; in rkusb_do_test_unit_ready()
215 common->data_dir = DATA_DIR_NONE; in rkusb_do_test_unit_ready()
221 static int rkusb_do_read_flash_id(struct fsg_common *common, in rkusb_do_read_flash_id() argument
226 enum if_type type = ums[common->lun].block_dev.if_type; in rkusb_do_read_flash_id()
227 u32 devnum = ums[common->lun].block_dev.devnum; in rkusb_do_read_flash_id()
259 common->residue = common->data_size_from_cmnd = len; in rkusb_do_read_flash_id()
260 common->data_size = len; in rkusb_do_read_flash_id()
265 static int rkusb_do_test_bad_block(struct fsg_common *common, in rkusb_do_test_bad_block() argument
274 common->residue = common->data_size_from_cmnd = len; in rkusb_do_test_bad_block()
275 common->data_size = len; in rkusb_do_test_bad_block()
280 static int rkusb_do_read_flash_info(struct fsg_common *common, in rkusb_do_read_flash_info() argument
283 struct blk_desc *desc = &ums[common->lun].block_dev; in rkusb_do_read_flash_info()
340 common->residue = common->data_size_from_cmnd = len; in rkusb_do_read_flash_info()
342 common->data_size = len; in rkusb_do_read_flash_info()
347 static int rkusb_do_get_chip_info(struct fsg_common *common, in rkusb_do_get_chip_info() argument
351 u32 len = common->data_size; in rkusb_do_get_chip_info()
361 common->residue = common->data_size_from_cmnd = len; in rkusb_do_get_chip_info()
366 static int rkusb_do_lba_erase(struct fsg_common *common, in rkusb_do_lba_erase() argument
369 struct fsg_lun *curlun = &common->luns[common->lun]; in rkusb_do_lba_erase()
374 lba = get_unaligned_be32(&common->cmnd[2]); in rkusb_do_lba_erase()
382 amount = get_unaligned_be16(&common->cmnd[7]) << 9; in rkusb_do_lba_erase()
390 rc = ums[common->lun].erase_sector(&ums[common->lun], in rkusb_do_lba_erase()
399 common->data_dir = DATA_DIR_NONE; in rkusb_do_lba_erase()
405 static int rkusb_do_erase_force(struct fsg_common *common, in rkusb_do_erase_force() argument
408 struct blk_desc *desc = &ums[common->lun].block_dev; in rkusb_do_erase_force()
409 struct fsg_lun *curlun = &common->luns[common->lun]; in rkusb_do_erase_force()
415 lba = get_unaligned_be32(&common->cmnd[2]); in rkusb_do_erase_force()
432 amount = get_unaligned_be16(&common->cmnd[7]) * block_size; in rkusb_do_erase_force()
435 (u32)get_unaligned_be16(&common->cmnd[7])); in rkusb_do_erase_force()
444 rc = ums[common->lun].erase_sector(&ums[common->lun], in rkusb_do_erase_force()
453 common->data_dir = DATA_DIR_NONE; in rkusb_do_erase_force()
459 static int rkusb_do_vs_write(struct fsg_common *common) in rkusb_do_vs_write() argument
461 struct fsg_lun *curlun = &common->luns[common->lun]; in rkusb_do_vs_write()
462 u16 type = get_unaligned_be16(&common->cmnd[4]); in rkusb_do_vs_write()
468 if (common->data_size >= (u32)65536) { in rkusb_do_vs_write()
474 common->residue = common->data_size; in rkusb_do_vs_write()
475 common->usb_amount_left = common->data_size; in rkusb_do_vs_write()
478 if (unlikely(common->data_size == 0)) in rkusb_do_vs_write()
482 if (common->usb_amount_left > 0) { in rkusb_do_vs_write()
484 bh = common->next_buffhd_to_fill; in rkusb_do_vs_write()
489 common->usb_amount_left -= common->data_size; in rkusb_do_vs_write()
490 bh->outreq->length = common->data_size; in rkusb_do_vs_write()
491 bh->bulk_out_intended_length = common->data_size; in rkusb_do_vs_write()
494 START_TRANSFER_OR(common, bulk_out, bh->outreq, in rkusb_do_vs_write()
501 common->next_buffhd_to_fill = bh->next; in rkusb_do_vs_write()
504 bh = common->next_buffhd_to_drain; in rkusb_do_vs_write()
508 common->next_buffhd_to_drain = bh->next; in rkusb_do_vs_write()
656 common->residue -= common->data_size; in rkusb_do_vs_write()
660 common->short_packet_received = 1; in rkusb_do_vs_write()
665 rc = sleep_thread(common); in rkusb_do_vs_write()
673 static int rkusb_do_vs_read(struct fsg_common *common) in rkusb_do_vs_read() argument
675 struct fsg_lun *curlun = &common->luns[common->lun]; in rkusb_do_vs_read()
676 u16 type = get_unaligned_be16(&common->cmnd[4]); in rkusb_do_vs_read()
682 if (common->data_size >= (u32)65536) { in rkusb_do_vs_read()
688 common->residue = common->data_size; in rkusb_do_vs_read()
689 common->usb_amount_left = common->data_size; in rkusb_do_vs_read()
692 if (unlikely(common->data_size == 0)) in rkusb_do_vs_read()
697 bh = common->next_buffhd_to_fill; in rkusb_do_vs_read()
699 rc = sleep_thread(common); in rkusb_do_vs_read()
707 vhead->id = get_unaligned_be16(&common->cmnd[2]); in rkusb_do_vs_read()
712 common->data_size); in rkusb_do_vs_read()
722 common->data_size); in rkusb_do_vs_read()
769 common->residue -= common->data_size; in rkusb_do_vs_read()
770 bh->inreq->length = common->data_size; in rkusb_do_vs_read()
780 static int rkusb_do_uart_debug_read(struct fsg_common *common) in rkusb_do_uart_debug_read() argument
787 if (common->data_size >= (u32)FSG_BUFLEN) in rkusb_do_uart_debug_read()
790 common->residue = common->data_size; in rkusb_do_uart_debug_read()
791 common->usb_amount_left = common->data_size; in rkusb_do_uart_debug_read()
794 if (unlikely(common->data_size == 0) || unlikely(!gd->pstore_addr)) in rkusb_do_uart_debug_read()
798 bh = common->next_buffhd_to_fill; in rkusb_do_uart_debug_read()
800 rc = sleep_thread(common); in rkusb_do_uart_debug_read()
809 if (debug_data_size > common->data_size - 8) in rkusb_do_uart_debug_read()
810 debug_data_size = common->data_size - 8; in rkusb_do_uart_debug_read()
818 common->residue -= common->data_size; in rkusb_do_uart_debug_read()
819 bh->inreq->length = common->data_size; in rkusb_do_uart_debug_read()
826 static int rkusb_do_switch_storage(struct fsg_common *common) in rkusb_do_switch_storage() argument
828 enum if_type type, cur_type = ums[common->lun].block_dev.if_type; in rkusb_do_switch_storage()
829 int devnum, cur_devnum = ums[common->lun].block_dev.devnum; in rkusb_do_switch_storage()
833 media = 1 << common->cmnd[1]; in rkusb_do_switch_storage()
884 common->luns[common->lun].num_sectors = block_dev->lba; in rkusb_do_switch_storage()
885 ums[common->lun].num_sectors = block_dev->lba; in rkusb_do_switch_storage()
886 ums[common->lun].block_dev = *block_dev; in rkusb_do_switch_storage()
890 ums[common->lun].block_dev.devnum, in rkusb_do_switch_storage()
891 ums[common->lun].block_dev.hwpart, in rkusb_do_switch_storage()
892 ums[common->lun].start_sector, in rkusb_do_switch_storage()
893 ums[common->lun].num_sectors); in rkusb_do_switch_storage()
898 static int rkusb_do_get_storage_info(struct fsg_common *common, in rkusb_do_get_storage_info() argument
901 enum if_type type = ums[common->lun].block_dev.if_type; in rkusb_do_get_storage_info()
902 int devnum = ums[common->lun].block_dev.devnum; in rkusb_do_get_storage_info()
904 u32 len = common->data_size; in rkusb_do_get_storage_info()
945 common->residue = len; in rkusb_do_get_storage_info()
946 common->data_size_from_cmnd = len; in rkusb_do_get_storage_info()
951 static int rkusb_do_read_capacity(struct fsg_common *common, in rkusb_do_read_capacity() argument
955 u32 len = common->data_size; in rkusb_do_read_capacity()
956 enum if_type type = ums[common->lun].block_dev.if_type; in rkusb_do_read_capacity()
957 int devnum = ums[common->lun].block_dev.devnum; in rkusb_do_read_capacity()
1019 common->residue = len; in rkusb_do_read_capacity()
1020 common->data_size_from_cmnd = len; in rkusb_do_read_capacity()
1026 static int rkusb_do_read_otp(struct fsg_common *common, in rkusb_do_read_otp() argument
1029 u32 len = common->data_size; in rkusb_do_read_otp()
1030 u32 type = common->cmnd[1]; in rkusb_do_read_otp()
1042 common->residue = len; in rkusb_do_read_otp()
1043 common->data_size_from_cmnd = len; in rkusb_do_read_otp()
1049 static void rkusb_fixup_cbwcb(struct fsg_common *common, in rkusb_fixup_cbwcb() argument
1056 common->data_size = le32_to_cpu(cbw->DataTransferLength); in rkusb_fixup_cbwcb()
1057 if (common->data_size == 0) { in rkusb_fixup_cbwcb()
1058 common->data_size = in rkusb_fixup_cbwcb()
1059 get_unaligned_be16(&common->cmnd[7]) << 9; in rkusb_fixup_cbwcb()
1062 get_unaligned_be16(&common->cmnd[7]), in rkusb_fixup_cbwcb()
1063 get_unaligned_be16(&common->cmnd[1])); in rkusb_fixup_cbwcb()
1066 common->data_dir = DATA_DIR_TO_HOST; in rkusb_fixup_cbwcb()
1068 common->data_dir = DATA_DIR_FROM_HOST; in rkusb_fixup_cbwcb()
1071 common->cmnd[1] = 0; in rkusb_fixup_cbwcb()
1074 static int rkusb_cmd_process(struct fsg_common *common, in rkusb_cmd_process() argument
1083 if (rkusb_check_lun(common)) { in rkusb_cmd_process()
1088 switch (common->cmnd[0]) { in rkusb_cmd_process()
1090 *reply = rkusb_do_test_unit_ready(common, bh); in rkusb_cmd_process()
1095 *reply = rkusb_do_read_flash_id(common, bh); in rkusb_cmd_process()
1100 *reply = rkusb_do_test_bad_block(common, bh); in rkusb_cmd_process()
1105 *reply = rkusb_do_erase_force(common, bh); in rkusb_cmd_process()
1110 rkusb_fixup_cbwcb(common, bh); in rkusb_cmd_process()
1111 common->cmnd[0] = SC_READ_10; in rkusb_cmd_process()
1112 common->cmnd[1] = 0; /* Not support */ in rkusb_cmd_process()
1117 rkusb_fixup_cbwcb(common, bh); in rkusb_cmd_process()
1118 common->cmnd[0] = SC_WRITE_10; in rkusb_cmd_process()
1119 common->cmnd[1] = 0; /* Not support */ in rkusb_cmd_process()
1124 *reply = rkusb_do_read_flash_info(common, bh); in rkusb_cmd_process()
1129 *reply = rkusb_do_get_chip_info(common, bh); in rkusb_cmd_process()
1134 *reply = rkusb_do_lba_erase(common, bh); in rkusb_cmd_process()
1139 *reply = rkusb_do_vs_write(common); in rkusb_cmd_process()
1144 *reply = rkusb_do_vs_read(common); in rkusb_cmd_process()
1150 rkusb_fixup_cbwcb(common, bh); in rkusb_cmd_process()
1151 *reply = rkusb_do_uart_debug_read(common); in rkusb_cmd_process()
1157 *reply = rkusb_do_switch_storage(common); in rkusb_cmd_process()
1162 *reply = rkusb_do_get_storage_info(common, bh); in rkusb_cmd_process()
1167 *reply = rkusb_do_read_capacity(common, bh); in rkusb_cmd_process()
1172 *reply = rkusb_do_switch_to_usb3(common, bh); in rkusb_cmd_process()
1177 *reply = rkusb_do_reset(common, bh); in rkusb_cmd_process()
1183 *reply = rkusb_do_read_otp(common, bh); in rkusb_cmd_process()
1213 int rkusb_do_check_parity(struct fsg_common *common) in rkusb_do_check_parity() argument
1219 usb_parity = common->cmnd[9] | (common->cmnd[10] << 8) | in rkusb_do_check_parity()
1220 (common->cmnd[11] << 16) | (common->cmnd[12] << 24); in rkusb_do_check_parity()
1222 if (common->cmnd[0] == SC_WRITE_10 && (usb_parity)) { in rkusb_do_check_parity()
1223 lba = get_unaligned_be32(&common->cmnd[2]); in rkusb_do_check_parity()
1224 len = common->data_size_from_cmnd >> 9; in rkusb_do_check_parity()
1225 rc = blk_dread(&ums[common->lun].block_dev, lba, len, usb_check_buffer); in rkusb_do_check_parity()
1230 common->phase_error = 1; in rkusb_do_check_parity()