/* | |
* 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 | |