1
1
/***************************************************************************
2
- * Copyright (c) 2024 Microsoft Corporation
3
- *
2
+ * Copyright (c) 2024 Microsoft Corporation
3
+ *
4
4
* This program and the accompanying materials are made available under the
5
5
* terms of the MIT License which is available at
6
6
* https://opensource.org/licenses/MIT.
7
- *
7
+ *
8
8
* SPDX-License-Identifier: MIT
9
9
**************************************************************************/
10
10
67
67
#ifndef UX_DEVICE_CLASS_STORAGE_H
68
68
#define UX_DEVICE_CLASS_STORAGE_H
69
69
70
- /* Determine if a C++ compiler is being used. If so, ensure that standard
71
- C is used to process the API information. */
70
+ /* Determine if a C++ compiler is being used. If so, ensure that standard
71
+ C is used to process the API information. */
72
72
73
- #ifdef __cplusplus
73
+ #ifdef __cplusplus
74
74
75
- /* Yes, C++ compiler is present. Use standard C. */
76
- extern "C" {
75
+ /* Yes, C++ compiler is present. Use standard C. */
76
+ extern "C" {
77
77
78
- #endif
78
+ #endif
79
79
80
80
81
81
/* Internal option: enable the basic USBX error checking. This define is typically used
@@ -192,6 +192,13 @@ extern "C" {
192
192
#define UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_LENGTH 36
193
193
#define UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_LENGTH_CD_ROM 0x5b
194
194
195
+ /* Define Storage Class SCSI inquiry response length constants. */
196
+
197
+ #define UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_VENDOR_ID_LENGTH 0x08U
198
+ #define UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_PRODUCT_ID_LENGTH 0x10U
199
+ #define UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_PRODUCT_REVISION_LENGTH 0x04U
200
+ #define UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_PRODUCT_SERIAL_LENGTH 0x14U
201
+
195
202
196
203
/* Define Storage Class SCSI start/stop command constants. */
197
204
@@ -505,16 +512,26 @@ typedef struct UX_SLAVE_CLASS_STORAGE_LUN_STRUCT
505
512
ULONG ux_slave_class_storage_disk_status ;
506
513
ULONG ux_slave_class_storage_last_session_state ;
507
514
508
- UINT (* ux_slave_class_storage_media_read )(VOID * storage , ULONG lun , UCHAR * data_pointer , ULONG number_blocks , ULONG lba , ULONG * media_status );
509
- UINT (* ux_slave_class_storage_media_write )(VOID * storage , ULONG lun , UCHAR * data_pointer , ULONG number_blocks , ULONG lba , ULONG * media_status );
510
- UINT (* ux_slave_class_storage_media_flush )(VOID * storage , ULONG lun , ULONG number_blocks , ULONG lba , ULONG * media_status );
511
- UINT (* ux_slave_class_storage_media_status )(VOID * storage , ULONG lun , ULONG media_id , ULONG * media_status );
512
- UINT (* ux_slave_class_storage_media_notification )(VOID * storage , ULONG lun , ULONG media_id , ULONG notification_class , UCHAR * * media_notification , ULONG * media_notification_length );
515
+ UINT (* ux_slave_class_storage_media_read )(VOID * storage , ULONG lun , UCHAR * data_pointer ,
516
+ ULONG number_blocks , ULONG lba , ULONG * media_status );
517
+ UINT (* ux_slave_class_storage_media_write )(VOID * storage , ULONG lun , UCHAR * data_pointer ,
518
+ ULONG number_blocks , ULONG lba , ULONG * media_status );
519
+ UINT (* ux_slave_class_storage_media_flush )(VOID * storage , ULONG lun , ULONG number_blocks ,
520
+ ULONG lba , ULONG * media_status );
521
+ UINT (* ux_slave_class_storage_media_status )(VOID * storage , ULONG lun , ULONG media_id ,
522
+ ULONG * media_status );
523
+ UINT (* ux_slave_class_storage_media_notification )(VOID * storage , ULONG lun , ULONG media_id ,
524
+ ULONG notification_class ,
525
+ UCHAR * * media_notification ,
526
+ ULONG * media_notification_length );
513
527
} UX_SLAVE_CLASS_STORAGE_LUN ;
514
528
515
529
/* Sense status value (key at bit0-7, code at bit8-15 and qualifier at bit16-23). */
516
530
517
- #define UX_DEVICE_CLASS_STORAGE_SENSE_STATUS (key ,code ,qualifier ) (((key) & 0xFF)|(((code) & 0xFF) << 8)|(((qualifier) & 0xFF) << 16))
531
+ #define UX_DEVICE_CLASS_STORAGE_SENSE_STATUS (key , code , qualifier ) (((key) & 0xFF) | \
532
+ (((code) & 0xFF) << 8) | \
533
+ (((qualifier) & 0xFF) << 16))
534
+
518
535
#define UX_DEVICE_CLASS_STORAGE_SENSE_KEY (status ) ((status) & 0xFF)
519
536
#define UX_DEVICE_CLASS_STORAGE_SENSE_CODE (status ) (((status) >> 8) & 0xFF)
520
537
#define UX_DEVICE_CLASS_STORAGE_SENSE_QUALIFIER (status ) (((status) >> 16) & 0xFF)
@@ -579,7 +596,8 @@ typedef struct UX_SLAVE_CLASS_STORAGE_STRUCT
579
596
(UX_OVERFLOW_CHECK_MULC_ULONG(UX_DEVICE_CLASS_STORAGE_BULK_BUFFER_SIZE, 2))
580
597
#define UX_DEVICE_CLASS_STORAGE_ENDPOINT_BUFFER_SIZE (UX_DEVICE_CLASS_STORAGE_BULK_BUFFER_SIZE * 2)
581
598
#define UX_DEVICE_CLASS_STORAGE_BULKOUT_BUFFER (storage ) ((storage)->ux_device_class_storage_endpoint_buffer)
582
- #define UX_DEVICE_CLASS_STORAGE_BULKIN_BUFFER (storage ) (UX_DEVICE_CLASS_STORAGE_BULKOUT_BUFFER(storage) + UX_DEVICE_CLASS_STORAGE_BULK_BUFFER_SIZE)
599
+ #define UX_DEVICE_CLASS_STORAGE_BULKIN_BUFFER (storage ) (UX_DEVICE_CLASS_STORAGE_BULKOUT_BUFFER(storage) + \
600
+ UX_DEVICE_CLASS_STORAGE_BULK_BUFFER_SIZE)
583
601
584
602
#define UX_DEVICE_CLASS_STORAGE_CSW_STATUS (p ) (((UCHAR*)(p))[0])
585
603
#define UX_DEVICE_CLASS_STORAGE_CSW_SKIP (p ) (((UCHAR*)(p))[3])
@@ -605,50 +623,86 @@ UINT _ux_device_class_storage_initialize(UX_SLAVE_CLASS_COMMAND *command);
605
623
UINT _ux_device_class_storage_uninitialize (UX_SLAVE_CLASS_COMMAND * command );
606
624
UINT _ux_device_class_storage_activate (UX_SLAVE_CLASS_COMMAND * command );
607
625
UINT _ux_device_class_storage_control_request (UX_SLAVE_CLASS_COMMAND * command );
608
- UINT _ux_device_class_storage_csw_send (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun , UX_SLAVE_ENDPOINT * endpoint_in , UCHAR csw_status );
626
+ UINT _ux_device_class_storage_csw_send (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
627
+ UX_SLAVE_ENDPOINT * endpoint_in , UCHAR csw_status );
609
628
UINT _ux_device_class_storage_deactivate (UX_SLAVE_CLASS_COMMAND * command );
610
629
UINT _ux_device_class_storage_entry (UX_SLAVE_CLASS_COMMAND * command );
611
- UINT _ux_device_class_storage_format (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun , UX_SLAVE_ENDPOINT * endpoint_in ,
612
- UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
613
- UINT _ux_device_class_storage_inquiry (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun , UX_SLAVE_ENDPOINT * endpoint_in ,
614
- UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
615
- UINT _ux_device_class_storage_mode_select (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun , UX_SLAVE_ENDPOINT * endpoint_in ,
616
- UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
617
- UINT _ux_device_class_storage_mode_sense (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun , UX_SLAVE_ENDPOINT * endpoint_in ,
618
- UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
630
+ UINT _ux_device_class_storage_format (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
631
+ UX_SLAVE_ENDPOINT * endpoint_in ,
632
+ UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
633
+
634
+ UINT _ux_device_class_storage_inquiry (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
635
+ UX_SLAVE_ENDPOINT * endpoint_in ,
636
+ UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
637
+
638
+ UINT _ux_device_class_storage_mode_select (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
639
+ UX_SLAVE_ENDPOINT * endpoint_in ,
640
+ UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
641
+
642
+ UINT _ux_device_class_storage_mode_sense (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
643
+ UX_SLAVE_ENDPOINT * endpoint_in ,
644
+ UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
645
+
619
646
UINT _ux_device_class_storage_prevent_allow_media_removal (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
620
- UX_SLAVE_ENDPOINT * endpoint_in , UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
621
- UINT _ux_device_class_storage_read (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun , UX_SLAVE_ENDPOINT * endpoint_in ,
622
- UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb , UCHAR scsi_command );
623
- UINT _ux_device_class_storage_read_capacity (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun , UX_SLAVE_ENDPOINT * endpoint_in ,
624
- UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
625
- UINT _ux_device_class_storage_read_format_capacity (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun , UX_SLAVE_ENDPOINT * endpoint_in ,
626
- UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
627
- UINT _ux_device_class_storage_read_toc (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun , UX_SLAVE_ENDPOINT * endpoint_in ,
628
- UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
629
- UINT _ux_device_class_storage_request_sense (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun , UX_SLAVE_ENDPOINT * endpoint_in ,
630
- UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
631
- UINT _ux_device_class_storage_start_stop (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun , UX_SLAVE_ENDPOINT * endpoint_in ,
632
- UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
633
- UINT _ux_device_class_storage_test_ready (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun , UX_SLAVE_ENDPOINT * endpoint_in ,
634
- UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
635
- VOID _ux_device_class_storage_thread (ULONG storage_instance );
636
- UINT _ux_device_class_storage_verify (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun , UX_SLAVE_ENDPOINT * endpoint_in ,
637
- UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
638
- UINT _ux_device_class_storage_write (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun , UX_SLAVE_ENDPOINT * endpoint_in ,
639
- UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb , UCHAR scsi_command );
640
- UINT _ux_device_class_storage_synchronize_cache (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun , UX_SLAVE_ENDPOINT * endpoint_in ,
641
- UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb , UCHAR scsi_command );
642
- UINT _ux_device_class_storage_read_disk_information (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
647
+ UX_SLAVE_ENDPOINT * endpoint_in ,
648
+ UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
649
+
650
+ UINT _ux_device_class_storage_read (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
651
+ UX_SLAVE_ENDPOINT * endpoint_in ,
652
+ UX_SLAVE_ENDPOINT * endpoint_out ,
653
+ UCHAR * cbwcb , UCHAR scsi_command );
654
+
655
+ UINT _ux_device_class_storage_read_capacity (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
656
+ UX_SLAVE_ENDPOINT * endpoint_in ,
657
+ UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
658
+
659
+ UINT _ux_device_class_storage_read_format_capacity (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
660
+ UX_SLAVE_ENDPOINT * endpoint_in ,
661
+ UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
662
+
663
+ UINT _ux_device_class_storage_read_toc (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
664
+ UX_SLAVE_ENDPOINT * endpoint_in ,
665
+ UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
666
+
667
+ UINT _ux_device_class_storage_request_sense (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
668
+ UX_SLAVE_ENDPOINT * endpoint_in ,
669
+ UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
670
+
671
+ UINT _ux_device_class_storage_start_stop (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
643
672
UX_SLAVE_ENDPOINT * endpoint_in ,
644
673
UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
645
674
646
- UINT _ux_device_class_storage_get_configuration (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
675
+ UINT _ux_device_class_storage_test_ready (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
647
676
UX_SLAVE_ENDPOINT * endpoint_in ,
648
677
UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
678
+
679
+ VOID _ux_device_class_storage_thread (ULONG storage_instance );
680
+
681
+ UINT _ux_device_class_storage_verify (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
682
+ UX_SLAVE_ENDPOINT * endpoint_in ,
683
+ UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
684
+
685
+ UINT _ux_device_class_storage_write (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
686
+ UX_SLAVE_ENDPOINT * endpoint_in ,
687
+ UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb , UCHAR scsi_command );
688
+
689
+ UINT _ux_device_class_storage_synchronize_cache (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
690
+ UX_SLAVE_ENDPOINT * endpoint_in ,
691
+ UX_SLAVE_ENDPOINT * endpoint_out ,
692
+ UCHAR * cbwcb , UCHAR scsi_command );
693
+
694
+ UINT _ux_device_class_storage_read_disk_information (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
695
+ UX_SLAVE_ENDPOINT * endpoint_in ,
696
+ UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
697
+
698
+ UINT _ux_device_class_storage_get_configuration (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
699
+ UX_SLAVE_ENDPOINT * endpoint_in ,
700
+ UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
701
+
649
702
UINT _ux_device_class_storage_get_status_notification (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
650
703
UX_SLAVE_ENDPOINT * endpoint_in ,
651
704
UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
705
+
652
706
UINT _ux_device_class_storage_report_key (UX_SLAVE_CLASS_STORAGE * storage ,
653
707
ULONG lun ,
654
708
UX_SLAVE_ENDPOINT * endpoint_in ,
@@ -660,24 +714,25 @@ UINT _ux_device_class_storage_get_performance(UX_SLAVE_CLASS_STORAGE *storage
660
714
UX_SLAVE_ENDPOINT * endpoint_in ,
661
715
UX_SLAVE_ENDPOINT * endpoint_out ,
662
716
UCHAR * cbwcb );
717
+
663
718
UINT _ux_device_class_storage_read_dvd_structure (UX_SLAVE_CLASS_STORAGE * storage , ULONG lun ,
664
719
UX_SLAVE_ENDPOINT * endpoint_in ,
665
720
UX_SLAVE_ENDPOINT * endpoint_out , UCHAR * cbwcb );
666
721
667
722
UINT _ux_device_class_storage_tasks_run (VOID * instance );
668
723
669
-
724
+ #ifdef UX_ENABLE_ERROR_CHECKING
670
725
UINT _uxe_device_class_storage_initialize (UX_SLAVE_CLASS_COMMAND * command );
671
-
726
+ #endif /* UX_ENABLE_ERROR_CHECKING */
672
727
673
728
/* Define Device Storage Class API prototypes. */
674
729
675
730
#define ux_device_class_storage_entry _ux_device_class_storage_entry
676
731
677
- /* Determine if a C++ compiler is being used. If so, complete the standard
678
- C conditional started above. */
732
+ /* Determine if a C++ compiler is being used. If so, complete the standard
733
+ C conditional started above. */
679
734
#ifdef __cplusplus
680
- }
681
- #endif
735
+ }
736
+ #endif
682
737
683
738
#endif
0 commit comments