CMSIS-Driver: minor update of all driver templates
diff --git a/ARM.CMSIS.pdsc b/ARM.CMSIS.pdsc
index 1731edd..05f6cff 100644
--- a/ARM.CMSIS.pdsc
+++ b/ARM.CMSIS.pdsc
@@ -11,7 +11,7 @@
     <release version="5.7.0-dev7">
       Active development...
       CMSIS-Core(M): 5.4.0
-        - Fixed device config define checks.  
+        - Fixed device config define checks.
       Devices:
         - Enable loop and branch info cache for Armv8.1-MML devices.
     </release>
@@ -3918,7 +3918,7 @@
       <description>Access to #include Driver_NAND.h file and code template for custom implementation</description>
       <files>
         <file category="header" name="CMSIS/Driver/Include/Driver_NAND.h" />
-        <!-- <file category="sourceC" attr="template" name="CMSIS/Driver/DriverTemplates/Driver_NAND.c" select="NAND Flash Driver"/> -->
+        <file category="sourceC" attr="template" name="CMSIS/Driver/DriverTemplates/Driver_NAND.c" select="NAND Flash Driver"/>
       </files>
     </component>
     <component Cclass="CMSIS Driver" Cgroup="Ethernet" Csub="Custom" Cversion="1.0.0" Capiversion="2.2.0" custom="1">
@@ -3962,7 +3962,7 @@
       <description>Access to #include Driver_WiFi.h file</description>
       <files>
         <file category="header" name="CMSIS/Driver/Include/Driver_WiFi.h"/>
-        <!-- <file category="sourceC" attr="template" name="CMSIS/Driver/DriverTemplates/Driver_WiFi.c" select="WiFi Driver"/> -->
+        <file category="sourceC" attr="template" name="CMSIS/Driver/DriverTemplates/Driver_WiFi.c" select="WiFi Driver"/>
       </files>
     </component>
 
diff --git a/CMSIS/Driver/DriverTemplates/Driver_CAN.c b/CMSIS/Driver/DriverTemplates/Driver_CAN.c
index a350d09..5007fea 100644
--- a/CMSIS/Driver/DriverTemplates/Driver_CAN.c
+++ b/CMSIS/Driver/DriverTemplates/Driver_CAN.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2018 Arm Limited. All rights reserved.
+ * Copyright (c) 2015-2020 Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: Apache-2.0
  *
@@ -26,12 +26,13 @@
 // Driver Capabilities
 static const ARM_CAN_CAPABILITIES can_driver_capabilities = {
   32U,  // Number of CAN Objects available
-  1U,   // Supports reentrant calls to ARM_CAN_MessageSend, ARM_CAN_MessageRead, ARM_CAN_ObjectConfigure and abort message sending used by ARM_CAN_Control.
+  0U,   // Does not support reentrant calls to ARM_CAN_MessageSend, ARM_CAN_MessageRead, ARM_CAN_ObjectConfigure and abort message sending used by ARM_CAN_Control.
   0U,   // Does not support CAN with Flexible Data-rate mode (CAN_FD)
   0U,   // Does not support restricted operation mode
-  1U,   // Supports bus monitoring mode
-  1U,   // Supports internal loopback mode
-  1U,   // Supports external loopback mode
+  0U,   // Does not support bus monitoring mode
+  0U,   // Does not support internal loopback mode
+  0U,   // Does not support external loopback mode
+  0U    // Reserved (must be zero)
 };
 
 // Object Capabilities
@@ -40,11 +41,12 @@
   1U,   // Object supports reception
   0U,   // Object does not support RTR reception and automatic Data transmission
   0U,   // Object does not support RTR transmission and automatic Data reception
-  1U,   // Object allows assignment of multiple filters to it
-  1U,   // Object supports exact identifier filtering
+  0U,   // Object does not allow assignment of multiple filters to it
+  0U,   // Object does not support exact identifier filtering
   0U,   // Object does not support range identifier filtering
-  1U,   // Object supports mask identifier filtering
-  3U    // Object can buffer 3 messages
+  0U,   // Object does not support mask identifier filtering
+  0U,   // Object can not buffer messages
+  0U    // Reserved (must be zero)
 };
 
 static uint8_t                     can_driver_powered     = 0U;
@@ -56,18 +58,18 @@
 //   Functions
 //
 
-static ARM_DRIVER_VERSION CAN_GetVersion (void) {
+static ARM_DRIVER_VERSION ARM_CAN_GetVersion (void) {
   // Return driver version
   return can_driver_version;
 }
 
-static ARM_CAN_CAPABILITIES CAN_GetCapabilities (void) {
+static ARM_CAN_CAPABILITIES ARM_CAN_GetCapabilities (void) {
   // Return driver capabilities
   return can_driver_capabilities;
 }
 
-static int32_t CAN_Initialize (ARM_CAN_SignalUnitEvent_t   cb_unit_event,
-                               ARM_CAN_SignalObjectEvent_t cb_object_event) {
+static int32_t ARM_CAN_Initialize (ARM_CAN_SignalUnitEvent_t   cb_unit_event,
+                                   ARM_CAN_SignalObjectEvent_t cb_object_event) {
 
   if (can_driver_initialized != 0U) { return ARM_DRIVER_OK; }
 
@@ -82,7 +84,7 @@
   return ARM_DRIVER_OK;
 }
 
-static int32_t CAN_Uninitialize (void) {
+static int32_t ARM_CAN_Uninitialize (void) {
 
   // Add code for pin, memory, RTX objects de-initialization
   // ..
@@ -92,7 +94,7 @@
   return ARM_DRIVER_OK;
 }
 
-static int32_t CAN_PowerControl (ARM_POWER_STATE state) {
+static int32_t ARM_CAN_PowerControl (ARM_POWER_STATE state) {
   switch (state) {
     case ARM_POWER_OFF:
       can_driver_powered = 0U;
@@ -100,6 +102,8 @@
       // and if possible disable clock
       // ..
 
+      break;
+
     case ARM_POWER_FULL:
       if (can_driver_initialized == 0U) { return ARM_DRIVER_ERROR; }
       if (can_driver_powered     != 0U) { return ARM_DRIVER_OK;    }
@@ -111,21 +115,20 @@
       can_driver_powered = 1U;
       break;
 
-    default:
-      // Other states are not supported
+    case ARM_POWER_LOW:
       return ARM_DRIVER_ERROR_UNSUPPORTED;
   }
 
   return ARM_DRIVER_OK;
 }
 
-uint32_t CAN_GetClock (void) {
+static uint32_t ARM_CAN_GetClock (void) {
 
   // Add code to return peripheral clock frequency
   // ..
 }
 
-static int32_t CAN_SetBitrate (ARM_CAN_BITRATE_SELECT select, uint32_t bitrate, uint32_t bit_segments) {
+static int32_t ARM_CAN_SetBitrate (ARM_CAN_BITRATE_SELECT select, uint32_t bitrate, uint32_t bit_segments) {
 
   if (can_driver_powered == 0U) { return ARM_DRIVER_ERROR; }
 
@@ -136,7 +139,7 @@
   return ARM_DRIVER_OK;
 }
 
-static int32_t CAN_SetMode (ARM_CAN_MODE mode) {
+static int32_t ARM_CAN_SetMode (ARM_CAN_MODE mode) {
 
   if (can_driver_powered == 0U) { return ARM_DRIVER_ERROR; }
 
@@ -165,20 +168,17 @@
       // Add code to put peripheral into external loopback mode
       // ..
       break;
-    default:
-      // Handle unknown mode code
-      return ARM_DRIVER_ERROR_UNSUPPORTED;
   }
 
   return ARM_DRIVER_OK;
 }
 
-ARM_CAN_OBJ_CAPABILITIES CAN_ObjectGetCapabilities (uint32_t obj_idx) {
+static ARM_CAN_OBJ_CAPABILITIES ARM_CAN_ObjectGetCapabilities (uint32_t obj_idx) {
   // Return object capabilities
   return can_object_capabilities;
 }
 
-static int32_t CAN_ObjectSetFilter (uint32_t obj_idx, ARM_CAN_FILTER_OPERATION operation, uint32_t id, uint32_t arg) {
+static int32_t ARM_CAN_ObjectSetFilter (uint32_t obj_idx, ARM_CAN_FILTER_OPERATION operation, uint32_t id, uint32_t arg) {
 
   if (can_driver_powered == 0U) { return ARM_DRIVER_ERROR; }
 
@@ -201,15 +201,12 @@
     case ARM_CAN_FILTER_ID_RANGE_REMOVE:
       // Add code to remove specified range of IDs from being received by peripheral
       break;
-    default:
-      // Handle unknown operation code
-      return ARM_DRIVER_ERROR_UNSUPPORTED;
   }
 
   return ARM_DRIVER_OK;
 }
 
-static int32_t CAN_ObjectConfigure (uint32_t obj_idx, ARM_CAN_OBJ_CONFIG obj_cfg) {
+static int32_t ARM_CAN_ObjectConfigure (uint32_t obj_idx, ARM_CAN_OBJ_CONFIG obj_cfg) {
 
   if (can_driver_powered == 0U) { return ARM_DRIVER_ERROR; }
 
@@ -234,15 +231,12 @@
       // Setup object to be used for receiving messages
       // ..
       break;
-    default:
-      // Handle unknown object configuration code
-      return ARM_DRIVER_ERROR_UNSUPPORTED;
   }
 
   return ARM_DRIVER_OK;
 }
 
-static int32_t CAN_MessageSend (uint32_t obj_idx, ARM_CAN_MSG_INFO *msg_info, const uint8_t *data, uint8_t size) {
+static int32_t ARM_CAN_MessageSend (uint32_t obj_idx, ARM_CAN_MSG_INFO *msg_info, const uint8_t *data, uint8_t size) {
 
   if (can_driver_powered == 0U) { return ARM_DRIVER_ERROR; }
 
@@ -252,7 +246,7 @@
   return ((int32_t)size);
 }
 
-static int32_t CAN_MessageRead (uint32_t obj_idx, ARM_CAN_MSG_INFO *msg_info, uint8_t *data, uint8_t size) {
+static int32_t ARM_CAN_MessageRead (uint32_t obj_idx, ARM_CAN_MSG_INFO *msg_info, uint8_t *data, uint8_t size) {
 
   if (can_driver_powered == 0U) { return ARM_DRIVER_ERROR;  }
 
@@ -263,7 +257,7 @@
   return ((int32_t)size);
 }
 
-static int32_t CAN_Control (uint32_t control, uint32_t arg) {
+static int32_t ARM_CAN_Control (uint32_t control, uint32_t arg) {
 
   if (can_driver_powered == 0U) { return ARM_DRIVER_ERROR; }
 
@@ -288,7 +282,7 @@
   return ARM_DRIVER_OK;
 }
 
-static ARM_CAN_STATUS CAN_GetStatus (void) {
+static ARM_CAN_STATUS ARM_CAN_GetStatus (void) {
 
   // Add code to return device bus and error status
   // ..
@@ -301,21 +295,23 @@
 
 // CAN driver functions structure
 
+extern \
+ARM_DRIVER_CAN Driver_CAN0;
 ARM_DRIVER_CAN Driver_CAN0 = {
-  CAN_GetVersion,
-  CAN_GetCapabilities,
-  CAN_Initialize,
-  CAN_Uninitialize,
-  CAN_PowerControl,
-  CAN_GetClock,
-  CAN_SetBitrate,
-  CAN_SetMode,
-  CAN_ObjectGetCapabilities,
-  CAN_ObjectSetFilter,
-  CAN_ObjectConfigure,
-  CAN_MessageSend,
-  CAN_MessageRead,
-  CAN_Control,
-  CAN_GetStatus
+  ARM_CAN_GetVersion,
+  ARM_CAN_GetCapabilities,
+  ARM_CAN_Initialize,
+  ARM_CAN_Uninitialize,
+  ARM_CAN_PowerControl,
+  ARM_CAN_GetClock,
+  ARM_CAN_SetBitrate,
+  ARM_CAN_SetMode,
+  ARM_CAN_ObjectGetCapabilities,
+  ARM_CAN_ObjectSetFilter,
+  ARM_CAN_ObjectConfigure,
+  ARM_CAN_MessageSend,
+  ARM_CAN_MessageRead,
+  ARM_CAN_Control,
+  ARM_CAN_GetStatus
 };
 
diff --git a/CMSIS/Driver/DriverTemplates/Driver_ETH_MAC.c b/CMSIS/Driver/DriverTemplates/Driver_ETH_MAC.c
index 93b4c56..2817b8c 100644
--- a/CMSIS/Driver/DriverTemplates/Driver_ETH_MAC.c
+++ b/CMSIS/Driver/DriverTemplates/Driver_ETH_MAC.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2018 Arm Limited. All rights reserved.
+ * Copyright (c) 2013-2020 Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: Apache-2.0
  *
@@ -43,30 +43,33 @@
     0, /* 1 = callback event \ref ARM_ETH_MAC_EVENT_RX_FRAME generated */
     0, /* 1 = callback event \ref ARM_ETH_MAC_EVENT_TX_FRAME generated */
     0, /* 1 = wakeup event \ref ARM_ETH_MAC_EVENT_WAKEUP generated */
-    0  /* 1 = Precision Timer supported */
+    0, /* 1 = Precision Timer supported */
+    0  /* Reserved (must be zero) */
 };
 
 //
 //  Functions
 //
 
-ARM_DRIVER_VERSION ARM_ETH_MAC_GetVersion(void)
+static ARM_DRIVER_VERSION ARM_ETH_MAC_GetVersion(void)
+{
+  return DriverVersion;
+}
+
+static ARM_ETH_MAC_CAPABILITIES ARM_ETH_MAC_GetCapabilities(void)
+{
+  return DriverCapabilities;
+}
+
+static int32_t ARM_ETH_MAC_Initialize(ARM_ETH_MAC_SignalEvent_t cb_event)
 {
 }
 
-ARM_ETH_MAC_CAPABILITIES ARM_ETH_MAC_GetCapabilities(void)
+static int32_t ARM_ETH_MAC_Uninitialize(void)
 {
 }
 
-int32_t ARM_ETH_MAC_Initialize(ARM_ETH_MAC_SignalEvent_t cb_event)
-{
-}
-
-int32_t ARM_ETH_MAC_Uninitialize(void)
-{
-}
-
-int32_t ARM_ETH_MAC_PowerControl(ARM_POWER_STATE state)
+static int32_t ARM_ETH_MAC_PowerControl(ARM_POWER_STATE state)
 {
     switch (state)
     {
@@ -78,45 +81,43 @@
 
     case ARM_POWER_FULL:
         break;
-
-    default:
-        return ARM_DRIVER_ERROR_UNSUPPORTED;
     }
+    return ARM_DRIVER_OK;
 }
 
-int32_t ARM_ETH_MAC_GetMacAddress(ARM_ETH_MAC_ADDR *ptr_addr)
+static int32_t ARM_ETH_MAC_GetMacAddress(ARM_ETH_MAC_ADDR *ptr_addr)
 {
 }
 
-int32_t ARM_ETH_MAC_SetMacAddress(const ARM_ETH_MAC_ADDR *ptr_addr)
+static int32_t ARM_ETH_MAC_SetMacAddress(const ARM_ETH_MAC_ADDR *ptr_addr)
 {
 }
 
-int32_t ARM_ETH_MAC_SetAddressFilter(const ARM_ETH_MAC_ADDR *ptr_addr, uint32_t num_addr)
+static int32_t ARM_ETH_MAC_SetAddressFilter(const ARM_ETH_MAC_ADDR *ptr_addr, uint32_t num_addr)
 {
 }
 
-int32_t ARM_ETH_MAC_SendFrame(const uint8_t *frame, uint32_t len, uint32_t flags)
+static int32_t ARM_ETH_MAC_SendFrame(const uint8_t *frame, uint32_t len, uint32_t flags)
 {
 }
 
-int32_t ARM_ETH_MAC_ReadFrame(uint8_t *frame, uint32_t len)
+static int32_t ARM_ETH_MAC_ReadFrame(uint8_t *frame, uint32_t len)
 {
 }
 
-uint32_t ARM_ETH_MAC_GetRxFrameSize(void)
+static uint32_t ARM_ETH_MAC_GetRxFrameSize(void)
 {
 }
 
-int32_t ARM_ETH_MAC_GetRxFrameTime(ARM_ETH_MAC_TIME *time)
+static int32_t ARM_ETH_MAC_GetRxFrameTime(ARM_ETH_MAC_TIME *time)
 {
 }
 
-int32_t ARM_ETH_MAC_GetTxFrameTime(ARM_ETH_MAC_TIME *time)
+static int32_t ARM_ETH_MAC_GetTxFrameTime(ARM_ETH_MAC_TIME *time)
 {
 }
 
-int32_t ARM_ETH_MAC_Control(uint32_t control, uint32_t arg)
+static int32_t ARM_ETH_MAC_Control(uint32_t control, uint32_t arg)
 {
     switch (control)
     {
@@ -188,24 +189,26 @@
     }
 }
 
-int32_t ARM_ETH_MAC_ControlTimer(uint32_t control, ARM_ETH_MAC_TIME *time)
+static int32_t ARM_ETH_MAC_ControlTimer(uint32_t control, ARM_ETH_MAC_TIME *time)
 {
 }
 
-int32_t ARM_ETH_MAC_PHY_Read(uint8_t phy_addr, uint8_t reg_addr, uint16_t *data)
+static int32_t ARM_ETH_MAC_PHY_Read(uint8_t phy_addr, uint8_t reg_addr, uint16_t *data)
 {
 }
 
-int32_t ARM_ETH_MAC_PHY_Write(uint8_t phy_addr, uint8_t reg_addr, uint16_t data)
+static int32_t ARM_ETH_MAC_PHY_Write(uint8_t phy_addr, uint8_t reg_addr, uint16_t data)
 {
 }
 
-void ARM_ETH_MAC_SignalEvent(uint32_t event)
+static void ARM_ETH_MAC_SignalEvent(uint32_t event)
 {
 }
 
 // End ETH MAC Interface
 
+extern \
+ARM_DRIVER_ETH_MAC Driver_ETH_MAC0;
 ARM_DRIVER_ETH_MAC Driver_ETH_MAC0 =
 {
     ARM_ETH_MAC_GetVersion,
diff --git a/CMSIS/Driver/DriverTemplates/Driver_ETH_PHY.c b/CMSIS/Driver/DriverTemplates/Driver_ETH_PHY.c
index 8fd6f64..e496a28 100644
--- a/CMSIS/Driver/DriverTemplates/Driver_ETH_PHY.c
+++ b/CMSIS/Driver/DriverTemplates/Driver_ETH_PHY.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2018 Arm Limited. All rights reserved.
+ * Copyright (c) 2013-2020 Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: Apache-2.0
  *
@@ -30,19 +30,20 @@
 // Functions
 //
 
-ARM_DRIVER_VERSION ARM_ETH_PHY_GetVersion(void)
+static ARM_DRIVER_VERSION ARM_ETH_PHY_GetVersion(void)
+{
+  return DriverVersion;
+}
+
+static int32_t ARM_ETH_PHY_Initialize(ARM_ETH_PHY_Read_t fn_read, ARM_ETH_PHY_Write_t fn_write)
 {
 }
 
-int32_t ARM_ETH_PHY_Initialize(ARM_ETH_PHY_Read_t fn_read, ARM_ETH_PHY_Write_t fn_write)
+static int32_t ARM_ETH_PHY_Uninitialize(void)
 {
 }
 
-int32_t ARM_ETH_PHY_Uninitialize(void)
-{
-}
-
-int32_t ARM_ETH_PHY_PowerControl(ARM_POWER_STATE state)
+static int32_t ARM_ETH_PHY_PowerControl(ARM_POWER_STATE state)
 {
     switch (state)
     {
@@ -54,13 +55,11 @@
 
     case ARM_POWER_FULL:
         break;
-
-    default:
-        return ARM_DRIVER_ERROR_UNSUPPORTED;
     }
+    return ARM_DRIVER_OK;
 }
 
-int32_t ARM_ETH_PHY_SetInterface(uint32_t interface)
+static int32_t ARM_ETH_PHY_SetInterface(uint32_t interface)
 {
     switch (interface)
     {
@@ -73,7 +72,7 @@
     }
 }
 
-int32_t ARM_ETH_PHY_SetMode(uint32_t mode)
+static int32_t ARM_ETH_PHY_SetMode(uint32_t mode)
 {
     switch (mode & ARM_ETH_PHY_SPEED_Msk)
     {
@@ -106,14 +105,16 @@
     }
 }
 
-ARM_ETH_LINK_STATE ARM_ETH_PHY_GetLinkState(void)
+static ARM_ETH_LINK_STATE ARM_ETH_PHY_GetLinkState(void)
 {
 }
 
-ARM_ETH_LINK_INFO ARM_ETH_PHY_GetLinkInfo(void)
+static ARM_ETH_LINK_INFO ARM_ETH_PHY_GetLinkInfo(void)
 {
 }
 
+extern \
+ARM_DRIVER_ETH_PHY Driver_ETH_PHY0;
 ARM_DRIVER_ETH_PHY Driver_ETH_PHY0 =
 {
     ARM_ETH_PHY_GetVersion,
diff --git a/CMSIS/Driver/DriverTemplates/Driver_Flash.c b/CMSIS/Driver/DriverTemplates/Driver_Flash.c
index dc53ec2..cdccd2a 100644
--- a/CMSIS/Driver/DriverTemplates/Driver_Flash.c
+++ b/CMSIS/Driver/DriverTemplates/Driver_Flash.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2018 Arm Limited. All rights reserved.
+ * Copyright (c) 2013-2020 Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: Apache-2.0
  *
@@ -36,7 +36,8 @@
     0, /* FLASH_SECTOR_SIZE  */
     0, /* FLASH_PAGE_SIZE    */
     0, /* FLASH_PROGRAM_UNIT */
-    0  /* FLASH_ERASED_VALUE */
+    0, /* FLASH_ERASED_VALUE */
+  { 0, 0, 0 }  /* Reserved (must be zero) */
 };
 
 /* Flash Status */
@@ -52,30 +53,33 @@
 static const ARM_FLASH_CAPABILITIES DriverCapabilities = {
     0, /* event_ready */
     0, /* data_width = 0:8-bit, 1:16-bit, 2:32-bit */
-    0  /* erase_chip */
+    0, /* erase_chip */
+    0  /* reserved (must be zero) */
 };
 
 //
 // Functions
 //
 
-ARM_DRIVER_VERSION ARM_Flash_GetVersion(void)
+static ARM_DRIVER_VERSION ARM_Flash_GetVersion(void)
+{
+  return DriverVersion;
+}
+
+static ARM_FLASH_CAPABILITIES ARM_Flash_GetCapabilities(void)
+{
+  return DriverCapabilities;
+}
+
+static int32_t ARM_Flash_Initialize(ARM_Flash_SignalEvent_t cb_event)
 {
 }
 
-ARM_FLASH_CAPABILITIES ARM_Flash_GetCapabilities(void)
+static int32_t ARM_Flash_Uninitialize(void)
 {
 }
 
-int32_t ARM_Flash_Initialize(ARM_Flash_SignalEvent_t cb_event)
-{
-}
-
-int32_t ARM_Flash_Uninitialize(void)
-{
-}
-
-int32_t ARM_Flash_PowerControl(ARM_POWER_STATE state)
+static int32_t ARM_Flash_PowerControl(ARM_POWER_STATE state)
 {
     switch (state)
     {
@@ -87,41 +91,44 @@
 
     case ARM_POWER_FULL:
         break;
-
-    default:
-        return ARM_DRIVER_ERROR_UNSUPPORTED;
     }
+    return ARM_DRIVER_OK;
 }
 
-int32_t ARM_Flash_ReadData(uint32_t addr, void *data, uint32_t cnt)
+static int32_t ARM_Flash_ReadData(uint32_t addr, void *data, uint32_t cnt)
 {
 }
 
-int32_t ARM_Flash_ProgramData(uint32_t addr, const void *data, uint32_t cnt)
+static int32_t ARM_Flash_ProgramData(uint32_t addr, const void *data, uint32_t cnt)
 {
 }
 
-int32_t ARM_Flash_EraseSector(uint32_t addr)
+static int32_t ARM_Flash_EraseSector(uint32_t addr)
 {
 }
 
-int32_t ARM_Flash_EraseChip(void)
+static int32_t ARM_Flash_EraseChip(void)
 {
 }
 
-ARM_FLASH_STATUS ARM_Flash_GetStatus(void)
+static ARM_FLASH_STATUS ARM_Flash_GetStatus(void)
+{
+  return FlashStatus;
+}
+
+static ARM_FLASH_INFO * ARM_Flash_GetInfo(void)
+{
+  return &FlashInfo;
+}
+
+static void ARM_Flash_SignalEvent(uint32_t event)
 {
 }
 
-ARM_FLASH_INFO * ARM_Flash_GetInfo(void)
-{
-}
-
-void ARM_Flash_SignalEvent(uint32_t event)
-{
-}
 // End Flash Interface
 
+extern \
+ARM_DRIVER_FLASH Driver_Flash0;
 ARM_DRIVER_FLASH Driver_Flash0 = {
     ARM_Flash_GetVersion,
     ARM_Flash_GetCapabilities,
@@ -134,4 +141,4 @@
     ARM_Flash_EraseChip,
     ARM_Flash_GetStatus,
     ARM_Flash_GetInfo
-};
\ No newline at end of file
+};
diff --git a/CMSIS/Driver/DriverTemplates/Driver_I2C.c b/CMSIS/Driver/DriverTemplates/Driver_I2C.c
index ed2856f..f9a4740 100644
--- a/CMSIS/Driver/DriverTemplates/Driver_I2C.c
+++ b/CMSIS/Driver/DriverTemplates/Driver_I2C.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2018 Arm Limited. All rights reserved.
+ * Copyright (c) 2013-2020 Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: Apache-2.0
  *
@@ -35,23 +35,25 @@
 //  Functions
 //
 
-ARM_DRIVER_VERSION ARM_I2C_GetVersion(void)
+static ARM_DRIVER_VERSION ARM_I2C_GetVersion(void)
+{
+  return DriverVersion;
+}
+
+static ARM_I2C_CAPABILITIES ARM_I2C_GetCapabilities(void)
+{
+  return DriverCapabilities;
+}
+
+static int32_t ARM_I2C_Initialize(ARM_I2C_SignalEvent_t cb_event)
 {
 }
 
-ARM_I2C_CAPABILITIES ARM_I2C_GetCapabilities(void)
+static int32_t ARM_I2C_Uninitialize(void)
 {
 }
 
-int32_t ARM_I2C_Initialize(ARM_I2C_SignalEvent_t cb_event)
-{
-}
-
-int32_t ARM_I2C_Uninitialize(void)
-{
-}
-
-int32_t ARM_I2C_PowerControl(ARM_POWER_STATE state)
+static int32_t ARM_I2C_PowerControl(ARM_POWER_STATE state)
 {
     switch (state)
     {
@@ -63,33 +65,31 @@
 
     case ARM_POWER_FULL:
         break;
-
-    default:
-        return ARM_DRIVER_ERROR_UNSUPPORTED;
     }
+    return ARM_DRIVER_OK;
 }
 
-int32_t ARM_I2C_MasterTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
+static int32_t ARM_I2C_MasterTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
 {
 }
 
-int32_t ARM_I2C_MasterReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
+static int32_t ARM_I2C_MasterReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
 {
 }
 
-int32_t ARM_I2C_SlaveTransmit(const uint8_t *data, uint32_t num)
+static int32_t ARM_I2C_SlaveTransmit(const uint8_t *data, uint32_t num)
 {
 }
 
-int32_t ARM_I2C_SlaveReceive(uint8_t *data, uint32_t num)
+static int32_t ARM_I2C_SlaveReceive(uint8_t *data, uint32_t num)
 {
 }
 
-int32_t ARM_I2C_GetDataCount(void)
+static int32_t ARM_I2C_GetDataCount(void)
 {
 }
 
-int32_t ARM_I2C_Control(uint32_t control, uint32_t arg)
+static int32_t ARM_I2C_Control(uint32_t control, uint32_t arg)
 {
     switch (control)
     {
@@ -121,17 +121,19 @@
     }
 }
 
-ARM_I2C_STATUS ARM_I2C_GetStatus(void)
+static ARM_I2C_STATUS ARM_I2C_GetStatus(void)
 {
 }
 
-void ARM_I2C_SignalEvent(uint32_t event)
+static void ARM_I2C_SignalEvent(uint32_t event)
 {
     // function body
 }
 
 // End I2C Interface
 
+extern \
+ARM_DRIVER_I2C Driver_I2C0;
 ARM_DRIVER_I2C Driver_I2C0 = {
     ARM_I2C_GetVersion,
     ARM_I2C_GetCapabilities,
diff --git a/CMSIS/Driver/DriverTemplates/Driver_MCI.c b/CMSIS/Driver/DriverTemplates/Driver_MCI.c
index cf39b60..dd73c04 100644
--- a/CMSIS/Driver/DriverTemplates/Driver_MCI.c
+++ b/CMSIS/Driver/DriverTemplates/Driver_MCI.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2018 Arm Limited. All rights reserved.
+ * Copyright (c) 2013-2020 Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: Apache-2.0
  *
@@ -30,13 +30,14 @@
 static const ARM_MCI_CAPABILITIES DriverCapabilities = {
     0, /* cd_state          */
     0, /* cd_event          */
+    0, /* wp_state          */
     0, /* vdd               */
     0, /* vdd_1v8           */
     0, /* vccq              */
     0, /* vccq_1v8          */
     0, /* vccq_1v2          */
-    1, /* data_width_4      */
-    1, /* data_width_8      */
+    0, /* data_width_4      */
+    0, /* data_width_8      */
     0, /* data_width_4_ddr  */
     0, /* data_width_8_ddr  */
     0, /* high_speed        */
@@ -48,36 +49,40 @@
     0, /* uhs_driver_type_a */
     0, /* uhs_driver_type_c */
     0, /* uhs_driver_type_d */
-    1, /* sdio_interrupt    */
-    1, /* read_wait         */
+    0, /* sdio_interrupt    */
+    0, /* read_wait         */
     0, /* suspend_resume    */
     0, /* mmc_interrupt     */
     0, /* mmc_boot          */
+    0, /* rst_n             */
     0, /* ccs               */
-    0  /* ccs_timeout       */
+    0, /* ccs_timeout       */
+    0  /* Reserved          */
 };
 
 //
 //   Functions
 //
 
-ARM_DRIVER_VERSION ARM_MCI_GetVersion(void)
+static ARM_DRIVER_VERSION ARM_MCI_GetVersion(void)
+{
+  return DriverVersion;
+}
+
+static ARM_MCI_CAPABILITIES ARM_MCI_GetCapabilities(void)
+{
+  return DriverCapabilities;
+}
+
+static int32_t ARM_MCI_Initialize(ARM_MCI_SignalEvent_t cb_event)
 {
 }
 
-ARM_MCI_CAPABILITIES ARM_MCI_GetCapabilities(void)
+static int32_t ARM_MCI_Uninitialize(void)
 {
 }
 
-int32_t ARM_MCI_Initialize(ARM_MCI_SignalEvent_t cb_event)
-{
-}
-
-int32_t ARM_MCI_Uninitialize(void)
-{
-}
-
-int32_t ARM_MCI_PowerControl(ARM_POWER_STATE state)
+static int32_t ARM_MCI_PowerControl(ARM_POWER_STATE state)
 {
     switch (state)
     {
@@ -89,13 +94,11 @@
 
     case ARM_POWER_FULL:
         break;
-
-    default:
-        return ARM_DRIVER_ERROR_UNSUPPORTED;
     }
+    return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-int32_t ARM_MCI_CardPower(uint32_t voltage)
+static int32_t ARM_MCI_CardPower(uint32_t voltage)
 {
     switch (voltage & ARM_MCI_POWER_VDD_Msk)
     {
@@ -108,29 +111,30 @@
     default:
         break;
     }
+    return ARM_DRIVER_ERROR;
 }
 
-int32_t ARM_MCI_ReadCD(void)
+static int32_t ARM_MCI_ReadCD(void)
 {
 }
 
-int32_t ARM_MCI_ReadWP(void)
+static int32_t ARM_MCI_ReadWP(void)
 {
 }
 
-int32_t ARM_MCI_SendCommand(uint32_t cmd, uint32_t arg, uint32_t flags, uint32_t *response)
+static int32_t ARM_MCI_SendCommand(uint32_t cmd, uint32_t arg, uint32_t flags, uint32_t *response)
 {
 }
 
-int32_t ARM_MCI_SetupTransfer(uint8_t  *data, uint32_t block_count, uint32_t block_size, uint32_t mode)
+static int32_t ARM_MCI_SetupTransfer(uint8_t  *data, uint32_t block_count, uint32_t block_size, uint32_t mode)
 {
 }
 
-int32_t ARM_MCI_AbortTransfer(void)
+static int32_t ARM_MCI_AbortTransfer(void)
 {
 }
 
-int32_t ARM_MCI_Control(uint32_t control, uint32_t arg)
+static int32_t ARM_MCI_Control(uint32_t control, uint32_t arg)
 {
     switch (control)
     {
@@ -191,17 +195,19 @@
     }
 }
 
-ARM_MCI_STATUS ARM_MCI_GetStatus(void)
+static ARM_MCI_STATUS ARM_MCI_GetStatus(void)
 {
 }
 
-void ARM_MCI_SignalEvent(uint32_t event)
+static void ARM_MCI_SignalEvent(uint32_t event)
 {
     // function body
 }
 
 // End MCI Interface
 
+extern \
+ARM_DRIVER_MCI Driver_MCI0;
 ARM_DRIVER_MCI Driver_MCI0 = {
     ARM_MCI_GetVersion,
     ARM_MCI_GetCapabilities,
diff --git a/CMSIS/Driver/DriverTemplates/Driver_NAND.c b/CMSIS/Driver/DriverTemplates/Driver_NAND.c
index 5ce2f80..dbb6725 100644
--- a/CMSIS/Driver/DriverTemplates/Driver_NAND.c
+++ b/CMSIS/Driver/DriverTemplates/Driver_NAND.c
@@ -56,24 +56,23 @@
 
 /* Exported functions */
 
-static ARM_DRIVER_VERSION GetVersion (void) {
+static ARM_DRIVER_VERSION ARM_NAND_GetVersion (void) {
   return DriverVersion;
 }
 
-static ARM_NAND_CAPABILITIES GetCapabilities (void) {
+static ARM_NAND_CAPABILITIES ARM_NAND_GetCapabilities (void) {
   return DriverCapabilities;
 }
 
-static int32_t Initialize (ARM_NAND_SignalEvent_t cb_event) {
-  (void)cb_event;
+static int32_t ARM_NAND_Initialize (ARM_NAND_SignalEvent_t cb_event) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t Uninitialize (void) {
+static int32_t ARM_NAND_Uninitialize (void) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t PowerControl (ARM_POWER_STATE state) {
+static int32_t ARM_NAND_PowerControl (ARM_POWER_STATE state) {
 
   switch ((int32_t)state) {
     case ARM_POWER_OFF:
@@ -91,65 +90,50 @@
   return ARM_DRIVER_OK;
 }
 
-static int32_t DevicePower (uint32_t voltage) {
-  (void)voltage;
+static int32_t ARM_NAND_DevicePower (uint32_t voltage) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WriteProtect (uint32_t dev_num, bool enable) {
-  (void)dev_num; (void)enable;
+static int32_t ARM_NAND_WriteProtect (uint32_t dev_num, bool enable) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t ChipEnable (uint32_t dev_num, bool enable) {
-  (void)dev_num; (void)enable;
+static int32_t ARM_NAND_ChipEnable (uint32_t dev_num, bool enable) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t GetDeviceBusy (uint32_t dev_num) {
-  (void)dev_num;
+static int32_t ARM_NAND_GetDeviceBusy (uint32_t dev_num) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t SendCommand (uint32_t dev_num, uint8_t cmd) {
-  (void)dev_num; (void)cmd;
+static int32_t ARM_NAND_SendCommand (uint32_t dev_num, uint8_t cmd) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t SendAddress (uint32_t dev_num, uint8_t addr) {
-  (void)dev_num; (void)addr;
+static int32_t ARM_NAND_SendAddress (uint32_t dev_num, uint8_t addr) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t ReadData (uint32_t dev_num, void *data, uint32_t cnt, uint32_t mode) {
-  (void)dev_num; (void)data; (void)cnt; (void)mode;
+static int32_t ARM_NAND_ReadData (uint32_t dev_num, void *data, uint32_t cnt, uint32_t mode) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WriteData (uint32_t dev_num, const void *data, uint32_t cnt, uint32_t mode) {
-  (void)dev_num; (void)data; (void)cnt; (void)mode;
+static int32_t ARM_NAND_WriteData (uint32_t dev_num, const void *data, uint32_t cnt, uint32_t mode) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t ExecuteSequence (uint32_t dev_num, uint32_t code, uint32_t cmd,
-                                uint32_t addr_col, uint32_t addr_row,
-                                void *data, uint32_t data_cnt,
-                                uint8_t *status, uint32_t *count) {
-  (void)dev_num; (void)code; (void)cmd;
-  (void)addr_col; (void)addr_row;
-  (void)data; (void)data_cnt;
-  (void)status; (void)count;
-
+static int32_t ARM_NAND_ExecuteSequence (uint32_t dev_num, uint32_t code, uint32_t cmd,
+                                         uint32_t addr_col, uint32_t addr_row,
+                                         void *data, uint32_t data_cnt,
+                                         uint8_t *status, uint32_t *count) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t AbortSequence (uint32_t dev_num) {
-  (void)dev_num;
-
+static int32_t ARM_NAND_AbortSequence (uint32_t dev_num) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t Control (uint32_t dev_num, uint32_t control, uint32_t arg) {
+static int32_t ARM_NAND_Control (uint32_t dev_num, uint32_t control, uint32_t arg) {
 
   switch (control) {
     case ARM_NAND_BUS_MODE:
@@ -168,8 +152,7 @@
   return ARM_DRIVER_ERROR;
 }
 
-static ARM_NAND_STATUS GetStatus (uint32_t dev_num) {
-  (void)dev_num;
+static ARM_NAND_STATUS ARM_NAND_GetStatus (uint32_t dev_num) {
   ARM_NAND_STATUS stat;
 
   stat.busy      = 0U;
@@ -178,29 +161,30 @@
   return stat;
 }
 
-static int32_t InquireECC (int32_t index, ARM_NAND_ECC_INFO *info) {
-  (void)index; (void)info;
+static int32_t ARM_NAND_InquireECC (int32_t index, ARM_NAND_ECC_INFO *info) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
 /* NAND Driver Control Block */
+extern \
+ARM_DRIVER_NAND Driver_NAND0;
 ARM_DRIVER_NAND Driver_NAND0 = {
-  GetVersion,
-  GetCapabilities,
-  Initialize,
-  Uninitialize,
-  PowerControl,
-  DevicePower,
-  WriteProtect,
-  ChipEnable,
-  GetDeviceBusy,
-  SendCommand,
-  SendAddress,
-  ReadData,
-  WriteData,
-  ExecuteSequence,
-  AbortSequence,
-  Control,
-  GetStatus,
-  InquireECC
+  ARM_NAND_GetVersion,
+  ARM_NAND_GetCapabilities,
+  ARM_NAND_Initialize,
+  ARM_NAND_Uninitialize,
+  ARM_NAND_PowerControl,
+  ARM_NAND_DevicePower,
+  ARM_NAND_WriteProtect,
+  ARM_NAND_ChipEnable,
+  ARM_NAND_GetDeviceBusy,
+  ARM_NAND_SendCommand,
+  ARM_NAND_SendAddress,
+  ARM_NAND_ReadData,
+  ARM_NAND_WriteData,
+  ARM_NAND_ExecuteSequence,
+  ARM_NAND_AbortSequence,
+  ARM_NAND_Control,
+  ARM_NAND_GetStatus,
+  ARM_NAND_InquireECC
 };
diff --git a/CMSIS/Driver/DriverTemplates/Driver_SAI.c b/CMSIS/Driver/DriverTemplates/Driver_SAI.c
index 20506ea..eb445e4 100644
--- a/CMSIS/Driver/DriverTemplates/Driver_SAI.c
+++ b/CMSIS/Driver/DriverTemplates/Driver_SAI.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2018 Arm Limited. All rights reserved.
+ * Copyright (c) 2013-2020 Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: Apache-2.0
  *
@@ -38,30 +38,33 @@
     0, /* supports Mono mode */
     0, /* supports Companding */
     0, /* supports MCLK (Master Clock) pin */
-    0  /* supports Frame error event: \ref ARM_SAI_EVENT_FRAME_ERROR */
+    0, /* supports Frame error event: \ref ARM_SAI_EVENT_FRAME_ERROR */
+    0  /* reserved (must be zero) */
 };
 
 //
 //  Functions
 //
 
-ARM_DRIVER_VERSION ARM_SAI_GetVersion (void)
+static ARM_DRIVER_VERSION ARM_SAI_GetVersion (void)
+{
+  return DriverVersion;
+}
+
+static ARM_SAI_CAPABILITIES ARM_SAI_GetCapabilities (void)
+{
+  return DriverCapabilities;
+}
+
+static int32_t ARM_SAI_Initialize (ARM_SAI_SignalEvent_t cb_event)
 {
 }
 
-ARM_SAI_CAPABILITIES ARM_SAI_GetCapabilities (void)
+static int32_t ARM_SAI_Uninitialize (void)
 {
 }
 
-int32_t ARM_SAI_Initialize (ARM_SAI_SignalEvent_t cb_event)
-{
-}
-
-int32_t ARM_SAI_Uninitialize (void)
-{
-}
-
-int32_t ARM_SAI_PowerControl (ARM_POWER_STATE state)
+static int32_t ARM_SAI_PowerControl (ARM_POWER_STATE state)
 {
     switch (state)
     {
@@ -73,43 +76,43 @@
 
     case ARM_POWER_FULL:
         break;
-
-    default:
-        return ARM_DRIVER_ERROR_UNSUPPORTED;
     }
+    return ARM_DRIVER_OK;
 }
 
-int32_t ARM_SAI_Send (const void *data, uint32_t num)
+static int32_t ARM_SAI_Send (const void *data, uint32_t num)
 {
 }
 
-int32_t ARM_SAI_Receive (void *data, uint32_t num)
+static int32_t ARM_SAI_Receive (void *data, uint32_t num)
 {
 }
 
-uint32_t ARM_SAI_GetTxCount (void)
+static uint32_t ARM_SAI_GetTxCount (void)
 {
 }
 
-uint32_t ARM_SAI_GetRxCount (void)
+static uint32_t ARM_SAI_GetRxCount (void)
 {
 }
 
-int32_t ARM_SAI_Control (uint32_t control, uint32_t arg1, uint32_t arg2)
+static int32_t ARM_SAI_Control (uint32_t control, uint32_t arg1, uint32_t arg2)
 {
 }
 
-ARM_SAI_STATUS ARM_SAI_GetStatus (void)
+static ARM_SAI_STATUS ARM_SAI_GetStatus (void)
 {
 }
 
-void ARM_SAI_SignalEvent(uint32_t event)
+static void ARM_SAI_SignalEvent(uint32_t event)
 {
     // function body
 }
 
 // End SAI Interface
 
+extern \
+ARM_DRIVER_SAI Driver_SAI0;
 ARM_DRIVER_SAI Driver_SAI0 = {
     ARM_SAI_GetVersion,
     ARM_SAI_GetCapabilities,
diff --git a/CMSIS/Driver/DriverTemplates/Driver_SPI.c b/CMSIS/Driver/DriverTemplates/Driver_SPI.c
index 8d224ee..1112940 100644
--- a/CMSIS/Driver/DriverTemplates/Driver_SPI.c
+++ b/CMSIS/Driver/DriverTemplates/Driver_SPI.c
@@ -29,32 +29,35 @@
 /* Driver Capabilities */
 static const ARM_SPI_CAPABILITIES DriverCapabilities = {
     0, /* Reserved (must be zero) */
-    1, /* TI Synchronous Serial Interface */
-    1, /* Microwire Interface */
-    0  /* Signal Mode Fault event: \ref ARM_SPI_EVENT_MODE_FAULT */
+    0, /* TI Synchronous Serial Interface */
+    0, /* Microwire Interface */
+    0, /* Signal Mode Fault event: \ref ARM_SPI_EVENT_MODE_FAULT */
+    0  /* Reserved (must be zero) */
 };
 
 //
 //  Functions
 //
 
-ARM_DRIVER_VERSION ARM_SPI_GetVersion(void)
+static ARM_DRIVER_VERSION ARM_SPI_GetVersion(void)
+{
+  return DriverVersion;
+}
+
+static ARM_SPI_CAPABILITIES ARM_SPI_GetCapabilities(void)
+{
+  return DriverCapabilities;
+}
+
+static int32_t ARM_SPI_Initialize(ARM_SPI_SignalEvent_t cb_event)
 {
 }
 
-ARM_SPI_CAPABILITIES ARM_SPI_GetCapabilities(void)
+static int32_t ARM_SPI_Uninitialize(void)
 {
 }
 
-int32_t ARM_SPI_Initialize(ARM_SPI_SignalEvent_t cb_event)
-{
-}
-
-int32_t ARM_SPI_Uninitialize(void)
-{
-}
-
-int32_t ARM_SPI_PowerControl(ARM_POWER_STATE state)
+static int32_t ARM_SPI_PowerControl(ARM_POWER_STATE state)
 {
     switch (state)
     {
@@ -66,29 +69,27 @@
 
     case ARM_POWER_FULL:
         break;
-
-    default:
-        return ARM_DRIVER_ERROR_UNSUPPORTED;
     }
+    return ARM_DRIVER_OK;
 }
 
-int32_t ARM_SPI_Send(const void *data, uint32_t num)
+static int32_t ARM_SPI_Send(const void *data, uint32_t num)
 {
 }
 
-int32_t ARM_SPI_Receive(void *data, uint32_t num)
+static int32_t ARM_SPI_Receive(void *data, uint32_t num)
 {
 }
 
-int32_t ARM_SPI_Transfer(const void *data_out, void *data_in, uint32_t num)
+static int32_t ARM_SPI_Transfer(const void *data_out, void *data_in, uint32_t num)
 {
 }
 
-uint32_t ARM_SPI_GetDataCount(void)
+static uint32_t ARM_SPI_GetDataCount(void)
 {
 }
 
-int32_t ARM_SPI_Control(uint32_t control, uint32_t arg)
+static int32_t ARM_SPI_Control(uint32_t control, uint32_t arg)
 {
     switch (control & ARM_SPI_CONTROL_Msk)
     {
@@ -121,17 +122,19 @@
     }
 }
 
-ARM_SPI_STATUS ARM_SPI_GetStatus(void)
+static ARM_SPI_STATUS ARM_SPI_GetStatus(void)
 {
 }
 
-void ARM_SPI_SignalEvent(uint32_t event)
+static void ARM_SPI_SignalEvent(uint32_t event)
 {
     // function body
 }
 
 // End SPI Interface
 
+extern \
+ARM_DRIVER_SPI Driver_SPI0;
 ARM_DRIVER_SPI Driver_SPI0 = {
     ARM_SPI_GetVersion,
     ARM_SPI_GetCapabilities,
diff --git a/CMSIS/Driver/DriverTemplates/Driver_Storage.c b/CMSIS/Driver/DriverTemplates/Driver_Storage.c
index 0c49c05..e71ed2d 100644
--- a/CMSIS/Driver/DriverTemplates/Driver_Storage.c
+++ b/CMSIS/Driver/DriverTemplates/Driver_Storage.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2018 Arm Limited. All rights reserved.
+ * Copyright (c) 2013-2020 Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: Apache-2.0
  *
@@ -29,8 +29,8 @@
 
 /* Driver Capabilities */
 static const ARM_STORAGE_CAPABILITIES DriverCapabilities = {
-    1,  /* Asynchronous Mode */
-    1,  /* Supports EraseAll operation */
+    0,  /* Asynchronous Mode */
+    0,  /* Supports EraseAll operation */
     0   /* Reserved */
 };
 
@@ -39,19 +39,21 @@
 // Functions
 //
 
-ARM_DRIVER_VERSION ARM_Storage_GetVersion (void)  {
+static ARM_DRIVER_VERSION ARM_Storage_GetVersion (void)  {
+  return DriverVersion;
 }
 
-ARM_STORAGE_CAPABILITIES ARM_Storage_GetCapabilities (void)  {
+static ARM_STORAGE_CAPABILITIES ARM_Storage_GetCapabilities (void)  {
+  return DriverCapabilities;
 }
 
-int32_t ARM_Storage_Initialize (ARM_Storage_Callback_t callback)  {
+static int32_t ARM_Storage_Initialize (ARM_Storage_Callback_t callback)  {
 }
 
-int32_t ARM_Storage_Uninitialize (void)  {
+static int32_t ARM_Storage_Uninitialize (void)  {
 }
 
-int32_t ARM_Storage_PowerControl (ARM_POWER_STATE state)
+static int32_t ARM_Storage_PowerControl (ARM_POWER_STATE state)
 {
     switch (state)
     {
@@ -63,40 +65,41 @@
 
     case ARM_POWER_FULL:
         break;
-
-    default:
-        return ARM_DRIVER_ERROR_UNSUPPORTED;
     }
+    return ARM_DRIVER_OK;
 }
 
-int32_t ARM_Storage_ReadData (uint64_t addr, void *data, uint32_t size)  {
+static int32_t ARM_Storage_ReadData (uint64_t addr, void *data, uint32_t size)  {
 }
 
-int32_t ARM_Storage_ProgramData (uint64_t addr, const void *data, uint32_t size)  {
+static int32_t ARM_Storage_ProgramData (uint64_t addr, const void *data, uint32_t size)  {
 }
 
-int32_t ARM_Storage_Erase (uint64_t addr, uint32_t size)  {
+static int32_t ARM_Storage_Erase (uint64_t addr, uint32_t size)  {
 }
 
-int32_t ARM_Storage_EraseAll (void)  {
+static int32_t ARM_Storage_EraseAll (void)  {
 }
 
-ARM_STORAGE_STATUS ARM_Storage_GetStatus (void)  {
+static ARM_STORAGE_STATUS ARM_Storage_GetStatus (void)  {
 }
 
-int32_t ARM_Storage_GetInfo (ARM_STORAGE_INFO *info)  {
+static int32_t ARM_Storage_GetInfo (ARM_STORAGE_INFO *info)  {
 }
 
-uint32_t ARM_Storage_ResolveAddress(uint64_t addr) {
+static uint32_t ARM_Storage_ResolveAddress(uint64_t addr) {
 }
 
-int32_t ARM_Storage_GetNextBlock(const ARM_STORAGE_BLOCK* prev_block, ARM_STORAGE_BLOCK *next_block) {
+static int32_t ARM_Storage_GetNextBlock(const ARM_STORAGE_BLOCK* prev_block, ARM_STORAGE_BLOCK *next_block) {
 }
 
-int32_t ARM_Storage_GetBlock(uint64_t addr, ARM_STORAGE_BLOCK *block) {
+static int32_t ARM_Storage_GetBlock(uint64_t addr, ARM_STORAGE_BLOCK *block) {
 }
+
 // End Storage Interface
 
+extern \
+ARM_DRIVER_STORAGE Driver_Storage0;
 ARM_DRIVER_STORAGE Driver_Storage0 = {
     ARM_Storage_GetVersion,
     ARM_Storage_GetCapabilities,
diff --git a/CMSIS/Driver/DriverTemplates/Driver_USART.c b/CMSIS/Driver/DriverTemplates/Driver_USART.c
index 7e74984..8977ad0 100644
--- a/CMSIS/Driver/DriverTemplates/Driver_USART.c
+++ b/CMSIS/Driver/DriverTemplates/Driver_USART.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2018 Arm Limited. All rights reserved.
+ * Copyright (c) 2013-2020 Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: Apache-2.0
  *
@@ -48,30 +48,33 @@
     0, /* Signal CTS change event: \ref ARM_USART_EVENT_CTS */
     0, /* Signal DSR change event: \ref ARM_USART_EVENT_DSR */
     0, /* Signal DCD change event: \ref ARM_USART_EVENT_DCD */
-    0  /* Signal RI change event: \ref ARM_USART_EVENT_RI */
+    0, /* Signal RI change event: \ref ARM_USART_EVENT_RI */
+    0  /* Reserved (must be zero) */
 };
 
 //
 //   Functions
 //
 
-ARM_DRIVER_VERSION ARM_USART_GetVersion(void)
+static ARM_DRIVER_VERSION ARM_USART_GetVersion(void)
+{
+  return DriverVersion;
+}
+
+static ARM_USART_CAPABILITIES ARM_USART_GetCapabilities(void)
+{
+  return DriverCapabilities;
+}
+
+static int32_t ARM_USART_Initialize(ARM_USART_SignalEvent_t cb_event)
 {
 }
 
-ARM_USART_CAPABILITIES ARM_USART_GetCapabilities(void)
+static int32_t ARM_USART_Uninitialize(void)
 {
 }
 
-int32_t ARM_USART_Initialize(ARM_USART_SignalEvent_t cb_event)
-{
-}
-
-int32_t ARM_USART_Uninitialize(void)
-{
-}
-
-int32_t ARM_USART_PowerControl(ARM_POWER_STATE state)
+static int32_t ARM_USART_PowerControl(ARM_POWER_STATE state)
 {
     switch (state)
     {
@@ -83,55 +86,55 @@
 
     case ARM_POWER_FULL:
         break;
-
-    default:
-        return ARM_DRIVER_ERROR_UNSUPPORTED;
     }
+    return ARM_DRIVER_OK;
 }
 
-int32_t ARM_USART_Send(const void *data, uint32_t num)
+static int32_t ARM_USART_Send(const void *data, uint32_t num)
 {
 }
 
-int32_t ARM_USART_Receive(void *data, uint32_t num)
+static int32_t ARM_USART_Receive(void *data, uint32_t num)
 {
 }
 
-int32_t ARM_USART_Transfer(const void *data_out, void *data_in, uint32_t num)
+static int32_t ARM_USART_Transfer(const void *data_out, void *data_in, uint32_t num)
 {
 }
 
-uint32_t ARM_USART_GetTxCount(void)
+static uint32_t ARM_USART_GetTxCount(void)
 {
 }
 
-uint32_t ARM_USART_GetRxCount(void)
+static uint32_t ARM_USART_GetRxCount(void)
 {
 }
 
-int32_t ARM_USART_Control(uint32_t control, uint32_t arg)
+static int32_t ARM_USART_Control(uint32_t control, uint32_t arg)
 {
 }
 
-ARM_USART_STATUS ARM_USART_GetStatus(void)
+static ARM_USART_STATUS ARM_USART_GetStatus(void)
 {
 }
 
-int32_t ARM_USART_SetModemControl(ARM_USART_MODEM_CONTROL control)
+static int32_t ARM_USART_SetModemControl(ARM_USART_MODEM_CONTROL control)
 {
 }
 
-ARM_USART_MODEM_STATUS ARM_USART_GetModemStatus(void)
+static ARM_USART_MODEM_STATUS ARM_USART_GetModemStatus(void)
 {
 }
 
-void ARM_USART_SignalEvent(uint32_t event)
+static void ARM_USART_SignalEvent(uint32_t event)
 {
     // function body
 }
 
 // End USART Interface
 
+extern \
+ARM_DRIVER_USART Driver_USART0;
 ARM_DRIVER_USART Driver_USART0 = {
     ARM_USART_GetVersion,
     ARM_USART_GetCapabilities,
diff --git a/CMSIS/Driver/DriverTemplates/Driver_USBD.c b/CMSIS/Driver/DriverTemplates/Driver_USBD.c
index 1eb6f00..06554d1 100644
--- a/CMSIS/Driver/DriverTemplates/Driver_USBD.c
+++ b/CMSIS/Driver/DriverTemplates/Driver_USBD.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2018 Arm Limited. All rights reserved.
+ * Copyright (c) 2013-2020 Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: Apache-2.0
  *
@@ -30,31 +30,34 @@
 static const ARM_USBD_CAPABILITIES usbd_driver_capabilities = {
     0, /* vbus_detection */
     0, /* event_vbus_on */
-    0  /* event_vbus_off */
+    0, /* event_vbus_off */
+    0  /* reserved */
 };
 
 //
 // Functions
 //
 
-ARM_DRIVER_VERSION ARM_USBD_GetVersion(void)
+static ARM_DRIVER_VERSION ARM_USBD_GetVersion(void)
+{
+  return usbd_driver_version;
+}
+
+static ARM_USBD_CAPABILITIES ARM_USBD_GetCapabilities(void)
+{
+  return usbd_driver_capabilities;
+}
+
+static int32_t ARM_USBD_Initialize(ARM_USBD_SignalDeviceEvent_t cb_device_event,
+                                   ARM_USBD_SignalEndpointEvent_t cb_endpoint_event)
 {
 }
 
-ARM_USBD_CAPABILITIES ARM_USBD_GetCapabilities(void)
+static int32_t ARM_USBD_Uninitialize(void)
 {
 }
 
-int32_t ARM_USBD_Initialize(ARM_USBD_SignalDeviceEvent_t cb_device_event,
-                            ARM_USBD_SignalEndpointEvent_t cb_endpoint_event)
-{
-}
-
-int32_t ARM_USBD_Uninitialize(void)
-{
-}
-
-int32_t ARM_USBD_PowerControl(ARM_POWER_STATE state)
+static int32_t ARM_USBD_PowerControl(ARM_POWER_STATE state)
 {
     switch (state)
     {
@@ -66,78 +69,78 @@
 
     case ARM_POWER_FULL:
         break;
-
-    default:
-        return ARM_DRIVER_ERROR_UNSUPPORTED;
     }
+    return ARM_DRIVER_OK;
 }
 
-int32_t ARM_USBD_DeviceConnect(void)
+static int32_t ARM_USBD_DeviceConnect(void)
 {
 }
 
-int32_t ARM_USBD_DeviceDisconnect(void)
+static int32_t ARM_USBD_DeviceDisconnect(void)
 {
 }
 
-ARM_USBD_STATE ARM_USBD_DeviceGetState(void)
+static ARM_USBD_STATE ARM_USBD_DeviceGetState(void)
 {
 }
 
-int32_t ARM_USBD_DeviceRemoteWakeup(void)
+static int32_t ARM_USBD_DeviceRemoteWakeup(void)
 {
 }
 
-int32_t ARM_USBD_DeviceSetAddress(uint8_t dev_addr)
+static int32_t ARM_USBD_DeviceSetAddress(uint8_t dev_addr)
 {
 }
 
-int32_t ARM_USBD_ReadSetupPacket(uint8_t *setup)
+static int32_t ARM_USBD_ReadSetupPacket(uint8_t *setup)
 {
 }
 
-int32_t ARM_USBD_EndpointConfigure(uint8_t ep_addr,
-                                   uint8_t ep_type,
-                                   uint16_t ep_max_packet_size)
+static int32_t ARM_USBD_EndpointConfigure(uint8_t  ep_addr,
+                                          uint8_t  ep_type,
+                                          uint16_t ep_max_packet_size)
 {
 }
 
-int32_t ARM_USBD_EndpointUnconfigure(uint8_t ep_addr)
+static int32_t ARM_USBD_EndpointUnconfigure(uint8_t ep_addr)
 {
 }
 
-int32_t ARM_USBD_EndpointStall(uint8_t ep_addr, bool stall)
+static int32_t ARM_USBD_EndpointStall(uint8_t ep_addr, bool stall)
 {
 }
 
-int32_t ARM_USBD_EndpointTransfer(uint8_t ep_addr, uint8_t *data, uint32_t num)
+static int32_t ARM_USBD_EndpointTransfer(uint8_t ep_addr, uint8_t *data, uint32_t num)
 {
 }
 
-uint32_t ARM_USBD_EndpointTransferGetResult(uint8_t ep_addr)
+static uint32_t ARM_USBD_EndpointTransferGetResult(uint8_t ep_addr)
 {
 }
 
-int32_t ARM_USBD_EndpointTransferAbort(uint8_t ep_addr)
+static int32_t ARM_USBD_EndpointTransferAbort(uint8_t ep_addr)
 {
 }
 
-uint16_t ARM_USBD_GetFrameNumber(void)
+static uint16_t ARM_USBD_GetFrameNumber(void)
 {
 }
 
-void ARM_USBD_SignalDeviceEvent(uint32_t event)
+static void ARM_USBD_SignalDeviceEvent(uint32_t event)
 {
     // function body
 }
 
-void ARM_USBD_SignalEndpointEvent(uint8_t ep_addr, uint32_t ep_event)
+static void ARM_USBD_SignalEndpointEvent(uint8_t ep_addr, uint32_t ep_event)
 {
     // function body
 }
 
 // End USBD Interface
 
+extern \
+ARM_DRIVER_USBD Driver_USBD0;
 ARM_DRIVER_USBD Driver_USBD0 =
 {
     ARM_USBD_GetVersion,
diff --git a/CMSIS/Driver/DriverTemplates/Driver_USBH.c b/CMSIS/Driver/DriverTemplates/Driver_USBH.c
index 1ef3c5f..3d06689 100644
--- a/CMSIS/Driver/DriverTemplates/Driver_USBH.c
+++ b/CMSIS/Driver/DriverTemplates/Driver_USBH.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2018 Arm Limited. All rights reserved.
+ * Copyright (c) 2013-2020 Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: Apache-2.0
  *
@@ -34,7 +34,8 @@
     0,      /* Automatic SPLIT packet handling */
     0,      /* Signal Connect event */
     0,      /* Signal Disconnect event */
-    0       /* Signal Overcurrent event */
+    0,      /* Signal Overcurrent event */
+    0       /* Reserved (must be zero) */
 };
 
 //
@@ -72,10 +73,8 @@
 
     case ARM_POWER_FULL:
         break;
-
-    default:
-        return ARM_DRIVER_ERROR_UNSUPPORTED;
     }
+    return ARM_DRIVER_OK;
 }
 
 static int32_t ARM_USBH_PortVbusOnOff(uint8_t port, bool vbus)
@@ -157,6 +156,8 @@
 
 // End USBH Interface
 
+extern \
+ARM_DRIVER_USBH Driver_USBH0;
 ARM_DRIVER_USBH Driver_USBH0 = {
   ARM_USBH_GetVersion,
   ARM_USBH_GetCapabilities,
diff --git a/CMSIS/Driver/DriverTemplates/Driver_WiFi.c b/CMSIS/Driver/DriverTemplates/Driver_WiFi.c
index 416cf3d..03797ca 100644
--- a/CMSIS/Driver/DriverTemplates/Driver_WiFi.c
+++ b/CMSIS/Driver/DriverTemplates/Driver_WiFi.c
@@ -42,186 +42,172 @@
   0U,                                   // Ping (ICMP) supported
   0U                                    // Reserved (must be zero)
 };
-static ARM_DRIVER_VERSION WiFi_GetVersion (void) {
-  return driver_version; 
+static ARM_DRIVER_VERSION ARM_WiFi_GetVersion (void) {
+  return driver_version;
 }
 
-static ARM_WIFI_CAPABILITIES WiFi_GetCapabilities (void) { 
-  return driver_capabilities; 
+static ARM_WIFI_CAPABILITIES ARM_WiFi_GetCapabilities (void) { 
+  return driver_capabilities;
 }
 
-static int32_t WiFi_Initialize (ARM_WIFI_SignalEvent_t cb_event) {
-  (void)cb_event;
+static int32_t ARM_WiFi_Initialize (ARM_WIFI_SignalEvent_t cb_event) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_Uninitialize (void) {
+static int32_t ARM_WiFi_Uninitialize (void) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_PowerControl (ARM_POWER_STATE state) {
-  (void)state;
+static int32_t ARM_WiFi_PowerControl (ARM_POWER_STATE state) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_GetModuleInfo (char *module_info, uint32_t max_len) {
-  (void)module_info; (void) max_len;
+static int32_t ARM_WiFi_GetModuleInfo (char *module_info, uint32_t max_len) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_SetOption (uint32_t interface, uint32_t option, const void *data, uint32_t len) {
-  (void)interface; (void) option; (void)data; (void)len;
+static int32_t ARM_WiFi_SetOption (uint32_t interface, uint32_t option, const void *data, uint32_t len) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_GetOption (uint32_t interface, uint32_t option, void *data, uint32_t *len) {
-  (void)interface; (void) option; (void)data; (void)len;
+static int32_t ARM_WiFi_GetOption (uint32_t interface, uint32_t option, void *data, uint32_t *len) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
-static int32_t WiFi_Scan (ARM_WIFI_SCAN_INFO_t scan_info[], uint32_t max_num) {
-  (void)scan_info; (void)max_num;
+static int32_t ARM_WiFi_Scan (ARM_WIFI_SCAN_INFO_t scan_info[], uint32_t max_num) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_Activate (uint32_t interface, const ARM_WIFI_CONFIG_t *config) {
-  (void)interface; (void)config;
+static int32_t ARM_WiFi_Activate (uint32_t interface, const ARM_WIFI_CONFIG_t *config) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_Deactivate (uint32_t interface) {
-  (void)interface;
+static int32_t ARM_WiFi_Deactivate (uint32_t interface) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static uint32_t WiFi_IsConnected (void) {
+static uint32_t ARM_WiFi_IsConnected (void) {
   return 0U;
 }
 
-static int32_t WiFi_GetNetInfo (ARM_WIFI_NET_INFO_t *net_info) {
-  (void)net_info;
+static int32_t ARM_WiFi_GetNetInfo (ARM_WIFI_NET_INFO_t *net_info) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_BypassControl (uint32_t interface, uint32_t mode) {
-  (void)interface; (void)mode;
+static int32_t ARM_WiFi_BypassControl (uint32_t interface, uint32_t mode) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_EthSendFrame (uint32_t interface, const uint8_t *frame, uint32_t len){
-  (void)interface; (void)frame; (void)len;
+static int32_t ARM_WiFi_EthSendFrame (uint32_t interface, const uint8_t *frame, uint32_t len){
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_EthReadFrame (uint32_t interface, uint8_t *frame, uint32_t len){
-  (void)interface; (void)frame; (void)len;
+static int32_t ARM_WiFi_EthReadFrame (uint32_t interface, uint8_t *frame, uint32_t len){
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_EthGetRxFrameSize (uint32_t interface){
-  (void)interface;
+static uint32_t ARM_WiFi_EthGetRxFrameSize (uint32_t interface){
+  return 0U;
+}
+
+static int32_t ARM_WiFi_SocketCreate (int32_t af, int32_t type, int32_t protocol) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_SocketCreate (int32_t af, int32_t type, int32_t protocol) {
-  (void)af; (void)type; (void)protocol;
+static int32_t ARM_WiFi_SocketBind (int32_t socket, const uint8_t *ip, uint32_t ip_len, uint16_t port) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_SocketBind (int32_t socket, const uint8_t *ip, uint32_t ip_len, uint16_t port) {
-  (void)socket; (void)ip; (void)ip_len; (void)port;
+static int32_t ARM_WiFi_SocketListen (int32_t socket, int32_t backlog) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-
-static int32_t WiFi_SocketListen (int32_t socket, int32_t backlog) {
+static int32_t ARM_WiFi_SocketAccept (int32_t socket, uint8_t *ip, uint32_t *ip_len, uint16_t *port) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_SocketAccept (int32_t socket, uint8_t *ip, uint32_t *ip_len, uint16_t *port) {
+static int32_t ARM_WiFi_SocketConnect (int32_t socket, const uint8_t *ip, uint32_t ip_len, uint16_t port) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_SocketConnect (int32_t socket, const uint8_t *ip, uint32_t ip_len, uint16_t port) {
+static int32_t ARM_WiFi_SocketRecv (int32_t socket, void *buf, uint32_t len) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_SocketRecv (int32_t socket, void *buf, uint32_t len) {
+static int32_t ARM_WiFi_SocketRecvFrom (int32_t socket, void *buf, uint32_t len, uint8_t *ip, uint32_t *ip_len, uint16_t *port) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_SocketRecvFrom (int32_t socket, void *buf, uint32_t len, uint8_t *ip, uint32_t *ip_len, uint16_t *port) {
+static int32_t ARM_WiFi_SocketSend (int32_t socket, const void *buf, uint32_t len) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_SocketSend (int32_t socket, const void *buf, uint32_t len) {
+static int32_t ARM_WiFi_SocketSendTo (int32_t socket, const void *buf, uint32_t len, const uint8_t *ip, uint32_t ip_len, uint16_t port) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_SocketSendTo (int32_t socket, const void *buf, uint32_t len, const uint8_t *ip, uint32_t ip_len, uint16_t port) {
+static int32_t ARM_WiFi_SocketGetSockName (int32_t socket, uint8_t *ip, uint32_t *ip_len, uint16_t *port) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_SocketGetSockName (int32_t socket, uint8_t *ip, uint32_t *ip_len, uint16_t *port) {
+static int32_t ARM_WiFi_SocketGetPeerName (int32_t socket, uint8_t *ip, uint32_t *ip_len, uint16_t *port) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_SocketGetPeerName (int32_t socket, uint8_t *ip, uint32_t *ip_len, uint16_t *port) {
+static int32_t ARM_WiFi_SocketGetOpt (int32_t socket, int32_t opt_id, void *opt_val, uint32_t *opt_len) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_SocketGetOpt (int32_t socket, int32_t opt_id, void *opt_val, uint32_t *opt_len) {
+static int32_t ARM_WiFi_SocketSetOpt (int32_t socket, int32_t opt_id, const void *opt_val, uint32_t opt_len) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_SocketSetOpt (int32_t socket, int32_t opt_id, const void *opt_val, uint32_t opt_len) {
+static int32_t ARM_WiFi_SocketClose (int32_t socket) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_SocketClose (int32_t socket) {
+static int32_t ARM_WiFi_SocketGetHostByName (const char *name, int32_t af, uint8_t *ip, uint32_t *ip_len) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
-static int32_t WiFi_SocketGetHostByName (const char *name, int32_t af, uint8_t *ip, uint32_t *ip_len) {
-  return ARM_DRIVER_ERROR_UNSUPPORTED;
-}
-
-static int32_t WiFi_Ping (const uint8_t *ip, uint32_t ip_len) {
+static int32_t ARM_WiFi_Ping (const uint8_t *ip, uint32_t ip_len) {
   return ARM_DRIVER_ERROR_UNSUPPORTED;
 }
 
 /* WiFi Driver Control Block */
+extern \
+ARM_DRIVER_WIFI Driver_WiFi0;
 ARM_DRIVER_WIFI Driver_WiFi0 = { 
-  WiFi_GetVersion,
-  WiFi_GetCapabilities,
-  WiFi_Initialize,
-  WiFi_Uninitialize,
-  WiFi_PowerControl,
-  WiFi_GetModuleInfo,
-  WiFi_SetOption,
-  WiFi_GetOption,
-  WiFi_Scan,
-  WiFi_Activate,
-  WiFi_Deactivate,
-  WiFi_IsConnected,
-  WiFi_GetNetInfo,
-  WiFi_BypassControl,
-  WiFi_EthSendFrame,
-  WiFi_EthGetRxFrameSize,
-  WiFi_EthGetRxFrameSize,
-  WiFi_SocketCreate,
-  WiFi_SocketBind,
-  WiFi_SocketListen,
-  WiFi_SocketAccept,
-  WiFi_SocketConnect,
-  WiFi_SocketRecv,
-  WiFi_SocketRecvFrom,
-  WiFi_SocketSend,
-  WiFi_SocketSendTo,
-  WiFi_SocketGetSockName,
-  WiFi_SocketGetPeerName,
-  WiFi_SocketGetOpt,
-  WiFi_SocketSetOpt,
-  WiFi_SocketClose,
-  WiFi_SocketGetHostByName,
-  WiFi_Ping
+  ARM_WiFi_GetVersion,
+  ARM_WiFi_GetCapabilities,
+  ARM_WiFi_Initialize,
+  ARM_WiFi_Uninitialize,
+  ARM_WiFi_PowerControl,
+  ARM_WiFi_GetModuleInfo,
+  ARM_WiFi_SetOption,
+  ARM_WiFi_GetOption,
+  ARM_WiFi_Scan,
+  ARM_WiFi_Activate,
+  ARM_WiFi_Deactivate,
+  ARM_WiFi_IsConnected,
+  ARM_WiFi_GetNetInfo,
+  ARM_WiFi_BypassControl,
+  ARM_WiFi_EthSendFrame,
+  ARM_WiFi_EthReadFrame,
+  ARM_WiFi_EthGetRxFrameSize,
+  ARM_WiFi_SocketCreate,
+  ARM_WiFi_SocketBind,
+  ARM_WiFi_SocketListen,
+  ARM_WiFi_SocketAccept,
+  ARM_WiFi_SocketConnect,
+  ARM_WiFi_SocketRecv,
+  ARM_WiFi_SocketRecvFrom,
+  ARM_WiFi_SocketSend,
+  ARM_WiFi_SocketSendTo,
+  ARM_WiFi_SocketGetSockName,
+  ARM_WiFi_SocketGetPeerName,
+  ARM_WiFi_SocketGetOpt,
+  ARM_WiFi_SocketSetOpt,
+  ARM_WiFi_SocketClose,
+  ARM_WiFi_SocketGetHostByName,
+  ARM_WiFi_Ping
 };