Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* Copyright (c) 2013 Coraid, Inc.  See COPYING for GPL terms. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) #include <linux/blk-mq.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) #define VERSION "85"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) #define AOE_MAJOR 152
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) #define DEVICE_NAME "aoe"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) /* set AOE_PARTITIONS to 1 to use whole-disks only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  * default is 16, which is 15 partitions plus the whole disk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #ifndef AOE_PARTITIONS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #define AOE_PARTITIONS (16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #define WHITESPACE " \t\v\f\n,"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 	AOECMD_ATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 	AOECMD_CFG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 	AOECMD_VEND_MIN = 0xf0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 	AOEFL_RSP = (1<<3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 	AOEFL_ERR = (1<<2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 	AOEAFL_EXT = (1<<6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 	AOEAFL_DEV = (1<<4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	AOEAFL_ASYNC = (1<<1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 	AOEAFL_WRITE = (1<<0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	AOECCMD_READ = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	AOECCMD_TEST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	AOECCMD_PTEST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	AOECCMD_SET,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	AOECCMD_FSET,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 	AOE_HVER = 0x10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) struct aoe_hdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	unsigned char dst[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 	unsigned char src[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	__be16 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	unsigned char verfl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	unsigned char err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	__be16 major;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	unsigned char minor;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	unsigned char cmd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	__be32 tag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) struct aoe_atahdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	unsigned char aflags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	unsigned char errfeat;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	unsigned char scnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	unsigned char cmdstat;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	unsigned char lba0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	unsigned char lba1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	unsigned char lba2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	unsigned char lba3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	unsigned char lba4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	unsigned char lba5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	unsigned char res[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) struct aoe_cfghdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	__be16 bufcnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	__be16 fwver;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	unsigned char scnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	unsigned char aoeccmd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	unsigned char cslen[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	DEVFL_UP = 1,	/* device is installed in system and ready for AoE->ATA commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	DEVFL_TKILL = (1<<1),	/* flag for timer to know when to kill self */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	DEVFL_EXT = (1<<2),	/* device accepts lba48 commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	DEVFL_GDALLOC = (1<<3),	/* need to alloc gendisk */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	DEVFL_GD_NOW = (1<<4),	/* allocating gendisk */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	DEVFL_KICKME = (1<<5),	/* slow polling network card catch */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	DEVFL_NEWSIZE = (1<<6),	/* need to update dev size in block layer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	DEVFL_FREEING = (1<<7),	/* set when device is being cleaned up */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	DEVFL_FREED = (1<<8),	/* device has been cleaned up */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	DEFAULTBCNT = 2 * 512,	/* 2 sectors */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	MIN_BUFS = 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	NTARGETS = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	NAOEIFS = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	NSKBPOOLMAX = 256,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	NFACTIVE = 61,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	TIMERTICK = HZ / 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	RTTSCALE = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	RTTDSCALE = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	RTTAVG_INIT = USEC_PER_SEC / 4 << RTTSCALE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	RTTDEV_INIT = RTTAVG_INIT / 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	HARD_SCORN_SECS = 10,	/* try another remote port after this */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	MAX_TAINT = 1000,	/* cap on aoetgt taint */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) struct aoe_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	unsigned long nr_bios;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) struct buf {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	ulong nframesout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	struct bio *bio;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	struct bvec_iter iter;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	struct request *rq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) enum frame_flags {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	FFL_PROBE = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) struct frame {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	struct list_head head;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	u32 tag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	ktime_t sent;			/* high-res time packet was sent */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	ulong waited;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	ulong waited_total;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	struct aoetgt *t;		/* parent target I belong to */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	struct sk_buff *skb;		/* command skb freed on module exit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	struct sk_buff *r_skb;		/* response skb for async processing */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	struct buf *buf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 	struct bvec_iter iter;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	char flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) struct aoeif {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 	struct net_device *nd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 	ulong lost;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	int bcnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) struct aoetgt {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 	unsigned char addr[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	ushort nframes;		/* cap on frames to use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 	struct aoedev *d;			/* parent device I belong to */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	struct list_head ffree;			/* list of free frames */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	struct aoeif ifs[NAOEIFS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	struct aoeif *ifp;	/* current aoeif in use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 	ushort nout;		/* number of AoE commands outstanding */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 	ushort maxout;		/* current value for max outstanding */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 	ushort next_cwnd;	/* incr maxout after decrementing to zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	ushort ssthresh;	/* slow start threshold */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	ulong falloc;		/* number of allocated frames */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 	int taint;		/* how much we want to avoid this aoetgt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 	int minbcnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 	int wpkts, rpkts;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 	char nout_probes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) struct aoedev {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	struct aoedev *next;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	ulong sysminor;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 	ulong aoemajor;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 	u32 rttavg;		/* scaled AoE round trip time average */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 	u32 rttdev;		/* scaled round trip time mean deviation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 	u16 aoeminor;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 	u16 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	u16 nopen;		/* (bd_openers isn't available without sleeping) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	u16 fw_ver;		/* version of blade's firmware */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 	u16 lasttag;		/* last tag sent */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 	u16 useme;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 	ulong ref;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 	struct work_struct work;/* disk create work struct */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 	struct gendisk *gd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 	struct dentry *debugfs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	struct request_queue *blkq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	struct list_head rq_list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	struct blk_mq_tag_set tag_set;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	struct hd_geometry geo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	sector_t ssize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 	struct timer_list timer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 	spinlock_t lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 	struct sk_buff_head skbpool;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 	mempool_t *bufpool;	/* for deadlock-free Buf allocation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 	struct {		/* pointers to work in progress */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 		struct buf *buf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 		struct bio *nxbio;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 		struct request *rq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 	} ip;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 	ulong maxbcnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 	struct list_head factive[NFACTIVE];	/* hash of active frames */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 	struct list_head rexmitq; /* deferred retransmissions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 	struct aoetgt **targets;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 	ulong ntargets;		/* number of allocated aoetgt pointers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 	struct aoetgt **tgt;	/* target in use when working */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 	ulong kicked;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 	char ident[512];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) /* kthread tracking */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) struct ktstate {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 	struct completion rendez;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 	struct task_struct *task;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	wait_queue_head_t *waitq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	int (*fn) (int);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	char name[12];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 	spinlock_t *lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 	int id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 	int active;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) int aoeblk_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) void aoeblk_exit(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) void aoeblk_gdalloc(void *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) void aoedisk_rm_debugfs(struct aoedev *d);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) int aoechr_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) void aoechr_exit(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) void aoechr_error(char *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) void aoecmd_work(struct aoedev *d);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) void aoecmd_cfg(ushort aoemajor, unsigned char aoeminor);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) struct sk_buff *aoecmd_ata_rsp(struct sk_buff *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) void aoecmd_cfg_rsp(struct sk_buff *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) void aoecmd_sleepwork(struct work_struct *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) void aoecmd_wreset(struct aoetgt *t);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) void aoecmd_cleanslate(struct aoedev *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) void aoecmd_exit(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) int aoecmd_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) struct sk_buff *aoecmd_ata_id(struct aoedev *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) void aoe_freetframe(struct frame *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) void aoe_flush_iocq(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) void aoe_flush_iocq_by_index(int);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) void aoe_end_request(struct aoedev *, struct request *, int);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) int aoe_ktstart(struct ktstate *k);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) void aoe_ktstop(struct ktstate *k);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) int aoedev_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) void aoedev_exit(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) struct aoedev *aoedev_by_aoeaddr(ulong maj, int min, int do_alloc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) void aoedev_downdev(struct aoedev *d);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) int aoedev_flush(const char __user *str, size_t size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) void aoe_failbuf(struct aoedev *, struct buf *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) void aoedev_put(struct aoedev *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) int aoenet_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) void aoenet_exit(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) void aoenet_xmit(struct sk_buff_head *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) int is_aoe_netif(struct net_device *ifp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) int set_aoe_iflist(const char __user *str, size_t size);