Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/misc/ibmasm/i2o.h
17491 views
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 <[email protected]>
21
*
22
*/
23
24
#pragma pack(1)
25
struct i2o_header {
26
u8 version;
27
u8 message_flags;
28
u16 message_size;
29
u8 target;
30
u8 initiator_and_target;
31
u8 initiator;
32
u8 function;
33
u32 initiator_context;
34
};
35
#pragma pack()
36
37
#define I2O_HEADER_TEMPLATE \
38
{ .version = 0x01, \
39
.message_flags = 0x00, \
40
.function = 0xFF, \
41
.initiator = 0x00, \
42
.initiator_and_target = 0x40, \
43
.target = 0x00, \
44
.initiator_context = 0x0 }
45
46
#define I2O_MESSAGE_SIZE 0x1000
47
#define I2O_COMMAND_SIZE (I2O_MESSAGE_SIZE - sizeof(struct i2o_header))
48
49
#pragma pack(1)
50
struct i2o_message {
51
struct i2o_header header;
52
void *data;
53
};
54
#pragma pack()
55
56
static inline unsigned short outgoing_message_size(unsigned int data_size)
57
{
58
unsigned int size;
59
unsigned short i2o_size;
60
61
if (data_size > I2O_COMMAND_SIZE)
62
data_size = I2O_COMMAND_SIZE;
63
64
size = sizeof(struct i2o_header) + data_size;
65
66
i2o_size = size / sizeof(u32);
67
68
if (size % sizeof(u32))
69
i2o_size++;
70
71
return i2o_size;
72
}
73
74
static inline u32 incoming_data_size(struct i2o_message *i2o_message)
75
{
76
return (sizeof(u32) * i2o_message->header.message_size);
77
}
78
79