Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
staging
tidspbridge
include
dspbridge
proc.h
Go to the documentation of this file.
1
/*
2
* proc.h
3
*
4
* DSP-BIOS Bridge driver support functions for TI OMAP processors.
5
*
6
* This is the DSP API RM module interface.
7
*
8
* Copyright (C) 2005-2006 Texas Instruments, Inc.
9
*
10
* This package is free software; you can redistribute it and/or modify
11
* it under the terms of the GNU General Public License version 2 as
12
* published by the Free Software Foundation.
13
*
14
* THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
15
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
16
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17
*/
18
19
#ifndef PROC_
20
#define PROC_
21
22
#include <
dspbridge/cfgdefs.h
>
23
#include <
dspbridge/devdefs.h
>
24
#include <
dspbridge/drv.h
>
25
26
extern
char
*
iva_img
;
27
28
/*
29
* ======== proc_attach ========
30
* Purpose:
31
* Prepare for communication with a particular DSP processor, and return
32
* a handle to the processor object. The PROC Object gets created
33
* Parameters:
34
* processor_id : The processor index (zero-based).
35
* hmgr_obj : Handle to the Manager Object
36
* attr_in : Ptr to the dsp_processorattrin structure.
37
* A NULL value means use default values.
38
* ph_processor : Ptr to location to store processor handle.
39
* Returns:
40
* 0 : Success.
41
* -EPERM : General failure.
42
* -EFAULT : Invalid processor handle.
43
* 0: Success; Processor already attached.
44
* Requires:
45
* ph_processor != NULL.
46
* PROC Initialized.
47
* Ensures:
48
* -EPERM, and *ph_processor == NULL, OR
49
* Success and *ph_processor is a Valid Processor handle OR
50
* 0 and *ph_processor is a Valid Processor.
51
* Details:
52
* When attr_in is NULL, the default timeout value is 10 seconds.
53
*/
54
extern
int
proc_attach
(
u32
processor_id
,
55
const
struct
dsp_processorattrin
56
*attr_in,
void
**ph_processor,
57
struct
process_context
*pr_ctxt);
58
59
/*
60
* ======== proc_auto_start =========
61
* Purpose:
62
* A Particular device gets loaded with the default image
63
* if the AutoStart flag is set.
64
* Parameters:
65
* hdev_obj : Handle to the Device
66
* Returns:
67
* 0 : On Successful Loading
68
* -ENOENT : No DSP exec file found.
69
* -EPERM : General Failure
70
* Requires:
71
* hdev_obj != NULL.
72
* dev_node_obj != NULL.
73
* PROC Initialized.
74
* Ensures:
75
*/
76
extern
int
proc_auto_start
(
struct
cfg_devnode *dev_node_obj,
77
struct
dev_object
*hdev_obj);
78
79
/*
80
* ======== proc_ctrl ========
81
* Purpose:
82
* Pass control information to the GPP device driver managing the DSP
83
* processor. This will be an OEM-only function, and not part of the
84
* 'Bridge application developer's API.
85
* Parameters:
86
* hprocessor : The processor handle.
87
* dw_cmd : Private driver IOCTL cmd ID.
88
* pargs : Ptr to an driver defined argument structure.
89
* Returns:
90
* 0 : SUCCESS
91
* -EFAULT : Invalid processor handle.
92
* -ETIME: A Timeout Occurred before the Control information
93
* could be sent.
94
* -EPERM : General Failure.
95
* Requires:
96
* PROC Initialized.
97
* Ensures
98
* Details:
99
* This function Calls bridge_dev_ctrl.
100
*/
101
extern
int
proc_ctrl
(
void
*hprocessor,
102
u32
dw_cmd,
struct
dsp_cbdata
*
arg
);
103
104
/*
105
* ======== proc_detach ========
106
* Purpose:
107
* Close a DSP processor and de-allocate all (GPP) resources reserved
108
* for it. The Processor Object is deleted.
109
* Parameters:
110
* pr_ctxt : The processor handle.
111
* Returns:
112
* 0 : Success.
113
* -EFAULT : InValid Handle.
114
* -EPERM : General failure.
115
* Requires:
116
* PROC Initialized.
117
* Ensures:
118
* PROC Object is destroyed.
119
*/
120
extern
int
proc_detach
(
struct
process_context
*pr_ctxt);
121
122
/*
123
* ======== proc_enum_nodes ========
124
* Purpose:
125
* Enumerate the nodes currently allocated on a processor.
126
* Parameters:
127
* hprocessor : The processor handle.
128
* node_tab : The first Location of an array allocated for node
129
* handles.
130
* node_tab_size: The number of (DSP_HNODE) handles that can be held
131
* to the memory the client has allocated for node_tab
132
* pu_num_nodes : Location where DSPProcessor_EnumNodes will return
133
* the number of valid handles written to node_tab
134
* pu_allocated : Location where DSPProcessor_EnumNodes will return
135
* the number of nodes that are allocated on the DSP.
136
* Returns:
137
* 0 : Success.
138
* -EFAULT : Invalid processor handle.
139
* -EINVAL : The amount of memory allocated for node_tab is
140
* insufficent. That is the number of nodes actually
141
* allocated on the DSP is greater than the value
142
* specified for node_tab_size.
143
* -EPERM : Unable to get Resource Information.
144
* Details:
145
* Requires
146
* pu_num_nodes is not NULL.
147
* pu_allocated is not NULL.
148
* node_tab is not NULL.
149
* PROC Initialized.
150
* Ensures:
151
* Details:
152
*/
153
extern
int
proc_enum_nodes
(
void
*hprocessor,
154
void
**node_tab,
155
u32
node_tab_size,
156
u32
*pu_num_nodes,
157
u32
*pu_allocated);
158
159
/*
160
* ======== proc_get_resource_info ========
161
* Purpose:
162
* Enumerate the resources currently available on a processor.
163
* Parameters:
164
* hprocessor : The processor handle.
165
* resource_type: Type of resource .
166
* resource_info: Ptr to the dsp_resourceinfo structure.
167
* resource_info_size: Size of the structure.
168
* Returns:
169
* 0 : Success.
170
* -EFAULT : Invalid processor handle.
171
* -EBADR: The processor is not in the PROC_RUNNING state.
172
* -ETIME: A timeout occurred before the DSP responded to the
173
* querry.
174
* -EPERM : Unable to get Resource Information
175
* Requires:
176
* resource_info is not NULL.
177
* Parameter resource_type is Valid.[TBD]
178
* resource_info_size is >= sizeof dsp_resourceinfo struct.
179
* PROC Initialized.
180
* Ensures:
181
* Details:
182
* This function currently returns
183
* -ENOSYS, and does not write any data to the resource_info struct.
184
*/
185
extern
int
proc_get_resource_info
(
void
*hprocessor,
186
u32
resource_type
,
187
struct
dsp_resourceinfo
188
*resource_info,
189
u32
resource_info_size);
190
191
/*
192
* ======== proc_get_dev_object =========
193
* Purpose:
194
* Returns the DEV Hanlde for a given Processor handle
195
* Parameters:
196
* hprocessor : Processor Handle
197
* device_obj : Location to store the DEV Handle.
198
* Returns:
199
* 0 : Success; *device_obj has Dev handle
200
* -EPERM : Failure; *device_obj is zero.
201
* Requires:
202
* device_obj is not NULL
203
* PROC Initialized.
204
* Ensures:
205
* 0 : *device_obj is not NULL
206
* -EPERM : *device_obj is NULL.
207
*/
208
extern
int
proc_get_dev_object
(
void
*hprocessor,
209
struct
dev_object
**device_obj);
210
211
/*
212
* ======== proc_get_state ========
213
* Purpose:
214
* Report the state of the specified DSP processor.
215
* Parameters:
216
* hprocessor : The processor handle.
217
* proc_state_obj : Ptr to location to store the dsp_processorstate
218
* structure.
219
* state_info_size: Size of dsp_processorstate.
220
* Returns:
221
* 0 : Success.
222
* -EFAULT : Invalid processor handle.
223
* -EPERM : General failure while querying processor state.
224
* Requires:
225
* proc_state_obj is not NULL
226
* state_info_size is >= than the size of dsp_processorstate structure.
227
* PROC Initialized.
228
* Ensures:
229
* Details:
230
*/
231
extern
int
proc_get_state
(
void
*hprocessor,
struct
dsp_processorstate
232
*proc_state_obj,
u32
state_info_size);
233
234
/*
235
* ======== PROC_GetProcessorID ========
236
* Purpose:
237
* Report the state of the specified DSP processor.
238
* Parameters:
239
* hprocessor : The processor handle.
240
* proc_id : Processor ID
241
*
242
* Returns:
243
* 0 : Success.
244
* -EFAULT : Invalid processor handle.
245
* -EPERM : General failure while querying processor state.
246
* Requires:
247
* proc_state_obj is not NULL
248
* state_info_size is >= than the size of dsp_processorstate structure.
249
* PROC Initialized.
250
* Ensures:
251
* Details:
252
*/
253
extern
int
proc_get_processor_id
(
void
*proc,
u32
*
proc_id
);
254
255
/*
256
* ======== proc_get_trace ========
257
* Purpose:
258
* Retrieve the trace buffer from the specified DSP processor.
259
* Parameters:
260
* hprocessor : The processor handle.
261
* pbuf : Ptr to buffer to hold trace output.
262
* max_size : Maximum size of the output buffer.
263
* Returns:
264
* 0 : Success.
265
* -EFAULT : Invalid processor handle.
266
* -EPERM : General failure while retrieving processor trace
267
* Buffer.
268
* Requires:
269
* pbuf is not NULL
270
* max_size is > 0.
271
* PROC Initialized.
272
* Ensures:
273
* Details:
274
*/
275
extern
int
proc_get_trace
(
void
*hprocessor,
u8
* pbuf,
u32
max_size
);
276
277
/*
278
* ======== proc_load ========
279
* Purpose:
280
* Reset a processor and load a new base program image.
281
* This will be an OEM-only function.
282
* Parameters:
283
* hprocessor: The processor handle.
284
* argc_index: The number of Arguments(strings)in the aArgV[]
285
* user_args: An Array of Arguments(Unicode Strings)
286
* user_envp: An Array of Environment settings(Unicode Strings)
287
* Returns:
288
* 0: Success.
289
* -ENOENT: The DSP Execuetable was not found.
290
* -EFAULT: Invalid processor handle.
291
* -EPERM : Unable to Load the Processor
292
* Requires:
293
* user_args is not NULL
294
* argc_index is > 0
295
* PROC Initialized.
296
* Ensures:
297
* Success and ProcState == PROC_LOADED
298
* or DSP_FAILED status.
299
* Details:
300
* Does not implement access rights to control which GPP application
301
* can load the processor.
302
*/
303
extern
int
proc_load
(
void
*hprocessor,
304
const
s32
argc_index,
const
char
**user_args,
305
const
char
**user_envp);
306
307
/*
308
* ======== proc_register_notify ========
309
* Purpose:
310
* Register to be notified of specific processor events
311
* Parameters:
312
* hprocessor : The processor handle.
313
* event_mask : Mask of types of events to be notified about.
314
* notify_type : Type of notification to be sent.
315
* hnotification: Handle to be used for notification.
316
* Returns:
317
* 0 : Success.
318
* -EFAULT : Invalid processor handle or hnotification.
319
* -EINVAL : Parameter event_mask is Invalid
320
* DSP_ENOTIMP : The notification type specified in uNotifyMask
321
* is not supported.
322
* -EPERM : Unable to register for notification.
323
* Requires:
324
* hnotification is not NULL
325
* PROC Initialized.
326
* Ensures:
327
* Details:
328
*/
329
extern
int
proc_register_notify
(
void
*hprocessor,
330
u32
event_mask,
u32
notify_type
,
331
struct
dsp_notification
332
*hnotification);
333
334
/*
335
* ======== proc_notify_clients ========
336
* Purpose:
337
* Notify the Processor Clients
338
* Parameters:
339
* proc : The processor handle.
340
* events : Event to be notified about.
341
* Returns:
342
* 0 : Success.
343
* -EFAULT : Invalid processor handle.
344
* -EPERM : Failure to Set or Reset the Event
345
* Requires:
346
* events is Supported or Valid type of Event
347
* proc is a valid handle
348
* PROC Initialized.
349
* Ensures:
350
*/
351
extern
int
proc_notify_clients
(
void
*proc,
u32
events
);
352
353
/*
354
* ======== proc_notify_all_clients ========
355
* Purpose:
356
* Notify the Processor Clients
357
* Parameters:
358
* proc : The processor handle.
359
* events : Event to be notified about.
360
* Returns:
361
* 0 : Success.
362
* -EFAULT : Invalid processor handle.
363
* -EPERM : Failure to Set or Reset the Event
364
* Requires:
365
* events is Supported or Valid type of Event
366
* proc is a valid handle
367
* PROC Initialized.
368
* Ensures:
369
* Details:
370
* NODE And STRM would use this function to notify their clients
371
* about the state changes in NODE or STRM.
372
*/
373
extern
int
proc_notify_all_clients
(
void
*proc,
u32
events
);
374
375
/*
376
* ======== proc_start ========
377
* Purpose:
378
* Start a processor running.
379
* Processor must be in PROC_LOADED state.
380
* This will be an OEM-only function, and not part of the 'Bridge
381
* application developer's API.
382
* Parameters:
383
* hprocessor : The processor handle.
384
* Returns:
385
* 0 : Success.
386
* -EFAULT : Invalid processor handle.
387
* -EBADR: Processor is not in PROC_LOADED state.
388
* -EPERM : Unable to start the processor.
389
* Requires:
390
* PROC Initialized.
391
* Ensures:
392
* Success and ProcState == PROC_RUNNING or DSP_FAILED status.
393
* Details:
394
*/
395
extern
int
proc_start
(
void
*hprocessor);
396
397
/*
398
* ======== proc_stop ========
399
* Purpose:
400
* Start a processor running.
401
* Processor must be in PROC_LOADED state.
402
* This will be an OEM-only function, and not part of the 'Bridge
403
* application developer's API.
404
* Parameters:
405
* hprocessor : The processor handle.
406
* Returns:
407
* 0 : Success.
408
* -EFAULT : Invalid processor handle.
409
* -EBADR: Processor is not in PROC_LOADED state.
410
* -EPERM : Unable to start the processor.
411
* Requires:
412
* PROC Initialized.
413
* Ensures:
414
* Success and ProcState == PROC_RUNNING or DSP_FAILED status.
415
* Details:
416
*/
417
extern
int
proc_stop
(
void
*hprocessor);
418
419
/*
420
* ======== proc_end_dma ========
421
* Purpose:
422
* Begin a DMA transfer
423
* Parameters:
424
* hprocessor : The processor handle.
425
* pmpu_addr : Buffer start address
426
* ul_size : Buffer size
427
* dir : The direction of the transfer
428
* Requires:
429
* Memory was previously mapped.
430
*/
431
extern
int
proc_end_dma
(
void
*hprocessor,
void
*pmpu_addr,
u32
ul_size,
432
enum
dma_data_direction
dir);
433
/*
434
* ======== proc_begin_dma ========
435
* Purpose:
436
* Begin a DMA transfer
437
* Parameters:
438
* hprocessor : The processor handle.
439
* pmpu_addr : Buffer start address
440
* ul_size : Buffer size
441
* dir : The direction of the transfer
442
* Requires:
443
* Memory was previously mapped.
444
*/
445
extern
int
proc_begin_dma
(
void
*hprocessor,
void
*pmpu_addr,
u32
ul_size,
446
enum
dma_data_direction
dir);
447
448
/*
449
* ======== proc_flush_memory ========
450
* Purpose:
451
* Flushes a buffer from the MPU data cache.
452
* Parameters:
453
* hprocessor : The processor handle.
454
* pmpu_addr : Buffer start address
455
* ul_size : Buffer size
456
* ul_flags : Reserved.
457
* Returns:
458
* 0 : Success.
459
* -EFAULT : Invalid processor handle.
460
* -EPERM : General failure.
461
* Requires:
462
* PROC Initialized.
463
* Ensures:
464
* Details:
465
* All the arguments are currently ignored.
466
*/
467
extern
int
proc_flush_memory
(
void
*hprocessor,
468
void
*pmpu_addr,
u32
ul_size,
u32
ul_flags);
469
470
/*
471
* ======== proc_invalidate_memory ========
472
* Purpose:
473
* Invalidates a buffer from the MPU data cache.
474
* Parameters:
475
* hprocessor : The processor handle.
476
* pmpu_addr : Buffer start address
477
* ul_size : Buffer size
478
* Returns:
479
* 0 : Success.
480
* -EFAULT : Invalid processor handle.
481
* -EPERM : General failure.
482
* Requires:
483
* PROC Initialized.
484
* Ensures:
485
* Details:
486
* All the arguments are currently ignored.
487
*/
488
extern
int
proc_invalidate_memory
(
void
*hprocessor,
489
void
*pmpu_addr,
u32
ul_size);
490
491
/*
492
* ======== proc_map ========
493
* Purpose:
494
* Maps a MPU buffer to DSP address space.
495
* Parameters:
496
* hprocessor : The processor handle.
497
* pmpu_addr : Starting address of the memory region to map.
498
* ul_size : Size of the memory region to map.
499
* req_addr : Requested DSP start address. Offset-adjusted actual
500
* mapped address is in the last argument.
501
* pp_map_addr : Ptr to DSP side mapped u8 address.
502
* ul_map_attr : Optional endianness attributes, virt to phys flag.
503
* Returns:
504
* 0 : Success.
505
* -EFAULT : Invalid processor handle.
506
* -EPERM : General failure.
507
* -ENOMEM : MPU side memory allocation error.
508
* -ENOENT : Cannot find a reserved region starting with this
509
* : address.
510
* Requires:
511
* pmpu_addr is not NULL
512
* ul_size is not zero
513
* pp_map_addr is not NULL
514
* PROC Initialized.
515
* Ensures:
516
* Details:
517
*/
518
extern
int
proc_map
(
void
*hprocessor,
519
void
*pmpu_addr,
520
u32
ul_size,
521
void
*req_addr,
522
void
**pp_map_addr,
u32
ul_map_attr,
523
struct
process_context
*pr_ctxt);
524
525
/*
526
* ======== proc_reserve_memory ========
527
* Purpose:
528
* Reserve a virtually contiguous region of DSP address space.
529
* Parameters:
530
* hprocessor : The processor handle.
531
* ul_size : Size of the address space to reserve.
532
* pp_rsv_addr : Ptr to DSP side reserved u8 address.
533
* Returns:
534
* 0 : Success.
535
* -EFAULT : Invalid processor handle.
536
* -EPERM : General failure.
537
* -ENOMEM : Cannot reserve chunk of this size.
538
* Requires:
539
* pp_rsv_addr is not NULL
540
* PROC Initialized.
541
* Ensures:
542
* Details:
543
*/
544
extern
int
proc_reserve_memory
(
void
*hprocessor,
545
u32
ul_size,
void
**pp_rsv_addr,
546
struct
process_context
*pr_ctxt);
547
548
/*
549
* ======== proc_un_map ========
550
* Purpose:
551
* Removes a MPU buffer mapping from the DSP address space.
552
* Parameters:
553
* hprocessor : The processor handle.
554
* map_addr : Starting address of the mapped memory region.
555
* Returns:
556
* 0 : Success.
557
* -EFAULT : Invalid processor handle.
558
* -EPERM : General failure.
559
* -ENOENT : Cannot find a mapped region starting with this
560
* : address.
561
* Requires:
562
* map_addr is not NULL
563
* PROC Initialized.
564
* Ensures:
565
* Details:
566
*/
567
extern
int
proc_un_map
(
void
*hprocessor,
void
*map_addr,
568
struct
process_context
*pr_ctxt);
569
570
/*
571
* ======== proc_un_reserve_memory ========
572
* Purpose:
573
* Frees a previously reserved region of DSP address space.
574
* Parameters:
575
* hprocessor : The processor handle.
576
* prsv_addr : Ptr to DSP side reservedBYTE address.
577
* Returns:
578
* 0 : Success.
579
* -EFAULT : Invalid processor handle.
580
* -EPERM : General failure.
581
* -ENOENT : Cannot find a reserved region starting with this
582
* : address.
583
* Requires:
584
* prsv_addr is not NULL
585
* PROC Initialized.
586
* Ensures:
587
* Details:
588
*/
589
extern
int
proc_un_reserve_memory
(
void
*hprocessor,
590
void
*prsv_addr,
591
struct
process_context
*pr_ctxt);
592
593
#endif
/* PROC_ */
Generated on Thu Jan 10 2013 13:12:34 for Linux Kernel by
1.8.2