summaryrefslogblamecommitdiffstats
path: root/cpukit/include/rtems/rtems/dpmem.h
blob: d3a33ad547cfd9b13f904119938ce56e4770ba59 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
   
        
  
                        
  
                                                

   

                                                   
  

                                                          
                                        

   

                            
 

                               
 



                  
   


                                             
  

                                                  



       

















                                                                        
   
                                    
                     

                               
                       
                  

  
   
                               
  


                                                                         
  

                                                
  
                                                                       
   
                                   
                     
                  

  
   
                           
  

                                                                      
  
                                                  
  


                                                                     
   
                                    
               

  
   
                                         
  




                                                                          
  


                                                                 
  
                           
   
                                                  
                  



                        
   
                                         
  




                                                                   
  


                                                         
  

                                                              
   
                                                  
                  



                        
       






                         
/**
 * @file
 *
 * @ingroup ClassicDPMEM
 *
 * @brief Classic Dual Ported Memory Manager API
 */

/* COPYRIGHT (c) 1989-2008.
 * On-Line Applications Research Corporation (OAR).
 *
 * The license and distribution terms for this file may be
 * found in the file LICENSE in this distribution or at
 * http://www.rtems.org/license/LICENSE.
 */

#ifndef _RTEMS_RTEMS_DPMEM_H
#define _RTEMS_RTEMS_DPMEM_H

#include <rtems/rtems/types.h>
#include <rtems/rtems/status.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 *  @defgroup ClassicDPMEM Dual Ported Memory
 *
 *  @ingroup ClassicRTEMS
 *
 *  This encapsulates functionality related to the
 *  Classic API Dual Ported Memory Manager.
 */
/**@{*/

/**
 * @brief Creates a port into a dual-ported memory area.
 *
 * This routine implements the rtems_port_create directive. The port
 * will have the name @a name. The port maps onto an area of dual ported
 * memory of length bytes which has internal_start and external_start
 * as the internal and external starting addresses, respectively.
 * It returns the id of the created port in ID.
 *
 * @param[in] name is the user defined port name
 * @param[in] internal_start is the internal start address of port
 * @param[in] external_start is the external start address of port
 * @param[in] length is the physical length in bytes
 * @param[out] id is the address of port id to set
 *
 * @retval This method returns RTEMS_SUCCESSFUL if there was not an
 *         error. Otherwise, a status code is returned indicating the
 *         source of the error. If successful, the id will
 *         be filled in with the port id.
 */
rtems_status_code rtems_port_create(
  rtems_name    name,
  void         *internal_start,
  void         *external_start,
  uint32_t      length,
  rtems_id     *id
);

/**
 * @brief RTEMS Port Name to Id
 *
 * This routine implements the rtems_port_ident directive. This directive
 * returns the port ID associated with name. If more than one port is
 * named name, then the port to which the ID belongs is arbitrary.
 *
 * @param[in] name is the user defined port name
 * @param[out] id is the pointer to port id
 *
 * @retval RTEMS_SUCCESSFUL if successful or error code if unsuccessful
 */
rtems_status_code rtems_port_ident(
  rtems_name    name,
  rtems_id     *id
);

/**
 * @brief RTEMS Delete Port
 *
 * This routine implements the rtems_port_delete directive. It deletes
 * the port associated with ID.
 *
 * @param[in] id is the dual-ported memory area id
 *
 * @retval This method returns RTEMS_SUCCESSFUL if there was not an
 *         error. Otherwise, a status code is returned indicating the
 *         source of the error.
 */
rtems_status_code rtems_port_delete(
  rtems_id   id
);

/**
 * @brief RTEMS Port External to Internal
 *
 * This routine implements the rtems_port_external_to_internal directive.
 * It returns the internal port address which maps to the provided
 * external port address for the specified port ID. If the given external
 * address is an invalid dual-ported address, then the internal address is
 * set to the given external address.
 *
 * @param[in] id is the id of dp memory object
 * @param[in] external is the external address
 * @param[out] internal is the pointer of internal address to set
 *
 * @retval RTEMS_SUCCESSFUL
 */
rtems_status_code rtems_port_external_to_internal(
  rtems_id     id,
  void        *external,
  void       **internal
);

/**
 * @brief RTEMS Port Internal to External
 *
 * This routine implements the Port_internal_to_external directive.
 * It returns the external port address which maps to the provided
 * internal port address for the specified port ID. If the given
 * internal address is an invalid dual-ported address, then the
 * external address is set to the given internal address.
 *
 * @param[in] id is the id of dual-ported memory object
 * @param[in] internal is the internal address to set
 * @param[in] external is the pointer to external address
 *
 * @retval RTEMS_SUCCESSFUL and the external will be filled in
 * with the external addresses
 */
rtems_status_code rtems_port_internal_to_external(
  rtems_id     id,
  void        *internal,
  void       **external
);

/**@}*/

#ifdef __cplusplus
}
#endif

#endif
/* end of include file */