]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - platform-intel.h
fix mdmon takeover
[thirdparty/mdadm.git] / platform-intel.h
index 92520027ae4548296e9db37c04ec344d2fde1f85..bbdc9f9508b4c95e6322b6ac5e8f776e4c939780 100644 (file)
@@ -17,6 +17,7 @@
  * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
  */
 #include <asm/types.h>
+#include <strings.h>
 
 /* The IMSM OROM Version Table definition */
 struct imsm_orom {
@@ -78,6 +79,42 @@ struct imsm_orom {
        __u32 reserved2;
 } __attribute__((packed));
 
+static inline int imsm_orom_has_raid0(const struct imsm_orom *orom)
+{
+       return !!(orom->rlc & IMSM_OROM_RLC_RAID0);
+}
+static inline int imsm_orom_has_raid1(const struct imsm_orom *orom)
+{
+       return !!(orom->rlc & IMSM_OROM_RLC_RAID1);
+}
+static inline int imsm_orom_has_raid1e(const struct imsm_orom *orom)
+{
+       return !!(orom->rlc & IMSM_OROM_RLC_RAID1E);
+}
+static inline int imsm_orom_has_raid10(const struct imsm_orom *orom)
+{
+       return !!(orom->rlc & IMSM_OROM_RLC_RAID10);
+}
+static inline int imsm_orom_has_raid5(const struct imsm_orom *orom)
+{
+       return !!(orom->rlc & IMSM_OROM_RLC_RAID5);
+}
+
+/**
+ * imsm_orom_has_chunk - check if the orom supports the given chunk size
+ * @orom: orom pointer from find_imsm_orom
+ * @chunk: chunk size in kibibytes
+ */
+static inline int imsm_orom_has_chunk(const struct imsm_orom *orom, int chunk)
+{
+       int fs = ffs(chunk);
+
+       if (!fs)
+               return 0;
+       fs--; /* bit num to bit index */
+       return !!(orom->sss & (1 << (fs - 1)));
+}
+
 struct sys_dev {
        char *path;
        struct sys_dev *next;
@@ -87,3 +124,6 @@ struct sys_dev *find_driver_devices(const char *bus, const char *driver);
 __u16 devpath_to_vendor(const char *dev_path);
 void free_sys_dev(struct sys_dev **list);
 const struct imsm_orom *find_imsm_orom(void);
+int disk_attached_to_hba(int fd, const char *hba_path);
+char *devt_to_devpath(dev_t dev);
+int path_attached_to_hba(const char *disk_path, const char *hba_path);