summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/rxv1/ccrx/CMakeLists.txt9
-rw-r--r--ports/rxv1/ccrx/inc/nx_port.h218
-rw-r--r--ports/rxv1/gnu/CMakeLists.txt9
-rw-r--r--ports/rxv1/gnu/inc/nx_port.h193
-rw-r--r--ports/rxv1/iar/CMakeLists.txt9
-rw-r--r--ports/rxv1/iar/inc/nx_port.h214
-rw-r--r--ports/rxv2/ccrx/CMakeLists.txt9
-rw-r--r--ports/rxv2/ccrx/inc/nx_port.h4
-rw-r--r--ports/rxv2/gnu/inc/nx_port.h37
-rw-r--r--ports/rxv2/iar/CMakeLists.txt9
-rw-r--r--ports/rxv2/iar/inc/nx_port.h4
-rw-r--r--ports/rxv3/ccrx/CMakeLists.txt9
-rw-r--r--ports/rxv3/ccrx/inc/nx_port.h218
-rw-r--r--ports/rxv3/gnu/CMakeLists.txt9
-rw-r--r--ports/rxv3/gnu/inc/nx_port.h193
-rw-r--r--ports/rxv3/iar/CMakeLists.txt9
-rw-r--r--ports/rxv3/iar/inc/nx_port.h214
17 files changed, 1337 insertions, 30 deletions
diff --git a/ports/rxv1/ccrx/CMakeLists.txt b/ports/rxv1/ccrx/CMakeLists.txt
new file mode 100644
index 00000000..75c79531
--- /dev/null
+++ b/ports/rxv1/ccrx/CMakeLists.txt
@@ -0,0 +1,9 @@
+target_sources(${PROJECT_NAME} PRIVATE
+ # {{BEGIN_TARGET_SOURCES}}
+
+ # {{END_TARGET_SOURCES}}
+)
+
+target_include_directories(${PROJECT_NAME} PUBLIC
+ ${CMAKE_CURRENT_LIST_DIR}/inc
+)
diff --git a/ports/rxv1/ccrx/inc/nx_port.h b/ports/rxv1/ccrx/inc/nx_port.h
new file mode 100644
index 00000000..b9ec5331
--- /dev/null
+++ b/ports/rxv1/ccrx/inc/nx_port.h
@@ -0,0 +1,218 @@
+/***************************************************************************
+ * Copyright (c) 2024 Microsoft Corporation
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** NetX Component */
+/** */
+/** Port Specific */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* nx_port.h RXv1/CCRX */
+/* 6.2.1 */
+/* */
+/* AUTHOR */
+/* */
+/* Yuxin Zhou, Microsoft Corporation */
+/* */
+/* DESCRIPTION */
+/* */
+/* This file contains data type definitions that make the NetX */
+/* real-time TCP/IP function identically on a variety of different */
+/* processor architectures. */
+/* */
+/* RELEASE HISTORY */
+/* */
+/* DATE NAME DESCRIPTION */
+/* */
+/* 12-31-2020 Yuxin Zhou Initial Version 6.1.3 */
+/* 04-25-2022 Yuxin Zhou Modified comment(s), and */
+/* renamed temporary variable, */
+/* resulting in version 6.1.11 */
+/* 03-08-2023 Yajun Xia Modified comment(s), */
+/* removed duplicated macros, */
+/* resulting in version 6.2.1 */
+/* */
+/**************************************************************************/
+
+#ifndef NX_PORT_H
+#define NX_PORT_H
+
+/* Determine if the optional NetX user define file should be used. */
+
+#ifdef NX_INCLUDE_USER_DEFINE_FILE
+
+
+/* Yes, include the user defines in nx_user.h. The defines in this file may
+ alternately be defined on the command line. */
+
+#include "nx_user.h"
+#endif
+
+
+/* Use compilers define to determine endianness. */
+
+#ifdef __LIT
+#define NX_LITTLE_ENDIAN 1
+#endif
+
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+
+/* Define various constants for the port. */
+
+#ifndef NX_IP_PERIODIC_RATE
+#define NX_IP_PERIODIC_RATE 100 /* Default IP periodic rate of 1 second for
+ ports with 10ms timer interrupts. This
+ value may be defined instead at the
+ command line and this value will not be
+ used. */
+#endif
+
+
+/* Define macros that swap the endian for little endian ports. */
+#ifdef NX_LITTLE_ENDIAN
+#define NX_CHANGE_ULONG_ENDIAN(arg) \
+ { \
+ ULONG _i; \
+ ULONG _tmp; \
+ _i = (UINT)arg; \
+ /* _i = A, B, C, D */ \
+ _tmp = _i ^ (((_i) >> 16) | (_i << 16)); \
+ /* _tmp = _i ^ (_i ROR 16) = A^C, B^D, C^A, D^B */ \
+ _tmp &= 0xff00ffff; \
+ /* _tmp = A^C, 0, C^A, D^B */ \
+ _i = ((_i) >> 8) | (_i<<24); \
+ /* _i = D, A, B, C */ \
+ _i = _i ^ ((_tmp) >> 8); \
+ /* _i = D, C, B, A */ \
+ arg = _i; \
+ }
+#define NX_CHANGE_USHORT_ENDIAN(a) a = (((a >> 8) | (a << 8)) & 0xFFFF)
+
+
+#define __SWAP32__(val) ((((val) & 0xFF000000) >> 24 ) | (((val) & 0x00FF0000) >> 8) \
+ | (((val) & 0x0000FF00) << 8) | (((val) & 0x000000FF) << 24))
+
+#define __SWAP16__(val) ((((val) & 0xFF00) >> 8) | (((val) & 0x00FF) << 8))
+
+
+#ifndef htonl
+#define htonl(val) __SWAP32__(val)
+#endif /* htonl */
+#ifndef ntohl
+#define ntohl(val) __SWAP32__(val)
+#endif /* htonl */
+
+#ifndef htons
+#define htons(val) __SWAP16__(val)
+#endif /*htons */
+
+#ifndef ntohs
+#define ntohs(val) __SWAP16__(val)
+#endif /*htons */
+
+
+#else
+#define NX_CHANGE_ULONG_ENDIAN(a)
+#define NX_CHANGE_USHORT_ENDIAN(a)
+
+#ifndef htons
+#define htons(val) (val)
+#endif /* htons */
+
+#ifndef ntohs
+#define ntohs(val) (val)
+#endif /* ntohs */
+
+#ifndef ntohl
+#define ntohl(val) (val)
+#endif
+
+#ifndef htonl
+#define htonl(val) (val)
+#endif /* htonl */
+#endif
+
+
+
+/* Define several macros for the error checking shell in NetX. */
+
+#ifndef TX_TIMER_PROCESS_IN_ISR
+
+#define NX_CALLER_CHECKING_EXTERNS extern TX_THREAD *_tx_thread_current_ptr; \
+ extern TX_THREAD _tx_timer_thread; \
+ extern volatile ULONG _tx_thread_system_state;
+
+#define NX_THREADS_ONLY_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) || \
+ (_tx_thread_current_ptr == TX_NULL) || \
+ (_tx_thread_current_ptr == &_tx_timer_thread)) \
+ return(NX_CALLER_ERROR);
+
+#define NX_INIT_AND_THREADS_CALLER_CHECKING if (((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0))) || \
+ (_tx_thread_current_ptr == &_tx_timer_thread)) \
+ return(NX_CALLER_ERROR);
+
+
+#define NX_NOT_ISR_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0))) \
+ return(NX_CALLER_ERROR);
+
+#define NX_THREAD_WAIT_CALLER_CHECKING if ((wait_option) && \
+ ((_tx_thread_current_ptr == NX_NULL) || (TX_THREAD_GET_SYSTEM_STATE()) || (_tx_thread_current_ptr == &_tx_timer_thread))) \
+ return(NX_CALLER_ERROR);
+
+
+#else
+
+
+
+#define NX_CALLER_CHECKING_EXTERNS extern TX_THREAD *_tx_thread_current_ptr; \
+ extern volatile ULONG _tx_thread_system_state;
+
+#define NX_THREADS_ONLY_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) || \
+ (_tx_thread_current_ptr == TX_NULL)) \
+ return(NX_CALLER_ERROR);
+
+#define NX_INIT_AND_THREADS_CALLER_CHECKING if (((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0)))) \
+ return(NX_CALLER_ERROR);
+
+#define NX_NOT_ISR_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0))) \
+ return(NX_CALLER_ERROR);
+
+#define NX_THREAD_WAIT_CALLER_CHECKING if ((wait_option) && \
+ ((_tx_thread_current_ptr == NX_NULL) || (TX_THREAD_GET_SYSTEM_STATE()))) \
+ return(NX_CALLER_ERROR);
+
+#endif
+
+
+/* Define the version ID of NetX. This may be utilized by the application. */
+
+#ifdef NX_SYSTEM_INIT
+CHAR _nx_version_id[] =
+ "Copyright (c) 2024 Microsoft Corporation. * NetX Duo RXv1/CCRX Version 6.4.1 *";
+#else
+extern CHAR _nx_version_id[];
+#endif
+
+#endif
+
diff --git a/ports/rxv1/gnu/CMakeLists.txt b/ports/rxv1/gnu/CMakeLists.txt
new file mode 100644
index 00000000..75c79531
--- /dev/null
+++ b/ports/rxv1/gnu/CMakeLists.txt
@@ -0,0 +1,9 @@
+target_sources(${PROJECT_NAME} PRIVATE
+ # {{BEGIN_TARGET_SOURCES}}
+
+ # {{END_TARGET_SOURCES}}
+)
+
+target_include_directories(${PROJECT_NAME} PUBLIC
+ ${CMAKE_CURRENT_LIST_DIR}/inc
+)
diff --git a/ports/rxv1/gnu/inc/nx_port.h b/ports/rxv1/gnu/inc/nx_port.h
new file mode 100644
index 00000000..880d9be0
--- /dev/null
+++ b/ports/rxv1/gnu/inc/nx_port.h
@@ -0,0 +1,193 @@
+/***************************************************************************
+ * Copyright (c) 2024 Microsoft Corporation
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** NetX Component */
+/** */
+/** Port Specific */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* nx_port.h RXv1/GNU */
+/* 6.1.11 */
+/* */
+/* AUTHOR */
+/* */
+/* Yuxin Zhou, Microsoft Corporation */
+/* */
+/* DESCRIPTION */
+/* */
+/* This file contains data type definitions that make the NetX */
+/* real-time TCP/IP function identically on a variety of different */
+/* processor architectures. */
+/* */
+/* RELEASE HISTORY */
+/* */
+/* DATE NAME DESCRIPTION */
+/* */
+/* 12-31-2020 Yuxin Zhou Initial Version 6.1.3 */
+/* 04-25-2022 Yuxin Zhou Modified comment(s), and */
+/* renamed temporary variable, */
+/* resulting in version 6.1.11 */
+/* */
+/**************************************************************************/
+
+#ifndef NX_PORT_H
+#define NX_PORT_H
+
+/* Determine if the optional NetX user define file should be used. */
+
+#ifdef NX_INCLUDE_USER_DEFINE_FILE
+
+
+/* Yes, include the user defines in nx_user.h. The defines in this file may
+ alternately be defined on the command line. */
+
+#include "nx_user.h"
+#endif
+
+
+/* Use compilers define to determine endianness. */
+
+#ifdef __RX_LITTLE_ENDIAN__
+#define NX_LITTLE_ENDIAN 1
+#endif
+
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+
+/* Define various constants for the port. */
+
+#ifndef NX_IP_PERIODIC_RATE
+#define NX_IP_PERIODIC_RATE 100 /* Default IP periodic rate of 1 second for
+ ports with 10ms timer interrupts. This
+ value may be defined instead at the
+ command line and this value will not be
+ used. */
+#endif
+
+
+/* Define macros that swap the endian for little endian ports. */
+
+#ifdef NX_LITTLE_ENDIAN
+#define NX_CHANGE_ULONG_ENDIAN(arg) (arg) = __builtin_bswap32(arg)
+#define NX_CHANGE_USHORT_ENDIAN(arg) (arg) = __builtin_bswap16(arg)
+
+
+#ifndef htonl
+#define htonl(val) __builtin_bswap32(val)
+#endif /* htonl */
+#ifndef ntohl
+#define ntohl(val) __builtin_bswap32(val)
+#endif /* htonl */
+
+#ifndef htons
+#define htons(val) __builtin_bswap16(val)
+#endif /*htons */
+
+#ifndef ntohs
+#define ntohs(val) __builtin_bswap16(val)
+#endif /*htons */
+
+#else
+#define NX_CHANGE_ULONG_ENDIAN(a)
+#define NX_CHANGE_USHORT_ENDIAN(a)
+
+#ifndef htons
+#define htons(val) (val)
+#endif /* htons */
+
+#ifndef ntohs
+#define ntohs(val) (val)
+#endif /* ntohs */
+
+#ifndef ntohl
+#define ntohl(val) (val)
+#endif
+
+#ifndef htonl
+#define htonl(val) (val)
+#endif /* htonl */
+#endif
+
+
+/* Define several macros for the error checking shell in NetX. */
+
+#ifndef TX_TIMER_PROCESS_IN_ISR
+
+#define NX_CALLER_CHECKING_EXTERNS extern TX_THREAD *_tx_thread_current_ptr; \
+ extern TX_THREAD _tx_timer_thread; \
+ extern volatile ULONG _tx_thread_system_state;
+
+#define NX_THREADS_ONLY_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) || \
+ (_tx_thread_current_ptr == TX_NULL) || \
+ (_tx_thread_current_ptr == &_tx_timer_thread)) \
+ return(NX_CALLER_ERROR);
+
+#define NX_INIT_AND_THREADS_CALLER_CHECKING if (((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0))) || \
+ (_tx_thread_current_ptr == &_tx_timer_thread)) \
+ return(NX_CALLER_ERROR);
+
+
+#define NX_NOT_ISR_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0))) \
+ return(NX_CALLER_ERROR);
+
+#define NX_THREAD_WAIT_CALLER_CHECKING if ((wait_option) && \
+ ((_tx_thread_current_ptr == NX_NULL) || (TX_THREAD_GET_SYSTEM_STATE()) || (_tx_thread_current_ptr == &_tx_timer_thread))) \
+ return(NX_CALLER_ERROR);
+
+
+#else
+
+
+
+#define NX_CALLER_CHECKING_EXTERNS extern TX_THREAD *_tx_thread_current_ptr; \
+ extern volatile ULONG _tx_thread_system_state;
+
+#define NX_THREADS_ONLY_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) || \
+ (_tx_thread_current_ptr == TX_NULL)) \
+ return(NX_CALLER_ERROR);
+
+#define NX_INIT_AND_THREADS_CALLER_CHECKING if (((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0)))) \
+ return(NX_CALLER_ERROR);
+
+#define NX_NOT_ISR_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0))) \
+ return(NX_CALLER_ERROR);
+
+#define NX_THREAD_WAIT_CALLER_CHECKING if ((wait_option) && \
+ ((_tx_thread_current_ptr == NX_NULL) || (TX_THREAD_GET_SYSTEM_STATE()))) \
+ return(NX_CALLER_ERROR);
+
+#endif
+
+
+/* Define the version ID of NetX. This may be utilized by the application. */
+
+#ifdef NX_SYSTEM_INIT
+CHAR _nx_version_id[] =
+ "Copyright (c) 2024 Microsoft Corporation. * NetX Duo RXv1/GNU Version 6.4.1 *";
+#else
+extern CHAR _nx_version_id[];
+#endif
+
+#endif
+
diff --git a/ports/rxv1/iar/CMakeLists.txt b/ports/rxv1/iar/CMakeLists.txt
new file mode 100644
index 00000000..75c79531
--- /dev/null
+++ b/ports/rxv1/iar/CMakeLists.txt
@@ -0,0 +1,9 @@
+target_sources(${PROJECT_NAME} PRIVATE
+ # {{BEGIN_TARGET_SOURCES}}
+
+ # {{END_TARGET_SOURCES}}
+)
+
+target_include_directories(${PROJECT_NAME} PUBLIC
+ ${CMAKE_CURRENT_LIST_DIR}/inc
+)
diff --git a/ports/rxv1/iar/inc/nx_port.h b/ports/rxv1/iar/inc/nx_port.h
new file mode 100644
index 00000000..57a8454f
--- /dev/null
+++ b/ports/rxv1/iar/inc/nx_port.h
@@ -0,0 +1,214 @@
+/***************************************************************************
+ * Copyright (c) 2024 Microsoft Corporation
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** NetX Component */
+/** */
+/** Port Specific */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* nx_port.h RXv1/IAR */
+/* 6.1.11 */
+/* */
+/* AUTHOR */
+/* */
+/* Yuxin Zhou, Microsoft Corporation */
+/* */
+/* DESCRIPTION */
+/* */
+/* This file contains data type definitions that make the NetX */
+/* real-time TCP/IP function identically on a variety of different */
+/* processor architectures. */
+/* */
+/* RELEASE HISTORY */
+/* */
+/* DATE NAME DESCRIPTION */
+/* */
+/* 12-31-2020 Yuxin Zhou Initial Version 6.1.3 */
+/* 04-25-2022 Yuxin Zhou Modified comment(s), and */
+/* renamed temporary variable, */
+/* resulting in version 6.1.11 */
+/* */
+/**************************************************************************/
+
+#ifndef NX_PORT_H
+#define NX_PORT_H
+
+/* Determine if the optional NetX user define file should be used. */
+
+#ifdef NX_INCLUDE_USER_DEFINE_FILE
+
+
+/* Yes, include the user defines in nx_user.h. The defines in this file may
+ alternately be defined on the command line. */
+
+#include "nx_user.h"
+#endif
+
+
+/* Use compilers define to determine endianness. */
+
+#if __LITTLE_ENDIAN__
+#define NX_LITTLE_ENDIAN 1
+#endif
+
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+
+/* Define various constants for the port. */
+
+#ifndef NX_IP_PERIODIC_RATE
+#define NX_IP_PERIODIC_RATE 100 /* Default IP periodic rate of 1 second for
+ ports with 10ms timer interrupts. This
+ value may be defined instead at the
+ command line and this value will not be
+ used. */
+#endif
+
+
+/* Define macros that swap the endian for little endian ports. */
+
+#ifdef NX_LITTLE_ENDIAN
+#define NX_CHANGE_ULONG_ENDIAN(arg) \
+ { \
+ ULONG _i; \
+ ULONG _tmp; \
+ _i = (UINT)arg; \
+ /* _i = A, B, C, D */ \
+ _tmp = _i ^ (((_i) >> 16) | (_i << 16)); \
+ /* _tmp = _i ^ (_i ROR 16) = A^C, B^D, C^A, D^B */ \
+ _tmp &= 0xff00ffff; \
+ /* _tmp = A^C, 0, C^A, D^B */ \
+ _i = ((_i) >> 8) | (_i<<24); \
+ /* _i = D, A, B, C */ \
+ _i = _i ^ ((_tmp) >> 8); \
+ /* _i = D, C, B, A */ \
+ arg = _i; \
+ }
+#define NX_CHANGE_USHORT_ENDIAN(a) a = (((a >> 8) | (a << 8)) & 0xFFFF)
+
+
+#define __SWAP32__(val) ((((val) & 0xFF000000) >> 24 ) | (((val) & 0x00FF0000) >> 8) \
+ | (((val) & 0x0000FF00) << 8) | (((val) & 0x000000FF) << 24))
+
+#define __SWAP16__(val) ((((val) & 0xFF00) >> 8) | (((val) & 0x00FF) << 8))
+
+
+#ifndef htonl
+#define htonl(val) __SWAP32__(val)
+#endif /* htonl */
+#ifndef ntohl
+#define ntohl(val) __SWAP32__(val)
+#endif /* htonl */
+
+#ifndef htons
+#define htons(val) __SWAP16__(val)
+#endif /*htons */
+
+#ifndef ntohs
+#define ntohs(val) __SWAP16__(val)
+#endif /*htons */
+
+#else
+#define NX_CHANGE_ULONG_ENDIAN(a)
+#define NX_CHANGE_USHORT_ENDIAN(a)
+
+#ifndef htons
+#define htons(val) (val)
+#endif /* htons */
+
+#ifndef ntohs
+#define ntohs(val) (val)
+#endif /* ntohs */
+
+#ifndef ntohl
+#define ntohl(val) (val)
+#endif
+
+#ifndef htonl
+#define htonl(val) (val)
+#endif /* htonl */
+#endif
+
+
+/* Define several macros for the error checking shell in NetX. */
+
+#ifndef TX_TIMER_PROCESS_IN_ISR
+
+#define NX_CALLER_CHECKING_EXTERNS extern TX_THREAD *_tx_thread_current_ptr; \
+ extern TX_THREAD _tx_timer_thread; \
+ extern volatile ULONG _tx_thread_system_state;
+
+#define NX_THREADS_ONLY_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) || \
+ (_tx_thread_current_ptr == TX_NULL) || \
+ (_tx_thread_current_ptr == &_tx_timer_thread)) \
+ return(NX_CALLER_ERROR);
+
+#define NX_INIT_AND_THREADS_CALLER_CHECKING if (((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0))) || \
+ (_tx_thread_current_ptr == &_tx_timer_thread)) \
+ return(NX_CALLER_ERROR);
+
+
+#define NX_NOT_ISR_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0))) \
+ return(NX_CALLER_ERROR);
+
+#define NX_THREAD_WAIT_CALLER_CHECKING if ((wait_option) && \
+ ((_tx_thread_current_ptr == NX_NULL) || (TX_THREAD_GET_SYSTEM_STATE()) || (_tx_thread_current_ptr == &_tx_timer_thread))) \
+ return(NX_CALLER_ERROR);
+
+
+#else
+
+
+
+#define NX_CALLER_CHECKING_EXTERNS extern TX_THREAD *_tx_thread_current_ptr; \
+ extern volatile ULONG _tx_thread_system_state;
+
+#define NX_THREADS_ONLY_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) || \
+ (_tx_thread_current_ptr == TX_NULL)) \
+ return(NX_CALLER_ERROR);
+
+#define NX_INIT_AND_THREADS_CALLER_CHECKING if (((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0)))) \
+ return(NX_CALLER_ERROR);
+
+#define NX_NOT_ISR_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0))) \
+ return(NX_CALLER_ERROR);
+
+#define NX_THREAD_WAIT_CALLER_CHECKING if ((wait_option) && \
+ ((_tx_thread_current_ptr == NX_NULL) || (TX_THREAD_GET_SYSTEM_STATE()))) \
+ return(NX_CALLER_ERROR);
+
+#endif
+
+
+/* Define the version ID of NetX. This may be utilized by the application. */
+
+#ifdef NX_SYSTEM_INIT
+CHAR _nx_version_id[] =
+ "Copyright (c) 2024 Microsoft Corporation. * NetX Duo RXv1/IAR Version 6.4.1 *";
+#else
+extern CHAR _nx_version_id[];
+#endif
+
+#endif
+
diff --git a/ports/rxv2/ccrx/CMakeLists.txt b/ports/rxv2/ccrx/CMakeLists.txt
new file mode 100644
index 00000000..75c79531
--- /dev/null
+++ b/ports/rxv2/ccrx/CMakeLists.txt
@@ -0,0 +1,9 @@
+target_sources(${PROJECT_NAME} PRIVATE
+ # {{BEGIN_TARGET_SOURCES}}
+
+ # {{END_TARGET_SOURCES}}
+)
+
+target_include_directories(${PROJECT_NAME} PUBLIC
+ ${CMAKE_CURRENT_LIST_DIR}/inc
+)
diff --git a/ports/rxv2/ccrx/inc/nx_port.h b/ports/rxv2/ccrx/inc/nx_port.h
index 968b3e08..73c78966 100644
--- a/ports/rxv2/ccrx/inc/nx_port.h
+++ b/ports/rxv2/ccrx/inc/nx_port.h
@@ -67,9 +67,11 @@
#endif
-/* Default to little endian, since this is what most ARM targets are. */
+/* Use compilers define to determine endianness. */
+#ifdef __LIT
#define NX_LITTLE_ENDIAN 1
+#endif
#include <stdio.h>
diff --git a/ports/rxv2/gnu/inc/nx_port.h b/ports/rxv2/gnu/inc/nx_port.h
index b47ea34e..de9046c7 100644
--- a/ports/rxv2/gnu/inc/nx_port.h
+++ b/ports/rxv2/gnu/inc/nx_port.h
@@ -64,9 +64,11 @@
#endif
-/* Default to little endian, since this is what most ARM targets are. */
+/* Use compilers define to determine endianness. */
+#ifdef __RX_LITTLE_ENDIAN__
#define NX_LITTLE_ENDIAN 1
+#endif
#include <stdio.h>
@@ -88,44 +90,23 @@
/* Define macros that swap the endian for little endian ports. */
#ifdef NX_LITTLE_ENDIAN
-#define NX_CHANGE_ULONG_ENDIAN(arg) \
- { \
- ULONG _i; \
- ULONG _tmp; \
- _i = (UINT)arg; \
- /* _i = A, B, C, D */ \
- _tmp = _i ^ (((_i) >> 16) | (_i << 16)); \
- /* _tmp = _i ^ (_i ROR 16) = A^C, B^D, C^A, D^B */ \
- _tmp &= 0xff00ffff; \
- /* _tmp = A^C, 0, C^A, D^B */ \
- _i = ((_i) >> 8) | (_i<<24); \
- /* _i = D, A, B, C */ \
- _i = _i ^ ((_tmp) >> 8); \
- /* _i = D, C, B, A */ \
- arg = _i; \
- }
-#define NX_CHANGE_USHORT_ENDIAN(a) a = (((a >> 8) | (a << 8)) & 0xFFFF)
-
-
-#define __SWAP32__(val) ((((val) & 0xFF000000) >> 24 ) | (((val) & 0x00FF0000) >> 8) \
- | (((val) & 0x0000FF00) << 8) | (((val) & 0x000000FF) << 24))
-
-#define __SWAP16__(val) ((((val) & 0xFF00) >> 8) | (((val) & 0x00FF) << 8))
+#define NX_CHANGE_ULONG_ENDIAN(arg) (arg) = __builtin_bswap32(arg)
+#define NX_CHANGE_USHORT_ENDIAN(arg) (arg) = __builtin_bswap16(arg)
#ifndef htonl
-#define htonl(val) __SWAP32__(val)
+#define htonl(val) __builtin_bswap32(val)
#endif /* htonl */
#ifndef ntohl
-#define ntohl(val) __SWAP32__(val)
+#define ntohl(val) __builtin_bswap32(val)
#endif /* htonl */
#ifndef htons
-#define htons(val) __SWAP16__(val)
+#define htons(val) __builtin_bswap16(val)
#endif /*htons */
#ifndef ntohs
-#define ntohs(val) __SWAP16__(val)
+#define ntohs(val) __builtin_bswap16(val)
#endif /*htons */
#else
diff --git a/ports/rxv2/iar/CMakeLists.txt b/ports/rxv2/iar/CMakeLists.txt
new file mode 100644
index 00000000..75c79531
--- /dev/null
+++ b/ports/rxv2/iar/CMakeLists.txt
@@ -0,0 +1,9 @@
+target_sources(${PROJECT_NAME} PRIVATE
+ # {{BEGIN_TARGET_SOURCES}}
+
+ # {{END_TARGET_SOURCES}}
+)
+
+target_include_directories(${PROJECT_NAME} PUBLIC
+ ${CMAKE_CURRENT_LIST_DIR}/inc
+)
diff --git a/ports/rxv2/iar/inc/nx_port.h b/ports/rxv2/iar/inc/nx_port.h
index 9ea4cbb6..14669997 100644
--- a/ports/rxv2/iar/inc/nx_port.h
+++ b/ports/rxv2/iar/inc/nx_port.h
@@ -64,9 +64,11 @@
#endif
-/* Default to little endian, since this is what most ARM targets are. */
+/* Use compilers define to determine endianness. */
+#if __LITTLE_ENDIAN__
#define NX_LITTLE_ENDIAN 1
+#endif
#include <stdio.h>
diff --git a/ports/rxv3/ccrx/CMakeLists.txt b/ports/rxv3/ccrx/CMakeLists.txt
new file mode 100644
index 00000000..75c79531
--- /dev/null
+++ b/ports/rxv3/ccrx/CMakeLists.txt
@@ -0,0 +1,9 @@
+target_sources(${PROJECT_NAME} PRIVATE
+ # {{BEGIN_TARGET_SOURCES}}
+
+ # {{END_TARGET_SOURCES}}
+)
+
+target_include_directories(${PROJECT_NAME} PUBLIC
+ ${CMAKE_CURRENT_LIST_DIR}/inc
+)
diff --git a/ports/rxv3/ccrx/inc/nx_port.h b/ports/rxv3/ccrx/inc/nx_port.h
new file mode 100644
index 00000000..3f932b85
--- /dev/null
+++ b/ports/rxv3/ccrx/inc/nx_port.h
@@ -0,0 +1,218 @@
+/***************************************************************************
+ * Copyright (c) 2024 Microsoft Corporation
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** NetX Component */
+/** */
+/** Port Specific */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* nx_port.h RXv3/CCRX */
+/* 6.2.1 */
+/* */
+/* AUTHOR */
+/* */
+/* Yuxin Zhou, Microsoft Corporation */
+/* */
+/* DESCRIPTION */
+/* */
+/* This file contains data type definitions that make the NetX */
+/* real-time TCP/IP function identically on a variety of different */
+/* processor architectures. */
+/* */
+/* RELEASE HISTORY */
+/* */
+/* DATE NAME DESCRIPTION */
+/* */
+/* 12-31-2020 Yuxin Zhou Initial Version 6.1.3 */
+/* 04-25-2022 Yuxin Zhou Modified comment(s), and */
+/* renamed temporary variable, */
+/* resulting in version 6.1.11 */
+/* 03-08-2023 Yajun Xia Modified comment(s), */
+/* removed duplicated macros, */
+/* resulting in version 6.2.1 */
+/* */
+/**************************************************************************/
+
+#ifndef NX_PORT_H
+#define NX_PORT_H
+
+/* Determine if the optional NetX user define file should be used. */
+
+#ifdef NX_INCLUDE_USER_DEFINE_FILE
+
+
+/* Yes, include the user defines in nx_user.h. The defines in this file may
+ alternately be defined on the command line. */
+
+#include "nx_user.h"
+#endif
+
+
+/* Use compilers define to determine endianness. */
+
+#ifdef __LIT
+#define NX_LITTLE_ENDIAN 1
+#endif
+
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+
+/* Define various constants for the port. */
+
+#ifndef NX_IP_PERIODIC_RATE
+#define NX_IP_PERIODIC_RATE 100 /* Default IP periodic rate of 1 second for
+ ports with 10ms timer interrupts. This
+ value may be defined instead at the
+ command line and this value will not be
+ used. */
+#endif
+
+
+/* Define macros that swap the endian for little endian ports. */
+#ifdef NX_LITTLE_ENDIAN
+#define NX_CHANGE_ULONG_ENDIAN(arg) \
+ { \
+ ULONG _i; \
+ ULONG _tmp; \
+ _i = (UINT)arg; \
+ /* _i = A, B, C, D */ \
+ _tmp = _i ^ (((_i) >> 16) | (_i << 16)); \
+ /* _tmp = _i ^ (_i ROR 16) = A^C, B^D, C^A, D^B */ \
+ _tmp &= 0xff00ffff; \
+ /* _tmp = A^C, 0, C^A, D^B */ \
+ _i = ((_i) >> 8) | (_i<<24); \
+ /* _i = D, A, B, C */ \
+ _i = _i ^ ((_tmp) >> 8); \
+ /* _i = D, C, B, A */ \
+ arg = _i; \
+ }
+#define NX_CHANGE_USHORT_ENDIAN(a) a = (((a >> 8) | (a << 8)) & 0xFFFF)
+
+
+#define __SWAP32__(val) ((((val) & 0xFF000000) >> 24 ) | (((val) & 0x00FF0000) >> 8) \
+ | (((val) & 0x0000FF00) << 8) | (((val) & 0x000000FF) << 24))
+
+#define __SWAP16__(val) ((((val) & 0xFF00) >> 8) | (((val) & 0x00FF) << 8))
+
+
+#ifndef htonl
+#define htonl(val) __SWAP32__(val)
+#endif /* htonl */
+#ifndef ntohl
+#define ntohl(val) __SWAP32__(val)
+#endif /* htonl */
+
+#ifndef htons
+#define htons(val) __SWAP16__(val)
+#endif /*htons */
+
+#ifndef ntohs
+#define ntohs(val) __SWAP16__(val)
+#endif /*htons */
+
+
+#else
+#define NX_CHANGE_ULONG_ENDIAN(a)
+#define NX_CHANGE_USHORT_ENDIAN(a)
+
+#ifndef htons
+#define htons(val) (val)
+#endif /* htons */
+
+#ifndef ntohs
+#define ntohs(val) (val)
+#endif /* ntohs */
+
+#ifndef ntohl
+#define ntohl(val) (val)
+#endif
+
+#ifndef htonl
+#define htonl(val) (val)
+#endif /* htonl */
+#endif
+
+
+
+/* Define several macros for the error checking shell in NetX. */
+
+#ifndef TX_TIMER_PROCESS_IN_ISR
+
+#define NX_CALLER_CHECKING_EXTERNS extern TX_THREAD *_tx_thread_current_ptr; \
+ extern TX_THREAD _tx_timer_thread; \
+ extern volatile ULONG _tx_thread_system_state;
+
+#define NX_THREADS_ONLY_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) || \
+ (_tx_thread_current_ptr == TX_NULL) || \
+ (_tx_thread_current_ptr == &_tx_timer_thread)) \
+ return(NX_CALLER_ERROR);
+
+#define NX_INIT_AND_THREADS_CALLER_CHECKING if (((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0))) || \
+ (_tx_thread_current_ptr == &_tx_timer_thread)) \
+ return(NX_CALLER_ERROR);
+
+
+#define NX_NOT_ISR_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0))) \
+ return(NX_CALLER_ERROR);
+
+#define NX_THREAD_WAIT_CALLER_CHECKING if ((wait_option) && \
+ ((_tx_thread_current_ptr == NX_NULL) || (TX_THREAD_GET_SYSTEM_STATE()) || (_tx_thread_current_ptr == &_tx_timer_thread))) \
+ return(NX_CALLER_ERROR);
+
+
+#else
+
+
+
+#define NX_CALLER_CHECKING_EXTERNS extern TX_THREAD *_tx_thread_current_ptr; \
+ extern volatile ULONG _tx_thread_system_state;
+
+#define NX_THREADS_ONLY_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) || \
+ (_tx_thread_current_ptr == TX_NULL)) \
+ return(NX_CALLER_ERROR);
+
+#define NX_INIT_AND_THREADS_CALLER_CHECKING if (((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0)))) \
+ return(NX_CALLER_ERROR);
+
+#define NX_NOT_ISR_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0))) \
+ return(NX_CALLER_ERROR);
+
+#define NX_THREAD_WAIT_CALLER_CHECKING if ((wait_option) && \
+ ((_tx_thread_current_ptr == NX_NULL) || (TX_THREAD_GET_SYSTEM_STATE()))) \
+ return(NX_CALLER_ERROR);
+
+#endif
+
+
+/* Define the version ID of NetX. This may be utilized by the application. */
+
+#ifdef NX_SYSTEM_INIT
+CHAR _nx_version_id[] =
+ "Copyright (c) 2024 Microsoft Corporation. * NetX Duo RXv3/CCRX Version 6.4.1 *";
+#else
+extern CHAR _nx_version_id[];
+#endif
+
+#endif
+
diff --git a/ports/rxv3/gnu/CMakeLists.txt b/ports/rxv3/gnu/CMakeLists.txt
new file mode 100644
index 00000000..75c79531
--- /dev/null
+++ b/ports/rxv3/gnu/CMakeLists.txt
@@ -0,0 +1,9 @@
+target_sources(${PROJECT_NAME} PRIVATE
+ # {{BEGIN_TARGET_SOURCES}}
+
+ # {{END_TARGET_SOURCES}}
+)
+
+target_include_directories(${PROJECT_NAME} PUBLIC
+ ${CMAKE_CURRENT_LIST_DIR}/inc
+)
diff --git a/ports/rxv3/gnu/inc/nx_port.h b/ports/rxv3/gnu/inc/nx_port.h
new file mode 100644
index 00000000..1038427b
--- /dev/null
+++ b/ports/rxv3/gnu/inc/nx_port.h
@@ -0,0 +1,193 @@
+/***************************************************************************
+ * Copyright (c) 2024 Microsoft Corporation
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** NetX Component */
+/** */
+/** Port Specific */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* nx_port.h RXv3/GNU */
+/* 6.1.11 */
+/* */
+/* AUTHOR */
+/* */
+/* Yuxin Zhou, Microsoft Corporation */
+/* */
+/* DESCRIPTION */
+/* */
+/* This file contains data type definitions that make the NetX */
+/* real-time TCP/IP function identically on a variety of different */
+/* processor architectures. */
+/* */
+/* RELEASE HISTORY */
+/* */
+/* DATE NAME DESCRIPTION */
+/* */
+/* 12-31-2020 Yuxin Zhou Initial Version 6.1.3 */
+/* 04-25-2022 Yuxin Zhou Modified comment(s), and */
+/* renamed temporary variable, */
+/* resulting in version 6.1.11 */
+/* */
+/**************************************************************************/
+
+#ifndef NX_PORT_H
+#define NX_PORT_H
+
+/* Determine if the optional NetX user define file should be used. */
+
+#ifdef NX_INCLUDE_USER_DEFINE_FILE
+
+
+/* Yes, include the user defines in nx_user.h. The defines in this file may
+ alternately be defined on the command line. */
+
+#include "nx_user.h"
+#endif
+
+
+/* Use compilers define to determine endianness. */
+
+#ifdef __RX_LITTLE_ENDIAN__
+#define NX_LITTLE_ENDIAN 1
+#endif
+
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+
+/* Define various constants for the port. */
+
+#ifndef NX_IP_PERIODIC_RATE
+#define NX_IP_PERIODIC_RATE 100 /* Default IP periodic rate of 1 second for
+ ports with 10ms timer interrupts. This
+ value may be defined instead at the
+ command line and this value will not be
+ used. */
+#endif
+
+
+/* Define macros that swap the endian for little endian ports. */
+
+#ifdef NX_LITTLE_ENDIAN
+#define NX_CHANGE_ULONG_ENDIAN(arg) (arg) = __builtin_bswap32(arg)
+#define NX_CHANGE_USHORT_ENDIAN(arg) (arg) = __builtin_bswap16(arg)
+
+
+#ifndef htonl
+#define htonl(val) __builtin_bswap32(val)
+#endif /* htonl */
+#ifndef ntohl
+#define ntohl(val) __builtin_bswap32(val)
+#endif /* htonl */
+
+#ifndef htons
+#define htons(val) __builtin_bswap16(val)
+#endif /*htons */
+
+#ifndef ntohs
+#define ntohs(val) __builtin_bswap16(val)
+#endif /*htons */
+
+#else
+#define NX_CHANGE_ULONG_ENDIAN(a)
+#define NX_CHANGE_USHORT_ENDIAN(a)
+
+#ifndef htons
+#define htons(val) (val)
+#endif /* htons */
+
+#ifndef ntohs
+#define ntohs(val) (val)
+#endif /* ntohs */
+
+#ifndef ntohl
+#define ntohl(val) (val)
+#endif
+
+#ifndef htonl
+#define htonl(val) (val)
+#endif /* htonl */
+#endif
+
+
+/* Define several macros for the error checking shell in NetX. */
+
+#ifndef TX_TIMER_PROCESS_IN_ISR
+
+#define NX_CALLER_CHECKING_EXTERNS extern TX_THREAD *_tx_thread_current_ptr; \
+ extern TX_THREAD _tx_timer_thread; \
+ extern volatile ULONG _tx_thread_system_state;
+
+#define NX_THREADS_ONLY_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) || \
+ (_tx_thread_current_ptr == TX_NULL) || \
+ (_tx_thread_current_ptr == &_tx_timer_thread)) \
+ return(NX_CALLER_ERROR);
+
+#define NX_INIT_AND_THREADS_CALLER_CHECKING if (((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0))) || \
+ (_tx_thread_current_ptr == &_tx_timer_thread)) \
+ return(NX_CALLER_ERROR);
+
+
+#define NX_NOT_ISR_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0))) \
+ return(NX_CALLER_ERROR);
+
+#define NX_THREAD_WAIT_CALLER_CHECKING if ((wait_option) && \
+ ((_tx_thread_current_ptr == NX_NULL) || (TX_THREAD_GET_SYSTEM_STATE()) || (_tx_thread_current_ptr == &_tx_timer_thread))) \
+ return(NX_CALLER_ERROR);
+
+
+#else
+
+
+
+#define NX_CALLER_CHECKING_EXTERNS extern TX_THREAD *_tx_thread_current_ptr; \
+ extern volatile ULONG _tx_thread_system_state;
+
+#define NX_THREADS_ONLY_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) || \
+ (_tx_thread_current_ptr == TX_NULL)) \
+ return(NX_CALLER_ERROR);
+
+#define NX_INIT_AND_THREADS_CALLER_CHECKING if (((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0)))) \
+ return(NX_CALLER_ERROR);
+
+#define NX_NOT_ISR_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0))) \
+ return(NX_CALLER_ERROR);
+
+#define NX_THREAD_WAIT_CALLER_CHECKING if ((wait_option) && \
+ ((_tx_thread_current_ptr == NX_NULL) || (TX_THREAD_GET_SYSTEM_STATE()))) \
+ return(NX_CALLER_ERROR);
+
+#endif
+
+
+/* Define the version ID of NetX. This may be utilized by the application. */
+
+#ifdef NX_SYSTEM_INIT
+CHAR _nx_version_id[] =
+ "Copyright (c) 2024 Microsoft Corporation. * NetX Duo RXv3/GNU Version 6.4.1 *";
+#else
+extern CHAR _nx_version_id[];
+#endif
+
+#endif
+
diff --git a/ports/rxv3/iar/CMakeLists.txt b/ports/rxv3/iar/CMakeLists.txt
new file mode 100644
index 00000000..75c79531
--- /dev/null
+++ b/ports/rxv3/iar/CMakeLists.txt
@@ -0,0 +1,9 @@
+target_sources(${PROJECT_NAME} PRIVATE
+ # {{BEGIN_TARGET_SOURCES}}
+
+ # {{END_TARGET_SOURCES}}
+)
+
+target_include_directories(${PROJECT_NAME} PUBLIC
+ ${CMAKE_CURRENT_LIST_DIR}/inc
+)
diff --git a/ports/rxv3/iar/inc/nx_port.h b/ports/rxv3/iar/inc/nx_port.h
new file mode 100644
index 00000000..95aa0ecb
--- /dev/null
+++ b/ports/rxv3/iar/inc/nx_port.h
@@ -0,0 +1,214 @@
+/***************************************************************************
+ * Copyright (c) 2024 Microsoft Corporation
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** NetX Component */
+/** */
+/** Port Specific */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* nx_port.h RXv3/IAR */
+/* 6.1.11 */
+/* */
+/* AUTHOR */
+/* */
+/* Yuxin Zhou, Microsoft Corporation */
+/* */
+/* DESCRIPTION */
+/* */
+/* This file contains data type definitions that make the NetX */
+/* real-time TCP/IP function identically on a variety of different */
+/* processor architectures. */
+/* */
+/* RELEASE HISTORY */
+/* */
+/* DATE NAME DESCRIPTION */
+/* */
+/* 12-31-2020 Yuxin Zhou Initial Version 6.1.3 */
+/* 04-25-2022 Yuxin Zhou Modified comment(s), and */
+/* renamed temporary variable, */
+/* resulting in version 6.1.11 */
+/* */
+/**************************************************************************/
+
+#ifndef NX_PORT_H
+#define NX_PORT_H
+
+/* Determine if the optional NetX user define file should be used. */
+
+#ifdef NX_INCLUDE_USER_DEFINE_FILE
+
+
+/* Yes, include the user defines in nx_user.h. The defines in this file may
+ alternately be defined on the command line. */
+
+#include "nx_user.h"
+#endif
+
+
+/* Use compilers define to determine endianness. */
+
+#if __LITTLE_ENDIAN__
+#define NX_LITTLE_ENDIAN 1
+#endif
+
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+
+/* Define various constants for the port. */
+
+#ifndef NX_IP_PERIODIC_RATE
+#define NX_IP_PERIODIC_RATE 100 /* Default IP periodic rate of 1 second for
+ ports with 10ms timer interrupts. This
+ value may be defined instead at the
+ command line and this value will not be
+ used. */
+#endif
+
+
+/* Define macros that swap the endian for little endian ports. */
+
+#ifdef NX_LITTLE_ENDIAN
+#define NX_CHANGE_ULONG_ENDIAN(arg) \
+ { \
+ ULONG _i; \
+ ULONG _tmp; \
+ _i = (UINT)arg; \
+ /* _i = A, B, C, D */ \
+ _tmp = _i ^ (((_i) >> 16) | (_i << 16)); \
+ /* _tmp = _i ^ (_i ROR 16) = A^C, B^D, C^A, D^B */ \
+ _tmp &= 0xff00ffff; \
+ /* _tmp = A^C, 0, C^A, D^B */ \
+ _i = ((_i) >> 8) | (_i<<24); \
+ /* _i = D, A, B, C */ \
+ _i = _i ^ ((_tmp) >> 8); \
+ /* _i = D, C, B, A */ \
+ arg = _i; \
+ }
+#define NX_CHANGE_USHORT_ENDIAN(a) a = (((a >> 8) | (a << 8)) & 0xFFFF)
+
+
+#define __SWAP32__(val) ((((val) & 0xFF000000) >> 24 ) | (((val) & 0x00FF0000) >> 8) \
+ | (((val) & 0x0000FF00) << 8) | (((val) & 0x000000FF) << 24))
+
+#define __SWAP16__(val) ((((val) & 0xFF00) >> 8) | (((val) & 0x00FF) << 8))
+
+
+#ifndef htonl
+#define htonl(val) __SWAP32__(val)
+#endif /* htonl */
+#ifndef ntohl
+#define ntohl(val) __SWAP32__(val)
+#endif /* htonl */
+
+#ifndef htons
+#define htons(val) __SWAP16__(val)
+#endif /*htons */
+
+#ifndef ntohs
+#define ntohs(val) __SWAP16__(val)
+#endif /*htons */
+
+#else
+#define NX_CHANGE_ULONG_ENDIAN(a)
+#define NX_CHANGE_USHORT_ENDIAN(a)
+
+#ifndef htons
+#define htons(val) (val)
+#endif /* htons */
+
+#ifndef ntohs
+#define ntohs(val) (val)
+#endif /* ntohs */
+
+#ifndef ntohl
+#define ntohl(val) (val)
+#endif
+
+#ifndef htonl
+#define htonl(val) (val)
+#endif /* htonl */
+#endif
+
+
+/* Define several macros for the error checking shell in NetX. */
+
+#ifndef TX_TIMER_PROCESS_IN_ISR
+
+#define NX_CALLER_CHECKING_EXTERNS extern TX_THREAD *_tx_thread_current_ptr; \
+ extern TX_THREAD _tx_timer_thread; \
+ extern volatile ULONG _tx_thread_system_state;
+
+#define NX_THREADS_ONLY_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) || \
+ (_tx_thread_current_ptr == TX_NULL) || \
+ (_tx_thread_current_ptr == &_tx_timer_thread)) \
+ return(NX_CALLER_ERROR);
+
+#define NX_INIT_AND_THREADS_CALLER_CHECKING if (((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0))) || \
+ (_tx_thread_current_ptr == &_tx_timer_thread)) \
+ return(NX_CALLER_ERROR);
+
+
+#define NX_NOT_ISR_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0))) \
+ return(NX_CALLER_ERROR);
+
+#define NX_THREAD_WAIT_CALLER_CHECKING if ((wait_option) && \
+ ((_tx_thread_current_ptr == NX_NULL) || (TX_THREAD_GET_SYSTEM_STATE()) || (_tx_thread_current_ptr == &_tx_timer_thread))) \
+ return(NX_CALLER_ERROR);
+
+
+#else
+
+
+
+#define NX_CALLER_CHECKING_EXTERNS extern TX_THREAD *_tx_thread_current_ptr; \
+ extern volatile ULONG _tx_thread_system_state;
+
+#define NX_THREADS_ONLY_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) || \
+ (_tx_thread_current_ptr == TX_NULL)) \
+ return(NX_CALLER_ERROR);
+
+#define NX_INIT_AND_THREADS_CALLER_CHECKING if (((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0)))) \
+ return(NX_CALLER_ERROR);
+
+#define NX_NOT_ISR_CALLER_CHECKING if ((TX_THREAD_GET_SYSTEM_STATE()) && (TX_THREAD_GET_SYSTEM_STATE() < ((ULONG) 0xF0F0F0F0))) \
+ return(NX_CALLER_ERROR);
+
+#define NX_THREAD_WAIT_CALLER_CHECKING if ((wait_option) && \
+ ((_tx_thread_current_ptr == NX_NULL) || (TX_THREAD_GET_SYSTEM_STATE()))) \
+ return(NX_CALLER_ERROR);
+
+#endif
+
+
+/* Define the version ID of NetX. This may be utilized by the application. */
+
+#ifdef NX_SYSTEM_INIT
+CHAR _nx_version_id[] =
+ "Copyright (c) 2024 Microsoft Corporation. * NetX Duo RXv3/IAR Version 6.4.1 *";
+#else
+extern CHAR _nx_version_id[];
+#endif
+
+#endif
+