![Rene Sapiens](/assets/img/avatar_default.png)
hungarian notation will be removed from the elements inside structures, the next varibles will be renamed: Original: Replacement: hio_mgr io_mgr dw_api_reg_base api_reg_base dw_api_clk_base api_clk_base ap_channel channels pio_requests io_requests pio_completions io_completions pndb_props ndb_props pndb_props_size ndb_props_size pu_num_nodes num_nodes pu_num_procs num_procs psz_path_name sz_path_name pu_index index pargs args pu_allocated allocated psize size hnotification notification pp_rsv_addr rsv_addr prsv_addr rsv_addr pmpu_addr mpu_addr pp_map_addr map_addr ul_map_attr map_attr undb_props_size ndb_props_size Signed-off-by: Rene Sapiens <rene.sapiens@ti.com> Signed-off-by: Armando Uribe <x0095078@ti.com> Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com>
143 lines
5.1 KiB
C
143 lines
5.1 KiB
C
/*
|
|
* _msg_sm.h
|
|
*
|
|
* DSP-BIOS Bridge driver support functions for TI OMAP processors.
|
|
*
|
|
* Private header file defining msg_ctrl manager objects and defines needed
|
|
* by IO manager.
|
|
*
|
|
* Copyright (C) 2005-2006 Texas Instruments, Inc.
|
|
*
|
|
* This package is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
|
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
*/
|
|
|
|
#ifndef _MSG_SM_
|
|
#define _MSG_SM_
|
|
|
|
#include <linux/list.h>
|
|
#include <dspbridge/msgdefs.h>
|
|
|
|
/*
|
|
* These target side symbols define the beginning and ending addresses
|
|
* of the section of shared memory used for messages. They are
|
|
* defined in the *cfg.cmd file by cdb code.
|
|
*/
|
|
#define MSG_SHARED_BUFFER_BASE_SYM "_MSG_BEG"
|
|
#define MSG_SHARED_BUFFER_LIMIT_SYM "_MSG_END"
|
|
|
|
#ifndef _CHNL_WORDSIZE
|
|
#define _CHNL_WORDSIZE 4 /* default _CHNL_WORDSIZE is 2 bytes/word */
|
|
#endif
|
|
|
|
/*
|
|
* ======== msg_ctrl ========
|
|
* There is a control structure for messages to the DSP, and a control
|
|
* structure for messages from the DSP. The shared memory region for
|
|
* transferring messages is partitioned as follows:
|
|
*
|
|
* ----------------------------------------------------------
|
|
* |Control | Messages from DSP | Control | Messages to DSP |
|
|
* ----------------------------------------------------------
|
|
*
|
|
* msg_ctrl control structure for messages to the DSP is used in the following
|
|
* way:
|
|
*
|
|
* buf_empty - This flag is set to FALSE by the GPP after it has output
|
|
* messages for the DSP. The DSP host driver sets it to
|
|
* TRUE after it has copied the messages.
|
|
* post_swi - Set to 1 by the GPP after it has written the messages,
|
|
* set the size, and set buf_empty to FALSE.
|
|
* The DSP Host driver uses SWI_andn of the post_swi field
|
|
* when a host interrupt occurs. The host driver clears
|
|
* this after posting the SWI.
|
|
* size - Number of messages to be read by the DSP.
|
|
*
|
|
* For messages from the DSP:
|
|
* buf_empty - This flag is set to FALSE by the DSP after it has output
|
|
* messages for the GPP. The DPC on the GPP sets it to
|
|
* TRUE after it has copied the messages.
|
|
* post_swi - Set to 1 the DPC on the GPP after copying the messages.
|
|
* size - Number of messages to be read by the GPP.
|
|
*/
|
|
struct msg_ctrl {
|
|
u32 buf_empty; /* to/from DSP buffer is empty */
|
|
u32 post_swi; /* Set to "1" to post msg_ctrl SWI */
|
|
u32 size; /* Number of messages to/from the DSP */
|
|
u32 resvd;
|
|
};
|
|
|
|
/*
|
|
* ======== msg_mgr ========
|
|
* The msg_mgr maintains a list of all MSG_QUEUEs. Each NODE object can
|
|
* have msg_queue to hold all messages that come up from the corresponding
|
|
* node on the DSP. The msg_mgr also has a shared queue of messages
|
|
* ready to go to the DSP.
|
|
*/
|
|
struct msg_mgr {
|
|
/* The first field must match that in msgobj.h */
|
|
|
|
/* Function interface to Bridge driver */
|
|
struct bridge_drv_interface *intf_fxns;
|
|
|
|
struct io_mgr *iomgr; /* IO manager */
|
|
struct list_head queue_list; /* List of MSG_QUEUEs */
|
|
spinlock_t msg_mgr_lock; /* For critical sections */
|
|
/* Signalled when MsgFrame is available */
|
|
struct sync_object *sync_event;
|
|
struct list_head msg_free_list; /* Free MsgFrames ready to be filled */
|
|
struct list_head msg_used_list; /* MsgFrames ready to go to DSP */
|
|
u32 msgs_pending; /* # of queued messages to go to DSP */
|
|
u32 max_msgs; /* Max # of msgs that fit in buffer */
|
|
msg_onexit on_exit; /* called when RMS_EXIT is received */
|
|
};
|
|
|
|
/*
|
|
* ======== msg_queue ========
|
|
* Each NODE has a msg_queue for receiving messages from the
|
|
* corresponding node on the DSP. The msg_queue object maintains a list
|
|
* of messages that have been sent to the host, but not yet read (MSG_Get),
|
|
* and a list of free frames that can be filled when new messages arrive
|
|
* from the DSP.
|
|
* The msg_queue's hSynEvent gets posted when a message is ready.
|
|
*/
|
|
struct msg_queue {
|
|
struct list_head list_elem;
|
|
struct msg_mgr *msg_mgr;
|
|
u32 max_msgs; /* Node message depth */
|
|
u32 msgq_id; /* Node environment pointer */
|
|
struct list_head msg_free_list; /* Free MsgFrames ready to be filled */
|
|
/* Filled MsgFramess waiting to be read */
|
|
struct list_head msg_used_list;
|
|
void *arg; /* Handle passed to mgr on_exit callback */
|
|
struct sync_object *sync_event; /* Signalled when message is ready */
|
|
struct sync_object *sync_done; /* For synchronizing cleanup */
|
|
struct sync_object *sync_done_ack; /* For synchronizing cleanup */
|
|
struct ntfy_object *ntfy_obj; /* For notification of message ready */
|
|
bool done; /* TRUE <==> deleting the object */
|
|
u32 io_msg_pend; /* Number of pending MSG_get/put calls */
|
|
};
|
|
|
|
/*
|
|
* ======== msg_dspmsg ========
|
|
*/
|
|
struct msg_dspmsg {
|
|
struct dsp_msg msg;
|
|
u32 msgq_id; /* Identifies the node the message goes to */
|
|
};
|
|
|
|
/*
|
|
* ======== msg_frame ========
|
|
*/
|
|
struct msg_frame {
|
|
struct list_head list_elem;
|
|
struct msg_dspmsg msg_data;
|
|
};
|
|
|
|
#endif /* _MSG_SM_ */
|