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 <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_ */
Generated on Thu Jan 10 2013 14:51:22 for Linux Kernel by
1.8.2