RTEMS: MPCI Handler

| RTEMS 5.4-rc2

Loading...
Searching...
No Matches
Files | Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
MPCI Handler
Internal » SuperCore

MPCI Handler. More...

## Files
file | mpci.h
| MPCI Layer API.
file | mpciimpl.h
| MPCI Layer Implementation.
file | mpci.c
| Multiprocessing Communications Interface (MPCI) Handler.
file | mpcidefault.c
| Multiprocessing Communications Interface (MPCI) Default Configuration.

## Data Structures
struct | MPCI_Control
struct | MPCI_Configuration
struct | MPCI_Internal_packet

## Macros
#define | MPCI_ALL_NODES 0
#define | MPCI_DEFAULT_TIMEOUT 0xFFFFFFFF

## Typedefs
typedef void | MPCI_Entry
typedef MPCI_Entry(* | MPCI_initialization_entry) (void)
typedef MPCI_Entry(* | MPCI_get_packet_entry) (MP_packet_Prefix **)
typedef MPCI_Entry(* | MPCI_return_packet_entry) (MP_packet_Prefix *)
typedef MPCI_Entry(* | MPCI_send_entry) (uint32_t, MP_packet_Prefix *)
typedef MPCI_Entry(* | MPCI_receive_entry) (MP_packet_Prefix **)
typedef void(* | MPCI_Packet_processor) (MP_packet_Prefix *)

## Enumerations
enum | MPCI_Internal_Remote_operations { MPCI_PACKETS_SYSTEM_VERIFY = 0 }

## Functions
void | _MPCI_Register_packet_processor (MP_packet_Classes the_class, MPCI_Packet_processor the_packet_processor)
| Registers the MPCI packet processor for the designated object class.
MP_packet_Prefix * | _MPCI_Get_packet (void)
| Obtains a packet by invoking the user provided MPCI get packet callout.
void | _MPCI_Return_packet (MP_packet_Prefix *the_packet)
| Deallocates a packet.
void | _MPCI_Send_process_packet (uint32_t destination, MP_packet_Prefix *the_packet)
| Sends a process packet.
Status_Control | _MPCI_Send_request_packet (uint32_t destination, MP_packet_Prefix *the_packet, States_Control extra_state)
| Sends a request packet.
void | _MPCI_Send_response_packet (uint32_t destination, MP_packet_Prefix *the_packet)
| Sends a response packet.
MP_packet_Prefix * | _MPCI_Receive_packet (void)
| Receives a packet.
Thread_Control * | _MPCI_Process_response (MP_packet_Prefix *the_packet)
| Passes a packet to the thread.
void | _MPCI_Receive_server (Thread_Entry_numeric_type ignored)
| Receives and processes all packets.
void | _MPCI_Announce (void)
| Announces the availability of a packet.
void | _MPCI_Internal_packets_Send_process_packet (MPCI_Internal_Remote_operations operation)
| Performs a process on another node.
void | _MPCI_Internal_packets_Process_packet (MP_packet_Prefix *the_packet_prefix)
| Performs requested action from another node.
MPCI_Internal_packet * | _MPCI_Internal_packets_Get_packet (void)
| Obtains an internal thread.
RTEMS_INLINE_ROUTINE bool | _Mp_packet_Is_valid_packet_class (MP_packet_Classes the_packet_class)
| Checks if the packet class is valid.

## Variables
const MPCI_Configuration | _MPCI_Configuration
| The MPCI configuration.
char | _MPCI_Receive_server_stack []
| The MPCI receive server stack.
Thread_queue_Control | _MPCI_Remote_blocked_threads
MPCI_Control * | _MPCI_table
Thread_Control * | _MPCI_Receive_server_tcb
| Pointer to MP thread control block.
MPCI_Packet_processor | _MPCI_Packet_processors [MP_PACKET_CLASSES_LAST+1]

## Detailed Description

MPCI Handler.

The MPCI Handler encapsulates functionality which is related to the generation, receipt, and processing of remote operations in a multiprocessor system. This handler contains the message passing support for making remote service calls as well as the server thread which processes requests from remote nodes.

## Macro Definition Documentation

## ◆ MPCI_ALL_NODES

#define MPCI_ALL_NODES 0

The following defines the node number used when a broadcast is desired.

## ◆ MPCI_DEFAULT_TIMEOUT

#define MPCI_DEFAULT_TIMEOUT 0xFFFFFFFF

For packets associated with requests that don't already have a timeout, use the one specified by this MPCI driver. The value specified by the MPCI driver sets an upper limit on how long a remote request should take to complete.

## Typedef Documentation

## ◆ MPCI_Entry

typedef void MPCI_Entry

This type is returned by all user provided MPCI routines.

## ◆ MPCI_get_packet_entry

typedef MPCI_Entry(* MPCI_get_packet_entry) (MP_packet_Prefix **)

This type defines the prototype for the get packet entry point in an Multiprocessor Communications Interface. The single parameter will point to the packet allocated.

## ◆ MPCI_initialization_entry

typedef MPCI_Entry(* MPCI_initialization_entry) (void)

This type defines the prototype for the initization entry point in an Multiprocessor Communications Interface.

## ◆ MPCI_Packet_processor

typedef void(* MPCI_Packet_processor) (MP_packet_Prefix *)

The following defines the type for packet processing routines invoked by the MPCI Receive server.

## ◆ MPCI_receive_entry

typedef MPCI_Entry(* MPCI_receive_entry) (MP_packet_Prefix **)

This type defines the prototype for the receive packet entry point in an Multiprocessor Communications Interface. The single parameter will point to a packet allocated and filled in by the receive packet handler. The caller will block until a packet is received.

## ◆ MPCI_return_packet_entry

typedef MPCI_Entry(* MPCI_return_packet_entry) (MP_packet_Prefix *)

This type defines the prototype for the return packet entry point in an Multiprocessor Communications Interface. The single parameter will point to a packet previously allocated by the get packet MPCI entry.

## ◆ MPCI_send_entry

typedef MPCI_Entry(* MPCI_send_entry) (uint32_t, MP_packet_Prefix *)

This type defines the prototype for send get packet entry point in an Multiprocessor Communications Interface. The single parameter will point to a packet previously allocated by the get packet entry point that has been filled in by the caller.

## Enumeration Type Documentation

## ◆ MPCI_Internal_Remote_operations

enum MPCI_Internal_Remote_operations

The following enumerated type defines the list of internal MP operations.

## Function Documentation

## ◆ _Mp_packet_Is_valid_packet_class()

RTEMS_INLINE_ROUTINE bool _Mp_packet_Is_valid_packet_class | ( | MP_packet_Classes | the_packet_class | ) |

Checks if the packet class is valid.

Parameters

  the_packet_class | The packet class to perform the validation on.

Return values

  true | the_packet_class is valid.
  false | the_packet_class is not valid.

Note
  Check for lower bounds (MP_PACKET_CLASSES_FIRST ) is unnecessary because this enum starts at lower bound of zero.

## ◆ _MPCI_Announce()

void _MPCI_Announce | ( | void |  | ) |

Announces the availability of a packet.

This routine informs RTEMS of the availability of an MPCI packet.

## ◆ _MPCI_Get_packet()

MP_packet_Prefix * _MPCI_Get_packet | ( | void |  | ) |

Obtains a packet by invoking the user provided MPCI get packet callout.

Returns
  Returns a pointer to a MPCI packet which can be filled in by the caller and used to perform a subsequent remote operation.

## ◆ _MPCI_Internal_packets_Get_packet()

MPCI_Internal_packet * _MPCI_Internal_packets_Get_packet | ( | void |  | ) |

Obtains an internal thread.

_MPCI_Internal_packets_Send_object_was_deleted

This routine is invoked indirectly by the thread queue when a proxy has been removed from the thread queue and the remote node must be informed of this.

This routine is not needed since there are no objects deleted by this manager. _MPCI_Internal_packets_Send_extract_proxy

This routine is invoked when a task is deleted and it has a proxy which must be removed from a thread queue and the remote node must be informed of this.

This routine is not needed since there are no objects deleted by this manager.

This routine is used to obtain an internal threads MP packet.

Return values

  pointer | The pointer to the obtained packet.
  NULL | Something went wrong.

## ◆ _MPCI_Internal_packets_Process_packet()

void _MPCI_Internal_packets_Process_packet | ( | MP_packet_Prefix * | the_packet_prefix | ) |

Performs requested action from another node.

_MPCI_Internal_packets_Send_request_packet

This routine performs a remote procedure call so that a directive operation can be initiated on another node.

This routine is not needed since there are no request packets to be sent by this manager. _MPCI_Internal_packets_Send_response_packet

This routine performs a remote procedure call so that a directive can be performed on another node.

This routine is not needed since there are no response packets to be sent by this manager.

This routine performs the actions specific to this package for the request from another node.

Parameters

  the_packet_prefix | The packet prefix for this method.

## ◆ _MPCI_Internal_packets_Send_process_packet()

void _MPCI_Internal_packets_Send_process_packet | ( | MPCI_Internal_Remote_operations | operation | ) |

Performs a process on another node.

This routine performs a remote procedure call so that a process operation can be performed on another node.

Parameters

  operation | The remote operation to perform.

## ◆ _MPCI_Process_response()

Thread_Control * _MPCI_Process_response | ( | MP_packet_Prefix * | the_packet | ) |

Passes a packet to the thread.

This routine is responsible for passing the_packet to the thread waiting on the remote operation to complete. The unblocked thread is responsible for eventually freeing the_packet.

Parameters

  the_packet | is the response packet to be processed.

Return values

  pointer | This method returns a pointer to the thread which was unblocked
  NULL | The waiting thread no longer exists.

## ◆ _MPCI_Receive_packet()

MP_packet_Prefix * _MPCI_Receive_packet | ( | void |  | ) |

Receives a packet.

This routine receives a packet by invoking the user provided MPCI receive callout.

Returns
  This method returns the packet received.

## ◆ _MPCI_Receive_server()

void _MPCI_Receive_server | ( | Thread_Entry_numeric_type | ignored | ) |

Receives and processes all packets.

This is the server thread which receives and processes all MCPI packets.

Parameters

  ignored | The thread argument. It is not used.

## ◆ _MPCI_Register_packet_processor()

void _MPCI_Register_packet_processor | ( | MP_packet_Classes | the_class,
|  | MPCI_Packet_processor | the_packet_processor
| ) |  |

Registers the MPCI packet processor for the designated object class.

Parameters

  the_class | The class indicator for packets which will be processed by the_packet_processor method.
  the_packet_processor | Pointer to a method which is invoked when packets with the_class are received.

## ◆ _MPCI_Return_packet()

void _MPCI_Return_packet | ( | MP_packet_Prefix * | the_packet | ) |

Deallocates a packet.

This routine deallocates a packet by invoking the user provided MPCI return packet callout.

Parameters

  [out] | the_packet | The MP packet to deallocate.

## ◆ _MPCI_Send_process_packet()

void _MPCI_Send_process_packet | ( | uint32_t | destination,
|  | MP_packet_Prefix * | the_packet
| ) |  |

Sends a process packet.

This routine sends a process packet by invoking the user provided MPCI send callout.

Parameters

  destination | The node which should receive this packet.
  the_packet | The packet to be sent.

## ◆ _MPCI_Send_request_packet()

Status_Control _MPCI_Send_request_packet | ( | uint32_t | destination,
|  | MP_packet_Prefix * | the_packet,
|  | States_Control | extra_state
| ) |  |

Sends a request packet.

This routine sends a request packet by invoking the user provided MPCI send callout.

Parameters

  destination | The node which should receive this packet.
  the_packet | The packet to be sent.
  extra_state | The extra thread state bits which should be set in addition to the remote operation pending state. It may indicate the caller is blocking on a message queue operation.

@ret This method returns the operation status from the remote node.

## ◆ _MPCI_Send_response_packet()

void _MPCI_Send_response_packet | ( | uint32_t | destination,
|  | MP_packet_Prefix * | the_packet
| ) |  |

Sends a response packet.

This routine sends a response packet by invoking the user provided MPCI send callout.

Parameters

  destination | The node which should receive this packet.
  the_packet | The packet to be sent.

## Variable Documentation

## ◆ _MPCI_Configuration

const MPCI_Configuration _MPCI_Configuration
| extern

The MPCI configuration.

Provided by the application via <rtems/confdefs.h>.

## ◆ _MPCI_Packet_processors

MPCI_Packet_processor _MPCI_Packet_processors[MP_PACKET_CLASSES_LAST+1]
| extern

The following table contains the process packet routines provided by each object that supports MP operations.

## ◆ _MPCI_Receive_server_stack

char _MPCI_Receive_server_stack[]
| extern

The MPCI receive server stack.

Provided by the application via <rtems/confdefs.h>

## ◆ _MPCI_Receive_server_tcb

Thread_Control* _MPCI_Receive_server_tcb
| extern

Pointer to MP thread control block.

The following is used to determine when the multiprocessing receive thread is executing so that a proxy can be allocated instead of blocking the multiprocessing receive thread.

## ◆ _MPCI_Remote_blocked_threads

Thread_queue_Control _MPCI_Remote_blocked_threads
| extern

The following thread queue is used to maintain a list of tasks which currently have outstanding remote requests.

## ◆ _MPCI_table

MPCI_Control* _MPCI_table
| extern

The following define the internal pointers to the user's configuration information.