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