This source file includes following definitions.
- create_hw_obj
- destroy_hw_obj
- get_field
- set_field
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include "cthardware.h"
15 #include "cthw20k1.h"
16 #include "cthw20k2.h"
17 #include <linux/bug.h>
18
19 int create_hw_obj(struct pci_dev *pci, enum CHIPTYP chip_type,
20 enum CTCARDS model, struct hw **rhw)
21 {
22 int err;
23
24 switch (chip_type) {
25 case ATC20K1:
26 err = create_20k1_hw_obj(rhw);
27 break;
28 case ATC20K2:
29 err = create_20k2_hw_obj(rhw);
30 break;
31 default:
32 err = -ENODEV;
33 break;
34 }
35 if (err)
36 return err;
37
38 (*rhw)->pci = pci;
39 (*rhw)->chip_type = chip_type;
40 (*rhw)->model = model;
41
42 return 0;
43 }
44
45 int destroy_hw_obj(struct hw *hw)
46 {
47 int err;
48
49 switch (hw->pci->device) {
50 case 0x0005:
51 err = destroy_20k1_hw_obj(hw);
52 break;
53 case 0x000B:
54 err = destroy_20k2_hw_obj(hw);
55 break;
56 default:
57 err = -ENODEV;
58 break;
59 }
60
61 return err;
62 }
63
64 unsigned int get_field(unsigned int data, unsigned int field)
65 {
66 int i;
67
68 if (WARN_ON(!field))
69 return 0;
70
71 for (i = 0; !(field & (1 << i)); )
72 i++;
73
74 return (data & field) >> i;
75 }
76
77 void set_field(unsigned int *data, unsigned int field, unsigned int value)
78 {
79 int i;
80
81 if (WARN_ON(!field))
82 return;
83
84 for (i = 0; !(field & (1 << i)); )
85 i++;
86
87 *data = (*data & (~field)) | ((value << i) & field);
88 }
89