692 lines
14 KiB
C
692 lines
14 KiB
C
/*
|
|
* Copyright 2001-2008 Texas Instruments - http://www.ti.com/
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
|
|
/*
|
|
* qosregistry.h
|
|
*
|
|
* DSP-BIOS Bridge driver support functions for TI OMAP processors.
|
|
*/
|
|
|
|
|
|
#ifndef __QOSTI_H__
|
|
|
|
#define __QOSTI_H__
|
|
|
|
#include <dbapi.h>
|
|
|
|
/* ============================================================================
|
|
|
|
name TLoadMode
|
|
|
|
|
|
|
|
desc The node load mode for qos.
|
|
|
|
============================================================================ */
|
|
|
|
enum TLoadMode
|
|
{
|
|
|
|
EStaticLoad,
|
|
|
|
EDynamicLoad
|
|
};
|
|
|
|
/* ============================================================================
|
|
|
|
name CQosTI
|
|
|
|
|
|
|
|
desc An example class that uses the DSP BIOS/Bridge interfaces.and
|
|
|
|
demonstrates creating an xDAIS Socket Node on the DSP. It sends
|
|
|
|
messages and data buffers to the DSP, and then receives the qosd
|
|
|
|
data back from the DSP for display.
|
|
|
|
|
|
|
|
============================================================================
|
|
|
|
RHwaOmap iDsp ;
|
|
|
|
============================================================================
|
|
|
|
name TQosResourceID
|
|
|
|
|
|
|
|
desc List of available resource types
|
|
|
|
============================================================================
|
|
*/
|
|
|
|
typedef enum _QOSDATATYPE {
|
|
|
|
QOSDataType_Memory_DynLoad = 0,
|
|
|
|
QOSDataType_Memory_DynAlloc,
|
|
|
|
QOSDataType_Memory_Scratch,
|
|
|
|
QOSDataType_Processor_C55X,
|
|
|
|
QOSDataType_Processor_C6X,
|
|
|
|
QOSDataType_Peripheral_DMA,
|
|
|
|
QOSDataType_Stream,
|
|
|
|
QOSDataType_Component,
|
|
|
|
QOSDataType_Registry,
|
|
|
|
QOSDataType_DynDependentLibrary
|
|
} QOSDATATYPE;
|
|
|
|
#define QOS_USER_DATA_TYPE 0x80000000 /* Flag indicating a application-defined
|
|
data type ID */
|
|
|
|
/* ============================================================================
|
|
|
|
name QOSDATA
|
|
|
|
|
|
|
|
desc Generic data for resource management is described by the following
|
|
structure
|
|
|
|
============================================================================
|
|
*/
|
|
struct QOSDATA {
|
|
|
|
ULONG Id;
|
|
|
|
struct QOSDATA *Next;
|
|
|
|
ULONG(*TypeSpecific)(struct QOSDATA *DataObject, ULONG FunctionCode,
|
|
ULONG Parameter1);
|
|
/* ptr to type-specific func. */
|
|
|
|
ULONG Size; /* size of data plus this header */
|
|
|
|
char Data[];
|
|
|
|
};
|
|
|
|
// ============================================================================
|
|
|
|
// name QOSFNTYPESPECIFIC
|
|
|
|
//
|
|
|
|
// desc Pointer to type-specific function handler for the data object
|
|
|
|
// ============================================================================
|
|
|
|
typedef ULONG(*QOSFNTYPESPECIFIC)(struct QOSDATA *DataObject,ULONG FunctionCode,
|
|
ULONG Parameter1);
|
|
|
|
ULONG QOS_Memory_Scratch_FunctionHandler(struct QOSDATA *DataObject,
|
|
ULONG FunctionCode, ULONG Parameter1);
|
|
|
|
ULONG QOS_Memory_DynAlloc_FunctionHandler(struct QOSDATA *DataObject,
|
|
ULONG FunctionCode, ULONG Parameter1);
|
|
|
|
ULONG QOS_Memory_DynLoad_FunctionHandler(struct QOSDATA *DataObject,
|
|
ULONG FunctionCode, ULONG Parameter1);
|
|
|
|
ULONG QOS_Processor_FunctionHandler(struct QOSDATA *DataObject,
|
|
ULONG FunctionCode, ULONG Parameter1);
|
|
|
|
ULONG QOS_Resource_DefaultFunctionHandler(struct QOSDATA *DataObject,
|
|
ULONG FunctionCode, ULONG Parameter1);
|
|
|
|
ULONG QOS_Component_DefaultFunctionHandler(struct QOSDATA *DataObject,
|
|
ULONG FunctionCode, ULONG Parameter1);
|
|
|
|
ULONG QOS_DynDependentLibrary_FunctionHandler(struct QOSDATA *DataObject,
|
|
ULONG FunctionCode, ULONG Parameter1);
|
|
|
|
ULONG QOS_Registry_FunctionHandler(struct QOSDATA *DataObject,
|
|
ULONG FunctionCode, ULONG Parameter1);
|
|
|
|
/* ============================================================================
|
|
|
|
name QOSREGISTRY
|
|
|
|
|
|
|
|
desc The QOSREGISTRY structure contains a list of all resources and
|
|
components in the system
|
|
|
|
|
|
============================================================================
|
|
*/
|
|
|
|
struct QOSREGISTRY {
|
|
|
|
struct QOSDATA data;
|
|
|
|
struct QOSDATA *ResourceRegistry;
|
|
|
|
struct QOSDATA *ComponentRegistry;
|
|
|
|
};
|
|
|
|
// ============================================================================
|
|
|
|
// name QOSRESOURCE_MEMORY
|
|
|
|
//
|
|
|
|
// desc System memory resources are characterized by the following structure
|
|
|
|
// ============================================================================
|
|
|
|
struct QOSRESOURCE_MEMORY {
|
|
|
|
struct QOSDATA data;
|
|
|
|
UINT align; /* alignment of memory heap */
|
|
|
|
UINT heapId; /* resource heap ID */
|
|
|
|
UINT size; /* size of memory heap */
|
|
|
|
UINT type; /* type of memory: prefer/require/scratch/persist */
|
|
|
|
UINT allocated; /* size of heap in use (not free) */
|
|
|
|
UINT largestfree; /* size of largest contiguous free block */
|
|
|
|
UINT group; /* scratch group ID (only for scratch memory) */
|
|
|
|
};
|
|
|
|
/* ============================================================================
|
|
|
|
name QOSRESOURCE_PROCESSOR
|
|
|
|
|
|
|
|
desc Each processor is described by its processor type, hardware
|
|
attributes, and available processing cycles (MIPS).
|
|
|
|
============================================================================*/
|
|
|
|
struct QOSRESOURCE_PROCESSOR {
|
|
|
|
struct QOSDATA data;
|
|
|
|
UINT MaxMips; /* max cpu cycles required for component */
|
|
|
|
UINT TypicalMips; /* typical cpu cycles required */
|
|
|
|
UINT MaxCycles; /* max cpu cycles for single iteration */
|
|
|
|
UINT TypicalCycles; /* typical cpu cycles for single iteration */
|
|
|
|
UINT Utilization; /* percentage of time cpu is idle */
|
|
|
|
UINT currentLoad;
|
|
|
|
UINT predLoad;
|
|
|
|
UINT currDspFreq;
|
|
|
|
UINT predictedFreq;
|
|
|
|
|
|
} ;
|
|
|
|
/* ============================================================================
|
|
|
|
name QOSRESOURCE_STREAM
|
|
|
|
|
|
|
|
desc Bridge Streams are introduced as a QoS resource structure
|
|
|
|
============================================================================
|
|
*/
|
|
|
|
struct QOSRESOURCE_STREAM {
|
|
|
|
struct QOSDATA data;
|
|
|
|
struct DSP_STRMATTR Attrs; /* Stream attributes for this stream */
|
|
|
|
UINT Direction; /* DSP_TONODE or DSP_FROMNODE */
|
|
|
|
};
|
|
|
|
struct QOSDYNDEPLIB {
|
|
|
|
struct QOSDATA data;
|
|
|
|
struct DSP_UUID depLibUuid; /* UUID of Dynamic Dependent Library */
|
|
|
|
const CHAR *depLibPath; /* Path to Dynamic Dependent Library */
|
|
|
|
};
|
|
|
|
/* ============================================================================
|
|
|
|
name QOSCOMPONENT
|
|
|
|
|
|
|
|
desc Bridge Streams are introduced as a QoS resource structure
|
|
|
|
============================================================================
|
|
*/
|
|
|
|
struct QOSCOMPONENT {
|
|
|
|
struct QOSDATA data;
|
|
|
|
UINT InUse; /* Count of instances of this component in use */
|
|
|
|
UINT aTaskId;
|
|
|
|
UINT VariantID;
|
|
|
|
UINT InterfaceID;
|
|
|
|
struct DSP_UUID NodeUuid;
|
|
|
|
PVOID dynNodePath;
|
|
|
|
struct QOSDATA *resourceList;
|
|
|
|
struct QOSDYNDEPLIB *dynDepLibList;
|
|
|
|
};
|
|
|
|
/* ============================================================================
|
|
|
|
name Registry-specific QOS_FN_xxx definitions
|
|
|
|
|
|
|
|
desc These are defines for the registry-specific function codes
|
|
|
|
============================================================================
|
|
*/
|
|
|
|
#define QOS_FN_GetNumDynAllocMemHeaps 1
|
|
|
|
#define QOS_FN_HasAvailableResource 2
|
|
|
|
/* ============================================================================
|
|
|
|
name Resource-specific QOS_FN_xxx definitions
|
|
|
|
|
|
|
|
desc These are defines for the resource-specific function codes
|
|
|
|
============================================================================
|
|
*/
|
|
|
|
#define QOS_FN_ResourceIsAvailable 1
|
|
|
|
#define QOS_FN_ResourceUpdateInfo 2
|
|
|
|
// ============================================================================
|
|
|
|
/* name DSPRegistry_Create
|
|
|
|
|
|
|
|
Implementation
|
|
|
|
Creates empty Registry, then adds all the default system resources
|
|
|
|
Parameters
|
|
|
|
none
|
|
|
|
Return
|
|
|
|
QOSREGISTRY* ptr to new system registry
|
|
|
|
NULL Failure (out of memory)
|
|
|
|
Requirement Coverage
|
|
|
|
This method addresses requirement(s): SR10085
|
|
|
|
*/
|
|
|
|
struct QOSREGISTRY *DSPRegistry_Create();
|
|
|
|
/* ============================================================================
|
|
|
|
name DSPRegistry_Delete
|
|
|
|
|
|
|
|
Implementation
|
|
|
|
Deletes Registry and cleans up QoS Gateway & Registry objects that it
|
|
owns.
|
|
|
|
Parameters
|
|
|
|
registry ptr to previously created registry
|
|
|
|
Return
|
|
|
|
none
|
|
|
|
Requirement Coverage
|
|
|
|
This method addresses requirement(s): SR10085
|
|
|
|
*/
|
|
|
|
void DSPRegistry_Delete(struct QOSREGISTRY *registry);
|
|
|
|
/* ============================================================================
|
|
|
|
name DSPRegistry_Find
|
|
|
|
|
|
|
|
Implementation
|
|
|
|
Finds resource(s) or component(s) that match the given Id. For
|
|
resources, each matching
|
|
|
|
resource's TypeSpecific function is called with the function
|
|
ID QOS_FN_ResourceUpdateInfo to
|
|
|
|
ensure that all resources have current data in their structures.
|
|
|
|
Parameters
|
|
|
|
Id requested Id
|
|
|
|
registry system registry
|
|
|
|
ResultList ptr to results array
|
|
|
|
Size ptr to ULONG number of entries available in array
|
|
|
|
Return
|
|
|
|
DSP_OK successful
|
|
|
|
DSP_ESIZE block for results is too small
|
|
|
|
DSP_ENOTFOUND item not found
|
|
|
|
Requirement Coverage
|
|
|
|
This method addresses requirement(s): SR10008
|
|
|
|
*/
|
|
|
|
DSP_STATUS DSPRegistry_Find(UINT Id, struct QOSREGISTRY *registry,
|
|
struct QOSDATA **ResultList, ULONG *Size);
|
|
|
|
/* ============================================================================
|
|
|
|
name DSPRegistry_Add
|
|
|
|
|
|
|
|
Implementation
|
|
|
|
Add given resource or component to the list
|
|
|
|
Parameters
|
|
|
|
listhead system registry (in the case of adding resources or
|
|
components to the system)
|
|
|
|
or component (in the case of adding required resources
|
|
to a component)
|
|
|
|
entry entry to add in list
|
|
|
|
Return
|
|
|
|
DSP_STATUS Error code or DSP_SOK for success
|
|
|
|
Requirement Coverage
|
|
|
|
This method addresses requirement(s): SR10085
|
|
|
|
*/
|
|
|
|
DSP_STATUS DSPRegistry_Add(struct QOSDATA *listhead, struct QOSDATA *entry);
|
|
|
|
/* ============================================================================
|
|
|
|
name DSPRegistry_Remove
|
|
|
|
|
|
|
|
Implementation
|
|
|
|
Removes given resource or component from the list
|
|
|
|
Parameters
|
|
|
|
listhead system registry (in the case of removing resources or
|
|
components from the system)
|
|
|
|
or component (in the case of removing required
|
|
resources from a component)
|
|
|
|
entry resource or component to remove
|
|
|
|
Return
|
|
|
|
DSP_STATUS Error code or DSP_SOK for success
|
|
|
|
Requirement Coverage
|
|
|
|
This method addresses requirement(s): SR10085
|
|
|
|
*/
|
|
|
|
DSP_STATUS DSPRegistry_Remove(struct QOSDATA *listhead, struct QOSDATA *entry);
|
|
|
|
/* ============================================================================
|
|
|
|
name DSPQos_TypeSpecific
|
|
|
|
|
|
|
|
Implementation
|
|
|
|
Calls the type-specific function defined for this data type.
|
|
Internally, this is implemented
|
|
|
|
as a call to the QOSDATA structure's TypeSpecific() function.
|
|
|
|
Parameters
|
|
|
|
DataObject Far pointer to the structure for the data object
|
|
|
|
FunctionCode Type-specific function code
|
|
|
|
Parameter1 Function-specific parameter
|
|
|
|
Return
|
|
|
|
ULONG Function-specific return code.
|
|
|
|
Requirement Coverage
|
|
|
|
This method addresses requirement(s): SR10085, SR10008
|
|
|
|
*/
|
|
|
|
ULONG DSPQos_TypeSpecific(struct QOSDATA *DataObject, ULONG FunctionCode,
|
|
ULONG Parameter1);
|
|
|
|
/* ============================================================================
|
|
|
|
name DSPComponent_Register
|
|
|
|
|
|
|
|
Implementation
|
|
|
|
Informs Registry that the given component is using system resources.
|
|
Internally, this
|
|
|
|
increments the InUse field of the QOSCOMPONENT structure.
|
|
|
|
Parameters
|
|
|
|
registry system registry
|
|
|
|
comp component using system resources
|
|
|
|
Return
|
|
|
|
DSP_STATUS Error code or DSP_SOK for success
|
|
|
|
Requirement Coverage
|
|
|
|
This method addresses requirement(s): SR10085
|
|
|
|
*/
|
|
|
|
DSP_STATUS DSPComponent_Register(struct QOSREGISTRY *registry,
|
|
struct QOSCOMPONENT *comp);
|
|
|
|
/* ============================================================================
|
|
|
|
name DSPComponent_Unregister
|
|
|
|
|
|
|
|
Implementation
|
|
|
|
Informs Registry that component is no longer using system resources.
|
|
Internally, this
|
|
|
|
decrements the InUse field of the QOSCOMPONENT structure.
|
|
|
|
Parameters
|
|
|
|
registry system registry
|
|
|
|
comp component releasing system resources
|
|
|
|
Return
|
|
|
|
DSP_STATUS Error code or DSP_SOK for success
|
|
|
|
Requirement Coverage
|
|
|
|
This method addresses requirement(s): SR10085
|
|
|
|
*/
|
|
|
|
DSP_STATUS DSPComponent_Unregister(struct QOSREGISTRY *registry,
|
|
struct QOSCOMPONENT *comp);
|
|
|
|
/* ============================================================================
|
|
|
|
name DSPData_Create
|
|
|
|
|
|
|
|
Implementation
|
|
|
|
Allocates and initializes a QOSDATA structure.
|
|
|
|
Parameters
|
|
|
|
id type of data
|
|
|
|
Return
|
|
|
|
QOSDATA * ptr to data structure or NULL for failure
|
|
|
|
Requirement Coverage
|
|
|
|
This method addresses requirement(s):
|
|
|
|
*/
|
|
|
|
struct QOSDATA *DSPData_Create(ULONG id);
|
|
|
|
/* ============================================================================
|
|
|
|
name DSPData_Delete
|
|
|
|
|
|
|
|
Implementation
|
|
|
|
Deletes a QOSDATA structure, recursively deleting any associated lists.
|
|
|
|
Parameters
|
|
|
|
data ptr to data structure to delete
|
|
|
|
Return
|
|
|
|
DSP_STATUS Error code or DSP_SOK for success
|
|
|
|
Requirement Coverage
|
|
|
|
This method addresses requirement(s):
|
|
|
|
*/
|
|
|
|
DSP_STATUS DSPData_Delete(struct QOSDATA *data);
|
|
|
|
/* ============================================================================
|
|
|
|
name DSPData_IsResource
|
|
|
|
|
|
|
|
Implementation
|
|
|
|
Determines whether a QOSDATA structure Id is a "resource" type ID.
|
|
|
|
Parameters
|
|
|
|
Id type ID to check
|
|
|
|
Return
|
|
|
|
bool TRUE for resources, FALSE otherwise.
|
|
|
|
Requirement Coverage
|
|
|
|
This method addresses requirement(s):
|
|
|
|
*/
|
|
|
|
bool DSPData_IsResource(ULONG Id);
|
|
|
|
#endif
|
|
|