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
41enum 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
80typedef 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*/
117struct 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
143typedef ULONG(*QOSFNTYPESPECIFIC)(struct QOSDATA *DataObject,ULONG FunctionCode,
144															ULONG Parameter1);
145
146ULONG QOS_Memory_Scratch_FunctionHandler(struct QOSDATA *DataObject,
147										ULONG FunctionCode, ULONG Parameter1);
148
149ULONG QOS_Memory_DynAlloc_FunctionHandler(struct QOSDATA *DataObject,
150										ULONG FunctionCode, ULONG Parameter1);
151
152ULONG QOS_Memory_DynLoad_FunctionHandler(struct QOSDATA *DataObject,
153										ULONG FunctionCode, ULONG Parameter1);
154
155ULONG QOS_Processor_FunctionHandler(struct QOSDATA *DataObject,
156										ULONG FunctionCode, ULONG Parameter1);
157
158ULONG QOS_Resource_DefaultFunctionHandler(struct QOSDATA *DataObject,
159										  ULONG FunctionCode, ULONG Parameter1);
160
161ULONG QOS_Component_DefaultFunctionHandler(struct QOSDATA *DataObject,
162										ULONG FunctionCode, ULONG Parameter1);
163
164ULONG QOS_DynDependentLibrary_FunctionHandler(struct QOSDATA *DataObject,
165									      ULONG FunctionCode, ULONG Parameter1);
166
167ULONG 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
183struct 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
203struct 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
234struct 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
270struct 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
301struct 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
379struct 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
406void 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
448DSP_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
481DSP_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
513DSP_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
546ULONG 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
578DSP_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
610DSP_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
637struct 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
663DSP_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
689bool DSPData_IsResource(ULONG Id);
690
691#endif
692
693