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
pmgr
chnl.c
Go to the documentation of this file.
1
/*
2
* chnl.c
3
*
4
* DSP-BIOS Bridge driver support functions for TI OMAP processors.
5
*
6
* DSP API channel interface: multiplexes data streams through the single
7
* physical link managed by a Bridge Bridge driver.
8
*
9
* Copyright (C) 2005-2006 Texas Instruments, Inc.
10
*
11
* This package is free software; you can redistribute it and/or modify
12
* it under the terms of the GNU General Public License version 2 as
13
* published by the Free Software Foundation.
14
*
15
* THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
16
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
17
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18
*/
19
20
#include <linux/types.h>
21
/* ----------------------------------- Host OS */
22
#include <
dspbridge/host_os.h
>
23
24
/* ----------------------------------- DSP/BIOS Bridge */
25
#include <
dspbridge/dbdefs.h
>
26
27
/* ----------------------------------- OS Adaptation Layer */
28
#include <
dspbridge/sync.h
>
29
30
/* ----------------------------------- Platform Manager */
31
#include <
dspbridge/proc.h
>
32
#include <
dspbridge/dev.h
>
33
34
/* ----------------------------------- Others */
35
#include <
dspbridge/chnlpriv.h
>
36
#include <
chnlobj.h
>
37
38
/* ----------------------------------- This */
39
#include <
dspbridge/chnl.h
>
40
41
/*
42
* ======== chnl_create ========
43
* Purpose:
44
* Create a channel manager object, responsible for opening new channels
45
* and closing old ones for a given 'Bridge board.
46
*/
47
int
chnl_create
(
struct
chnl_mgr
**channel_mgr,
48
struct
dev_object
*hdev_obj,
49
const
struct
chnl_mgrattrs
*mgr_attrts)
50
{
51
int
status
;
52
struct
chnl_mgr
*hchnl_mgr;
53
struct
chnl_mgr_
*chnl_mgr_obj =
NULL
;
54
55
*channel_mgr =
NULL
;
56
57
/* Validate args: */
58
if
((0 < mgr_attrts->
max_channels
) &&
59
(mgr_attrts->
max_channels
<=
CHNL_MAXCHANNELS
))
60
status = 0;
61
else
if
(mgr_attrts->
max_channels
== 0)
62
status = -
EINVAL
;
63
else
64
status = -
ECHRNG
;
65
66
if
(mgr_attrts->
word_size
== 0)
67
status = -
EINVAL
;
68
69
if
(!status) {
70
status =
dev_get_chnl_mgr
(hdev_obj, &hchnl_mgr);
71
if
(!status && hchnl_mgr !=
NULL
)
72
status = -
EEXIST
;
73
74
}
75
76
if
(!status) {
77
struct
bridge_drv_interface
*intf_fxns;
78
dev_get_intf_fxns
(hdev_obj, &intf_fxns);
79
/* Let Bridge channel module finish the create: */
80
status = (*intf_fxns->
chnl_create
) (&hchnl_mgr, hdev_obj,
81
mgr_attrts);
82
if
(!status) {
83
/* Fill in DSP API channel module's fields of the
84
* chnl_mgr structure */
85
chnl_mgr_obj = (
struct
chnl_mgr_
*)hchnl_mgr;
86
chnl_mgr_obj->
intf_fxns
=
intf_fxns
;
87
/* Finally, return the new channel manager handle: */
88
*channel_mgr = hchnl_mgr;
89
}
90
}
91
92
return
status
;
93
}
94
95
/*
96
* ======== chnl_destroy ========
97
* Purpose:
98
* Close all open channels, and destroy the channel manager.
99
*/
100
int
chnl_destroy
(
struct
chnl_mgr
*hchnl_mgr)
101
{
102
struct
chnl_mgr_
*chnl_mgr_obj = (
struct
chnl_mgr_
*)hchnl_mgr;
103
struct
bridge_drv_interface
*intf_fxns;
104
int
status
;
105
106
if
(chnl_mgr_obj) {
107
intf_fxns = chnl_mgr_obj->
intf_fxns
;
108
/* Let Bridge channel module destroy the chnl_mgr: */
109
status = (*intf_fxns->
chnl_destroy
) (hchnl_mgr);
110
}
else
{
111
status = -
EFAULT
;
112
}
113
114
return
status
;
115
}
Generated on Thu Jan 10 2013 14:32:05 for Linux Kernel by
1.8.2