Merge branch 'for-2.6.27' of git://linux-nfs.org/~bfields/linux
[pandora-kernel.git] / include / linux / raid_class.h
index a71123c..6b537f1 100644 (file)
@@ -1,4 +1,9 @@
 /*
+ * raid_class.h - a generic raid visualisation class
+ *
+ * Copyright (c) 2005 - James Bottomley <James.Bottomley@steeleye.com>
+ *
+ * This file is licensed under GPLv2
  */
 #include <linux/transport_class.h>
 
@@ -14,46 +19,64 @@ struct raid_function_template {
 };
 
 enum raid_state {
-       RAID_ACTIVE = 1,
-       RAID_DEGRADED,
-       RAID_RESYNCING,
-       RAID_OFFLINE,
+       RAID_STATE_UNKNOWN = 0,
+       RAID_STATE_ACTIVE,
+       RAID_STATE_DEGRADED,
+       RAID_STATE_RESYNCING,
+       RAID_STATE_OFFLINE,
+};
+
+enum raid_level {
+       RAID_LEVEL_UNKNOWN = 0,
+       RAID_LEVEL_LINEAR,
+       RAID_LEVEL_0,
+       RAID_LEVEL_1,
+       RAID_LEVEL_10,
+       RAID_LEVEL_3,
+       RAID_LEVEL_4,
+       RAID_LEVEL_5,
+       RAID_LEVEL_50,
+       RAID_LEVEL_6,
 };
 
 struct raid_data {
        struct list_head component_list;
        int component_count;
-       int level;
+       enum raid_level level;
        enum raid_state state;
        int resync;
 };
 
+/* resync complete goes from 0 to this */
+#define RAID_MAX_RESYNC                (10000)
+
 #define DEFINE_RAID_ATTRIBUTE(type, attr)                                    \
 static inline void                                                           \
 raid_set_##attr(struct raid_template *r, struct device *dev, type value) {    \
-       struct class_device *cdev =                                           \
+       struct device *device =                                               \
                attribute_container_find_class_device(&r->raid_attrs.ac, dev);\
        struct raid_data *rd;                                                 \
-       BUG_ON(!cdev);                                                        \
-       rd = class_get_devdata(cdev);                                         \
+       BUG_ON(!device);                                                      \
+       rd = dev_get_drvdata(device);                                         \
        rd->attr = value;                                                     \
 }                                                                            \
 static inline type                                                           \
 raid_get_##attr(struct raid_template *r, struct device *dev) {               \
-       struct class_device *cdev =                                           \
+       struct device *device =                                               \
                attribute_container_find_class_device(&r->raid_attrs.ac, dev);\
        struct raid_data *rd;                                                 \
-       BUG_ON(!cdev);                                                        \
-       rd = class_get_devdata(cdev);                                         \
+       BUG_ON(!device);                                                      \
+       rd = dev_get_drvdata(device);                                         \
        return rd->attr;                                                      \
 }
 
-DEFINE_RAID_ATTRIBUTE(int, level)
+DEFINE_RAID_ATTRIBUTE(enum raid_level, level)
 DEFINE_RAID_ATTRIBUTE(int, resync)
 DEFINE_RAID_ATTRIBUTE(enum raid_state, state)
        
 struct raid_template *raid_class_attach(struct raid_function_template *);
 void raid_class_release(struct raid_template *);
 
-void raid_component_add(struct raid_template *, struct device *,
-                       struct device *);
+int __must_check raid_component_add(struct raid_template *, struct device *,
+                                   struct device *);
+