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