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