aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-05-22 19:34:21 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-05-22 19:34:21 -0400
commitfb09bafda67041b74a668dc9d77735e36bd33d3b (patch)
tree2dd32b65062a95045468fdcab366ecdb8e4fcac6 /include
parent94b5aff4c6f72fee6b0f49d49e4fa8b204e8ded9 (diff)
parentc3c6cc91b0ae7b3d598488ad0b593bafba4a0817 (diff)
Merge tag 'staging-3.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging
Pull staging tree changes from Greg Kroah-Hartman: "Here is the big staging tree pull request for the 3.5-rc1 merge window. Loads of changes here, and we just narrowly added more lines than we added: 622 files changed, 28356 insertions(+), 26059 deletions(-) But, good news is that there is a number of subsystems that moved out of the staging tree, to their respective "real" portions of the kernel. Code that moved out was: - iio core code - mei driver - vme core and bridge drivers There was one broken network driver that moved into staging as a step before it is removed from the tree (pc300), and there was a few new drivers added to the tree: - new iio drivers - gdm72xx wimax USB driver - ipack subsystem and 2 drivers All of the movements around have acks from the various subsystem maintainers, and all of this has been in the linux-next tree for a while. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>" Fixed up various trivial conflicts, along with a non-trivial one found in -next and pointed out by Olof Johanssen: a clean - but incorrect - merge of the arch/arm/boot/dts/at91sam9g20.dtsi file. Fix up manually as per Stephen Rothwell. * tag 'staging-3.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: (536 commits) Staging: bcm: Remove two unused variables from Adapter.h Staging: bcm: Removes the volatile type definition from Adapter.h Staging: bcm: Rename all "INT" to "int" in Adapter.h Staging: bcm: Fix warning: __packed vs. __attribute__((packed)) in Adapter.h Staging: bcm: Correctly format all comments in Adapter.h Staging: bcm: Fix all whitespace issues in Adapter.h Staging: bcm: Properly format braces in Adapter.h Staging: ipack/bridges/tpci200: remove unneeded casts Staging: ipack/bridges/tpci200: remove TPCI200_SHORTNAME constant Staging: ipack: remove board_name and bus_name fields from struct ipack_device Staging: ipack: improve the register of a bus and a device in the bus. staging: comedi: cleanup all the comedi_driver 'detach' functions staging: comedi: remove all 'default N' in Kconfig staging: line6/config.h: Delete unused header staging: gdm72xx depends on NET staging: gdm72xx: Set up parent link in sysfs for gdm72xx devices staging: drm/omap: initial dmabuf/prime import support staging: drm/omap: dmabuf/prime mmap support pstore/ram: Add ECC support pstore/ram: Switch to persistent_ram routines ...
Diffstat (limited to 'include')
-rw-r--r--include/linux/Kbuild2
-rw-r--r--include/linux/alarmtimer.h3
-rw-r--r--include/linux/iio/buffer.h191
-rw-r--r--include/linux/iio/consumer.h96
-rw-r--r--include/linux/iio/driver.h34
-rw-r--r--include/linux/iio/events.h105
-rw-r--r--include/linux/iio/iio.h492
-rw-r--r--include/linux/iio/kfifo_buf.h8
-rw-r--r--include/linux/iio/machine.h24
-rw-r--r--include/linux/iio/sysfs.h117
-rw-r--r--include/linux/iio/trigger.h119
-rw-r--r--include/linux/iio/trigger_consumer.h52
-rw-r--r--include/linux/iio/types.h55
-rw-r--r--include/linux/mei.h110
-rw-r--r--include/linux/platform_data/at91_adc.h61
-rw-r--r--include/linux/pstore_ram.h98
-rw-r--r--include/linux/ramoops.h17
-rw-r--r--include/linux/uuid.h4
-rw-r--r--include/linux/vme.h174
19 files changed, 1745 insertions, 17 deletions
diff --git a/include/linux/Kbuild b/include/linux/Kbuild
index 0237b84ba541..39737839ce29 100644
--- a/include/linux/Kbuild
+++ b/include/linux/Kbuild
@@ -238,6 +238,7 @@ header-y += map_to_7segment.h
238header-y += matroxfb.h 238header-y += matroxfb.h
239header-y += mdio.h 239header-y += mdio.h
240header-y += media.h 240header-y += media.h
241header-y += mei.h
241header-y += mempolicy.h 242header-y += mempolicy.h
242header-y += meye.h 243header-y += meye.h
243header-y += mii.h 244header-y += mii.h
@@ -380,6 +381,7 @@ header-y += unistd.h
380header-y += usbdevice_fs.h 381header-y += usbdevice_fs.h
381header-y += utime.h 382header-y += utime.h
382header-y += utsname.h 383header-y += utsname.h
384header-y += uuid.h
383header-y += uvcvideo.h 385header-y += uvcvideo.h
384header-y += v4l2-mediabus.h 386header-y += v4l2-mediabus.h
385header-y += v4l2-subdev.h 387header-y += v4l2-subdev.h
diff --git a/include/linux/alarmtimer.h b/include/linux/alarmtimer.h
index 975009e1cbe6..96c5c249b086 100644
--- a/include/linux/alarmtimer.h
+++ b/include/linux/alarmtimer.h
@@ -76,4 +76,7 @@ static inline int alarmtimer_callback_running(struct alarm *timer)
76} 76}
77 77
78 78
79/* Provide way to access the rtc device being used by alarmtimers */
80struct rtc_device *alarmtimer_get_rtcdev(void);
81
79#endif 82#endif
diff --git a/include/linux/iio/buffer.h b/include/linux/iio/buffer.h
new file mode 100644
index 000000000000..fb0fe46fd659
--- /dev/null
+++ b/include/linux/iio/buffer.h
@@ -0,0 +1,191 @@
1/* The industrial I/O core - generic buffer interfaces.
2 *
3 * Copyright (c) 2008 Jonathan Cameron
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 as published by
7 * the Free Software Foundation.
8 */
9
10#ifndef _IIO_BUFFER_GENERIC_H_
11#define _IIO_BUFFER_GENERIC_H_
12#include <linux/sysfs.h>
13#include <linux/iio/iio.h>
14
15#ifdef CONFIG_IIO_BUFFER
16
17struct iio_buffer;
18
19/**
20 * struct iio_buffer_access_funcs - access functions for buffers.
21 * @store_to: actually store stuff to the buffer
22 * @read_first_n: try to get a specified number of bytes (must exist)
23 * @request_update: if a parameter change has been marked, update underlying
24 * storage.
25 * @get_bytes_per_datum:get current bytes per datum
26 * @set_bytes_per_datum:set number of bytes per datum
27 * @get_length: get number of datums in buffer
28 * @set_length: set number of datums in buffer
29 *
30 * The purpose of this structure is to make the buffer element
31 * modular as event for a given driver, different usecases may require
32 * different buffer designs (space efficiency vs speed for example).
33 *
34 * It is worth noting that a given buffer implementation may only support a
35 * small proportion of these functions. The core code 'should' cope fine with
36 * any of them not existing.
37 **/
38struct iio_buffer_access_funcs {
39 int (*store_to)(struct iio_buffer *buffer, u8 *data, s64 timestamp);
40 int (*read_first_n)(struct iio_buffer *buffer,
41 size_t n,
42 char __user *buf);
43
44 int (*request_update)(struct iio_buffer *buffer);
45
46 int (*get_bytes_per_datum)(struct iio_buffer *buffer);
47 int (*set_bytes_per_datum)(struct iio_buffer *buffer, size_t bpd);
48 int (*get_length)(struct iio_buffer *buffer);
49 int (*set_length)(struct iio_buffer *buffer, int length);
50};
51
52/**
53 * struct iio_buffer - general buffer structure
54 * @length: [DEVICE] number of datums in buffer
55 * @bytes_per_datum: [DEVICE] size of individual datum including timestamp
56 * @scan_el_attrs: [DRIVER] control of scan elements if that scan mode
57 * control method is used
58 * @scan_mask: [INTERN] bitmask used in masking scan mode elements
59 * @scan_timestamp: [INTERN] does the scan mode include a timestamp
60 * @access: [DRIVER] buffer access functions associated with the
61 * implementation.
62 * @scan_el_dev_attr_list:[INTERN] list of scan element related attributes.
63 * @scan_el_group: [DRIVER] attribute group for those attributes not
64 * created from the iio_chan_info array.
65 * @pollq: [INTERN] wait queue to allow for polling on the buffer.
66 * @stufftoread: [INTERN] flag to indicate new data.
67 * @demux_list: [INTERN] list of operations required to demux the scan.
68 * @demux_bounce: [INTERN] buffer for doing gather from incoming scan.
69 **/
70struct iio_buffer {
71 int length;
72 int bytes_per_datum;
73 struct attribute_group *scan_el_attrs;
74 long *scan_mask;
75 bool scan_timestamp;
76 const struct iio_buffer_access_funcs *access;
77 struct list_head scan_el_dev_attr_list;
78 struct attribute_group scan_el_group;
79 wait_queue_head_t pollq;
80 bool stufftoread;
81 const struct attribute_group *attrs;
82 struct list_head demux_list;
83 unsigned char *demux_bounce;
84};
85
86/**
87 * iio_buffer_init() - Initialize the buffer structure
88 * @buffer: buffer to be initialized
89 **/
90void iio_buffer_init(struct iio_buffer *buffer);
91
92/**
93 * __iio_update_buffer() - update common elements of buffers
94 * @buffer: buffer that is the event source
95 * @bytes_per_datum: size of individual datum including timestamp
96 * @length: number of datums in buffer
97 **/
98static inline void __iio_update_buffer(struct iio_buffer *buffer,
99 int bytes_per_datum, int length)
100{
101 buffer->bytes_per_datum = bytes_per_datum;
102 buffer->length = length;
103}
104
105int iio_scan_mask_query(struct iio_dev *indio_dev,
106 struct iio_buffer *buffer, int bit);
107
108/**
109 * iio_scan_mask_set() - set particular bit in the scan mask
110 * @buffer: the buffer whose scan mask we are interested in
111 * @bit: the bit to be set.
112 **/
113int iio_scan_mask_set(struct iio_dev *indio_dev,
114 struct iio_buffer *buffer, int bit);
115
116/**
117 * iio_push_to_buffer() - push to a registered buffer.
118 * @buffer: IIO buffer structure for device
119 * @scan: Full scan.
120 * @timestamp:
121 */
122int iio_push_to_buffer(struct iio_buffer *buffer, unsigned char *data,
123 s64 timestamp);
124
125int iio_update_demux(struct iio_dev *indio_dev);
126
127/**
128 * iio_buffer_register() - register the buffer with IIO core
129 * @indio_dev: device with the buffer to be registered
130 **/
131int iio_buffer_register(struct iio_dev *indio_dev,
132 const struct iio_chan_spec *channels,
133 int num_channels);
134
135/**
136 * iio_buffer_unregister() - unregister the buffer from IIO core
137 * @indio_dev: the device with the buffer to be unregistered
138 **/
139void iio_buffer_unregister(struct iio_dev *indio_dev);
140
141/**
142 * iio_buffer_read_length() - attr func to get number of datums in the buffer
143 **/
144ssize_t iio_buffer_read_length(struct device *dev,
145 struct device_attribute *attr,
146 char *buf);
147/**
148 * iio_buffer_write_length() - attr func to set number of datums in the buffer
149 **/
150ssize_t iio_buffer_write_length(struct device *dev,
151 struct device_attribute *attr,
152 const char *buf,
153 size_t len);
154/**
155 * iio_buffer_store_enable() - attr to turn the buffer on
156 **/
157ssize_t iio_buffer_store_enable(struct device *dev,
158 struct device_attribute *attr,
159 const char *buf,
160 size_t len);
161/**
162 * iio_buffer_show_enable() - attr to see if the buffer is on
163 **/
164ssize_t iio_buffer_show_enable(struct device *dev,
165 struct device_attribute *attr,
166 char *buf);
167#define IIO_BUFFER_LENGTH_ATTR DEVICE_ATTR(length, S_IRUGO | S_IWUSR, \
168 iio_buffer_read_length, \
169 iio_buffer_write_length)
170
171#define IIO_BUFFER_ENABLE_ATTR DEVICE_ATTR(enable, S_IRUGO | S_IWUSR, \
172 iio_buffer_show_enable, \
173 iio_buffer_store_enable)
174
175int iio_sw_buffer_preenable(struct iio_dev *indio_dev);
176
177#else /* CONFIG_IIO_BUFFER */
178
179static inline int iio_buffer_register(struct iio_dev *indio_dev,
180 struct iio_chan_spec *channels,
181 int num_channels)
182{
183 return 0;
184}
185
186static inline void iio_buffer_unregister(struct iio_dev *indio_dev)
187{};
188
189#endif /* CONFIG_IIO_BUFFER */
190
191#endif /* _IIO_BUFFER_GENERIC_H_ */
diff --git a/include/linux/iio/consumer.h b/include/linux/iio/consumer.h
new file mode 100644
index 000000000000..1a15e560a5a1
--- /dev/null
+++ b/include/linux/iio/consumer.h
@@ -0,0 +1,96 @@
1/*
2 * Industrial I/O in kernel consumer interface
3 *
4 * Copyright (c) 2011 Jonathan Cameron
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 as published by
8 * the Free Software Foundation.
9 */
10#ifndef _IIO_INKERN_CONSUMER_H_
11#define _IIO_INKERN_CONSUMER_H
12#include <linux/iio/types.h>
13
14struct iio_dev;
15struct iio_chan_spec;
16
17/**
18 * struct iio_channel - everything needed for a consumer to use a channel
19 * @indio_dev: Device on which the channel exists.
20 * @channel: Full description of the channel.
21 */
22struct iio_channel {
23 struct iio_dev *indio_dev;
24 const struct iio_chan_spec *channel;
25};
26
27/**
28 * iio_channel_get() - get description of all that is needed to access channel.
29 * @name: Unique name of the device as provided in the iio_map
30 * with which the desired provider to consumer mapping
31 * was registered.
32 * @consumer_channel: Unique name to identify the channel on the consumer
33 * side. This typically describes the channels use within
34 * the consumer. E.g. 'battery_voltage'
35 */
36struct iio_channel *iio_st_channel_get(const char *name,
37 const char *consumer_channel);
38
39/**
40 * iio_st_channel_release() - release channels obtained via iio_st_channel_get
41 * @chan: The channel to be released.
42 */
43void iio_st_channel_release(struct iio_channel *chan);
44
45/**
46 * iio_st_channel_get_all() - get all channels associated with a client
47 * @name: name of consumer device.
48 *
49 * Returns an array of iio_channel structures terminated with one with
50 * null iio_dev pointer.
51 * This function is used by fairly generic consumers to get all the
52 * channels registered as having this consumer.
53 */
54struct iio_channel *iio_st_channel_get_all(const char *name);
55
56/**
57 * iio_st_channel_release_all() - reverse iio_st_get_all
58 * @chan: Array of channels to be released.
59 */
60void iio_st_channel_release_all(struct iio_channel *chan);
61
62/**
63 * iio_st_read_channel_raw() - read from a given channel
64 * @channel: The channel being queried.
65 * @val: Value read back.
66 *
67 * Note raw reads from iio channels are in adc counts and hence
68 * scale will need to be applied if standard units required.
69 */
70int iio_st_read_channel_raw(struct iio_channel *chan,
71 int *val);
72
73/**
74 * iio_st_get_channel_type() - get the type of a channel
75 * @channel: The channel being queried.
76 * @type: The type of the channel.
77 *
78 * returns the enum iio_chan_type of the channel
79 */
80int iio_st_get_channel_type(struct iio_channel *channel,
81 enum iio_chan_type *type);
82
83/**
84 * iio_st_read_channel_scale() - read the scale value for a channel
85 * @channel: The channel being queried.
86 * @val: First part of value read back.
87 * @val2: Second part of value read back.
88 *
89 * Note returns a description of what is in val and val2, such
90 * as IIO_VAL_INT_PLUS_MICRO telling us we have a value of val
91 * + val2/1e6
92 */
93int iio_st_read_channel_scale(struct iio_channel *chan, int *val,
94 int *val2);
95
96#endif
diff --git a/include/linux/iio/driver.h b/include/linux/iio/driver.h
new file mode 100644
index 000000000000..a4f8b2e05af5
--- /dev/null
+++ b/include/linux/iio/driver.h
@@ -0,0 +1,34 @@
1/*
2 * Industrial I/O in kernel access map interface.
3 *
4 * Copyright (c) 2011 Jonathan Cameron
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 as published by
8 * the Free Software Foundation.
9 */
10
11#ifndef _IIO_INKERN_H_
12#define _IIO_INKERN_H_
13
14struct iio_map;
15
16/**
17 * iio_map_array_register() - tell the core about inkernel consumers
18 * @indio_dev: provider device
19 * @map: array of mappings specifying association of channel with client
20 */
21int iio_map_array_register(struct iio_dev *indio_dev,
22 struct iio_map *map);
23
24/**
25 * iio_map_array_unregister() - tell the core to remove consumer mappings
26 * @indio_dev: provider device
27 * @map: array of mappings to remove. Note these must have same memory
28 * addresses as those originally added not just equal parameter
29 * values.
30 */
31int iio_map_array_unregister(struct iio_dev *indio_dev,
32 struct iio_map *map);
33
34#endif
diff --git a/include/linux/iio/events.h b/include/linux/iio/events.h
new file mode 100644
index 000000000000..b5acbf93c5da
--- /dev/null
+++ b/include/linux/iio/events.h
@@ -0,0 +1,105 @@
1/* The industrial I/O - event passing to userspace
2 *
3 * Copyright (c) 2008-2011 Jonathan Cameron
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 as published by
7 * the Free Software Foundation.
8 */
9#ifndef _IIO_EVENTS_H_
10#define _IIO_EVENTS_H_
11
12#include <linux/ioctl.h>
13#include <linux/types.h>
14#include <linux/iio/types.h>
15
16/**
17 * struct iio_event_data - The actual event being pushed to userspace
18 * @id: event identifier
19 * @timestamp: best estimate of time of event occurrence (often from
20 * the interrupt handler)
21 */
22struct iio_event_data {
23 __u64 id;
24 __s64 timestamp;
25};
26
27#define IIO_GET_EVENT_FD_IOCTL _IOR('i', 0x90, int)
28
29enum iio_event_type {
30 IIO_EV_TYPE_THRESH,
31 IIO_EV_TYPE_MAG,
32 IIO_EV_TYPE_ROC,
33 IIO_EV_TYPE_THRESH_ADAPTIVE,
34 IIO_EV_TYPE_MAG_ADAPTIVE,
35};
36
37enum iio_event_direction {
38 IIO_EV_DIR_EITHER,
39 IIO_EV_DIR_RISING,
40 IIO_EV_DIR_FALLING,
41};
42
43/**
44 * IIO_EVENT_CODE() - create event identifier
45 * @chan_type: Type of the channel. Should be one of enum iio_chan_type.
46 * @diff: Whether the event is for an differential channel or not.
47 * @modifier: Modifier for the channel. Should be one of enum iio_modifier.
48 * @direction: Direction of the event. One of enum iio_event_direction.
49 * @type: Type of the event. Should be one enum iio_event_type.
50 * @chan: Channel number for non-differential channels.
51 * @chan1: First channel number for differential channels.
52 * @chan2: Second channel number for differential channels.
53 */
54
55#define IIO_EVENT_CODE(chan_type, diff, modifier, direction, \
56 type, chan, chan1, chan2) \
57 (((u64)type << 56) | ((u64)diff << 55) | \
58 ((u64)direction << 48) | ((u64)modifier << 40) | \
59 ((u64)chan_type << 32) | (((u16)chan2) << 16) | ((u16)chan1) | \
60 ((u16)chan))
61
62
63#define IIO_EV_DIR_MAX 4
64#define IIO_EV_BIT(type, direction) \
65 (1 << (type*IIO_EV_DIR_MAX + direction))
66
67/**
68 * IIO_MOD_EVENT_CODE() - create event identifier for modified channels
69 * @chan_type: Type of the channel. Should be one of enum iio_chan_type.
70 * @number: Channel number.
71 * @modifier: Modifier for the channel. Should be one of enum iio_modifier.
72 * @type: Type of the event. Should be one enum iio_event_type.
73 * @direction: Direction of the event. One of enum iio_event_direction.
74 */
75
76#define IIO_MOD_EVENT_CODE(chan_type, number, modifier, \
77 type, direction) \
78 IIO_EVENT_CODE(chan_type, 0, modifier, direction, type, number, 0, 0)
79
80/**
81 * IIO_UNMOD_EVENT_CODE() - create event identifier for unmodified channels
82 * @chan_type: Type of the channel. Should be one of enum iio_chan_type.
83 * @number: Channel number.
84 * @type: Type of the event. Should be one enum iio_event_type.
85 * @direction: Direction of the event. One of enum iio_event_direction.
86 */
87
88#define IIO_UNMOD_EVENT_CODE(chan_type, number, type, direction) \
89 IIO_EVENT_CODE(chan_type, 0, 0, direction, type, number, 0, 0)
90
91#define IIO_EVENT_CODE_EXTRACT_TYPE(mask) ((mask >> 56) & 0xFF)
92
93#define IIO_EVENT_CODE_EXTRACT_DIR(mask) ((mask >> 48) & 0xCF)
94
95#define IIO_EVENT_CODE_EXTRACT_CHAN_TYPE(mask) ((mask >> 32) & 0xFF)
96
97/* Event code number extraction depends on which type of event we have.
98 * Perhaps review this function in the future*/
99#define IIO_EVENT_CODE_EXTRACT_CHAN(mask) ((__s16)(mask & 0xFFFF))
100#define IIO_EVENT_CODE_EXTRACT_CHAN2(mask) ((__s16)(((mask) >> 16) & 0xFFFF))
101
102#define IIO_EVENT_CODE_EXTRACT_MODIFIER(mask) ((mask >> 40) & 0xFF)
103#define IIO_EVENT_CODE_EXTRACT_DIFF(mask) (((mask) >> 55) & 0x1)
104
105#endif
diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
new file mode 100644
index 000000000000..3a4f6a3ab80d
--- /dev/null
+++ b/include/linux/iio/iio.h
@@ -0,0 +1,492 @@
1
2/* The industrial I/O core
3 *
4 * Copyright (c) 2008 Jonathan Cameron
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 as published by
8 * the Free Software Foundation.
9 */
10#ifndef _INDUSTRIAL_IO_H_
11#define _INDUSTRIAL_IO_H_
12
13#include <linux/device.h>
14#include <linux/cdev.h>
15#include <linux/iio/types.h>
16/* IIO TODO LIST */
17/*
18 * Provide means of adjusting timer accuracy.
19 * Currently assumes nano seconds.
20 */
21
22enum iio_chan_info_enum {
23 IIO_CHAN_INFO_RAW = 0,
24 IIO_CHAN_INFO_PROCESSED,
25 IIO_CHAN_INFO_SCALE,
26 IIO_CHAN_INFO_OFFSET,
27 IIO_CHAN_INFO_CALIBSCALE,
28 IIO_CHAN_INFO_CALIBBIAS,
29 IIO_CHAN_INFO_PEAK,
30 IIO_CHAN_INFO_PEAK_SCALE,
31 IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW,
32 IIO_CHAN_INFO_AVERAGE_RAW,
33 IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY,
34 IIO_CHAN_INFO_SAMP_FREQ,
35 IIO_CHAN_INFO_FREQUENCY,
36 IIO_CHAN_INFO_PHASE,
37 IIO_CHAN_INFO_HARDWAREGAIN,
38};
39
40#define IIO_CHAN_INFO_SHARED_BIT(type) BIT(type*2)
41#define IIO_CHAN_INFO_SEPARATE_BIT(type) BIT(type*2 + 1)
42
43#define IIO_CHAN_INFO_RAW_SEPARATE_BIT \
44 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_RAW)
45#define IIO_CHAN_INFO_PROCESSED_SEPARATE_BIT \
46 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PROCESSED)
47#define IIO_CHAN_INFO_SCALE_SEPARATE_BIT \
48 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_SCALE)
49#define IIO_CHAN_INFO_SCALE_SHARED_BIT \
50 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_SCALE)
51#define IIO_CHAN_INFO_OFFSET_SEPARATE_BIT \
52 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_OFFSET)
53#define IIO_CHAN_INFO_OFFSET_SHARED_BIT \
54 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_OFFSET)
55#define IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT \
56 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_CALIBSCALE)
57#define IIO_CHAN_INFO_CALIBSCALE_SHARED_BIT \
58 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_CALIBSCALE)
59#define IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT \
60 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_CALIBBIAS)
61#define IIO_CHAN_INFO_CALIBBIAS_SHARED_BIT \
62 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_CALIBBIAS)
63#define IIO_CHAN_INFO_PEAK_SEPARATE_BIT \
64 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PEAK)
65#define IIO_CHAN_INFO_PEAK_SHARED_BIT \
66 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PEAK)
67#define IIO_CHAN_INFO_PEAKSCALE_SEPARATE_BIT \
68 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PEAKSCALE)
69#define IIO_CHAN_INFO_PEAKSCALE_SHARED_BIT \
70 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PEAKSCALE)
71#define IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT \
72 IIO_CHAN_INFO_SEPARATE_BIT( \
73 IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW)
74#define IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SHARED_BIT \
75 IIO_CHAN_INFO_SHARED_BIT( \
76 IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW)
77#define IIO_CHAN_INFO_AVERAGE_RAW_SEPARATE_BIT \
78 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_AVERAGE_RAW)
79#define IIO_CHAN_INFO_AVERAGE_RAW_SHARED_BIT \
80 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_AVERAGE_RAW)
81#define IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT \
82 IIO_CHAN_INFO_SHARED_BIT( \
83 IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY)
84#define IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SEPARATE_BIT \
85 IIO_CHAN_INFO_SEPARATE_BIT( \
86 IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY)
87#define IIO_CHAN_INFO_SAMP_FREQ_SEPARATE_BIT \
88 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_SAMP_FREQ)
89#define IIO_CHAN_INFO_SAMP_FREQ_SHARED_BIT \
90 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_SAMP_FREQ)
91#define IIO_CHAN_INFO_FREQUENCY_SEPARATE_BIT \
92 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_FREQUENCY)
93#define IIO_CHAN_INFO_FREQUENCY_SHARED_BIT \
94 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_FREQUENCY)
95#define IIO_CHAN_INFO_PHASE_SEPARATE_BIT \
96 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PHASE)
97#define IIO_CHAN_INFO_PHASE_SHARED_BIT \
98 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PHASE)
99#define IIO_CHAN_INFO_HARDWAREGAIN_SEPARATE_BIT \
100 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_HARDWAREGAIN)
101#define IIO_CHAN_INFO_HARDWAREGAIN_SHARED_BIT \
102 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_HARDWAREGAIN)
103
104enum iio_endian {
105 IIO_CPU,
106 IIO_BE,
107 IIO_LE,
108};
109
110struct iio_chan_spec;
111struct iio_dev;
112
113/**
114 * struct iio_chan_spec_ext_info - Extended channel info attribute
115 * @name: Info attribute name
116 * @shared: Whether this attribute is shared between all channels.
117 * @read: Read callback for this info attribute, may be NULL.
118 * @write: Write callback for this info attribute, may be NULL.
119 * @private: Data private to the driver.
120 */
121struct iio_chan_spec_ext_info {
122 const char *name;
123 bool shared;
124 ssize_t (*read)(struct iio_dev *, uintptr_t private,
125 struct iio_chan_spec const *, char *buf);
126 ssize_t (*write)(struct iio_dev *, uintptr_t private,
127 struct iio_chan_spec const *, const char *buf,
128 size_t len);
129 uintptr_t private;
130};
131
132/**
133 * struct iio_chan_spec - specification of a single channel
134 * @type: What type of measurement is the channel making.
135 * @channel: What number or name do we wish to assign the channel.
136 * @channel2: If there is a second number for a differential
137 * channel then this is it. If modified is set then the
138 * value here specifies the modifier.
139 * @address: Driver specific identifier.
140 * @scan_index: Monotonic index to give ordering in scans when read
141 * from a buffer.
142 * @scan_type: Sign: 's' or 'u' to specify signed or unsigned
143 * realbits: Number of valid bits of data
144 * storage_bits: Realbits + padding
145 * shift: Shift right by this before masking out
146 * realbits.
147 * endianness: little or big endian
148 * @info_mask: What information is to be exported about this channel.
149 * This includes calibbias, scale etc.
150 * @event_mask: What events can this channel produce.
151 * @ext_info: Array of extended info attributes for this channel.
152 * The array is NULL terminated, the last element should
153 * have it's name field set to NULL.
154 * @extend_name: Allows labeling of channel attributes with an
155 * informative name. Note this has no effect codes etc,
156 * unlike modifiers.
157 * @datasheet_name: A name used in in kernel mapping of channels. It should
158 * correspond to the first name that the channel is referred
159 * to by in the datasheet (e.g. IND), or the nearest
160 * possible compound name (e.g. IND-INC).
161 * @modified: Does a modifier apply to this channel. What these are
162 * depends on the channel type. Modifier is set in
163 * channel2. Examples are IIO_MOD_X for axial sensors about
164 * the 'x' axis.
165 * @indexed: Specify the channel has a numerical index. If not,
166 * the value in channel will be suppressed for attribute
167 * but not for event codes. Typically set it to 0 when
168 * the index is false.
169 * @differential: Channel is differential.
170 */
171struct iio_chan_spec {
172 enum iio_chan_type type;
173 int channel;
174 int channel2;
175 unsigned long address;
176 int scan_index;
177 struct {
178 char sign;
179 u8 realbits;
180 u8 storagebits;
181 u8 shift;
182 enum iio_endian endianness;
183 } scan_type;
184 long info_mask;
185 long event_mask;
186 const struct iio_chan_spec_ext_info *ext_info;
187 const char *extend_name;
188 const char *datasheet_name;
189 unsigned modified:1;
190 unsigned indexed:1;
191 unsigned output:1;
192 unsigned differential:1;
193};
194
195#define IIO_ST(si, rb, sb, sh) \
196 { .sign = si, .realbits = rb, .storagebits = sb, .shift = sh }
197
198#define IIO_CHAN_SOFT_TIMESTAMP(_si) \
199 { .type = IIO_TIMESTAMP, .channel = -1, \
200 .scan_index = _si, .scan_type = IIO_ST('s', 64, 64, 0) }
201
202/**
203 * iio_get_time_ns() - utility function to get a time stamp for events etc
204 **/
205static inline s64 iio_get_time_ns(void)
206{
207 struct timespec ts;
208 /*
209 * calls getnstimeofday.
210 * If hrtimers then up to ns accurate, if not microsecond.
211 */
212 ktime_get_real_ts(&ts);
213
214 return timespec_to_ns(&ts);
215}
216
217/* Device operating modes */
218#define INDIO_DIRECT_MODE 0x01
219#define INDIO_BUFFER_TRIGGERED 0x02
220#define INDIO_BUFFER_HARDWARE 0x08
221
222#define INDIO_ALL_BUFFER_MODES \
223 (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE)
224
225struct iio_trigger; /* forward declaration */
226struct iio_dev;
227
228/**
229 * struct iio_info - constant information about device
230 * @driver_module: module structure used to ensure correct
231 * ownership of chrdevs etc
232 * @event_attrs: event control attributes
233 * @attrs: general purpose device attributes
234 * @read_raw: function to request a value from the device.
235 * mask specifies which value. Note 0 means a reading of
236 * the channel in question. Return value will specify the
237 * type of value returned by the device. val and val2 will
238 * contain the elements making up the returned value.
239 * @write_raw: function to write a value to the device.
240 * Parameters are the same as for read_raw.
241 * @write_raw_get_fmt: callback function to query the expected
242 * format/precision. If not set by the driver, write_raw
243 * returns IIO_VAL_INT_PLUS_MICRO.
244 * @read_event_config: find out if the event is enabled.
245 * @write_event_config: set if the event is enabled.
246 * @read_event_value: read a value associated with the event. Meaning
247 * is event dependant. event_code specifies which event.
248 * @write_event_value: write the value associated with the event.
249 * Meaning is event dependent.
250 * @validate_trigger: function to validate the trigger when the
251 * current trigger gets changed.
252 **/
253struct iio_info {
254 struct module *driver_module;
255 struct attribute_group *event_attrs;
256 const struct attribute_group *attrs;
257
258 int (*read_raw)(struct iio_dev *indio_dev,
259 struct iio_chan_spec const *chan,
260 int *val,
261 int *val2,
262 long mask);
263
264 int (*write_raw)(struct iio_dev *indio_dev,
265 struct iio_chan_spec const *chan,
266 int val,
267 int val2,
268 long mask);
269
270 int (*write_raw_get_fmt)(struct iio_dev *indio_dev,
271 struct iio_chan_spec const *chan,
272 long mask);
273
274 int (*read_event_config)(struct iio_dev *indio_dev,
275 u64 event_code);
276
277 int (*write_event_config)(struct iio_dev *indio_dev,
278 u64 event_code,
279 int state);
280
281 int (*read_event_value)(struct iio_dev *indio_dev,
282 u64 event_code,
283 int *val);
284 int (*write_event_value)(struct iio_dev *indio_dev,
285 u64 event_code,
286 int val);
287 int (*validate_trigger)(struct iio_dev *indio_dev,
288 struct iio_trigger *trig);
289 int (*update_scan_mode)(struct iio_dev *indio_dev,
290 const unsigned long *scan_mask);
291 int (*debugfs_reg_access)(struct iio_dev *indio_dev,
292 unsigned reg, unsigned writeval,
293 unsigned *readval);
294};
295
296/**
297 * struct iio_buffer_setup_ops - buffer setup related callbacks
298 * @preenable: [DRIVER] function to run prior to marking buffer enabled
299 * @postenable: [DRIVER] function to run after marking buffer enabled
300 * @predisable: [DRIVER] function to run prior to marking buffer
301 * disabled
302 * @postdisable: [DRIVER] function to run after marking buffer disabled
303 */
304struct iio_buffer_setup_ops {
305 int (*preenable)(struct iio_dev *);
306 int (*postenable)(struct iio_dev *);
307 int (*predisable)(struct iio_dev *);
308 int (*postdisable)(struct iio_dev *);
309};
310
311/**
312 * struct iio_dev - industrial I/O device
313 * @id: [INTERN] used to identify device internally
314 * @modes: [DRIVER] operating modes supported by device
315 * @currentmode: [DRIVER] current operating mode
316 * @dev: [DRIVER] device structure, should be assigned a parent
317 * and owner
318 * @event_interface: [INTERN] event chrdevs associated with interrupt lines
319 * @buffer: [DRIVER] any buffer present
320 * @scan_bytes: [INTERN] num bytes captured to be fed to buffer demux
321 * @mlock: [INTERN] lock used to prevent simultaneous device state
322 * changes
323 * @available_scan_masks: [DRIVER] optional array of allowed bitmasks
324 * @masklength: [INTERN] the length of the mask established from
325 * channels
326 * @active_scan_mask: [INTERN] union of all scan masks requested by buffers
327 * @scan_timestamp: [INTERN] set if any buffers have requested timestamp
328 * @scan_index_timestamp:[INTERN] cache of the index to the timestamp
329 * @trig: [INTERN] current device trigger (buffer modes)
330 * @pollfunc: [DRIVER] function run on trigger being received
331 * @channels: [DRIVER] channel specification structure table
332 * @num_channels: [DRIVER] number of chanels specified in @channels.
333 * @channel_attr_list: [INTERN] keep track of automatically created channel
334 * attributes
335 * @chan_attr_group: [INTERN] group for all attrs in base directory
336 * @name: [DRIVER] name of the device.
337 * @info: [DRIVER] callbacks and constant info from driver
338 * @info_exist_lock: [INTERN] lock to prevent use during removal
339 * @setup_ops: [DRIVER] callbacks to call before and after buffer
340 * enable/disable
341 * @chrdev: [INTERN] associated character device
342 * @groups: [INTERN] attribute groups
343 * @groupcounter: [INTERN] index of next attribute group
344 * @flags: [INTERN] file ops related flags including busy flag.
345 * @debugfs_dentry: [INTERN] device specific debugfs dentry.
346 * @cached_reg_addr: [INTERN] cached register address for debugfs reads.
347 */
348struct iio_dev {
349 int id;
350
351 int modes;
352 int currentmode;
353 struct device dev;
354
355 struct iio_event_interface *event_interface;
356
357 struct iio_buffer *buffer;
358 int scan_bytes;
359 struct mutex mlock;
360
361 const unsigned long *available_scan_masks;
362 unsigned masklength;
363 const unsigned long *active_scan_mask;
364 bool scan_timestamp;
365 unsigned scan_index_timestamp;
366 struct iio_trigger *trig;
367 struct iio_poll_func *pollfunc;
368
369 struct iio_chan_spec const *channels;
370 int num_channels;
371
372 struct list_head channel_attr_list;
373 struct attribute_group chan_attr_group;
374 const char *name;
375 const struct iio_info *info;
376 struct mutex info_exist_lock;
377 const struct iio_buffer_setup_ops *setup_ops;
378 struct cdev chrdev;
379#define IIO_MAX_GROUPS 6
380 const struct attribute_group *groups[IIO_MAX_GROUPS + 1];
381 int groupcounter;
382
383 unsigned long flags;
384#if defined(CONFIG_DEBUG_FS)
385 struct dentry *debugfs_dentry;
386 unsigned cached_reg_addr;
387#endif
388};
389
390/**
391 * iio_find_channel_from_si() - get channel from its scan index
392 * @indio_dev: device
393 * @si: scan index to match
394 */
395const struct iio_chan_spec
396*iio_find_channel_from_si(struct iio_dev *indio_dev, int si);
397
398/**
399 * iio_device_register() - register a device with the IIO subsystem
400 * @indio_dev: Device structure filled by the device driver
401 **/
402int iio_device_register(struct iio_dev *indio_dev);
403
404/**
405 * iio_device_unregister() - unregister a device from the IIO subsystem
406 * @indio_dev: Device structure representing the device.
407 **/
408void iio_device_unregister(struct iio_dev *indio_dev);
409
410/**
411 * iio_push_event() - try to add event to the list for userspace reading
412 * @indio_dev: IIO device structure
413 * @ev_code: What event
414 * @timestamp: When the event occurred
415 **/
416int iio_push_event(struct iio_dev *indio_dev, u64 ev_code, s64 timestamp);
417
418extern struct bus_type iio_bus_type;
419
420/**
421 * iio_device_put() - reference counted deallocation of struct device
422 * @dev: the iio_device containing the device
423 **/
424static inline void iio_device_put(struct iio_dev *indio_dev)
425{
426 if (indio_dev)
427 put_device(&indio_dev->dev);
428};
429
430/**
431 * dev_to_iio_dev() - Get IIO device struct from a device struct
432 * @dev: The device embedded in the IIO device
433 *
434 * Note: The device must be a IIO device, otherwise the result is undefined.
435 */
436static inline struct iio_dev *dev_to_iio_dev(struct device *dev)
437{
438 return container_of(dev, struct iio_dev, dev);
439}
440
441/* Can we make this smaller? */
442#define IIO_ALIGN L1_CACHE_BYTES
443/**
444 * iio_device_alloc() - allocate an iio_dev from a driver
445 * @sizeof_priv: Space to allocate for private structure.
446 **/
447struct iio_dev *iio_device_alloc(int sizeof_priv);
448
449static inline void *iio_priv(const struct iio_dev *indio_dev)
450{
451 return (char *)indio_dev + ALIGN(sizeof(struct iio_dev), IIO_ALIGN);
452}
453
454static inline struct iio_dev *iio_priv_to_dev(void *priv)
455{
456 return (struct iio_dev *)((char *)priv -
457 ALIGN(sizeof(struct iio_dev), IIO_ALIGN));
458}
459
460/**
461 * iio_device_free() - free an iio_dev from a driver
462 * @dev: the iio_dev associated with the device
463 **/
464void iio_device_free(struct iio_dev *indio_dev);
465
466/**
467 * iio_buffer_enabled() - helper function to test if the buffer is enabled
468 * @indio_dev: IIO device info structure for device
469 **/
470static inline bool iio_buffer_enabled(struct iio_dev *indio_dev)
471{
472 return indio_dev->currentmode
473 & (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE);
474};
475
476/**
477 * iio_get_debugfs_dentry() - helper function to get the debugfs_dentry
478 * @indio_dev: IIO device info structure for device
479 **/
480#if defined(CONFIG_DEBUG_FS)
481static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev)
482{
483 return indio_dev->debugfs_dentry;
484};
485#else
486static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev)
487{
488 return NULL;
489};
490#endif
491
492#endif /* _INDUSTRIAL_IO_H_ */
diff --git a/include/linux/iio/kfifo_buf.h b/include/linux/iio/kfifo_buf.h
new file mode 100644
index 000000000000..014d5a13b32b
--- /dev/null
+++ b/include/linux/iio/kfifo_buf.h
@@ -0,0 +1,8 @@
1
2#include <linux/kfifo.h>
3#include <linux/iio/iio.h>
4#include <linux/iio/buffer.h>
5
6struct iio_buffer *iio_kfifo_allocate(struct iio_dev *indio_dev);
7void iio_kfifo_free(struct iio_buffer *r);
8
diff --git a/include/linux/iio/machine.h b/include/linux/iio/machine.h
new file mode 100644
index 000000000000..0b1f19bfdc44
--- /dev/null
+++ b/include/linux/iio/machine.h
@@ -0,0 +1,24 @@
1/*
2 * Industrial I/O in kernel access map definitions for board files.
3 *
4 * Copyright (c) 2011 Jonathan Cameron
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 as published by
8 * the Free Software Foundation.
9 */
10
11/**
12 * struct iio_map - description of link between consumer and device channels
13 * @adc_channel_label: Label used to identify the channel on the provider.
14 * This is matched against the datasheet_name element
15 * of struct iio_chan_spec.
16 * @consumer_dev_name: Name to uniquely identify the consumer device.
17 * @consumer_channel: Unique name used to idenitify the channel on the
18 * consumer side.
19 */
20struct iio_map {
21 const char *adc_channel_label;
22 const char *consumer_dev_name;
23 const char *consumer_channel;
24};
diff --git a/include/linux/iio/sysfs.h b/include/linux/iio/sysfs.h
new file mode 100644
index 000000000000..bfedb73b850e
--- /dev/null
+++ b/include/linux/iio/sysfs.h
@@ -0,0 +1,117 @@
1/* The industrial I/O core
2 *
3 *Copyright (c) 2008 Jonathan Cameron
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 as published by
7 * the Free Software Foundation.
8 *
9 * General attributes
10 */
11
12#ifndef _INDUSTRIAL_IO_SYSFS_H_
13#define _INDUSTRIAL_IO_SYSFS_H_
14
15struct iio_chan_spec;
16
17/**
18 * struct iio_dev_attr - iio specific device attribute
19 * @dev_attr: underlying device attribute
20 * @address: associated register address
21 * @l: list head for maintaining list of dynamically created attrs.
22 */
23struct iio_dev_attr {
24 struct device_attribute dev_attr;
25 u64 address;
26 struct list_head l;
27 struct iio_chan_spec const *c;
28};
29
30#define to_iio_dev_attr(_dev_attr) \
31 container_of(_dev_attr, struct iio_dev_attr, dev_attr)
32
33ssize_t iio_read_const_attr(struct device *dev,
34 struct device_attribute *attr,
35 char *len);
36
37/**
38 * struct iio_const_attr - constant device specific attribute
39 * often used for things like available modes
40 * @string: attribute string
41 * @dev_attr: underlying device attribute
42 */
43struct iio_const_attr {
44 const char *string;
45 struct device_attribute dev_attr;
46};
47
48#define to_iio_const_attr(_dev_attr) \
49 container_of(_dev_attr, struct iio_const_attr, dev_attr)
50
51/* Some attributes will be hard coded (device dependent) and not require an
52 address, in these cases pass a negative */
53#define IIO_ATTR(_name, _mode, _show, _store, _addr) \
54 { .dev_attr = __ATTR(_name, _mode, _show, _store), \
55 .address = _addr }
56
57#define IIO_DEVICE_ATTR(_name, _mode, _show, _store, _addr) \
58 struct iio_dev_attr iio_dev_attr_##_name \
59 = IIO_ATTR(_name, _mode, _show, _store, _addr)
60
61#define IIO_DEVICE_ATTR_NAMED(_vname, _name, _mode, _show, _store, _addr) \
62 struct iio_dev_attr iio_dev_attr_##_vname \
63 = IIO_ATTR(_name, _mode, _show, _store, _addr)
64
65#define IIO_CONST_ATTR(_name, _string) \
66 struct iio_const_attr iio_const_attr_##_name \
67 = { .string = _string, \
68 .dev_attr = __ATTR(_name, S_IRUGO, iio_read_const_attr, NULL)}
69
70#define IIO_CONST_ATTR_NAMED(_vname, _name, _string) \
71 struct iio_const_attr iio_const_attr_##_vname \
72 = { .string = _string, \
73 .dev_attr = __ATTR(_name, S_IRUGO, iio_read_const_attr, NULL)}
74
75/* Generic attributes of onetype or another */
76/**
77 * IIO_DEV_ATTR_RESET: resets the device
78 **/
79#define IIO_DEV_ATTR_RESET(_store) \
80 IIO_DEVICE_ATTR(reset, S_IWUSR, NULL, _store, 0)
81
82/**
83 * IIO_DEV_ATTR_SAMP_FREQ - sets any internal clock frequency
84 * @_mode: sysfs file mode/permissions
85 * @_show: output method for the attribute
86 * @_store: input method for the attribute
87 **/
88#define IIO_DEV_ATTR_SAMP_FREQ(_mode, _show, _store) \
89 IIO_DEVICE_ATTR(sampling_frequency, _mode, _show, _store, 0)
90
91/**
92 * IIO_DEV_ATTR_SAMP_FREQ_AVAIL - list available sampling frequencies
93 * @_show: output method for the attribute
94 *
95 * May be mode dependent on some devices
96 **/
97#define IIO_DEV_ATTR_SAMP_FREQ_AVAIL(_show) \
98 IIO_DEVICE_ATTR(sampling_frequency_available, S_IRUGO, _show, NULL, 0)
99/**
100 * IIO_CONST_ATTR_AVAIL_SAMP_FREQ - list available sampling frequencies
101 * @_string: frequency string for the attribute
102 *
103 * Constant version
104 **/
105#define IIO_CONST_ATTR_SAMP_FREQ_AVAIL(_string) \
106 IIO_CONST_ATTR(sampling_frequency_available, _string)
107
108#define IIO_DEV_ATTR_TEMP_RAW(_show) \
109 IIO_DEVICE_ATTR(in_temp_raw, S_IRUGO, _show, NULL, 0)
110
111#define IIO_CONST_ATTR_TEMP_OFFSET(_string) \
112 IIO_CONST_ATTR(in_temp_offset, _string)
113
114#define IIO_CONST_ATTR_TEMP_SCALE(_string) \
115 IIO_CONST_ATTR(in_temp_scale, _string)
116
117#endif /* _INDUSTRIAL_IO_SYSFS_H_ */
diff --git a/include/linux/iio/trigger.h b/include/linux/iio/trigger.h
new file mode 100644
index 000000000000..a9819940a84c
--- /dev/null
+++ b/include/linux/iio/trigger.h
@@ -0,0 +1,119 @@
1/* The industrial I/O core, trigger handling functions
2 *
3 * Copyright (c) 2008 Jonathan Cameron
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 as published by
7 * the Free Software Foundation.
8 */
9#include <linux/irq.h>
10#include <linux/module.h>
11
12#ifndef _IIO_TRIGGER_H_
13#define _IIO_TRIGGER_H_
14
15struct iio_subirq {
16 bool enabled;
17};
18
19/**
20 * struct iio_trigger_ops - operations structure for an iio_trigger.
21 * @owner: used to monitor usage count of the trigger.
22 * @set_trigger_state: switch on/off the trigger on demand
23 * @try_reenable: function to reenable the trigger when the
24 * use count is zero (may be NULL)
25 * @validate_device: function to validate the device when the
26 * current trigger gets changed.
27 *
28 * This is typically static const within a driver and shared by
29 * instances of a given device.
30 **/
31struct iio_trigger_ops {
32 struct module *owner;
33 int (*set_trigger_state)(struct iio_trigger *trig, bool state);
34 int (*try_reenable)(struct iio_trigger *trig);
35 int (*validate_device)(struct iio_trigger *trig,
36 struct iio_dev *indio_dev);
37};
38
39
40/**
41 * struct iio_trigger - industrial I/O trigger device
42 *
43 * @id: [INTERN] unique id number
44 * @name: [DRIVER] unique name
45 * @dev: [DRIVER] associated device (if relevant)
46 * @private_data: [DRIVER] device specific data
47 * @list: [INTERN] used in maintenance of global trigger list
48 * @alloc_list: [DRIVER] used for driver specific trigger list
49 * @use_count: use count for the trigger
50 * @subirq_chip: [INTERN] associate 'virtual' irq chip.
51 * @subirq_base: [INTERN] base number for irqs provided by trigger.
52 * @subirqs: [INTERN] information about the 'child' irqs.
53 * @pool: [INTERN] bitmap of irqs currently in use.
54 * @pool_lock: [INTERN] protection of the irq pool.
55 **/
56struct iio_trigger {
57 const struct iio_trigger_ops *ops;
58 int id;
59 const char *name;
60 struct device dev;
61
62 void *private_data;
63 struct list_head list;
64 struct list_head alloc_list;
65 int use_count;
66
67 struct irq_chip subirq_chip;
68 int subirq_base;
69
70 struct iio_subirq subirqs[CONFIG_IIO_CONSUMERS_PER_TRIGGER];
71 unsigned long pool[BITS_TO_LONGS(CONFIG_IIO_CONSUMERS_PER_TRIGGER)];
72 struct mutex pool_lock;
73};
74
75
76static inline struct iio_trigger *to_iio_trigger(struct device *d)
77{
78 return container_of(d, struct iio_trigger, dev);
79};
80
81static inline void iio_trigger_put(struct iio_trigger *trig)
82{
83 module_put(trig->ops->owner);
84 put_device(&trig->dev);
85};
86
87static inline void iio_trigger_get(struct iio_trigger *trig)
88{
89 get_device(&trig->dev);
90 __module_get(trig->ops->owner);
91};
92
93/**
94 * iio_trigger_register() - register a trigger with the IIO core
95 * @trig_info: trigger to be registered
96 **/
97int iio_trigger_register(struct iio_trigger *trig_info);
98
99/**
100 * iio_trigger_unregister() - unregister a trigger from the core
101 * @trig_info: trigger to be unregistered
102 **/
103void iio_trigger_unregister(struct iio_trigger *trig_info);
104
105/**
106 * iio_trigger_poll() - called on a trigger occurring
107 * @trig: trigger which occurred
108 *
109 * Typically called in relevant hardware interrupt handler.
110 **/
111void iio_trigger_poll(struct iio_trigger *trig, s64 time);
112void iio_trigger_poll_chained(struct iio_trigger *trig, s64 time);
113
114irqreturn_t iio_trigger_generic_data_rdy_poll(int irq, void *private);
115
116__printf(1, 2) struct iio_trigger *iio_trigger_alloc(const char *fmt, ...);
117void iio_trigger_free(struct iio_trigger *trig);
118
119#endif /* _IIO_TRIGGER_H_ */
diff --git a/include/linux/iio/trigger_consumer.h b/include/linux/iio/trigger_consumer.h
new file mode 100644
index 000000000000..60d64b356945
--- /dev/null
+++ b/include/linux/iio/trigger_consumer.h
@@ -0,0 +1,52 @@
1/* The industrial I/O core, trigger consumer functions
2 *
3 * Copyright (c) 2008-2011 Jonathan Cameron
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 as published by
7 * the Free Software Foundation.
8 */
9
10/**
11 * struct iio_poll_func - poll function pair
12 *
13 * @indio_dev: data specific to device (passed into poll func)
14 * @h: the function that is actually run on trigger
15 * @thread: threaded interrupt part
16 * @type: the type of interrupt (basically if oneshot)
17 * @name: name used to identify the trigger consumer.
18 * @irq: the corresponding irq as allocated from the
19 * trigger pool
20 * @timestamp: some devices need a timestamp grabbed as soon
21 * as possible after the trigger - hence handler
22 * passes it via here.
23 **/
24struct iio_poll_func {
25 struct iio_dev *indio_dev;
26 irqreturn_t (*h)(int irq, void *p);
27 irqreturn_t (*thread)(int irq, void *p);
28 int type;
29 char *name;
30 int irq;
31 s64 timestamp;
32};
33
34
35struct iio_poll_func
36*iio_alloc_pollfunc(irqreturn_t (*h)(int irq, void *p),
37 irqreturn_t (*thread)(int irq, void *p),
38 int type,
39 struct iio_dev *indio_dev,
40 const char *fmt,
41 ...);
42void iio_dealloc_pollfunc(struct iio_poll_func *pf);
43irqreturn_t iio_pollfunc_store_time(int irq, void *p);
44
45void iio_trigger_notify_done(struct iio_trigger *trig);
46
47/*
48 * Two functions for common case where all that happens is a pollfunc
49 * is attached and detached from a trigger
50 */
51int iio_triggered_buffer_postenable(struct iio_dev *indio_dev);
52int iio_triggered_buffer_predisable(struct iio_dev *indio_dev);
diff --git a/include/linux/iio/types.h b/include/linux/iio/types.h
new file mode 100644
index 000000000000..1b073b1cc7c2
--- /dev/null
+++ b/include/linux/iio/types.h
@@ -0,0 +1,55 @@
1/* industrial I/O data types needed both in and out of kernel
2 *
3 * Copyright (c) 2008 Jonathan Cameron
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 as published by
7 * the Free Software Foundation.
8 */
9
10#ifndef _IIO_TYPES_H_
11#define _IIO_TYPES_H_
12
13enum iio_chan_type {
14 /* real channel types */
15 IIO_VOLTAGE,
16 IIO_CURRENT,
17 IIO_POWER,
18 IIO_ACCEL,
19 IIO_ANGL_VEL,
20 IIO_MAGN,
21 IIO_LIGHT,
22 IIO_INTENSITY,
23 IIO_PROXIMITY,
24 IIO_TEMP,
25 IIO_INCLI,
26 IIO_ROT,
27 IIO_ANGL,
28 IIO_TIMESTAMP,
29 IIO_CAPACITANCE,
30 IIO_ALTVOLTAGE,
31};
32
33enum iio_modifier {
34 IIO_NO_MOD,
35 IIO_MOD_X,
36 IIO_MOD_Y,
37 IIO_MOD_Z,
38 IIO_MOD_X_AND_Y,
39 IIO_MOD_X_AND_Z,
40 IIO_MOD_Y_AND_Z,
41 IIO_MOD_X_AND_Y_AND_Z,
42 IIO_MOD_X_OR_Y,
43 IIO_MOD_X_OR_Z,
44 IIO_MOD_Y_OR_Z,
45 IIO_MOD_X_OR_Y_OR_Z,
46 IIO_MOD_LIGHT_BOTH,
47 IIO_MOD_LIGHT_IR,
48};
49
50#define IIO_VAL_INT 1
51#define IIO_VAL_INT_PLUS_MICRO 2
52#define IIO_VAL_INT_PLUS_NANO 3
53#define IIO_VAL_INT_PLUS_MICRO_DB 4
54
55#endif /* _IIO_TYPES_H_ */
diff --git a/include/linux/mei.h b/include/linux/mei.h
new file mode 100644
index 000000000000..bc0d8b69c49e
--- /dev/null
+++ b/include/linux/mei.h
@@ -0,0 +1,110 @@
1/******************************************************************************
2 * Intel Management Engine Interface (Intel MEI) Linux driver
3 * Intel MEI Interface Header
4 *
5 * This file is provided under a dual BSD/GPLv2 license. When using or
6 * redistributing this file, you may do so under either license.
7 *
8 * GPL LICENSE SUMMARY
9 *
10 * Copyright(c) 2003 - 2012 Intel Corporation. All rights reserved.
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of version 2 of the GNU General Public License as
14 * published by the Free Software Foundation.
15 *
16 * This program is distributed in the hope that it will be useful, but
17 * WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
24 * USA
25 *
26 * The full GNU General Public License is included in this distribution
27 * in the file called LICENSE.GPL.
28 *
29 * Contact Information:
30 * Intel Corporation.
31 * linux-mei@linux.intel.com
32 * http://www.intel.com
33 *
34 * BSD LICENSE
35 *
36 * Copyright(c) 2003 - 2012 Intel Corporation. All rights reserved.
37 * All rights reserved.
38 *
39 * Redistribution and use in source and binary forms, with or without
40 * modification, are permitted provided that the following conditions
41 * are met:
42 *
43 * * Redistributions of source code must retain the above copyright
44 * notice, this list of conditions and the following disclaimer.
45 * * Redistributions in binary form must reproduce the above copyright
46 * notice, this list of conditions and the following disclaimer in
47 * the documentation and/or other materials provided with the
48 * distribution.
49 * * Neither the name Intel Corporation nor the names of its
50 * contributors may be used to endorse or promote products derived
51 * from this software without specific prior written permission.
52 *
53 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
54 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
55 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
56 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
57 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
58 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
59 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
60 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
61 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
62 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
63 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
64 *
65 *****************************************************************************/
66
67#ifndef _LINUX_MEI_H
68#define _LINUX_MEI_H
69
70#include <linux/uuid.h>
71
72/*
73 * This IOCTL is used to associate the current file descriptor with a
74 * FW Client (given by UUID). This opens a communication channel
75 * between a host client and a FW client. From this point every read and write
76 * will communicate with the associated FW client.
77 * Only in close() (file_operation release()) the communication between
78 * the clients is disconnected
79 *
80 * The IOCTL argument is a struct with a union that contains
81 * the input parameter and the output parameter for this IOCTL.
82 *
83 * The input parameter is UUID of the FW Client.
84 * The output parameter is the properties of the FW client
85 * (FW protocol version and max message size).
86 *
87 */
88#define IOCTL_MEI_CONNECT_CLIENT \
89 _IOWR('H' , 0x01, struct mei_connect_client_data)
90
91/*
92 * Intel MEI client information struct
93 */
94struct mei_client {
95 __u32 max_msg_length;
96 __u8 protocol_version;
97 __u8 reserved[3];
98};
99
100/*
101 * IOCTL Connect Client Data structure
102 */
103struct mei_connect_client_data {
104 union {
105 uuid_le in_client_uuid;
106 struct mei_client out_client_properties;
107 };
108};
109
110#endif /* _LINUX_MEI_H */
diff --git a/include/linux/platform_data/at91_adc.h b/include/linux/platform_data/at91_adc.h
new file mode 100644
index 000000000000..e15745b4f3a5
--- /dev/null
+++ b/include/linux/platform_data/at91_adc.h
@@ -0,0 +1,61 @@
1/*
2 * Copyright (C) 2011 Free Electrons
3 *
4 * Licensed under the GPLv2 or later.
5 */
6
7#ifndef _AT91_ADC_H_
8#define _AT91_ADC_H_
9
10/**
11 * struct at91_adc_reg_desc - Various informations relative to registers
12 * @channel_base: Base offset for the channel data registers
13 * @drdy_mask: Mask of the DRDY field in the relevant registers
14 (Interruptions registers mostly)
15 * @status_register: Offset of the Interrupt Status Register
16 * @trigger_register: Offset of the Trigger setup register
17 */
18struct at91_adc_reg_desc {
19 u8 channel_base;
20 u32 drdy_mask;
21 u8 status_register;
22 u8 trigger_register;
23};
24
25/**
26 * struct at91_adc_trigger - description of triggers
27 * @name: name of the trigger advertised to the user
28 * @value: value to set in the ADC's trigger setup register
29 to enable the trigger
30 * @is_external: Does the trigger rely on an external pin?
31 */
32struct at91_adc_trigger {
33 const char *name;
34 u8 value;
35 bool is_external;
36};
37
38/**
39 * struct at91_adc_data - platform data for ADC driver
40 * @channels_used: channels in use on the board as a bitmask
41 * @num_channels: global number of channels available on the board
42 * @registers: Registers definition on the board
43 * @startup_time: startup time of the ADC in microseconds
44 * @trigger_list: Triggers available in the ADC
45 * @trigger_number: Number of triggers available in the ADC
46 * @use_external_triggers: does the board has external triggers availables
47 * @vref: Reference voltage for the ADC in millivolts
48 */
49struct at91_adc_data {
50 unsigned long channels_used;
51 u8 num_channels;
52 struct at91_adc_reg_desc *registers;
53 u8 startup_time;
54 struct at91_adc_trigger *trigger_list;
55 u8 trigger_number;
56 bool use_external_triggers;
57 u16 vref;
58};
59
60extern void __init at91_add_device_adc(struct at91_adc_data *data);
61#endif
diff --git a/include/linux/pstore_ram.h b/include/linux/pstore_ram.h
new file mode 100644
index 000000000000..7ed7fd4dba49
--- /dev/null
+++ b/include/linux/pstore_ram.h
@@ -0,0 +1,98 @@
1/*
2 * Copyright (C) 2010 Marco Stornelli <marco.stornelli@gmail.com>
3 * Copyright (C) 2011 Kees Cook <keescook@chromium.org>
4 * Copyright (C) 2011 Google, Inc.
5 *
6 * This software is licensed under the terms of the GNU General Public
7 * License version 2, as published by the Free Software Foundation, and
8 * may be copied, distributed, and modified under those terms.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 */
16
17#ifndef __LINUX_PSTORE_RAM_H__
18#define __LINUX_PSTORE_RAM_H__
19
20#include <linux/device.h>
21#include <linux/kernel.h>
22#include <linux/list.h>
23#include <linux/types.h>
24#include <linux/init.h>
25
26struct persistent_ram_buffer;
27
28struct persistent_ram_descriptor {
29 const char *name;
30 phys_addr_t size;
31};
32
33struct persistent_ram {
34 phys_addr_t start;
35 phys_addr_t size;
36
37 int num_descs;
38 struct persistent_ram_descriptor *descs;
39
40 struct list_head node;
41};
42
43struct persistent_ram_zone {
44 phys_addr_t paddr;
45 size_t size;
46 void *vaddr;
47 struct persistent_ram_buffer *buffer;
48 size_t buffer_size;
49
50 /* ECC correction */
51 bool ecc;
52 char *par_buffer;
53 char *par_header;
54 struct rs_control *rs_decoder;
55 int corrected_bytes;
56 int bad_blocks;
57 int ecc_block_size;
58 int ecc_size;
59 int ecc_symsize;
60 int ecc_poly;
61
62 char *old_log;
63 size_t old_log_size;
64};
65
66int persistent_ram_early_init(struct persistent_ram *ram);
67
68struct persistent_ram_zone * __init persistent_ram_new(phys_addr_t start,
69 size_t size,
70 bool ecc);
71void persistent_ram_free(struct persistent_ram_zone *prz);
72struct persistent_ram_zone *persistent_ram_init_ringbuffer(struct device *dev,
73 bool ecc);
74
75int persistent_ram_write(struct persistent_ram_zone *prz, const void *s,
76 unsigned int count);
77
78size_t persistent_ram_old_size(struct persistent_ram_zone *prz);
79void *persistent_ram_old(struct persistent_ram_zone *prz);
80void persistent_ram_free_old(struct persistent_ram_zone *prz);
81ssize_t persistent_ram_ecc_string(struct persistent_ram_zone *prz,
82 char *str, size_t len);
83
84/*
85 * Ramoops platform data
86 * @mem_size memory size for ramoops
87 * @mem_address physical memory address to contain ramoops
88 */
89
90struct ramoops_platform_data {
91 unsigned long mem_size;
92 unsigned long mem_address;
93 unsigned long record_size;
94 int dump_oops;
95 bool ecc;
96};
97
98#endif
diff --git a/include/linux/ramoops.h b/include/linux/ramoops.h
deleted file mode 100644
index 484fef81cd3a..000000000000
--- a/include/linux/ramoops.h
+++ /dev/null
@@ -1,17 +0,0 @@
1#ifndef __RAMOOPS_H
2#define __RAMOOPS_H
3
4/*
5 * Ramoops platform data
6 * @mem_size memory size for ramoops
7 * @mem_address physical memory address to contain ramoops
8 */
9
10struct ramoops_platform_data {
11 unsigned long mem_size;
12 unsigned long mem_address;
13 unsigned long record_size;
14 int dump_oops;
15};
16
17#endif
diff --git a/include/linux/uuid.h b/include/linux/uuid.h
index 5b7efbfcee4e..f86c37bfd4a0 100644
--- a/include/linux/uuid.h
+++ b/include/linux/uuid.h
@@ -54,6 +54,8 @@ typedef struct {
54 UUID_BE(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, \ 54 UUID_BE(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, \
55 0x00, 0x00, 0x00, 0x00) 55 0x00, 0x00, 0x00, 0x00)
56 56
57#ifdef __KERNEL__
58
57static inline int uuid_le_cmp(const uuid_le u1, const uuid_le u2) 59static inline int uuid_le_cmp(const uuid_le u1, const uuid_le u2)
58{ 60{
59 return memcmp(&u1, &u2, sizeof(uuid_le)); 61 return memcmp(&u1, &u2, sizeof(uuid_le));
@@ -67,4 +69,6 @@ static inline int uuid_be_cmp(const uuid_be u1, const uuid_be u2)
67extern void uuid_le_gen(uuid_le *u); 69extern void uuid_le_gen(uuid_le *u);
68extern void uuid_be_gen(uuid_be *u); 70extern void uuid_be_gen(uuid_be *u);
69 71
72#endif /* __KERNEL__ */
73
70#endif 74#endif
diff --git a/include/linux/vme.h b/include/linux/vme.h
new file mode 100644
index 000000000000..c9d65bf14cec
--- /dev/null
+++ b/include/linux/vme.h
@@ -0,0 +1,174 @@
1#ifndef _VME_H_
2#define _VME_H_
3
4/* Resource Type */
5enum vme_resource_type {
6 VME_MASTER,
7 VME_SLAVE,
8 VME_DMA,
9 VME_LM
10};
11
12/* VME Address Spaces */
13#define VME_A16 0x1
14#define VME_A24 0x2
15#define VME_A32 0x4
16#define VME_A64 0x8
17#define VME_CRCSR 0x10
18#define VME_USER1 0x20
19#define VME_USER2 0x40
20#define VME_USER3 0x80
21#define VME_USER4 0x100
22
23#define VME_A16_MAX 0x10000ULL
24#define VME_A24_MAX 0x1000000ULL
25#define VME_A32_MAX 0x100000000ULL
26#define VME_A64_MAX 0x10000000000000000ULL
27#define VME_CRCSR_MAX 0x1000000ULL
28
29
30/* VME Cycle Types */
31#define VME_SCT 0x1
32#define VME_BLT 0x2
33#define VME_MBLT 0x4
34#define VME_2eVME 0x8
35#define VME_2eSST 0x10
36#define VME_2eSSTB 0x20
37
38#define VME_2eSST160 0x100
39#define VME_2eSST267 0x200
40#define VME_2eSST320 0x400
41
42#define VME_SUPER 0x1000
43#define VME_USER 0x2000
44#define VME_PROG 0x4000
45#define VME_DATA 0x8000
46
47/* VME Data Widths */
48#define VME_D8 0x1
49#define VME_D16 0x2
50#define VME_D32 0x4
51#define VME_D64 0x8
52
53/* Arbitration Scheduling Modes */
54#define VME_R_ROBIN_MODE 0x1
55#define VME_PRIORITY_MODE 0x2
56
57#define VME_DMA_PATTERN (1<<0)
58#define VME_DMA_PCI (1<<1)
59#define VME_DMA_VME (1<<2)
60
61#define VME_DMA_PATTERN_BYTE (1<<0)
62#define VME_DMA_PATTERN_WORD (1<<1)
63#define VME_DMA_PATTERN_INCREMENT (1<<2)
64
65#define VME_DMA_VME_TO_MEM (1<<0)
66#define VME_DMA_MEM_TO_VME (1<<1)
67#define VME_DMA_VME_TO_VME (1<<2)
68#define VME_DMA_MEM_TO_MEM (1<<3)
69#define VME_DMA_PATTERN_TO_VME (1<<4)
70#define VME_DMA_PATTERN_TO_MEM (1<<5)
71
72struct vme_dma_attr {
73 u32 type;
74 void *private;
75};
76
77struct vme_resource {
78 enum vme_resource_type type;
79 struct list_head *entry;
80};
81
82extern struct bus_type vme_bus_type;
83
84/* VME_MAX_BRIDGES comes from the type of vme_bus_numbers */
85#define VME_MAX_BRIDGES (sizeof(unsigned int)*8)
86#define VME_MAX_SLOTS 32
87
88#define VME_SLOT_CURRENT -1
89#define VME_SLOT_ALL -2
90
91/**
92 * Structure representing a VME device
93 * @num: The device number
94 * @bridge: Pointer to the bridge device this device is on
95 * @dev: Internal device structure
96 * @drv_list: List of devices (per driver)
97 * @bridge_list: List of devices (per bridge)
98 */
99struct vme_dev {
100 int num;
101 struct vme_bridge *bridge;
102 struct device dev;
103 struct list_head drv_list;
104 struct list_head bridge_list;
105};
106
107struct vme_driver {
108 struct list_head node;
109 const char *name;
110 int (*match)(struct vme_dev *);
111 int (*probe)(struct vme_dev *);
112 int (*remove)(struct vme_dev *);
113 void (*shutdown)(void);
114 struct device_driver driver;
115 struct list_head devices;
116};
117
118void *vme_alloc_consistent(struct vme_resource *, size_t, dma_addr_t *);
119void vme_free_consistent(struct vme_resource *, size_t, void *,
120 dma_addr_t);
121
122size_t vme_get_size(struct vme_resource *);
123
124struct vme_resource *vme_slave_request(struct vme_dev *, u32, u32);
125int vme_slave_set(struct vme_resource *, int, unsigned long long,
126 unsigned long long, dma_addr_t, u32, u32);
127int vme_slave_get(struct vme_resource *, int *, unsigned long long *,
128 unsigned long long *, dma_addr_t *, u32 *, u32 *);
129void vme_slave_free(struct vme_resource *);
130
131struct vme_resource *vme_master_request(struct vme_dev *, u32, u32, u32);
132int vme_master_set(struct vme_resource *, int, unsigned long long,
133 unsigned long long, u32, u32, u32);
134int vme_master_get(struct vme_resource *, int *, unsigned long long *,
135 unsigned long long *, u32 *, u32 *, u32 *);
136ssize_t vme_master_read(struct vme_resource *, void *, size_t, loff_t);
137ssize_t vme_master_write(struct vme_resource *, void *, size_t, loff_t);
138unsigned int vme_master_rmw(struct vme_resource *, unsigned int, unsigned int,
139 unsigned int, loff_t);
140void vme_master_free(struct vme_resource *);
141
142struct vme_resource *vme_dma_request(struct vme_dev *, u32);
143struct vme_dma_list *vme_new_dma_list(struct vme_resource *);
144struct vme_dma_attr *vme_dma_pattern_attribute(u32, u32);
145struct vme_dma_attr *vme_dma_pci_attribute(dma_addr_t);
146struct vme_dma_attr *vme_dma_vme_attribute(unsigned long long, u32, u32, u32);
147void vme_dma_free_attribute(struct vme_dma_attr *);
148int vme_dma_list_add(struct vme_dma_list *, struct vme_dma_attr *,
149 struct vme_dma_attr *, size_t);
150int vme_dma_list_exec(struct vme_dma_list *);
151int vme_dma_list_free(struct vme_dma_list *);
152int vme_dma_free(struct vme_resource *);
153
154int vme_irq_request(struct vme_dev *, int, int,
155 void (*callback)(int, int, void *), void *);
156void vme_irq_free(struct vme_dev *, int, int);
157int vme_irq_generate(struct vme_dev *, int, int);
158
159struct vme_resource *vme_lm_request(struct vme_dev *);
160int vme_lm_count(struct vme_resource *);
161int vme_lm_set(struct vme_resource *, unsigned long long, u32, u32);
162int vme_lm_get(struct vme_resource *, unsigned long long *, u32 *, u32 *);
163int vme_lm_attach(struct vme_resource *, int, void (*callback)(int));
164int vme_lm_detach(struct vme_resource *, int);
165void vme_lm_free(struct vme_resource *);
166
167int vme_slot_get(struct vme_dev *);
168
169int vme_register_driver(struct vme_driver *, unsigned int);
170void vme_unregister_driver(struct vme_driver *);
171
172
173#endif /* _VME_H_ */
174