Lines Matching refs:busid
64 static void usdb_msc_set_max_lun(uint8_t busid) in usdb_msc_set_max_lun() argument
66 g_usbd_msc[busid].max_lun = CONFIG_USBDEV_MSC_MAX_LUN - 1u; in usdb_msc_set_max_lun()
69 static void usbd_msc_reset(uint8_t busid) in usbd_msc_reset() argument
71 g_usbd_msc[busid].stage = MSC_READ_CBW; in usbd_msc_reset()
72 g_usbd_msc[busid].readonly = false; in usbd_msc_reset()
75 static int msc_storage_class_interface_request_handler(uint8_t busid, struct usb_setup_packet *setu… in msc_storage_class_interface_request_handler() argument
83 usbd_msc_reset(busid); in msc_storage_class_interface_request_handler()
87 (*data)[0] = g_usbd_msc[busid].max_lun; in msc_storage_class_interface_request_handler()
99 void msc_storage_notify_handler(uint8_t busid, uint8_t event, void *arg) in msc_storage_notify_handler() argument
106 g_usbd_msc[busid].usbd_msc_mq = usb_osal_mq_create(1); in msc_storage_notify_handler()
107 if (g_usbd_msc[busid].usbd_msc_mq == NULL) { in msc_storage_notify_handler()
110 …busid].usbd_msc_thread = usb_osal_thread_create("usbd_msc", CONFIG_USBDEV_MSC_STACKSIZE, CONFIG_US… in msc_storage_notify_handler()
111 if (g_usbd_msc[busid].usbd_msc_thread == NULL) { in msc_storage_notify_handler()
115 g_usbd_msc[busid].event = 0; in msc_storage_notify_handler()
120 if (g_usbd_msc[busid].usbd_msc_mq) { in msc_storage_notify_handler()
121 usb_osal_mq_delete(g_usbd_msc[busid].usbd_msc_mq); in msc_storage_notify_handler()
123 if (g_usbd_msc[busid].usbd_msc_thread) { in msc_storage_notify_handler()
124 usb_osal_thread_delete(g_usbd_msc[busid].usbd_msc_thread); in msc_storage_notify_handler()
129 usbd_msc_reset(busid); in msc_storage_notify_handler()
133 …usbd_ep_start_read(busid, mass_ep_data[busid][MSD_OUT_EP_IDX].ep_addr, (uint8_t *)&g_usbd_msc[busi… in msc_storage_notify_handler()
141 static void usbd_msc_bot_abort(uint8_t busid) in usbd_msc_bot_abort() argument
143 if ((g_usbd_msc[busid].cbw.bmFlags == 0) && (g_usbd_msc[busid].cbw.dDataLength != 0)) { in usbd_msc_bot_abort()
144 usbd_ep_set_stall(busid, mass_ep_data[busid][MSD_OUT_EP_IDX].ep_addr); in usbd_msc_bot_abort()
146 usbd_ep_set_stall(busid, mass_ep_data[busid][MSD_IN_EP_IDX].ep_addr); in usbd_msc_bot_abort()
147 …usbd_ep_start_read(busid, mass_ep_data[busid][0].ep_addr, (uint8_t *)&g_usbd_msc[busid].cbw, USB_S… in usbd_msc_bot_abort()
150 static void usbd_msc_send_csw(uint8_t busid, uint8_t CSW_Status) in usbd_msc_send_csw() argument
152 g_usbd_msc[busid].csw.dSignature = MSC_CSW_Signature; in usbd_msc_send_csw()
153 g_usbd_msc[busid].csw.bStatus = CSW_Status; in usbd_msc_send_csw()
158 g_usbd_msc[busid].stage = MSC_WAIT_CSW; in usbd_msc_send_csw()
161 …usbd_ep_start_write(busid, mass_ep_data[busid][MSD_IN_EP_IDX].ep_addr, (uint8_t *)&g_usbd_msc[busi… in usbd_msc_send_csw()
164 static void usbd_msc_send_info(uint8_t busid, uint8_t *buffer, uint8_t size) in usbd_msc_send_info() argument
166 size = MIN(size, g_usbd_msc[busid].cbw.dDataLength); in usbd_msc_send_info()
171 g_usbd_msc[busid].stage = MSC_SEND_CSW; in usbd_msc_send_info()
173 usbd_ep_start_write(busid, mass_ep_data[busid][MSD_IN_EP_IDX].ep_addr, buffer, size); in usbd_msc_send_info()
175 g_usbd_msc[busid].csw.dDataResidue -= size; in usbd_msc_send_info()
176 g_usbd_msc[busid].csw.bStatus = CSW_STATUS_CMD_PASSED; in usbd_msc_send_info()
179 static bool SCSI_processWrite(uint8_t busid, uint32_t nbytes);
180 static bool SCSI_processRead(uint8_t busid);
190 static void SCSI_SetSenseData(uint8_t busid, uint32_t KCQ) in SCSI_SetSenseData() argument
192 g_usbd_msc[busid].sKey = (uint8_t)(KCQ >> 16); in SCSI_SetSenseData()
193 g_usbd_msc[busid].ASC = (uint8_t)(KCQ >> 8); in SCSI_SetSenseData()
194 g_usbd_msc[busid].ASQ = (uint8_t)(KCQ); in SCSI_SetSenseData()
202 static bool SCSI_testUnitReady(uint8_t busid, uint8_t **data, uint32_t *len) in SCSI_testUnitReady() argument
204 if (g_usbd_msc[busid].cbw.dDataLength != 0U) { in SCSI_testUnitReady()
205 SCSI_SetSenseData(busid, SCSI_KCQIR_INVALIDCOMMAND); in SCSI_testUnitReady()
213 static bool SCSI_requestSense(uint8_t busid, uint8_t **data, uint32_t *len) in SCSI_requestSense() argument
216 if (g_usbd_msc[busid].cbw.dDataLength == 0U) { in SCSI_requestSense()
217 SCSI_SetSenseData(busid, SCSI_KCQIR_INVALIDCOMMAND); in SCSI_requestSense()
221 if (g_usbd_msc[busid].cbw.CB[4] < SCSIRESP_FIXEDSENSEDATA_SIZEOF) { in SCSI_requestSense()
222 data_len = g_usbd_msc[busid].cbw.CB[4]; in SCSI_requestSense()
246 request_sense[2] = g_usbd_msc[busid].sKey; in SCSI_requestSense()
247 request_sense[12] = g_usbd_msc[busid].ASC; in SCSI_requestSense()
248 request_sense[13] = g_usbd_msc[busid].ASQ; in SCSI_requestSense()
275 static bool SCSI_inquiry(uint8_t busid, uint8_t **data, uint32_t *len) in SCSI_inquiry() argument
322 if (g_usbd_msc[busid].cbw.dDataLength == 0U) { in SCSI_inquiry()
323 SCSI_SetSenseData(busid, SCSI_KCQIR_INVALIDCOMMAND); in SCSI_inquiry()
327 if ((g_usbd_msc[busid].cbw.CB[1] & 0x01U) != 0U) { /* Evpd is set */ in SCSI_inquiry()
328 … if (g_usbd_msc[busid].cbw.CB[2] == 0U) { /* Request for Supported Vital Product Data Pages*/ in SCSI_inquiry()
331 …} else if (g_usbd_msc[busid].cbw.CB[2] == 0x80U) { /* Request for VPD page 0x80 Unit Serial Number… in SCSI_inquiry()
335 SCSI_SetSenseData(busid, SCSI_KCQIR_INVALIDFIELDINCBA); in SCSI_inquiry()
339 if (g_usbd_msc[busid].cbw.CB[4] < SCSIRESP_INQUIRY_SIZEOF) { in SCSI_inquiry()
340 data_len = g_usbd_msc[busid].cbw.CB[4]; in SCSI_inquiry()
349 static bool SCSI_startStopUnit(uint8_t busid, uint8_t **data, uint32_t *len) in SCSI_startStopUnit() argument
351 if (g_usbd_msc[busid].cbw.dDataLength != 0U) { in SCSI_startStopUnit()
352 SCSI_SetSenseData(busid, SCSI_KCQIR_INVALIDCOMMAND); in SCSI_startStopUnit()
356 if ((g_usbd_msc[busid].cbw.CB[4] & 0x3U) == 0x1U) /* START=1 */ in SCSI_startStopUnit()
359 } else if ((g_usbd_msc[busid].cbw.CB[4] & 0x3U) == 0x2U) /* START=0 and LOEJ Load Eject=1 */ in SCSI_startStopUnit()
362 g_usbd_msc[busid].popup = true; in SCSI_startStopUnit()
363 } else if ((g_usbd_msc[busid].cbw.CB[4] & 0x3U) == 0x3U) /* START=1 and LOEJ Load Eject=1 */ in SCSI_startStopUnit()
374 static bool SCSI_preventAllowMediaRemoval(uint8_t busid, uint8_t **data, uint32_t *len) in SCSI_preventAllowMediaRemoval() argument
376 if (g_usbd_msc[busid].cbw.dDataLength != 0U) { in SCSI_preventAllowMediaRemoval()
377 SCSI_SetSenseData(busid, SCSI_KCQIR_INVALIDCOMMAND); in SCSI_preventAllowMediaRemoval()
380 if (g_usbd_msc[busid].cbw.CB[4] == 0U) { in SCSI_preventAllowMediaRemoval()
390 static bool SCSI_modeSense6(uint8_t busid, uint8_t **data, uint32_t *len) in SCSI_modeSense6() argument
393 if (g_usbd_msc[busid].cbw.dDataLength == 0U) { in SCSI_modeSense6()
394 SCSI_SetSenseData(busid, SCSI_KCQIR_INVALIDCOMMAND); in SCSI_modeSense6()
397 if (g_usbd_msc[busid].cbw.CB[4] < SCSIRESP_MODEPARAMETERHDR6_SIZEOF) { in SCSI_modeSense6()
398 data_len = g_usbd_msc[busid].cbw.CB[4]; in SCSI_modeSense6()
403 if (g_usbd_msc[busid].readonly) { in SCSI_modeSense6()
411 static bool SCSI_modeSense10(uint8_t busid, uint8_t **data, uint32_t *len) in SCSI_modeSense10() argument
414 if (g_usbd_msc[busid].cbw.dDataLength == 0U) { in SCSI_modeSense10()
415 SCSI_SetSenseData(busid, SCSI_KCQIR_INVALIDCOMMAND); in SCSI_modeSense10()
419 if (g_usbd_msc[busid].cbw.CB[8] < 27) { in SCSI_modeSense10()
420 data_len = g_usbd_msc[busid].cbw.CB[8]; in SCSI_modeSense10()
458 static bool SCSI_readFormatCapacity(uint8_t busid, uint8_t **data, uint32_t *len) in SCSI_readFormatCapacity() argument
460 if (g_usbd_msc[busid].cbw.dDataLength == 0U) { in SCSI_readFormatCapacity()
461 SCSI_SetSenseData(busid, SCSI_KCQIR_INVALIDCOMMAND); in SCSI_readFormatCapacity()
469 (uint8_t)((g_usbd_msc[busid].scsi_blk_nbr[g_usbd_msc[busid].cbw.bLUN] >> 24) & 0xff), in SCSI_readFormatCapacity()
470 (uint8_t)((g_usbd_msc[busid].scsi_blk_nbr[g_usbd_msc[busid].cbw.bLUN] >> 16) & 0xff), in SCSI_readFormatCapacity()
471 (uint8_t)((g_usbd_msc[busid].scsi_blk_nbr[g_usbd_msc[busid].cbw.bLUN] >> 8) & 0xff), in SCSI_readFormatCapacity()
472 (uint8_t)((g_usbd_msc[busid].scsi_blk_nbr[g_usbd_msc[busid].cbw.bLUN] >> 0) & 0xff), in SCSI_readFormatCapacity()
476 (uint8_t)((g_usbd_msc[busid].scsi_blk_size[g_usbd_msc[busid].cbw.bLUN] >> 8) & 0xff), in SCSI_readFormatCapacity()
477 (uint8_t)((g_usbd_msc[busid].scsi_blk_size[g_usbd_msc[busid].cbw.bLUN] >> 0) & 0xff), in SCSI_readFormatCapacity()
485 static bool SCSI_readCapacity10(uint8_t busid, uint8_t **data, uint32_t *len) in SCSI_readCapacity10() argument
487 if (g_usbd_msc[busid].cbw.dDataLength == 0U) { in SCSI_readCapacity10()
488 SCSI_SetSenseData(busid, SCSI_KCQIR_INVALIDCOMMAND); in SCSI_readCapacity10()
493 (uint8_t)(((g_usbd_msc[busid].scsi_blk_nbr[g_usbd_msc[busid].cbw.bLUN] - 1) >> 24) & 0xff), in SCSI_readCapacity10()
494 (uint8_t)(((g_usbd_msc[busid].scsi_blk_nbr[g_usbd_msc[busid].cbw.bLUN] - 1) >> 16) & 0xff), in SCSI_readCapacity10()
495 (uint8_t)(((g_usbd_msc[busid].scsi_blk_nbr[g_usbd_msc[busid].cbw.bLUN] - 1) >> 8) & 0xff), in SCSI_readCapacity10()
496 (uint8_t)(((g_usbd_msc[busid].scsi_blk_nbr[g_usbd_msc[busid].cbw.bLUN] - 1) >> 0) & 0xff), in SCSI_readCapacity10()
498 (uint8_t)((g_usbd_msc[busid].scsi_blk_size[g_usbd_msc[busid].cbw.bLUN] >> 24) & 0xff), in SCSI_readCapacity10()
499 (uint8_t)((g_usbd_msc[busid].scsi_blk_size[g_usbd_msc[busid].cbw.bLUN] >> 16) & 0xff), in SCSI_readCapacity10()
500 (uint8_t)((g_usbd_msc[busid].scsi_blk_size[g_usbd_msc[busid].cbw.bLUN] >> 8) & 0xff), in SCSI_readCapacity10()
501 (uint8_t)((g_usbd_msc[busid].scsi_blk_size[g_usbd_msc[busid].cbw.bLUN] >> 0) & 0xff), in SCSI_readCapacity10()
509 static bool SCSI_read10(uint8_t busid, uint8_t **data, uint32_t *len) in SCSI_read10() argument
514 …if (((g_usbd_msc[busid].cbw.bmFlags & 0x80U) != 0x80U) || (g_usbd_msc[busid].cbw.dDataLength == 0U… in SCSI_read10()
515 SCSI_SetSenseData(busid, SCSI_KCQIR_INVALIDCOMMAND); in SCSI_read10()
519 …g_usbd_msc[busid].start_sector = GET_BE32(&g_usbd_msc[busid].cbw.CB[2]); /* Logical Block Address … in SCSI_read10()
520 …g_usbd_msc[busid].nsectors = GET_BE16(&g_usbd_msc[busid].cbw.CB[7]); /* Number of Blocks to transf… in SCSI_read10()
522 …if ((g_usbd_msc[busid].start_sector + g_usbd_msc[busid].nsectors) > g_usbd_msc[busid].scsi_blk_nbr… in SCSI_read10()
523 SCSI_SetSenseData(busid, SCSI_KCQIR_LBAOUTOFRANGE); in SCSI_read10()
527 …if (g_usbd_msc[busid].cbw.dDataLength != (g_usbd_msc[busid].nsectors * g_usbd_msc[busid].scsi_blk_… in SCSI_read10()
530 g_usbd_msc[busid].stage = MSC_DATA_IN; in SCSI_read10()
532 usb_osal_mq_send(g_usbd_msc[busid].usbd_msc_mq, MSC_DATA_IN); in SCSI_read10()
535 g_usbd_msc[busid].event = MSC_DATA_IN; in SCSI_read10()
538 return SCSI_processRead(busid); in SCSI_read10()
542 static bool SCSI_read12(uint8_t busid, uint8_t **data, uint32_t *len) in SCSI_read12() argument
547 …if (((g_usbd_msc[busid].cbw.bmFlags & 0x80U) != 0x80U) || (g_usbd_msc[busid].cbw.dDataLength == 0U… in SCSI_read12()
548 SCSI_SetSenseData(busid, SCSI_KCQIR_INVALIDCOMMAND); in SCSI_read12()
552 …g_usbd_msc[busid].start_sector = GET_BE32(&g_usbd_msc[busid].cbw.CB[2]); /* Logical Block Address … in SCSI_read12()
553 …g_usbd_msc[busid].nsectors = GET_BE32(&g_usbd_msc[busid].cbw.CB[6]); /* Number of Blocks to transf… in SCSI_read12()
555 …if ((g_usbd_msc[busid].start_sector + g_usbd_msc[busid].nsectors) > g_usbd_msc[busid].scsi_blk_nbr… in SCSI_read12()
556 SCSI_SetSenseData(busid, SCSI_KCQIR_LBAOUTOFRANGE); in SCSI_read12()
560 …if (g_usbd_msc[busid].cbw.dDataLength != (g_usbd_msc[busid].nsectors * g_usbd_msc[busid].scsi_blk_… in SCSI_read12()
563 g_usbd_msc[busid].stage = MSC_DATA_IN; in SCSI_read12()
565 usb_osal_mq_send(g_usbd_msc[busid].usbd_msc_mq, MSC_DATA_IN); in SCSI_read12()
568 g_usbd_msc[busid].event = MSC_DATA_IN; in SCSI_read12()
571 return SCSI_processRead(busid); in SCSI_read12()
575 static bool SCSI_write10(uint8_t busid, uint8_t **data, uint32_t *len) in SCSI_write10() argument
582 …if (((g_usbd_msc[busid].cbw.bmFlags & 0x80U) != 0x00U) || (g_usbd_msc[busid].cbw.dDataLength == 0U… in SCSI_write10()
583 SCSI_SetSenseData(busid, SCSI_KCQIR_INVALIDCOMMAND); in SCSI_write10()
587 …g_usbd_msc[busid].start_sector = GET_BE32(&g_usbd_msc[busid].cbw.CB[2]); /* Logical Block Address … in SCSI_write10()
588 …g_usbd_msc[busid].nsectors = GET_BE16(&g_usbd_msc[busid].cbw.CB[7]); /* Number of Blocks to transf… in SCSI_write10()
590 …data_len = g_usbd_msc[busid].nsectors * g_usbd_msc[busid].scsi_blk_size[g_usbd_msc[busid].cbw.bLUN… in SCSI_write10()
591 …if ((g_usbd_msc[busid].start_sector + g_usbd_msc[busid].nsectors) > g_usbd_msc[busid].scsi_blk_nbr… in SCSI_write10()
595 if (g_usbd_msc[busid].cbw.dDataLength != data_len) { in SCSI_write10()
598 g_usbd_msc[busid].stage = MSC_DATA_OUT; in SCSI_write10()
600 …usbd_ep_start_read(busid, mass_ep_data[busid][MSD_OUT_EP_IDX].ep_addr, g_usbd_msc[busid].block_buf… in SCSI_write10()
604 static bool SCSI_write12(uint8_t busid, uint8_t **data, uint32_t *len) in SCSI_write12() argument
611 …if (((g_usbd_msc[busid].cbw.bmFlags & 0x80U) != 0x00U) || (g_usbd_msc[busid].cbw.dDataLength == 0U… in SCSI_write12()
612 SCSI_SetSenseData(busid, SCSI_KCQIR_INVALIDCOMMAND); in SCSI_write12()
616 …g_usbd_msc[busid].start_sector = GET_BE32(&g_usbd_msc[busid].cbw.CB[2]); /* Logical Block Address … in SCSI_write12()
617 …g_usbd_msc[busid].nsectors = GET_BE32(&g_usbd_msc[busid].cbw.CB[6]); /* Number of Blocks to transf… in SCSI_write12()
619 …data_len = g_usbd_msc[busid].nsectors * g_usbd_msc[busid].scsi_blk_size[g_usbd_msc[busid].cbw.bLUN… in SCSI_write12()
620 …if ((g_usbd_msc[busid].start_sector + g_usbd_msc[busid].nsectors) > g_usbd_msc[busid].scsi_blk_nbr… in SCSI_write12()
624 if (g_usbd_msc[busid].cbw.dDataLength != data_len) { in SCSI_write12()
627 g_usbd_msc[busid].stage = MSC_DATA_OUT; in SCSI_write12()
629 …usbd_ep_start_read(busid, mass_ep_data[busid][MSD_OUT_EP_IDX].ep_addr, g_usbd_msc[busid].block_buf… in SCSI_write12()
633 static bool SCSI_processRead(uint8_t busid) in SCSI_processRead() argument
637 USB_LOG_DBG("read lba:%d\r\n", g_usbd_msc[busid].start_sector); in SCSI_processRead()
639 …transfer_len = MIN(g_usbd_msc[busid].nsectors * g_usbd_msc[busid].scsi_blk_size[g_usbd_msc[busid].… in SCSI_processRead()
641 …if (usbd_msc_sector_read(busid, g_usbd_msc[busid].cbw.bLUN, g_usbd_msc[busid].start_sector, g_usbd… in SCSI_processRead()
642 SCSI_SetSenseData(busid, SCSI_KCQHE_UREINRESERVEDAREA); in SCSI_processRead()
646 …g_usbd_msc[busid].start_sector += (transfer_len / g_usbd_msc[busid].scsi_blk_size[g_usbd_msc[busid… in SCSI_processRead()
647 …g_usbd_msc[busid].nsectors -= (transfer_len / g_usbd_msc[busid].scsi_blk_size[g_usbd_msc[busid].cb… in SCSI_processRead()
648 g_usbd_msc[busid].csw.dDataResidue -= transfer_len; in SCSI_processRead()
650 if (g_usbd_msc[busid].nsectors == 0) { in SCSI_processRead()
651 g_usbd_msc[busid].stage = MSC_SEND_CSW; in SCSI_processRead()
654 …usbd_ep_start_write(busid, mass_ep_data[busid][MSD_IN_EP_IDX].ep_addr, g_usbd_msc[busid].block_buf… in SCSI_processRead()
659 static bool SCSI_processWrite(uint8_t busid, uint32_t nbytes) in SCSI_processWrite() argument
663 USB_LOG_DBG("write lba:%d\r\n", g_usbd_msc[busid].start_sector); in SCSI_processWrite()
665 …if (usbd_msc_sector_write(busid, g_usbd_msc[busid].cbw.bLUN, g_usbd_msc[busid].start_sector, g_usb… in SCSI_processWrite()
666 SCSI_SetSenseData(busid, SCSI_KCQHE_WRITEFAULT); in SCSI_processWrite()
670 …g_usbd_msc[busid].start_sector += (nbytes / g_usbd_msc[busid].scsi_blk_size[g_usbd_msc[busid].cbw.… in SCSI_processWrite()
671 …g_usbd_msc[busid].nsectors -= (nbytes / g_usbd_msc[busid].scsi_blk_size[g_usbd_msc[busid].cbw.bLUN… in SCSI_processWrite()
672 g_usbd_msc[busid].csw.dDataResidue -= nbytes; in SCSI_processWrite()
674 if (g_usbd_msc[busid].nsectors == 0) { in SCSI_processWrite()
675 usbd_msc_send_csw(busid, CSW_STATUS_CMD_PASSED); in SCSI_processWrite()
677 …data_len = MIN(g_usbd_msc[busid].nsectors * g_usbd_msc[busid].scsi_blk_size[g_usbd_msc[busid].cbw.… in SCSI_processWrite()
678 …usbd_ep_start_read(busid, mass_ep_data[busid][MSD_OUT_EP_IDX].ep_addr, g_usbd_msc[busid].block_buf… in SCSI_processWrite()
684 static bool SCSI_CBWDecode(uint8_t busid, uint32_t nbytes) in SCSI_CBWDecode() argument
686 uint8_t *buf2send = g_usbd_msc[busid].block_buffer; in SCSI_CBWDecode()
692 SCSI_SetSenseData(busid, SCSI_KCQIR_INVALIDCOMMAND); in SCSI_CBWDecode()
696 g_usbd_msc[busid].csw.dTag = g_usbd_msc[busid].cbw.dTag; in SCSI_CBWDecode()
697 g_usbd_msc[busid].csw.dDataResidue = g_usbd_msc[busid].cbw.dDataLength; in SCSI_CBWDecode()
699 …if ((g_usbd_msc[busid].cbw.dSignature != MSC_CBW_Signature) || (g_usbd_msc[busid].cbw.bCBLength < … in SCSI_CBWDecode()
700 SCSI_SetSenseData(busid, SCSI_KCQIR_INVALIDCOMMAND); in SCSI_CBWDecode()
703 USB_LOG_DBG("Decode CB:0x%02x\r\n", g_usbd_msc[busid].cbw.CB[0]); in SCSI_CBWDecode()
704 switch (g_usbd_msc[busid].cbw.CB[0]) { in SCSI_CBWDecode()
706 ret = SCSI_testUnitReady(busid, &buf2send, &len2send); in SCSI_CBWDecode()
709 ret = SCSI_requestSense(busid, &buf2send, &len2send); in SCSI_CBWDecode()
712 ret = SCSI_inquiry(busid, &buf2send, &len2send); in SCSI_CBWDecode()
715 ret = SCSI_startStopUnit(busid, &buf2send, &len2send); in SCSI_CBWDecode()
718 ret = SCSI_preventAllowMediaRemoval(busid, &buf2send, &len2send); in SCSI_CBWDecode()
721 ret = SCSI_modeSense6(busid, &buf2send, &len2send); in SCSI_CBWDecode()
724 ret = SCSI_modeSense10(busid, &buf2send, &len2send); in SCSI_CBWDecode()
727 ret = SCSI_readFormatCapacity(busid, &buf2send, &len2send); in SCSI_CBWDecode()
730 ret = SCSI_readCapacity10(busid, &buf2send, &len2send); in SCSI_CBWDecode()
733 ret = SCSI_read10(busid, NULL, 0); in SCSI_CBWDecode()
736 ret = SCSI_read12(busid, NULL, 0); in SCSI_CBWDecode()
739 ret = SCSI_write10(busid, NULL, 0); in SCSI_CBWDecode()
742 ret = SCSI_write12(busid, NULL, 0); in SCSI_CBWDecode()
751 SCSI_SetSenseData(busid, SCSI_KCQIR_INVALIDCOMMAND); in SCSI_CBWDecode()
757 if (g_usbd_msc[busid].stage == MSC_READ_CBW) { in SCSI_CBWDecode()
760 usbd_msc_send_info(busid, buf2send, len2send); in SCSI_CBWDecode()
762 usbd_msc_send_csw(busid, CSW_STATUS_CMD_PASSED); in SCSI_CBWDecode()
769 void mass_storage_bulk_out(uint8_t busid, uint8_t ep, uint32_t nbytes) in mass_storage_bulk_out() argument
773 switch (g_usbd_msc[busid].stage) { in mass_storage_bulk_out()
775 if (SCSI_CBWDecode(busid, nbytes) == false) { in mass_storage_bulk_out()
776 USB_LOG_ERR("Command: 0x%02x decode err\r\n", g_usbd_msc[busid].cbw.CB[0]); in mass_storage_bulk_out()
777 usbd_msc_bot_abort(busid); in mass_storage_bulk_out()
782 switch (g_usbd_msc[busid].cbw.CB[0]) { in mass_storage_bulk_out()
786 g_usbd_msc[busid].nbytes = nbytes; in mass_storage_bulk_out()
787 usb_osal_mq_send(g_usbd_msc[busid].usbd_msc_mq, MSC_DATA_OUT); in mass_storage_bulk_out()
789 g_usbd_msc[busid].nbytes = nbytes; in mass_storage_bulk_out()
790 g_usbd_msc[busid].event = MSC_DATA_OUT; in mass_storage_bulk_out()
792 if (SCSI_processWrite(busid, nbytes) == false) { in mass_storage_bulk_out()
793 …usbd_msc_send_csw(busid, CSW_STATUS_CMD_FAILED); /* send fail status to host,and the host will ret… in mass_storage_bulk_out()
806 void mass_storage_bulk_in(uint8_t busid, uint8_t ep, uint32_t nbytes) in mass_storage_bulk_in() argument
811 switch (g_usbd_msc[busid].stage) { in mass_storage_bulk_in()
813 switch (g_usbd_msc[busid].cbw.CB[0]) { in mass_storage_bulk_in()
817 usb_osal_mq_send(g_usbd_msc[busid].usbd_msc_mq, MSC_DATA_IN); in mass_storage_bulk_in()
819 g_usbd_msc[busid].event = MSC_DATA_IN; in mass_storage_bulk_in()
821 if (SCSI_processRead(busid) == false) { in mass_storage_bulk_in()
822 …usbd_msc_send_csw(busid, CSW_STATUS_CMD_FAILED); /* send fail status to host,and the host will ret… in mass_storage_bulk_in()
833 usbd_msc_send_csw(busid, CSW_STATUS_CMD_PASSED); in mass_storage_bulk_in()
838 g_usbd_msc[busid].stage = MSC_READ_CBW; in mass_storage_bulk_in()
840 …usbd_ep_start_read(busid, mass_ep_data[busid][MSD_OUT_EP_IDX].ep_addr, (uint8_t *)&g_usbd_msc[busi… in mass_storage_bulk_in()
853 uint8_t busid = (uint8_t)CONFIG_USB_OSAL_THREAD_GET_ARGV; in usbdev_msc_thread() local
856 …ret = usb_osal_mq_recv(g_usbd_msc[busid].usbd_msc_mq, (uintptr_t *)&event, USB_OSAL_WAITING_FOREVE… in usbdev_msc_thread()
861 if (SCSI_processWrite(busid, g_usbd_msc[busid].nbytes) == false) { in usbdev_msc_thread()
862 …usbd_msc_send_csw(busid, CSW_STATUS_CMD_FAILED); /* send fail status to host,and the host will ret… in usbdev_msc_thread()
865 if (SCSI_processRead(busid) == false) { in usbdev_msc_thread()
866 …usbd_msc_send_csw(busid, CSW_STATUS_CMD_FAILED); /* send fail status to host,and the host will ret… in usbdev_msc_thread()
873 void usbd_msc_polling(uint8_t busid) in usbd_msc_polling() argument
877 event = g_usbd_msc[busid].event; in usbd_msc_polling()
880 g_usbd_msc[busid].event = 0; in usbd_msc_polling()
882 if (SCSI_processWrite(busid, g_usbd_msc[busid].nbytes) == false) { in usbd_msc_polling()
883 …usbd_msc_send_csw(busid, CSW_STATUS_CMD_FAILED); /* send fail status to host,and the host will ret… in usbd_msc_polling()
886 if (SCSI_processRead(busid) == false) { in usbd_msc_polling()
887 …usbd_msc_send_csw(busid, CSW_STATUS_CMD_FAILED); /* send fail status to host,and the host will ret… in usbd_msc_polling()
895 struct usbd_interface *usbd_msc_init_intf(uint8_t busid, struct usbd_interface *intf, const uint8_t… in usbd_msc_init_intf() argument
902 mass_ep_data[busid][MSD_OUT_EP_IDX].ep_addr = out_ep; in usbd_msc_init_intf()
903 mass_ep_data[busid][MSD_OUT_EP_IDX].ep_cb = mass_storage_bulk_out; in usbd_msc_init_intf()
904 mass_ep_data[busid][MSD_IN_EP_IDX].ep_addr = in_ep; in usbd_msc_init_intf()
905 mass_ep_data[busid][MSD_IN_EP_IDX].ep_cb = mass_storage_bulk_in; in usbd_msc_init_intf()
907 usbd_add_endpoint(busid, &mass_ep_data[busid][MSD_OUT_EP_IDX]); in usbd_msc_init_intf()
908 usbd_add_endpoint(busid, &mass_ep_data[busid][MSD_IN_EP_IDX]); in usbd_msc_init_intf()
910 memset((uint8_t *)&g_usbd_msc[busid], 0, sizeof(struct usbd_msc_priv)); in usbd_msc_init_intf()
912 usdb_msc_set_max_lun(busid); in usbd_msc_init_intf()
913 for (uint8_t i = 0u; i <= g_usbd_msc[busid].max_lun; i++) { in usbd_msc_init_intf()
914 …usbd_msc_get_cap(busid, i, &g_usbd_msc[busid].scsi_blk_nbr[i], &g_usbd_msc[busid].scsi_blk_size[i]… in usbd_msc_init_intf()
916 if (CONFIG_USBDEV_MSC_MAX_BUFSIZE % g_usbd_msc[busid].scsi_blk_size[i]) { in usbd_msc_init_intf()
926 void usbd_msc_set_readonly(uint8_t busid, bool readonly) in usbd_msc_set_readonly() argument
928 g_usbd_msc[busid].readonly = readonly; in usbd_msc_set_readonly()
931 bool usbd_msc_get_popup(uint8_t busid) in usbd_msc_get_popup() argument
933 return g_usbd_msc[busid].popup; in usbd_msc_get_popup()
936 __WEAK void usbd_msc_get_cap(uint8_t busid, uint8_t lun, uint32_t *block_num, uint32_t *block_size) in usbd_msc_get_cap() argument
938 (void)busid; in usbd_msc_get_cap()
945 __WEAK int usbd_msc_sector_read(uint8_t busid, uint8_t lun, uint32_t sector, uint8_t *buffer, uint3… in usbd_msc_sector_read() argument
947 (void)busid; in usbd_msc_sector_read()
956 __WEAK int usbd_msc_sector_write(uint8_t busid, uint8_t lun, uint32_t sector, uint8_t *buffer, uint… in usbd_msc_sector_write() argument
958 (void)busid; in usbd_msc_sector_write()