| /* |
| * 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 Occured 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 occured 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_exit ======== |
| * Purpose: |
| * Decrement reference count, and free resources when reference count is |
| * 0. |
| * Parameters: |
| * Returns: |
| * Requires: |
| * PROC is initialized. |
| * Ensures: |
| * When reference count == 0, PROC's private resources are freed. |
| */ |
| extern void proc_exit(void); |
| |
| /* |
| * ======== 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_init ======== |
| * Purpose: |
| * Initialize PROC's private state, keeping a reference count on each |
| * call. |
| * Parameters: |
| * Returns: |
| * TRUE if initialized; FALSE if error occured. |
| * Requires: |
| * Ensures: |
| * TRUE: A requirement for the other public PROC functions. |
| */ |
| extern bool proc_init(void); |
| |
| /* |
| * ======== 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 retireving 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_ */ |