summaryrefslogtreecommitdiff
path: root/common/usbx_device_classes
diff options
context:
space:
mode:
authorChaoqiong Xiao <[email protected]>2023-10-23 05:31:40 +0000
committerChaoqiong Xiao <[email protected]>2023-10-23 05:31:40 +0000
commit26585e42dccf2e1ce954d8cdb4890fac72d04864 (patch)
treefea8480672351b161488e07c31e3d704d82ee10a /common/usbx_device_classes
parent7c928b43db68b72970b3effd5a2582eb5a6869c7 (diff)
Update on 23 Oct 2023. Expand to see details.v6.3.0_rel
52c60057 Update headers and readme for 6.3.0 release. 5360ad52 Host H264 frame support. 4b097e80 Add javascript to codeql detection 70278ae3 Fixed use after free issues. 5560620e Improved standalone enum transfer flow. Turn off ASIX in standalone build. Im... 39a01206 Improved host HID clients (mouse/keyboard/remote control) deactivation sequence. be2c7fd5 Improved standalone host CDC ACM control and data instance link management (MSRC 81489,81570) c2368eb2 Improved AC AS management and error handing. b9c23b38 PIMA Host/device optional interrupt endpoint support and host unused semaphore removal. 34ca3af9 Removed interface link in class linked to device. 5d3c9dd0 Improved endpoints get error handling (host CDC-ECM/ACM, storage). Moved stor... 71b08ad1 Improved host audio descriptors validation 4717e3f1 Enable weekly pipeline build to avoid CodeQL expiration ca408b54 Checked XML tag nesting depth in Pictbridge object parsing c300a00c Limited pictbridge array element to hexa output array size. 0e644aaa Reject fake CDC-ECM data interface not located next to its control interface. 911007a9 Improved host HID usage handling. d0576877 Enable dummy check of python for CodeQL 2761e105 Fixed some split transfer issue. db0dbeda Added packet length validation for received nx packet. f5007249 Fix PIMA issues on data set extraction 3ec66399 Fixing device RNDIS bugs with zero copy 1ec77d6b Fix device HID issue when adding class memory man and zero copy. d52e55c0 Add zero copy support in device printer a5cb883f Added zero copy support in device CDC_ECM and RNDIS 1f967ae2 Enable codeql in onebranch pipeline de265dbc Enable zero copy for device audio and video 53aee275 Refined memory management to reduce overhead.
Diffstat (limited to 'common/usbx_device_classes')
-rw-r--r--common/usbx_device_classes/inc/ux_device_class_audio.h13
-rw-r--r--common/usbx_device_classes/inc/ux_device_class_audio10.h6
-rw-r--r--common/usbx_device_classes/inc/ux_device_class_audio20.h6
-rw-r--r--common/usbx_device_classes/inc/ux_device_class_ccid.h6
-rw-r--r--common/usbx_device_classes/inc/ux_device_class_cdc_acm.h6
-rw-r--r--common/usbx_device_classes/inc/ux_device_class_cdc_ecm.h26
-rw-r--r--common/usbx_device_classes/inc/ux_device_class_dfu.h6
-rw-r--r--common/usbx_device_classes/inc/ux_device_class_hid.h6
-rw-r--r--common/usbx_device_classes/inc/ux_device_class_pima.h24
-rw-r--r--common/usbx_device_classes/inc/ux_device_class_printer.h23
-rw-r--r--common/usbx_device_classes/inc/ux_device_class_rndis.h27
-rw-r--r--common/usbx_device_classes/inc/ux_device_class_storage.h6
-rw-r--r--common/usbx_device_classes/inc/ux_device_class_video.h12
-rw-r--r--common/usbx_device_classes/src/ux_device_class_audio_activate.c15
-rw-r--r--common/usbx_device_classes/src/ux_device_class_audio_change.c17
-rw-r--r--common/usbx_device_classes/src/ux_device_class_audio_initialize.c33
-rw-r--r--common/usbx_device_classes/src/ux_device_class_audio_interrupt_task_function.c12
-rw-r--r--common/usbx_device_classes/src/ux_device_class_audio_read_task_function.c19
-rw-r--r--common/usbx_device_classes/src/ux_device_class_audio_read_thread_entry.c19
-rw-r--r--common/usbx_device_classes/src/ux_device_class_audio_unitialize.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_audio_write_task_function.c17
-rw-r--r--common/usbx_device_classes/src/ux_device_class_audio_write_thread_entry.c15
-rw-r--r--common/usbx_device_classes/src/ux_device_class_ccid_activate.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_ccid_auto_seq_done.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_ccid_hardware_error.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_ccid_icc_insert.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_ccid_icc_remove.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_ccid_initialize.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_ccid_time_extension.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_ccid_uninitialize.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_cdc_acm_bulkin_thread.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_cdc_acm_bulkout_thread.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_cdc_acm_initialize.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_cdc_acm_ioctl.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_cdc_acm_read.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_cdc_acm_read_run.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_cdc_acm_tasks_run.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_cdc_acm_unitialize.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_cdc_acm_write.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_cdc_acm_write_run.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_cdc_acm_write_with_callback.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_cdc_ecm_activate.c17
-rw-r--r--common/usbx_device_classes/src/ux_device_class_cdc_ecm_bulkin_thread.c90
-rw-r--r--common/usbx_device_classes/src/ux_device_class_cdc_ecm_bulkout_thread.c29
-rw-r--r--common/usbx_device_classes/src/ux_device_class_cdc_ecm_change.c17
-rw-r--r--common/usbx_device_classes/src/ux_device_class_cdc_ecm_initialize.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_cdc_ecm_uninitialize.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_dfu_entry.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_dfu_initialize.c4
-rw-r--r--common/usbx_device_classes/src/ux_device_class_hid_activate.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_hid_entry.c4
-rw-r--r--common/usbx_device_classes/src/ux_device_class_hid_event_get.c18
-rw-r--r--common/usbx_device_classes/src/ux_device_class_hid_event_set.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_hid_initialize.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_hid_interrupt_thread.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_hid_read.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_hid_read_run.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_hid_receiver_event_free.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_hid_receiver_event_get.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_hid_receiver_initialize.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_hid_receiver_tasks_run.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_hid_receiver_thread.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_hid_receiver_uninitialize.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_hid_report_get.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_hid_report_set.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_hid_tasks_run.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_hid_uninitialize.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_pima_activate.c11
-rw-r--r--common/usbx_device_classes/src/ux_device_class_pima_deactivate.c8
-rw-r--r--common/usbx_device_classes/src/ux_device_class_pima_device_info_send.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_pima_device_prop_value_get.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_pima_entry.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_pima_event_set.c13
-rw-r--r--common/usbx_device_classes/src/ux_device_class_pima_initialize.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_pima_interrupt_thread.c12
-rw-r--r--common/usbx_device_classes/src/ux_device_class_pima_object_info_get.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_pima_object_prop_desc_get.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_pima_object_prop_value_get.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_pima_object_references_get.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_pima_storage_id_send.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_printer_activate.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_printer_initialize.c12
-rw-r--r--common/usbx_device_classes/src/ux_device_class_printer_read.c22
-rw-r--r--common/usbx_device_classes/src/ux_device_class_printer_read_run.c52
-rw-r--r--common/usbx_device_classes/src/ux_device_class_printer_uninitialize.c8
-rw-r--r--common/usbx_device_classes/src/ux_device_class_printer_write.c35
-rw-r--r--common/usbx_device_classes/src/ux_device_class_printer_write_run.c63
-rw-r--r--common/usbx_device_classes/src/ux_device_class_rndis_activate.c19
-rw-r--r--common/usbx_device_classes/src/ux_device_class_rndis_bulkin_thread.c129
-rw-r--r--common/usbx_device_classes/src/ux_device_class_rndis_bulkout_thread.c52
-rw-r--r--common/usbx_device_classes/src/ux_device_class_rndis_control_request.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_rndis_initialize.c8
-rw-r--r--common/usbx_device_classes/src/ux_device_class_storage_activate.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_storage_csw_send.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_storage_entry.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_storage_get_configuration.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_storage_get_performance.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_storage_initialize.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_storage_inquiry.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_storage_mode_sense.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_storage_read_capacity.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_storage_read_disk_information.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_storage_read_format_capacity.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_storage_read_toc.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_storage_report_key.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_storage_request_sense.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_storage_thread.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_storage_uninitialize.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_video_change.c14
-rw-r--r--common/usbx_device_classes/src/ux_device_class_video_entry.c6
-rw-r--r--common/usbx_device_classes/src/ux_device_class_video_initialize.c32
-rw-r--r--common/usbx_device_classes/src/ux_device_class_video_ioctl.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_video_max_payload_get.c4
-rw-r--r--common/usbx_device_classes/src/ux_device_class_video_read_payload_free.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_video_read_payload_get.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_video_read_task_function.c21
-rw-r--r--common/usbx_device_classes/src/ux_device_class_video_read_thread_entry.c21
-rw-r--r--common/usbx_device_classes/src/ux_device_class_video_reception_start.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_video_transmission_start.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_video_uninitialize.c12
-rw-r--r--common/usbx_device_classes/src/ux_device_class_video_write_payload_commit.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_video_write_payload_get.c10
-rw-r--r--common/usbx_device_classes/src/ux_device_class_video_write_task_function.c16
-rw-r--r--common/usbx_device_classes/src/ux_device_class_video_write_thread_entry.c16
124 files changed, 1123 insertions, 510 deletions
diff --git a/common/usbx_device_classes/inc/ux_device_class_audio.h b/common/usbx_device_classes/inc/ux_device_class_audio.h
index d6166cc..b0d2898 100644
--- a/common/usbx_device_classes/inc/ux_device_class_audio.h
+++ b/common/usbx_device_classes/inc/ux_device_class_audio.h
@@ -26,7 +26,7 @@
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_device_class_audio.h PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -65,10 +65,11 @@
/* 03-08-2023 Chaoqiong Xiao Modified comment(s), */
/* added error checks support, */
/* resulting in version 6.2.1 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
-/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* endpoint buffer in classes */
+/* with zero copy enabled, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
@@ -422,10 +423,6 @@ typedef struct UX_DEVICE_CLASS_AUDIO_STREAM_STRUCT
UX_SLAVE_INTERFACE *ux_device_class_audio_stream_interface;
UX_SLAVE_ENDPOINT *ux_device_class_audio_stream_endpoint;
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
- UCHAR *ux_device_class_audio_stream_endpoint_buffer;
-#endif
-
#if defined(UX_DEVICE_CLASS_AUDIO_FEEDBACK_SUPPORT)
UX_SLAVE_ENDPOINT *ux_device_class_audio_stream_feedback;
diff --git a/common/usbx_device_classes/inc/ux_device_class_audio10.h b/common/usbx_device_classes/inc/ux_device_class_audio10.h
index f0080dd..05c34bf 100644
--- a/common/usbx_device_classes/inc/ux_device_class_audio10.h
+++ b/common/usbx_device_classes/inc/ux_device_class_audio10.h
@@ -26,7 +26,7 @@
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_device_class_audio10.h PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -57,9 +57,9 @@
/* added error checks support, */
/* fixed a macro name, */
/* resulting in version 6.2.1 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* optimized USB descriptors, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
diff --git a/common/usbx_device_classes/inc/ux_device_class_audio20.h b/common/usbx_device_classes/inc/ux_device_class_audio20.h
index 1a1c075..aef29e3 100644
--- a/common/usbx_device_classes/inc/ux_device_class_audio20.h
+++ b/common/usbx_device_classes/inc/ux_device_class_audio20.h
@@ -26,7 +26,7 @@
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_device_class_audio20.h PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -58,9 +58,9 @@
/* 03-08-2023 Chaoqiong Xiao Modified comment(s), */
/* added error checks support, */
/* resulting in version 6.2.1 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* optimized USB descriptors, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
diff --git a/common/usbx_device_classes/inc/ux_device_class_ccid.h b/common/usbx_device_classes/inc/ux_device_class_ccid.h
index 832422e..e56b16f 100644
--- a/common/usbx_device_classes/inc/ux_device_class_ccid.h
+++ b/common/usbx_device_classes/inc/ux_device_class_ccid.h
@@ -24,7 +24,7 @@
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_device_class_ccid.h PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -42,9 +42,9 @@
/* 03-08-2023 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.1 */
-/* xx-xx-xxxx Yajun xia, CQ Xiao Modified comment(s), */
+/* 10-31-2023 Yajun xia, CQ Xiao Modified comment(s), */
/* added error checks support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
diff --git a/common/usbx_device_classes/inc/ux_device_class_cdc_acm.h b/common/usbx_device_classes/inc/ux_device_class_cdc_acm.h
index 748d345..569c10c 100644
--- a/common/usbx_device_classes/inc/ux_device_class_cdc_acm.h
+++ b/common/usbx_device_classes/inc/ux_device_class_cdc_acm.h
@@ -24,7 +24,7 @@
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_device_class_cdc_acm.h PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -58,12 +58,12 @@
/* 07-29-2022 Chaoqiong Xiao Modified comment(s), */
/* added write auto ZLP, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Yajun xia, CQ Xiao Modified comment(s), */
+/* 10-31-2023 Yajun xia, CQ Xiao Modified comment(s), */
/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
/* added error checks support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
diff --git a/common/usbx_device_classes/inc/ux_device_class_cdc_ecm.h b/common/usbx_device_classes/inc/ux_device_class_cdc_ecm.h
index d578136..457c592 100644
--- a/common/usbx_device_classes/inc/ux_device_class_cdc_ecm.h
+++ b/common/usbx_device_classes/inc/ux_device_class_cdc_ecm.h
@@ -24,7 +24,7 @@
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_device_class_cdc_ecm.h PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -55,10 +55,11 @@
/* 10-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added wait definitions, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
@@ -99,11 +100,26 @@ VOID _ux_network_driver_link_down(VOID *ux_network_handle);
#endif
+/* Option: defined, it enables zero copy support (works if CDC_ECM owns endpoint buffer).
+ Enabled, it requires that the NX packet pool is in cache safe area, and buffer max size is
+ larger than UX_DEVICE_CLASS_CDC_ECM_ETHERNET_PACKET_SIZE (1536).
+ */
+/* #define UX_DEVICE_CLASS_CDC_ECM_ZERO_COPY */
+
+
/* Bulk out endpoint buffer size, must be larger than endpoint and ethernet max packet size, and aligned in 4-bytes. */
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_CDC_ECM_ZERO_COPY)
+#define UX_DEVICE_CLASS_CDC_ECM_BULKOUT_BUFFER_SIZE 0
+#else
#define UX_DEVICE_CLASS_CDC_ECM_BULKOUT_BUFFER_SIZE UX_DEVICE_CLASS_CDC_ECM_MAX_PACKET_LENGTH
+#endif
/* Bulk in endpoint buffer size, must be larger than endpoint and ethernet max packet size, and aligned in 4-bytes. */
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_CDC_ECM_ZERO_COPY)
+#define UX_DEVICE_CLASS_CDC_ECM_BULKIN_BUFFER_SIZE 0
+#else
#define UX_DEVICE_CLASS_CDC_ECM_BULKIN_BUFFER_SIZE UX_DEVICE_CLASS_CDC_ECM_ETHERNET_PACKET_SIZE
+#endif
/* Interrupt in endpoint buffer size... */
#define UX_DEVICE_CLASS_CDC_ECM_INTERRUPTIN_BUFFER_SIZE UX_DEVICE_CLASS_CDC_ECM_INTERRUPT_RESPONSE_LENGTH
@@ -370,12 +386,16 @@ typedef struct UX_SLAVE_CLASS_CDC_ECM_STRUCT
} UX_SLAVE_CLASS_CDC_ECM;
/* Define CDC ECM endpoint buffer settings (when CDC ECM owns buffer). */
+#if defined(UX_DEVICE_CLASS_CDC_ECM_ZERO_COPY)
+#define UX_DEVICE_CLASS_CDC_ECM_ENDPOINT_BUFFER_SIZE_CALC_OVERFLOW 0 /* No calculation, no overflow */
+#else
#define UX_DEVICE_CLASS_CDC_ECM_ENDPOINT_BUFFER_SIZE_CALC_OVERFLOW \
(UX_OVERFLOW_CHECK_ADD_ULONG(UX_DEVICE_CLASS_CDC_ECM_BULKOUT_BUFFER_SIZE, \
UX_DEVICE_CLASS_CDC_ECM_BULKIN_BUFFER_SIZE) || \
UX_OVERFLOW_CHECK_ADD_ULONG(UX_DEVICE_CLASS_CDC_ECM_BULKOUT_BUFFER_SIZE + \
UX_DEVICE_CLASS_CDC_ECM_BULKIN_BUFFER_SIZE, \
UX_DEVICE_CLASS_CDC_ECM_INTERRUPTIN_BUFFER_SIZE))
+#endif
#define UX_DEVICE_CLASS_CDC_ECM_ENDPOINT_BUFFER_SIZE (UX_DEVICE_CLASS_CDC_ECM_BULKOUT_BUFFER_SIZE + UX_DEVICE_CLASS_CDC_ECM_BULKIN_BUFFER_SIZE + UX_DEVICE_CLASS_CDC_ECM_INTERRUPTIN_BUFFER_SIZE)
#define UX_DEVICE_CLASS_CDC_ECM_BULKOUT_BUFFER(ecm) ((ecm)->ux_device_class_cdc_ecm_endpoint_buffer)
#define UX_DEVICE_CLASS_CDC_ECM_BULKIN_BUFFER(ecm) (UX_DEVICE_CLASS_CDC_ECM_BULKOUT_BUFFER(ecm) + UX_DEVICE_CLASS_CDC_ECM_BULKOUT_BUFFER_SIZE)
diff --git a/common/usbx_device_classes/inc/ux_device_class_dfu.h b/common/usbx_device_classes/inc/ux_device_class_dfu.h
index ee4770d..33a4be4 100644
--- a/common/usbx_device_classes/inc/ux_device_class_dfu.h
+++ b/common/usbx_device_classes/inc/ux_device_class_dfu.h
@@ -24,7 +24,7 @@
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_device_class_dfu.h PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -60,9 +60,9 @@
/* 07-29-2022 Chaoqiong Xiao Modified comment(s), */
/* added macros for req types, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Yajun xia Modified comment(s), */
+/* 10-31-2023 Yajun xia Modified comment(s), */
/* added error checks support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
diff --git a/common/usbx_device_classes/inc/ux_device_class_hid.h b/common/usbx_device_classes/inc/ux_device_class_hid.h
index ffadc24..ab0aee1 100644
--- a/common/usbx_device_classes/inc/ux_device_class_hid.h
+++ b/common/usbx_device_classes/inc/ux_device_class_hid.h
@@ -26,7 +26,7 @@
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_device_class_hid.h PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -64,12 +64,12 @@
/* 07-29-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone int out, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
/* moved build option check, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
diff --git a/common/usbx_device_classes/inc/ux_device_class_pima.h b/common/usbx_device_classes/inc/ux_device_class_pima.h
index 31278b1..5e09981 100644
--- a/common/usbx_device_classes/inc/ux_device_class_pima.h
+++ b/common/usbx_device_classes/inc/ux_device_class_pima.h
@@ -26,7 +26,7 @@
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_device_class_pima.h PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -58,11 +58,12 @@
/* 04-25-2022 Chaoqiong Xiao Modified comment(s), */
/* fixed standalone compile, */
/* resulting in version 6.1.11 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* optimized PIMA data sets, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
/* added error checks support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
@@ -729,10 +730,11 @@ typedef struct UX_SLAVE_CLASS_PIMA_OBJECT_STRUCT
{
ULONG ux_device_class_pima_object_storage_id;
- ULONG ux_device_class_pima_object_format;
- ULONG ux_device_class_pima_object_protection_status;
+ USHORT ux_device_class_pima_object_format;
+ USHORT ux_device_class_pima_object_protection_status;
ULONG ux_device_class_pima_object_compressed_size;
- ULONG ux_device_class_pima_object_thumb_format;
+ USHORT ux_device_class_pima_object_thumb_format;
+ USHORT _align_thumb_compressed_size;
ULONG ux_device_class_pima_object_thumb_compressed_size;
ULONG ux_device_class_pima_object_thumb_pix_width;
ULONG ux_device_class_pima_object_thumb_pix_height;
@@ -740,7 +742,8 @@ typedef struct UX_SLAVE_CLASS_PIMA_OBJECT_STRUCT
ULONG ux_device_class_pima_object_image_pix_height;
ULONG ux_device_class_pima_object_image_bit_depth;
ULONG ux_device_class_pima_object_parent_object;
- ULONG ux_device_class_pima_object_association_type;
+ USHORT ux_device_class_pima_object_association_type;
+ USHORT _align_association_desc;
ULONG ux_device_class_pima_object_association_desc;
ULONG ux_device_class_pima_object_sequence_number;
UCHAR ux_device_class_pima_object_filename[UX_DEVICE_CLASS_PIMA_UNICODE_MAX_LENGTH];
@@ -798,9 +801,10 @@ typedef struct UX_SLAVE_CLASS_PIMA_DEVICE_STRUCT
typedef struct UX_SLAVE_CLASS_PIMA_STORAGE_STRUCT
{
- ULONG ux_device_class_pima_storage_type;
- ULONG ux_device_class_pima_storage_file_system_type;
- ULONG ux_device_class_pima_storage_access_capability;
+ USHORT ux_device_class_pima_storage_type;
+ USHORT ux_device_class_pima_storage_file_system_type;
+ USHORT ux_device_class_pima_storage_access_capability;
+ USHORT _align_max_capacity_low;
ULONG ux_device_class_pima_storage_max_capacity_low;
ULONG ux_device_class_pima_storage_max_capacity_high;
ULONG ux_device_class_pima_storage_free_space_bytes_low;
diff --git a/common/usbx_device_classes/inc/ux_device_class_printer.h b/common/usbx_device_classes/inc/ux_device_class_printer.h
index 9dcb458..c87cb38 100644
--- a/common/usbx_device_classes/inc/ux_device_class_printer.h
+++ b/common/usbx_device_classes/inc/ux_device_class_printer.h
@@ -24,7 +24,7 @@
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_device_class_printer.h PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -50,11 +50,11 @@
/* 03-08-2023 Yajun xia Modified comment(s), */
/* added error checks support, */
/* resulting in version 6.2.1 */
-/* xx-xx-xxxx Yajun Xia, CQ Xiao Modified comment(s), */
+/* 10-31-2023 Yajun Xia, CQ Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
/* fixed error checking issue, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
@@ -77,6 +77,16 @@ extern "C" {
#define UX_DEVICE_CLASS_PRINTER_ENABLE_ERROR_CHECKING
#endif
+
+/* Option: defined, it enables zero copy support (works if PRINTER owns endpoint buffer).
+ Defined, it enables zero copy for bulk in/out endpoints (write/read). In this case, the endpoint
+ buffer is not allocated in class, application must provide the buffer for read/write, and the
+ buffer must meet device controller driver (DCD) buffer requirements (e.g., aligned and cache
+ safe if buffer is for DMA).
+ */
+/* #define UX_DEVICE_CLASS_PRINTER_ZERO_COPY */
+
+
/* Defined, _write is pending ZLP automatically (complete transfer) after buffer is sent. */
/* #define UX_DEVICE_CLASS_PRINTER_WRITE_AUTO_ZLP */
@@ -93,6 +103,13 @@ extern "C" {
#endif
+/* Internal: check if class own endpoint buffer */
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && \
+ (!defined(UX_DEVICE_CLASS_PRINTER_ZERO_COPY))
+#define UX_DEVICE_CLASS_PRINTER_OWN_ENDPOINT_BUFFER
+#endif
+
+
/* Define Printer Class USB Class constants. */
#define UX_DEVICE_CLASS_PRINTER_CLASS 7
diff --git a/common/usbx_device_classes/inc/ux_device_class_rndis.h b/common/usbx_device_classes/inc/ux_device_class_rndis.h
index d1263b7..8440cf5 100644
--- a/common/usbx_device_classes/inc/ux_device_class_rndis.h
+++ b/common/usbx_device_classes/inc/ux_device_class_rndis.h
@@ -24,7 +24,7 @@
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_device_class_rndis.h PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -55,11 +55,12 @@
/* 10-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added wait and length DEFs, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
/* improved error checking, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
@@ -76,11 +77,27 @@ extern "C" {
#endif
+
+/* Option: defined, it enables zero copy support (works if HID owns endpoint buffer).
+ Enabled, it requires that the NX packet pool is in cache safe area, and buffer max size is
+ larger than UX_DEVICE_CLASS_RNDIS_MAX_PACKET_TRANSFER_SIZE (1600).
+ */
+/* #define UX_DEVICE_CLASS_RNDIS_ZERO_COPY */
+
+
/* Bulk out endpoint buffer size (UX_DEVICE_CLASS_RNDIS_MAX_PACKET_TRANSFER_SIZE). */
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_RNDIS_ZERO_COPY)
+#define UX_DEVICE_CLASS_RNDIS_BULKOUT_BUFFER_SIZE 0
+#else
#define UX_DEVICE_CLASS_RNDIS_BULKOUT_BUFFER_SIZE UX_DEVICE_CLASS_RNDIS_MAX_PACKET_TRANSFER_SIZE
+#endif
/* Bulk in endpoint buffer size (UX_DEVICE_CLASS_RNDIS_MAX_PACKET_TRANSFER_SIZE). */
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_RNDIS_ZERO_COPY)
+#define UX_DEVICE_CLASS_RNDIS_BULKIN_BUFFER_SIZE 0
+#else
#define UX_DEVICE_CLASS_RNDIS_BULKIN_BUFFER_SIZE UX_DEVICE_CLASS_RNDIS_MAX_PACKET_TRANSFER_SIZE
+#endif
/* Interrupt in endpoint buffer size (UX_DEVICE_CLASS_RNDIS_INTERRUPT_RESPONSE_LENGTH). */
#define UX_DEVICE_CLASS_RNDIS_INTERRUPTIN_BUFFER_SIZE UX_DEVICE_CLASS_RNDIS_INTERRUPT_RESPONSE_LENGTH
@@ -597,12 +614,16 @@ typedef struct UX_SLAVE_CLASS_RNDIS_STRUCT
} UX_SLAVE_CLASS_RNDIS;
/* Define RNDIS endpoint buffer settings (when RNDIS owns buffer). */
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_RNDIS_ZERO_COPY)
+#define UX_DEVICE_CLASS_RNDIS_ENDPOINT_BUFFER_SIZE_CALC_OVERFLOW 0 /* only one buffer, no calculation */
+#else
#define UX_DEVICE_CLASS_RNDIS_ENDPOINT_BUFFER_SIZE_CALC_OVERFLOW \
(UX_OVERFLOW_CHECK_ADD_ULONG(UX_DEVICE_CLASS_RNDIS_BULKOUT_BUFFER_SIZE, \
UX_DEVICE_CLASS_RNDIS_BULKIN_BUFFER_SIZE) || \
UX_OVERFLOW_CHECK_ADD_ULONG(UX_DEVICE_CLASS_RNDIS_BULKOUT_BUFFER_SIZE + \
UX_DEVICE_CLASS_RNDIS_BULKIN_BUFFER_SIZE, \
UX_DEVICE_CLASS_RNDIS_INTERRUPTIN_BUFFER_SIZE))
+#endif
#define UX_DEVICE_CLASS_RNDIS_ENDPOINT_BUFFER_SIZE (UX_DEVICE_CLASS_RNDIS_BULKOUT_BUFFER_SIZE + UX_DEVICE_CLASS_RNDIS_BULKIN_BUFFER_SIZE + UX_DEVICE_CLASS_RNDIS_INTERRUPTIN_BUFFER_SIZE)
#define UX_DEVICE_CLASS_RNDIS_BULKOUT_BUFFER(rndis) ((rndis)->ux_device_class_rndis_endpoint_buffer)
#define UX_DEVICE_CLASS_RNDIS_BULKIN_BUFFER(rndis) (UX_DEVICE_CLASS_RNDIS_BULKOUT_BUFFER(rndis) + UX_DEVICE_CLASS_RNDIS_BULKOUT_BUFFER_SIZE)
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 3ff31b5..57ece44 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.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -57,11 +57,11 @@
/* 01-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
/* added error checks support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
diff --git a/common/usbx_device_classes/inc/ux_device_class_video.h b/common/usbx_device_classes/inc/ux_device_class_video.h
index a7a4f72..89c16b1 100644
--- a/common/usbx_device_classes/inc/ux_device_class_video.h
+++ b/common/usbx_device_classes/inc/ux_device_class_video.h
@@ -26,7 +26,7 @@
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_device_class_video.h PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -44,11 +44,12 @@
/* 10-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Yajun xia, CQ Xiao Modified comment(s), */
+/* 10-31-2023 Yajun xia, CQ Xiao Modified comment(s), */
/* added a new mode to manage */
-/* endpoint buffer in classes, */
+/* endpoint buffer in classes */
+/* with zero copy enabled, */
/* added error checks support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
@@ -588,9 +589,6 @@ typedef struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT
struct UX_DEVICE_CLASS_VIDEO_STRUCT *ux_device_class_video_stream_video;
UX_SLAVE_INTERFACE *ux_device_class_video_stream_interface;
UX_SLAVE_ENDPOINT *ux_device_class_video_stream_endpoint;
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
- UCHAR *ux_device_class_video_stream_endpoint_buffer;
-#endif
ULONG ux_device_class_video_stream_error;
diff --git a/common/usbx_device_classes/src/ux_device_class_audio_activate.c b/common/usbx_device_classes/src/ux_device_class_audio_activate.c
index f6468fd..1afd5fb 100644
--- a/common/usbx_device_classes/src/ux_device_class_audio_activate.c
+++ b/common/usbx_device_classes/src/ux_device_class_audio_activate.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_audio_activate PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -73,10 +73,11 @@
/* 10-31-2022 Yajun Xia Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
-/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* endpoint buffer in classes */
+/* with zero copy enabled, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_audio_activate(UX_SLAVE_CLASS_COMMAND *command)
@@ -127,8 +128,10 @@ ULONG stream_index;
audio -> ux_device_class_audio_status_head = audio -> ux_device_class_audio_status_queue;
audio -> ux_device_class_audio_status_tail = audio -> ux_device_class_audio_status_queue;
#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
- audio -> ux_device_class_audio_interrupt -> ux_slave_endpoint_transfer_request.
- ux_slave_transfer_request_data_pointer = audio -> ux_device_class_audio_interrupt_buffer;
+ if (audio -> ux_device_class_audio_interrupt)
+ audio -> ux_device_class_audio_interrupt ->
+ ux_slave_endpoint_transfer_request.ux_slave_transfer_request_data_pointer =
+ audio -> ux_device_class_audio_interrupt_buffer;
#endif
#endif
}
diff --git a/common/usbx_device_classes/src/ux_device_class_audio_change.c b/common/usbx_device_classes/src/ux_device_class_audio_change.c
index 5ad1c8a..f2eba4e 100644
--- a/common/usbx_device_classes/src/ux_device_class_audio_change.c
+++ b/common/usbx_device_classes/src/ux_device_class_audio_change.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_audio_change PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -84,10 +84,11 @@
/* 10-31-2022 Yajun Xia Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
-/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* endpoint buffer in classes */
+/* with zero copy enabled, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_audio_change(UX_SLAVE_CLASS_COMMAND *command)
@@ -238,11 +239,11 @@ ULONG endpoint_dir;
}
#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
- stream -> ux_device_class_audio_stream_endpoint -> ux_slave_endpoint_transfer_request.
- ux_slave_transfer_request_data_pointer = stream -> ux_device_class_audio_stream_endpoint_buffer;
#if defined(UX_DEVICE_CLASS_AUDIO_FEEDBACK_SUPPORT)
- stream -> ux_device_class_audio_stream_feedback -> ux_slave_endpoint_transfer_request.
- ux_slave_transfer_request_data_pointer = stream -> ux_device_class_audio_stream_feedback_buffer;
+ if (stream -> ux_device_class_audio_stream_feedback)
+ stream -> ux_device_class_audio_stream_feedback ->
+ ux_slave_endpoint_transfer_request.ux_slave_transfer_request_data_pointer =
+ stream -> ux_device_class_audio_stream_feedback_buffer;
#endif
#endif
diff --git a/common/usbx_device_classes/src/ux_device_class_audio_initialize.c b/common/usbx_device_classes/src/ux_device_class_audio_initialize.c
index 1a26182..830ada9 100644
--- a/common/usbx_device_classes/src/ux_device_class_audio_initialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_audio_initialize.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_audio_initialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -87,10 +87,11 @@
/* 10-31-2022 Yajun Xia Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
-/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* endpoint buffer in classes */
+/* with zero copy enabled, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_audio_initialize(UX_SLAVE_CLASS_COMMAND *command)
@@ -259,16 +260,6 @@ ULONG i;
{
#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
-
- /* Allocate memory for stream endpoint buffer. */
- stream -> ux_device_class_audio_stream_endpoint_buffer = _ux_utility_memory_allocate(UX_NO_ALIGN, UX_CACHE_SAFE_MEMORY,
- stream_parameter -> ux_device_class_audio_stream_parameter_max_frame_buffer_size);
- if (stream -> ux_device_class_audio_stream_endpoint_buffer == UX_NULL)
- {
- status = UX_MEMORY_INSUFFICIENT;
- break;
- }
-
#if defined(UX_DEVICE_CLASS_AUDIO_FEEDBACK_SUPPORT)
/* Allocate memory for feedback endpoint buffer. */
@@ -303,7 +294,11 @@ ULONG i;
stream_parameter -> ux_device_class_audio_stream_parameter_max_frame_buffer_nb;
/* Create block of buffer buffer is cache safe for USB transfer. */
+#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+ stream -> ux_device_class_audio_stream_buffer = (UCHAR *)_ux_utility_memory_allocate(UX_NO_ALIGN, UX_CACHE_SAFE_MEMORY, memory_size);
+#else
stream -> ux_device_class_audio_stream_buffer = (UCHAR *)_ux_utility_memory_allocate(UX_NO_ALIGN, UX_REGULAR_MEMORY, memory_size);
+#endif
/* Check for successful allocation. */
if (stream -> ux_device_class_audio_stream_buffer == UX_NULL)
@@ -466,10 +461,6 @@ ULONG i;
_ux_utility_memory_free(stream -> ux_device_class_audio_stream_thread_stack);
}
#endif
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
- if (stream -> ux_device_class_audio_stream_endpoint_buffer)
- _ux_utility_memory_free(stream -> ux_device_class_audio_stream_endpoint_buffer);
-#endif
if (stream -> ux_device_class_audio_stream_buffer)
_ux_utility_memory_free(stream -> ux_device_class_audio_stream_buffer);
stream ++;
@@ -505,7 +496,7 @@ ULONG i;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_audio_initialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -535,9 +526,9 @@ ULONG i;
/* DATE NAME DESCRIPTION */
/* */
/* 03-08-2023 Chaoqiong Xiao Initial Version 6.2.1 */
-/* xx-xx-xxxx Yajun Xia Modified comment(s), */
+/* 10-31-2023 Yajun Xia Modified comment(s), */
/* fixed error checking issue, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_audio_initialize(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_audio_interrupt_task_function.c b/common/usbx_device_classes/src/ux_device_class_audio_interrupt_task_function.c
index eeac5c2..77127ef 100644
--- a/common/usbx_device_classes/src/ux_device_class_audio_interrupt_task_function.c
+++ b/common/usbx_device_classes/src/ux_device_class_audio_interrupt_task_function.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_audio_interrupt_task_function PORTABLE C */
-/* 6.2.0 */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -71,6 +71,9 @@
/* DATE NAME DESCRIPTION */
/* */
/* 10-31-2022 Yajun Xia Initial Version 6.2.0 */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* removed an error trap, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_audio_interrupt_task_function(UX_DEVICE_CLASS_AUDIO *audio)
@@ -100,13 +103,10 @@ UCHAR *buff;
/* Get endpoint instance. */
endpoint = audio -> ux_device_class_audio_interrupt;
- /* Endpoint not available, maybe it's alternate setting 0. */
+ /* Endpoint not available, maybe it's alternate setting 0,
+ or not exist in framework (accepted use case). */
if (endpoint == UX_NULL)
{
-
- /* Error trap. */
- _ux_system_error_handler(UX_SYSTEM_LEVEL_THREAD, UX_SYSTEM_CONTEXT_CLASS, UX_ENDPOINT_HANDLE_UNKNOWN);
-
audio -> ux_device_class_audio_interrupt_task_state = UX_STATE_RESET;
return(UX_STATE_IDLE);
}
diff --git a/common/usbx_device_classes/src/ux_device_class_audio_read_task_function.c b/common/usbx_device_classes/src/ux_device_class_audio_read_task_function.c
index 03d43d8..f4f1301 100644
--- a/common/usbx_device_classes/src/ux_device_class_audio_read_task_function.c
+++ b/common/usbx_device_classes/src/ux_device_class_audio_read_task_function.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_audio_read_task_function PORTABLE C */
-/* 6.2.0 */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -71,6 +71,11 @@
/* DATE NAME DESCRIPTION */
/* */
/* 10-31-2022 Yajun Xia Initial Version 6.2.0 */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* added a new mode to manage */
+/* endpoint buffer in classes */
+/* with zero copy enabled, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_audio_read_task_function(UX_DEVICE_CLASS_AUDIO_STREAM *stream)
@@ -116,6 +121,13 @@ UINT status;
/* Next state: transfer wait. */
stream -> ux_device_class_audio_stream_task_state = UX_DEVICE_CLASS_AUDIO_STREAM_RW_WAIT;
+#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+
+ /* Zero copy: directly use stream buffer for transfer. */
+ transfer -> ux_slave_transfer_request_data_pointer =
+ stream -> ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_data;
+#endif
+
/* Reset transfer state. */
UX_SLAVE_TRANSFER_STATE_RESET(transfer);
}
@@ -153,9 +165,14 @@ UINT status;
/* Frame received, log it. */
stream -> ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_length = actual_length;
stream -> ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_pos = 0;
+
+#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 0
+
+ /* Copy data from endpoint buffer. */
_ux_utility_memory_copy(stream -> ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_data,
transfer -> ux_slave_transfer_request_data_pointer,
actual_length); /* Use case of memcpy is verified. */
+#endif
/* For simple, do not advance the transfer position if there is overflow. */
next_pos = (UCHAR *)stream -> ux_device_class_audio_stream_transfer_pos;
diff --git a/common/usbx_device_classes/src/ux_device_class_audio_read_thread_entry.c b/common/usbx_device_classes/src/ux_device_class_audio_read_thread_entry.c
index 8af97f0..17ee997 100644
--- a/common/usbx_device_classes/src/ux_device_class_audio_read_thread_entry.c
+++ b/common/usbx_device_classes/src/ux_device_class_audio_read_thread_entry.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_audio_read_thread_entry PORTABLE C */
-/* 6.2.0 */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -84,6 +84,11 @@
/* 10-31-2022 Yajun Xia Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.0 */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* added a new mode to manage */
+/* endpoint buffer in classes */
+/* with zero copy enabled, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
VOID _ux_device_class_audio_read_thread_entry(ULONG audio_stream)
@@ -127,6 +132,13 @@ ULONG actual_length;
/* Get transfer instance. */
transfer = &endpoint -> ux_slave_endpoint_transfer_request;
+#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+
+ /* Zero copy: directly use frame buffer. */
+ transfer -> ux_slave_transfer_request_data_pointer = stream ->
+ ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_data;
+#endif
+
/* Start frame transfer anyway. */
status = _ux_device_stack_transfer_request(transfer, max_packet_size, max_packet_size);
@@ -146,9 +158,14 @@ ULONG actual_length;
/* Frame received, log it. */
stream -> ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_length = actual_length;
stream -> ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_pos = 0;
+
+#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 0
+
+ /* Copy data from endpoint buffer. */
_ux_utility_memory_copy(stream -> ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_data,
transfer -> ux_slave_transfer_request_data_pointer,
actual_length); /* Use case of memcpy is verified. */
+#endif
/* For simple, do not advance the transfer position if there is overflow. */
next_pos = (UCHAR *)stream -> ux_device_class_audio_stream_transfer_pos;
diff --git a/common/usbx_device_classes/src/ux_device_class_audio_unitialize.c b/common/usbx_device_classes/src/ux_device_class_audio_unitialize.c
index 0c59d53..6bc821d 100644
--- a/common/usbx_device_classes/src/ux_device_class_audio_unitialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_audio_unitialize.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_audio_uninitialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -75,10 +75,11 @@
/* 04-25-2022 Chaoqiong Xiao Modified comment(s), */
/* fixed standalone compile, */
/* resulting in version 6.1.11 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
-/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* endpoint buffer in classes */
+/* with zero copy enabled, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_audio_uninitialize(UX_SLAVE_CLASS_COMMAND *command)
@@ -118,7 +119,6 @@ ULONG i;
_ux_utility_memory_free(stream -> ux_device_class_audio_stream_buffer);
#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
- _ux_utility_memory_free(stream -> ux_device_class_audio_stream_endpoint_buffer);
#if defined(UX_DEVICE_CLASS_AUDIO_FEEDBACK_SUPPORT)
_ux_utility_memory_free(stream -> ux_device_class_audio_stream_feedback_buffer);
#endif
diff --git a/common/usbx_device_classes/src/ux_device_class_audio_write_task_function.c b/common/usbx_device_classes/src/ux_device_class_audio_write_task_function.c
index 2c30a3c..269e97e 100644
--- a/common/usbx_device_classes/src/ux_device_class_audio_write_task_function.c
+++ b/common/usbx_device_classes/src/ux_device_class_audio_write_task_function.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_audio_write_task_function PORTABLE C */
-/* 6.2.0 */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -72,6 +72,11 @@
/* DATE NAME DESCRIPTION */
/* */
/* 10-31-2022 Yajun Xia Initial Version 6.2.0 */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* added a new mode to manage */
+/* endpoint buffer in classes */
+/* with zero copy enabled, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_audio_write_task_function(UX_DEVICE_CLASS_AUDIO_STREAM *stream)
@@ -119,9 +124,19 @@ UINT status;
/* Start frame transfer anyway (even ZLP). */
transfer_length = stream -> ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_length;
+
+#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 0
+
+ /* Stack owns buffer, copy data to it. */
if (transfer_length)
_ux_utility_memory_copy(transfer -> ux_slave_transfer_request_data_pointer,
stream -> ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_data, transfer_length); /* Use case of memcpy is verified. */
+#else
+
+ /* Zero copy: directly use frame buffer to transfer. */
+ transfer -> ux_slave_transfer_request_data_pointer = stream ->
+ ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_data;
+#endif
/* Reset transfer state. */
UX_SLAVE_TRANSFER_STATE_RESET(transfer);
diff --git a/common/usbx_device_classes/src/ux_device_class_audio_write_thread_entry.c b/common/usbx_device_classes/src/ux_device_class_audio_write_thread_entry.c
index ce6bd7b..3178b0e 100644
--- a/common/usbx_device_classes/src/ux_device_class_audio_write_thread_entry.c
+++ b/common/usbx_device_classes/src/ux_device_class_audio_write_thread_entry.c
@@ -78,6 +78,11 @@
/* 10-31-2022 Yajun Xia Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.0 */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* added a new mode to manage */
+/* endpoint buffer in classes */
+/* with zero copy enabled, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
VOID _ux_device_class_audio_write_thread_entry(ULONG audio_stream)
@@ -118,9 +123,19 @@ ULONG actual_length;
/* Start frame transfer anyway (even ZLP). */
transfer_length = stream -> ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_length;
+
+#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 0
+
+ /* Stack owns endpoint buffer, copy to buffer. */
if (transfer_length)
_ux_utility_memory_copy(transfer -> ux_slave_transfer_request_data_pointer,
stream -> ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_data, transfer_length); /* Use case of memcpy is verified. */
+#else
+
+ /* Zero copy: directly use frame buffer to transfer. */
+ transfer -> ux_slave_transfer_request_data_pointer = stream ->
+ ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_data;
+#endif
/* Issue transfer request, thread blocked until transfer done. */
status = _ux_device_stack_transfer_request(transfer, transfer_length, transfer_length);
diff --git a/common/usbx_device_classes/src/ux_device_class_ccid_activate.c b/common/usbx_device_classes/src/ux_device_class_ccid_activate.c
index a1bc865..f254dc7 100644
--- a/common/usbx_device_classes/src/ux_device_class_ccid_activate.c
+++ b/common/usbx_device_classes/src/ux_device_class_ccid_activate.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_ccid_activate PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -70,10 +70,10 @@
/* 03-08-2023 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.1 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_ccid_activate(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_ccid_auto_seq_done.c b/common/usbx_device_classes/src/ux_device_class_ccid_auto_seq_done.c
index ce7996c..143b2d1 100644
--- a/common/usbx_device_classes/src/ux_device_class_ccid_auto_seq_done.c
+++ b/common/usbx_device_classes/src/ux_device_class_ccid_auto_seq_done.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_ccid_auto_seq_done PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -70,8 +70,8 @@
/* 03-08-2023 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.1 */
-/* xx-xx-xxxx Yajun Xia Modified comment(s), */
-/* resulting in version 6.x */
+/* 10-31-2023 Yajun Xia Modified comment(s), */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_ccid_auto_seq_done(UX_DEVICE_CLASS_CCID *ccid, ULONG slot, ULONG icc_status)
@@ -109,7 +109,7 @@ UX_DEVICE_CLASS_CCID_SLOT *ccid_slot;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_ccid_auto_seq_done PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -142,7 +142,7 @@ UX_DEVICE_CLASS_CCID_SLOT *ccid_slot;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_ccid_auto_seq_done(UX_DEVICE_CLASS_CCID *ccid, ULONG slot, ULONG icc_status)
diff --git a/common/usbx_device_classes/src/ux_device_class_ccid_hardware_error.c b/common/usbx_device_classes/src/ux_device_class_ccid_hardware_error.c
index 3600c2b..f618132 100644
--- a/common/usbx_device_classes/src/ux_device_class_ccid_hardware_error.c
+++ b/common/usbx_device_classes/src/ux_device_class_ccid_hardware_error.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_ccid_hardware_error PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -67,8 +67,8 @@
/* 03-08-2023 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.1 */
-/* xx-xx-xxxx Yajun Xia Modified comment(s), */
-/* resulting in version 6.x */
+/* 10-31-2023 Yajun Xia Modified comment(s), */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_ccid_hardware_error(UX_DEVICE_CLASS_CCID *ccid, ULONG slot, ULONG error)
@@ -147,7 +147,7 @@ UX_DEVICE_CLASS_CCID_RDR_TO_PC_SLOT_STATUS_HEADER *rsp;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_ccid_hardware_error PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -178,7 +178,7 @@ UX_DEVICE_CLASS_CCID_RDR_TO_PC_SLOT_STATUS_HEADER *rsp;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_ccid_hardware_error(UX_DEVICE_CLASS_CCID *ccid, ULONG slot, ULONG error)
diff --git a/common/usbx_device_classes/src/ux_device_class_ccid_icc_insert.c b/common/usbx_device_classes/src/ux_device_class_ccid_icc_insert.c
index 632222b..e926f7a 100644
--- a/common/usbx_device_classes/src/ux_device_class_ccid_icc_insert.c
+++ b/common/usbx_device_classes/src/ux_device_class_ccid_icc_insert.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_ccid_icc_insert PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -70,8 +70,8 @@
/* 03-08-2023 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.1 */
-/* xx-xx-xxxx Yajun Xia Modified comment(s), */
-/* resulting in version 6.x */
+/* 10-31-2023 Yajun Xia Modified comment(s), */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_ccid_icc_insert(UX_DEVICE_CLASS_CCID *ccid, ULONG slot, ULONG seq_start)
@@ -134,7 +134,7 @@ UX_DEVICE_CLASS_CCID_SLOT *ccid_slot;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_ccid_icc_insert PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -165,7 +165,7 @@ UX_DEVICE_CLASS_CCID_SLOT *ccid_slot;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_ccid_icc_insert(UX_DEVICE_CLASS_CCID *ccid, ULONG slot, ULONG seq_start)
diff --git a/common/usbx_device_classes/src/ux_device_class_ccid_icc_remove.c b/common/usbx_device_classes/src/ux_device_class_ccid_icc_remove.c
index 6b0541b..5cd13c5 100644
--- a/common/usbx_device_classes/src/ux_device_class_ccid_icc_remove.c
+++ b/common/usbx_device_classes/src/ux_device_class_ccid_icc_remove.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_ccid_icc_remove PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -66,8 +66,8 @@
/* 03-08-2023 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.1 */
-/* xx-xx-xxxx Yajun Xia Modified comment(s), */
-/* resulting in version 6.x */
+/* 10-31-2023 Yajun Xia Modified comment(s), */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_ccid_icc_remove(UX_DEVICE_CLASS_CCID *ccid, ULONG slot)
@@ -127,7 +127,7 @@ UX_DEVICE_CLASS_CCID_SLOT *ccid_slot;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_ccid_icc_remove PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -157,7 +157,7 @@ UX_DEVICE_CLASS_CCID_SLOT *ccid_slot;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_ccid_icc_remove(UX_DEVICE_CLASS_CCID *ccid, ULONG slot)
diff --git a/common/usbx_device_classes/src/ux_device_class_ccid_initialize.c b/common/usbx_device_classes/src/ux_device_class_ccid_initialize.c
index dd732bd..037a639 100644
--- a/common/usbx_device_classes/src/ux_device_class_ccid_initialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_ccid_initialize.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_ccid_initialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -75,10 +75,10 @@
/* 03-08-2023 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.1 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_ccid_initialize(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_ccid_time_extension.c b/common/usbx_device_classes/src/ux_device_class_ccid_time_extension.c
index 38ff23f..d097677 100644
--- a/common/usbx_device_classes/src/ux_device_class_ccid_time_extension.c
+++ b/common/usbx_device_classes/src/ux_device_class_ccid_time_extension.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_ccid_time_extension PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -64,8 +64,8 @@
/* DATE NAME DESCRIPTION */
/* */
/* 04-25-2022 Chaoqiong Xiao Initial Version 6.1.11 */
-/* xx-xx-xxxx Yajun Xia Modified comment(s), */
-/* resulting in version 6.x */
+/* 10-31-2023 Yajun Xia Modified comment(s), */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_ccid_time_extension(UX_DEVICE_CLASS_CCID *ccid, ULONG slot, ULONG wt)
@@ -134,7 +134,7 @@ UINT status;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_ccid_icc_insert PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -167,7 +167,7 @@ UINT status;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_ccid_time_extension(UX_DEVICE_CLASS_CCID *ccid, ULONG slot, ULONG wt)
diff --git a/common/usbx_device_classes/src/ux_device_class_ccid_uninitialize.c b/common/usbx_device_classes/src/ux_device_class_ccid_uninitialize.c
index 2b970a2..d49b456 100644
--- a/common/usbx_device_classes/src/ux_device_class_ccid_uninitialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_ccid_uninitialize.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_ccid_uninitialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -66,10 +66,10 @@
/* DATE NAME DESCRIPTION */
/* */
/* 04-25-2022 Chaoqiong Xiao Initial Version 6.1.11 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_ccid_uninitialize(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_bulkin_thread.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_bulkin_thread.c
index 22c9b08..f665b75 100644
--- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_bulkin_thread.c
+++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_bulkin_thread.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_cdc_acm_bulkin_thread PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -92,11 +92,11 @@
/* names conflict C++ keyword, */
/* added auto ZLP support, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
VOID _ux_device_class_cdc_acm_bulkin_thread(ULONG cdc_acm_class)
diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_bulkout_thread.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_bulkout_thread.c
index 707d7fc..7b71f77 100644
--- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_bulkout_thread.c
+++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_bulkout_thread.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_cdc_acm_bulkout_thread PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -83,11 +83,11 @@
/* fixed parameter/variable */
/* names conflict C++ keyword, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
VOID _ux_device_class_cdc_acm_bulkout_thread(ULONG cdc_acm_class)
diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_initialize.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_initialize.c
index 1ac48fd..c4e17c8 100644
--- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_initialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_initialize.c
@@ -37,7 +37,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_cdc_acm_initialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -87,11 +87,11 @@
/* fixed parameter/variable */
/* names conflict C++ keyword, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_cdc_acm_initialize(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_ioctl.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_ioctl.c
index fb0371a..32d62ee 100644
--- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_ioctl.c
+++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_ioctl.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_cdc_acm_ioctl PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -96,8 +96,8 @@
/* fixed parameter/variable */
/* names conflict C++ keyword, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Yajun Xia Modified comment(s), */
-/* resulting in version 6.x */
+/* 10-31-2023 Yajun Xia Modified comment(s), */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_cdc_acm_ioctl(UX_SLAVE_CLASS_CDC_ACM *cdc_acm, ULONG ioctl_function,
@@ -365,7 +365,7 @@ UX_SLAVE_TRANSFER *transfer_request;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_cdc_acm_ioctl PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -397,7 +397,7 @@ UX_SLAVE_TRANSFER *transfer_request;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_cdc_acm_ioctl(UX_SLAVE_CLASS_CDC_ACM *cdc_acm, ULONG ioctl_function,
diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_read.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_read.c
index ef77298..702636c 100644
--- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_read.c
+++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_read.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_cdc_acm_read PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -90,11 +90,11 @@
/* fixed parameter/variable */
/* names conflict C++ keyword, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Yajun Xia, CQ Xiao Modified comment(s), */
+/* 10-31-2023 Yajun Xia, CQ Xiao Modified comment(s), */
/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_cdc_acm_read(UX_SLAVE_CLASS_CDC_ACM *cdc_acm, UCHAR *buffer,
@@ -273,7 +273,7 @@ ULONG local_requested_length;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_cdc_acm_read PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -308,7 +308,7 @@ ULONG local_requested_length;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_cdc_acm_read(UX_SLAVE_CLASS_CDC_ACM *cdc_acm, UCHAR *buffer,
diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_read_run.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_read_run.c
index 0fac5bd..10e58b7 100644
--- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_read_run.c
+++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_read_run.c
@@ -37,7 +37,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_cdc_acm_read_run PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -83,12 +83,12 @@
/* 10-31-2022 Yajun Xia Modified comment(s), */
/* fixed return code, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Yajun Xia, CQ Xiao Modified comment(s), */
+/* 10-31-2023 Yajun Xia, CQ Xiao Modified comment(s), */
/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
/* fixed return code, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_cdc_acm_read_run(UX_SLAVE_CLASS_CDC_ACM *cdc_acm,
@@ -322,7 +322,7 @@ UINT status = UX_SUCCESS;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_cdc_acm_read_run PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -363,7 +363,7 @@ UINT status = UX_SUCCESS;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_cdc_acm_read_run(UX_SLAVE_CLASS_CDC_ACM *cdc_acm,
diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_tasks_run.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_tasks_run.c
index ab86102..9b0673e 100644
--- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_tasks_run.c
+++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_tasks_run.c
@@ -43,7 +43,7 @@ static inline VOID _ux_device_class_cdc_acm_transmission_write_run(UX_SLAVE_CLAS
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_cdc_acm_tasks_run PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -86,11 +86,11 @@ static inline VOID _ux_device_class_cdc_acm_transmission_write_run(UX_SLAVE_CLAS
/* 10-31-2022 Chaoqiong Xiao Modified comment(s), */
/* fixed compile warnings, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_cdc_acm_tasks_run(VOID *instance)
diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_unitialize.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_unitialize.c
index 36954f0..344fd8b 100644
--- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_unitialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_unitialize.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_cdc_acm_uninitialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -82,11 +82,11 @@
/* fixed parameter/variable */
/* names conflict C++ keyword, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_cdc_acm_uninitialize(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_write.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_write.c
index aee5590..8fd4ef3 100644
--- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_write.c
+++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_write.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_cdc_acm_write PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -92,11 +92,11 @@
/* names conflict C++ keyword, */
/* added auto ZLP support, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Yajun Xia, CQ Xiao Modified comment(s), */
+/* 10-31-2023 Yajun Xia, CQ Xiao Modified comment(s), */
/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_cdc_acm_write(UX_SLAVE_CLASS_CDC_ACM *cdc_acm, UCHAR *buffer,
@@ -305,7 +305,7 @@ UINT status = 0;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_cdc_acm_write PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -340,7 +340,7 @@ UINT status = 0;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_cdc_acm_write(UX_SLAVE_CLASS_CDC_ACM *cdc_acm, UCHAR *buffer,
diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_write_run.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_write_run.c
index 33db3f0..bb7ad16 100644
--- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_write_run.c
+++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_write_run.c
@@ -37,7 +37,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_cdc_acm_write_run PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -87,12 +87,12 @@
/* 10-31-2022 Yajun Xia Modified comment(s), */
/* fixed return code, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Yajun Xia, CQ Xiao Modified comment(s), */
+/* 10-31-2023 Yajun Xia, CQ Xiao Modified comment(s), */
/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
/* fixed return code, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_cdc_acm_write_run(UX_SLAVE_CLASS_CDC_ACM *cdc_acm,
@@ -341,7 +341,7 @@ UINT zlp = UX_FALSE;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_cdc_acm_write_run PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -381,7 +381,7 @@ UINT zlp = UX_FALSE;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_cdc_acm_write_run(UX_SLAVE_CLASS_CDC_ACM *cdc_acm,
diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_write_with_callback.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_write_with_callback.c
index a8fb947..fba51e4 100644
--- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_write_with_callback.c
+++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_write_with_callback.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_cdc_acm_write_with_callback PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -81,8 +81,8 @@
/* resulting in version 6.1.10 */
/* 04-25-2022 Chaoqiong Xiao Modified comment(s), */
/* resulting in version 6.1.11 */
-/* xx-xx-xxxx Yajun Xia Modified comment(s), */
-/* resulting in version 6.x */
+/* 10-31-2023 Yajun Xia Modified comment(s), */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_cdc_acm_write_with_callback(UX_SLAVE_CLASS_CDC_ACM *cdc_acm, UCHAR *buffer,
@@ -172,7 +172,7 @@ UINT status;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_cdc_acm_write_with_callback PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -205,7 +205,7 @@ UINT status;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_cdc_acm_write_with_callback(UX_SLAVE_CLASS_CDC_ACM *cdc_acm, UCHAR *buffer,
diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_activate.c b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_activate.c
index 021e66e..e072455 100644
--- a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_activate.c
+++ b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_activate.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_cdc_ecm_activate PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -82,10 +82,11 @@
/* fixed parameter/variable */
/* names conflict C++ keyword, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_cdc_ecm_activate(UX_SLAVE_CLASS_COMMAND *command)
@@ -200,7 +201,7 @@ ULONG physical_address_lsw;
/* We have found the bulk in endpoint, save it. */
cdc_ecm -> ux_slave_class_cdc_ecm_bulkin_endpoint = endpoint;
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && !defined(UX_DEVICE_CLASS_CDC_ECM_ZERO_COPY)
endpoint -> ux_slave_endpoint_transfer_request.ux_slave_transfer_request_data_pointer =
UX_DEVICE_CLASS_CDC_ECM_BULKIN_BUFFER(cdc_ecm);
#endif
@@ -215,7 +216,7 @@ ULONG physical_address_lsw;
/* We have found the bulk out endpoint, save it. */
cdc_ecm -> ux_slave_class_cdc_ecm_bulkout_endpoint = endpoint;
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && !defined(UX_DEVICE_CLASS_CDC_ECM_ZERO_COPY)
endpoint -> ux_slave_endpoint_transfer_request.ux_slave_transfer_request_data_pointer =
UX_DEVICE_CLASS_CDC_ECM_BULKOUT_BUFFER(cdc_ecm);
#endif
@@ -240,11 +241,17 @@ ULONG physical_address_lsw;
/* Wake up the Interrupt thread and send a network notification to the host. */
_ux_device_event_flags_set(&cdc_ecm -> ux_slave_class_cdc_ecm_event_flags_group, UX_DEVICE_CLASS_CDC_ECM_NETWORK_NOTIFICATION_EVENT, UX_OR);
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_CDC_ECM_ZERO_COPY)
+
+ /* There is no endpoint buffer. */
+#else
+
/* Reset the endpoint buffers. */
_ux_utility_memory_set(cdc_ecm -> ux_slave_class_cdc_ecm_bulkout_endpoint -> ux_slave_endpoint_transfer_request.
ux_slave_transfer_request_data_pointer, 0, UX_DEVICE_CLASS_CDC_ECM_BULKOUT_BUFFER_SIZE); /* Use case of memset is verified. */
_ux_utility_memory_set(cdc_ecm -> ux_slave_class_cdc_ecm_bulkin_endpoint -> ux_slave_endpoint_transfer_request.
ux_slave_transfer_request_data_pointer, 0, UX_DEVICE_CLASS_CDC_ECM_BULKIN_BUFFER_SIZE); /* Use case of memset is verified. */
+#endif
/* Resume the endpoint threads. */
_ux_device_thread_resume(&cdc_ecm -> ux_slave_class_cdc_ecm_bulkout_thread);
diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_bulkin_thread.c b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_bulkin_thread.c
index ca3bf1e..d1aef51 100644
--- a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_bulkin_thread.c
+++ b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_bulkin_thread.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_cdc_ecm_bulkin_thread PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -86,10 +86,11 @@
/* 10-31-2022 Chaoqiong Xiao Modified comment(s), */
/* used NX API to copy data, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
VOID _ux_device_class_cdc_ecm_bulkin_thread(ULONG cdc_ecm_class)
@@ -104,6 +105,9 @@ ULONG actual_flags;
NX_PACKET *current_packet;
ULONG transfer_length;
ULONG copied;
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_CDC_ECM_ZERO_COPY) && !defined(NX_DISABLE_PACKET_CHAIN)
+NX_PACKET *packet;
+#endif
/* Cast properly the cdc_ecm instance. */
UX_THREAD_EXTENSION_PTR_GET(class_ptr, UX_SLAVE_CLASS, cdc_ecm_class)
@@ -154,7 +158,84 @@ ULONG copied;
/* If the link is down no need to rearm a packet. */
if (cdc_ecm -> ux_slave_class_cdc_ecm_link_state == UX_DEVICE_CLASS_CDC_ECM_LINK_STATE_UP)
{
-
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_CDC_ECM_ZERO_COPY)
+
+ /* Default to success. */
+ status = UX_SUCCESS;
+
+#ifndef NX_DISABLE_PACKET_CHAIN
+
+ /* Check if packet is chained, allocate a new packet to fill the total data. */
+ if (current_packet -> nx_packet_next)
+ {
+
+ /* Check if collection of chained data can fit in one packet. */
+ if (current_packet -> nx_packet_length >
+ current_packet -> nx_packet_pool_owner -> nx_packet_pool_payload_size)
+ status = UX_TRANSFER_BUFFER_OVERFLOW;
+ else
+ {
+
+ /* Allocate a new packet for chain data collection. */
+ status = nx_packet_allocate(cdc_ecm -> ux_slave_class_cdc_ecm_packet_pool, &packet,
+ NX_RECEIVE_PACKET, UX_MS_TO_TICK(UX_DEVICE_CLASS_CDC_ECM_PACKET_POOL_WAIT));
+ if (status == UX_SUCCESS)
+ {
+
+ /* Copy the packet to the buffer. */
+ status = nx_packet_data_extract_offset(current_packet, 0,
+ packet -> nx_packet_prepend_ptr,
+ current_packet -> nx_packet_length, &copied);
+ if (status == NX_SUCCESS)
+ {
+ packet -> nx_packet_length = current_packet -> nx_packet_length;
+
+ /* Release the chained packet. */
+ nx_packet_transmit_release(current_packet);
+
+ /* Use copied packet instead. */
+ current_packet = packet;
+ }
+ }
+ }
+
+
+ /* Can not copy/buffer issue. */
+ if (status != UX_SUCCESS)
+ status = UX_TRANSFER_BUFFER_OVERFLOW;
+
+ }
+#endif
+ if (status == UX_SUCCESS)
+ {
+
+ /* Set the transfer request data pointer to the packet buffer. */
+ transfer_request -> ux_slave_transfer_request_data_pointer = current_packet -> nx_packet_prepend_ptr;
+
+ /* Calculate the transfer length. */
+ transfer_length = current_packet -> nx_packet_length;
+
+ /* If trace is enabled, insert this event into the trace buffer. */
+ UX_TRACE_IN_LINE_INSERT(UX_TRACE_DEVICE_CLASS_CDC_ECM_PACKET_TRANSMIT, cdc_ecm, 0, 0, 0, UX_TRACE_DEVICE_CLASS_EVENTS, 0, 0)
+
+ /* Send the request to the device controller. */
+ status = _ux_device_stack_transfer_request(transfer_request, transfer_length, transfer_length + 1);
+ }
+
+ /* Check error code. */
+ if (status != UX_SUCCESS)
+ {
+
+ /* Is this not a transfer abort? (this is expected to happen) */
+ if (status != UX_TRANSFER_BUS_RESET)
+ {
+
+ /* Error trap. */
+ _ux_system_error_handler(UX_SYSTEM_LEVEL_THREAD, UX_SYSTEM_CONTEXT_CLASS, status);
+ }
+ }
+#else
+
/* Can the packet fit in the transfer requests data buffer? */
if (current_packet -> nx_packet_length <= UX_DEVICE_CLASS_CDC_ECM_BULKIN_BUFFER_SIZE)
{
@@ -197,6 +278,7 @@ ULONG copied;
/* Report error to application. */
_ux_system_error_handler(UX_SYSTEM_LEVEL_THREAD, UX_SYSTEM_CONTEXT_CLASS, UX_TRANSFER_BUFFER_OVERFLOW);
}
+#endif
}
/* Free the packet that was just sent. First do some housekeeping. */
diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_bulkout_thread.c b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_bulkout_thread.c
index 0b266f7..f5a6528 100644
--- a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_bulkout_thread.c
+++ b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_bulkout_thread.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_cdc_ecm_bulkout_thread PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -88,10 +88,11 @@
/* used pool from NX IP inst, */
/* used NX API to copy data, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
VOID _ux_device_class_cdc_ecm_bulkout_thread(ULONG cdc_ecm_class)
@@ -171,10 +172,20 @@ USB_NETWORK_DEVICE_TYPE *ux_nx_device;
/* Reset the queue pointer of this packet. */
packet -> nx_packet_queue_next = UX_NULL;
-
+
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_CDC_ECM_ZERO_COPY)
+
+ /* Send the request to the device controller. */
+ transfer_request -> ux_slave_transfer_request_data_pointer = packet -> nx_packet_prepend_ptr + sizeof(USHORT);
+ status = _ux_device_stack_transfer_request(transfer_request,
+ packet -> nx_packet_pool_owner -> nx_packet_pool_payload_size - sizeof(USHORT),
+ packet -> nx_packet_pool_owner -> nx_packet_pool_payload_size - sizeof(USHORT));
+#else
+
/* Send the request to the device controller. */
status = _ux_device_stack_transfer_request(transfer_request, UX_DEVICE_CLASS_CDC_ECM_BULKOUT_BUFFER_SIZE,
UX_DEVICE_CLASS_CDC_ECM_BULKOUT_BUFFER_SIZE);
+#endif
/* Check the completion code. */
if (status == UX_SUCCESS)
@@ -188,6 +199,15 @@ USB_NETWORK_DEVICE_TYPE *ux_nx_device;
packet -> nx_packet_prepend_ptr += sizeof(USHORT);
packet -> nx_packet_append_ptr += sizeof(USHORT);
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_CDC_ECM_ZERO_COPY)
+
+ /* Data already in packet. */
+ packet -> nx_packet_length = transfer_request -> ux_slave_transfer_request_actual_length;
+
+ /* Send that packet to the NetX USB broker. */
+ _ux_network_driver_packet_received(cdc_ecm -> ux_slave_class_cdc_ecm_network_handle, packet);
+#else
+
/* Copy the received packet in the IP packet data area. */
status = nx_packet_data_append(packet,
transfer_request -> ux_slave_transfer_request_data_pointer,
@@ -207,6 +227,7 @@ USB_NETWORK_DEVICE_TYPE *ux_nx_device;
_ux_system_error_handler(UX_SYSTEM_LEVEL_THREAD, UX_SYSTEM_CONTEXT_CLASS, UX_CLASS_MALFORMED_PACKET_RECEIVED_ERROR);
nx_packet_release(packet);
}
+#endif
}
else
diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_change.c b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_change.c
index 6b472a0..37b76dc 100644
--- a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_change.c
+++ b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_change.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_cdc_ecm_change PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -85,10 +85,11 @@
/* fixed parameter/variable */
/* names conflict C++ keyword, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_cdc_ecm_change(UX_SLAVE_CLASS_COMMAND *command)
@@ -130,7 +131,7 @@ UX_SLAVE_ENDPOINT *endpoint;
/* We have found the bulk in endpoint, save it. */
cdc_ecm -> ux_slave_class_cdc_ecm_bulkin_endpoint = endpoint;
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && !defined(UX_DEVICE_CLASS_CDC_ECM_ZERO_COPY)
endpoint -> ux_slave_endpoint_transfer_request.
ux_slave_transfer_request_data_pointer =
UX_DEVICE_CLASS_CDC_ECM_BULKIN_BUFFER(cdc_ecm);
@@ -143,7 +144,7 @@ UX_SLAVE_ENDPOINT *endpoint;
/* We have found the bulk out endpoint, save it. */
cdc_ecm -> ux_slave_class_cdc_ecm_bulkout_endpoint = endpoint;
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && !defined(UX_DEVICE_CLASS_CDC_ECM_ZERO_COPY)
endpoint -> ux_slave_endpoint_transfer_request.
ux_slave_transfer_request_data_pointer =
UX_DEVICE_CLASS_CDC_ECM_BULKOUT_BUFFER(cdc_ecm);
@@ -166,11 +167,17 @@ UX_SLAVE_ENDPOINT *endpoint;
/* Communicate the state with the network driver. */
_ux_network_driver_link_up(cdc_ecm -> ux_slave_class_cdc_ecm_network_handle);
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_CDC_ECM_ZERO_COPY)
+
+ /* There is no endpoint buffer. */
+#else
+
/* Reset the endpoint buffers. */
_ux_utility_memory_set(cdc_ecm -> ux_slave_class_cdc_ecm_bulkout_endpoint -> ux_slave_endpoint_transfer_request.
ux_slave_transfer_request_data_pointer, 0, UX_DEVICE_CLASS_CDC_ECM_BULKOUT_BUFFER_SIZE); /* Use case of memset is verified. */
_ux_utility_memory_set(cdc_ecm -> ux_slave_class_cdc_ecm_bulkin_endpoint -> ux_slave_endpoint_transfer_request.
ux_slave_transfer_request_data_pointer, 0, UX_DEVICE_CLASS_CDC_ECM_BULKIN_BUFFER_SIZE); /* Use case of memset is verified. */
+#endif
/* Resume the endpoint threads. */
_ux_device_thread_resume(&cdc_ecm -> ux_slave_class_cdc_ecm_bulkout_thread);
diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_initialize.c b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_initialize.c
index ba3e475..302b9ac 100644
--- a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_initialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_initialize.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_cdc_ecm_initialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -89,10 +89,10 @@
/* 10-31-2022 Chaoqiong Xiao Modified comment(s), */
/* removed internal NX pool, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_cdc_ecm_initialize(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_uninitialize.c b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_uninitialize.c
index 36972dd..a198c29 100644
--- a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_uninitialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_uninitialize.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_cdc_ecm_uninitialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -85,10 +85,10 @@
/* 10-31-2022 Chaoqiong Xiao Modified comment(s), */
/* removed internal NX pool, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_cdc_ecm_uninitialize(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_dfu_entry.c b/common/usbx_device_classes/src/ux_device_class_dfu_entry.c
index be1f7d6..c7f3a10 100644
--- a/common/usbx_device_classes/src/ux_device_class_dfu_entry.c
+++ b/common/usbx_device_classes/src/ux_device_class_dfu_entry.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_dfu_entry PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -72,9 +72,9 @@
/* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */
/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */
/* resulting in version 6.1 */
-/* xx-xx-xxxx Yajun Xia Modified comment(s), */
+/* 10-31-2023 Yajun Xia Modified comment(s), */
/* added error checks support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_dfu_entry(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_dfu_initialize.c b/common/usbx_device_classes/src/ux_device_class_dfu_initialize.c
index 31f2b2c..ad0b00b 100644
--- a/common/usbx_device_classes/src/ux_device_class_dfu_initialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_dfu_initialize.c
@@ -260,7 +260,7 @@ ULONG descriptor_length;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_dfu_initialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -291,7 +291,7 @@ ULONG descriptor_length;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_dfu_initialize(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_hid_activate.c b/common/usbx_device_classes/src/ux_device_class_hid_activate.c
index fb9fb12..4793def 100644
--- a/common/usbx_device_classes/src/ux_device_class_hid_activate.c
+++ b/common/usbx_device_classes/src/ux_device_class_hid_activate.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_activate PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -84,11 +84,11 @@
/* fixed parameter/variable */
/* names conflict C++ keyword, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_hid_activate(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_hid_entry.c b/common/usbx_device_classes/src/ux_device_class_hid_entry.c
index 38b4afe..92c9743 100644
--- a/common/usbx_device_classes/src/ux_device_class_hid_entry.c
+++ b/common/usbx_device_classes/src/ux_device_class_hid_entry.c
@@ -73,9 +73,9 @@
/* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */
/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */
/* resulting in version 6.1 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added error checks support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_hid_entry(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_hid_event_get.c b/common/usbx_device_classes/src/ux_device_class_hid_event_get.c
index b3d060b..4268651 100644
--- a/common/usbx_device_classes/src/ux_device_class_hid_event_get.c
+++ b/common/usbx_device_classes/src/ux_device_class_hid_event_get.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_event_check PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -65,7 +65,7 @@
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Chaoqiong Xiao Initial Version 6.x */
+/* 10-31-2023 Chaoqiong Xiao Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_hid_event_check(UX_SLAVE_CLASS_HID *hid,
@@ -98,7 +98,7 @@ UX_SLAVE_DEVICE *device;
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_event_free PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -125,7 +125,7 @@ UX_SLAVE_DEVICE *device;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Chaoqiong Xiao Initial Version 6.x */
+/* 10-31-2023 Chaoqiong Xiao Initial Version 6.3.0 */
/* */
/**************************************************************************/
VOID _ux_device_class_hid_event_free(UX_SLAVE_CLASS_HID *hid)
@@ -145,7 +145,7 @@ UCHAR *pos;
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_event_get PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -180,9 +180,9 @@ UCHAR *pos;
/* verified memset and memcpy */
/* cases, */
/* resulting in version 6.1 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_hid_event_get(UX_SLAVE_CLASS_HID *hid,
@@ -225,7 +225,7 @@ UINT status;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_hid_event_get PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -255,7 +255,7 @@ UINT status;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Chaoqiong Xiao Initial Version 6.x */
+/* 10-31-2023 Chaoqiong Xiao Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_hid_event_get(UX_SLAVE_CLASS_HID *hid,
diff --git a/common/usbx_device_classes/src/ux_device_class_hid_event_set.c b/common/usbx_device_classes/src/ux_device_class_hid_event_set.c
index 5c3f923..80c0f4a 100644
--- a/common/usbx_device_classes/src/ux_device_class_hid_event_set.c
+++ b/common/usbx_device_classes/src/ux_device_class_hid_event_set.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_event_set PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -79,9 +79,9 @@
/* resulting in version 6.1.10 */
/* 04-25-2022 Chaoqiong Xiao Modified comment(s), */
/* resulting in version 6.1.11 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_hid_event_set(UX_SLAVE_CLASS_HID *hid,
@@ -184,7 +184,7 @@ UCHAR *next_position;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_hid_event_set PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -214,7 +214,7 @@ UCHAR *next_position;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Chaoqiong Xiao Initial Version 6.x */
+/* 10-31-2023 Chaoqiong Xiao Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_hid_event_set(UX_SLAVE_CLASS_HID *hid,
diff --git a/common/usbx_device_classes/src/ux_device_class_hid_initialize.c b/common/usbx_device_classes/src/ux_device_class_hid_initialize.c
index fd87bd0..9abe4e8 100644
--- a/common/usbx_device_classes/src/ux_device_class_hid_initialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_hid_initialize.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_initialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -88,12 +88,12 @@
/* 10-31-2022 Chaoqiong Xiao Modified comment(s), */
/* fixed compile warnings, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
/* checked compile options, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_hid_initialize(UX_SLAVE_CLASS_COMMAND *command)
@@ -382,7 +382,7 @@ UCHAR *buffer;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_hid_initialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -411,7 +411,7 @@ UCHAR *buffer;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Chaoqiong Xiao Initial Version 6.x */
+/* 10-31-2023 Chaoqiong Xiao Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_hid_initialize(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_hid_interrupt_thread.c b/common/usbx_device_classes/src/ux_device_class_hid_interrupt_thread.c
index 2cd10e0..1388e58 100644
--- a/common/usbx_device_classes/src/ux_device_class_hid_interrupt_thread.c
+++ b/common/usbx_device_classes/src/ux_device_class_hid_interrupt_thread.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_interrupt_thread PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -84,9 +84,9 @@
/* 01-31-2022 Chaoqiong Xiao Modified comment(s), */
/* off for standalone compile, */
/* resulting in version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
VOID _ux_device_class_hid_interrupt_thread(ULONG hid_class)
diff --git a/common/usbx_device_classes/src/ux_device_class_hid_read.c b/common/usbx_device_classes/src/ux_device_class_hid_read.c
index dbd85b1..e0d7c7b 100644
--- a/common/usbx_device_classes/src/ux_device_class_hid_read.c
+++ b/common/usbx_device_classes/src/ux_device_class_hid_read.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_read PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -80,9 +80,9 @@
/* resulting in version 6.1.11 */
/* 07-29-2022 Chaoqiong Xiao Modified comment(s), */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_hid_read(UX_SLAVE_CLASS_HID *hid, UCHAR *buffer,
@@ -238,7 +238,7 @@ ULONG local_requested_length;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_hid_read PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -270,7 +270,7 @@ ULONG local_requested_length;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Chaoqiong Xiao Initial Version 6.x */
+/* 10-31-2023 Chaoqiong Xiao Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_hid_read(UX_SLAVE_CLASS_HID *hid, UCHAR *buffer,
diff --git a/common/usbx_device_classes/src/ux_device_class_hid_read_run.c b/common/usbx_device_classes/src/ux_device_class_hid_read_run.c
index 923c854..c71b5d0 100644
--- a/common/usbx_device_classes/src/ux_device_class_hid_read_run.c
+++ b/common/usbx_device_classes/src/ux_device_class_hid_read_run.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_read_run PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -74,9 +74,9 @@
/* DATE NAME DESCRIPTION */
/* */
/* 07-29-2022 Chaoqiong Xiao Initial Version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_hid_read_run(UX_SLAVE_CLASS_HID *hid, UCHAR *buffer,
@@ -302,7 +302,7 @@ UINT status= UX_SUCCESS;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_hid_read_run PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -334,7 +334,7 @@ UINT status= UX_SUCCESS;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Chaoqiong Xiao Initial Version 6.x */
+/* 10-31-2023 Chaoqiong Xiao Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_hid_read_run(UX_SLAVE_CLASS_HID *hid, UCHAR *buffer,
diff --git a/common/usbx_device_classes/src/ux_device_class_hid_receiver_event_free.c b/common/usbx_device_classes/src/ux_device_class_hid_receiver_event_free.c
index 5d16067..6cf22ad 100644
--- a/common/usbx_device_classes/src/ux_device_class_hid_receiver_event_free.c
+++ b/common/usbx_device_classes/src/ux_device_class_hid_receiver_event_free.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_receiver_event_free PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -68,9 +68,9 @@
/* 04-25-2022 Chaoqiong Xiao Modified comment(s), */
/* fixed standalone compile, */
/* resulting in version 6.1.11 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_hid_receiver_event_free(UX_SLAVE_CLASS_HID *hid)
@@ -123,7 +123,7 @@ UCHAR *next_pos;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_hid_receiver_event_free PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -153,7 +153,7 @@ UCHAR *next_pos;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Chaoqiong Xiao Initial Version 6.x */
+/* 10-31-2023 Chaoqiong Xiao Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_hid_receiver_event_free(UX_SLAVE_CLASS_HID *hid)
diff --git a/common/usbx_device_classes/src/ux_device_class_hid_receiver_event_get.c b/common/usbx_device_classes/src/ux_device_class_hid_receiver_event_get.c
index e765a9d..2aad7d4 100644
--- a/common/usbx_device_classes/src/ux_device_class_hid_receiver_event_get.c
+++ b/common/usbx_device_classes/src/ux_device_class_hid_receiver_event_get.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_receiver_event_get PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -71,9 +71,9 @@
/* 07-29-2022 Chaoqiong Xiao Modified comment(s), */
/* cleaned compile with TRACE, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_hid_receiver_event_get(UX_SLAVE_CLASS_HID *hid,
@@ -122,7 +122,7 @@ UX_DEVICE_CLASS_HID_RECEIVED_EVENT *pos;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_hid_receiver_event_get PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -153,7 +153,7 @@ UX_DEVICE_CLASS_HID_RECEIVED_EVENT *pos;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Chaoqiong Xiao Initial Version 6.x */
+/* 10-31-2023 Chaoqiong Xiao Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_hid_receiver_event_get(UX_SLAVE_CLASS_HID *hid,
diff --git a/common/usbx_device_classes/src/ux_device_class_hid_receiver_initialize.c b/common/usbx_device_classes/src/ux_device_class_hid_receiver_initialize.c
index ee1fc3b..02342bb 100644
--- a/common/usbx_device_classes/src/ux_device_class_hid_receiver_initialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_hid_receiver_initialize.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_receiver_initialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -77,9 +77,9 @@
/* 07-29-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone receiver, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_hid_receiver_initialize(UX_SLAVE_CLASS_HID *hid,
diff --git a/common/usbx_device_classes/src/ux_device_class_hid_receiver_tasks_run.c b/common/usbx_device_classes/src/ux_device_class_hid_receiver_tasks_run.c
index a8b9bbb..a90e3cf 100644
--- a/common/usbx_device_classes/src/ux_device_class_hid_receiver_tasks_run.c
+++ b/common/usbx_device_classes/src/ux_device_class_hid_receiver_tasks_run.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_receiver_tasks_run PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -67,9 +67,9 @@
/* DATE NAME DESCRIPTION */
/* */
/* 07-29-2022 Chaoqiong Xiao Initial Version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_hid_receiver_tasks_run(UX_SLAVE_CLASS_HID *hid)
diff --git a/common/usbx_device_classes/src/ux_device_class_hid_receiver_thread.c b/common/usbx_device_classes/src/ux_device_class_hid_receiver_thread.c
index bf58348..a8231f3 100644
--- a/common/usbx_device_classes/src/ux_device_class_hid_receiver_thread.c
+++ b/common/usbx_device_classes/src/ux_device_class_hid_receiver_thread.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_receiver_thread PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -72,9 +72,9 @@
/* 04-25-2022 Chaoqiong Xiao Modified comment(s), */
/* added receiver callback, */
/* resulting in version 6.1.11 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
VOID _ux_device_class_hid_receiver_thread(ULONG hid_instance)
diff --git a/common/usbx_device_classes/src/ux_device_class_hid_receiver_uninitialize.c b/common/usbx_device_classes/src/ux_device_class_hid_receiver_uninitialize.c
index b45e912..5abf47d 100644
--- a/common/usbx_device_classes/src/ux_device_class_hid_receiver_uninitialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_hid_receiver_uninitialize.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_receiver_uninitialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -66,9 +66,9 @@
/* DATE NAME DESCRIPTION */
/* */
/* 01-31-2022 Chaoqiong Xiao Initial Version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
VOID _ux_device_class_hid_receiver_uninitialize(UX_DEVICE_CLASS_HID_RECEIVER *receiver)
diff --git a/common/usbx_device_classes/src/ux_device_class_hid_report_get.c b/common/usbx_device_classes/src/ux_device_class_hid_report_get.c
index d08fa7a..458314a 100644
--- a/common/usbx_device_classes/src/ux_device_class_hid_report_get.c
+++ b/common/usbx_device_classes/src/ux_device_class_hid_report_get.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_report_get PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -75,8 +75,8 @@
/* verified memset and memcpy */
/* cases, */
/* resulting in version 6.1 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
-/* resulting in version 6.x */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_hid_report_get(UX_SLAVE_CLASS_HID *hid, ULONG descriptor_type,
diff --git a/common/usbx_device_classes/src/ux_device_class_hid_report_set.c b/common/usbx_device_classes/src/ux_device_class_hid_report_set.c
index 10b9e44..f6e95f4 100644
--- a/common/usbx_device_classes/src/ux_device_class_hid_report_set.c
+++ b/common/usbx_device_classes/src/ux_device_class_hid_report_set.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_report_set PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -73,8 +73,8 @@
/* verified memset and memcpy */
/* cases, */
/* resulting in version 6.1 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
-/* resulting in version 6.x */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_hid_report_set(UX_SLAVE_CLASS_HID *hid, ULONG descriptor_type,
diff --git a/common/usbx_device_classes/src/ux_device_class_hid_tasks_run.c b/common/usbx_device_classes/src/ux_device_class_hid_tasks_run.c
index 4f72f2f..ef9f23a 100644
--- a/common/usbx_device_classes/src/ux_device_class_hid_tasks_run.c
+++ b/common/usbx_device_classes/src/ux_device_class_hid_tasks_run.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_tasks_run PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -73,9 +73,9 @@
/* DATE NAME DESCRIPTION */
/* */
/* 01-31-2022 Chaoqiong Xiao Initial Version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_hid_tasks_run(VOID *instance)
@@ -107,6 +107,9 @@ UINT status;
hid -> ux_device_class_hid_receiver -> ux_device_class_hid_receiver_tasks_run(hid);
#endif
+ /* Get access to current event instance. */
+ hid_event = &hid -> ux_device_class_hid_event;
+
/* Run HID state machine. */
switch(hid -> ux_device_class_hid_event_state)
{
@@ -180,7 +183,6 @@ UINT status;
/* Run transfer state machine. */
trans = &hid -> ux_device_class_hid_interrupt_endpoint ->
ux_slave_endpoint_transfer_request;
- hid_event = &hid -> ux_device_class_hid_event;
status = _ux_device_stack_transfer_run(trans,
hid_event -> ux_device_class_hid_event_length,
hid_event -> ux_device_class_hid_event_length);
diff --git a/common/usbx_device_classes/src/ux_device_class_hid_uninitialize.c b/common/usbx_device_classes/src/ux_device_class_hid_uninitialize.c
index 4770532..3a83fbc 100644
--- a/common/usbx_device_classes/src/ux_device_class_hid_uninitialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_hid_uninitialize.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_hid_uninitialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -78,11 +78,11 @@
/* fixed parameter/variable */
/* names conflict C++ keyword, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_hid_uninitialize(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_pima_activate.c b/common/usbx_device_classes/src/ux_device_class_pima_activate.c
index 1bdf500..2e5c7c3 100644
--- a/common/usbx_device_classes/src/ux_device_class_pima_activate.c
+++ b/common/usbx_device_classes/src/ux_device_class_pima_activate.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_pima_activate PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -76,10 +76,11 @@
/* fixed parameter/variable */
/* names conflict C++ keyword, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* supported optional INT EP, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_pima_activate(UX_SLAVE_CLASS_COMMAND *command)
@@ -145,7 +146,9 @@ UX_SLAVE_ENDPOINT *endpoint_interrupt;
UX_DEVICE_CLASS_PIMA_BULKIN_BUFFER(pima);
endpoint_out -> ux_slave_endpoint_transfer_request.ux_slave_transfer_request_data_pointer =
UX_DEVICE_CLASS_PIMA_BULKOUT_BUFFER(pima);
- endpoint_interrupt -> ux_slave_endpoint_transfer_request.ux_slave_transfer_request_data_pointer =
+ if (endpoint_interrupt)
+ endpoint_interrupt -> ux_slave_endpoint_transfer_request.
+ ux_slave_transfer_request_data_pointer =
UX_DEVICE_CLASS_PIMA_INTERRUPTIN_BUFFER(pima);
#endif
diff --git a/common/usbx_device_classes/src/ux_device_class_pima_deactivate.c b/common/usbx_device_classes/src/ux_device_class_pima_deactivate.c
index 7bf3fd3..2be45ec 100644
--- a/common/usbx_device_classes/src/ux_device_class_pima_deactivate.c
+++ b/common/usbx_device_classes/src/ux_device_class_pima_deactivate.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_pima_deactivate PORTABLE C */
-/* 6.1.12 */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -70,6 +70,9 @@
/* fixed parameter/variable */
/* names conflict C++ keyword, */
/* resulting in version 6.1.12 */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* supported optional INT EP, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_pima_deactivate(UX_SLAVE_CLASS_COMMAND *command)
@@ -87,7 +90,8 @@ UX_SLAVE_CLASS *class_ptr;
/* Terminate the transactions pending on the endpoints. */
_ux_device_stack_transfer_all_request_abort(pima -> ux_device_class_pima_bulk_in_endpoint, UX_TRANSFER_BUS_RESET);
_ux_device_stack_transfer_all_request_abort(pima -> ux_device_class_pima_bulk_out_endpoint, UX_TRANSFER_BUS_RESET);
- _ux_device_stack_transfer_all_request_abort(pima -> ux_device_class_pima_interrupt_endpoint, UX_TRANSFER_BUS_RESET);
+ if (pima -> ux_device_class_pima_interrupt_endpoint)
+ _ux_device_stack_transfer_all_request_abort(pima -> ux_device_class_pima_interrupt_endpoint, UX_TRANSFER_BUS_RESET);
/* Session is now closed. */
pima -> ux_device_class_pima_session_id = 0;
diff --git a/common/usbx_device_classes/src/ux_device_class_pima_device_info_send.c b/common/usbx_device_classes/src/ux_device_class_pima_device_info_send.c
index 244fa99..6636542 100644
--- a/common/usbx_device_classes/src/ux_device_class_pima_device_info_send.c
+++ b/common/usbx_device_classes/src/ux_device_class_pima_device_info_send.c
@@ -40,7 +40,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_pima_device_info_send PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -83,10 +83,10 @@
/* 04-25-2022 Chaoqiong Xiao Modified comment(s), */
/* internal clean up, */
/* resulting in version 6.1.11 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* checked compiling options */
/* by runtime UX_ASSERT, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_pima_device_info_send(UX_SLAVE_CLASS_PIMA *pima)
diff --git a/common/usbx_device_classes/src/ux_device_class_pima_device_prop_value_get.c b/common/usbx_device_classes/src/ux_device_class_pima_device_prop_value_get.c
index fa93952..33c4466 100644
--- a/common/usbx_device_classes/src/ux_device_class_pima_device_prop_value_get.c
+++ b/common/usbx_device_classes/src/ux_device_class_pima_device_prop_value_get.c
@@ -40,7 +40,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_pima_device_prop_value_get PORTABLE C */
-/* 6.X */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -85,10 +85,10 @@
/* updated status handling, */
/* improved sanity checks, */
/* resulting in version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* checked compiling options */
/* by runtime UX_ASSERT, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_pima_device_prop_value_get(UX_SLAVE_CLASS_PIMA *pima,
diff --git a/common/usbx_device_classes/src/ux_device_class_pima_entry.c b/common/usbx_device_classes/src/ux_device_class_pima_entry.c
index f3e9600..251abf3 100644
--- a/common/usbx_device_classes/src/ux_device_class_pima_entry.c
+++ b/common/usbx_device_classes/src/ux_device_class_pima_entry.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_pima_entry PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -72,9 +72,9 @@
/* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */
/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */
/* resulting in version 6.1 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added error checks support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_pima_entry(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_pima_event_set.c b/common/usbx_device_classes/src/ux_device_class_pima_event_set.c
index 570a477..62cfcde 100644
--- a/common/usbx_device_classes/src/ux_device_class_pima_event_set.c
+++ b/common/usbx_device_classes/src/ux_device_class_pima_event_set.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_pima_event_set PORTABLE C */
-/* 6.1.10 */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -72,6 +72,9 @@
/* refined macros names, */
/* added transaction ID, */
/* resulting in version 6.1.10 */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* checked if INT EP exists, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_pima_event_set(UX_SLAVE_CLASS_PIMA *pima,
@@ -97,7 +100,13 @@ UX_SLAVE_DEVICE *device;
return(UX_DEVICE_HANDLE_UNKNOWN);
}
-
+
+ /* Check if interrupt endpoint is available. */
+ if (pima -> ux_device_class_pima_interrupt_endpoint == UX_NULL)
+ {
+ return (UX_FUNCTION_NOT_SUPPORTED);
+ }
+
/* Current position of the head. */
current_pima_event = pima -> ux_device_class_pima_event_array_head;
diff --git a/common/usbx_device_classes/src/ux_device_class_pima_initialize.c b/common/usbx_device_classes/src/ux_device_class_pima_initialize.c
index c12ed51..f363617 100644
--- a/common/usbx_device_classes/src/ux_device_class_pima_initialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_pima_initialize.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_pima_initialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -81,10 +81,10 @@
/* fixed parameter/variable */
/* names conflict C++ keyword, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_pima_initialize(UX_SLAVE_CLASS_COMMAND *command)
@@ -263,7 +263,7 @@ UX_SLAVE_CLASS *class_ptr;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_pima_initialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -292,7 +292,7 @@ UX_SLAVE_CLASS *class_ptr;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Chaoqiong Xiao Initial Version 6.x */
+/* 10-31-2023 Chaoqiong Xiao Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_pima_initialize(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_pima_interrupt_thread.c b/common/usbx_device_classes/src/ux_device_class_pima_interrupt_thread.c
index 68da7f7..db93e51 100644
--- a/common/usbx_device_classes/src/ux_device_class_pima_interrupt_thread.c
+++ b/common/usbx_device_classes/src/ux_device_class_pima_interrupt_thread.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_pima_interrupt_thread PORTABLE C */
-/* 6.1.12 */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -84,6 +84,9 @@
/* 07-29-2022 Chaoqiong Xiao Modified comment(s), */
/* fixed event message size, */
/* resulting in version 6.1.12 */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* improved INT EP management, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
VOID _ux_device_class_pima_interrupt_thread(ULONG pima_class)
@@ -122,13 +125,16 @@ UCHAR *buffer;
/* Get the pointer to the device. */
device = &_ux_system_slave -> ux_system_slave_device;
- /* All PIMA events are on the interrupt endpoint IN, from the host. */
- transfer_request_in = &pima -> ux_device_class_pima_interrupt_endpoint -> ux_slave_endpoint_transfer_request;
/* As long as the device is in the CONFIGURED state. */
while (device -> ux_slave_device_state == UX_DEVICE_CONFIGURED)
{
+ /* All PIMA events are on the interrupt endpoint IN, from the host. */
+ if (pima -> ux_device_class_pima_interrupt_endpoint == UX_NULL)
+ break;
+ transfer_request_in = &pima -> ux_device_class_pima_interrupt_endpoint -> ux_slave_endpoint_transfer_request;
+
/* Wait until something has awaken us. */
status = _ux_device_semaphore_get(&pima -> ux_device_class_pima_interrupt_thread_semaphore, UX_WAIT_FOREVER);
diff --git a/common/usbx_device_classes/src/ux_device_class_pima_object_info_get.c b/common/usbx_device_classes/src/ux_device_class_pima_object_info_get.c
index c990b22..9a4c224 100644
--- a/common/usbx_device_classes/src/ux_device_class_pima_object_info_get.c
+++ b/common/usbx_device_classes/src/ux_device_class_pima_object_info_get.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_pima_object_info_get PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -80,10 +80,10 @@
/* 04-25-2022 Chaoqiong Xiao Modified comment(s), */
/* internal clean up, */
/* resulting in version 6.1.11 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_pima_object_info_get(UX_SLAVE_CLASS_PIMA *pima, ULONG object_handle)
diff --git a/common/usbx_device_classes/src/ux_device_class_pima_object_prop_desc_get.c b/common/usbx_device_classes/src/ux_device_class_pima_object_prop_desc_get.c
index 86ed781..15fc349 100644
--- a/common/usbx_device_classes/src/ux_device_class_pima_object_prop_desc_get.c
+++ b/common/usbx_device_classes/src/ux_device_class_pima_object_prop_desc_get.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_pima_object_prop_desc_get PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -81,10 +81,10 @@
/* updated status handling, */
/* passed max length to app, */
/* resulting in version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_pima_object_prop_desc_get(UX_SLAVE_CLASS_PIMA *pima,
diff --git a/common/usbx_device_classes/src/ux_device_class_pima_object_prop_value_get.c b/common/usbx_device_classes/src/ux_device_class_pima_object_prop_value_get.c
index e52728d..66c1845 100644
--- a/common/usbx_device_classes/src/ux_device_class_pima_object_prop_value_get.c
+++ b/common/usbx_device_classes/src/ux_device_class_pima_object_prop_value_get.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_pima_object_prop_value_get PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -84,10 +84,10 @@
/* updated status handling, */
/* passed max length to app, */
/* resulting in version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_pima_object_prop_value_get(UX_SLAVE_CLASS_PIMA *pima,
diff --git a/common/usbx_device_classes/src/ux_device_class_pima_object_references_get.c b/common/usbx_device_classes/src/ux_device_class_pima_object_references_get.c
index 42a4d4d..4018cd0 100644
--- a/common/usbx_device_classes/src/ux_device_class_pima_object_references_get.c
+++ b/common/usbx_device_classes/src/ux_device_class_pima_object_references_get.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_pima_object_references_get PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -81,10 +81,10 @@
/* updated status handling, */
/* passed max length to app, */
/* resulting in version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_pima_object_references_get(UX_SLAVE_CLASS_PIMA *pima,
diff --git a/common/usbx_device_classes/src/ux_device_class_pima_storage_id_send.c b/common/usbx_device_classes/src/ux_device_class_pima_storage_id_send.c
index 2c6b3a3..7655265 100644
--- a/common/usbx_device_classes/src/ux_device_class_pima_storage_id_send.c
+++ b/common/usbx_device_classes/src/ux_device_class_pima_storage_id_send.c
@@ -42,7 +42,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_pima_storage_id_send PORTABLE C */
-/* 6.X */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -80,10 +80,10 @@
/* 01-31-2022 Chaoqiong Xiao Modified comment(s), */
/* improved sanity checks, */
/* resulting in version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* checked compiling options */
/* by runtime UX_ASSERT, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_pima_storage_id_send(UX_SLAVE_CLASS_PIMA *pima)
diff --git a/common/usbx_device_classes/src/ux_device_class_printer_activate.c b/common/usbx_device_classes/src/ux_device_class_printer_activate.c
index 9080a02..d90ac27 100644
--- a/common/usbx_device_classes/src/ux_device_class_printer_activate.c
+++ b/common/usbx_device_classes/src/ux_device_class_printer_activate.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_printer_activate PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -68,10 +68,10 @@
/* fixed parameter/variable */
/* names conflict C++ keyword, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_printer_activate(UX_SLAVE_CLASS_COMMAND *command)
@@ -108,7 +108,7 @@ UX_SLAVE_ENDPOINT *endpoint;
if (endpoint -> ux_slave_endpoint_descriptor.bEndpointAddress & UX_ENDPOINT_IN)
{
printer -> ux_device_class_printer_endpoint_in = endpoint;
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+#if defined(UX_DEVICE_CLASS_PRINTER_OWN_ENDPOINT_BUFFER)
endpoint -> ux_slave_endpoint_transfer_request.ux_slave_transfer_request_data_pointer =
UX_DEVICE_CLASS_PRINTER_WRITE_BUFFER(printer);
#endif
@@ -118,7 +118,7 @@ UX_SLAVE_ENDPOINT *endpoint;
else
{
printer -> ux_device_class_printer_endpoint_out = endpoint;
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+#if defined(UX_DEVICE_CLASS_PRINTER_OWN_ENDPOINT_BUFFER)
endpoint -> ux_slave_endpoint_transfer_request.ux_slave_transfer_request_data_pointer =
UX_DEVICE_CLASS_PRINTER_READ_BUFFER(printer);
#endif
diff --git a/common/usbx_device_classes/src/ux_device_class_printer_initialize.c b/common/usbx_device_classes/src/ux_device_class_printer_initialize.c
index 1838542..e231665 100644
--- a/common/usbx_device_classes/src/ux_device_class_printer_initialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_printer_initialize.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_printer_initialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -72,10 +72,10 @@
/* 10-31-2022 Yajun Xia Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_printer_initialize(UX_SLAVE_CLASS_COMMAND *command)
@@ -110,7 +110,7 @@ UINT status;
printer -> ux_device_class_printer_parameter.ux_device_class_printer_instance_deactivate = printer_parameter -> ux_device_class_printer_instance_deactivate;
printer -> ux_device_class_printer_parameter.ux_device_class_printer_soft_reset = printer_parameter -> ux_device_class_printer_soft_reset;
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+#if defined(UX_DEVICE_CLASS_PRINTER_OWN_ENDPOINT_BUFFER)
/* Allocate endpoint buffer. */
UX_ASSERT(!UX_DEVICE_CLASS_PRINTER_ENDPOINT_BUFFER_SIZE_CALC_OVERFLOW);
@@ -132,7 +132,7 @@ UINT status;
{
/* Free the resources. */
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+#if defined(UX_DEVICE_CLASS_PRINTER_OWN_ENDPOINT_BUFFER)
_ux_utility_memory_free(printer -> ux_device_class_printer_endpoint_buffer);
#endif
_ux_utility_memory_free(printer);
@@ -152,7 +152,7 @@ UINT status;
_ux_device_mutex_delete(&printer -> ux_device_class_printer_endpoint_in_mutex);
/* Free the resources. */
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+#if defined(UX_DEVICE_CLASS_PRINTER_OWN_ENDPOINT_BUFFER)
_ux_utility_memory_free(printer -> ux_device_class_printer_endpoint_buffer);
#endif
_ux_utility_memory_free(printer);
diff --git a/common/usbx_device_classes/src/ux_device_class_printer_read.c b/common/usbx_device_classes/src/ux_device_class_printer_read.c
index 2e51010..3fdded4 100644
--- a/common/usbx_device_classes/src/ux_device_class_printer_read.c
+++ b/common/usbx_device_classes/src/ux_device_class_printer_read.c
@@ -116,6 +116,21 @@ ULONG local_requested_length;
/* All Printer reading are on the endpoint OUT, from the host. */
transfer_request = &endpoint -> ux_slave_endpoint_transfer_request;
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_PRINTER_ZERO_COPY)
+
+ /* Check if device is configured. */
+ if (device -> ux_slave_device_state == UX_DEVICE_CONFIGURED)
+ {
+
+ /* Issue the transfer request. */
+ local_requested_length = requested_length;
+ transfer_request -> ux_slave_transfer_request_data_pointer = buffer;
+ status = _ux_device_stack_transfer_request(transfer_request,
+ local_requested_length, local_requested_length);
+ *actual_length = transfer_request -> ux_slave_transfer_request_actual_length;
+ }
+#else
+
/* Reset the actual length. */
*actual_length = 0;
@@ -179,6 +194,7 @@ ULONG local_requested_length;
return(status);
}
}
+#endif
/* Free Mutex resource. */
_ux_device_mutex_off(&printer -> ux_device_class_printer_endpoint_out_mutex);
@@ -207,7 +223,7 @@ ULONG local_requested_length;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_printer_read PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -243,9 +259,9 @@ ULONG local_requested_length;
/* DATE NAME DESCRIPTION */
/* */
/* 03-08-2023 Yajun Xia Initial Version 6.2.1 */
-/* xx-xx-xxxx Yajun Xia Modified comment(s), */
+/* 10-31-2023 Yajun Xia Modified comment(s), */
/* fixed error checking issue, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_printer_read(UX_DEVICE_CLASS_PRINTER *printer, UCHAR *buffer,
diff --git a/common/usbx_device_classes/src/ux_device_class_printer_read_run.c b/common/usbx_device_classes/src/ux_device_class_printer_read_run.c
index db7499b..bf57d0d 100644
--- a/common/usbx_device_classes/src/ux_device_class_printer_read_run.c
+++ b/common/usbx_device_classes/src/ux_device_class_printer_read_run.c
@@ -120,6 +120,53 @@ UINT status = UX_SUCCESS;
/* All Printer reading are on the endpoint OUT, from the host. */
transfer_request = &endpoint -> ux_slave_endpoint_transfer_request;
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_PRINTER_ZERO_COPY)
+
+ /* Run the transfer state machine. */
+ if (printer -> ux_device_class_printer_read_state == UX_STATE_RESET)
+ {
+
+ /* If trace is enabled, insert this event into the trace buffer. */
+ UX_TRACE_IN_LINE_INSERT(UX_TRACE_DEVICE_CLASS_PRINTER_READ, printer, buffer, requested_length, 0, UX_TRACE_DEVICE_CLASS_EVENTS, 0, 0)
+
+ printer -> ux_device_class_printer_read_state = UX_DEVICE_CLASS_PRINTER_READ_START;
+ printer -> ux_device_class_printer_read_status = UX_TRANSFER_NO_ANSWER;
+ transfer_request -> ux_slave_transfer_request_data_pointer = buffer;
+ UX_SLAVE_TRANSFER_STATE_RESET(transfer_request);
+ }
+
+ /* Issue the transfer request. */
+ max_transfer_length = requested_length;
+ status = _ux_device_stack_transfer_run(transfer_request, max_transfer_length, max_transfer_length);
+
+ /* Error case. */
+ if (status < UX_STATE_NEXT)
+ {
+
+ printer -> ux_device_class_printer_read_state = UX_STATE_RESET;
+ printer -> ux_device_class_printer_read_status =
+ transfer_request -> ux_slave_transfer_request_completion_code;
+ return(UX_STATE_ERROR);
+ }
+
+ /* Success case. */
+ if (status == UX_STATE_NEXT)
+ {
+
+ /* Last transfer status. */
+ printer -> ux_device_class_printer_read_status =
+ transfer_request -> ux_slave_transfer_request_completion_code;
+
+ /* Update actual length. */
+ *actual_length = transfer_request -> ux_slave_transfer_request_actual_length;
+
+ /* It's done. */
+ printer -> ux_device_class_printer_read_state = UX_STATE_RESET;
+ }
+
+ return(status);
+#else
+
/* Handle state cases. */
switch(printer -> ux_device_class_printer_read_state)
{
@@ -230,6 +277,7 @@ UINT status = UX_SUCCESS;
printer -> ux_device_class_printer_read_status = UX_INVALID_STATE;
break;
}
+#endif
/* Error cases. */
return(UX_STATE_EXIT);
@@ -240,7 +288,7 @@ UINT status = UX_SUCCESS;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_printer_read_run PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -281,7 +329,7 @@ UINT status = UX_SUCCESS;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun xia Initial Version 6.x */
+/* 10-31-2023 Yajun xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_printer_read_run(UX_DEVICE_CLASS_PRINTER *printer, UCHAR *buffer,
diff --git a/common/usbx_device_classes/src/ux_device_class_printer_uninitialize.c b/common/usbx_device_classes/src/ux_device_class_printer_uninitialize.c
index 89f5c37..0a84a34 100644
--- a/common/usbx_device_classes/src/ux_device_class_printer_uninitialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_printer_uninitialize.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_printer_uninitialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -75,10 +75,10 @@
/* 10-31-2022 Yajun Xia Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_printer_uninitialize(UX_SLAVE_CLASS_COMMAND *command)
@@ -104,7 +104,7 @@ UX_SLAVE_CLASS *class_ptr;
_ux_device_mutex_delete(&printer -> ux_device_class_printer_endpoint_out_mutex);
#endif
/* Free the resources. */
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+#if defined(UX_DEVICE_CLASS_PRINTER_OWN_ENDPOINT_BUFFER)
_ux_utility_memory_free(printer -> ux_device_class_printer_endpoint_buffer);
#endif
_ux_utility_memory_free(printer);
diff --git a/common/usbx_device_classes/src/ux_device_class_printer_write.c b/common/usbx_device_classes/src/ux_device_class_printer_write.c
index f2df267..a955cd2 100644
--- a/common/usbx_device_classes/src/ux_device_class_printer_write.c
+++ b/common/usbx_device_classes/src/ux_device_class_printer_write.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_printer_write PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -79,10 +79,10 @@
/* 07-29-2022 Chaoqiong Xiao Modified comment(s), */
/* added auto ZLP support, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_printer_write(UX_DEVICE_CLASS_PRINTER *printer, UCHAR *buffer,
@@ -146,6 +146,28 @@ UINT status = 0;
return(status);
}
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_PRINTER_ZERO_COPY)
+
+ /* Check if device is configured. */
+ if (device -> ux_slave_device_state == UX_DEVICE_CONFIGURED)
+ {
+
+#if defined(UX_DEVICE_CLASS_PRINTER_WRITE_AUTO_ZLP)
+
+ /* Issue with larger host length to append zlp if necessary. */
+ local_host_length = requested_length + 1;
+#else
+ local_host_length = requested_length;
+#endif
+ local_requested_length = requested_length;
+
+ /* Issue the transfer request. */
+ transfer_request -> ux_slave_transfer_request_data_pointer = buffer;
+ status = _ux_device_stack_transfer_request(transfer_request, local_requested_length, local_host_length);
+ *actual_length = transfer_request -> ux_slave_transfer_request_actual_length;
+ }
+#else
+
/* Check if we need more transactions. */
local_host_length = UX_DEVICE_CLASS_PRINTER_WRITE_BUFFER_SIZE;
while (device -> ux_slave_device_state == UX_DEVICE_CONFIGURED &&
@@ -207,6 +229,7 @@ UINT status = 0;
return(status);
}
}
+#endif
/* Free Mutex resource. */
_ux_device_mutex_off(&printer -> ux_device_class_printer_endpoint_in_mutex);
@@ -235,7 +258,7 @@ UINT status = 0;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_printer_write PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -271,9 +294,9 @@ UINT status = 0;
/* DATE NAME DESCRIPTION */
/* */
/* 03-08-2023 Yajun Xia Initial Version 6.2.1 */
-/* xx-xx-xxxx Yajun Xia Modified comment(s), */
+/* 10-31-2023 Yajun Xia Modified comment(s), */
/* fixed error checking issue, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_printer_write(UX_DEVICE_CLASS_PRINTER *printer, UCHAR *buffer,
diff --git a/common/usbx_device_classes/src/ux_device_class_printer_write_run.c b/common/usbx_device_classes/src/ux_device_class_printer_write_run.c
index 034fcd7..a5dbd1d 100644
--- a/common/usbx_device_classes/src/ux_device_class_printer_write_run.c
+++ b/common/usbx_device_classes/src/ux_device_class_printer_write_run.c
@@ -36,7 +36,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_printer_write_run PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -78,10 +78,10 @@
/* DATE NAME DESCRIPTION */
/* */
/* 10-31-2022 Yajun Xia Initial Version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_printer_write_run(UX_DEVICE_CLASS_PRINTER *printer, UCHAR *buffer,
@@ -91,8 +91,10 @@ UINT _ux_device_class_printer_write_run(UX_DEVICE_CLASS_PRINTER *printer, UCHAR
UX_SLAVE_ENDPOINT *endpoint;
UX_SLAVE_DEVICE *device;
UX_SLAVE_TRANSFER *transfer_request;
-UINT zlp = UX_FALSE;
UINT status = 0;
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER != 1) || !defined(UX_DEVICE_CLASS_CDC_ACM_ZERO_COPY)
+UINT zlp = UX_FALSE;
+#endif
/* If trace is enabled, insert this event into the trace buffer. */
UX_TRACE_IN_LINE_INSERT(UX_TRACE_DEVICE_CLASS_PRINTER_WRITE, printer, buffer, requested_length, 0, UX_TRACE_DEVICE_CLASS_EVENTS, 0, 0)
@@ -135,6 +137,54 @@ UINT status = 0;
/* We are writing to the IN endpoint. */
transfer_request = &endpoint -> ux_slave_endpoint_transfer_request;
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_PRINTER_ZERO_COPY)
+
+ /* Run the transfer state machine. */
+ if (printer -> ux_device_class_printer_write_state == UX_STATE_RESET)
+ {
+
+ /* Set the state to WRITE_WAIT. */
+ printer -> ux_device_class_printer_write_state = UX_DEVICE_CLASS_PRINTER_WRITE_WAIT;
+ printer -> ux_device_class_printer_write_status = UX_TRANSFER_NO_ANSWER;
+ transfer_request -> ux_slave_transfer_request_data_pointer = buffer;
+ UX_SLAVE_TRANSFER_STATE_RESET(transfer_request);
+ }
+
+ /* Issue the transfer request. */
+#if defined(UX_DEVICE_CLASS_PRINTER_WRITE_AUTO_ZLP)
+ status = _ux_device_stack_transfer_run(transfer_request, requested_length, requested_length + 1);
+#else
+ status = _ux_device_stack_transfer_run(transfer_request, requested_length, requested_length);
+#endif
+
+ /* Error case. */
+ if (status < UX_STATE_NEXT)
+ {
+
+ printer -> ux_device_class_printer_write_state = UX_STATE_RESET;
+ printer -> ux_device_class_printer_write_status =
+ transfer_request -> ux_slave_transfer_request_completion_code;
+ return(UX_STATE_ERROR);
+ }
+
+ /* Success case. */
+ if (status == UX_STATE_NEXT)
+ {
+
+ /* Last transfer status. */
+ printer -> ux_device_class_printer_write_status =
+ transfer_request -> ux_slave_transfer_request_completion_code;
+
+ /* Update actual length. */
+ *actual_length = transfer_request -> ux_slave_transfer_request_actual_length;
+
+ /* It's done. */
+ printer -> ux_device_class_printer_write_state = UX_STATE_RESET;
+ }
+ return(status);
+
+#else
+
/* Handle state cases. */
switch(printer -> ux_device_class_printer_write_state)
{
@@ -254,6 +304,7 @@ UINT status = 0;
printer -> ux_device_class_printer_write_state = UX_STATE_RESET;
break;
}
+#endif
/* Error case. */
return(UX_STATE_EXIT);
@@ -264,7 +315,7 @@ UINT status = 0;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_printer_write_run PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -305,7 +356,7 @@ UINT status = 0;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun xia Initial Version 6.x */
+/* 10-31-2023 Yajun xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_printer_write_run(UX_DEVICE_CLASS_PRINTER *printer, UCHAR *buffer,
diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_activate.c b/common/usbx_device_classes/src/ux_device_class_rndis_activate.c
index 141cc2e..d8d946c 100644
--- a/common/usbx_device_classes/src/ux_device_class_rndis_activate.c
+++ b/common/usbx_device_classes/src/ux_device_class_rndis_activate.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_rndis_activate PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -79,10 +79,11 @@
/* fixed parameter/variable */
/* names conflict C++ keyword, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_rndis_activate(UX_SLAVE_CLASS_COMMAND *command)
@@ -157,7 +158,7 @@ ULONG physical_address_lsw;
/* We have found the bulk in endpoint, save it. */
rndis -> ux_slave_class_rndis_bulkin_endpoint = endpoint;
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && !defined(UX_DEVICE_CLASS_RNDIS_ZERO_COPY)
endpoint -> ux_slave_endpoint_transfer_request.ux_slave_transfer_request_data_pointer =
UX_DEVICE_CLASS_RNDIS_BULKIN_BUFFER(rndis);
#endif
@@ -171,7 +172,7 @@ ULONG physical_address_lsw;
/* We have found the bulk out endpoint, save it. */
rndis -> ux_slave_class_rndis_bulkout_endpoint = endpoint;
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && !defined(UX_DEVICE_CLASS_RNDIS_ZERO_COPY)
endpoint -> ux_slave_endpoint_transfer_request.ux_slave_transfer_request_data_pointer =
UX_DEVICE_CLASS_RNDIS_BULKOUT_BUFFER(rndis);
#endif
@@ -209,12 +210,14 @@ ULONG physical_address_lsw;
physical_address_lsw);
/* Reset the endpoint buffers. */
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && !defined(UX_DEVICE_CLASS_RNDIS_ZERO_COPY)
_ux_utility_memory_set(rndis -> ux_slave_class_rndis_bulkout_endpoint -> ux_slave_endpoint_transfer_request.
- ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); /* Use case of memset is verified. */
+ ux_slave_transfer_request_data_pointer, 0, UX_DEVICE_CLASS_RNDIS_BULKOUT_BUFFER_SIZE); /* Use case of memset is verified. */
_ux_utility_memory_set(rndis -> ux_slave_class_rndis_bulkin_endpoint -> ux_slave_endpoint_transfer_request.
- ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); /* Use case of memset is verified. */
+ ux_slave_transfer_request_data_pointer, 0, UX_DEVICE_CLASS_RNDIS_BULKIN_BUFFER_SIZE); /* Use case of memset is verified. */
+#endif
_ux_utility_memory_set(rndis -> ux_slave_class_rndis_interrupt_endpoint -> ux_slave_endpoint_transfer_request.
- ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); /* Use case of memset is verified. */
+ ux_slave_transfer_request_data_pointer, 0, UX_DEVICE_CLASS_RNDIS_INTERRUPTIN_BUFFER_SIZE); /* Use case of memset is verified. */
/* Resume the endpoint threads. */
_ux_device_thread_resume(&rndis -> ux_slave_class_rndis_interrupt_thread);
diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_bulkin_thread.c b/common/usbx_device_classes/src/ux_device_class_rndis_bulkin_thread.c
index c2c0e61..e0e7de9 100644
--- a/common/usbx_device_classes/src/ux_device_class_rndis_bulkin_thread.c
+++ b/common/usbx_device_classes/src/ux_device_class_rndis_bulkin_thread.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_rndis_bulkin_thread PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -88,10 +88,11 @@
/* 10-31-2022 Chaoqiong Xiao Modified comment(s), */
/* used NX API to copy data, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
VOID _ux_device_class_rndis_bulkin_thread(ULONG rndis_class)
@@ -106,6 +107,10 @@ ULONG actual_flags;
NX_PACKET *current_packet;
ULONG transfer_length;
ULONG copied;
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_RNDIS_ZERO_COPY) && !defined(NX_DISABLE_PACKET_CHAIN)
+NX_PACKET *packet;
+UINT do_copy;
+#endif
/* Cast properly the rndis instance. */
UX_THREAD_EXTENSION_PTR_GET(class_ptr, UX_SLAVE_CLASS, rndis_class)
@@ -156,10 +161,125 @@ ULONG copied;
/* If the link is down no need to rearm a packet. */
if (rndis -> ux_slave_class_rndis_link_state == UX_DEVICE_CLASS_RNDIS_LINK_STATE_UP)
{
-
+
+ /* Input packet mapping:
+ * | <----- nx_packet_length -----> |
+ * .. NX_PHYSICAL_HEADER? | NX_ETHERNET_SIZE | Packet ... |
+ * start prepend append
+ */
+
/* Calculate the transfer length. */
transfer_length = current_packet -> nx_packet_length + UX_DEVICE_CLASS_RNDIS_PACKET_HEADER_LENGTH;
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_RNDIS_ZERO_COPY)
+
+ /* Default to success. */
+ status = UX_SUCCESS;
+
+ /* Check if there was enough space for RNDIS header, if not data should be copied. */
+ do_copy = (current_packet -> nx_packet_data_start + UX_DEVICE_CLASS_RNDIS_PACKET_HEADER_LENGTH > current_packet -> nx_packet_prepend_ptr);
+
+#ifndef NX_DISABLE_PACKET_CHAIN
+
+ /* Check if packet is chained, chained packets must be joined (copied). */
+ if (current_packet -> nx_packet_next)
+ do_copy = 1;
+#endif
+
+ /* Check if data is being copied to new packet. */
+ if (do_copy)
+ {
+
+ /* Check if packet pool is good for data collection. */
+ if (transfer_length > current_packet -> nx_packet_pool_owner -> nx_packet_pool_payload_size)
+ status = UX_TRANSFER_BUFFER_OVERFLOW;
+
+ /* Allocate a new packet for data collection. */
+ if (status == UX_SUCCESS)
+ {
+ status = nx_packet_allocate(current_packet -> nx_packet_pool_owner,
+ &packet, UX_DEVICE_CLASS_RNDIS_PACKET_HEADER_LENGTH,
+ UX_MS_TO_TICK(UX_DEVICE_CLASS_RNDIS_PACKET_POOL_WAIT));
+
+ /* Reserve space for RNDIS header. */
+ packet -> nx_packet_append_ptr = packet -> nx_packet_prepend_ptr + UX_DEVICE_CLASS_RNDIS_PACKET_HEADER_LENGTH;
+
+ }
+
+ /* Copy the data to allocated. */
+ if (status == UX_SUCCESS)
+ {
+
+ /* RNDIS packet header already reserved. */
+
+ /* Copy the data to allocated. */
+ status = nx_packet_data_extract_offset(current_packet, 0,
+ packet -> nx_packet_append_ptr,
+ current_packet -> nx_packet_length, &copied);
+ if (status == NX_SUCCESS)
+ {
+ packet -> nx_packet_length = copied;
+
+ /* Release the chained packet. */
+ current_packet -> nx_packet_length = current_packet -> nx_packet_length - UX_DEVICE_CLASS_RNDIS_ETHERNET_SIZE;
+ nx_packet_transmit_release(current_packet);
+
+ /* Use copied packet to transfer. */
+ current_packet = packet;
+ }
+ }
+
+ /* Can not copy/buffer issue. */
+ if (status != UX_SUCCESS)
+ status = UX_TRANSFER_BUFFER_OVERFLOW;
+ }
+ else
+ {
+
+ /* There is enough space for RNDIS header, move prepend_ptr for it. */
+ current_packet -> nx_packet_prepend_ptr -= UX_DEVICE_CLASS_RNDIS_PACKET_HEADER_LENGTH;
+ }
+
+ if (status == UX_SUCCESS)
+ {
+
+ /* Add the RNDIS header to this packet. */
+
+ /* Reset the RNDIS header. */
+ _ux_utility_memory_set(current_packet -> nx_packet_prepend_ptr, 0x00, UX_DEVICE_CLASS_RNDIS_PACKET_HEADER_LENGTH); /* Use case of memset is verified. */
+
+ /* Initialize fields in header. */
+ _ux_utility_long_put(current_packet -> nx_packet_prepend_ptr + UX_DEVICE_CLASS_RNDIS_PACKET_MESSAGE_TYPE, UX_DEVICE_CLASS_RNDIS_PACKET_HEADER_MSG);
+ _ux_utility_long_put(current_packet -> nx_packet_prepend_ptr + UX_DEVICE_CLASS_RNDIS_PACKET_MESSAGE_LENGTH, transfer_length);
+ _ux_utility_long_put(current_packet -> nx_packet_prepend_ptr + UX_DEVICE_CLASS_RNDIS_PACKET_DATA_OFFSET,
+ UX_DEVICE_CLASS_RNDIS_PACKET_HEADER_LENGTH - UX_DEVICE_CLASS_RNDIS_PACKET_DATA_OFFSET);
+ _ux_utility_long_put(current_packet -> nx_packet_prepend_ptr + UX_DEVICE_CLASS_RNDIS_PACKET_DATA_LENGTH, current_packet -> nx_packet_length);
+
+ /* Set the transfer request data pointer to the packet buffer. */
+ transfer_request -> ux_slave_transfer_request_data_pointer = current_packet -> nx_packet_prepend_ptr;
+
+ /* If trace is enabled, insert this event into the trace buffer. */
+ UX_TRACE_IN_LINE_INSERT(UX_TRACE_DEVICE_CLASS_RNDIS_PACKET_TRANSMIT, rndis, 0, 0, 0, UX_TRACE_DEVICE_CLASS_EVENTS, 0, 0)
+
+ /* Send the request to the device controller. */
+ status = _ux_device_stack_transfer_request(transfer_request, transfer_length, transfer_length + 1);
+ }
+
+ /* Check error code. */
+ if (status != UX_SUCCESS)
+ {
+
+ /* Is this not a transfer abort? (it's fine to be aborted) */
+ if (status != UX_TRANSFER_BUS_RESET)
+ {
+
+ /* Error trap. */
+ _ux_system_error_handler(UX_SYSTEM_LEVEL_THREAD, UX_SYSTEM_CONTEXT_CLASS, status);
+ }
+
+ }
+#else
+
/* Is there enough space for this packet in the transfer buffer? */
if (transfer_length <= UX_DEVICE_CLASS_RNDIS_BULKIN_BUFFER_SIZE)
{
@@ -200,6 +320,7 @@ ULONG copied;
/* Report error to application. */
_ux_system_error_handler(UX_SYSTEM_LEVEL_THREAD, UX_SYSTEM_CONTEXT_CLASS, UX_MEMORY_INSUFFICIENT);
}
+#endif
}
/* Free the packet that was just sent. First do some housekeeping. */
diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_bulkout_thread.c b/common/usbx_device_classes/src/ux_device_class_rndis_bulkout_thread.c
index e4c3b50..43b6aee 100644
--- a/common/usbx_device_classes/src/ux_device_class_rndis_bulkout_thread.c
+++ b/common/usbx_device_classes/src/ux_device_class_rndis_bulkout_thread.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_rndis_bulkout_thread PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -88,10 +88,11 @@
/* used NX API to copy data, */
/* used linked NX IP pool, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* added zero copy support, */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
VOID _ux_device_class_rndis_bulkout_thread(ULONG rndis_class)
@@ -165,10 +166,41 @@ USB_NETWORK_DEVICE_TYPE *ux_nx_device;
/* Reset the queue pointer of this packet. */
packet -> nx_packet_queue_next = UX_NULL;
-
+
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_RNDIS_ZERO_COPY)
+
+ /* Adjust the prepend pointer to take into account the RNDIS header and
+ non 3 bit alignment of the ethernet header. */
+ packet -> nx_packet_append_ptr += UX_DEVICE_CLASS_RNDIS_PACKET_BUFFER;
+ switch(((ALIGN_TYPE)packet -> nx_packet_append_ptr) & 0x3)
+ {
+ case 0:
+ packet -> nx_packet_append_ptr += 2;
+ break;
+ case 1:
+ packet -> nx_packet_append_ptr += 1;
+ break;
+ case 3:
+ packet -> nx_packet_append_ptr += 3;
+ break;
+ default:
+ break;
+ }
+ packet -> nx_packet_prepend_ptr = packet -> nx_packet_append_ptr - UX_DEVICE_CLASS_RNDIS_PACKET_BUFFER;
+
+ /* Get actual size of transfer buffer. */
+ packet_payload = (ULONG)(packet -> nx_packet_data_end - packet -> nx_packet_prepend_ptr);
+
+ /* Send the request to the device controller. */
+ transfer_request -> ux_slave_transfer_request_data_pointer = packet -> nx_packet_prepend_ptr;
+ status = _ux_device_stack_transfer_request(transfer_request,
+ packet_payload, packet_payload);
+#else
+
/* Send the request to the device controller. */
status = _ux_device_stack_transfer_request(transfer_request, UX_DEVICE_CLASS_RNDIS_BULKOUT_BUFFER_SIZE,
UX_DEVICE_CLASS_RNDIS_BULKOUT_BUFFER_SIZE);
+#endif
/* Check the completion code. */
if (status == UX_SUCCESS)
@@ -195,6 +227,17 @@ USB_NETWORK_DEVICE_TYPE *ux_nx_device;
if (packet_payload <= transfer_request -> ux_slave_transfer_request_actual_length - UX_DEVICE_CLASS_RNDIS_PACKET_HEADER_LENGTH)
{
+#if (UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1) && defined(UX_DEVICE_CLASS_RNDIS_ZERO_COPY)
+
+ /* Data already in buffer, adjust packet start and save length. */
+ packet -> nx_packet_prepend_ptr += UX_DEVICE_CLASS_RNDIS_PACKET_BUFFER;
+ packet -> nx_packet_length = packet_payload;
+ packet -> nx_packet_append_ptr += packet -> nx_packet_length;
+
+ /* Send that packet to the NetX USB broker. */
+ _ux_network_driver_packet_received(rndis -> ux_slave_class_rndis_network_handle, packet);
+#else
+
/* Adjust the prepend pointer to take into account the non 3 bit alignment of the ethernet header. */
packet -> nx_packet_prepend_ptr += sizeof(USHORT);
packet -> nx_packet_append_ptr += sizeof(USHORT);
@@ -219,6 +262,7 @@ USB_NETWORK_DEVICE_TYPE *ux_nx_device;
_ux_system_error_handler(UX_SYSTEM_LEVEL_THREAD, UX_SYSTEM_CONTEXT_CLASS, UX_CLASS_ETH_PACKET_ERROR);
nx_packet_release(packet);
}
+#endif
}
else
{
diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_control_request.c b/common/usbx_device_classes/src/ux_device_class_rndis_control_request.c
index a358e86..d804186 100644
--- a/common/usbx_device_classes/src/ux_device_class_rndis_control_request.c
+++ b/common/usbx_device_classes/src/ux_device_class_rndis_control_request.c
@@ -40,7 +40,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_rndis_control_request PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -94,10 +94,10 @@
/* fixed parameter/variable */
/* names conflict C++ keyword, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* checked compiling options */
/* by runtime UX_ASSERT, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_rndis_control_request(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_initialize.c b/common/usbx_device_classes/src/ux_device_class_rndis_initialize.c
index 582b774..52bc74a 100644
--- a/common/usbx_device_classes/src/ux_device_class_rndis_initialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_rndis_initialize.c
@@ -78,7 +78,7 @@ ULONG ux_device_class_rndis_oid_supported_list[UX_DEVICE_CLASS_RNDIS_OID_SUPPORT
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_rndis_initialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -139,11 +139,11 @@ ULONG ux_device_class_rndis_oid_supported_list[UX_DEVICE_CLASS_RNDIS_OID_SUPPORT
/* 10-31-2022 Chaoqiong Xiao Modified comment(s), */
/* removed internal NX pool, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
/* checked compile options, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_rndis_initialize(UX_SLAVE_CLASS_COMMAND *command)
@@ -156,7 +156,7 @@ UINT _ux_device_class_rndis_initialize(UX_SLAVE_CLASS_COMMAND *command)
UX_SLAVE_CLASS_RNDIS *rndis;
UX_SLAVE_CLASS_RNDIS_PARAMETER *rndis_parameter;
UX_SLAVE_CLASS *class_ptr;
-UINT status;
+UINT status = UX_SUCCESS;
/* Compile option checks. */
diff --git a/common/usbx_device_classes/src/ux_device_class_storage_activate.c b/common/usbx_device_classes/src/ux_device_class_storage_activate.c
index 6b34c2a..d9be6df 100644
--- a/common/usbx_device_classes/src/ux_device_class_storage_activate.c
+++ b/common/usbx_device_classes/src/ux_device_class_storage_activate.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_storage_activate PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -74,10 +74,10 @@
/* fixed parameter/variable */
/* names conflict C++ keyword, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_storage_activate(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_storage_csw_send.c b/common/usbx_device_classes/src/ux_device_class_storage_csw_send.c
index 8366314..66e2a50 100644
--- a/common/usbx_device_classes/src/ux_device_class_storage_csw_send.c
+++ b/common/usbx_device_classes/src/ux_device_class_storage_csw_send.c
@@ -39,7 +39,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_storage_csw_send PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -90,10 +90,10 @@
/* 01-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* checked compiling options */
/* by runtime UX_ASSERT, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_storage_csw_send(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun,
diff --git a/common/usbx_device_classes/src/ux_device_class_storage_entry.c b/common/usbx_device_classes/src/ux_device_class_storage_entry.c
index 5d00a9d..d36472f 100644
--- a/common/usbx_device_classes/src/ux_device_class_storage_entry.c
+++ b/common/usbx_device_classes/src/ux_device_class_storage_entry.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_storage_entry PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -75,9 +75,9 @@
/* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */
/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */
/* resulting in version 6.1 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added error checks support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_storage_entry(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_storage_get_configuration.c b/common/usbx_device_classes/src/ux_device_class_storage_get_configuration.c
index 3ebf4fd..cd5f5c0 100644
--- a/common/usbx_device_classes/src/ux_device_class_storage_get_configuration.c
+++ b/common/usbx_device_classes/src/ux_device_class_storage_get_configuration.c
@@ -303,7 +303,7 @@ UCHAR usbx_device_class_storage_configuration_active_profile[] = {
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_storage_get_configuration PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -349,10 +349,10 @@ UCHAR usbx_device_class_storage_configuration_active_profile[] = {
/* 01-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* checked compiling options */
/* by runtime UX_ASSERT, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_storage_get_configuration(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun,
diff --git a/common/usbx_device_classes/src/ux_device_class_storage_get_performance.c b/common/usbx_device_classes/src/ux_device_class_storage_get_performance.c
index be84a58..2bc8c12 100644
--- a/common/usbx_device_classes/src/ux_device_class_storage_get_performance.c
+++ b/common/usbx_device_classes/src/ux_device_class_storage_get_performance.c
@@ -45,7 +45,7 @@ UCHAR usbx_device_class_storage_performance[] = {
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_storage_get_performance PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -90,10 +90,10 @@ UCHAR usbx_device_class_storage_performance[] = {
/* 01-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* checked compiling options */
/* by runtime UX_ASSERT, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_storage_get_performance(UX_SLAVE_CLASS_STORAGE *storage,
diff --git a/common/usbx_device_classes/src/ux_device_class_storage_initialize.c b/common/usbx_device_classes/src/ux_device_class_storage_initialize.c
index b9e46e9..95e8a47 100644
--- a/common/usbx_device_classes/src/ux_device_class_storage_initialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_storage_initialize.c
@@ -41,7 +41,7 @@ UCHAR _ux_system_slave_class_storage_product_serial[] = "123
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_storage_initialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -82,10 +82,10 @@ UCHAR _ux_system_slave_class_storage_product_serial[] = "123
/* 01-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_storage_initialize(UX_SLAVE_CLASS_COMMAND *command)
@@ -249,7 +249,7 @@ ULONG lun_index;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_storage_initialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -278,7 +278,7 @@ ULONG lun_index;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Chaoqiong Xiao Initial Version 6.x */
+/* 10-31-2023 Chaoqiong Xiao Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_storage_initialize(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_storage_inquiry.c b/common/usbx_device_classes/src/ux_device_class_storage_inquiry.c
index 74784a6..f55da6d 100644
--- a/common/usbx_device_classes/src/ux_device_class_storage_inquiry.c
+++ b/common/usbx_device_classes/src/ux_device_class_storage_inquiry.c
@@ -40,7 +40,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_storage_inquiry PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -92,10 +92,10 @@
/* 07-29-2022 Chaoqiong Xiao Modified comment(s), */
/* updated dCSWDataResidue, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* checked compiling options */
/* by runtime UX_ASSERT, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_storage_inquiry(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, UX_SLAVE_ENDPOINT *endpoint_in,
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 64ea671..7b77c3b 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
@@ -66,7 +66,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.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -116,10 +116,10 @@ UCHAR usbx_device_class_storage_mode_sense_page_cdrom[USBX_DEVICE_CLASS_STORAGE_
/* 04-25-2022 Chaoqiong Xiao Modified comment(s), */
/* internal clean up, */
/* resulting in version 6.1.11 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* checked compiling options */
/* by runtime UX_ASSERT, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_storage_mode_sense(UX_SLAVE_CLASS_STORAGE *storage,
diff --git a/common/usbx_device_classes/src/ux_device_class_storage_read_capacity.c b/common/usbx_device_classes/src/ux_device_class_storage_read_capacity.c
index 528e496..dc23299 100644
--- a/common/usbx_device_classes/src/ux_device_class_storage_read_capacity.c
+++ b/common/usbx_device_classes/src/ux_device_class_storage_read_capacity.c
@@ -40,7 +40,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_storage_read_capacity PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -86,10 +86,10 @@
/* 01-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* checked compiling options */
/* by runtime UX_ASSERT, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_storage_read_capacity(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun,
diff --git a/common/usbx_device_classes/src/ux_device_class_storage_read_disk_information.c b/common/usbx_device_classes/src/ux_device_class_storage_read_disk_information.c
index f5029c6..7c53186 100644
--- a/common/usbx_device_classes/src/ux_device_class_storage_read_disk_information.c
+++ b/common/usbx_device_classes/src/ux_device_class_storage_read_disk_information.c
@@ -65,7 +65,7 @@ UCHAR usbx_device_class_storage_disk_information[] = {
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_storage_read_disk_information PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -109,10 +109,10 @@ UCHAR usbx_device_class_storage_disk_information[] = {
/* 01-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* checked compiling options */
/* by runtime UX_ASSERT, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_storage_read_disk_information(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun,
diff --git a/common/usbx_device_classes/src/ux_device_class_storage_read_format_capacity.c b/common/usbx_device_classes/src/ux_device_class_storage_read_format_capacity.c
index 795778b..07ebefd 100644
--- a/common/usbx_device_classes/src/ux_device_class_storage_read_format_capacity.c
+++ b/common/usbx_device_classes/src/ux_device_class_storage_read_format_capacity.c
@@ -40,7 +40,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_storage_read_format_capacity PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -85,10 +85,10 @@
/* 01-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* checked compiling options */
/* by runtime UX_ASSERT, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_storage_read_format_capacity(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun,
diff --git a/common/usbx_device_classes/src/ux_device_class_storage_read_toc.c b/common/usbx_device_classes/src/ux_device_class_storage_read_toc.c
index 5f5a390..394fb72 100644
--- a/common/usbx_device_classes/src/ux_device_class_storage_read_toc.c
+++ b/common/usbx_device_classes/src/ux_device_class_storage_read_toc.c
@@ -40,7 +40,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_storage_read_toc PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -86,10 +86,10 @@
/* 01-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* checked compiling options */
/* by runtime UX_ASSERT, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_storage_read_toc(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun,
diff --git a/common/usbx_device_classes/src/ux_device_class_storage_report_key.c b/common/usbx_device_classes/src/ux_device_class_storage_report_key.c
index 3478e6c..1a63274 100644
--- a/common/usbx_device_classes/src/ux_device_class_storage_report_key.c
+++ b/common/usbx_device_classes/src/ux_device_class_storage_report_key.c
@@ -40,7 +40,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_storage_report_key PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -86,10 +86,10 @@
/* 01-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* checked compiling options */
/* by runtime UX_ASSERT, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_storage_report_key(UX_SLAVE_CLASS_STORAGE *storage,
diff --git a/common/usbx_device_classes/src/ux_device_class_storage_request_sense.c b/common/usbx_device_classes/src/ux_device_class_storage_request_sense.c
index c1536d5..9bcb0cd 100644
--- a/common/usbx_device_classes/src/ux_device_class_storage_request_sense.c
+++ b/common/usbx_device_classes/src/ux_device_class_storage_request_sense.c
@@ -40,7 +40,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_storage_request_sense PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -87,10 +87,10 @@
/* 01-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.1.10 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* checked compiling options */
/* by runtime UX_ASSERT, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_storage_request_sense(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, UX_SLAVE_ENDPOINT *endpoint_in,
diff --git a/common/usbx_device_classes/src/ux_device_class_storage_thread.c b/common/usbx_device_classes/src/ux_device_class_storage_thread.c
index 6a2e873..ad60a15 100644
--- a/common/usbx_device_classes/src/ux_device_class_storage_thread.c
+++ b/common/usbx_device_classes/src/ux_device_class_storage_thread.c
@@ -36,7 +36,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_storage_thread PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -127,10 +127,10 @@
/* fixed parameter/variable */
/* names conflict C++ keyword, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
VOID _ux_device_class_storage_thread(ULONG storage_class)
diff --git a/common/usbx_device_classes/src/ux_device_class_storage_uninitialize.c b/common/usbx_device_classes/src/ux_device_class_storage_uninitialize.c
index 59a7453..763a680 100644
--- a/common/usbx_device_classes/src/ux_device_class_storage_uninitialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_storage_uninitialize.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_storage_uninitialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -75,10 +75,10 @@
/* fixed parameter/variable */
/* names conflict C++ keyword, */
/* resulting in version 6.1.12 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_storage_uninitialize(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_video_change.c b/common/usbx_device_classes/src/ux_device_class_video_change.c
index 443fb9f..56d3777 100644
--- a/common/usbx_device_classes/src/ux_device_class_video_change.c
+++ b/common/usbx_device_classes/src/ux_device_class_video_change.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_video_change PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -70,10 +70,11 @@
/* 10-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
-/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* endpoint buffer in classes */
+/* with zero copy enabled, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_video_change(UX_SLAVE_CLASS_COMMAND *command)
@@ -149,11 +150,6 @@ ULONG stream_index;
/* Save it. */
stream -> ux_device_class_video_stream_endpoint = endpoint;
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
- endpoint -> ux_slave_endpoint_transfer_request.
- ux_slave_transfer_request_data_pointer =
- stream -> ux_device_class_video_stream_endpoint_buffer;
-#endif
break;
}
diff --git a/common/usbx_device_classes/src/ux_device_class_video_entry.c b/common/usbx_device_classes/src/ux_device_class_video_entry.c
index d0c5359..610bee8 100644
--- a/common/usbx_device_classes/src/ux_device_class_video_entry.c
+++ b/common/usbx_device_classes/src/ux_device_class_video_entry.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_video_entry PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -72,9 +72,9 @@
/* DATE NAME DESCRIPTION */
/* */
/* 04-25-2022 Chaoqiong Xiao Initial Version 6.1.11 */
-/* xx-xx-xxxx Yajun xia Modified comment(s), */
+/* 10-31-2023 Yajun xia Modified comment(s), */
/* added error checks support, */
-/* resulting in version 6.x */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_video_entry(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_video_initialize.c b/common/usbx_device_classes/src/ux_device_class_video_initialize.c
index 12e39bc..94d2f87 100644
--- a/common/usbx_device_classes/src/ux_device_class_video_initialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_video_initialize.c
@@ -33,7 +33,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_video_initialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -70,10 +70,11 @@
/* 10-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
-/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* endpoint buffer in classes */
+/* with zero copy enabled, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_video_initialize(UX_SLAVE_CLASS_COMMAND *command)
@@ -153,7 +154,11 @@ ULONG i;
stream_parameter -> ux_device_class_video_stream_parameter_max_payload_buffer_nb;
/* Create block of buffer buffer is cache safe for USB transfer. */
+#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+ stream -> ux_device_class_video_stream_buffer = (UCHAR *)_ux_utility_memory_allocate(UX_NO_ALIGN, UX_CACHE_SAFE_MEMORY, memory_size);
+#else
stream -> ux_device_class_video_stream_buffer = (UCHAR *)_ux_utility_memory_allocate(UX_NO_ALIGN, UX_REGULAR_MEMORY, memory_size);
+#endif
/* Check for successful allocation. */
if (stream -> ux_device_class_video_stream_buffer == UX_NULL)
@@ -166,17 +171,6 @@ ULONG i;
stream -> ux_device_class_video_stream_transfer_pos = (UX_DEVICE_CLASS_VIDEO_PAYLOAD *)stream -> ux_device_class_video_stream_buffer;
stream -> ux_device_class_video_stream_access_pos = stream -> ux_device_class_video_stream_transfer_pos;
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
- stream -> ux_device_class_video_stream_endpoint_buffer = _ux_utility_memory_allocate(
- UX_NO_ALIGN, UX_CACHE_SAFE_MEMORY,
- stream -> ux_device_class_video_stream_payload_buffer_size);
- if (stream -> ux_device_class_video_stream_endpoint_buffer == UX_NULL)
- {
- status = UX_MEMORY_INSUFFICIENT;
- break;
- }
-#endif
-
#if !defined(UX_DEVICE_STANDALONE)
/* Create memory block for streaming thread stack in addition. */
@@ -262,10 +256,6 @@ ULONG i;
if (stream -> ux_device_class_video_stream_thread_stack)
_ux_utility_memory_free(stream -> ux_device_class_video_stream_thread_stack);
#endif
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
- if (stream -> ux_device_class_video_stream_endpoint_buffer)
- _ux_utility_memory_free(stream -> ux_device_class_video_stream_endpoint_buffer);
-#endif
if (stream -> ux_device_class_video_stream_buffer)
_ux_utility_memory_free(stream -> ux_device_class_video_stream_buffer);
stream ++;
@@ -280,7 +270,7 @@ ULONG i;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_video_initialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -309,7 +299,7 @@ ULONG i;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_video_initialize(UX_SLAVE_CLASS_COMMAND *command)
diff --git a/common/usbx_device_classes/src/ux_device_class_video_ioctl.c b/common/usbx_device_classes/src/ux_device_class_video_ioctl.c
index 517fa15..79b4625 100644
--- a/common/usbx_device_classes/src/ux_device_class_video_ioctl.c
+++ b/common/usbx_device_classes/src/ux_device_class_video_ioctl.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_video_ioctl PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -66,8 +66,8 @@
/* DATE NAME DESCRIPTION */
/* */
/* 04-25-2022 Chaoqiong Xiao Initial Version 6.1.11 */
-/* xx-xx-xxxx Yajun Xia Modified comment(s), */
-/* resulting in version 6.x */
+/* 10-31-2023 Yajun Xia Modified comment(s), */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_video_ioctl(UX_DEVICE_CLASS_VIDEO *video, ULONG ioctl_function,
@@ -111,7 +111,7 @@ VOID **pptr_parameter;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_video_ioctl PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -143,7 +143,7 @@ VOID **pptr_parameter;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_video_ioctl(UX_DEVICE_CLASS_VIDEO *video, ULONG ioctl_function,
diff --git a/common/usbx_device_classes/src/ux_device_class_video_max_payload_get.c b/common/usbx_device_classes/src/ux_device_class_video_max_payload_get.c
index 03ce518..f6248d9 100644
--- a/common/usbx_device_classes/src/ux_device_class_video_max_payload_get.c
+++ b/common/usbx_device_classes/src/ux_device_class_video_max_payload_get.c
@@ -96,7 +96,7 @@ UX_SLAVE_DEVICE *device;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_video_max_payload_length PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -129,7 +129,7 @@ UX_SLAVE_DEVICE *device;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
ULONG _uxe_device_class_video_max_payload_length(UX_DEVICE_CLASS_VIDEO_STREAM *stream)
diff --git a/common/usbx_device_classes/src/ux_device_class_video_read_payload_free.c b/common/usbx_device_classes/src/ux_device_class_video_read_payload_free.c
index 5fd4e51..c9abd3b 100644
--- a/common/usbx_device_classes/src/ux_device_class_video_read_payload_free.c
+++ b/common/usbx_device_classes/src/ux_device_class_video_read_payload_free.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_video_read_payload_free PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -64,8 +64,8 @@
/* DATE NAME DESCRIPTION */
/* */
/* 04-25-2022 Chaoqiong Xiao Initial Version 6.1.11 */
-/* xx-xx-xxxx Yajun Xia Modified comment(s), */
-/* resulting in version 6.x */
+/* 10-31-2023 Yajun Xia Modified comment(s), */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_video_read_payload_free(UX_DEVICE_CLASS_VIDEO_STREAM *stream)
@@ -129,7 +129,7 @@ UCHAR *next_payload;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_video_read_payload_free PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -161,7 +161,7 @@ UCHAR *next_payload;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_video_read_payload_free(UX_DEVICE_CLASS_VIDEO_STREAM *stream)
diff --git a/common/usbx_device_classes/src/ux_device_class_video_read_payload_get.c b/common/usbx_device_classes/src/ux_device_class_video_read_payload_get.c
index 3244528..385d776 100644
--- a/common/usbx_device_classes/src/ux_device_class_video_read_payload_get.c
+++ b/common/usbx_device_classes/src/ux_device_class_video_read_payload_get.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_video_read_payload_get PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -68,8 +68,8 @@
/* DATE NAME DESCRIPTION */
/* */
/* 04-25-2022 Chaoqiong Xiao Initial Version 6.1.11 */
-/* xx-xx-xxxx Yajun Xia Modified comment(s), */
-/* resulting in version 6.x */
+/* 10-31-2023 Yajun Xia Modified comment(s), */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_video_read_payload_get(UX_DEVICE_CLASS_VIDEO_STREAM *stream,
@@ -118,7 +118,7 @@ UX_SLAVE_DEVICE *device;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_video_read_payload_get PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -154,7 +154,7 @@ UX_SLAVE_DEVICE *device;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_video_read_payload_get(UX_DEVICE_CLASS_VIDEO_STREAM *stream,
diff --git a/common/usbx_device_classes/src/ux_device_class_video_read_task_function.c b/common/usbx_device_classes/src/ux_device_class_video_read_task_function.c
index a7422cc..fc48006 100644
--- a/common/usbx_device_classes/src/ux_device_class_video_read_task_function.c
+++ b/common/usbx_device_classes/src/ux_device_class_video_read_task_function.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_video_read_task_function PORTABLE C */
-/* 6.2.0 */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -71,6 +71,10 @@
/* DATE NAME DESCRIPTION */
/* */
/* 10-31-2022 Chaoqiong Xiao Initial Version 6.2.0 */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* useed zero copy when class */
+/* owns endpoint buffer, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_video_read_task_function(UX_DEVICE_CLASS_VIDEO_STREAM *stream)
@@ -116,6 +120,13 @@ UINT status;
/* Next state: transfer wait. */
stream -> ux_device_class_video_stream_task_state = UX_DEVICE_CLASS_VIDEO_STREAM_RW_WAIT;
+#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+
+ /* Zero copy: directly use frame buffer. */
+ transfer -> ux_slave_transfer_request_data_pointer = stream ->
+ ux_device_class_video_stream_transfer_pos -> ux_device_class_video_payload_data;
+#endif
+
/* Reset transfer state. */
UX_SLAVE_TRANSFER_STATE_RESET(transfer);
}
@@ -153,9 +164,17 @@ UINT status;
/* Frame received, log it. */
stream -> ux_device_class_video_stream_transfer_pos -> ux_device_class_video_payload_length = actual_length;
+
+#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+
+ /* Zero copy: data already in frame buffer. */
+#else
+
+ /* Copy data from endpoint buffer. */
_ux_utility_memory_copy(stream -> ux_device_class_video_stream_transfer_pos -> ux_device_class_video_payload_data,
transfer -> ux_slave_transfer_request_data_pointer,
actual_length); /* Use case of memcpy is verified. */
+#endif
/* For simple, do not advance the transfer position if there is overflow. */
next_pos = (UCHAR *)stream -> ux_device_class_video_stream_transfer_pos;
diff --git a/common/usbx_device_classes/src/ux_device_class_video_read_thread_entry.c b/common/usbx_device_classes/src/ux_device_class_video_read_thread_entry.c
index 060723d..e7267cd 100644
--- a/common/usbx_device_classes/src/ux_device_class_video_read_thread_entry.c
+++ b/common/usbx_device_classes/src/ux_device_class_video_read_thread_entry.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_video_read_thread_entry PORTABLE C */
-/* 6.2.0 */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -72,6 +72,10 @@
/* 10-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added error statistics, */
/* resulting in version 6.2.0 */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* useed zero copy when class */
+/* owns endpoint buffer, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
VOID _ux_device_class_video_read_thread_entry(ULONG video_stream)
@@ -115,6 +119,13 @@ ULONG actual_length;
/* Get transfer instance. */
transfer = &endpoint -> ux_slave_endpoint_transfer_request;
+#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+
+ /* Zero copy: directly use frame buffer for transfer. */
+ transfer -> ux_slave_transfer_request_data_pointer = stream ->
+ ux_device_class_video_stream_transfer_pos -> ux_device_class_video_payload_data;
+#endif
+
/* Start payload transfer anyway. */
status = _ux_device_stack_transfer_request(transfer, max_packet_size, max_packet_size);
@@ -132,9 +143,17 @@ ULONG actual_length;
/* Frame received, log it. */
stream -> ux_device_class_video_stream_transfer_pos -> ux_device_class_video_payload_length = actual_length;
+
+#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+
+ /* Zero copy: data already in frame buffer. */
+#else
+
+ /* Copy data from endpoint buffer. */
_ux_utility_memory_copy(stream -> ux_device_class_video_stream_transfer_pos -> ux_device_class_video_payload_data,
transfer -> ux_slave_transfer_request_data_pointer,
actual_length); /* Use case of memcpy is verified. */
+#endif
/* For simple, do not advance the transfer position if there is overflow. */
next_pos = (UCHAR *)stream -> ux_device_class_video_stream_transfer_pos;
diff --git a/common/usbx_device_classes/src/ux_device_class_video_reception_start.c b/common/usbx_device_classes/src/ux_device_class_video_reception_start.c
index 3928da3..939af79 100644
--- a/common/usbx_device_classes/src/ux_device_class_video_reception_start.c
+++ b/common/usbx_device_classes/src/ux_device_class_video_reception_start.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_video_reception_start PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -68,8 +68,8 @@
/* 10-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Yajun Xia Modified comment(s), */
-/* resulting in version 6.x */
+/* 10-31-2023 Yajun Xia Modified comment(s), */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_video_reception_start(UX_DEVICE_CLASS_VIDEO_STREAM *stream)
@@ -122,7 +122,7 @@ UX_SLAVE_DEVICE *device;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_video_reception_start PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -153,7 +153,7 @@ UX_SLAVE_DEVICE *device;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_video_reception_start(UX_DEVICE_CLASS_VIDEO_STREAM *stream)
diff --git a/common/usbx_device_classes/src/ux_device_class_video_transmission_start.c b/common/usbx_device_classes/src/ux_device_class_video_transmission_start.c
index 4216ac5..246a13a 100644
--- a/common/usbx_device_classes/src/ux_device_class_video_transmission_start.c
+++ b/common/usbx_device_classes/src/ux_device_class_video_transmission_start.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_video_transmission_start PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -68,8 +68,8 @@
/* 10-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.0 */
-/* xx-xx-xxxx Yajun Xia Modified comment(s), */
-/* resulting in version 6.x */
+/* 10-31-2023 Yajun Xia Modified comment(s), */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_video_transmission_start(UX_DEVICE_CLASS_VIDEO_STREAM *stream)
@@ -123,7 +123,7 @@ UX_SLAVE_DEVICE *device;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_video_transmission_start PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -155,7 +155,7 @@ UX_SLAVE_DEVICE *device;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_video_transmission_start(UX_DEVICE_CLASS_VIDEO_STREAM *stream)
diff --git a/common/usbx_device_classes/src/ux_device_class_video_uninitialize.c b/common/usbx_device_classes/src/ux_device_class_video_uninitialize.c
index 1feb1aa..4eb262c 100644
--- a/common/usbx_device_classes/src/ux_device_class_video_uninitialize.c
+++ b/common/usbx_device_classes/src/ux_device_class_video_uninitialize.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_video_uninitialize PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -65,10 +65,11 @@
/* DATE NAME DESCRIPTION */
/* */
/* 04-25-2022 Chaoqiong Xiao Initial Version 6.1.11 */
-/* xx-xx-xxxx Chaoqiong Xiao Modified comment(s), */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
/* added a new mode to manage */
-/* endpoint buffer in classes, */
-/* resulting in version 6.x */
+/* endpoint buffer in classes */
+/* with zero copy enabled, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_video_uninitialize(UX_SLAVE_CLASS_COMMAND *command)
@@ -98,9 +99,6 @@ ULONG i;
_ux_utility_thread_delete(&stream -> ux_device_class_video_stream_thread);
_ux_utility_memory_free(stream -> ux_device_class_video_stream_thread_stack);
#endif
-#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
- _ux_utility_memory_free(stream -> ux_device_class_video_stream_endpoint_buffer);
-#endif
_ux_utility_memory_free(stream -> ux_device_class_video_stream_buffer);
/* Next stream instance. */
diff --git a/common/usbx_device_classes/src/ux_device_class_video_write_payload_commit.c b/common/usbx_device_classes/src/ux_device_class_video_write_payload_commit.c
index da182c8..1bfaaf2 100644
--- a/common/usbx_device_classes/src/ux_device_class_video_write_payload_commit.c
+++ b/common/usbx_device_classes/src/ux_device_class_video_write_payload_commit.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_video_write_payload_commit PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -65,8 +65,8 @@
/* DATE NAME DESCRIPTION */
/* */
/* 04-25-2022 Chaoqiong Xiao Initial Version 6.1.11 */
-/* xx-xx-xxxx Yajun Xia Modified comment(s), */
-/* resulting in version 6.x */
+/* 10-31-2023 Yajun Xia Modified comment(s), */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_video_write_payload_commit(UX_DEVICE_CLASS_VIDEO_STREAM *stream, ULONG length)
@@ -129,7 +129,7 @@ UCHAR *next_pos;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_video_write_payload_commit PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -162,7 +162,7 @@ UCHAR *next_pos;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_video_write_payload_commit(UX_DEVICE_CLASS_VIDEO_STREAM *stream, ULONG length)
diff --git a/common/usbx_device_classes/src/ux_device_class_video_write_payload_get.c b/common/usbx_device_classes/src/ux_device_class_video_write_payload_get.c
index 86431e7..6fd2a5f 100644
--- a/common/usbx_device_classes/src/ux_device_class_video_write_payload_get.c
+++ b/common/usbx_device_classes/src/ux_device_class_video_write_payload_get.c
@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_video_write_payload_get PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -68,8 +68,8 @@
/* DATE NAME DESCRIPTION */
/* */
/* 04-25-2022 Chaoqiong Xiao Initial Version 6.1.11 */
-/* xx-xx-xxxx Yajun Xia Modified comment(s), */
-/* resulting in version 6.x */
+/* 10-31-2023 Yajun Xia Modified comment(s), */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_video_write_payload_get(UX_DEVICE_CLASS_VIDEO_STREAM *stream, UCHAR **payload, ULONG *length)
@@ -118,7 +118,7 @@ UX_SLAVE_DEVICE *device;
/* FUNCTION RELEASE */
/* */
/* _uxe_device_class_video_write_payload_get PORTABLE C */
-/* 6.x */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Yajun Xia, Microsoft Corporation */
@@ -154,7 +154,7 @@ UX_SLAVE_DEVICE *device;
/* */
/* DATE NAME DESCRIPTION */
/* */
-/* xx-xx-xxxx Yajun Xia Initial Version 6.x */
+/* 10-31-2023 Yajun Xia Initial Version 6.3.0 */
/* */
/**************************************************************************/
UINT _uxe_device_class_video_write_payload_get(UX_DEVICE_CLASS_VIDEO_STREAM *stream, UCHAR **payload, ULONG *length)
diff --git a/common/usbx_device_classes/src/ux_device_class_video_write_task_function.c b/common/usbx_device_classes/src/ux_device_class_video_write_task_function.c
index 55dba42..0fe5b8c 100644
--- a/common/usbx_device_classes/src/ux_device_class_video_write_task_function.c
+++ b/common/usbx_device_classes/src/ux_device_class_video_write_task_function.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_video_write_task_function PORTABLE C */
-/* 6.2.0 */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -72,6 +72,10 @@
/* DATE NAME DESCRIPTION */
/* */
/* 10-31-2022 Chaoqiong Xiao Initial Version 6.2.0 */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* useed zero copy when class */
+/* owns endpoint buffer, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
UINT _ux_device_class_video_write_task_function(UX_DEVICE_CLASS_VIDEO_STREAM *stream)
@@ -119,9 +123,19 @@ UINT status;
/* Start payload transfer anyway (even ZLP). */
transfer_length = stream -> ux_device_class_video_stream_transfer_pos -> ux_device_class_video_payload_length;
+
+#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+
+ /* Zero copy: directly use frame buffer for transfer. */
+ transfer -> ux_slave_transfer_request_data_pointer = stream ->
+ ux_device_class_video_stream_transfer_pos -> ux_device_class_video_payload_data;
+#else
+
+ /* Copy frame buffer to transfer buffer. */
if (transfer_length)
_ux_utility_memory_copy(transfer -> ux_slave_transfer_request_data_pointer,
stream -> ux_device_class_video_stream_transfer_pos -> ux_device_class_video_payload_data, transfer_length); /* Use case of memcpy is verified. */
+#endif
/* Reset transfer state. */
UX_SLAVE_TRANSFER_STATE_RESET(transfer);
diff --git a/common/usbx_device_classes/src/ux_device_class_video_write_thread_entry.c b/common/usbx_device_classes/src/ux_device_class_video_write_thread_entry.c
index 3dce636..e28de0c 100644
--- a/common/usbx_device_classes/src/ux_device_class_video_write_thread_entry.c
+++ b/common/usbx_device_classes/src/ux_device_class_video_write_thread_entry.c
@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _ux_device_class_video_write_thread_entry PORTABLE C */
-/* 6.2.0 */
+/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
@@ -72,6 +72,10 @@
/* 10-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added error statistics, */
/* resulting in version 6.2.0 */
+/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
+/* useed zero copy when class */
+/* owns endpoint buffer, */
+/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
VOID _ux_device_class_video_write_thread_entry(ULONG video_stream)
@@ -112,9 +116,19 @@ ULONG actual_length;
/* Start payload transfer anyway (even ZLP). */
transfer_length = stream -> ux_device_class_video_stream_transfer_pos -> ux_device_class_video_payload_length;
+
+#if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
+
+ /* Zero copy: directly use frame buffer for transfer. */
+ transfer -> ux_slave_transfer_request_data_pointer = stream ->
+ ux_device_class_video_stream_transfer_pos -> ux_device_class_video_payload_data;
+#else
+
+ /* Copy frame buffer to transfer buffer. */
if (transfer_length)
_ux_utility_memory_copy(transfer -> ux_slave_transfer_request_data_pointer,
stream -> ux_device_class_video_stream_transfer_pos -> ux_device_class_video_payload_data, transfer_length); /* Use case of memcpy is verified. */
+#endif
/* Issue transfer request, thread blocked until transfer done. */
status = _ux_device_stack_transfer_request(transfer, transfer_length, transfer_length);