1
/* Copyright (c) 2007 Coraid, Inc. See COPYING for GPL terms. */
4
#define DEVICE_NAME "aoe"
6
/* set AOE_PARTITIONS to 1 to use whole-disks only
7
* default is 16, which is 15 partitions plus the whole disk
10
#define AOE_PARTITIONS (16)
13
#define SYSMINOR(aoemajor, aoeminor) ((aoemajor) * NPERSHELF + (aoeminor))
14
#define AOEMAJOR(sysminor) ((sysminor) / NPERSHELF)
15
#define AOEMINOR(sysminor) ((sysminor) % NPERSHELF)
16
#define WHITESPACE " \t\v\f\n"
21
AOECMD_VEND_MIN = 0xf0,
28
AOEAFL_ASYNC = (1<<1),
29
AOEAFL_WRITE = (1<<0),
54
unsigned char errfeat;
56
unsigned char cmdstat;
70
unsigned char aoeccmd;
71
unsigned char cslen[2];
75
DEVFL_UP = 1, /* device is installed in system and ready for AoE->ATA commands */
76
DEVFL_TKILL = (1<<1), /* flag for timer to know when to kill self */
77
DEVFL_EXT = (1<<2), /* device accepts lba48 commands */
78
DEVFL_CLOSEWAIT = (1<<3), /* device is waiting for all closes to revalidate */
79
DEVFL_GDALLOC = (1<<4), /* need to alloc gendisk */
80
DEVFL_KICKME = (1<<5), /* slow polling network card catch */
81
DEVFL_NEWSIZE = (1<<6), /* need to update dev size in block layer */
87
DEFAULTBCNT = 2 * 512, /* 2 sectors */
88
NPERSHELF = 16, /* number of slots per shelf address */
102
struct list_head bufs;
103
ulong stime; /* for disk stats */
125
struct net_device *nd;
127
unsigned char lostjumbo;
132
unsigned char addr[6];
134
struct frame *frames;
135
struct aoeif ifs[NAOEIFS];
136
struct aoeif *ifp; /* current aoeif in use */
139
u16 lasttag; /* last tag sent */
141
ulong lastwadj; /* last window adjustment */
152
u16 nopen; /* (bd_openers isn't available without sleeping) */
153
u16 rttavg; /* round trip average of requests/responses */
155
u16 fw_ver; /* version of blade's firmware */
156
struct work_struct work;/* disk create work struct */
158
struct request_queue *blkq;
159
struct hd_geometry geo;
161
struct timer_list timer;
163
struct sk_buff_head sendq;
164
struct sk_buff_head skbpool;
165
mempool_t *bufpool; /* for deadlock-free Buf allocation */
166
struct list_head bufq; /* queue of bios to work on */
167
struct buf *inprocess; /* the one we're currently working on */
168
struct aoetgt *targets[NTARGETS];
169
struct aoetgt **tgt; /* target in use when working */
170
struct aoetgt **htgt; /* target needing rexmit assistance */
174
int aoeblk_init(void);
175
void aoeblk_exit(void);
176
void aoeblk_gdalloc(void *);
177
void aoedisk_rm_sysfs(struct aoedev *d);
179
int aoechr_init(void);
180
void aoechr_exit(void);
181
void aoechr_error(char *);
183
void aoecmd_work(struct aoedev *d);
184
void aoecmd_cfg(ushort aoemajor, unsigned char aoeminor);
185
void aoecmd_ata_rsp(struct sk_buff *);
186
void aoecmd_cfg_rsp(struct sk_buff *);
187
void aoecmd_sleepwork(struct work_struct *);
188
void aoecmd_cleanslate(struct aoedev *);
189
struct sk_buff *aoecmd_ata_id(struct aoedev *);
191
int aoedev_init(void);
192
void aoedev_exit(void);
193
struct aoedev *aoedev_by_aoeaddr(int maj, int min);
194
struct aoedev *aoedev_by_sysminor_m(ulong sysminor);
195
void aoedev_downdev(struct aoedev *d);
196
int aoedev_flush(const char __user *str, size_t size);
198
int aoenet_init(void);
199
void aoenet_exit(void);
200
void aoenet_xmit(struct sk_buff_head *);
201
int is_aoe_netif(struct net_device *ifp);
202
int set_aoe_iflist(const char __user *str, size_t size);