+/* Data structure for holding info read from sysfs */
+struct sysdev {
+ char name[20];
+ int role;
+ int major, minor;
+ unsigned long long offset, size;
+ int state;
+ int errors;
+ struct sysdev *next;
+};
+struct sysarray {
+ char name[20];
+ struct sysdev *devs;
+ int chunk;
+ unsigned long long component_size;
+ int layout;
+ int level;
+ int spares;
+ int cache_size;
+ int mismatch_cnt;
+};
+/* various details can be requested */
+#define GET_LEVEL 1
+#define GET_LAYOUT 2
+#define GET_COMPONENT 4
+#define GET_CHUNK 8
+#define GET_CACHE 16
+#define GET_MISMATCH 32
+
+#define GET_DEVS 1024 /* gets role, major, minor */
+#define GET_OFFSET 2048
+#define GET_SIZE 4096
+#define GET_STATE 8192
+#define GET_ERROR 16384
+
+/* If fd >= 0, get the array it is open on,
+ * else use devnum. >=0 -> major9. <0.....
+ */
+extern struct sysarray *sysfs_read(int fd, int devnum, unsigned long options);
+extern int sysfs_set_str(struct sysarray *sra, struct sysdev *dev,
+ char *name, char *val);
+extern int sysfs_set_num(struct sysarray *sra, struct sysdev *dev,
+ char *name, unsigned long long val);
+extern int sysfs_get_ll(struct sysarray *sra, struct sysdev *dev,
+ char *name, unsigned long long *val);
+
+
+extern int save_stripes(int *source, unsigned long long *offsets,
+ int raid_disks, int chunk_size, int level, int layout,
+ int nwrites, int *dest,
+ unsigned long long start, unsigned long long length);
+extern int restore_stripes(int *dest, unsigned long long *offsets,
+ int raid_disks, int chunk_size, int level, int layout,
+ int source, unsigned long long read_offset,
+ unsigned long long start, unsigned long long length);
+