add SMP, Modules, and more processor/tools releases

This commit is contained in:
Scott Larson
2020-08-07 16:56:45 -07:00
parent 49e3c27f3f
commit 6f61053f2a
1858 changed files with 617131 additions and 4 deletions

View File

@@ -0,0 +1,684 @@
/**************************************************************************/
/* */
/* Copyright (c) Microsoft Corporation. All rights reserved. */
/* */
/* This software is licensed under the Microsoft Software License */
/* Terms for Microsoft Azure RTOS. Full text of the license can be */
/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
/* and in the root directory of this software. */
/* */
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/** */
/** ThreadX Component */
/** */
/** Module Interface (API) */
/** */
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/* */
/* APPLICATION INTERFACE DEFINITION RELEASE */
/* */
/* txm_module.h PORTABLE C */
/* 6.0.1 */
/* AUTHOR */
/* */
/* Scott Larson, Microsoft Corporation */
/* */
/* DESCRIPTION */
/* */
/* This file defines the basic module constants, interface structures, */
/* and function prototypes. */
/* */
/* RELEASE HISTORY */
/* */
/* DATE NAME DESCRIPTION */
/* */
/* 06-30-2020 Scott Larson Initial Version 6.0.1 */
/* */
/**************************************************************************/
#ifndef TXM_MODULE_H
#define TXM_MODULE_H
/* Include the standard ThreadX API file. */
#include "tx_api.h"
/* Include the module port specific file. */
#include "txm_module_port.h"
/* Include any supported external component include files. */
#ifdef TXM_MODULE_ENABLE_FILEX
#include "txm_module_filex.h"
#endif
#ifdef TXM_MODULE_ENABLE_GUIX
#include "txm_module_guix.h"
#endif
#ifdef TXM_MODULE_ENABLE_NETX
#include "txm_module_netx.h"
#endif
#ifdef TXM_MODULE_ENABLE_NETXDUO
#include "txm_module_netxduo.h"
#endif
#ifdef TXM_MODULE_ENABLE_USBX
#include "txm_module_usbx.h"
#endif
#ifdef FX_FILEX_PRESENT
#include "fx_api.h"
#endif
/* Determine if a C++ compiler is being used. If so, ensure that standard
C is used to process the API information. */
#ifdef __cplusplus
/* Yes, C++ compiler is present. Use standard C. */
extern "C" {
#endif
/* Define the Module ID, which is used to indicate a module is valid. */
#define TXM_MODULE_ID 0x4D4F4455
/* Define valid module states. */
#define TXM_MODULE_LOADED 1
#define TXM_MODULE_STARTED 2
#define TXM_MODULE_STOPPING 3
#define TXM_MODULE_STOPPED 4
#define TXM_MODULE_UNLOADED 5
/* Define module manager error codes. */
#define TXM_MODULE_ALIGNMENT_ERROR 0xF0
#define TXM_MODULE_ALREADY_LOADED 0xF1
#define TXM_MODULE_INVALID 0xF2
#define TXM_MODULE_INVALID_PROPERTIES 0xF3
#define TXM_MODULE_INVALID_MEMORY 0xF4
#define TXM_MODULE_INVALID_CALLBACK 0xF5
#define TXM_MODULE_INVALID_STACK_SIZE 0xF6
#define TXM_MODULE_FILEX_INVALID_BYTES_READ 0xF7
#define TXM_MODULE_MATH_OVERFLOW 0xF8
/* Define the data area alignment mask, must be a power of 2. */
#ifndef TXM_MODULE_DATA_ALIGNMENT
#define TXM_MODULE_DATA_ALIGNMENT 4
#endif
/* Define the code area alignment mask, must be a power of 2. */
#ifndef TXM_MODULE_CODE_ALIGNMENT
#define TXM_MODULE_CODE_ALIGNMENT 4
#endif
/* Define module timeout for waiting for module to finish. */
#ifndef TXM_MODULE_TIMEOUT
#define TXM_MODULE_TIMEOUT 100
#endif
/* Define module thread time-slice default. */
#ifndef TXM_MODULE_TIME_SLICE
#define TXM_MODULE_TIME_SLICE 4
#endif
/* Define each module's callback queue depth. This is used to queue up incoming call back requests. */
#ifndef TXM_MODULE_CALLBACKS_QUEUE_DEPTH
#define TXM_MODULE_CALLBACKS_QUEUE_DEPTH 8 /* Number queued callback requests. */
#endif
/* Define the module manager thread's stack size. */
#ifndef TXM_MODULE_MANAGER_THREAD_STACK_SIZE
#define TXM_MODULE_MANAGER_THREAD_STACK_SIZE 1024
#endif
/* Define the module manager thread's priority. */
#ifndef TXM_MODULE_MANAGER_THREAD_PRIORITY
#define TXM_MODULE_MANAGER_THREAD_PRIORITY 1
#endif
/* Define the module's callback handler thread's stack size. */
#ifndef TXM_MODULE_CALLBACK_THREAD_STACK_SIZE
#define TXM_MODULE_CALLBACK_THREAD_STACK_SIZE 1024
#endif
/* Define the default port-specific macro for resetting the thread. */
#ifndef TXM_MODULE_MANAGER_THREAD_RESET_PORT_COMPLETION
#define TXM_MODULE_MANAGER_THREAD_RESET_PORT_COMPLETION(thread_ptr, module_instance)
#endif
/* Define object types for object search requests. */
#define TXM_BLOCK_POOL_OBJECT 1
#define TXM_BYTE_POOL_OBJECT 2
#define TXM_EVENT_FLAGS_OBJECT 3
#define TXM_MUTEX_OBJECT 4
#define TXM_QUEUE_OBJECT 5
#define TXM_SEMAPHORE_OBJECT 6
#define TXM_THREAD_OBJECT 7
#define TXM_TIMER_OBJECT 8
#define TXM_THREAD_KERNEL_STACK_OBJECT 77
#define TXM_FILEX_OBJECTS_START 100
#define TXM_FILEX_OBJECTS_END 199
#define TXM_NETX_OBJECTS_START 200
#define TXM_NETX_OBJECTS_END 299
#define TXM_NETXDUO_OBJECTS_START 300
#define TXM_NETXDUO_OBJECTS_END 399
#define TXM_USBX_OBJECTS_START 400
#define TXM_USBX_OBJECTS_END 499
#define TXM_GUIX_OBJECTS_START 500
#define TXM_GUIX_OBJECT_END 599
/* Define callback types. */
#define TXM_THREADX_CALLBACKS_START 0
#define TXM_THREADX_CALLBACKS_END 99
#define TXM_FILEX_CALLBACKS_START 100
#define TXM_FILEX_CALLBACKS_END 199
#define TXM_NETX_CALLBACKS_START 200
#define TXM_NETX_CALLBACKS_END 299
#define TXM_NETXDUO_CALLBACKS_START 300
#define TXM_NETXDUO_CALLBACKS_END 399
#define TXM_USBX_CALLBACKS_START 400
#define TXM_USBX_CALLBACKS_END 499
#define TXM_GUIX_CALLBACKS_START 500
#define TXM_GUIX_CALLBACKS_END 599
#define TXM_TIMER_CALLBACK 0
#define TXM_EVENTS_SET_CALLBACK 1
#define TXM_QUEUE_SEND_CALLBACK 2
#define TXM_SEMAPHORE_PUT_CALLBACK 3
#define TXM_THREAD_ENTRY_EXIT_CALLBACK 4
/* Determine the ThreadX kernel API call IDs. */
#define TXM_BLOCK_ALLOCATE_CALL 1
#define TXM_BLOCK_POOL_CREATE_CALL 2
#define TXM_BLOCK_POOL_DELETE_CALL 3
#define TXM_BLOCK_POOL_INFO_GET_CALL 4
#define TXM_BLOCK_POOL_PERFORMANCE_INFO_GET_CALL 5
#define TXM_BLOCK_POOL_PERFORMANCE_SYSTEM_INFO_GET_CALL 6
#define TXM_BLOCK_POOL_PRIORITIZE_CALL 7
#define TXM_BLOCK_RELEASE_CALL 8
#define TXM_BYTE_ALLOCATE_CALL 9
#define TXM_BYTE_POOL_CREATE_CALL 10
#define TXM_BYTE_POOL_DELETE_CALL 11
#define TXM_BYTE_POOL_INFO_GET_CALL 12
#define TXM_BYTE_POOL_PERFORMANCE_INFO_GET_CALL 13
#define TXM_BYTE_POOL_PERFORMANCE_SYSTEM_INFO_GET_CALL 14
#define TXM_BYTE_POOL_PRIORITIZE_CALL 15
#define TXM_BYTE_RELEASE_CALL 16
#define TXM_EVENT_FLAGS_CREATE_CALL 17
#define TXM_EVENT_FLAGS_DELETE_CALL 18
#define TXM_EVENT_FLAGS_GET_CALL 19
#define TXM_EVENT_FLAGS_INFO_GET_CALL 20
#define TXM_EVENT_FLAGS_PERFORMANCE_INFO_GET_CALL 21
#define TXM_EVENT_FLAGS_PERFORMANCE_SYSTEM_INFO_GET_CALL 22
#define TXM_EVENT_FLAGS_SET_CALL 23
#define TXM_EVENT_FLAGS_SET_NOTIFY_CALL 24
#define TXM_THREAD_INTERRUPT_CONTROL_CALL 25
#define TXM_MUTEX_CREATE_CALL 26
#define TXM_MUTEX_DELETE_CALL 27
#define TXM_MUTEX_GET_CALL 28
#define TXM_MUTEX_INFO_GET_CALL 29
#define TXM_MUTEX_PERFORMANCE_INFO_GET_CALL 30
#define TXM_MUTEX_PERFORMANCE_SYSTEM_INFO_GET_CALL 31
#define TXM_MUTEX_PRIORITIZE_CALL 32
#define TXM_MUTEX_PUT_CALL 33
#define TXM_QUEUE_CREATE_CALL 34
#define TXM_QUEUE_DELETE_CALL 35
#define TXM_QUEUE_FLUSH_CALL 36
#define TXM_QUEUE_FRONT_SEND_CALL 37
#define TXM_QUEUE_INFO_GET_CALL 38
#define TXM_QUEUE_PERFORMANCE_INFO_GET_CALL 39
#define TXM_QUEUE_PERFORMANCE_SYSTEM_INFO_GET_CALL 40
#define TXM_QUEUE_PRIORITIZE_CALL 41
#define TXM_QUEUE_RECEIVE_CALL 42
#define TXM_QUEUE_SEND_CALL 43
#define TXM_QUEUE_SEND_NOTIFY_CALL 44
#define TXM_SEMAPHORE_CEILING_PUT_CALL 45
#define TXM_SEMAPHORE_CREATE_CALL 46
#define TXM_SEMAPHORE_DELETE_CALL 47
#define TXM_SEMAPHORE_GET_CALL 48
#define TXM_SEMAPHORE_INFO_GET_CALL 49
#define TXM_SEMAPHORE_PERFORMANCE_INFO_GET_CALL 50
#define TXM_SEMAPHORE_PERFORMANCE_SYSTEM_INFO_GET_CALL 51
#define TXM_SEMAPHORE_PRIORITIZE_CALL 52
#define TXM_SEMAPHORE_PUT_CALL 53
#define TXM_SEMAPHORE_PUT_NOTIFY_CALL 54
#define TXM_THREAD_CREATE_CALL 55
#define TXM_THREAD_DELETE_CALL 56
#define TXM_THREAD_ENTRY_EXIT_NOTIFY_CALL 57
#define TXM_THREAD_IDENTIFY_CALL 58
#define TXM_THREAD_INFO_GET_CALL 59
#define TXM_THREAD_PERFORMANCE_INFO_GET_CALL 60
#define TXM_THREAD_PERFORMANCE_SYSTEM_INFO_GET_CALL 61
#define TXM_THREAD_PREEMPTION_CHANGE_CALL 62
#define TXM_THREAD_PRIORITY_CHANGE_CALL 63
#define TXM_THREAD_RELINQUISH_CALL 64
#define TXM_THREAD_RESET_CALL 65
#define TXM_THREAD_RESUME_CALL 66
#define TXM_THREAD_SLEEP_CALL 67
#define TXM_THREAD_STACK_ERROR_NOTIFY_CALL 68
#define TXM_THREAD_SUSPEND_CALL 69
#define TXM_THREAD_TERMINATE_CALL 70
#define TXM_THREAD_TIME_SLICE_CHANGE_CALL 71
#define TXM_THREAD_WAIT_ABORT_CALL 72
#define TXM_TIME_GET_CALL 73
#define TXM_TIME_SET_CALL 74
#define TXM_TIMER_ACTIVATE_CALL 75
#define TXM_TIMER_CHANGE_CALL 76
#define TXM_TIMER_CREATE_CALL 77
#define TXM_TIMER_DEACTIVATE_CALL 78
#define TXM_TIMER_DELETE_CALL 79
#define TXM_TIMER_INFO_GET_CALL 80
#define TXM_TIMER_PERFORMANCE_INFO_GET_CALL 81
#define TXM_TIMER_PERFORMANCE_SYSTEM_INFO_GET_CALL 82
#define TXM_TRACE_ENABLE_CALL 83
#define TXM_TRACE_EVENT_FILTER_CALL 84
#define TXM_TRACE_EVENT_UNFILTER_CALL 85
#define TXM_TRACE_DISABLE_CALL 86
#define TXM_TRACE_INTERRUPT_CONTROL_CALL 87
#define TXM_TRACE_ISR_ENTER_INSERT_CALL 88
#define TXM_TRACE_ISR_EXIT_INSERT_CALL 89
#define TXM_TRACE_BUFFER_FULL_NOTIFY_CALL 90
#define TXM_TRACE_USER_EVENT_INSERT_CALL 91
#define TXM_THREAD_SYSTEM_SUSPEND_CALL 92
#define TXM_MODULE_OBJECT_POINTER_GET_CALL 93
#define TXM_MODULE_OBJECT_POINTER_GET_EXTENDED_CALL 94
#define TXM_MODULE_OBJECT_ALLOCATE_CALL 95
#define TXM_MODULE_OBJECT_DEALLOCATE_CALL 96
/* Determine the API call IDs for other components. */
#define TXM_FILEX_API_ID_START 1000
#define TXM_FILEX_API_ID_END 1999
#define TXM_NETX_API_ID_START 2000
#define TXM_NETX_API_ID_END 2999
#define TXM_NETXDUO_API_ID_START 3000
#define TXM_NETXDUO_API_ID_END 3999
#define TXM_USBX_API_ID_START 4000
#define TXM_USBX_API_ID_END 4999
#define TXM_GUIX_API_ID_START 5000
#define TXM_GUIX_API_ID_END 5999
/* Determine the application's IDs for calling application code in the resident area. */
#define TXM_APPLICATION_REQUEST_ID_BASE 0x10000
/* Define the overlay for the module's preamble. */
typedef struct TXM_MODULE_PREAMBLE_STRUCT
{
/* Meaning */
ULONG txm_module_preamble_id; /* Download Module ID (0x54584D44) */
ULONG txm_module_preamble_version_major; /* Major Version ID */
ULONG txm_module_preamble_version_minor; /* Minor Version ID */
ULONG txm_module_preamble_preamble_size; /* Module Preamble Size, in 32-bit words */
ULONG txm_module_preamble_application_module_id; /* Module ID (application defined) */
ULONG txm_module_preamble_property_flags; /* Properties Bit Map */
ULONG txm_module_preamble_shell_entry_function; /* Module shell Entry Function */
ULONG txm_module_preamble_start_function; /* Module Thread Start Function */
ULONG txm_module_preamble_stop_function; /* Module Thread Stop Function */
ULONG txm_module_preamble_start_stop_priority; /* Module Start/Stop Thread Priority */
ULONG txm_module_preamble_start_stop_stack_size; /* Module Start/Stop Thread Priority */
ULONG txm_module_preamble_callback_function; /* Module Callback Thread Function */
ULONG txm_module_preamble_callback_priority; /* Module Callback Thread Priority */
ULONG txm_module_preamble_callback_stack_size; /* Module Callback Thread Stack Size */
ULONG txm_module_preamble_code_size; /* Module Instruction Area Size */
ULONG txm_module_preamble_data_size; /* Module Data Area Size */
ULONG txm_module_preamble_reserved_0; /* Reserved */
ULONG txm_module_preamble_reserved_1; /* Reserved */
ULONG txm_module_preamble_reserved_2; /* Reserved */
ULONG txm_module_preamble_reserved_3; /* Reserved */
ULONG txm_module_preamble_reserved_4; /* Reserved */
ULONG txm_module_preamble_reserved_5; /* Reserved */
ULONG txm_module_preamble_reserved_6; /* Reserved */
ULONG txm_module_preamble_reserved_7; /* Reserved */
ULONG txm_module_preamble_reserved_8; /* Reserved */
ULONG txm_module_preamble_reserved_9; /* Reserved */
ULONG txm_module_preamble_reserved_10; /* Reserved */
ULONG txm_module_preamble_reserved_11; /* Reserved */
ULONG txm_module_preamble_reserved_12; /* Reserved */
ULONG txm_module_preamble_reserved_13; /* Reserved */
ULONG txm_module_preamble_reserved_14; /* Reserved */
ULONG txm_module_preamble_checksum; /* Module Instruction Area Checksum [Optional] */
} TXM_MODULE_PREAMBLE;
struct TXM_MODULE_ALLOCATED_OBJECT_STRUCT;
/* Define the callback notification structure used to communicate between the module's callback handling thread
and the module manager. */
typedef struct TXM_MODULE_CALLBACK_MESSAGE_STRUCT
{
ULONG txm_module_callback_message_type;
ULONG txm_module_callback_message_activation_count;
VOID (*txm_module_callback_message_application_function)(VOID);
ALIGN_TYPE txm_module_callback_message_param_1;
ALIGN_TYPE txm_module_callback_message_param_2;
ALIGN_TYPE txm_module_callback_message_param_3;
ALIGN_TYPE txm_module_callback_message_param_4;
ALIGN_TYPE txm_module_callback_message_param_5;
ALIGN_TYPE txm_module_callback_message_param_6;
ALIGN_TYPE txm_module_callback_message_param_7;
ALIGN_TYPE txm_module_callback_message_param_8;
ALIGN_TYPE txm_module_callback_message_reserved1;
ALIGN_TYPE txm_module_callback_message_reserved2;
} TXM_MODULE_CALLBACK_MESSAGE;
/* Define the module's instance for the manager. */
typedef struct TXM_MODULE_INSTANCE_STRUCT
{
ULONG txm_module_instance_id;
CHAR *txm_module_instance_name;
ULONG txm_module_instance_state;
ULONG txm_module_instance_property_flags;
VOID *txm_module_instance_code_allocation_ptr;
ULONG txm_module_instance_code_allocation_size;
VOID *txm_module_instance_code_start;
VOID *txm_module_instance_code_end;
ULONG txm_module_instance_code_size;
VOID *txm_module_instance_data_allocation_ptr;
ULONG txm_module_instance_data_allocation_size;
VOID *txm_module_instance_data_start;
VOID *txm_module_instance_data_end;
VOID *txm_module_instance_module_data_base_address;
ULONG txm_module_instance_data_size;
ULONG txm_module_instance_total_ram_usage;
VOID *txm_module_instance_start_stop_stack_start_address;
VOID *txm_module_instance_start_stop_stack_end_address;
VOID *txm_module_instance_callback_stack_start_address;
VOID *txm_module_instance_callback_stack_end_address;
TXM_MODULE_PREAMBLE *txm_module_instance_preamble_ptr;
VOID (*txm_module_instance_shell_entry_function)(TX_THREAD *, struct TXM_MODULE_INSTANCE_STRUCT *);
VOID (*txm_module_instance_start_thread_entry)(ULONG);
VOID (*txm_module_instance_stop_thread_entry)(ULONG);
VOID (*txm_module_instance_callback_request_thread_entry)(ULONG);
/* Define the port extention to the module manager structure. */
TXM_MODULE_MANAGER_PORT_EXTENSION
TX_THREAD txm_module_instance_start_stop_thread;
TX_THREAD txm_module_instance_callback_request_thread;
TX_QUEUE txm_module_instance_callback_request_queue;
ULONG txm_module_instance_callback_request_queue_area[TXM_MODULE_CALLBACKS_QUEUE_DEPTH * (sizeof(TXM_MODULE_CALLBACK_MESSAGE)/sizeof(ULONG))];
ULONG txm_module_instance_start_stop_stack_size;
ULONG txm_module_instance_start_stop_priority;
ULONG txm_module_instance_callback_stack_size;
ULONG txm_module_instance_callback_priority;
ULONG txm_module_instance_application_module_id;
UINT txm_module_instance_maximum_priority;
/* Define the head pointer of the list of objects allocated by the module. */
struct TXM_MODULE_ALLOCATED_OBJECT_STRUCT
*txm_module_instance_object_list_head;
ULONG txm_module_instance_object_list_count;
struct TXM_MODULE_INSTANCE_STRUCT
*txm_module_instance_loaded_next,
*txm_module_instance_loaded_previous;
} TXM_MODULE_INSTANCE;
/* Determine if the thread entry info control block has an extension defined. If not, define the extension to
whitespace. */
#ifndef TXM_MODULE_THREAD_ENTRY_INFO_USER_EXTENSION
#define TXM_MODULE_THREAD_ENTRY_INFO_USER_EXTENSION
#endif
/* Define the thread entry information structure. This structure is placed on the thread's stack such that the
module's _txm_thread_shell_entry function does not need to access anything in the thread control block. */
typedef struct TXM_MODULE_THREAD_ENTRY_INFO_STRUCT
{
TX_THREAD *txm_module_thread_entry_info_thread;
TXM_MODULE_INSTANCE *txm_module_thread_entry_info_module;
VOID *txm_module_thread_entry_info_data_base_address; /* Don't move this, referenced in stack build to setup module data base register. */
VOID *txm_module_thread_entry_info_code_base_address;
VOID (*txm_module_thread_entry_info_entry)(ULONG);
ULONG txm_module_thread_entry_info_parameter;
VOID (*txm_module_thread_entry_info_exit_notify)(struct TX_THREAD_STRUCT *, UINT);
UINT txm_module_thread_entry_info_start_thread;
TX_THREAD *txm_module_thread_entry_info_callback_request_thread;
TX_QUEUE *txm_module_thread_entry_info_callback_request_queue;
VOID *txm_module_thread_entry_info_reserved;
ALIGN_TYPE (*txm_module_thread_entry_info_kernel_call_dispatcher)(ULONG kernel_request, ALIGN_TYPE param_1, ALIGN_TYPE param_2, ALIGN_TYPE param_3);
TXM_MODULE_THREAD_ENTRY_INFO_USER_EXTENSION
} TXM_MODULE_THREAD_ENTRY_INFO;
/* Define the linked-list structure used to maintain the module's object allocation. */
typedef struct TXM_MODULE_ALLOCATED_OBJECT_STRUCT
{
TXM_MODULE_INSTANCE *txm_module_allocated_object_module_instance;
struct TXM_MODULE_ALLOCATED_OBJECT_STRUCT
*txm_module_allocated_object_next,
*txm_module_allocated_object_previous;
ULONG txm_module_object_size;
} TXM_MODULE_ALLOCATED_OBJECT;
/* Determine if module code is being compiled. If so, remap the ThreadX API to
the module shell functions that will go through the module <-> module manager
interface. */
#ifdef TXM_MODULE
/* Define the external reference to the module manager kernel dispatcher function pointer. This is supplied to the module by the module
manager when the module is created and started. */
extern ALIGN_TYPE (*_txm_module_kernel_call_dispatcher)(ULONG type, ALIGN_TYPE param_1, ALIGN_TYPE param_2, ALIGN_TYPE param3);
/* Define specific module function prototypes. */
#define txm_module_application_request _txm_module_application_request
#define txm_module_object_allocate _txm_module_object_allocate
#define txm_module_object_deallocate _txm_module_object_deallocate
#define txm_module_object_pointer_get _txm_module_object_pointer_get
#define txm_module_object_pointer_get_extended _txm_module_object_pointer_get_extended
VOID _txm_module_thread_shell_entry(TX_THREAD *thread_ptr, TXM_MODULE_THREAD_ENTRY_INFO *thread_info);
UINT _txm_module_thread_system_suspend(TX_THREAD *thread_ptr);
UINT _txm_module_application_request(ULONG request, ALIGN_TYPE param_1, ALIGN_TYPE param_2, ALIGN_TYPE param_3);
UINT _txm_module_object_allocate(VOID **object_ptr, ULONG object_size);
UINT _txm_module_object_deallocate(VOID *object_ptr);
UINT _txm_module_object_pointer_get(UINT object_type, CHAR *name, VOID **object_ptr);
UINT _txm_module_object_pointer_get_extended(UINT object_type, CHAR *name, UINT name_length, VOID **object_ptr);
/* Module callback functions. */
#ifdef TXM_MODULE_ENABLE_NETX
VOID _txm_module_netx_callback_request(TXM_MODULE_CALLBACK_MESSAGE *callback_message);
#endif
#ifdef TXM_MODULE_ENABLE_NETXDUO
VOID _txm_module_netxduo_callback_request(TXM_MODULE_CALLBACK_MESSAGE *callback_message);
#endif
#ifdef TXM_MODULE_ENABLE_FILEX
VOID _txm_module_filex_callback_request(TXM_MODULE_CALLBACK_MESSAGE *callback_message);
#endif
#ifdef TXM_MODULE_ENABLE_GUIX
VOID _txm_module_guix_duo_callback_request(TXM_MODULE_CALLBACK_MESSAGE *callback_message);
#endif
#ifdef TXM_MODULE_ENABLE_USBX
VOID _txm_module_usbx_duo_callback_request(TXM_MODULE_CALLBACK_MESSAGE *callback_message);
#endif
/* Define the module's thread shell entry function macros. */
#define TXM_THREAD_COMPLETED_EXTENSION(a)
#define TXM_THREAD_STATE_CHANGE(a, b)
#else
/* Map the module manager APIs just in case this is being included from the module manager in the
resident portion of the application. */
#define txm_module_manager_initialize _txm_module_manager_initialize
#define txm_module_manager_in_place_load _txm_module_manager_in_place_load
#define txm_module_manager_file_load _txm_module_manager_file_load
#define txm_module_manager_memory_load _txm_module_manager_memory_load
#define txm_module_manager_object_pointer_get _txm_module_manager_object_pointer_get
#define txm_module_manager_object_pointer_get_extended _txm_module_manager_object_pointer_get_extended
#define txm_module_manager_object_pool_create _txm_module_manager_object_pool_create
#define txm_module_manager_properties_get _txm_module_manager_properties_get
#define txm_module_manager_start _txm_module_manager_start
#define txm_module_manager_stop _txm_module_manager_stop
#define txm_module_manager_unload _txm_module_manager_unload
#define txm_module_manager_maximum_module_priority_set _txm_module_manager_maximum_module_priority_set
#define txm_module_manager_external_memory_enable _txm_module_manager_external_memory_enable
/* Define external variables used by module manager functions. */
#ifndef TX_MODULE_MANAGER_INIT
extern ULONG _txm_module_manager_properties_supported;
extern ULONG _txm_module_manager_properties_required;
extern TX_BYTE_POOL _txm_module_manager_byte_pool;
extern TX_BYTE_POOL _txm_module_manager_object_pool;
extern UINT _txm_module_manager_object_pool_created;
extern TXM_MODULE_INSTANCE *_txm_module_manager_loaded_list_ptr;
extern ULONG _txm_module_manger_loaded_count;
extern UINT _txm_module_manager_ready;
extern TX_MUTEX _txm_module_manager_mutex;
extern ULONG _txm_module_manager_callback_total_count;
extern ULONG _txm_module_manager_callback_error_count;
#endif
/* Define internal module manager function prototypes. */
UINT _txm_module_manager_application_request(ULONG request, ALIGN_TYPE param_1, ALIGN_TYPE param_2, ALIGN_TYPE param_3);
#ifdef FX_FILEX_PRESENT
UINT _txm_module_manager_file_load(TXM_MODULE_INSTANCE *module_instance, CHAR *module_name, FX_MEDIA *media_ptr, CHAR *file_name);
#endif
UINT _txm_module_manager_initialize(VOID *module_memory_start, ULONG module_memory_size);
UINT _txm_module_manager_in_place_load(TXM_MODULE_INSTANCE *module_instance, CHAR *name, VOID *module_location);
UINT _txm_module_manager_internal_load(TXM_MODULE_INSTANCE *module_instance, CHAR *name, VOID *module_location,
ULONG code_size, VOID *code_allocation_ptr, ULONG code_allocation_size);
ALIGN_TYPE _txm_module_manager_kernel_dispatch(ULONG kernel_request, ALIGN_TYPE param_0, ALIGN_TYPE param_1, ALIGN_TYPE param_2);
UINT _txm_module_manager_object_allocate(VOID **object_ptr_ptr, ULONG object_size, TXM_MODULE_INSTANCE *module_instance);
UINT _txm_module_manager_object_deallocate(VOID *object_ptr);
UINT _txm_module_manager_object_pointer_get(UINT object_type, CHAR *name, VOID **object_ptr);
UINT _txm_module_manager_object_pointer_get_extended(UINT object_type, CHAR *name, UINT name_length, VOID **object_ptr);
UINT _txm_module_manager_object_pool_create(VOID *object_memory, ULONG object_memory_size);
VOID _txm_module_manager_object_type_set(ULONG object_ptr, ULONG object_size, ULONG object_type);
UINT _txm_module_manager_memory_load(TXM_MODULE_INSTANCE *module_instance, CHAR *module_name, VOID *module_location);
UINT _txm_module_manager_properties_get(TXM_MODULE_INSTANCE *module_instance, ULONG *module_properties_ptr);
UINT _txm_module_manager_start(TXM_MODULE_INSTANCE *module_instance);
UINT _txm_module_manager_stop(TXM_MODULE_INSTANCE *module_instance);
UINT _txm_module_manager_thread_create(TX_THREAD *thread_ptr, CHAR *name, VOID (*shell_function)(TX_THREAD *, TXM_MODULE_INSTANCE *),
VOID (*entry_function)(ULONG), ULONG entry_input,
VOID *stack_start, ULONG stack_size, UINT priority, UINT preempt_threshold,
ULONG time_slice, UINT auto_start, UINT thread_control_block_size, TXM_MODULE_INSTANCE *module_instance);
UINT _txm_module_manager_thread_reset(TX_THREAD *thread_ptr);
VOID _txm_module_manager_name_build(CHAR *module_name, CHAR *thread_name, CHAR *combined_name);
VOID _txm_module_manager_thread_stack_build(TX_THREAD *thread_ptr, VOID (*shell_function)(TX_THREAD *, TXM_MODULE_INSTANCE *));
UINT _txm_module_manager_unload(TXM_MODULE_INSTANCE *module_instance);
ALIGN_TYPE _txm_module_manager_user_mode_entry(ULONG kernel_request, ALIGN_TYPE param_1, ALIGN_TYPE param_2, ALIGN_TYPE param_3);
UINT _txm_module_manager_maximum_module_priority_set(TXM_MODULE_INSTANCE *module_instance, UINT priority);
UINT _txm_module_manager_external_memory_enable(TXM_MODULE_INSTANCE *module_instance, VOID *start_address, ULONG length, UINT attributes);
#ifdef TXM_MODULE_ENABLE_NETX
ULONG _txm_module_manager_netx_dispatch(TXM_MODULE_INSTANCE *module_instance, ULONG kernel_request, ULONG param_1, ULONG param_2, ULONG param_3);
UINT _txm_module_manager_netx_object_pointer_get(UINT object_type, CHAR *name, UINT name_length, VOID **object_ptr);
#endif
#ifdef TXM_MODULE_ENABLE_NETXDUO
ALIGN_TYPE _txm_module_manager_netxduo_dispatch(TXM_MODULE_INSTANCE *module_instance, ULONG kernel_request, ALIGN_TYPE param_1, ALIGN_TYPE param_2, ALIGN_TYPE param_3);
UINT _txm_module_manager_netxduo_object_pointer_get(UINT object_type, CHAR *name, UINT name_length, VOID **object_ptr);
#endif
#ifdef TXM_MODULE_ENABLE_FILEX
ALIGN_TYPE _txm_module_manager_filex_dispatch(TXM_MODULE_INSTANCE *module_instance, ULONG kernel_request, ALIGN_TYPE param_0, ALIGN_TYPE param_1, ALIGN_TYPE param_2);
UINT _txm_module_manager_filex_object_pointer_get(UINT object_type, CHAR *name, UINT name_length, VOID **object_ptr);
#endif
#ifdef TXM_MODULE_ENABLE_GUIX
ULONG _txm_module_manager_guix_dispatch(TXM_MODULE_INSTANCE *module_instance, ULONG kernel_request, ULONG param_1, ULONG param_2, ULONG param_3);
UINT _txm_module_manager_guix_object_pointer_get(UINT object_type, CHAR *name, UINT name_length, VOID **object_ptr);
#endif
#ifdef TXM_MODULE_ENABLE_USBX
ULONG _txm_module_manager_usbx_dispatch(TXM_MODULE_INSTANCE *module_instance, ULONG kernel_request, ULONG param_1, ULONG param_2, ULONG param_3);
UINT _txm_module_manager_usbx_object_pointer_get(UINT object_type, CHAR *name, UINT name_length, VOID **object_ptr);
#endif
/* Define the callback deferred processing routines necessary for executing callbacks in the module code. */
VOID _txm_module_manager_callback_request(TX_QUEUE *module_callback_queue, TXM_MODULE_CALLBACK_MESSAGE *callback_request);
VOID _txm_module_manager_event_flags_notify_trampoline(TX_EVENT_FLAGS_GROUP *group_ptr);
VOID _txm_module_manager_queue_notify_trampoline(TX_QUEUE *queue_ptr);
VOID _txm_module_manager_semaphore_notify_trampoline(TX_SEMAPHORE *semaphore_ptr);
VOID _txm_module_manager_thread_notify_trampoline(TX_THREAD *thread_ptr, UINT type);
VOID _txm_module_manager_timer_notify_trampoline(ULONG id);
/* Define port specific module manager prototypes. */
TXM_MODULE_MANAGER_ADDITIONAL_PROTOTYPES
#endif
/* Determine if a C++ compiler is being used. If so, complete the standard
C conditional started above. */
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,60 @@
/**************************************************************************/
/* */
/* Copyright (c) Microsoft Corporation. All rights reserved. */
/* */
/* This software is licensed under the Microsoft Software License */
/* Terms for Microsoft Azure RTOS. Full text of the license can be */
/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
/* and in the root directory of this software. */
/* */
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/** */
/** ThreadX Component */
/** */
/** User Specific */
/** */
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/* */
/* APPLICATION INTERFACE DEFINITION RELEASE */
/* */
/* txm_module_user.h PORTABLE C */
/* 6.0.1 */
/* AUTHOR */
/* */
/* Scott Larson, Microsoft Corporation */
/* */
/* DESCRIPTION */
/* */
/* This file contains user defines for configuring the Module Manager */
/* in specific ways. This file will have an effect only if the Module */
/* Manager library is built with TXM_MODULE_INCLUDE_USER_DEFINE_FILE */
/* defined. Note that all the defines in this file may also be made on */
/* the command line when building Modules library and application */
/* objects. */
/* */
/* RELEASE HISTORY */
/* */
/* DATE NAME DESCRIPTION */
/* */
/* 06-30-2020 Scott Larson Initial Version 6.0.1 */
/* */
/**************************************************************************/
#ifndef TXM_MODULE_USER_H
#define TXM_MODULE_USER_H
/* Defines the kernel stack size for a module thread. The default is 512, which is
sufficient for applications only using ThreadX, however, if other libraries are
used i.e. FileX, NetX, etc., then this value will most likely need to be increased. */
/* #define TXM_MODULE_KERNEL_STACK_SIZE 2048 */
#endif