594 lines
19 KiB
C
594 lines
19 KiB
C
/*
|
|
* proc.h
|
|
*
|
|
* DSP-BIOS Bridge driver support functions for TI OMAP processors.
|
|
*
|
|
* This is the DSP API RM module interface.
|
|
*
|
|
* 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 PROC_
|
|
#define PROC_
|
|
|
|
#include <dspbridge/cfgdefs.h>
|
|
#include <dspbridge/devdefs.h>
|
|
#include <dspbridge/drv.h>
|
|
|
|
extern char *iva_img;
|
|
|
|
/*
|
|
* ======== proc_attach ========
|
|
* Purpose:
|
|
* Prepare for communication with a particular DSP processor, and return
|
|
* a handle to the processor object. The PROC Object gets created
|
|
* Parameters:
|
|
* processor_id : The processor index (zero-based).
|
|
* hmgr_obj : Handle to the Manager Object
|
|
* attr_in : Ptr to the dsp_processorattrin structure.
|
|
* A NULL value means use default values.
|
|
* ph_processor : Ptr to location to store processor handle.
|
|
* Returns:
|
|
* 0 : Success.
|
|
* -EPERM : General failure.
|
|
* -EFAULT : Invalid processor handle.
|
|
* 0: Success; Processor already attached.
|
|
* Requires:
|
|
* ph_processor != NULL.
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* -EPERM, and *ph_processor == NULL, OR
|
|
* Success and *ph_processor is a Valid Processor handle OR
|
|
* 0 and *ph_processor is a Valid Processor.
|
|
* Details:
|
|
* When attr_in is NULL, the default timeout value is 10 seconds.
|
|
*/
|
|
extern int proc_attach(u32 processor_id,
|
|
const struct dsp_processorattrin
|
|
*attr_in, void **ph_processor,
|
|
struct process_context *pr_ctxt);
|
|
|
|
/*
|
|
* ======== proc_auto_start =========
|
|
* Purpose:
|
|
* A Particular device gets loaded with the default image
|
|
* if the AutoStart flag is set.
|
|
* Parameters:
|
|
* hdev_obj : Handle to the Device
|
|
* Returns:
|
|
* 0 : On Successful Loading
|
|
* -ENOENT : No DSP exec file found.
|
|
* -EPERM : General Failure
|
|
* Requires:
|
|
* hdev_obj != NULL.
|
|
* dev_node_obj != NULL.
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
*/
|
|
extern int proc_auto_start(struct cfg_devnode *dev_node_obj,
|
|
struct dev_object *hdev_obj);
|
|
|
|
/*
|
|
* ======== proc_ctrl ========
|
|
* Purpose:
|
|
* Pass control information to the GPP device driver managing the DSP
|
|
* processor. This will be an OEM-only function, and not part of the
|
|
* 'Bridge application developer's API.
|
|
* Parameters:
|
|
* hprocessor : The processor handle.
|
|
* dw_cmd : Private driver IOCTL cmd ID.
|
|
* pargs : Ptr to an driver defined argument structure.
|
|
* Returns:
|
|
* 0 : SUCCESS
|
|
* -EFAULT : Invalid processor handle.
|
|
* -ETIME: A Timeout Occurred before the Control information
|
|
* could be sent.
|
|
* -EPERM : General Failure.
|
|
* Requires:
|
|
* PROC Initialized.
|
|
* Ensures
|
|
* Details:
|
|
* This function Calls bridge_dev_ctrl.
|
|
*/
|
|
extern int proc_ctrl(void *hprocessor,
|
|
u32 dw_cmd, struct dsp_cbdata *arg);
|
|
|
|
/*
|
|
* ======== proc_detach ========
|
|
* Purpose:
|
|
* Close a DSP processor and de-allocate all (GPP) resources reserved
|
|
* for it. The Processor Object is deleted.
|
|
* Parameters:
|
|
* pr_ctxt : The processor handle.
|
|
* Returns:
|
|
* 0 : Success.
|
|
* -EFAULT : InValid Handle.
|
|
* -EPERM : General failure.
|
|
* Requires:
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* PROC Object is destroyed.
|
|
*/
|
|
extern int proc_detach(struct process_context *pr_ctxt);
|
|
|
|
/*
|
|
* ======== proc_enum_nodes ========
|
|
* Purpose:
|
|
* Enumerate the nodes currently allocated on a processor.
|
|
* Parameters:
|
|
* hprocessor : The processor handle.
|
|
* node_tab : The first Location of an array allocated for node
|
|
* handles.
|
|
* node_tab_size: The number of (DSP_HNODE) handles that can be held
|
|
* to the memory the client has allocated for node_tab
|
|
* pu_num_nodes : Location where DSPProcessor_EnumNodes will return
|
|
* the number of valid handles written to node_tab
|
|
* pu_allocated : Location where DSPProcessor_EnumNodes will return
|
|
* the number of nodes that are allocated on the DSP.
|
|
* Returns:
|
|
* 0 : Success.
|
|
* -EFAULT : Invalid processor handle.
|
|
* -EINVAL : The amount of memory allocated for node_tab is
|
|
* insufficent. That is the number of nodes actually
|
|
* allocated on the DSP is greater than the value
|
|
* specified for node_tab_size.
|
|
* -EPERM : Unable to get Resource Information.
|
|
* Details:
|
|
* Requires
|
|
* pu_num_nodes is not NULL.
|
|
* pu_allocated is not NULL.
|
|
* node_tab is not NULL.
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* Details:
|
|
*/
|
|
extern int proc_enum_nodes(void *hprocessor,
|
|
void **node_tab,
|
|
u32 node_tab_size,
|
|
u32 *pu_num_nodes,
|
|
u32 *pu_allocated);
|
|
|
|
/*
|
|
* ======== proc_get_resource_info ========
|
|
* Purpose:
|
|
* Enumerate the resources currently available on a processor.
|
|
* Parameters:
|
|
* hprocessor : The processor handle.
|
|
* resource_type: Type of resource .
|
|
* resource_info: Ptr to the dsp_resourceinfo structure.
|
|
* resource_info_size: Size of the structure.
|
|
* Returns:
|
|
* 0 : Success.
|
|
* -EFAULT : Invalid processor handle.
|
|
* -EBADR: The processor is not in the PROC_RUNNING state.
|
|
* -ETIME: A timeout occurred before the DSP responded to the
|
|
* querry.
|
|
* -EPERM : Unable to get Resource Information
|
|
* Requires:
|
|
* resource_info is not NULL.
|
|
* Parameter resource_type is Valid.[TBD]
|
|
* resource_info_size is >= sizeof dsp_resourceinfo struct.
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* Details:
|
|
* This function currently returns
|
|
* -ENOSYS, and does not write any data to the resource_info struct.
|
|
*/
|
|
extern int proc_get_resource_info(void *hprocessor,
|
|
u32 resource_type,
|
|
struct dsp_resourceinfo
|
|
*resource_info,
|
|
u32 resource_info_size);
|
|
|
|
/*
|
|
* ======== proc_get_dev_object =========
|
|
* Purpose:
|
|
* Returns the DEV Hanlde for a given Processor handle
|
|
* Parameters:
|
|
* hprocessor : Processor Handle
|
|
* device_obj : Location to store the DEV Handle.
|
|
* Returns:
|
|
* 0 : Success; *device_obj has Dev handle
|
|
* -EPERM : Failure; *device_obj is zero.
|
|
* Requires:
|
|
* device_obj is not NULL
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* 0 : *device_obj is not NULL
|
|
* -EPERM : *device_obj is NULL.
|
|
*/
|
|
extern int proc_get_dev_object(void *hprocessor,
|
|
struct dev_object **device_obj);
|
|
|
|
/*
|
|
* ======== proc_get_state ========
|
|
* Purpose:
|
|
* Report the state of the specified DSP processor.
|
|
* Parameters:
|
|
* hprocessor : The processor handle.
|
|
* proc_state_obj : Ptr to location to store the dsp_processorstate
|
|
* structure.
|
|
* state_info_size: Size of dsp_processorstate.
|
|
* Returns:
|
|
* 0 : Success.
|
|
* -EFAULT : Invalid processor handle.
|
|
* -EPERM : General failure while querying processor state.
|
|
* Requires:
|
|
* proc_state_obj is not NULL
|
|
* state_info_size is >= than the size of dsp_processorstate structure.
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* Details:
|
|
*/
|
|
extern int proc_get_state(void *hprocessor, struct dsp_processorstate
|
|
*proc_state_obj, u32 state_info_size);
|
|
|
|
/*
|
|
* ======== PROC_GetProcessorID ========
|
|
* Purpose:
|
|
* Report the state of the specified DSP processor.
|
|
* Parameters:
|
|
* hprocessor : The processor handle.
|
|
* proc_id : Processor ID
|
|
*
|
|
* Returns:
|
|
* 0 : Success.
|
|
* -EFAULT : Invalid processor handle.
|
|
* -EPERM : General failure while querying processor state.
|
|
* Requires:
|
|
* proc_state_obj is not NULL
|
|
* state_info_size is >= than the size of dsp_processorstate structure.
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* Details:
|
|
*/
|
|
extern int proc_get_processor_id(void *proc, u32 * proc_id);
|
|
|
|
/*
|
|
* ======== proc_get_trace ========
|
|
* Purpose:
|
|
* Retrieve the trace buffer from the specified DSP processor.
|
|
* Parameters:
|
|
* hprocessor : The processor handle.
|
|
* pbuf : Ptr to buffer to hold trace output.
|
|
* max_size : Maximum size of the output buffer.
|
|
* Returns:
|
|
* 0 : Success.
|
|
* -EFAULT : Invalid processor handle.
|
|
* -EPERM : General failure while retrieving processor trace
|
|
* Buffer.
|
|
* Requires:
|
|
* pbuf is not NULL
|
|
* max_size is > 0.
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* Details:
|
|
*/
|
|
extern int proc_get_trace(void *hprocessor, u8 * pbuf, u32 max_size);
|
|
|
|
/*
|
|
* ======== proc_load ========
|
|
* Purpose:
|
|
* Reset a processor and load a new base program image.
|
|
* This will be an OEM-only function.
|
|
* Parameters:
|
|
* hprocessor: The processor handle.
|
|
* argc_index: The number of Arguments(strings)in the aArgV[]
|
|
* user_args: An Array of Arguments(Unicode Strings)
|
|
* user_envp: An Array of Environment settings(Unicode Strings)
|
|
* Returns:
|
|
* 0: Success.
|
|
* -ENOENT: The DSP Execuetable was not found.
|
|
* -EFAULT: Invalid processor handle.
|
|
* -EPERM : Unable to Load the Processor
|
|
* Requires:
|
|
* user_args is not NULL
|
|
* argc_index is > 0
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* Success and ProcState == PROC_LOADED
|
|
* or DSP_FAILED status.
|
|
* Details:
|
|
* Does not implement access rights to control which GPP application
|
|
* can load the processor.
|
|
*/
|
|
extern int proc_load(void *hprocessor,
|
|
const s32 argc_index, const char **user_args,
|
|
const char **user_envp);
|
|
|
|
/*
|
|
* ======== proc_register_notify ========
|
|
* Purpose:
|
|
* Register to be notified of specific processor events
|
|
* Parameters:
|
|
* hprocessor : The processor handle.
|
|
* event_mask : Mask of types of events to be notified about.
|
|
* notify_type : Type of notification to be sent.
|
|
* hnotification: Handle to be used for notification.
|
|
* Returns:
|
|
* 0 : Success.
|
|
* -EFAULT : Invalid processor handle or hnotification.
|
|
* -EINVAL : Parameter event_mask is Invalid
|
|
* DSP_ENOTIMP : The notification type specified in uNotifyMask
|
|
* is not supported.
|
|
* -EPERM : Unable to register for notification.
|
|
* Requires:
|
|
* hnotification is not NULL
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* Details:
|
|
*/
|
|
extern int proc_register_notify(void *hprocessor,
|
|
u32 event_mask, u32 notify_type,
|
|
struct dsp_notification
|
|
*hnotification);
|
|
|
|
/*
|
|
* ======== proc_notify_clients ========
|
|
* Purpose:
|
|
* Notify the Processor Clients
|
|
* Parameters:
|
|
* proc : The processor handle.
|
|
* events : Event to be notified about.
|
|
* Returns:
|
|
* 0 : Success.
|
|
* -EFAULT : Invalid processor handle.
|
|
* -EPERM : Failure to Set or Reset the Event
|
|
* Requires:
|
|
* events is Supported or Valid type of Event
|
|
* proc is a valid handle
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
*/
|
|
extern int proc_notify_clients(void *proc, u32 events);
|
|
|
|
/*
|
|
* ======== proc_notify_all_clients ========
|
|
* Purpose:
|
|
* Notify the Processor Clients
|
|
* Parameters:
|
|
* proc : The processor handle.
|
|
* events : Event to be notified about.
|
|
* Returns:
|
|
* 0 : Success.
|
|
* -EFAULT : Invalid processor handle.
|
|
* -EPERM : Failure to Set or Reset the Event
|
|
* Requires:
|
|
* events is Supported or Valid type of Event
|
|
* proc is a valid handle
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* Details:
|
|
* NODE And STRM would use this function to notify their clients
|
|
* about the state changes in NODE or STRM.
|
|
*/
|
|
extern int proc_notify_all_clients(void *proc, u32 events);
|
|
|
|
/*
|
|
* ======== proc_start ========
|
|
* Purpose:
|
|
* Start a processor running.
|
|
* Processor must be in PROC_LOADED state.
|
|
* This will be an OEM-only function, and not part of the 'Bridge
|
|
* application developer's API.
|
|
* Parameters:
|
|
* hprocessor : The processor handle.
|
|
* Returns:
|
|
* 0 : Success.
|
|
* -EFAULT : Invalid processor handle.
|
|
* -EBADR: Processor is not in PROC_LOADED state.
|
|
* -EPERM : Unable to start the processor.
|
|
* Requires:
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* Success and ProcState == PROC_RUNNING or DSP_FAILED status.
|
|
* Details:
|
|
*/
|
|
extern int proc_start(void *hprocessor);
|
|
|
|
/*
|
|
* ======== proc_stop ========
|
|
* Purpose:
|
|
* Start a processor running.
|
|
* Processor must be in PROC_LOADED state.
|
|
* This will be an OEM-only function, and not part of the 'Bridge
|
|
* application developer's API.
|
|
* Parameters:
|
|
* hprocessor : The processor handle.
|
|
* Returns:
|
|
* 0 : Success.
|
|
* -EFAULT : Invalid processor handle.
|
|
* -EBADR: Processor is not in PROC_LOADED state.
|
|
* -EPERM : Unable to start the processor.
|
|
* Requires:
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* Success and ProcState == PROC_RUNNING or DSP_FAILED status.
|
|
* Details:
|
|
*/
|
|
extern int proc_stop(void *hprocessor);
|
|
|
|
/*
|
|
* ======== proc_end_dma ========
|
|
* Purpose:
|
|
* Begin a DMA transfer
|
|
* Parameters:
|
|
* hprocessor : The processor handle.
|
|
* pmpu_addr : Buffer start address
|
|
* ul_size : Buffer size
|
|
* dir : The direction of the transfer
|
|
* Requires:
|
|
* Memory was previously mapped.
|
|
*/
|
|
extern int proc_end_dma(void *hprocessor, void *pmpu_addr, u32 ul_size,
|
|
enum dma_data_direction dir);
|
|
/*
|
|
* ======== proc_begin_dma ========
|
|
* Purpose:
|
|
* Begin a DMA transfer
|
|
* Parameters:
|
|
* hprocessor : The processor handle.
|
|
* pmpu_addr : Buffer start address
|
|
* ul_size : Buffer size
|
|
* dir : The direction of the transfer
|
|
* Requires:
|
|
* Memory was previously mapped.
|
|
*/
|
|
extern int proc_begin_dma(void *hprocessor, void *pmpu_addr, u32 ul_size,
|
|
enum dma_data_direction dir);
|
|
|
|
/*
|
|
* ======== proc_flush_memory ========
|
|
* Purpose:
|
|
* Flushes a buffer from the MPU data cache.
|
|
* Parameters:
|
|
* hprocessor : The processor handle.
|
|
* pmpu_addr : Buffer start address
|
|
* ul_size : Buffer size
|
|
* ul_flags : Reserved.
|
|
* Returns:
|
|
* 0 : Success.
|
|
* -EFAULT : Invalid processor handle.
|
|
* -EPERM : General failure.
|
|
* Requires:
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* Details:
|
|
* All the arguments are currently ignored.
|
|
*/
|
|
extern int proc_flush_memory(void *hprocessor,
|
|
void *pmpu_addr, u32 ul_size, u32 ul_flags);
|
|
|
|
/*
|
|
* ======== proc_invalidate_memory ========
|
|
* Purpose:
|
|
* Invalidates a buffer from the MPU data cache.
|
|
* Parameters:
|
|
* hprocessor : The processor handle.
|
|
* pmpu_addr : Buffer start address
|
|
* ul_size : Buffer size
|
|
* Returns:
|
|
* 0 : Success.
|
|
* -EFAULT : Invalid processor handle.
|
|
* -EPERM : General failure.
|
|
* Requires:
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* Details:
|
|
* All the arguments are currently ignored.
|
|
*/
|
|
extern int proc_invalidate_memory(void *hprocessor,
|
|
void *pmpu_addr, u32 ul_size);
|
|
|
|
/*
|
|
* ======== proc_map ========
|
|
* Purpose:
|
|
* Maps a MPU buffer to DSP address space.
|
|
* Parameters:
|
|
* hprocessor : The processor handle.
|
|
* pmpu_addr : Starting address of the memory region to map.
|
|
* ul_size : Size of the memory region to map.
|
|
* req_addr : Requested DSP start address. Offset-adjusted actual
|
|
* mapped address is in the last argument.
|
|
* pp_map_addr : Ptr to DSP side mapped u8 address.
|
|
* ul_map_attr : Optional endianness attributes, virt to phys flag.
|
|
* Returns:
|
|
* 0 : Success.
|
|
* -EFAULT : Invalid processor handle.
|
|
* -EPERM : General failure.
|
|
* -ENOMEM : MPU side memory allocation error.
|
|
* -ENOENT : Cannot find a reserved region starting with this
|
|
* : address.
|
|
* Requires:
|
|
* pmpu_addr is not NULL
|
|
* ul_size is not zero
|
|
* pp_map_addr is not NULL
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* Details:
|
|
*/
|
|
extern int proc_map(void *hprocessor,
|
|
void *pmpu_addr,
|
|
u32 ul_size,
|
|
void *req_addr,
|
|
void **pp_map_addr, u32 ul_map_attr,
|
|
struct process_context *pr_ctxt);
|
|
|
|
/*
|
|
* ======== proc_reserve_memory ========
|
|
* Purpose:
|
|
* Reserve a virtually contiguous region of DSP address space.
|
|
* Parameters:
|
|
* hprocessor : The processor handle.
|
|
* ul_size : Size of the address space to reserve.
|
|
* pp_rsv_addr : Ptr to DSP side reserved u8 address.
|
|
* Returns:
|
|
* 0 : Success.
|
|
* -EFAULT : Invalid processor handle.
|
|
* -EPERM : General failure.
|
|
* -ENOMEM : Cannot reserve chunk of this size.
|
|
* Requires:
|
|
* pp_rsv_addr is not NULL
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* Details:
|
|
*/
|
|
extern int proc_reserve_memory(void *hprocessor,
|
|
u32 ul_size, void **pp_rsv_addr,
|
|
struct process_context *pr_ctxt);
|
|
|
|
/*
|
|
* ======== proc_un_map ========
|
|
* Purpose:
|
|
* Removes a MPU buffer mapping from the DSP address space.
|
|
* Parameters:
|
|
* hprocessor : The processor handle.
|
|
* map_addr : Starting address of the mapped memory region.
|
|
* Returns:
|
|
* 0 : Success.
|
|
* -EFAULT : Invalid processor handle.
|
|
* -EPERM : General failure.
|
|
* -ENOENT : Cannot find a mapped region starting with this
|
|
* : address.
|
|
* Requires:
|
|
* map_addr is not NULL
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* Details:
|
|
*/
|
|
extern int proc_un_map(void *hprocessor, void *map_addr,
|
|
struct process_context *pr_ctxt);
|
|
|
|
/*
|
|
* ======== proc_un_reserve_memory ========
|
|
* Purpose:
|
|
* Frees a previously reserved region of DSP address space.
|
|
* Parameters:
|
|
* hprocessor : The processor handle.
|
|
* prsv_addr : Ptr to DSP side reservedBYTE address.
|
|
* Returns:
|
|
* 0 : Success.
|
|
* -EFAULT : Invalid processor handle.
|
|
* -EPERM : General failure.
|
|
* -ENOENT : Cannot find a reserved region starting with this
|
|
* : address.
|
|
* Requires:
|
|
* prsv_addr is not NULL
|
|
* PROC Initialized.
|
|
* Ensures:
|
|
* Details:
|
|
*/
|
|
extern int proc_un_reserve_memory(void *hprocessor,
|
|
void *prsv_addr,
|
|
struct process_context *pr_ctxt);
|
|
|
|
#endif /* PROC_ */
|