Root/
1 | /* |
2 | * Enclosure Services |
3 | * |
4 | * Copyright (C) 2008 James Bottomley <James.Bottomley@HansenPartnership.com> |
5 | * |
6 | **----------------------------------------------------------------------------- |
7 | ** |
8 | ** This program is free software; you can redistribute it and/or |
9 | ** modify it under the terms of the GNU General Public License |
10 | ** version 2 as published by the Free Software Foundation. |
11 | ** |
12 | ** This program is distributed in the hope that it will be useful, |
13 | ** but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
15 | ** GNU General Public License for more details. |
16 | ** |
17 | ** You should have received a copy of the GNU General Public License |
18 | ** along with this program; if not, write to the Free Software |
19 | ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
20 | ** |
21 | **----------------------------------------------------------------------------- |
22 | */ |
23 | #ifndef _LINUX_ENCLOSURE_H_ |
24 | #define _LINUX_ENCLOSURE_H_ |
25 | |
26 | #include <linux/device.h> |
27 | #include <linux/list.h> |
28 | |
29 | /* A few generic types ... taken from ses-2 */ |
30 | enum enclosure_component_type { |
31 | ENCLOSURE_COMPONENT_DEVICE = 0x01, |
32 | ENCLOSURE_COMPONENT_ARRAY_DEVICE = 0x17, |
33 | }; |
34 | |
35 | /* ses-2 common element status */ |
36 | enum enclosure_status { |
37 | ENCLOSURE_STATUS_UNSUPPORTED = 0, |
38 | ENCLOSURE_STATUS_OK, |
39 | ENCLOSURE_STATUS_CRITICAL, |
40 | ENCLOSURE_STATUS_NON_CRITICAL, |
41 | ENCLOSURE_STATUS_UNRECOVERABLE, |
42 | ENCLOSURE_STATUS_NOT_INSTALLED, |
43 | ENCLOSURE_STATUS_UNKNOWN, |
44 | ENCLOSURE_STATUS_UNAVAILABLE, |
45 | /* last element for counting purposes */ |
46 | ENCLOSURE_STATUS_MAX |
47 | }; |
48 | |
49 | /* SFF-8485 activity light settings */ |
50 | enum enclosure_component_setting { |
51 | ENCLOSURE_SETTING_DISABLED = 0, |
52 | ENCLOSURE_SETTING_ENABLED = 1, |
53 | ENCLOSURE_SETTING_BLINK_A_ON_OFF = 2, |
54 | ENCLOSURE_SETTING_BLINK_A_OFF_ON = 3, |
55 | ENCLOSURE_SETTING_BLINK_B_ON_OFF = 6, |
56 | ENCLOSURE_SETTING_BLINK_B_OFF_ON = 7, |
57 | }; |
58 | |
59 | struct enclosure_device; |
60 | struct enclosure_component; |
61 | struct enclosure_component_callbacks { |
62 | void (*get_status)(struct enclosure_device *, |
63 | struct enclosure_component *); |
64 | int (*set_status)(struct enclosure_device *, |
65 | struct enclosure_component *, |
66 | enum enclosure_status); |
67 | void (*get_fault)(struct enclosure_device *, |
68 | struct enclosure_component *); |
69 | int (*set_fault)(struct enclosure_device *, |
70 | struct enclosure_component *, |
71 | enum enclosure_component_setting); |
72 | void (*get_active)(struct enclosure_device *, |
73 | struct enclosure_component *); |
74 | int (*set_active)(struct enclosure_device *, |
75 | struct enclosure_component *, |
76 | enum enclosure_component_setting); |
77 | void (*get_locate)(struct enclosure_device *, |
78 | struct enclosure_component *); |
79 | int (*set_locate)(struct enclosure_device *, |
80 | struct enclosure_component *, |
81 | enum enclosure_component_setting); |
82 | }; |
83 | |
84 | |
85 | struct enclosure_component { |
86 | void *scratch; |
87 | struct device cdev; |
88 | struct device *dev; |
89 | enum enclosure_component_type type; |
90 | int number; |
91 | int fault; |
92 | int active; |
93 | int locate; |
94 | enum enclosure_status status; |
95 | }; |
96 | |
97 | struct enclosure_device { |
98 | void *scratch; |
99 | struct list_head node; |
100 | struct device edev; |
101 | struct enclosure_component_callbacks *cb; |
102 | int components; |
103 | struct enclosure_component component[0]; |
104 | }; |
105 | |
106 | static inline struct enclosure_device * |
107 | to_enclosure_device(struct device *dev) |
108 | { |
109 | return container_of(dev, struct enclosure_device, edev); |
110 | } |
111 | |
112 | static inline struct enclosure_component * |
113 | to_enclosure_component(struct device *dev) |
114 | { |
115 | return container_of(dev, struct enclosure_component, cdev); |
116 | } |
117 | |
118 | struct enclosure_device * |
119 | enclosure_register(struct device *, const char *, int, |
120 | struct enclosure_component_callbacks *); |
121 | void enclosure_unregister(struct enclosure_device *); |
122 | struct enclosure_component * |
123 | enclosure_component_register(struct enclosure_device *, unsigned int, |
124 | enum enclosure_component_type, const char *); |
125 | int enclosure_add_device(struct enclosure_device *enclosure, int component, |
126 | struct device *dev); |
127 | int enclosure_remove_device(struct enclosure_device *, struct device *); |
128 | struct enclosure_device *enclosure_find(struct device *dev, |
129 | struct enclosure_device *start); |
130 | int enclosure_for_each_device(int (*fn)(struct enclosure_device *, void *), |
131 | void *data); |
132 | |
133 | #endif /* _LINUX_ENCLOSURE_H_ */ |
134 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9