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
include
linux
enclosure.h
Go to the documentation of this file.
1
/*
2
* Enclosure Services
3
*
4
* Copyright (C) 2008 James Bottomley <
[email protected]
>
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_ */
Generated on Thu Jan 10 2013 14:51:22 for Linux Kernel by
1.8.2