<p>Kévin Redon has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/13675">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">add ASFv4 M2M middleware<br><br>Change-Id: Ib07755b2c5974af70817f5460fb0f358c631452a<br>---<br>M sysmoOCTSIM/AtmelStart.gpdsc<br>M sysmoOCTSIM/atmel_start.c<br>M sysmoOCTSIM/atmel_start.h<br>M sysmoOCTSIM/atmel_start_config.atstart<br>M sysmoOCTSIM/config/hpl_dmac_config.h<br>A sysmoOCTSIM/dma_m2m/dma_memory.c<br>A sysmoOCTSIM/dma_m2m/dma_memory.h<br>A sysmoOCTSIM/dma_m2m/dma_memory_config.h<br>A sysmoOCTSIM/documentation/dma_m2m.rst<br>M sysmoOCTSIM/gcc/Makefile<br>10 files changed, 359 insertions(+), 19 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ccid-firmware refs/changes/75/13675/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/sysmoOCTSIM/AtmelStart.gpdsc b/sysmoOCTSIM/AtmelStart.gpdsc</span><br><span>index 5d35944..05dcb15 100644</span><br><span>--- a/sysmoOCTSIM/AtmelStart.gpdsc</span><br><span>+++ b/sysmoOCTSIM/AtmelStart.gpdsc</span><br><span>@@ -164,6 +164,9 @@</span><br><span>         <file category="header" condition="ARMCC, GCC, IAR" name="usb/usb_includes.h"/></span><br><span>         <file category="source" condition="ARMCC, GCC, IAR" name="usb/usb_protocol.c"/></span><br><span>         <file category="header" condition="ARMCC, GCC, IAR" name="usb/usb_protocol.h"/></span><br><span style="color: hsl(120, 100%, 40%);">+        <file category="source" condition="ARMCC, GCC, IAR" name="dma_m2m/dma_memory.c"/></span><br><span style="color: hsl(120, 100%, 40%);">+        <file category="header" condition="ARMCC, GCC, IAR" name="dma_m2m/dma_memory.h"/></span><br><span style="color: hsl(120, 100%, 40%);">+        <file category="doc" condition="ARMCC, GCC, IAR" name="documentation/dma_m2m.rst"/></span><br><span>         <file category="doc" condition="ARMCC, GCC, IAR" name="documentation/stdio.rst"/></span><br><span>         <file category="source" condition="GCC" name="stdio_redirect/gcc/read.c"/></span><br><span>         <file category="source" condition="GCC" name="stdio_redirect/gcc/write.c"/></span><br><span>@@ -210,6 +213,8 @@</span><br><span>         <file category="source" condition="ARMCC, GCC, IAR" name="hpl/usb/hpl_usb.c"/></span><br><span>         <file category="source" condition="ARMCC, GCC, IAR" name="usb_start.c"/></span><br><span>         <file category="header" condition="ARMCC, GCC, IAR" name="usb_start.h"/></span><br><span style="color: hsl(120, 100%, 40%);">+        <file category="source" condition="ARMCC, GCC, IAR" name="dma_m2m_main.c"/></span><br><span style="color: hsl(120, 100%, 40%);">+        <file category="header" condition="ARMCC, GCC, IAR" name="dma_m2m_main.h"/></span><br><span>         <file category="source" condition="ARMCC, GCC, IAR" name="stdio_start.c"/></span><br><span>         <file category="header" condition="ARMCC, GCC, IAR" name="stdio_start.h"/></span><br><span>         <file category="header" condition="ARMCC, GCC, IAR" name="atmel_start.h"/></span><br><span>@@ -225,6 +230,7 @@</span><br><span>         <file attr="config" category="header" condition="ARMCC, GCC, IAR" name="config/hpl_usb_config.h"/></span><br><span>         <file attr="config" category="header" condition="ARMCC, GCC, IAR" name="config/peripheral_clk_config.h"/></span><br><span>         <file attr="config" category="header" condition="ARMCC, GCC, IAR" name="config/usbd_config.h"/></span><br><span style="color: hsl(120, 100%, 40%);">+        <file attr="config" category="header" condition="ARMCC, GCC, IAR" name="dma_m2m/dma_memory_config.h"/></span><br><span>         <file attr="config" category="header" condition="ARMCC, GCC, IAR" name="config/stdio_redirect_config.h"/></span><br><span>         <file category="include" condition="ARMCC, GCC, IAR" name=""/></span><br><span>         <file category="include" condition="ARMCC, GCC, IAR" name="config"/></span><br><span>@@ -251,6 +257,8 @@</span><br><span>         <file category="include" condition="ARMCC, GCC, IAR" name="usb/class/cdc/device"/></span><br><span>         <file category="include" condition="ARMCC, GCC, IAR" name="usb/device"/></span><br><span>         <file category="include" condition="ARMCC, GCC, IAR" name=""/></span><br><span style="color: hsl(120, 100%, 40%);">+        <file category="include" condition="ARMCC, GCC, IAR" name="dma_m2m"/></span><br><span style="color: hsl(120, 100%, 40%);">+        <file category="include" condition="ARMCC, GCC, IAR" name=""/></span><br><span>         <file category="include" condition="ARMCC, GCC, IAR" name="config"/></span><br><span>         <file category="include" condition="ARMCC, GCC, IAR" name="stdio_redirect"/></span><br><span>         <file category="include" condition="ARMCC, GCC, IAR" name=""/></span><br><span>diff --git a/sysmoOCTSIM/atmel_start.c b/sysmoOCTSIM/atmel_start.c</span><br><span>index fc6016a..fd566dd 100644</span><br><span>--- a/sysmoOCTSIM/atmel_start.c</span><br><span>+++ b/sysmoOCTSIM/atmel_start.c</span><br><span>@@ -1,5 +1,11 @@</span><br><span> #include <atmel_start.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/** Memory to memory DMA callback */</span><br><span style="color: hsl(120, 100%, 40%);">+static void M2M_DMA_complete_cb(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   dma_m2m_complete_flag = true;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /**</span><br><span>  * Initializes MCU, drivers and middleware in the project</span><br><span>  **/</span><br><span>@@ -7,5 +13,7 @@</span><br><span> {</span><br><span>       system_init();</span><br><span>       usb_init();</span><br><span style="color: hsl(120, 100%, 40%);">+   dma_memory_init();</span><br><span style="color: hsl(120, 100%, 40%);">+    dma_memory_register_callback(DMA_MEMORY_COMPLETE_CB, M2M_DMA_complete_cb);</span><br><span>   stdio_redirect_init();</span><br><span> }</span><br><span>diff --git a/sysmoOCTSIM/atmel_start.h b/sysmoOCTSIM/atmel_start.h</span><br><span>index 92afa47..4892cbd 100644</span><br><span>--- a/sysmoOCTSIM/atmel_start.h</span><br><span>+++ b/sysmoOCTSIM/atmel_start.h</span><br><span>@@ -5,10 +5,15 @@</span><br><span> extern "C" {</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <dma_memory.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #include "driver_init.h"</span><br><span> #include "usb_start.h"</span><br><span> #include "stdio_start.h"</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/** flag set when the memory to memory DMA is complete */</span><br><span style="color: hsl(120, 100%, 40%);">+volatile bool dma_m2m_complete_flag;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /**</span><br><span>  * Initializes MCU, drivers and middleware in the project</span><br><span>  **/</span><br><span>diff --git a/sysmoOCTSIM/atmel_start_config.atstart b/sysmoOCTSIM/atmel_start_config.atstart</span><br><span>index 290fa89..51ec4f4 100644</span><br><span>--- a/sysmoOCTSIM/atmel_start_config.atstart</span><br><span>+++ b/sysmoOCTSIM/atmel_start_config.atstart</span><br><span>@@ -82,6 +82,15 @@</span><br><span>     dependencies:</span><br><span>       USB Device Stack Core Instance: USB_DEVICE_STACK_CORE_INSTANCE</span><br><span>       USB Class CDC: USB_CLASS_CDC</span><br><span style="color: hsl(120, 100%, 40%);">+  M2M_DMA_0:</span><br><span style="color: hsl(120, 100%, 40%);">+    user_label: M2M_DMA_0</span><br><span style="color: hsl(120, 100%, 40%);">+    configuration:</span><br><span style="color: hsl(120, 100%, 40%);">+      conf_channel: 0</span><br><span style="color: hsl(120, 100%, 40%);">+    definition: Atmel:MEMORY_DMA:0.0.1::M2M_DMA</span><br><span style="color: hsl(120, 100%, 40%);">+    functionality: M2M_DMA</span><br><span style="color: hsl(120, 100%, 40%);">+    api: DMA:M2M:Core</span><br><span style="color: hsl(120, 100%, 40%);">+    dependencies:</span><br><span style="color: hsl(120, 100%, 40%);">+      DMAC: DMAC</span><br><span>   STDIO_REDIRECT_0:</span><br><span>     user_label: STDIO_REDIRECT_0</span><br><span>     configuration: {}</span><br><span>@@ -209,7 +218,7 @@</span><br><span>         the transaction</span><br><span>       dmac_blockact_9: Channel will be disabled if it is the last block transfer in</span><br><span>         the transaction</span><br><span style="color: hsl(0, 100%, 40%);">-      dmac_channel_0_settings: false</span><br><span style="color: hsl(120, 100%, 40%);">+      dmac_channel_0_settings: true</span><br><span>       dmac_channel_10_settings: false</span><br><span>       dmac_channel_11_settings: false</span><br><span>       dmac_channel_12_settings: false</span><br><span>@@ -242,7 +251,7 @@</span><br><span>       dmac_channel_8_settings: false</span><br><span>       dmac_channel_9_settings: false</span><br><span>       dmac_dbgrun: false</span><br><span style="color: hsl(0, 100%, 40%);">-      dmac_dstinc_0: false</span><br><span style="color: hsl(120, 100%, 40%);">+      dmac_dstinc_0: true</span><br><span>       dmac_dstinc_1: false</span><br><span>       dmac_dstinc_10: false</span><br><span>       dmac_dstinc_11: false</span><br><span>@@ -274,7 +283,7 @@</span><br><span>       dmac_dstinc_7: false</span><br><span>       dmac_dstinc_8: false</span><br><span>       dmac_dstinc_9: false</span><br><span style="color: hsl(0, 100%, 40%);">-      dmac_enable: false</span><br><span style="color: hsl(120, 100%, 40%);">+      dmac_enable: true</span><br><span>       dmac_evact_0: No action</span><br><span>       dmac_evact_1: No action</span><br><span>       dmac_evact_10: No action</span><br><span>@@ -479,7 +488,7 @@</span><br><span>       dmac_runstdby_7: false</span><br><span>       dmac_runstdby_8: false</span><br><span>       dmac_runstdby_9: false</span><br><span style="color: hsl(0, 100%, 40%);">-      dmac_srcinc_0: false</span><br><span style="color: hsl(120, 100%, 40%);">+      dmac_srcinc_0: true</span><br><span>       dmac_srcinc_1: false</span><br><span>       dmac_srcinc_10: false</span><br><span>       dmac_srcinc_11: false</span><br><span>diff --git a/sysmoOCTSIM/config/hpl_dmac_config.h b/sysmoOCTSIM/config/hpl_dmac_config.h</span><br><span>index 90499fc..c736778 100644</span><br><span>--- a/sysmoOCTSIM/config/hpl_dmac_config.h</span><br><span>+++ b/sysmoOCTSIM/config/hpl_dmac_config.h</span><br><span>@@ -8,7 +8,7 @@</span><br><span> // <i> Indicates whether dmac is enabled or not</span><br><span> // <id> dmac_enable</span><br><span> #ifndef CONF_DMAC_ENABLE</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_DMAC_ENABLE 0</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_DMAC_ENABLE 1</span><br><span> #endif</span><br><span> </span><br><span> // <q> Priority Level 0</span><br><span>@@ -105,7 +105,7 @@</span><br><span> // <e> Channel 0 settings</span><br><span> // <id> dmac_channel_0_settings</span><br><span> #ifndef CONF_DMAC_CHANNEL_0_SETTINGS</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_DMAC_CHANNEL_0_SETTINGS 0</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_DMAC_CHANNEL_0_SETTINGS 1</span><br><span> #endif</span><br><span> </span><br><span> // <q> Channel Run in Standby</span><br><span>@@ -284,14 +284,14 @@</span><br><span> // <i> Indicates whether the source address incrementation is enabled or not</span><br><span> // <id> dmac_srcinc_0</span><br><span> #ifndef CONF_DMAC_SRCINC_0</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_DMAC_SRCINC_0 0</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_DMAC_SRCINC_0 1</span><br><span> #endif</span><br><span> </span><br><span> // <q> Destination Address Increment</span><br><span> // <i> Indicates whether the destination address incrementation is enabled or not</span><br><span> // <id> dmac_dstinc_0</span><br><span> #ifndef CONF_DMAC_DSTINC_0</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_DMAC_DSTINC_0 0</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_DMAC_DSTINC_0 1</span><br><span> #endif</span><br><span> </span><br><span> // <o> Beat Size</span><br><span>diff --git a/sysmoOCTSIM/dma_m2m/dma_memory.c b/sysmoOCTSIM/dma_m2m/dma_memory.c</span><br><span>new file mode 100644</span><br><span>index 0000000..f395114</span><br><span>--- /dev/null</span><br><span>+++ b/sysmoOCTSIM/dma_m2m/dma_memory.c</span><br><span>@@ -0,0 +1,143 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \file</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Memory with DMA functionality implementation.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (c) 2016-2018 Microchip Technology Inc. and its subsidiaries.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \asf_license_start</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \page License</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Subject to your compliance with these terms, you may use Microchip</span><br><span style="color: hsl(120, 100%, 40%);">+ * software and any derivatives exclusively with Microchip products.</span><br><span style="color: hsl(120, 100%, 40%);">+ * It is your responsibility to comply with third party license terms applicable</span><br><span style="color: hsl(120, 100%, 40%);">+ * to your use of third party software (including open source software) that</span><br><span style="color: hsl(120, 100%, 40%);">+ * may accompany Microchip software.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES,</span><br><span style="color: hsl(120, 100%, 40%);">+ * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,</span><br><span style="color: hsl(120, 100%, 40%);">+ * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,</span><br><span style="color: hsl(120, 100%, 40%);">+ * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE</span><br><span style="color: hsl(120, 100%, 40%);">+ * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL</span><br><span style="color: hsl(120, 100%, 40%);">+ * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE</span><br><span style="color: hsl(120, 100%, 40%);">+ * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE</span><br><span style="color: hsl(120, 100%, 40%);">+ * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE.  TO THE FULLEST EXTENT</span><br><span style="color: hsl(120, 100%, 40%);">+ * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY</span><br><span style="color: hsl(120, 100%, 40%);">+ * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,</span><br><span style="color: hsl(120, 100%, 40%);">+ * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \asf_license_stop</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include "dma_memory.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "dma_memory_config.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include <utils_assert.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <utils.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <hal_atomic.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Driver version</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+#define DRIVER_VERSION 0x00000001u</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief memory with dma descriptor instance</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+static struct dma_memory_descriptor descr;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \internal Process transfer done interrupts</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] resource The pointer to memory resource</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+static void dma_transfer_done(struct _dma_resource *resource)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       (void)resource;</span><br><span style="color: hsl(120, 100%, 40%);">+       if (descr.memory_cb.complete) {</span><br><span style="color: hsl(120, 100%, 40%);">+               descr.memory_cb.complete();</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \internal Process transfer error interrupts</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] resource The pointer to memory resource</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+static void dma_memory_error(struct _dma_resource *resource)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  (void)resource;</span><br><span style="color: hsl(120, 100%, 40%);">+       if (descr.memory_cb.error) {</span><br><span style="color: hsl(120, 100%, 40%);">+          descr.memory_cb.error();</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Initialize DMA</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int32_t dma_memory_init(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  _dma_get_channel_resource(&descr.resource, CONF_DMA_MEMORY_CHANNEL);</span><br><span style="color: hsl(120, 100%, 40%);">+      descr.resource->dma_cb.transfer_done = dma_transfer_done;</span><br><span style="color: hsl(120, 100%, 40%);">+  descr.resource->dma_cb.error         = dma_memory_error;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ return ERR_NONE;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Register DMA callback</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int32_t dma_memory_register_callback(const enum dma_memory_callback_type type, dma_memory_cb_t cb)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       switch (type) {</span><br><span style="color: hsl(120, 100%, 40%);">+       case DMA_MEMORY_COMPLETE_CB:</span><br><span style="color: hsl(120, 100%, 40%);">+          descr.memory_cb.complete = cb;</span><br><span style="color: hsl(120, 100%, 40%);">+                break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      case DMA_MEMORY_ERROR_CB:</span><br><span style="color: hsl(120, 100%, 40%);">+             descr.memory_cb.error = cb;</span><br><span style="color: hsl(120, 100%, 40%);">+           break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      default:</span><br><span style="color: hsl(120, 100%, 40%);">+              return ERR_INVALID_ARG;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   _dma_set_irq_state(CONF_DMA_MEMORY_CHANNEL, (enum _dma_callback_type)type, (cb != NULL));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return ERR_NONE;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Memory copy with dma</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int32_t dma_memcpy(void *dst, void *src, uint32_t size)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   _dma_srcinc_enable(CONF_DMA_MEMORY_CHANNEL, true);</span><br><span style="color: hsl(120, 100%, 40%);">+    _dma_dstinc_enable(CONF_DMA_MEMORY_CHANNEL, true);</span><br><span style="color: hsl(120, 100%, 40%);">+    _dma_set_destination_address(CONF_DMA_MEMORY_CHANNEL, dst);</span><br><span style="color: hsl(120, 100%, 40%);">+   _dma_set_source_address(CONF_DMA_MEMORY_CHANNEL, src);</span><br><span style="color: hsl(120, 100%, 40%);">+        _dma_set_data_amount(CONF_DMA_MEMORY_CHANNEL, size);</span><br><span style="color: hsl(120, 100%, 40%);">+  _dma_enable_transaction(CONF_DMA_MEMORY_CHANNEL, true);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     return ERR_NONE;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Memory set with dma</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int32_t dma_memset(void *dst, int32_t ch, uint32_t size)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   static int32_t tmp_ch;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      tmp_ch = ch;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        _dma_set_source_address(CONF_DMA_MEMORY_CHANNEL, &tmp_ch);</span><br><span style="color: hsl(120, 100%, 40%);">+        _dma_srcinc_enable(CONF_DMA_MEMORY_CHANNEL, false);</span><br><span style="color: hsl(120, 100%, 40%);">+   _dma_dstinc_enable(CONF_DMA_MEMORY_CHANNEL, true);</span><br><span style="color: hsl(120, 100%, 40%);">+    _dma_set_destination_address(CONF_DMA_MEMORY_CHANNEL, dst);</span><br><span style="color: hsl(120, 100%, 40%);">+   _dma_set_data_amount(CONF_DMA_MEMORY_CHANNEL, size);</span><br><span style="color: hsl(120, 100%, 40%);">+  _dma_enable_transaction(CONF_DMA_MEMORY_CHANNEL, true);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     return ERR_NONE;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/sysmoOCTSIM/dma_m2m/dma_memory.h b/sysmoOCTSIM/dma_m2m/dma_memory.h</span><br><span>new file mode 100644</span><br><span>index 0000000..3bd6dc9</span><br><span>--- /dev/null</span><br><span>+++ b/sysmoOCTSIM/dma_m2m/dma_memory.h</span><br><span>@@ -0,0 +1,132 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \file</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Memory with DMA functionality declaration.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (c) 2016-2018 Microchip Technology Inc. and its subsidiaries.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \asf_license_start</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \page License</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Subject to your compliance with these terms, you may use Microchip</span><br><span style="color: hsl(120, 100%, 40%);">+ * software and any derivatives exclusively with Microchip products.</span><br><span style="color: hsl(120, 100%, 40%);">+ * It is your responsibility to comply with third party license terms applicable</span><br><span style="color: hsl(120, 100%, 40%);">+ * to your use of third party software (including open source software) that</span><br><span style="color: hsl(120, 100%, 40%);">+ * may accompany Microchip software.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES,</span><br><span style="color: hsl(120, 100%, 40%);">+ * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,</span><br><span style="color: hsl(120, 100%, 40%);">+ * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,</span><br><span style="color: hsl(120, 100%, 40%);">+ * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE</span><br><span style="color: hsl(120, 100%, 40%);">+ * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL</span><br><span style="color: hsl(120, 100%, 40%);">+ * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE</span><br><span style="color: hsl(120, 100%, 40%);">+ * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE</span><br><span style="color: hsl(120, 100%, 40%);">+ * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE.  TO THE FULLEST EXTENT</span><br><span style="color: hsl(120, 100%, 40%);">+ * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY</span><br><span style="color: hsl(120, 100%, 40%);">+ * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,</span><br><span style="color: hsl(120, 100%, 40%);">+ * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \asf_license_stop</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#ifndef DMA_MEMORY_H_INCLUDED</span><br><span style="color: hsl(120, 100%, 40%);">+#define DMA_MEMORY_H_INCLUDED</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <hpl_dma.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef __cplusplus</span><br><span style="color: hsl(120, 100%, 40%);">+extern "C" {</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \addtogroup dma_memory</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \section dma_rev Revision History</span><br><span style="color: hsl(120, 100%, 40%);">+ * - v0.0.0.1 Initial Commit</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ *@{</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Memory with DMA descriptor</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * The Memory with DMA descriptor forward declaration.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+struct dma_memory_descriptor;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief memory with dma callback type</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+typedef void (*dma_memory_cb_t)(void);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Memory with DMA callback types</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+enum dma_memory_callback_type { DMA_MEMORY_COMPLETE_CB, DMA_MEMORY_ERROR_CB };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Memory with DMA callbacks</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+struct dma_memory_callbacks {</span><br><span style="color: hsl(120, 100%, 40%);">+  dma_memory_cb_t complete;</span><br><span style="color: hsl(120, 100%, 40%);">+     dma_memory_cb_t error;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Memory with DMA descriptor</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+struct dma_memory_descriptor {</span><br><span style="color: hsl(120, 100%, 40%);">+  struct _dma_resource *      resource;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct dma_memory_callbacks memory_cb;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Initialize Memory with DMA</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \return Initialization status.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int32_t dma_memory_init(void);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Register Memory with DMA callback</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] type Callback type</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] cb A callback function, passing NULL de-registers callback</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \return The status of callback assignment.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \retval ERR_INVALID_ARG Passed parameters were invalid</span><br><span style="color: hsl(120, 100%, 40%);">+ * \retval ERR_NONE A callback is registered successfully</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int32_t dma_memory_register_callback(const enum dma_memory_callback_type type, dma_memory_cb_t cb);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief dma memory copy</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] dst The pointer to destination address for transfer</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] src The pointer to source address for transfer</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] size The transfer size</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \return the status of operation`</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int32_t dma_memcpy(void *dst, void *src, uint32_t size);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief dma memory set</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] dst The pointer to address to  fill</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] ch The value to be filled</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] size Number of bytes to set to the value</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \return the status of operation</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int32_t dma_memset(void *dst, int32_t ch, uint32_t size);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**@}*/</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef __cplusplus</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#endif /* DMA_MEMORY_H_INCLUDED */</span><br><span>diff --git a/sysmoOCTSIM/dma_m2m/dma_memory_config.h b/sysmoOCTSIM/dma_m2m/dma_memory_config.h</span><br><span>new file mode 100644</span><br><span>index 0000000..a5dba3c</span><br><span>--- /dev/null</span><br><span>+++ b/sysmoOCTSIM/dma_m2m/dma_memory_config.h</span><br><span>@@ -0,0 +1,16 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* Auto-generated config file dma_memory_config.h */</span><br><span style="color: hsl(120, 100%, 40%);">+#ifndef DMA_MEMORY_CONFIG_H</span><br><span style="color: hsl(120, 100%, 40%);">+#define DMA_MEMORY_CONFIG_H</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+// <<< Use Configuration Wizard in Context Menu >>></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+//<o> Channel <0-15></span><br><span style="color: hsl(120, 100%, 40%);">+//<i> This defines DMA channel to be used</span><br><span style="color: hsl(120, 100%, 40%);">+//<id> conf_channel</span><br><span style="color: hsl(120, 100%, 40%);">+#ifndef CONF_DMA_MEMORY_CHANNEL</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_DMA_MEMORY_CHANNEL 0</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+// <<< end of configuration section >>></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#endif // DMA_MEMORY_CONFIG_H</span><br><span>diff --git a/sysmoOCTSIM/documentation/dma_m2m.rst b/sysmoOCTSIM/documentation/dma_m2m.rst</span><br><span>new file mode 100644</span><br><span>index 0000000..22bffcf</span><br><span>--- /dev/null</span><br><span>+++ b/sysmoOCTSIM/documentation/dma_m2m.rst</span><br><span>@@ -0,0 +1,15 @@</span><br><span style="color: hsl(120, 100%, 40%);">+Memory DMA</span><br><span style="color: hsl(120, 100%, 40%);">+==========</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Memory DMA is middleware which provides DMA-based versions of memcpy and memset</span><br><span style="color: hsl(120, 100%, 40%);">+functions.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Architecture and provided functionality</span><br><span style="color: hsl(120, 100%, 40%);">+---------------------------------------</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Memory DMA uses system DMA driver which varies depending on MCU. User must configure</span><br><span style="color: hsl(120, 100%, 40%);">+system DMA driver before using Memory DMA middleware.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DMA-based versions of memcpy and memset functions work asynchronously. Application</span><br><span style="color: hsl(120, 100%, 40%);">+can be notifications about completion of copy or set operation via callbacks.</span><br><span style="color: hsl(120, 100%, 40%);">+A callback can be registered via dma_memory_register_callback function.</span><br><span>\ No newline at end of file</span><br><span>diff --git a/sysmoOCTSIM/gcc/Makefile b/sysmoOCTSIM/gcc/Makefile</span><br><span>index 7496377..0191815 100644</span><br><span>--- a/sysmoOCTSIM/gcc/Makefile</span><br><span>+++ b/sysmoOCTSIM/gcc/Makefile</span><br><span>@@ -39,6 +39,7 @@</span><br><span> stdio_redirect \</span><br><span> hal/utils/src \</span><br><span> hpl/usb \</span><br><span style="color: hsl(120, 100%, 40%);">+dma_m2m \</span><br><span> hpl/pm \</span><br><span> hpl/cmcc \</span><br><span> hpl/gclk \</span><br><span>@@ -54,12 +55,13 @@</span><br><span> stdio_redirect/stdio_io.o \</span><br><span> stdio_redirect/gcc/write.o \</span><br><span> hpl/core/hpl_core_m4.o \</span><br><span style="color: hsl(120, 100%, 40%);">+hal/src/hal_cache.o \</span><br><span> usb/class/cdc/device/cdcdf_acm.o \</span><br><span> hal/utils/src/utils_syscalls.o \</span><br><span> stdio_redirect/gcc/read.o \</span><br><span style="color: hsl(0, 100%, 40%);">-usb_start.o \</span><br><span> gcc/system_same54.o \</span><br><span> hpl/usb/hpl_usb.o \</span><br><span style="color: hsl(120, 100%, 40%);">+dma_m2m/dma_memory.o \</span><br><span> hal/src/hal_delay.o \</span><br><span> hpl/pm/hpl_pm.o \</span><br><span> hpl/core/hpl_init.o \</span><br><span>@@ -76,7 +78,6 @@</span><br><span> hal/src/hal_init.o \</span><br><span> gcc/gcc/startup_same54.o \</span><br><span> hal/src/hal_usb_device.o \</span><br><span style="color: hsl(0, 100%, 40%);">-main.o \</span><br><span> i2c_bitbang.o \</span><br><span> octsim_i2c.o \</span><br><span> ncn8025.o \</span><br><span>@@ -87,10 +88,11 @@</span><br><span> hal/src/hal_usart_async.o \</span><br><span> hpl/sercom/hpl_sercom.o \</span><br><span> hal/utils/src/utils_ringbuffer.o \</span><br><span style="color: hsl(120, 100%, 40%);">+main.o \</span><br><span> hal/src/hal_gpio.o \</span><br><span> hal/utils/src/utils_event.o \</span><br><span> hal/src/hal_sleep.o \</span><br><span style="color: hsl(0, 100%, 40%);">-hal/src/hal_cache.o \</span><br><span style="color: hsl(120, 100%, 40%);">+usb_start.o \</span><br><span> hpl/cmcc/hpl_cmcc.o \</span><br><span> atmel_start.o \</span><br><span> usb/device/usbdc.o \</span><br><span>@@ -101,12 +103,13 @@</span><br><span> "stdio_redirect/stdio_io.o" \</span><br><span> "stdio_redirect/gcc/write.o" \</span><br><span> "hpl/core/hpl_core_m4.o" \</span><br><span style="color: hsl(120, 100%, 40%);">+"hal/src/hal_cache.o" \</span><br><span> "usb/class/cdc/device/cdcdf_acm.o" \</span><br><span> "hal/utils/src/utils_syscalls.o" \</span><br><span> "stdio_redirect/gcc/read.o" \</span><br><span style="color: hsl(0, 100%, 40%);">-"usb_start.o" \</span><br><span> "gcc/system_same54.o" \</span><br><span> "hpl/usb/hpl_usb.o" \</span><br><span style="color: hsl(120, 100%, 40%);">+"dma_m2m/dma_memory.o" \</span><br><span> "hal/src/hal_delay.o" \</span><br><span> "hpl/pm/hpl_pm.o" \</span><br><span> "hpl/core/hpl_init.o" \</span><br><span>@@ -123,7 +126,6 @@</span><br><span> "hal/src/hal_init.o" \</span><br><span> "gcc/gcc/startup_same54.o" \</span><br><span> "hal/src/hal_usb_device.o" \</span><br><span style="color: hsl(0, 100%, 40%);">-"main.o" \</span><br><span> "i2c_bitbang.o" \</span><br><span> "octsim_i2c.o" \</span><br><span> "ncn8025.o" \</span><br><span>@@ -134,10 +136,11 @@</span><br><span> "hal/src/hal_usart_async.o" \</span><br><span> "hpl/sercom/hpl_sercom.o" \</span><br><span> "hal/utils/src/utils_ringbuffer.o" \</span><br><span style="color: hsl(120, 100%, 40%);">+"main.o" \</span><br><span> "hal/src/hal_gpio.o" \</span><br><span> "hal/utils/src/utils_event.o" \</span><br><span> "hal/src/hal_sleep.o" \</span><br><span style="color: hsl(0, 100%, 40%);">-"hal/src/hal_cache.o" \</span><br><span style="color: hsl(120, 100%, 40%);">+"usb_start.o" \</span><br><span> "hpl/cmcc/hpl_cmcc.o" \</span><br><span> "atmel_start.o" \</span><br><span> "usb/device/usbdc.o" \</span><br><span>@@ -147,6 +150,7 @@</span><br><span> DEPS := $(OBJS:%.o=%.d)</span><br><span> </span><br><span> DEPS_AS_ARGS +=  \</span><br><span style="color: hsl(120, 100%, 40%);">+"dma_m2m/dma_memory.d" \</span><br><span> "stdio_redirect/stdio_io.d" \</span><br><span> "hal/utils/src/utils_event.d" \</span><br><span> "hal/src/hal_io.d" \</span><br><span>@@ -157,6 +161,7 @@</span><br><span> "stdio_redirect/gcc/write.d" \</span><br><span> "gcc/gcc/startup_same54.d" \</span><br><span> "hpl/usb/hpl_usb.d" \</span><br><span style="color: hsl(120, 100%, 40%);">+"main.d" \</span><br><span> "hal/utils/src/utils_list.d" \</span><br><span> "hpl/cmcc/hpl_cmcc.d" \</span><br><span> "hpl/dmac/hpl_dmac.d" \</span><br><span>@@ -176,7 +181,6 @@</span><br><span> "stdio_redirect/gcc/read.d" \</span><br><span> "hal/src/hal_usart_async.d" \</span><br><span> "hpl/osc32kctrl/hpl_osc32kctrl.d" \</span><br><span style="color: hsl(0, 100%, 40%);">-"main.d" \</span><br><span> "i2c_bitbang.d" \</span><br><span> "octsim_i2c.d" \</span><br><span> "ncn8025.d" \</span><br><span>@@ -238,7 +242,7 @@</span><br><span>         @echo ARM/GNU C Compiler</span><br><span>     $(QUOTE)arm-none-eabi-gcc$(QUOTE) -x c -mthumb -DDEBUG -Os -ffunction-sections -mlong-calls -g3 -Wall -c -std=gnu99 \</span><br><span> -D__SAME54N19A__ -mcpu=cortex-m4 -mfloat-abi=softfp -mfpu=fpv4-sp-d16 \</span><br><span style="color: hsl(0, 100%, 40%);">--I"../" -I"../config" -I"../examples" -I"../hal/include" -I"../hal/utils/include" -I"../hpl/cmcc" -I"../hpl/core" -I"../hpl/dmac" -I"../hpl/gclk" -I"../hpl/mclk" -I"../hpl/osc32kctrl" -I"../hpl/oscctrl" -I"../hpl/pm" -I"../hpl/port" -I"../hpl/ramecc" -I"../hpl/sercom" -I"../hpl/usb" -I"../hri" -I"../" -I"../config" -I"../usb" -I"../usb/class/cdc" -I"../usb/class/cdc/device" -I"../usb/device" -I"../" -I"../config" -I"../stdio_redirect" -I"../" -I"../CMSIS/Include" -I"../include"  \</span><br><span style="color: hsl(120, 100%, 40%);">+-I"../" -I"../config" -I"../examples" -I"../hal/include" -I"../hal/utils/include" -I"../hpl/cmcc" -I"../hpl/core" -I"../hpl/dmac" -I"../hpl/gclk" -I"../hpl/mclk" -I"../hpl/osc32kctrl" -I"../hpl/oscctrl" -I"../hpl/pm" -I"../hpl/port" -I"../hpl/ramecc" -I"../hpl/sercom" -I"../hpl/usb" -I"../hri" -I"../" -I"../config" -I"../usb" -I"../usb/class/cdc" -I"../usb/class/cdc/device" -I"../usb/device" -I"../" -I"../config" -I"../stdio_redirect" -I"../" -I"../dma_m2m" -I"../" -I"../CMSIS/Include" -I"../include"  \</span><br><span> -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"  -o "$@" "$<"</span><br><span>         @echo Finished building: $<</span><br><span> </span><br><span>@@ -247,7 +251,7 @@</span><br><span>     @echo ARM/GNU Assembler</span><br><span>      $(QUOTE)arm-none-eabi-as$(QUOTE) -x c -mthumb -DDEBUG -Os -ffunction-sections -mlong-calls -g3 -Wall -c -std=gnu99 \</span><br><span> -D__SAME54N19A__ -mcpu=cortex-m4 -mfloat-abi=softfp -mfpu=fpv4-sp-d16 \</span><br><span style="color: hsl(0, 100%, 40%);">--I"../" -I"../config" -I"../examples" -I"../hal/include" -I"../hal/utils/include" -I"../hpl/cmcc" -I"../hpl/core" -I"../hpl/dmac" -I"../hpl/gclk" -I"../hpl/mclk" -I"../hpl/osc32kctrl" -I"../hpl/oscctrl" -I"../hpl/pm" -I"../hpl/port" -I"../hpl/ramecc" -I"../hpl/sercom" -I"../hpl/usb" -I"../hri" -I"../" -I"../config" -I"../usb" -I"../usb/class/cdc" -I"../usb/class/cdc/device" -I"../usb/device" -I"../" -I"../config" -I"../stdio_redirect" -I"../" -I"../CMSIS/Include" -I"../include"  \</span><br><span style="color: hsl(120, 100%, 40%);">+-I"../" -I"../config" -I"../examples" -I"../hal/include" -I"../hal/utils/include" -I"../hpl/cmcc" -I"../hpl/core" -I"../hpl/dmac" -I"../hpl/gclk" -I"../hpl/mclk" -I"../hpl/osc32kctrl" -I"../hpl/oscctrl" -I"../hpl/pm" -I"../hpl/port" -I"../hpl/ramecc" -I"../hpl/sercom" -I"../hpl/usb" -I"../hri" -I"../" -I"../config" -I"../usb" -I"../usb/class/cdc" -I"../usb/class/cdc/device" -I"../usb/device" -I"../" -I"../config" -I"../stdio_redirect" -I"../" -I"../dma_m2m" -I"../" -I"../CMSIS/Include" -I"../include"  \</span><br><span> -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"  -o "$@" "$<"</span><br><span>  @echo Finished building: $<</span><br><span> </span><br><span>@@ -256,7 +260,7 @@</span><br><span>     @echo ARM/GNU Preprocessing Assembler</span><br><span>        $(QUOTE)arm-none-eabi-gcc$(QUOTE) -x c -mthumb -DDEBUG -Os -ffunction-sections -mlong-calls -g3 -Wall -c -std=gnu99 \</span><br><span> -D__SAME54N19A__ -mcpu=cortex-m4 -mfloat-abi=softfp -mfpu=fpv4-sp-d16 \</span><br><span style="color: hsl(0, 100%, 40%);">--I"../" -I"../config" -I"../examples" -I"../hal/include" -I"../hal/utils/include" -I"../hpl/cmcc" -I"../hpl/core" -I"../hpl/dmac" -I"../hpl/gclk" -I"../hpl/mclk" -I"../hpl/osc32kctrl" -I"../hpl/oscctrl" -I"../hpl/pm" -I"../hpl/port" -I"../hpl/ramecc" -I"../hpl/sercom" -I"../hpl/usb" -I"../hri" -I"../" -I"../config" -I"../usb" -I"../usb/class/cdc" -I"../usb/class/cdc/device" -I"../usb/device" -I"../" -I"../config" -I"../stdio_redirect" -I"../" -I"../CMSIS/Include" -I"../include"  \</span><br><span style="color: hsl(120, 100%, 40%);">+-I"../" -I"../config" -I"../examples" -I"../hal/include" -I"../hal/utils/include" -I"../hpl/cmcc" -I"../hpl/core" -I"../hpl/dmac" -I"../hpl/gclk" -I"../hpl/mclk" -I"../hpl/osc32kctrl" -I"../hpl/oscctrl" -I"../hpl/pm" -I"../hpl/port" -I"../hpl/ramecc" -I"../hpl/sercom" -I"../hpl/usb" -I"../hri" -I"../" -I"../config" -I"../usb" -I"../usb/class/cdc" -I"../usb/class/cdc/device" -I"../usb/device" -I"../" -I"../config" -I"../stdio_redirect" -I"../" -I"../dma_m2m" -I"../" -I"../CMSIS/Include" -I"../include"  \</span><br><span> -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"  -o "$@" "$<"</span><br><span>         @echo Finished building: $<</span><br><span> </span><br><span>@@ -276,4 +280,4 @@</span><br><span>     rm -f $(DEPS_AS_ARGS)</span><br><span>        rm -f $(OUTPUT_FILE_NAME).a $(OUTPUT_FILE_NAME).hex $(OUTPUT_FILE_NAME).bin \</span><br><span>         $(OUTPUT_FILE_NAME).lss $(OUTPUT_FILE_NAME).eep $(OUTPUT_FILE_NAME).map \</span><br><span style="color: hsl(0, 100%, 40%);">-        $(OUTPUT_FILE_NAME).srec</span><br><span>\ No newline at end of file</span><br><span style="color: hsl(120, 100%, 40%);">+        $(OUTPUT_FILE_NAME).srec</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13675">change 13675</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/13675"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ccid-firmware </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ib07755b2c5974af70817f5460fb0f358c631452a </div>
<div style="display:none"> Gerrit-Change-Number: 13675 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Kévin Redon <kredon@sysmocom.de> </div>