diff src/cs/services/atp/atp_new_i.h @ 0:92470e5d0b9e

src: partial import from FC Selenite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 15 May 2020 01:28:16 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cs/services/atp/atp_new_i.h	Fri May 15 01:28:16 2020 +0000
@@ -0,0 +1,215 @@
+/*******************************************************************************
+ *
+ * File Name : atp_new_i.h
+ *
+ * Internal definition for ATP SW entity
+ *
+ * (C) Texas Instruments, all rights reserved
+ *
+ * Version number	: 0.1      Date : 28-Feb-2000
+ *
+ * History			: 0.1  - Created by E. Baissus
+ *
+ *
+ * Author           : Eric Baissus : e-baissus@ti.com
+ *
+ *   (C) Copyright 2000 by Texas Instruments Incorporated, All Rights Reserved
+ ******************************************************************************/
+#ifndef ATP_NEW_I_H
+#define ATP_NEW_I_H
+
+#include "rv/rv_general.h"
+#include "rvf/rvf_api.h"
+#include "atp/atp_api.h"
+#include "atp/atp_messages.h"
+#include "atp/atp_config.h"
+#include "atp/atp_cmd.h"
+
+
+
+
+
+
+/* Structure used to store information on a registered SW entity */
+/*---------------------------------------------------------------*/
+typedef struct
+{ 
+	T_ATP_SW_ENTITY_NAME sw_entity_name; // Sw entity name
+	UINT8 nb_open_port; // Number of port open with the SW entity
+	T_ATP_ENTITY_MODE mode; // List all the modes of the SW entity
+	T_ATP_CALLBACK return_path; // return path to send event back to the SW entity
+} T_ATP_SW_ENTITY_STRUCT;
+
+
+/* Structure used to store information on a port */
+/*---------------------------------------------------------------*/
+typedef enum
+{
+	ATP_OPEN_PENDING,
+	ATP_CMD_MODE,
+	ATP_DATA_MODE
+} T_ATP_PORT_STATE; // Indicate in which state is the port 
+
+
+typedef struct
+{
+	UINT16 tx_head_size;
+	UINT16 tx_trail_size;
+	UINT16 rx_head_size;
+	UINT16 rx_trail_size;
+    T_ATP_PACKET_MODE packet_mode; // SEGMENTED means that data are stored in segmented buffer. 
+									// l2cap_read_uint function must be called to fetch the data 
+								    // NORMAL means that data are in a single buffer
+} T_ATP_NO_COPY_PORT_INFO; // Information regarding no copy data processing
+
+
+/* Every port has 2 port_end_struct : one for each SWE concerned */
+#define INVALID_PORT_NB (0xFF)
+
+typedef struct t_atp_port_end_struct 
+{
+	T_ATP_SW_ENTITY_ID sw_id; // SWE ID
+	T_ATP_PORT_NB port_nb; // Port number 
+	T_ATP_EVENT_MASK event_mask;
+	T_ATP_SIGNAL_MASK signal_mask;
+	T_ATP_NO_COPY_PORT_INFO no_copy_info;
+	T_RVF_BUFFER_Q rx_queue; // Queue used to pipe the received packet 
+							 //and wait for reading processing
+	UINT32 rx_data_left; // Number of data still not read by the SW entity
+	T_ATP_PORT_SIGNAL signal; // Status of the port signal
+	T_RVF_MB_ID rx_mb; // MB to use when the SWE receives data from ATP 
+	T_RVF_MB_ID tx_mb; // MB used by SWE when sending data to ATP
+} T_ATP_PORT_END_STRUCT;
+
+
+typedef UINT8 T_ATP_SW_NB; /* Which SW_ID of a port : first/initiator (0) or second(acceptor) (1) */
+
+
+
+/* Definition of types used for handling of commands on a port */
+/*-------------------------------------------------------------*/
+typedef enum { READY_FOR_NEW_CMD, WAITING_FOR_RESULT } T_ATP_CMD_STATE;
+	// Indicate if the port is ready to receive a new command 
+	// or if it is waiting for the result of a command
+typedef enum { NOT_STARTED,ON_GOING,FINISHED } T_ATP_CMD_INTERPRETATION;
+	// A string can multiplex several command. If status is NOT_STARTED, the command has not
+	// been yet interpreted at all by ATP. If ON_GOING, that means that interpretation started but
+	// is not finished (still command pending in the string)
+
+#define ATP_CMD_INVALID_POSITION (0xFFFF);
+
+typedef struct
+{
+	T_ATP_CMD_STATE state; //READY_FOR_NEW_CMD or WAITING_FOR_RESULT
+	T_ATP_CMD_INTERPRETATION status; // NOT_STARTED or ON_GOING or FINISHED
+	T_ATP_TXT_CMD  cmd_txt_p; // text containing the commands : Example :'ATD1274576;' Can contains several command
+	UINT16 cmd_txt_length; // length of the text  in bytes
+	UINT16 next_position; // next caracter to interpret in the cmd_txt buffer
+} T_ATP_CMD_STRUCT;
+
+
+
+/* Internal struct used to store all the information related to a port */
+/*---------------------------------------------------------------------*/
+typedef struct t_atp_port_struct
+{
+	struct t_atp_port_struct * next_p; // points on next port structure/ otherwise = NULL
+	T_ATP_PORT_STATE port_state; //	ATP_OPEN_PENDING or ATP_CMD_MODE or ATP_DATA_MODE
+	T_ATP_PORT_END_STRUCT port_info[2]; //[0]=initiator side / [1]=target side
+	T_ATP_REDIRECT_MODE redirect_mode; /* Indicates  if redirect flow is ON or OFF */
+	struct t_atp_port_struct * redirect_port_p; /* pointing on the port of redirection */
+	T_ATP_SW_NB redirect_port_end_nb; /* Indicates to which end of the redirecting port the flow 
+						should be redirected = value = 0 or 1 */
+	T_ATP_CMD_STRUCT cmd_info; // Information related to CMD handling
+	T_ATP_DCE_INFO * dce_info_p; // Information related to DCE handling
+} T_ATP_PORT_STRUCT;
+
+
+typedef struct
+{
+	UINT32 first_byte;
+	UINT32 last_byte;
+	UINT32 next_byte_to_read;
+	T_ATP_BUFFER atp_buffer_p;
+} T_ATP_RX_PACKET;
+
+
+/* Defines the state of the ATP SWE  (cf Riviera Manager) */
+typedef enum
+{
+	ATP_STARTED,
+	ATP_STOPPED,
+	ATP_KILLED
+} T_ATP_SWE_STATE;
+
+
+/* Types of error handels by atp_error function */
+typedef enum
+{
+	ATP_ERROR_MB_PRIM_RED,
+	ATP_ERROR_TX_MB_RED,
+	ATP_ERROR_WRONG_CALLBACK /* The callback function of the primitive has been used where as */
+							  /* Mailbox should be used */
+} T_ATP_ERROR_REASON;
+
+
+
+extern T_RVF_MB_ID atp_mb_prim; // Memory bank dedicated to internal use of ATP entity
+// Table gathering the pointers on the different SW entity data structure. If NULL, field is free
+extern T_ATP_PORT_STRUCT * atp_first_port_p;
+extern T_ATP_SW_ENTITY_ID atp_nb_sw_entity;
+extern T_ATP_SWE_STATE atp_swe_state;
+extern T_ATP_SW_ENTITY_STRUCT * atp_sw_entity_table_p[ATP_MAX_NB_SW_ENTITY+1]; //+1 due to GSM SW entity 
+
+
+/* Registration / re-registration */
+T_ATP_RET atp_dereg_all(void);
+T_ATP_RET atp_init_cmd_info_struct(T_ATP_PORT_STRUCT * port_p);
+
+/* Port handling related functions -> atp_port.c */
+T_ATP_RET atp_create_port(T_ATP_PORT_STRUCT **port_pp);
+T_ATP_RET atp_delete_port(T_ATP_PORT_STRUCT *port_p);
+T_ATP_RET atp_get_port(T_ATP_SW_ENTITY_ID sw_id, T_ATP_PORT_NB port_nb,T_ATP_PORT_STRUCT ** port_found_pp,T_ATP_SW_NB * sw_nb_p);
+T_ATP_RET atp_send_message(T_ATP_CALLBACK path,T_ATP_MESSAGE * message_p);
+
+
+/* Commands handling related functions -> atp_cmd.c */
+T_ATP_RET atp_cmd_init_dce_info(T_ATP_DCE_INFO * dce_info_p); // initialise dce buffer */
+T_ATP_RET atp_interpret_raw_data (T_ATP_PORT_STRUCT	*port_p,
+								  T_RVF_MB_ID		mb_id,
+								  T_ATP_CMD_TYPE	*cmd_type_p,
+								  T_ATP_CMD_NB		*cmd_nb_p,
+								  T_ATP_CMD			**cmd_info_pp,
+								  T_ATP_TXT_CMD		*text_pp,
+								  UINT16			*text_length_p);
+
+T_ATP_RET atp_create_data_buffer_from_cmd (T_ATP_CMD_MODE  cmd_mode,
+										   UINT16          header,
+										   UINT16          trailer,
+										   T_ATP_DCE_INFO  *dce_info_p,
+										   T_RVF_MB_ID     mb_id,
+										   T_ATP_CMD_TYPE  cmd_type,
+										   T_ATP_CMD_NB    cmd_nb,
+										   T_ATP_TXT_CMD   text_p,
+										   T_ATP_CMD       *cmd_info_p,
+										   T_ATP_BUFFER    *buffer_pp,
+										   UINT16          *length_p);
+
+T_ATP_RET atp_translate_cmd_to_txt (T_ATP_CMD_TYPE  cmd_type,
+									T_ATP_CMD_NB    cmd_nb,
+									T_ATP_CMD       *cmd_info_p,
+									T_RVF_MB_ID     mb_id,
+									T_ATP_TXT_CMD   *text_pp,
+									UINT16          *text_length_p);
+
+
+T_ATP_RET atp_copy_buffer_from_l2cap (void * l2cap_buffer_p, void * copy_buffer_p,
+									  UINT32 buffer_length);
+T_ATP_RET atp_copy_buffer (UINT8   *in_buffer_p,
+						   UINT8   *out_buffer_p,
+						   UINT32  data_size);
+
+/* Error functions -> atp_env.c */
+void atp_error(T_ATP_ERROR_REASON atp_error_reason);
+
+#endif