aboutsummaryrefslogtreecommitdiffstats
path: root/include/spl-device.h
diff options
context:
space:
mode:
authorbehlendo <behlendo@7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c>2008-08-10 03:50:36 +0000
committerbehlendo <behlendo@7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c>2008-08-10 03:50:36 +0000
commit46c685d0c47df8c6271c8914a03d256a5b1f7bd3 (patch)
treeeb73090abdf89ea2aad7699ad5f918e823969105 /include/spl-device.h
parent877a32e91eb69b15744aa85ad22db385bd522b60 (diff)
Add class / device portability code. Two autoconf tests
were added to cover the 3 possible APIs from 2.6.9 to 2.6.26. We attempt to use the newest interfaces and if not available fallback to the oldest. This a rework of some changes proposed by Ricardo for RHEL4. git-svn-id: https://outreach.scidac.gov/svn/spl/trunk@150 7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c
Diffstat (limited to 'include/spl-device.h')
-rw-r--r--include/spl-device.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/include/spl-device.h b/include/spl-device.h
new file mode 100644
index 000000000..2bbd299b8
--- /dev/null
+++ b/include/spl-device.h
@@ -0,0 +1,53 @@
+#ifndef _SPL_DEVICE_H
+#define _SPL_DEVICE_H
+
+#include <linux/device.h>
+
+/*
+ * Preferred API from 2.6.18 to 2.6.26+
+ */
+#ifdef HAVE_DEVICE_CREATE
+
+typedef struct class spl_class;
+
+#define spl_class_create(mod, name) class_create(mod, name)
+#define spl_class_destroy(cls) class_destroy(cls)
+#define spl_device_create(cls, parent, devt, device, fmt, args...) \
+ device_create(cls, parent, devt, fmt, ## args)
+#define spl_device_destroy(cls, devt) device_destroy(cls, devt)
+
+/*
+ * Preferred API from 2.6.13 to 2.6.17
+ * Depricated in 2.6.18
+ * Removed in 2.6.26
+ */
+#else
+#ifdef HAVE_CLASS_DEVICE_CREATE
+
+typedef struct class spl_class;
+
+#define spl_class_create(mod, name) class_create(mod, name)
+#define spl_class_destroy(cls) class_destroy(cls)
+#define spl_device_create(cls, parent, devt, device, fmt, args...) \
+ class_device_create(cls, parent, devt, device, fmt, ## args)
+#define spl_device_destroy(cls, devt) class_device_destroy(cls, devt)
+
+/*
+ * Prefered API from 2.6.0 to 2.6.12
+ * Depricated in 2.6.13
+ * Removed in 2.6.13
+ */
+#else /* Legacy API */
+
+typedef struct class_simple spl_class;
+
+#define spl_class_create(mod, name) class_simple_create(mod, name)
+#define spl_class_destroy(cls) class_simple_destroy(cls)
+#define spl_device_create(cls, parent, devt, device, fmt, args...) \
+ class_simple_device_add(cls, devt, device, fmt, ## args)
+#define spl_device_destroy(cls, devt) class_simple_device_remove(devt)
+
+#endif
+#endif
+
+#endif /* _SPL_DEVICE_H */