/* * dspbridge/mpu_api/inc/qosregistry.h * * DSP-BIOS Bridge driver support functions for TI OMAP processors. * * Copyright (C) 2007 Texas Instruments, Inc. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation version 2.1 of the License. * * This program is distributed .as is. WITHOUT ANY WARRANTY of any kind, * whether express or implied; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ #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