cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

consumer.h (15350B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Industrial I/O in kernel consumer interface
      4 *
      5 * Copyright (c) 2011 Jonathan Cameron
      6 */
      7#ifndef _IIO_INKERN_CONSUMER_H_
      8#define _IIO_INKERN_CONSUMER_H_
      9
     10#include <linux/types.h>
     11#include <linux/iio/types.h>
     12
     13struct iio_dev;
     14struct iio_chan_spec;
     15struct device;
     16struct device_node;
     17
     18/**
     19 * struct iio_channel - everything needed for a consumer to use a channel
     20 * @indio_dev:		Device on which the channel exists.
     21 * @channel:		Full description of the channel.
     22 * @data:		Data about the channel used by consumer.
     23 */
     24struct iio_channel {
     25	struct iio_dev *indio_dev;
     26	const struct iio_chan_spec *channel;
     27	void *data;
     28};
     29
     30/**
     31 * iio_channel_get() - get description of all that is needed to access channel.
     32 * @dev:		Pointer to consumer device. Device name must match
     33 *			the name of the device as provided in the iio_map
     34 *			with which the desired provider to consumer mapping
     35 *			was registered.
     36 * @consumer_channel:	Unique name to identify the channel on the consumer
     37 *			side. This typically describes the channels use within
     38 *			the consumer. E.g. 'battery_voltage'
     39 */
     40struct iio_channel *iio_channel_get(struct device *dev,
     41				    const char *consumer_channel);
     42
     43/**
     44 * iio_channel_release() - release channels obtained via iio_channel_get
     45 * @chan:		The channel to be released.
     46 */
     47void iio_channel_release(struct iio_channel *chan);
     48
     49/**
     50 * devm_iio_channel_get() - Resource managed version of iio_channel_get().
     51 * @dev:		Pointer to consumer device. Device name must match
     52 *			the name of the device as provided in the iio_map
     53 *			with which the desired provider to consumer mapping
     54 *			was registered.
     55 * @consumer_channel:	Unique name to identify the channel on the consumer
     56 *			side. This typically describes the channels use within
     57 *			the consumer. E.g. 'battery_voltage'
     58 *
     59 * Returns a pointer to negative errno if it is not able to get the iio channel
     60 * otherwise returns valid pointer for iio channel.
     61 *
     62 * The allocated iio channel is automatically released when the device is
     63 * unbound.
     64 */
     65struct iio_channel *devm_iio_channel_get(struct device *dev,
     66					 const char *consumer_channel);
     67/**
     68 * iio_channel_get_all() - get all channels associated with a client
     69 * @dev:		Pointer to consumer device.
     70 *
     71 * Returns an array of iio_channel structures terminated with one with
     72 * null iio_dev pointer.
     73 * This function is used by fairly generic consumers to get all the
     74 * channels registered as having this consumer.
     75 */
     76struct iio_channel *iio_channel_get_all(struct device *dev);
     77
     78/**
     79 * iio_channel_release_all() - reverse iio_channel_get_all
     80 * @chan:		Array of channels to be released.
     81 */
     82void iio_channel_release_all(struct iio_channel *chan);
     83
     84/**
     85 * devm_iio_channel_get_all() - Resource managed version of
     86 *				iio_channel_get_all().
     87 * @dev: Pointer to consumer device.
     88 *
     89 * Returns a pointer to negative errno if it is not able to get the iio channel
     90 * otherwise returns an array of iio_channel structures terminated with one with
     91 * null iio_dev pointer.
     92 *
     93 * This function is used by fairly generic consumers to get all the
     94 * channels registered as having this consumer.
     95 *
     96 * The allocated iio channels are automatically released when the device is
     97 * unbounded.
     98 */
     99struct iio_channel *devm_iio_channel_get_all(struct device *dev);
    100
    101/**
    102 * of_iio_channel_get_by_name() - get description of all that is needed to access channel.
    103 * @np:			Pointer to consumer device tree node
    104 * @consumer_channel:	Unique name to identify the channel on the consumer
    105 *			side. This typically describes the channels use within
    106 *			the consumer. E.g. 'battery_voltage'
    107 */
    108#ifdef CONFIG_OF
    109struct iio_channel *of_iio_channel_get_by_name(struct device_node *np, const char *name);
    110#else
    111static inline struct iio_channel *
    112of_iio_channel_get_by_name(struct device_node *np, const char *name)
    113{
    114	return NULL;
    115}
    116#endif
    117
    118/**
    119 * devm_of_iio_channel_get_by_name() - Resource managed version of of_iio_channel_get_by_name().
    120 * @dev:		Pointer to consumer device.
    121 * @np:			Pointer to consumer device tree node
    122 * @consumer_channel:	Unique name to identify the channel on the consumer
    123 *			side. This typically describes the channels use within
    124 *			the consumer. E.g. 'battery_voltage'
    125 *
    126 * Returns a pointer to negative errno if it is not able to get the iio channel
    127 * otherwise returns valid pointer for iio channel.
    128 *
    129 * The allocated iio channel is automatically released when the device is
    130 * unbound.
    131 */
    132struct iio_channel *devm_of_iio_channel_get_by_name(struct device *dev,
    133						    struct device_node *np,
    134						    const char *consumer_channel);
    135
    136struct iio_cb_buffer;
    137/**
    138 * iio_channel_get_all_cb() - register callback for triggered capture
    139 * @dev:		Pointer to client device.
    140 * @cb:			Callback function.
    141 * @private:		Private data passed to callback.
    142 *
    143 * NB right now we have no ability to mux data from multiple devices.
    144 * So if the channels requested come from different devices this will
    145 * fail.
    146 */
    147struct iio_cb_buffer *iio_channel_get_all_cb(struct device *dev,
    148					     int (*cb)(const void *data,
    149						       void *private),
    150					     void *private);
    151/**
    152 * iio_channel_cb_set_buffer_watermark() - set the buffer watermark.
    153 * @cb_buffer:		The callback buffer from whom we want the channel
    154 *			information.
    155 * @watermark: buffer watermark in bytes.
    156 *
    157 * This function allows to configure the buffer watermark.
    158 */
    159int iio_channel_cb_set_buffer_watermark(struct iio_cb_buffer *cb_buffer,
    160					size_t watermark);
    161
    162/**
    163 * iio_channel_release_all_cb() - release and unregister the callback.
    164 * @cb_buffer:		The callback buffer that was allocated.
    165 */
    166void iio_channel_release_all_cb(struct iio_cb_buffer *cb_buffer);
    167
    168/**
    169 * iio_channel_start_all_cb() - start the flow of data through callback.
    170 * @cb_buff:		The callback buffer we are starting.
    171 */
    172int iio_channel_start_all_cb(struct iio_cb_buffer *cb_buff);
    173
    174/**
    175 * iio_channel_stop_all_cb() - stop the flow of data through the callback.
    176 * @cb_buff:		The callback buffer we are stopping.
    177 */
    178void iio_channel_stop_all_cb(struct iio_cb_buffer *cb_buff);
    179
    180/**
    181 * iio_channel_cb_get_channels() - get access to the underlying channels.
    182 * @cb_buffer:		The callback buffer from whom we want the channel
    183 *			information.
    184 *
    185 * This function allows one to obtain information about the channels.
    186 * Whilst this may allow direct reading if all buffers are disabled, the
    187 * primary aim is to allow drivers that are consuming a channel to query
    188 * things like scaling of the channel.
    189 */
    190struct iio_channel
    191*iio_channel_cb_get_channels(const struct iio_cb_buffer *cb_buffer);
    192
    193/**
    194 * iio_channel_cb_get_iio_dev() - get access to the underlying device.
    195 * @cb_buffer:		The callback buffer from whom we want the device
    196 *			information.
    197 *
    198 * This function allows one to obtain information about the device.
    199 * The primary aim is to allow drivers that are consuming a device to query
    200 * things like current trigger.
    201 */
    202struct iio_dev
    203*iio_channel_cb_get_iio_dev(const struct iio_cb_buffer *cb_buffer);
    204
    205/**
    206 * iio_read_channel_raw() - read from a given channel
    207 * @chan:		The channel being queried.
    208 * @val:		Value read back.
    209 *
    210 * Note raw reads from iio channels are in adc counts and hence
    211 * scale will need to be applied if standard units required.
    212 */
    213int iio_read_channel_raw(struct iio_channel *chan,
    214			 int *val);
    215
    216/**
    217 * iio_read_channel_average_raw() - read from a given channel
    218 * @chan:		The channel being queried.
    219 * @val:		Value read back.
    220 *
    221 * Note raw reads from iio channels are in adc counts and hence
    222 * scale will need to be applied if standard units required.
    223 *
    224 * In opposit to the normal iio_read_channel_raw this function
    225 * returns the average of multiple reads.
    226 */
    227int iio_read_channel_average_raw(struct iio_channel *chan, int *val);
    228
    229/**
    230 * iio_read_channel_processed() - read processed value from a given channel
    231 * @chan:		The channel being queried.
    232 * @val:		Value read back.
    233 *
    234 * Returns an error code or 0.
    235 *
    236 * This function will read a processed value from a channel. A processed value
    237 * means that this value will have the correct unit and not some device internal
    238 * representation. If the device does not support reporting a processed value
    239 * the function will query the raw value and the channels scale and offset and
    240 * do the appropriate transformation.
    241 */
    242int iio_read_channel_processed(struct iio_channel *chan, int *val);
    243
    244/**
    245 * iio_read_channel_processed_scale() - read and scale a processed value
    246 * @chan:		The channel being queried.
    247 * @val:		Value read back.
    248 * @scale:		Scale factor to apply during the conversion
    249 *
    250 * Returns an error code or 0.
    251 *
    252 * This function will read a processed value from a channel. This will work
    253 * like @iio_read_channel_processed() but also scale with an additional
    254 * scale factor while attempting to minimize any precision loss.
    255 */
    256int iio_read_channel_processed_scale(struct iio_channel *chan, int *val,
    257				     unsigned int scale);
    258
    259/**
    260 * iio_write_channel_attribute() - Write values to the device attribute.
    261 * @chan:	The channel being queried.
    262 * @val:	Value being written.
    263 * @val2:	Value being written.val2 use depends on attribute type.
    264 * @attribute:	info attribute to be read.
    265 *
    266 * Returns an error code or 0.
    267 */
    268int iio_write_channel_attribute(struct iio_channel *chan, int val,
    269				int val2, enum iio_chan_info_enum attribute);
    270
    271/**
    272 * iio_read_channel_attribute() - Read values from the device attribute.
    273 * @chan:	The channel being queried.
    274 * @val:	Value being written.
    275 * @val2:	Value being written.Val2 use depends on attribute type.
    276 * @attribute:	info attribute to be written.
    277 *
    278 * Returns an error code if failed. Else returns a description of what is in val
    279 * and val2, such as IIO_VAL_INT_PLUS_MICRO telling us we have a value of val
    280 * + val2/1e6
    281 */
    282int iio_read_channel_attribute(struct iio_channel *chan, int *val,
    283			       int *val2, enum iio_chan_info_enum attribute);
    284
    285/**
    286 * iio_write_channel_raw() - write to a given channel
    287 * @chan:		The channel being queried.
    288 * @val:		Value being written.
    289 *
    290 * Note raw writes to iio channels are in dac counts and hence
    291 * scale will need to be applied if standard units required.
    292 */
    293int iio_write_channel_raw(struct iio_channel *chan, int val);
    294
    295/**
    296 * iio_read_max_channel_raw() - read maximum available raw value from a given
    297 *				channel, i.e. the maximum possible value.
    298 * @chan:		The channel being queried.
    299 * @val:		Value read back.
    300 *
    301 * Note raw reads from iio channels are in adc counts and hence
    302 * scale will need to be applied if standard units are required.
    303 */
    304int iio_read_max_channel_raw(struct iio_channel *chan, int *val);
    305
    306/**
    307 * iio_read_avail_channel_raw() - read available raw values from a given channel
    308 * @chan:		The channel being queried.
    309 * @vals:		Available values read back.
    310 * @length:		Number of entries in vals.
    311 *
    312 * Returns an error code, IIO_AVAIL_RANGE or IIO_AVAIL_LIST.
    313 *
    314 * For ranges, three vals are always returned; min, step and max.
    315 * For lists, all the possible values are enumerated.
    316 *
    317 * Note raw available values from iio channels are in adc counts and
    318 * hence scale will need to be applied if standard units are required.
    319 */
    320int iio_read_avail_channel_raw(struct iio_channel *chan,
    321			       const int **vals, int *length);
    322
    323/**
    324 * iio_read_avail_channel_attribute() - read available channel attribute values
    325 * @chan:		The channel being queried.
    326 * @vals:		Available values read back.
    327 * @type:		Type of values read back.
    328 * @length:		Number of entries in vals.
    329 * @attribute:		info attribute to be read back.
    330 *
    331 * Returns an error code, IIO_AVAIL_RANGE or IIO_AVAIL_LIST.
    332 */
    333int iio_read_avail_channel_attribute(struct iio_channel *chan,
    334				     const int **vals, int *type, int *length,
    335				     enum iio_chan_info_enum attribute);
    336
    337/**
    338 * iio_get_channel_type() - get the type of a channel
    339 * @channel:		The channel being queried.
    340 * @type:		The type of the channel.
    341 *
    342 * returns the enum iio_chan_type of the channel
    343 */
    344int iio_get_channel_type(struct iio_channel *channel,
    345			 enum iio_chan_type *type);
    346
    347/**
    348 * iio_read_channel_offset() - read the offset value for a channel
    349 * @chan:		The channel being queried.
    350 * @val:		First part of value read back.
    351 * @val2:		Second part of value read back.
    352 *
    353 * Note returns a description of what is in val and val2, such
    354 * as IIO_VAL_INT_PLUS_MICRO telling us we have a value of val
    355 * + val2/1e6
    356 */
    357int iio_read_channel_offset(struct iio_channel *chan, int *val,
    358			   int *val2);
    359
    360/**
    361 * iio_read_channel_scale() - read the scale value for a channel
    362 * @chan:		The channel being queried.
    363 * @val:		First part of value read back.
    364 * @val2:		Second part of value read back.
    365 *
    366 * Note returns a description of what is in val and val2, such
    367 * as IIO_VAL_INT_PLUS_MICRO telling us we have a value of val
    368 * + val2/1e6
    369 */
    370int iio_read_channel_scale(struct iio_channel *chan, int *val,
    371			   int *val2);
    372
    373/**
    374 * iio_convert_raw_to_processed() - Converts a raw value to a processed value
    375 * @chan:		The channel being queried
    376 * @raw:		The raw IIO to convert
    377 * @processed:		The result of the conversion
    378 * @scale:		Scale factor to apply during the conversion
    379 *
    380 * Returns an error code or 0.
    381 *
    382 * This function converts a raw value to processed value for a specific channel.
    383 * A raw value is the device internal representation of a sample and the value
    384 * returned by iio_read_channel_raw, so the unit of that value is device
    385 * depended. A processed value on the other hand is value has a normed unit
    386 * according with the IIO specification.
    387 *
    388 * The scale factor allows to increase the precession of the returned value. For
    389 * a scale factor of 1 the function will return the result in the normal IIO
    390 * unit for the channel type. E.g. millivolt for voltage channels, if you want
    391 * nanovolts instead pass 1000000 as the scale factor.
    392 */
    393int iio_convert_raw_to_processed(struct iio_channel *chan, int raw,
    394	int *processed, unsigned int scale);
    395
    396/**
    397 * iio_get_channel_ext_info_count() - get number of ext_info attributes
    398 *				      connected to the channel.
    399 * @chan:		The channel being queried
    400 *
    401 * Returns the number of ext_info attributes
    402 */
    403unsigned int iio_get_channel_ext_info_count(struct iio_channel *chan);
    404
    405/**
    406 * iio_read_channel_ext_info() - read ext_info attribute from a given channel
    407 * @chan:		The channel being queried.
    408 * @attr:		The ext_info attribute to read.
    409 * @buf:		Where to store the attribute value. Assumed to hold
    410 *			at least PAGE_SIZE bytes.
    411 *
    412 * Returns the number of bytes written to buf (perhaps w/o zero termination;
    413 * it need not even be a string), or an error code.
    414 */
    415ssize_t iio_read_channel_ext_info(struct iio_channel *chan,
    416				  const char *attr, char *buf);
    417
    418/**
    419 * iio_write_channel_ext_info() - write ext_info attribute from a given channel
    420 * @chan:		The channel being queried.
    421 * @attr:		The ext_info attribute to read.
    422 * @buf:		The new attribute value. Strings needs to be zero-
    423 *			terminated, but the terminator should not be included
    424 *			in the below len.
    425 * @len:		The size of the new attribute value.
    426 *
    427 * Returns the number of accepted bytes, which should be the same as len.
    428 * An error code can also be returned.
    429 */
    430ssize_t iio_write_channel_ext_info(struct iio_channel *chan, const char *attr,
    431				   const char *buf, size_t len);
    432
    433#endif