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
drivers
char
ipmi
ipmi_si_sm.h
Go to the documentation of this file.
1
/*
2
* ipmi_si_sm.h
3
*
4
* State machine interface for low-level IPMI system management
5
* interface state machines. This code is the interface between
6
* the ipmi_smi code (that handles the policy of a KCS, SMIC, or
7
* BT interface) and the actual low-level state machine.
8
*
9
* Author: MontaVista Software, Inc.
10
* Corey Minyard <
[email protected]
>
11
*
[email protected]
12
*
13
* Copyright 2002 MontaVista Software Inc.
14
*
15
* This program is free software; you can redistribute it and/or modify it
16
* under the terms of the GNU General Public License as published by the
17
* Free Software Foundation; either version 2 of the License, or (at your
18
* option) any later version.
19
*
20
*
21
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
22
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
23
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
27
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
28
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
29
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
30
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
*
32
* You should have received a copy of the GNU General Public License along
33
* with this program; if not, write to the Free Software Foundation, Inc.,
34
* 675 Mass Ave, Cambridge, MA 02139, USA.
35
*/
36
37
/*
38
* This is defined by the state machines themselves, it is an opaque
39
* data type for them to use.
40
*/
41
struct
si_sm_data
;
42
43
/*
44
* The structure for doing I/O in the state machine. The state
45
* machine doesn't have the actual I/O routines, they are done through
46
* this interface.
47
*/
48
struct
si_sm_io
{
49
unsigned
char
(*
inputb
)(
struct
si_sm_io
*
io
,
unsigned
int
offset
);
50
void
(*
outputb
)(
struct
si_sm_io
*
io
,
51
unsigned
int
offset
,
52
unsigned
char
b
);
53
54
/*
55
* Generic info used by the actual handling routines, the
56
* state machine shouldn't touch these.
57
*/
58
void
__iomem
*
addr
;
59
int
regspacing
;
60
int
regsize
;
61
int
regshift
;
62
int
addr_type
;
63
long
addr_data
;
64
};
65
66
/* Results of SMI events. */
67
enum
si_sm_result
{
68
SI_SM_CALL_WITHOUT_DELAY
,
/* Call the driver again immediately */
69
SI_SM_CALL_WITH_DELAY
,
/* Delay some before calling again. */
70
SI_SM_CALL_WITH_TICK_DELAY
,
/* Delay >=1 tick before calling again. */
71
SI_SM_TRANSACTION_COMPLETE
,
/* A transaction is finished. */
72
SI_SM_IDLE
,
/* The SM is in idle state. */
73
SI_SM_HOSED
,
/* The hardware violated the state machine. */
74
75
/*
76
* The hardware is asserting attn and the state machine is
77
* idle.
78
*/
79
SI_SM_ATTN
80
};
81
82
/* Handlers for the SMI state machine. */
83
struct
si_sm_handlers
{
84
/*
85
* Put the version number of the state machine here so the
86
* upper layer can print it.
87
*/
88
char
*
version
;
89
90
/*
91
* Initialize the data and return the amount of I/O space to
92
* reserve for the space.
93
*/
94
unsigned
int
(*
init_data
)(
struct
si_sm_data
*smi,
95
struct
si_sm_io
*
io
);
96
97
/*
98
* Start a new transaction in the state machine. This will
99
* return -2 if the state machine is not idle, -1 if the size
100
* is invalid (to large or too small), or 0 if the transaction
101
* is successfully completed.
102
*/
103
int
(*
start_transaction
)(
struct
si_sm_data
*smi,
104
unsigned
char
*
data
,
unsigned
int
size
);
105
106
/*
107
* Return the results after the transaction. This will return
108
* -1 if the buffer is too small, zero if no transaction is
109
* present, or the actual length of the result data.
110
*/
111
int
(*
get_result
)(
struct
si_sm_data
*smi,
112
unsigned
char
*
data
,
unsigned
int
length
);
113
114
/*
115
* Call this periodically (for a polled interface) or upon
116
* receiving an interrupt (for a interrupt-driven interface).
117
* If interrupt driven, you should probably poll this
118
* periodically when not in idle state. This should be called
119
* with the time that passed since the last call, if it is
120
* significant. Time is in microseconds.
121
*/
122
enum
si_sm_result
(*
event
)(
struct
si_sm_data
*smi,
long
time
);
123
124
/*
125
* Attempt to detect an SMI. Returns 0 on success or nonzero
126
* on failure.
127
*/
128
int
(*
detect
)(
struct
si_sm_data
*smi);
129
130
/* The interface is shutting down, so clean it up. */
131
void
(*
cleanup
)(
struct
si_sm_data
*smi);
132
133
/* Return the size of the SMI structure in bytes. */
134
int
(*
size
)(
void
);
135
};
136
137
/* Current state machines that we can use. */
138
extern
struct
si_sm_handlers
kcs_smi_handlers
;
139
extern
struct
si_sm_handlers
smic_smi_handlers
;
140
extern
struct
si_sm_handlers
bt_smi_handlers
;
141
Generated on Thu Jan 10 2013 13:27:51 for Linux Kernel by
1.8.2