~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to drivers/block/aoe/aoe.h

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Copyright (c) 2007 Coraid, Inc.  See COPYING for GPL terms. */
 
2
#define VERSION "47"
 
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 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"
 
17
 
 
18
enum {
 
19
        AOECMD_ATA,
 
20
        AOECMD_CFG,
 
21
        AOECMD_VEND_MIN = 0xf0,
 
22
 
 
23
        AOEFL_RSP = (1<<3),
 
24
        AOEFL_ERR = (1<<2),
 
25
 
 
26
        AOEAFL_EXT = (1<<6),
 
27
        AOEAFL_DEV = (1<<4),
 
28
        AOEAFL_ASYNC = (1<<1),
 
29
        AOEAFL_WRITE = (1<<0),
 
30
 
 
31
        AOECCMD_READ = 0,
 
32
        AOECCMD_TEST,
 
33
        AOECCMD_PTEST,
 
34
        AOECCMD_SET,
 
35
        AOECCMD_FSET,
 
36
 
 
37
        AOE_HVER = 0x10,
 
38
};
 
39
 
 
40
struct aoe_hdr {
 
41
        unsigned char dst[6];
 
42
        unsigned char src[6];
 
43
        __be16 type;
 
44
        unsigned char verfl;
 
45
        unsigned char err;
 
46
        __be16 major;
 
47
        unsigned char minor;
 
48
        unsigned char cmd;
 
49
        __be32 tag;
 
50
};
 
51
 
 
52
struct aoe_atahdr {
 
53
        unsigned char aflags;
 
54
        unsigned char errfeat;
 
55
        unsigned char scnt;
 
56
        unsigned char cmdstat;
 
57
        unsigned char lba0;
 
58
        unsigned char lba1;
 
59
        unsigned char lba2;
 
60
        unsigned char lba3;
 
61
        unsigned char lba4;
 
62
        unsigned char lba5;
 
63
        unsigned char res[2];
 
64
};
 
65
 
 
66
struct aoe_cfghdr {
 
67
        __be16 bufcnt;
 
68
        __be16 fwver;
 
69
        unsigned char scnt;
 
70
        unsigned char aoeccmd;
 
71
        unsigned char cslen[2];
 
72
};
 
73
 
 
74
enum {
 
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 */
 
82
 
 
83
        BUFFL_FAIL = 1,
 
84
};
 
85
 
 
86
enum {
 
87
        DEFAULTBCNT = 2 * 512,  /* 2 sectors */
 
88
        NPERSHELF = 16,         /* number of slots per shelf address */
 
89
        FREETAG = -1,
 
90
        MIN_BUFS = 16,
 
91
        NTARGETS = 8,
 
92
        NAOEIFS = 8,
 
93
        NSKBPOOLMAX = 128,
 
94
 
 
95
        TIMERTICK = HZ / 10,
 
96
        MINTIMER = HZ >> 2,
 
97
        MAXTIMER = HZ << 1,
 
98
        HELPWAIT = 20,
 
99
};
 
100
 
 
101
struct buf {
 
102
        struct list_head bufs;
 
103
        ulong stime;    /* for disk stats */
 
104
        ulong flags;
 
105
        ulong nframesout;
 
106
        ulong resid;
 
107
        ulong bv_resid;
 
108
        ulong bv_off;
 
109
        sector_t sector;
 
110
        struct bio *bio;
 
111
        struct bio_vec *bv;
 
112
};
 
113
 
 
114
struct frame {
 
115
        int tag;
 
116
        ulong waited;
 
117
        struct buf *buf;
 
118
        char *bufaddr;
 
119
        ulong bcnt;
 
120
        sector_t lba;
 
121
        struct sk_buff *skb;
 
122
};
 
123
 
 
124
struct aoeif {
 
125
        struct net_device *nd;
 
126
        unsigned char lost;
 
127
        unsigned char lostjumbo;
 
128
        ushort maxbcnt;
 
129
};
 
130
 
 
131
struct aoetgt {
 
132
        unsigned char addr[6];
 
133
        ushort nframes;
 
134
        struct frame *frames;
 
135
        struct aoeif ifs[NAOEIFS];
 
136
        struct aoeif *ifp;      /* current aoeif in use */
 
137
        ushort nout;
 
138
        ushort maxout;
 
139
        u16 lasttag;            /* last tag sent */
 
140
        u16 useme;
 
141
        ulong lastwadj;         /* last window adjustment */
 
142
        int wpkts, rpkts;
 
143
        int dataref;
 
144
};
 
145
 
 
146
struct aoedev {
 
147
        struct aoedev *next;
 
148
        ulong sysminor;
 
149
        ulong aoemajor;
 
150
        u16 aoeminor;
 
151
        u16 flags;
 
152
        u16 nopen;              /* (bd_openers isn't available without sleeping) */
 
153
        u16 rttavg;             /* round trip average of requests/responses */
 
154
        u16 mintimer;
 
155
        u16 fw_ver;             /* version of blade's firmware */
 
156
        struct work_struct work;/* disk create work struct */
 
157
        struct gendisk *gd;
 
158
        struct request_queue *blkq;
 
159
        struct hd_geometry geo; 
 
160
        sector_t ssize;
 
161
        struct timer_list timer;
 
162
        spinlock_t lock;
 
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 */
 
171
};
 
172
 
 
173
 
 
174
int aoeblk_init(void);
 
175
void aoeblk_exit(void);
 
176
void aoeblk_gdalloc(void *);
 
177
void aoedisk_rm_sysfs(struct aoedev *d);
 
178
 
 
179
int aoechr_init(void);
 
180
void aoechr_exit(void);
 
181
void aoechr_error(char *);
 
182
 
 
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 *);
 
190
 
 
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);
 
197
 
 
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);
 
203