Home | History | Annotate | Download | only in inc
      1 /*
      2  *  Copyright 2001-2008 Texas Instruments - http://www.ti.com/
      3  *
      4  *  Licensed under the Apache License, Version 2.0 (the "License");
      5  *  you may not use this file except in compliance with the License.
      6  *  You may obtain a copy of the License at
      7  *
      8  *     http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  *  Unless required by applicable law or agreed to in writing, software
     11  *  distributed under the License is distributed on an "AS IS" BASIS,
     12  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  *  See the License for the specific language governing permissions and
     14  *  limitations under the License.
     15  */
     16 
     17 
     18 /*
     19  * qosregistry.h
     20  *
     21  * DSP-BIOS Bridge driver support functions for TI OMAP processors.
     22  */
     23 
     24 
     25 #ifndef __QOSTI_H__
     26 
     27 #define __QOSTI_H__
     28 
     29 #include <dbapi.h>
     30 
     31 /*  ============================================================================
     32 
     33   name   TLoadMode
     34 
     35 
     36 
     37   desc   The node load mode for qos.
     38 
     39  ============================================================================ */
     40 
     41 enum TLoadMode
     42 {
     43 
     44 	EStaticLoad,
     45 
     46 	EDynamicLoad
     47 };
     48 
     49 /*  ============================================================================
     50 
     51   name    CQosTI
     52 
     53 
     54 
     55   desc    An example class that uses the DSP BIOS/Bridge interfaces.and
     56 
     57           demonstrates creating an xDAIS Socket Node on the DSP. It sends
     58 
     59           messages and data buffers to the DSP, and then receives the qosd
     60 
     61           data back from the DSP for display.
     62 
     63 
     64 
     65   ============================================================================
     66 
     67 	RHwaOmap            iDsp ;
     68 
     69   ============================================================================
     70 
     71   name   TQosResourceID
     72 
     73 
     74 
     75   desc   List of available resource types
     76 
     77   ============================================================================
     78  */
     79 
     80 typedef enum _QOSDATATYPE {
     81 
     82 	QOSDataType_Memory_DynLoad = 0,
     83 
     84 	QOSDataType_Memory_DynAlloc,
     85 
     86 	QOSDataType_Memory_Scratch,
     87 
     88 	QOSDataType_Processor_C55X,
     89 
     90 	QOSDataType_Processor_C6X,
     91 
     92 	QOSDataType_Peripheral_DMA,
     93 
     94 	QOSDataType_Stream,
     95 
     96 	QOSDataType_Component,
     97 
     98 	QOSDataType_Registry,
     99 
    100 	QOSDataType_DynDependentLibrary
    101 } QOSDATATYPE;
    102 
    103 #define QOS_USER_DATA_TYPE	0x80000000	/* Flag indicating a application-defined
    104 										   data type ID */
    105 
    106 /*  ============================================================================
    107 
    108   name   QOSDATA
    109 
    110 
    111 
    112   desc   Generic data for resource management is described by the following
    113   structure
    114 
    115   ============================================================================
    116 */
    117 struct QOSDATA {
    118 
    119 	ULONG Id;
    120 
    121 	struct QOSDATA *Next;
    122 
    123 	 ULONG(*TypeSpecific)(struct QOSDATA *DataObject, ULONG FunctionCode,
    124 			 											ULONG Parameter1);
    125 	 /* ptr to type-specific func. */
    126 
    127 	ULONG Size;		/* size of data plus this header */
    128 
    129 	char Data[];
    130 
    131 };
    132 
    133 //  ============================================================================
    134 
    135 //  name   QOSFNTYPESPECIFIC
    136 
    137 //
    138 
    139 //  desc   Pointer to type-specific function handler for the data object
    140 
    141 //  ============================================================================
    142 
    143 typedef ULONG(*QOSFNTYPESPECIFIC)(struct QOSDATA *DataObject,ULONG FunctionCode,
    144 															ULONG Parameter1);
    145 
    146 ULONG QOS_Memory_Scratch_FunctionHandler(struct QOSDATA *DataObject,
    147 										ULONG FunctionCode, ULONG Parameter1);
    148 
    149 ULONG QOS_Memory_DynAlloc_FunctionHandler(struct QOSDATA *DataObject,
    150 										ULONG FunctionCode, ULONG Parameter1);
    151 
    152 ULONG QOS_Memory_DynLoad_FunctionHandler(struct QOSDATA *DataObject,
    153 										ULONG FunctionCode, ULONG Parameter1);
    154 
    155 ULONG QOS_Processor_FunctionHandler(struct QOSDATA *DataObject,
    156 										ULONG FunctionCode, ULONG Parameter1);
    157 
    158 ULONG QOS_Resource_DefaultFunctionHandler(struct QOSDATA *DataObject,
    159 										  ULONG FunctionCode, ULONG Parameter1);
    160 
    161 ULONG QOS_Component_DefaultFunctionHandler(struct QOSDATA *DataObject,
    162 										ULONG FunctionCode, ULONG Parameter1);
    163 
    164 ULONG QOS_DynDependentLibrary_FunctionHandler(struct QOSDATA *DataObject,
    165 									      ULONG FunctionCode, ULONG Parameter1);
    166 
    167 ULONG QOS_Registry_FunctionHandler(struct QOSDATA *DataObject,
    168 										ULONG FunctionCode, ULONG Parameter1);
    169 
    170 /*  ============================================================================
    171 
    172   name   QOSREGISTRY
    173 
    174 
    175 
    176   desc   The QOSREGISTRY structure contains a list of all resources and
    177   components in the system
    178 
    179 
    180   ============================================================================
    181 */
    182 
    183 struct QOSREGISTRY {
    184 
    185 	struct QOSDATA data;
    186 
    187 	struct QOSDATA *ResourceRegistry;
    188 
    189 	struct QOSDATA *ComponentRegistry;
    190 
    191 };
    192 
    193 //  ============================================================================
    194 
    195 //  name   QOSRESOURCE_MEMORY
    196 
    197 //
    198 
    199 //  desc   System memory resources are characterized by the following structure
    200 
    201 //  ============================================================================
    202 
    203 struct QOSRESOURCE_MEMORY {
    204 
    205 	struct QOSDATA data;
    206 
    207 	UINT align;		/* alignment of memory heap */
    208 
    209 	UINT heapId;		/* resource heap ID */
    210 
    211 	UINT size;		/* size of memory heap */
    212 
    213 	UINT type;		/* type of memory: prefer/require/scratch/persist */
    214 
    215 	UINT allocated;		/* size of heap in use (not free) */
    216 
    217 	UINT largestfree;	/* size of largest contiguous free block */
    218 
    219 	UINT group;		/* scratch group ID (only for scratch memory) */
    220 
    221 };
    222 
    223 /*  ============================================================================
    224 
    225   name   QOSRESOURCE_PROCESSOR
    226 
    227 
    228 
    229   desc   Each processor is described by its processor type, hardware
    230   attributes, and available processing cycles (MIPS).
    231 
    232   ============================================================================*/
    233 
    234 struct QOSRESOURCE_PROCESSOR {
    235 
    236 	struct QOSDATA data;
    237 
    238 	UINT MaxMips;		/* max cpu cycles required for component */
    239 
    240 	UINT TypicalMips;	/* typical cpu cycles required */
    241 
    242 	UINT MaxCycles;		/* max cpu cycles for single iteration */
    243 
    244 	UINT TypicalCycles;	/* typical cpu cycles for single iteration */
    245 
    246 	UINT Utilization;	/* percentage of time cpu is idle */
    247 
    248 	UINT currentLoad;
    249 
    250 	UINT predLoad;
    251 
    252 	UINT currDspFreq;
    253 
    254 	UINT predictedFreq;
    255 
    256 
    257 } ;
    258 
    259 /*  ============================================================================
    260 
    261   name   QOSRESOURCE_STREAM
    262 
    263 
    264 
    265   desc   Bridge Streams are introduced as a QoS resource structure
    266 
    267   ============================================================================
    268 */
    269 
    270 struct QOSRESOURCE_STREAM {
    271 
    272 	struct QOSDATA data;
    273 
    274 	struct DSP_STRMATTR Attrs;	/* Stream attributes for this stream */
    275 
    276 	UINT Direction;		/* DSP_TONODE or DSP_FROMNODE */
    277 
    278 };
    279 
    280  struct QOSDYNDEPLIB {
    281 
    282 	struct QOSDATA data;
    283 
    284 	struct DSP_UUID depLibUuid;	/* UUID of Dynamic Dependent Library */
    285 
    286 	const CHAR *depLibPath;	/* Path to Dynamic Dependent Library */
    287 
    288 };
    289 
    290 /*  ============================================================================
    291 
    292   name   QOSCOMPONENT
    293 
    294 
    295 
    296   desc   Bridge Streams are introduced as a QoS resource structure
    297 
    298   ============================================================================
    299 */
    300 
    301 struct QOSCOMPONENT {
    302 
    303 	struct QOSDATA data;
    304 
    305 	UINT InUse;		/* Count of instances of this component in use */
    306 
    307 	UINT aTaskId;
    308 
    309 	UINT VariantID;
    310 
    311 	UINT InterfaceID;
    312 
    313 	struct DSP_UUID NodeUuid;
    314 
    315 	PVOID dynNodePath;
    316 
    317 	struct QOSDATA *resourceList;
    318 
    319 	struct QOSDYNDEPLIB *dynDepLibList;
    320 
    321 };
    322 
    323 /*  ============================================================================
    324 
    325   name   Registry-specific QOS_FN_xxx definitions
    326 
    327 
    328 
    329   desc   These are defines for the registry-specific function codes
    330 
    331   ============================================================================
    332  */
    333 
    334 #define QOS_FN_GetNumDynAllocMemHeaps 		1
    335 
    336 #define QOS_FN_HasAvailableResource			2
    337 
    338 /*  ============================================================================
    339 
    340   name   Resource-specific QOS_FN_xxx definitions
    341 
    342 
    343 
    344   desc   These are defines for the resource-specific function codes
    345 
    346   ============================================================================
    347 */
    348 
    349 #define QOS_FN_ResourceIsAvailable	1
    350 
    351 #define QOS_FN_ResourceUpdateInfo	2
    352 
    353 //  ============================================================================
    354 
    355 /*  name        DSPRegistry_Create
    356 
    357 
    358 
    359 	Implementation
    360 
    361 		Creates empty Registry, then adds all the default system resources
    362 
    363 	Parameters
    364 
    365 		none
    366 
    367 	Return
    368 
    369 		QOSREGISTRY*	ptr to new system registry
    370 
    371 		NULL			Failure (out of memory)
    372 
    373 	Requirement Coverage
    374 
    375 		This method addresses requirement(s):  SR10085
    376 
    377 */
    378 
    379 struct QOSREGISTRY *DSPRegistry_Create();
    380 
    381 /*  ============================================================================
    382 
    383   name        DSPRegistry_Delete
    384 
    385 
    386 
    387 	Implementation
    388 
    389 		Deletes Registry and cleans up QoS Gateway & Registry objects that it
    390 		owns.
    391 
    392 	Parameters
    393 
    394 		registry		ptr to previously created registry
    395 
    396 	Return
    397 
    398 		none
    399 
    400 	Requirement Coverage
    401 
    402 		This method addresses requirement(s):  SR10085
    403 
    404 */
    405 
    406 void DSPRegistry_Delete(struct QOSREGISTRY *registry);
    407 
    408 /*  ============================================================================
    409 
    410   name        DSPRegistry_Find
    411 
    412 
    413 
    414 	Implementation
    415 
    416 		Finds resource(s) or component(s) that match the given Id. For
    417 		resources, each matching
    418 
    419 		resource's TypeSpecific function is called with the function
    420 		ID QOS_FN_ResourceUpdateInfo to
    421 
    422 		ensure that all resources have current data in their structures.
    423 
    424 	Parameters
    425 
    426 		Id	requested Id
    427 
    428 		registry		system registry
    429 
    430 		ResultList		ptr to results array
    431 
    432 		Size			ptr to ULONG number of entries available in array
    433 
    434 	Return
    435 
    436 		DSP_OK			successful
    437 
    438 		DSP_ESIZE		block for results is too small
    439 
    440 		DSP_ENOTFOUND	item not found
    441 
    442 	Requirement Coverage
    443 
    444 		This method addresses requirement(s):  SR10008
    445 
    446 */
    447 
    448 DSP_STATUS DSPRegistry_Find(UINT Id, struct QOSREGISTRY *registry,
    449 									struct QOSDATA **ResultList, ULONG *Size);
    450 
    451 /*  ============================================================================
    452 
    453   name        DSPRegistry_Add
    454 
    455 
    456 
    457 	Implementation
    458 
    459 		Add given resource or component to the list
    460 
    461 	Parameters
    462 
    463 		listhead		system registry (in the case of adding resources or
    464 		components to the system)
    465 
    466 						or component (in the case of adding required resources
    467 						to a component)
    468 
    469 		entry			entry to add in list
    470 
    471 	Return
    472 
    473 		DSP_STATUS		Error code or DSP_SOK for success
    474 
    475 	Requirement Coverage
    476 
    477 		This method addresses requirement(s):  SR10085
    478 
    479 */
    480 
    481 DSP_STATUS DSPRegistry_Add(struct QOSDATA *listhead, struct QOSDATA *entry);
    482 
    483 /* ============================================================================
    484 
    485   name        DSPRegistry_Remove
    486 
    487 
    488 
    489 	Implementation
    490 
    491 		Removes given resource or component from the list
    492 
    493 	Parameters
    494 
    495 		listhead		system registry (in the case of removing resources or
    496 		components from the system)
    497 
    498 						or component (in the case of removing required
    499 						resources from a component)
    500 
    501 		entry			resource or component to remove
    502 
    503 	Return
    504 
    505 		DSP_STATUS	Error code or DSP_SOK for success
    506 
    507 	Requirement Coverage
    508 
    509 		This method addresses requirement(s):  SR10085
    510 
    511 */
    512 
    513 DSP_STATUS DSPRegistry_Remove(struct QOSDATA *listhead, struct QOSDATA *entry);
    514 
    515 /*  ============================================================================
    516 
    517   name        DSPQos_TypeSpecific
    518 
    519 
    520 
    521 	Implementation
    522 
    523 		Calls the type-specific function defined for this data type.
    524 		Internally, this is implemented
    525 
    526 		as a call to the QOSDATA structure's TypeSpecific() function.
    527 
    528 	Parameters
    529 
    530 		DataObject		Far pointer to the structure for the data object
    531 
    532 		FunctionCode	Type-specific function code
    533 
    534 		Parameter1		Function-specific parameter
    535 
    536 	Return
    537 
    538 		ULONG			Function-specific return code.
    539 
    540 	Requirement Coverage
    541 
    542 		This method addresses requirement(s):  SR10085, SR10008
    543 
    544 */
    545 
    546 ULONG DSPQos_TypeSpecific(struct QOSDATA *DataObject, ULONG FunctionCode,
    547 															ULONG Parameter1);
    548 
    549 /*  ============================================================================
    550 
    551   name        DSPComponent_Register
    552 
    553 
    554 
    555 	Implementation
    556 
    557 		Informs Registry that the given component is using system resources.
    558 		Internally, this
    559 
    560 		increments the InUse field of the QOSCOMPONENT structure.
    561 
    562 	Parameters
    563 
    564 		registry		system registry
    565 
    566 		comp			component using system resources
    567 
    568 	Return
    569 
    570 		DSP_STATUS		Error code or DSP_SOK for success
    571 
    572 	Requirement Coverage
    573 
    574 		This method addresses requirement(s):  SR10085
    575 
    576 */
    577 
    578 DSP_STATUS DSPComponent_Register(struct QOSREGISTRY *registry,
    579 													struct QOSCOMPONENT *comp);
    580 
    581 /*  ============================================================================
    582 
    583   name        DSPComponent_Unregister
    584 
    585 
    586 
    587 	Implementation
    588 
    589 		Informs Registry that component is no longer using system resources.
    590 		Internally, this
    591 
    592 		decrements the InUse field of the QOSCOMPONENT structure.
    593 
    594 	Parameters
    595 
    596 		registry		system registry
    597 
    598 		comp			component releasing system resources
    599 
    600 	Return
    601 
    602 		DSP_STATUS		Error code or DSP_SOK for success
    603 
    604 	Requirement Coverage
    605 
    606 		This method addresses requirement(s):  SR10085
    607 
    608 */
    609 
    610 DSP_STATUS DSPComponent_Unregister(struct QOSREGISTRY *registry,
    611 													struct QOSCOMPONENT *comp);
    612 
    613 /*  ============================================================================
    614 
    615   name        DSPData_Create
    616 
    617 
    618 
    619 	Implementation
    620 
    621 		Allocates and initializes a QOSDATA structure.
    622 
    623 	Parameters
    624 
    625 		id				type of data
    626 
    627 	Return
    628 
    629 		QOSDATA *		ptr to data structure or NULL for failure
    630 
    631 	Requirement Coverage
    632 
    633 		This method addresses requirement(s):
    634 
    635 */
    636 
    637 struct QOSDATA *DSPData_Create(ULONG id);
    638 
    639 /*  ============================================================================
    640 
    641   name        DSPData_Delete
    642 
    643 
    644 
    645 	Implementation
    646 
    647 		Deletes a QOSDATA structure, recursively deleting any associated lists.
    648 
    649 	Parameters
    650 
    651 		data			ptr to data structure to delete
    652 
    653 	Return
    654 
    655 		DSP_STATUS		Error code or DSP_SOK for success
    656 
    657 	Requirement Coverage
    658 
    659 		This method addresses requirement(s):
    660 
    661 */
    662 
    663 DSP_STATUS DSPData_Delete(struct QOSDATA *data);
    664 
    665 /*  ============================================================================
    666 
    667   name        DSPData_IsResource
    668 
    669 
    670 
    671 	Implementation
    672 
    673 		Determines whether a QOSDATA structure Id is a "resource" type ID.
    674 
    675 	Parameters
    676 
    677 		Id				type ID to check
    678 
    679 	Return
    680 
    681 		bool			TRUE for resources, FALSE otherwise.
    682 
    683 	Requirement Coverage
    684 
    685 		This method addresses requirement(s):
    686 
    687 */
    688 
    689 bool DSPData_IsResource(ULONG Id);
    690 
    691 #endif
    692 
    693