summaryrefslogtreecommitdiff
path: root/common/usbx_device_classes
diff options
context:
space:
mode:
Diffstat (limited to 'common/usbx_device_classes')
-rw-r--r--common/usbx_device_classes/inc/ux_device_class_storage.h16
-rw-r--r--common/usbx_device_classes/src/ux_device_class_storage_mode_sense.c33
2 files changed, 35 insertions, 14 deletions
diff --git a/common/usbx_device_classes/inc/ux_device_class_storage.h b/common/usbx_device_classes/inc/ux_device_class_storage.h
index c1ca49b..c2e7858 100644
--- a/common/usbx_device_classes/inc/ux_device_class_storage.h
+++ b/common/usbx_device_classes/inc/ux_device_class_storage.h
@@ -26,7 +26,7 @@
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_device_class_storage.h PORTABLE C */
-/* 6.0 */
+/* 6.0.2 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -41,6 +41,9 @@
/* DATE NAME DESCRIPTION */
/* */
/* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */
+/* 08-14-2020 Chaoqiong Xiao Modified comment(s), */
+/* added mode related macros, */
+/* resulting in version 6.0.2 */
/* */
/**************************************************************************/
@@ -167,12 +170,23 @@
#define UX_SLAVE_CLASS_STORAGE_MODE_SENSE_PARAMETER_MEDIUM_TYPE_6 1
#define UX_SLAVE_CLASS_STORAGE_MODE_SENSE_PARAMETER_MEDIUM_TYPE_10 2
+#define UX_SLAVE_CLASS_STORAGE_MODE_SENSE_PARAMETER_FLAGS_6 2
+#define UX_SLAVE_CLASS_STORAGE_MODE_SENSE_PARAMETER_FLAGS_10 3
+#define UX_SLAVE_CLASS_STORAGE_MODE_SENSE_PARAMETER_FLAG_WP 0x80
#define UX_SLAVE_CLASS_STORAGE_MODE_SENSE_PARAMETER_HEADER_LENGTH_6 4
#define UX_SLAVE_CLASS_STORAGE_MODE_SENSE_PARAMETER_HEADER_LENGTH_10 8
#define UX_SLAVE_CLASS_STORAGE_MODE_SENSE_COMMAND_LENGTH_UFI 12
#define UX_SLAVE_CLASS_STORAGE_MODE_SENSE_COMMAND_LENGTH_SBC 12
+#define UX_SLAVE_CLASS_STORAGE_IEC_MODE_PAGE_PAGE_LENGTH 0x0A
+
+#define UX_SLAVE_CLASS_STORAGE_CACHING_MODE_PAGE_PAGE_LENGTH 0x12
+#define UX_SLAVE_CLASS_STORAGE_CACHING_MODE_PAGE_CODE 0
+#define UX_SLAVE_CLASS_STORAGE_CACHING_MODE_PAGE_LENGTH 1
+#define UX_SLAVE_CLASS_STORAGE_CACHING_MODE_PAGE_FLAGS 2
+#define UX_SLAVE_CLASS_STORAGE_CACHING_MODE_PAGE_FLAG_WCE (1u<<2)
+
/* Define Storage Class SCSI request sense command constants. */
diff --git a/common/usbx_device_classes/src/ux_device_class_storage_mode_sense.c b/common/usbx_device_classes/src/ux_device_class_storage_mode_sense.c
index 53934c5..c7a1829 100644
--- a/common/usbx_device_classes/src/ux_device_class_storage_mode_sense.c
+++ b/common/usbx_device_classes/src/ux_device_class_storage_mode_sense.c
@@ -47,8 +47,8 @@ UCHAR usbx_device_class_storage_mode_sense_page_cdrom[USBX_DEVICE_CLASS_STORAGE_
#else
#define USBX_DEVICE_CLASS_STORAGE_MODE_SENSE_PAGE_CDROM_LENGTH (0)
#endif
-#define USBX_DEVICE_CLASS_STORAGE_MODE_SENSE_PAGE_CACHE_LENGTH (0x12 + 2)
-#define USBX_DEVICE_CLASS_STORAGE_MODE_SENSE_PAGE_IEC_LENGTH (0x0A + 2)
+#define USBX_DEVICE_CLASS_STORAGE_MODE_SENSE_PAGE_CACHE_LENGTH (UX_SLAVE_CLASS_STORAGE_CACHING_MODE_PAGE_PAGE_LENGTH + 2)
+#define USBX_DEVICE_CLASS_STORAGE_MODE_SENSE_PAGE_IEC_LENGTH (UX_SLAVE_CLASS_STORAGE_IEC_MODE_PAGE_PAGE_LENGTH + 2)
/* Ensure sense pages can fit in the bulk in endpoint's transfer buffer. */
#define USBX_DEVICE_CLASS_STORAGE_MODE_SENSE_PAGE_ALL_RESPONSE_LENGTH ( \
@@ -65,7 +65,7 @@ UCHAR usbx_device_class_storage_mode_sense_page_cdrom[USBX_DEVICE_CLASS_STORAGE_
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_storage_mode_sense PORTABLE C */
-/* 6.0 */
+/* 6.0.2 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -104,6 +104,11 @@ UCHAR usbx_device_class_storage_mode_sense_page_cdrom[USBX_DEVICE_CLASS_STORAGE_
/* DATE NAME DESCRIPTION */
/* */
/* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */
+/* 08-14-2020 Chaoqiong Xiao Modified comment(s), */
+/* used mode related macros, */
+/* verified memset and memcpy */
+/* cases, */
+/* resulting in version 6.0.2 */
/* */
/**************************************************************************/
UINT _ux_device_class_storage_mode_sense(UX_SLAVE_CLASS_STORAGE *storage,
@@ -120,7 +125,7 @@ ULONG page_code;
ULONG mode_sense_command;
UCHAR read_only_flag;
ULONG response_header_length;
-ULONG medium_type_index;
+ULONG flags_index;
ULONG mode_data_length;
UCHAR *page_pointer;
ULONG page_length;
@@ -146,7 +151,7 @@ ULONG page_length;
/* Extract the length to be returned by the cbwcb. */
mode_sense_reply_length = (ULONG) *(cbwcb + UX_SLAVE_CLASS_STORAGE_MODE_SENSE_ALLOCATION_LENGTH_6);
- medium_type_index = UX_SLAVE_CLASS_STORAGE_MODE_SENSE_PARAMETER_MEDIUM_TYPE_6;
+ flags_index = UX_SLAVE_CLASS_STORAGE_MODE_SENSE_PARAMETER_FLAGS_6;
response_header_length = UX_SLAVE_CLASS_STORAGE_MODE_SENSE_PARAMETER_HEADER_LENGTH_6;
}
@@ -155,7 +160,7 @@ ULONG page_length;
/* Extract the length to be returned by the cbwcb. */
mode_sense_reply_length = _ux_utility_short_get_big_endian(cbwcb + UX_SLAVE_CLASS_STORAGE_MODE_SENSE_ALLOCATION_LENGTH_10);
- medium_type_index = UX_SLAVE_CLASS_STORAGE_MODE_SENSE_PARAMETER_MEDIUM_TYPE_10;
+ flags_index = UX_SLAVE_CLASS_STORAGE_MODE_SENSE_PARAMETER_FLAGS_10;
response_header_length = UX_SLAVE_CLASS_STORAGE_MODE_SENSE_PARAMETER_HEADER_LENGTH_10;
}
@@ -164,13 +169,13 @@ ULONG page_length;
mode_sense_reply_length = UX_SLAVE_CLASS_STORAGE_BUFFER_SIZE;
/* Ensure memory buffer cleaned. */
- _ux_utility_memory_set(transfer_request -> ux_slave_transfer_request_data_pointer, 0, mode_sense_reply_length);
+ _ux_utility_memory_set(transfer_request -> ux_slave_transfer_request_data_pointer, 0, mode_sense_reply_length); /* Use case of memset is verified. */
/* Establish READ ONLY flag. */
if (storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_media_read_only_flag == UX_TRUE)
/* This device is Read Only. */
- read_only_flag = 0x80;
+ read_only_flag = UX_SLAVE_CLASS_STORAGE_MODE_SENSE_PARAMETER_FLAG_WP;
else
@@ -191,7 +196,7 @@ ULONG page_length;
page_length = USBX_DEVICE_CLASS_STORAGE_MODE_SENSE_PAGE_CDROM_LENGTH;
/* Copy page data. */
- _ux_utility_memory_copy(page_pointer, usbx_device_class_storage_mode_sense_page_cdrom, page_length);
+ _ux_utility_memory_copy(page_pointer, usbx_device_class_storage_mode_sense_page_cdrom, page_length); /* Use case of memcpy is verified. */
/* Update pointer and length. */
mode_data_length += page_length;
@@ -210,10 +215,12 @@ ULONG page_length;
*(page_pointer) = UX_SLAVE_CLASS_STORAGE_PAGE_CODE_CACHE;
/* Store the length of the page data. */
- *(page_pointer + 1) = 0x12;
+ *(page_pointer + UX_SLAVE_CLASS_STORAGE_CACHING_MODE_PAGE_LENGTH) =
+ UX_SLAVE_CLASS_STORAGE_CACHING_MODE_PAGE_PAGE_LENGTH;
/* Set the Write Cache Enabled (WCE) bit. */
- *(page_pointer + 2) |= 0x04;
+ *(page_pointer + UX_SLAVE_CLASS_STORAGE_CACHING_MODE_PAGE_FLAGS) |=
+ UX_SLAVE_CLASS_STORAGE_CACHING_MODE_PAGE_FLAG_WCE;
mode_data_length += page_length;
page_pointer += page_length;
@@ -229,7 +236,7 @@ ULONG page_length;
*(page_pointer) = UX_SLAVE_CLASS_STORAGE_PAGE_CODE_IEC;
/* Store the length of the page data. */
- *(page_pointer + 1) = 0x0A;
+ *(page_pointer + 1) = UX_SLAVE_CLASS_STORAGE_IEC_MODE_PAGE_PAGE_LENGTH;
mode_data_length += page_length;
page_pointer += page_length;
@@ -242,7 +249,7 @@ ULONG page_length;
_ux_utility_short_put_big_endian(transfer_request -> ux_slave_transfer_request_data_pointer, (USHORT)mode_data_length);
/* Store the write protection flag. */
- *(transfer_request -> ux_slave_transfer_request_data_pointer + medium_type_index + 1) = read_only_flag;
+ *(transfer_request -> ux_slave_transfer_request_data_pointer + flags_index) = read_only_flag;
/* Send a payload with the response buffer. */
_ux_device_stack_transfer_request(transfer_request, mode_sense_reply_length, mode_sense_reply_length);