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
misc
ibmasm
dot_command.c
Go to the documentation of this file.
1
/*
2
* IBM ASM Service Processor Device Driver
3
*
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation; either version 2 of the License, or
7
* (at your option) any later version.
8
*
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17
*
18
* Copyright (C) IBM Corporation, 2004
19
*
20
* Author: Max Asböck <amax@us.ibm.com>
21
*
22
*/
23
24
#include "
ibmasm.h
"
25
#include "
dot_command.h
"
26
31
void
ibmasm_receive_message
(
struct
service_processor
*
sp
,
void
*
message
,
int
message_size)
32
{
33
u32
size
;
34
struct
dot_command_header
*
header
= (
struct
dot_command_header
*)message;
35
36
if
(message_size == 0)
37
return
;
38
39
size = get_dot_command_size(message);
40
if
(size == 0)
41
return
;
42
43
if
(size > message_size)
44
size = message_size;
45
46
switch
(header->
type
) {
47
case
sp_event
:
48
ibmasm_receive_event
(sp, message, size);
49
break
;
50
case
sp_command_response
:
51
ibmasm_receive_command_response
(sp, message, size);
52
break
;
53
case
sp_heartbeat
:
54
ibmasm_receive_heartbeat
(sp, message, size);
55
break
;
56
default
:
57
dev_err
(sp->
dev
,
"Received unknown message from service processor\n"
);
58
}
59
}
60
61
62
#define INIT_BUFFER_SIZE 32
63
64
68
int
ibmasm_send_driver_vpd
(
struct
service_processor
*
sp
)
69
{
70
struct
command
*
command
;
71
struct
dot_command_header
*
header
;
72
u8
*vpd_command;
73
u8
*vpd_data;
74
int
result
= 0;
75
76
command =
ibmasm_new_command
(sp,
INIT_BUFFER_SIZE
);
77
if
(command ==
NULL
)
78
return
-
ENOMEM
;
79
80
header = (
struct
dot_command_header
*)command->
buffer
;
81
header->
type
=
sp_write
;
82
header->
command_size
= 4;
83
header->
data_size
= 16;
84
header->
status
= 0;
85
header->
reserved
= 0;
86
87
vpd_command = command->
buffer
+
sizeof
(
struct
dot_command_header
);
88
vpd_command[0] = 0x4;
89
vpd_command[1] = 0x3;
90
vpd_command[2] = 0x5;
91
vpd_command[3] = 0xa;
92
93
vpd_data = vpd_command + header->
command_size
;
94
vpd_data[0] = 0;
95
strcat
(vpd_data,
IBMASM_DRIVER_VPD
);
96
vpd_data[10] = 0;
97
vpd_data[15] = 0;
98
99
ibmasm_exec_command
(sp, command);
100
ibmasm_wait_for_response
(command,
IBMASM_CMD_TIMEOUT_NORMAL
);
101
102
if
(command->
status
!=
IBMASM_CMD_COMPLETE
)
103
result = -
ENODEV
;
104
105
command_put(command);
106
107
return
result
;
108
}
109
110
struct
os_state_command
{
111
struct
dot_command_header
header
;
112
unsigned
char
command
[3];
113
unsigned
char
data
;
114
};
115
124
int
ibmasm_send_os_state
(
struct
service_processor
*
sp
,
int
os_state)
125
{
126
struct
command
*
cmd
;
127
struct
os_state_command
*os_state_cmd;
128
int
result
= 0;
129
130
cmd =
ibmasm_new_command
(sp,
sizeof
(
struct
os_state_command
));
131
if
(cmd ==
NULL
)
132
return
-
ENOMEM
;
133
134
os_state_cmd = (
struct
os_state_command
*)cmd->
buffer
;
135
os_state_cmd->
header
.type =
sp_write
;
136
os_state_cmd->
header
.command_size = 3;
137
os_state_cmd->
header
.data_size = 1;
138
os_state_cmd->
header
.status = 0;
139
os_state_cmd->
command
[0] = 4;
140
os_state_cmd->
command
[1] = 3;
141
os_state_cmd->
command
[2] = 6;
142
os_state_cmd->
data
= os_state;
143
144
ibmasm_exec_command
(sp, cmd);
145
ibmasm_wait_for_response
(cmd,
IBMASM_CMD_TIMEOUT_NORMAL
);
146
147
if
(cmd->
status
!=
IBMASM_CMD_COMPLETE
)
148
result = -
ENODEV
;
149
150
command_put(cmd);
151
return
result
;
152
}
Generated on Thu Jan 10 2013 13:54:46 for Linux Kernel by
1.8.2