After UAPI header file split [1] all user-kernel interfaces were
placed under include/uapi/.
This patch moves IIO user specific API from:
* include/linux/iio/events.h => include/uapi/linux/iio/events.h
* include/linux/iio/types.h => include/uapi/linux/iio/types.h
Now there is no need for nasty tricks to compile userspace programs
(e.g iio_event_monitor). Just installing the kernel headers with
make headers_install command does the job.
[1] http://lwn.net/Articles/507794/
Signed-off-by: Daniel Baluta <[email protected]>
---
I am not sure if this is the right thing to do. I am still
trying to understand the inners workings of make headers_install.
include/linux/iio/events.h | 30 +-----------
include/linux/iio/types.h | 94 +----------------------------------
include/uapi/linux/Kbuild | 1 +
include/uapi/linux/iio/Kbuild | 3 ++
include/uapi/linux/iio/events.h | 43 ++++++++++++++++
include/uapi/linux/iio/types.h | 106 ++++++++++++++++++++++++++++++++++++++++
6 files changed, 155 insertions(+), 122 deletions(-)
create mode 100644 include/uapi/linux/iio/Kbuild
create mode 100644 include/uapi/linux/iio/events.h
create mode 100644 include/uapi/linux/iio/types.h
diff --git a/include/linux/iio/events.h b/include/linux/iio/events.h
index 03fa332..8ad87d1 100644
--- a/include/linux/iio/events.h
+++ b/include/linux/iio/events.h
@@ -9,22 +9,8 @@
#ifndef _IIO_EVENTS_H_
#define _IIO_EVENTS_H_
-#include <linux/ioctl.h>
-#include <linux/types.h>
#include <linux/iio/types.h>
-
-/**
- * struct iio_event_data - The actual event being pushed to userspace
- * @id: event identifier
- * @timestamp: best estimate of time of event occurrence (often from
- * the interrupt handler)
- */
-struct iio_event_data {
- __u64 id;
- __s64 timestamp;
-};
-
-#define IIO_GET_EVENT_FD_IOCTL _IOR('i', 0x90, int)
+#include <uapi/linux/iio/events.h>
/**
* IIO_EVENT_CODE() - create event identifier
@@ -70,18 +56,4 @@ struct iio_event_data {
#define IIO_UNMOD_EVENT_CODE(chan_type, number, type, direction) \
IIO_EVENT_CODE(chan_type, 0, 0, direction, type, number, 0, 0)
-#define IIO_EVENT_CODE_EXTRACT_TYPE(mask) ((mask >> 56) & 0xFF)
-
-#define IIO_EVENT_CODE_EXTRACT_DIR(mask) ((mask >> 48) & 0x7F)
-
-#define IIO_EVENT_CODE_EXTRACT_CHAN_TYPE(mask) ((mask >> 32) & 0xFF)
-
-/* Event code number extraction depends on which type of event we have.
- * Perhaps review this function in the future*/
-#define IIO_EVENT_CODE_EXTRACT_CHAN(mask) ((__s16)(mask & 0xFFFF))
-#define IIO_EVENT_CODE_EXTRACT_CHAN2(mask) ((__s16)(((mask) >> 16) & 0xFFFF))
-
-#define IIO_EVENT_CODE_EXTRACT_MODIFIER(mask) ((mask >> 40) & 0xFF)
-#define IIO_EVENT_CODE_EXTRACT_DIFF(mask) (((mask) >> 55) & 0x1)
-
#endif
diff --git a/include/linux/iio/types.h b/include/linux/iio/types.h
index 580ed5b..146cda1 100644
--- a/include/linux/iio/types.h
+++ b/include/linux/iio/types.h
@@ -10,97 +10,5 @@
#ifndef _IIO_TYPES_H_
#define _IIO_TYPES_H_
-enum iio_chan_type {
- IIO_VOLTAGE,
- IIO_CURRENT,
- IIO_POWER,
- IIO_ACCEL,
- IIO_ANGL_VEL,
- IIO_MAGN,
- IIO_LIGHT,
- IIO_INTENSITY,
- IIO_PROXIMITY,
- IIO_TEMP,
- IIO_INCLI,
- IIO_ROT,
- IIO_ANGL,
- IIO_TIMESTAMP,
- IIO_CAPACITANCE,
- IIO_ALTVOLTAGE,
- IIO_CCT,
- IIO_PRESSURE,
- IIO_HUMIDITYRELATIVE,
- IIO_ACTIVITY,
- IIO_STEPS,
- IIO_ENERGY,
- IIO_DISTANCE,
- IIO_VELOCITY,
-};
-
-enum iio_modifier {
- IIO_NO_MOD,
- IIO_MOD_X,
- IIO_MOD_Y,
- IIO_MOD_Z,
- IIO_MOD_X_AND_Y,
- IIO_MOD_X_AND_Z,
- IIO_MOD_Y_AND_Z,
- IIO_MOD_X_AND_Y_AND_Z,
- IIO_MOD_X_OR_Y,
- IIO_MOD_X_OR_Z,
- IIO_MOD_Y_OR_Z,
- IIO_MOD_X_OR_Y_OR_Z,
- IIO_MOD_LIGHT_BOTH,
- IIO_MOD_LIGHT_IR,
- IIO_MOD_ROOT_SUM_SQUARED_X_Y,
- IIO_MOD_SUM_SQUARED_X_Y_Z,
- IIO_MOD_LIGHT_CLEAR,
- IIO_MOD_LIGHT_RED,
- IIO_MOD_LIGHT_GREEN,
- IIO_MOD_LIGHT_BLUE,
- IIO_MOD_QUATERNION,
- IIO_MOD_TEMP_AMBIENT,
- IIO_MOD_TEMP_OBJECT,
- IIO_MOD_NORTH_MAGN,
- IIO_MOD_NORTH_TRUE,
- IIO_MOD_NORTH_MAGN_TILT_COMP,
- IIO_MOD_NORTH_TRUE_TILT_COMP,
- IIO_MOD_RUNNING,
- IIO_MOD_JOGGING,
- IIO_MOD_WALKING,
- IIO_MOD_STILL,
- IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z,
-};
-
-enum iio_event_type {
- IIO_EV_TYPE_THRESH,
- IIO_EV_TYPE_MAG,
- IIO_EV_TYPE_ROC,
- IIO_EV_TYPE_THRESH_ADAPTIVE,
- IIO_EV_TYPE_MAG_ADAPTIVE,
- IIO_EV_TYPE_CHANGE,
-};
-
-enum iio_event_info {
- IIO_EV_INFO_ENABLE,
- IIO_EV_INFO_VALUE,
- IIO_EV_INFO_HYSTERESIS,
- IIO_EV_INFO_PERIOD,
-};
-
-enum iio_event_direction {
- IIO_EV_DIR_EITHER,
- IIO_EV_DIR_RISING,
- IIO_EV_DIR_FALLING,
- IIO_EV_DIR_NONE,
-};
-
-#define IIO_VAL_INT 1
-#define IIO_VAL_INT_PLUS_MICRO 2
-#define IIO_VAL_INT_PLUS_NANO 3
-#define IIO_VAL_INT_PLUS_MICRO_DB 4
-#define IIO_VAL_INT_MULTIPLE 5
-#define IIO_VAL_FRACTIONAL 10
-#define IIO_VAL_FRACTIONAL_LOG2 11
-
+#include <uapi/linux/iio/types.h>
#endif /* _IIO_TYPES_H_ */
diff --git a/include/uapi/linux/Kbuild b/include/uapi/linux/Kbuild
index 00b10002..5bfc5bd 100644
--- a/include/uapi/linux/Kbuild
+++ b/include/uapi/linux/Kbuild
@@ -6,6 +6,7 @@ header-y += caif/
header-y += dvb/
header-y += hdlc/
header-y += hsi/
+header-y += iio/
header-y += isdn/
header-y += mmc/
header-y += nfsd/
diff --git a/include/uapi/linux/iio/Kbuild b/include/uapi/linux/iio/Kbuild
new file mode 100644
index 0000000..86f76d8
--- /dev/null
+++ b/include/uapi/linux/iio/Kbuild
@@ -0,0 +1,3 @@
+# UAPI Header export list
+header-y += events.h
+header-y += types.h
diff --git a/include/uapi/linux/iio/events.h b/include/uapi/linux/iio/events.h
new file mode 100644
index 0000000..4b06477
--- /dev/null
+++ b/include/uapi/linux/iio/events.h
@@ -0,0 +1,43 @@
+/* The industrial I/O - event passing to userspace
+ *
+ * Copyright (c) 2008-2011 Jonathan Cameron
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+#ifndef _UAPI_IIO_EVENTS_H_
+#define _UAPI_IIO_EVENTS_H_
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/**
+ * struct iio_event_data - The actual event being pushed to userspace
+ * @id: event identifier
+ * @timestamp: best estimate of time of event occurrence (often from
+ * the interrupt handler)
+ */
+struct iio_event_data {
+ __u64 id;
+ __s64 timestamp;
+};
+
+#define IIO_GET_EVENT_FD_IOCTL _IOR('i', 0x90, int)
+
+#define IIO_EVENT_CODE_EXTRACT_TYPE(mask) ((mask >> 56) & 0xFF)
+
+#define IIO_EVENT_CODE_EXTRACT_DIR(mask) ((mask >> 48) & 0x7F)
+
+#define IIO_EVENT_CODE_EXTRACT_CHAN_TYPE(mask) ((mask >> 32) & 0xFF)
+
+/* Event code number extraction depends on which type of event we have.
+ * Perhaps review this function in the future*/
+#define IIO_EVENT_CODE_EXTRACT_CHAN(mask) ((__s16)(mask & 0xFFFF))
+#define IIO_EVENT_CODE_EXTRACT_CHAN2(mask) ((__s16)(((mask) >> 16) & 0xFFFF))
+
+#define IIO_EVENT_CODE_EXTRACT_MODIFIER(mask) ((mask >> 40) & 0xFF)
+#define IIO_EVENT_CODE_EXTRACT_DIFF(mask) (((mask) >> 55) & 0x1)
+
+#endif /* _UAPI_IIO_EVENTS_H_ */
+
diff --git a/include/uapi/linux/iio/types.h b/include/uapi/linux/iio/types.h
new file mode 100644
index 0000000..1aa8dcf
--- /dev/null
+++ b/include/uapi/linux/iio/types.h
@@ -0,0 +1,106 @@
+/* industrial I/O data types needed both in and out of kernel
+ *
+ * Copyright (c) 2008 Jonathan Cameron
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+
+#ifndef _UAPI_IIO_TYPES_H_
+#define _UAPI_IIO_TYPES_H_
+
+enum iio_chan_type {
+ IIO_VOLTAGE,
+ IIO_CURRENT,
+ IIO_POWER,
+ IIO_ACCEL,
+ IIO_ANGL_VEL,
+ IIO_MAGN,
+ IIO_LIGHT,
+ IIO_INTENSITY,
+ IIO_PROXIMITY,
+ IIO_TEMP,
+ IIO_INCLI,
+ IIO_ROT,
+ IIO_ANGL,
+ IIO_TIMESTAMP,
+ IIO_CAPACITANCE,
+ IIO_ALTVOLTAGE,
+ IIO_CCT,
+ IIO_PRESSURE,
+ IIO_HUMIDITYRELATIVE,
+ IIO_ACTIVITY,
+ IIO_STEPS,
+ IIO_ENERGY,
+ IIO_DISTANCE,
+ IIO_VELOCITY,
+};
+
+enum iio_modifier {
+ IIO_NO_MOD,
+ IIO_MOD_X,
+ IIO_MOD_Y,
+ IIO_MOD_Z,
+ IIO_MOD_X_AND_Y,
+ IIO_MOD_X_AND_Z,
+ IIO_MOD_Y_AND_Z,
+ IIO_MOD_X_AND_Y_AND_Z,
+ IIO_MOD_X_OR_Y,
+ IIO_MOD_X_OR_Z,
+ IIO_MOD_Y_OR_Z,
+ IIO_MOD_X_OR_Y_OR_Z,
+ IIO_MOD_LIGHT_BOTH,
+ IIO_MOD_LIGHT_IR,
+ IIO_MOD_ROOT_SUM_SQUARED_X_Y,
+ IIO_MOD_SUM_SQUARED_X_Y_Z,
+ IIO_MOD_LIGHT_CLEAR,
+ IIO_MOD_LIGHT_RED,
+ IIO_MOD_LIGHT_GREEN,
+ IIO_MOD_LIGHT_BLUE,
+ IIO_MOD_QUATERNION,
+ IIO_MOD_TEMP_AMBIENT,
+ IIO_MOD_TEMP_OBJECT,
+ IIO_MOD_NORTH_MAGN,
+ IIO_MOD_NORTH_TRUE,
+ IIO_MOD_NORTH_MAGN_TILT_COMP,
+ IIO_MOD_NORTH_TRUE_TILT_COMP,
+ IIO_MOD_RUNNING,
+ IIO_MOD_JOGGING,
+ IIO_MOD_WALKING,
+ IIO_MOD_STILL,
+ IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z,
+};
+
+enum iio_event_type {
+ IIO_EV_TYPE_THRESH,
+ IIO_EV_TYPE_MAG,
+ IIO_EV_TYPE_ROC,
+ IIO_EV_TYPE_THRESH_ADAPTIVE,
+ IIO_EV_TYPE_MAG_ADAPTIVE,
+ IIO_EV_TYPE_CHANGE,
+};
+
+enum iio_event_info {
+ IIO_EV_INFO_ENABLE,
+ IIO_EV_INFO_VALUE,
+ IIO_EV_INFO_HYSTERESIS,
+ IIO_EV_INFO_PERIOD,
+};
+
+enum iio_event_direction {
+ IIO_EV_DIR_EITHER,
+ IIO_EV_DIR_RISING,
+ IIO_EV_DIR_FALLING,
+ IIO_EV_DIR_NONE,
+};
+
+#define IIO_VAL_INT 1
+#define IIO_VAL_INT_PLUS_MICRO 2
+#define IIO_VAL_INT_PLUS_NANO 3
+#define IIO_VAL_INT_PLUS_MICRO_DB 4
+#define IIO_VAL_INT_MULTIPLE 5
+#define IIO_VAL_FRACTIONAL 10
+#define IIO_VAL_FRACTIONAL_LOG2 11
+
+#endif /* _UAPI_IIO_TYPES_H_ */
--
1.9.1
On 02/09/2015 05:49 PM, Daniel Baluta wrote:
> After UAPI header file split [1] all user-kernel interfaces were
> placed under include/uapi/.
>
> This patch moves IIO user specific API from:
> * include/linux/iio/events.h => include/uapi/linux/iio/events.h
> * include/linux/iio/types.h => include/uapi/linux/iio/types.h
>
> Now there is no need for nasty tricks to compile userspace programs
> (e.g iio_event_monitor). Just installing the kernel headers with
> make headers_install command does the job.
>
> [1] http://lwn.net/Articles/507794/
Thanks for taking care of this, this is something that should have done a
while ago.
[...]
> index 580ed5b..146cda1 100644
> --- a/include/linux/iio/types.h
> +++ b/include/linux/iio/types.h
> @@ -10,97 +10,5 @@
> #ifndef _IIO_TYPES_H_
> #define _IIO_TYPES_H_
>
> -enum iio_chan_type {
> - IIO_VOLTAGE,
> - IIO_CURRENT,
> - IIO_POWER,
> - IIO_ACCEL,
> - IIO_ANGL_VEL,
> - IIO_MAGN,
> - IIO_LIGHT,
> - IIO_INTENSITY,
> - IIO_PROXIMITY,
> - IIO_TEMP,
> - IIO_INCLI,
> - IIO_ROT,
> - IIO_ANGL,
> - IIO_TIMESTAMP,
> - IIO_CAPACITANCE,
> - IIO_ALTVOLTAGE,
> - IIO_CCT,
> - IIO_PRESSURE,
> - IIO_HUMIDITYRELATIVE,
> - IIO_ACTIVITY,
> - IIO_STEPS,
> - IIO_ENERGY,
> - IIO_DISTANCE,
> - IIO_VELOCITY,
> -};
> -
> -enum iio_modifier {
> - IIO_NO_MOD,
> - IIO_MOD_X,
> - IIO_MOD_Y,
> - IIO_MOD_Z,
> - IIO_MOD_X_AND_Y,
> - IIO_MOD_X_AND_Z,
> - IIO_MOD_Y_AND_Z,
> - IIO_MOD_X_AND_Y_AND_Z,
> - IIO_MOD_X_OR_Y,
> - IIO_MOD_X_OR_Z,
> - IIO_MOD_Y_OR_Z,
> - IIO_MOD_X_OR_Y_OR_Z,
> - IIO_MOD_LIGHT_BOTH,
> - IIO_MOD_LIGHT_IR,
> - IIO_MOD_ROOT_SUM_SQUARED_X_Y,
> - IIO_MOD_SUM_SQUARED_X_Y_Z,
> - IIO_MOD_LIGHT_CLEAR,
> - IIO_MOD_LIGHT_RED,
> - IIO_MOD_LIGHT_GREEN,
> - IIO_MOD_LIGHT_BLUE,
> - IIO_MOD_QUATERNION,
> - IIO_MOD_TEMP_AMBIENT,
> - IIO_MOD_TEMP_OBJECT,
> - IIO_MOD_NORTH_MAGN,
> - IIO_MOD_NORTH_TRUE,
> - IIO_MOD_NORTH_MAGN_TILT_COMP,
> - IIO_MOD_NORTH_TRUE_TILT_COMP,
> - IIO_MOD_RUNNING,
> - IIO_MOD_JOGGING,
> - IIO_MOD_WALKING,
> - IIO_MOD_STILL,
> - IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z,
> -};
> -
> -enum iio_event_type {
> - IIO_EV_TYPE_THRESH,
> - IIO_EV_TYPE_MAG,
> - IIO_EV_TYPE_ROC,
> - IIO_EV_TYPE_THRESH_ADAPTIVE,
> - IIO_EV_TYPE_MAG_ADAPTIVE,
> - IIO_EV_TYPE_CHANGE,
> -};
I think everything in this file below is not part of the ABI and should not
be exported to userspace.
> -
> -enum iio_event_info {
> - IIO_EV_INFO_ENABLE,
> - IIO_EV_INFO_VALUE,
> - IIO_EV_INFO_HYSTERESIS,
> - IIO_EV_INFO_PERIOD,
> -};
> -
> -enum iio_event_direction {
> - IIO_EV_DIR_EITHER,
> - IIO_EV_DIR_RISING,
> - IIO_EV_DIR_FALLING,
> - IIO_EV_DIR_NONE,
> -};
> -
> -#define IIO_VAL_INT 1
> -#define IIO_VAL_INT_PLUS_MICRO 2
> -#define IIO_VAL_INT_PLUS_NANO 3
> -#define IIO_VAL_INT_PLUS_MICRO_DB 4
> -#define IIO_VAL_INT_MULTIPLE 5
> -#define IIO_VAL_FRACTIONAL 10
> -#define IIO_VAL_FRACTIONAL_LOG2 11
> -
[...]
On Mon, Feb 9, 2015 at 7:05 PM, Lars-Peter Clausen <[email protected]> wrote:
> On 02/09/2015 05:49 PM, Daniel Baluta wrote:
>>
>> After UAPI header file split [1] all user-kernel interfaces were
>> placed under include/uapi/.
>>
>> This patch moves IIO user specific API from:
>> * include/linux/iio/events.h => include/uapi/linux/iio/events.h
>> * include/linux/iio/types.h => include/uapi/linux/iio/types.h
>>
>> Now there is no need for nasty tricks to compile userspace programs
>> (e.g iio_event_monitor). Just installing the kernel headers with
>> make headers_install command does the job.
>>
>> [1] http://lwn.net/Articles/507794/
>
>
> Thanks for taking care of this, this is something that should have done a
> while ago.
Hi Lars,
Thanks for the feedback!
>
> [...]
>
>> index 580ed5b..146cda1 100644
<snip>
>
>
> I think everything in this file below is not part of the ABI and should not
> be exported to userspace.
I agree about iio_event_info and IIO_VAL_* constants.
>
>> -
>> -enum iio_event_info {
>> - IIO_EV_INFO_ENABLE,
>> - IIO_EV_INFO_VALUE,
>> - IIO_EV_INFO_HYSTERESIS,
>> - IIO_EV_INFO_PERIOD,
>> -};
>> -
>> -enum iio_event_direction {
>> - IIO_EV_DIR_EITHER,
>> - IIO_EV_DIR_RISING,
>> - IIO_EV_DIR_FALLING,
>> - IIO_EV_DIR_NONE,
>> -};
iio_event_direction is exported to userspace via IIO_EVENT_CODE and
I think it belongs to this file.
>> -
>> -#define IIO_VAL_INT 1
>> -#define IIO_VAL_INT_PLUS_MICRO 2
>> -#define IIO_VAL_INT_PLUS_NANO 3
>> -#define IIO_VAL_INT_PLUS_MICRO_DB 4
>> -#define IIO_VAL_INT_MULTIPLE 5
>> -#define IIO_VAL_FRACTIONAL 10
>> -#define IIO_VAL_FRACTIONAL_LOG2 11
>> -
I will send v2 in few hours, hopefully I'll get more feedback meanwhile.
Do you thing should I remove the RFC tag?
thanks,
Daniel.
On 02/10/2015 09:05 AM, Daniel Baluta wrote:
> On Mon, Feb 9, 2015 at 7:05 PM, Lars-Peter Clausen <[email protected]> wrote:
>> On 02/09/2015 05:49 PM, Daniel Baluta wrote:
>>>
>>> After UAPI header file split [1] all user-kernel interfaces were
>>> placed under include/uapi/.
>>>
>>> This patch moves IIO user specific API from:
>>> * include/linux/iio/events.h => include/uapi/linux/iio/events.h
>>> * include/linux/iio/types.h => include/uapi/linux/iio/types.h
>>>
>>> Now there is no need for nasty tricks to compile userspace programs
>>> (e.g iio_event_monitor). Just installing the kernel headers with
>>> make headers_install command does the job.
>>>
>>> [1] http://lwn.net/Articles/507794/
>>
>>
>> Thanks for taking care of this, this is something that should have done a
>> while ago.
>
> Hi Lars,
>
> Thanks for the feedback!
>>
>> [...]
>>
>>> index 580ed5b..146cda1 100644
>
> <snip>
>
>>
>>
>> I think everything in this file below is not part of the ABI and should not
>> be exported to userspace.
>
> I agree about iio_event_info and IIO_VAL_* constants.
>
>>
>>> -
>>> -enum iio_event_info {
>>> - IIO_EV_INFO_ENABLE,
>>> - IIO_EV_INFO_VALUE,
>>> - IIO_EV_INFO_HYSTERESIS,
>>> - IIO_EV_INFO_PERIOD,
>>> -};
>>> -
>>> -enum iio_event_direction {
>>> - IIO_EV_DIR_EITHER,
>>> - IIO_EV_DIR_RISING,
>>> - IIO_EV_DIR_FALLING,
>>> - IIO_EV_DIR_NONE,
>>> -};
>
> iio_event_direction is exported to userspace via IIO_EVENT_CODE and
> I think it belongs to this file.
Right.
>
>>> -
>>> -#define IIO_VAL_INT 1
>>> -#define IIO_VAL_INT_PLUS_MICRO 2
>>> -#define IIO_VAL_INT_PLUS_NANO 3
>>> -#define IIO_VAL_INT_PLUS_MICRO_DB 4
>>> -#define IIO_VAL_INT_MULTIPLE 5
>>> -#define IIO_VAL_FRACTIONAL 10
>>> -#define IIO_VAL_FRACTIONAL_LOG2 11
>>> -
>
> I will send v2 in few hours, hopefully I'll get more feedback meanwhile.
>
> Do you thing should I remove the RFC tag?
Patch looks good to me.