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
block
aoe
aoe.h
Go to the documentation of this file.
1
/* Copyright (c) 2012 Coraid, Inc. See COPYING for GPL terms. */
2
#define VERSION "50"
3
#define AOE_MAJOR 152
4
#define DEVICE_NAME "aoe"
5
6
/* set AOE_PARTITIONS to 1 to use whole-disks only
7
* default is 16, which is 15 partitions plus the whole disk
8
*/
9
#ifndef AOE_PARTITIONS
10
#define AOE_PARTITIONS (16)
11
#endif
12
13
#define WHITESPACE " \t\v\f\n"
14
15
enum
{
16
AOECMD_ATA
,
17
AOECMD_CFG
,
18
AOECMD_VEND_MIN
= 0xf0,
19
20
AOEFL_RSP
= (1<<3),
21
AOEFL_ERR
= (1<<2),
22
23
AOEAFL_EXT
= (1<<6),
24
AOEAFL_DEV
= (1<<4),
25
AOEAFL_ASYNC
= (1<<1),
26
AOEAFL_WRITE
= (1<<0),
27
28
AOECCMD_READ
= 0,
29
AOECCMD_TEST
,
30
AOECCMD_PTEST
,
31
AOECCMD_SET
,
32
AOECCMD_FSET
,
33
34
AOE_HVER
= 0x10,
35
};
36
37
struct
aoe_hdr
{
38
unsigned
char
dst
[6];
39
unsigned
char
src
[6];
40
__be16
type
;
41
unsigned
char
verfl
;
42
unsigned
char
err
;
43
__be16
major
;
44
unsigned
char
minor
;
45
unsigned
char
cmd
;
46
__be32
tag
;
47
};
48
49
struct
aoe_atahdr
{
50
unsigned
char
aflags
;
51
unsigned
char
errfeat
;
52
unsigned
char
scnt
;
53
unsigned
char
cmdstat
;
54
unsigned
char
lba0
;
55
unsigned
char
lba1
;
56
unsigned
char
lba2
;
57
unsigned
char
lba3
;
58
unsigned
char
lba4
;
59
unsigned
char
lba5
;
60
unsigned
char
res
[2];
61
};
62
63
struct
aoe_cfghdr
{
64
__be16
bufcnt
;
65
__be16
fwver
;
66
unsigned
char
scnt
;
67
unsigned
char
aoeccmd
;
68
unsigned
char
cslen
[2];
69
};
70
71
enum
{
72
DEVFL_UP
= 1,
/* device is installed in system and ready for AoE->ATA commands */
73
DEVFL_TKILL
= (1<<1),
/* flag for timer to know when to kill self */
74
DEVFL_EXT
= (1<<2),
/* device accepts lba48 commands */
75
DEVFL_GDALLOC
= (1<<3),
/* need to alloc gendisk */
76
DEVFL_KICKME
= (1<<4),
/* slow polling network card catch */
77
DEVFL_NEWSIZE
= (1<<5),
/* need to update dev size in block layer */
78
};
79
80
enum
{
81
DEFAULTBCNT
= 2 * 512,
/* 2 sectors */
82
MIN_BUFS
= 16,
83
NTARGETS
= 8,
84
NAOEIFS
= 8,
85
NSKBPOOLMAX
= 256,
86
NFACTIVE
= 61,
87
88
TIMERTICK
=
HZ
/ 10,
89
MINTIMER
=
HZ
>> 2,
90
MAXTIMER
=
HZ
<< 1,
91
};
92
93
struct
buf
{
94
ulong
nframesout
;
95
ulong
resid
;
96
ulong
bv_resid
;
97
sector_t
sector
;
98
struct
bio
*
bio
;
99
struct
bio_vec *
bv
;
100
struct
request
*
rq
;
101
};
102
103
struct
frame
{
104
struct
list_head
head
;
105
u32
tag
;
106
ulong
waited
;
107
struct
aoetgt
*
t
;
/* parent target I belong to */
108
sector_t
lba
;
109
struct
sk_buff
*
skb
;
/* command skb freed on module exit */
110
struct
sk_buff
*
r_skb
;
/* response skb for async processing */
111
struct
buf
*
buf
;
112
struct
bio_vec *
bv
;
113
ulong
bcnt
;
114
ulong
bv_off
;
115
};
116
117
struct
aoeif
{
118
struct
net_device
*
nd
;
119
ulong
lost
;
120
int
bcnt
;
121
};
122
123
struct
aoetgt
{
124
unsigned
char
addr
[6];
125
ushort
nframes
;
126
struct
aoedev
*
d
;
/* parent device I belong to */
127
struct
list_head
ffree
;
/* list of free frames */
128
struct
aoeif
ifs
[
NAOEIFS
];
129
struct
aoeif
*
ifp
;
/* current aoeif in use */
130
ushort
nout
;
131
ushort
maxout
;
132
ulong
falloc
;
133
ulong
lastwadj
;
/* last window adjustment */
134
int
minbcnt
;
135
int
wpkts
,
rpkts
;
136
};
137
138
struct
aoedev
{
139
struct
aoedev
*
next
;
140
ulong
sysminor
;
141
ulong
aoemajor
;
142
u16
aoeminor
;
143
u16
flags
;
144
u16
nopen
;
/* (bd_openers isn't available without sleeping) */
145
u16
rttavg
;
/* round trip average of requests/responses */
146
u16
mintimer
;
147
u16
fw_ver
;
/* version of blade's firmware */
148
u16
lasttag
;
/* last tag sent */
149
u16
useme
;
150
ulong
ref
;
151
struct
work_struct
work
;
/* disk create work struct */
152
struct
gendisk *
gd
;
153
struct
request_queue
*
blkq
;
154
struct
hd_geometry
geo
;
155
sector_t
ssize
;
156
struct
timer_list
timer
;
157
spinlock_t
lock
;
158
struct
sk_buff_head
skbpool
;
159
mempool_t
*
bufpool
;
/* for deadlock-free Buf allocation */
160
struct
{
/* pointers to work in progress */
161
struct
buf
*
buf
;
162
struct
bio *
nxbio
;
163
struct
request
*
rq
;
164
}
ip
;
165
ulong
maxbcnt
;
166
struct
list_head
factive
[
NFACTIVE
];
/* hash of active frames */
167
struct
aoetgt
*
targets
[
NTARGETS
];
168
struct
aoetgt
**
tgt
;
/* target in use when working */
169
struct
aoetgt
*
htgt
;
/* target needing rexmit assistance */
170
ulong
ntargets
;
171
ulong
kicked
;
172
};
173
174
/* kthread tracking */
175
struct
ktstate
{
176
struct
completion
rendez
;
177
struct
task_struct
*
task
;
178
wait_queue_head_t
*
waitq
;
179
int
(*
fn
) (
void
);
180
char
*
name
;
181
spinlock_t
*
lock
;
182
};
183
184
int
aoeblk_init
(
void
);
185
void
aoeblk_exit
(
void
);
186
void
aoeblk_gdalloc
(
void
*);
187
void
aoedisk_rm_sysfs
(
struct
aoedev
*
d
);
188
189
int
aoechr_init
(
void
);
190
void
aoechr_exit
(
void
);
191
void
aoechr_error
(
char
*);
192
193
void
aoecmd_work
(
struct
aoedev
*
d
);
194
void
aoecmd_cfg
(
ushort
aoemajor,
unsigned
char
aoeminor);
195
struct
sk_buff
*
aoecmd_ata_rsp
(
struct
sk_buff
*);
196
void
aoecmd_cfg_rsp
(
struct
sk_buff
*);
197
void
aoecmd_sleepwork
(
struct
work_struct
*);
198
void
aoecmd_cleanslate
(
struct
aoedev
*);
199
void
aoecmd_exit
(
void
);
200
int
aoecmd_init
(
void
);
201
struct
sk_buff
*
aoecmd_ata_id
(
struct
aoedev
*);
202
void
aoe_freetframe
(
struct
frame
*);
203
void
aoe_flush_iocq
(
void
);
204
void
aoe_end_request
(
struct
aoedev
*,
struct
request
*,
int
);
205
int
aoe_ktstart
(
struct
ktstate
*
k
);
206
void
aoe_ktstop
(
struct
ktstate
*
k
);
207
208
int
aoedev_init
(
void
);
209
void
aoedev_exit
(
void
);
210
struct
aoedev
*
aoedev_by_aoeaddr
(
ulong
maj
,
int
min
,
int
do_alloc);
211
void
aoedev_downdev
(
struct
aoedev
*
d
);
212
int
aoedev_flush
(
const
char
__user *
str
,
size_t
size
);
213
void
aoe_failbuf
(
struct
aoedev
*,
struct
buf
*);
214
void
aoedev_put
(
struct
aoedev
*);
215
216
int
aoenet_init
(
void
);
217
void
aoenet_exit
(
void
);
218
void
aoenet_xmit
(
struct
sk_buff_head
*);
219
int
is_aoe_netif
(
struct
net_device
*ifp);
220
int
set_aoe_iflist
(
const
char
__user *
str
,
size_t
size
);
Generated on Thu Jan 10 2013 13:26:00 for Linux Kernel by
1.8.2