linux/drivers/block/aoe/aoe.h
<<
>>
Prefs
   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
  18enum {
  19        AOECMD_ATA,
  20        AOECMD_CFG,
  21
  22        AOEFL_RSP = (1<<3),
  23        AOEFL_ERR = (1<<2),
  24
  25        AOEAFL_EXT = (1<<6),
  26        AOEAFL_DEV = (1<<4),
  27        AOEAFL_ASYNC = (1<<1),
  28        AOEAFL_WRITE = (1<<0),
  29
  30        AOECCMD_READ = 0,
  31        AOECCMD_TEST,
  32        AOECCMD_PTEST,
  33        AOECCMD_SET,
  34        AOECCMD_FSET,
  35
  36        AOE_HVER = 0x10,
  37};
  38
  39struct aoe_hdr {
  40        unsigned char dst[6];
  41        unsigned char src[6];
  42        __be16 type;
  43        unsigned char verfl;
  44        unsigned char err;
  45        __be16 major;
  46        unsigned char minor;
  47        unsigned char cmd;
  48        __be32 tag;
  49};
  50
  51struct aoe_atahdr {
  52        unsigned char aflags;
  53        unsigned char errfeat;
  54        unsigned char scnt;
  55        unsigned char cmdstat;
  56        unsigned char lba0;
  57        unsigned char lba1;
  58        unsigned char lba2;
  59        unsigned char lba3;
  60        unsigned char lba4;
  61        unsigned char lba5;
  62        unsigned char res[2];
  63};
  64
  65struct aoe_cfghdr {
  66        __be16 bufcnt;
  67        __be16 fwver;
  68        unsigned char scnt;
  69        unsigned char aoeccmd;
  70        unsigned char cslen[2];
  71};
  72
  73enum {
  74        DEVFL_UP = 1,   /* device is installed in system and ready for AoE->ATA commands */
  75        DEVFL_TKILL = (1<<1),   /* flag for timer to know when to kill self */
  76        DEVFL_EXT = (1<<2),     /* device accepts lba48 commands */
  77        DEVFL_CLOSEWAIT = (1<<3), /* device is waiting for all closes to revalidate */
  78        DEVFL_GDALLOC = (1<<4), /* need to alloc gendisk */
  79        DEVFL_KICKME = (1<<5),  /* slow polling network card catch */
  80        DEVFL_NEWSIZE = (1<<6), /* need to update dev size in block layer */
  81
  82        BUFFL_FAIL = 1,
  83};
  84
  85enum {
  86        DEFAULTBCNT = 2 * 512,  /* 2 sectors */
  87        NPERSHELF = 16,         /* number of slots per shelf address */
  88        FREETAG = -1,
  89        MIN_BUFS = 16,
  90        NTARGETS = 8,
  91        NAOEIFS = 8,
  92        NSKBPOOLMAX = 128,
  93
  94        TIMERTICK = HZ / 10,
  95        MINTIMER = HZ >> 2,
  96        MAXTIMER = HZ << 1,
  97        HELPWAIT = 20,
  98};
  99
 100struct buf {
 101        struct list_head bufs;
 102        ulong stime;    /* for disk stats */
 103        ulong flags;
 104        ulong nframesout;
 105        ulong resid;
 106        ulong bv_resid;
 107        ulong bv_off;
 108        sector_t sector;
 109        struct bio *bio;
 110        struct bio_vec *bv;
 111};
 112
 113struct frame {
 114        int tag;
 115        ulong waited;
 116        struct buf *buf;
 117        char *bufaddr;
 118        ulong bcnt;
 119        sector_t lba;
 120        struct sk_buff *skb;
 121};
 122
 123struct aoeif {
 124        struct net_device *nd;
 125        unsigned char lost;
 126        unsigned char lostjumbo;
 127        ushort maxbcnt;
 128};
 129
 130struct aoetgt {
 131        unsigned char addr[6];
 132        ushort nframes;
 133        struct frame *frames;
 134        struct aoeif ifs[NAOEIFS];
 135        struct aoeif *ifp;      /* current aoeif in use */
 136        ushort nout;
 137        ushort maxout;
 138        u16 lasttag;            /* last tag sent */
 139        u16 useme;
 140        ulong lastwadj;         /* last window adjustment */
 141        int wpkts, rpkts;
 142        int dataref;
 143};
 144
 145struct aoedev {
 146        struct aoedev *next;
 147        ulong sysminor;
 148        ulong aoemajor;
 149        u16 aoeminor;
 150        u16 flags;
 151        u16 nopen;              /* (bd_openers isn't available without sleeping) */
 152        u16 rttavg;             /* round trip average of requests/responses */
 153        u16 mintimer;
 154        u16 fw_ver;             /* version of blade's firmware */
 155        struct work_struct work;/* disk create work struct */
 156        struct gendisk *gd;
 157        struct request_queue blkq;
 158        struct hd_geometry geo; 
 159        sector_t ssize;
 160        struct timer_list timer;
 161        spinlock_t lock;
 162        struct sk_buff *sendq_hd; /* packets needing to be sent, list head */
 163        struct sk_buff *sendq_tl;
 164        struct sk_buff *skbpool_hd;
 165        struct sk_buff *skbpool_tl;
 166        int nskbpool;
 167        mempool_t *bufpool;     /* for deadlock-free Buf allocation */
 168        struct list_head bufq;  /* queue of bios to work on */
 169        struct buf *inprocess;  /* the one we're currently working on */
 170        struct aoetgt *targets[NTARGETS];
 171        struct aoetgt **tgt;    /* target in use when working */
 172        struct aoetgt **htgt;   /* target needing rexmit assistance */
 173};
 174
 175
 176int aoeblk_init(void);
 177void aoeblk_exit(void);
 178void aoeblk_gdalloc(void *);
 179void aoedisk_rm_sysfs(struct aoedev *d);
 180
 181int aoechr_init(void);
 182void aoechr_exit(void);
 183void aoechr_error(char *);
 184
 185void aoecmd_work(struct aoedev *d);
 186void aoecmd_cfg(ushort aoemajor, unsigned char aoeminor);
 187void aoecmd_ata_rsp(struct sk_buff *);
 188void aoecmd_cfg_rsp(struct sk_buff *);
 189void aoecmd_sleepwork(struct work_struct *);
 190void aoecmd_cleanslate(struct aoedev *);
 191struct sk_buff *aoecmd_ata_id(struct aoedev *);
 192
 193int aoedev_init(void);
 194void aoedev_exit(void);
 195struct aoedev *aoedev_by_aoeaddr(int maj, int min);
 196struct aoedev *aoedev_by_sysminor_m(ulong sysminor);
 197void aoedev_downdev(struct aoedev *d);
 198int aoedev_flush(const char __user *str, size_t size);
 199
 200int aoenet_init(void);
 201void aoenet_exit(void);
 202void aoenet_xmit(struct sk_buff *);
 203int is_aoe_netif(struct net_device *ifp);
 204int set_aoe_iflist(const char __user *str, size_t size);
 205
 206unsigned long long mac_addr(char addr[6]);
 207
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.