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
sound
pci
ctxfi
cthardware.c
Go to the documentation of this file.
1
18
#include "
cthardware.h
"
19
#include "
cthw20k1.h
"
20
#include "
cthw20k2.h
"
21
#include <
linux/bug.h
>
22
23
int
__devinit
create_hw_obj
(
struct
pci_dev
*pci,
enum
CHIPTYP
chip_type
,
24
enum
CTCARDS
model,
struct
hw
**rhw)
25
{
26
int
err
;
27
28
switch
(chip_type) {
29
case
ATC20K1
:
30
err =
create_20k1_hw_obj
(rhw);
31
break
;
32
case
ATC20K2
:
33
err =
create_20k2_hw_obj
(rhw);
34
break
;
35
default
:
36
err = -
ENODEV
;
37
break
;
38
}
39
if
(err)
40
return
err
;
41
42
(*rhw)->pci = pci;
43
(*rhw)->chip_type =
chip_type
;
44
(*rhw)->model = model;
45
46
return
0;
47
}
48
49
int
destroy_hw_obj
(
struct
hw
*
hw
)
50
{
51
int
err
;
52
53
switch
(hw->
pci
->device) {
54
case
0x0005:
/* 20k1 device */
55
err =
destroy_20k1_hw_obj
(hw);
56
break
;
57
case
0x000B:
/* 20k2 device */
58
err =
destroy_20k2_hw_obj
(hw);
59
break
;
60
default
:
61
err = -
ENODEV
;
62
break
;
63
}
64
65
return
err
;
66
}
67
68
unsigned
int
get_field
(
unsigned
int
data
,
unsigned
int
field
)
69
{
70
int
i
;
71
72
BUG_ON
(!field);
73
/* @field should always be greater than 0 */
74
for
(i = 0; !(field & (1 <<
i
)); )
75
i++;
76
77
return
(data & field) >>
i
;
78
}
79
80
void
set_field
(
unsigned
int
*
data
,
unsigned
int
field
,
unsigned
int
value
)
81
{
82
int
i
;
83
84
BUG_ON
(!field);
85
/* @field should always be greater than 0 */
86
for
(i = 0; !(field & (1 <<
i
)); )
87
i++;
88
89
*data = (*data & (~field)) | ((value <<
i
) & field);
90
}
91
Generated on Thu Jan 10 2013 15:06:02 for Linux Kernel by
1.8.2