1// SPDX-License-Identifier: GPL-2.0+ 2/* 3 * comedidev.h 4 * header file for kernel-only structures, variables, and constants 5 * 6 * COMEDI - Linux Control and Measurement Device Interface 7 * Copyright (C) 1997-2000 David A. Schleef <ds@schleef.org> 8 */ 9 10#ifndef _COMEDIDEV_H 11#define _COMEDIDEV_H 12 13#include <linux/dma-mapping.h> 14#include <linux/mutex.h> 15#include <linux/spinlock_types.h> 16#include <linux/rwsem.h> 17#include <linux/kref.h> 18 19#include "comedi.h" 20 21#define COMEDI_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + (c)) 22#define COMEDI_VERSION_CODE COMEDI_VERSION(COMEDI_MAJORVERSION, \ 23 COMEDI_MINORVERSION, COMEDI_MICROVERSION) 24#define COMEDI_RELEASE VERSION 25 26#define COMEDI_NUM_BOARD_MINORS 0x30 27 28/** 29 * struct comedi_subdevice - Working data for a COMEDI subdevice 30 * @device: COMEDI device to which this subdevice belongs. (Initialized by 31 * comedi_alloc_subdevices().) 32 * @index: Index of this subdevice within device's array of subdevices. 33 * (Initialized by comedi_alloc_subdevices().) 34 * @type: Type of subdevice from &enum comedi_subdevice_type. (Initialized by 35 * the low-level driver.) 36 * @n_chan: Number of channels the subdevice supports. (Initialized by the 37 * low-level driver.) 38 * @subdev_flags: Various "SDF" flags indicating aspects of the subdevice to 39 * the COMEDI core and user application. (Initialized by the low-level 40 * driver.) 41 * @len_chanlist: Maximum length of a channel list if the subdevice supports 42 * asynchronous acquisition commands. (Optionally initialized by the 43 * low-level driver, or changed from 0 to 1 during post-configuration.) 44 * @private: Private data pointer which is either set by the low-level driver 45 * itself, or by a call to comedi_alloc_spriv() which allocates storage. 46 * In the latter case, the storage is automatically freed after the 47 * low-level driver's "detach" handler is called for the device. 48 * (Initialized by the low-level driver.) 49 * @async: Pointer to &struct comedi_async id the subdevice supports 50 * asynchronous acquisition commands. (Allocated and initialized during 51 * post-configuration if needed.) 52 * @lock: Pointer to a file object that performed a %COMEDI_LOCK ioctl on the 53 * subdevice. (Initially NULL.) 54 * @busy: Pointer to a file object that is performing an asynchronous 55 * acquisition command on the subdevice. (Initially NULL.) 56 * @runflags: Internal flags for use by COMEDI core, mostly indicating whether 57 * an asynchronous acquisition command is running. 58 * @spin_lock: Generic spin-lock for use by the COMEDI core and the low-level 59 * driver. (Initialized by comedi_alloc_subdevices().) 60 * @io_bits: Bit-mask indicating the channel directions for a DIO subdevice 61 * with no more than 32 channels. A '1' at a bit position indicates the 62 * corresponding channel is configured as an output. (Initialized by the 63 * low-level driver for a DIO subdevice. Forced to all-outputs during 64 * post-configuration for a digital output subdevice.) 65 * @maxdata: If non-zero, this is the maximum raw data value of each channel. 66 * If zero, the maximum data value is channel-specific. (Initialized by 67 * the low-level driver.) 68 * @maxdata_list: If the maximum data value is channel-specific, this points 69 * to an array of maximum data values indexed by channel index. 70 * (Initialized by the low-level driver.) 71 * @range_table: If non-NULL, this points to a COMEDI range table for the 72 * subdevice. If NULL, the range table is channel-specific. (Initialized 73 * by the low-level driver, will be set to an "invalid" range table during 74 * post-configuration if @range_table and @range_table_list are both 75 * NULL.) 76 * @range_table_list: If the COMEDI range table is channel-specific, this 77 * points to an array of pointers to COMEDI range tables indexed by 78 * channel number. (Initialized by the low-level driver.) 79 * @chanlist: Not used. 80 * @insn_read: Optional pointer to a handler for the %INSN_READ instruction. 81 * (Initialized by the low-level driver, or set to a default handler 82 * during post-configuration.) 83 * @insn_write: Optional pointer to a handler for the %INSN_WRITE instruction. 84 * (Initialized by the low-level driver, or set to a default handler 85 * during post-configuration.) 86 * @insn_bits: Optional pointer to a handler for the %INSN_BITS instruction 87 * for a digital input, digital output or digital input/output subdevice. 88 * (Initialized by the low-level driver, or set to a default handler 89 * during post-configuration.) 90 * @insn_config: Optional pointer to a handler for the %INSN_CONFIG 91 * instruction. (Initialized by the low-level driver, or set to a default 92 * handler during post-configuration.) 93 * @do_cmd: If the subdevice supports asynchronous acquisition commands, this 94 * points to a handler to set it up in hardware. (Initialized by the 95 * low-level driver.) 96 * @do_cmdtest: If the subdevice supports asynchronous acquisition commands, 97 * this points to a handler used to check and possibly tweak a prospective 98 * acquisition command without setting it up in hardware. (Initialized by 99 * the low-level driver.) 100 * @poll: If the subdevice supports asynchronous acquisition commands, this 101 * is an optional pointer to a handler for the %COMEDI_POLL ioctl which 102 * instructs the low-level driver to synchronize buffers. (Initialized by 103 * the low-level driver if needed.) 104 * @cancel: If the subdevice supports asynchronous acquisition commands, this 105 * points to a handler used to terminate a running command. (Initialized 106 * by the low-level driver.) 107 * @buf_change: If the subdevice supports asynchronous acquisition commands, 108 * this is an optional pointer to a handler that is called when the data 109 * buffer for handling asynchronous commands is allocated or reallocated. 110 * (Initialized by the low-level driver if needed.) 111 * @munge: If the subdevice supports asynchronous acquisition commands and 112 * uses DMA to transfer data from the hardware to the acquisition buffer, 113 * this points to a function used to "munge" the data values from the 114 * hardware into the format expected by COMEDI. (Initialized by the 115 * low-level driver if needed.) 116 * @async_dma_dir: If the subdevice supports asynchronous acquisition commands 117 * and uses DMA to transfer data from the hardware to the acquisition 118 * buffer, this sets the DMA direction for the buffer. (initialized to 119 * %DMA_NONE by comedi_alloc_subdevices() and changed by the low-level 120 * driver if necessary.) 121 * @state: Handy bit-mask indicating the output states for a DIO or digital 122 * output subdevice with no more than 32 channels. (Initialized by the 123 * low-level driver.) 124 * @class_dev: If the subdevice supports asynchronous acquisition commands, 125 * this points to a sysfs comediX_subdY device where X is the minor device 126 * number of the COMEDI device and Y is the subdevice number. The minor 127 * device number for the sysfs device is allocated dynamically in the 128 * range 48 to 255. This is used to allow the COMEDI device to be opened 129 * with a different default read or write subdevice. (Allocated during 130 * post-configuration if needed.) 131 * @minor: If @class_dev is set, this is its dynamically allocated minor 132 * device number. (Set during post-configuration if necessary.) 133 * @readback: Optional pointer to memory allocated by 134 * comedi_alloc_subdev_readback() used to hold the values written to 135 * analog output channels so they can be read back. The storage is 136 * automatically freed after the low-level driver's "detach" handler is 137 * called for the device. (Initialized by the low-level driver.) 138 * 139 * This is the main control structure for a COMEDI subdevice. If the subdevice 140 * supports asynchronous acquisition commands, additional information is stored 141 * in the &struct comedi_async pointed to by @async. 142 * 143 * Most of the subdevice is initialized by the low-level driver's "attach" or 144 * "auto_attach" handlers but parts of it are initialized by 145 * comedi_alloc_subdevices(), and other parts are initialized during 146 * post-configuration on return from that handler. 147 * 148 * A low-level driver that sets @insn_bits for a digital input, digital output, 149 * or DIO subdevice may leave @insn_read and @insn_write uninitialized, in 150 * which case they will be set to a default handler during post-configuration 151 * that uses @insn_bits to emulate the %INSN_READ and %INSN_WRITE instructions. 152 */ 153struct comedi_subdevice { 154 struct comedi_device *device; 155 int index; 156 int type; 157 int n_chan; 158 int subdev_flags; 159 int len_chanlist; /* maximum length of channel/gain list */ 160 161 void *private; 162 163 struct comedi_async *async; 164 165 void *lock; 166 void *busy; 167 unsigned int runflags; 168 spinlock_t spin_lock; /* generic spin-lock for COMEDI and drivers */ 169 170 unsigned int io_bits; 171 172 unsigned int maxdata; /* if maxdata==0, use list */ 173 const unsigned int *maxdata_list; /* list is channel specific */ 174 175 const struct comedi_lrange *range_table; 176 const struct comedi_lrange *const *range_table_list; 177 178 unsigned int *chanlist; /* driver-owned chanlist (not used) */ 179 180 int (*insn_read)(struct comedi_device *dev, struct comedi_subdevice *s, 181 struct comedi_insn *insn, unsigned int *data); 182 int (*insn_write)(struct comedi_device *dev, struct comedi_subdevice *s, 183 struct comedi_insn *insn, unsigned int *data); 184 int (*insn_bits)(struct comedi_device *dev, struct comedi_subdevice *s, 185 struct comedi_insn *insn, unsigned int *data); 186 int (*insn_config)(struct comedi_device *dev, 187 struct comedi_subdevice *s, 188 struct comedi_insn *insn, 189 unsigned int *data); 190 191 int (*do_cmd)(struct comedi_device *dev, struct comedi_subdevice *s); 192 int (*do_cmdtest)(struct comedi_device *dev, 193 struct comedi_subdevice *s, 194 struct comedi_cmd *cmd); 195 int (*poll)(struct comedi_device *dev, struct comedi_subdevice *s); 196 int (*cancel)(struct comedi_device *dev, struct comedi_subdevice *s); 197 198 /* called when the buffer changes */ 199 int (*buf_change)(struct comedi_device *dev, 200 struct comedi_subdevice *s); 201 202 void (*munge)(struct comedi_device *dev, struct comedi_subdevice *s, 203 void *data, unsigned int num_bytes, 204 unsigned int start_chan_index); 205 enum dma_data_direction async_dma_dir; 206 207 unsigned int state; 208 209 struct device *class_dev; 210 int minor; 211 212 unsigned int *readback; 213}; 214 215/** 216 * struct comedi_buf_page - Describe a page of a COMEDI buffer 217 * @virt_addr: Kernel address of page. 218 * @dma_addr: DMA address of page if in DMA coherent memory. 219 */ 220struct comedi_buf_page { 221 void *virt_addr; 222 dma_addr_t dma_addr; 223}; 224 225/** 226 * struct comedi_buf_map - Describe pages in a COMEDI buffer 227 * @dma_hw_dev: Low-level hardware &struct device pointer copied from the 228 * COMEDI device's hw_dev member. 229 * @page_list: Pointer to array of &struct comedi_buf_page, one for each 230 * page in the buffer. 231 * @n_pages: Number of pages in the buffer. 232 * @dma_dir: DMA direction used to allocate pages of DMA coherent memory, 233 * or %DMA_NONE if pages allocated from regular memory. 234 * @refcount: &struct kref reference counter used to free the buffer. 235 * 236 * A COMEDI data buffer is allocated as individual pages, either in 237 * conventional memory or DMA coherent memory, depending on the attached, 238 * low-level hardware device. (The buffer pages also get mapped into the 239 * kernel's contiguous virtual address space pointed to by the 'prealloc_buf' 240 * member of &struct comedi_async.) 241 * 242 * The buffer is normally freed when the COMEDI device is detached from the 243 * low-level driver (which may happen due to device removal), but if it happens 244 * to be mmapped at the time, the pages cannot be freed until the buffer has 245 * been munmapped. That is what the reference counter is for. (The virtual 246 * address space pointed by 'prealloc_buf' is freed when the COMEDI device is 247 * detached.) 248 */ 249struct comedi_buf_map { 250 struct device *dma_hw_dev; 251 struct comedi_buf_page *page_list; 252 unsigned int n_pages; 253 enum dma_data_direction dma_dir; 254 struct kref refcount; 255}; 256 257/** 258 * struct comedi_async - Control data for asynchronous COMEDI commands 259 * @prealloc_buf: Kernel virtual address of allocated acquisition buffer. 260 * @prealloc_bufsz: Buffer size (in bytes). 261 * @buf_map: Map of buffer pages. 262 * @max_bufsize: Maximum allowed buffer size (in bytes). 263 * @buf_write_count: "Write completed" count (in bytes, modulo 2**32). 264 * @buf_write_alloc_count: "Allocated for writing" count (in bytes, 265 * modulo 2**32). 266 * @buf_read_count: "Read completed" count (in bytes, modulo 2**32). 267 * @buf_read_alloc_count: "Allocated for reading" count (in bytes, 268 * modulo 2**32). 269 * @buf_write_ptr: Buffer position for writer. 270 * @buf_read_ptr: Buffer position for reader. 271 * @cur_chan: Current position in chanlist for scan (for those drivers that 272 * use it). 273 * @scans_done: The number of scans completed. 274 * @scan_progress: Amount received or sent for current scan (in bytes). 275 * @munge_chan: Current position in chanlist for "munging". 276 * @munge_count: "Munge" count (in bytes, modulo 2**32). 277 * @munge_ptr: Buffer position for "munging". 278 * @events: Bit-vector of events that have occurred. 279 * @cmd: Details of comedi command in progress. 280 * @wait_head: Task wait queue for file reader or writer. 281 * @cb_mask: Bit-vector of events that should wake waiting tasks. 282 * @inttrig: Software trigger function for command, or NULL. 283 * 284 * Note about the ..._count and ..._ptr members: 285 * 286 * Think of the _Count values being integers of unlimited size, indexing 287 * into a buffer of infinite length (though only an advancing portion 288 * of the buffer of fixed length prealloc_bufsz is accessible at any 289 * time). Then: 290 * 291 * Buf_Read_Count <= Buf_Read_Alloc_Count <= Munge_Count <= 292 * Buf_Write_Count <= Buf_Write_Alloc_Count <= 293 * (Buf_Read_Count + prealloc_bufsz) 294 * 295 * (Those aren't the actual members, apart from prealloc_bufsz.) When the 296 * buffer is reset, those _Count values start at 0 and only increase in value, 297 * maintaining the above inequalities until the next time the buffer is 298 * reset. The buffer is divided into the following regions by the inequalities: 299 * 300 * [0, Buf_Read_Count): 301 * old region no longer accessible 302 * 303 * [Buf_Read_Count, Buf_Read_Alloc_Count): 304 * filled and munged region allocated for reading but not yet read 305 * 306 * [Buf_Read_Alloc_Count, Munge_Count): 307 * filled and munged region not yet allocated for reading 308 * 309 * [Munge_Count, Buf_Write_Count): 310 * filled region not yet munged 311 * 312 * [Buf_Write_Count, Buf_Write_Alloc_Count): 313 * unfilled region allocated for writing but not yet written 314 * 315 * [Buf_Write_Alloc_Count, Buf_Read_Count + prealloc_bufsz): 316 * unfilled region not yet allocated for writing 317 * 318 * [Buf_Read_Count + prealloc_bufsz, infinity): 319 * unfilled region not yet accessible 320 * 321 * Data needs to be written into the buffer before it can be read out, 322 * and may need to be converted (or "munged") between the two 323 * operations. Extra unfilled buffer space may need to allocated for 324 * writing (advancing Buf_Write_Alloc_Count) before new data is written. 325 * After writing new data, the newly filled space needs to be released 326 * (advancing Buf_Write_Count). This also results in the new data being 327 * "munged" (advancing Munge_Count). Before data is read out of the 328 * buffer, extra space may need to be allocated for reading (advancing 329 * Buf_Read_Alloc_Count). After the data has been read out, the space 330 * needs to be released (advancing Buf_Read_Count). 331 * 332 * The actual members, buf_read_count, buf_read_alloc_count, 333 * munge_count, buf_write_count, and buf_write_alloc_count take the 334 * value of the corresponding capitalized _Count values modulo 2^32 335 * (UINT_MAX+1). Subtracting a "higher" _count value from a "lower" 336 * _count value gives the same answer as subtracting a "higher" _Count 337 * value from a lower _Count value because prealloc_bufsz < UINT_MAX+1. 338 * The modulo operation is done implicitly. 339 * 340 * The buf_read_ptr, munge_ptr, and buf_write_ptr members take the value 341 * of the corresponding capitalized _Count values modulo prealloc_bufsz. 342 * These correspond to byte indices in the physical buffer. The modulo 343 * operation is done by subtracting prealloc_bufsz when the value 344 * exceeds prealloc_bufsz (assuming prealloc_bufsz plus the increment is 345 * less than or equal to UINT_MAX). 346 */ 347struct comedi_async { 348 void *prealloc_buf; 349 unsigned int prealloc_bufsz; 350 struct comedi_buf_map *buf_map; 351 unsigned int max_bufsize; 352 unsigned int buf_write_count; 353 unsigned int buf_write_alloc_count; 354 unsigned int buf_read_count; 355 unsigned int buf_read_alloc_count; 356 unsigned int buf_write_ptr; 357 unsigned int buf_read_ptr; 358 unsigned int cur_chan; 359 unsigned int scans_done; 360 unsigned int scan_progress; 361 unsigned int munge_chan; 362 unsigned int munge_count; 363 unsigned int munge_ptr; 364 unsigned int events; 365 struct comedi_cmd cmd; 366 wait_queue_head_t wait_head; 367 unsigned int cb_mask; 368 int (*inttrig)(struct comedi_device *dev, struct comedi_subdevice *s, 369 unsigned int x); 370}; 371 372/** 373 * enum comedi_cb - &struct comedi_async callback "events" 374 * @COMEDI_CB_EOS: end-of-scan 375 * @COMEDI_CB_EOA: end-of-acquisition/output 376 * @COMEDI_CB_BLOCK: data has arrived, wakes up read() / write() 377 * @COMEDI_CB_EOBUF: DEPRECATED: end of buffer 378 * @COMEDI_CB_ERROR: card error during acquisition 379 * @COMEDI_CB_OVERFLOW: buffer overflow/underflow 380 * @COMEDI_CB_ERROR_MASK: events that indicate an error has occurred 381 * @COMEDI_CB_CANCEL_MASK: events that will cancel an async command 382 */ 383enum comedi_cb { 384 COMEDI_CB_EOS = BIT(0), 385 COMEDI_CB_EOA = BIT(1), 386 COMEDI_CB_BLOCK = BIT(2), 387 COMEDI_CB_EOBUF = BIT(3), 388 COMEDI_CB_ERROR = BIT(4), 389 COMEDI_CB_OVERFLOW = BIT(5), 390 /* masks */ 391 COMEDI_CB_ERROR_MASK = (COMEDI_CB_ERROR | COMEDI_CB_OVERFLOW), 392 COMEDI_CB_CANCEL_MASK = (COMEDI_CB_EOA | COMEDI_CB_ERROR_MASK) 393}; 394 395/** 396 * struct comedi_driver - COMEDI driver registration 397 * @driver_name: Name of driver. 398 * @module: Owning module. 399 * @attach: The optional "attach" handler for manually configured COMEDI 400 * devices. 401 * @detach: The "detach" handler for deconfiguring COMEDI devices. 402 * @auto_attach: The optional "auto_attach" handler for automatically 403 * configured COMEDI devices. 404 * @num_names: Optional number of "board names" supported. 405 * @board_name: Optional pointer to a pointer to a board name. The pointer 406 * to a board name is embedded in an element of a driver-defined array 407 * of static, read-only board type information. 408 * @offset: Optional size of each element of the driver-defined array of 409 * static, read-only board type information, i.e. the offset between each 410 * pointer to a board name. 411 * 412 * This is used with comedi_driver_register() and comedi_driver_unregister() to 413 * register and unregister a low-level COMEDI driver with the COMEDI core. 414 * 415 * If @num_names is non-zero, @board_name should be non-NULL, and @offset 416 * should be at least sizeof(*board_name). These are used by the handler for 417 * the %COMEDI_DEVCONFIG ioctl to match a hardware device and its driver by 418 * board name. If @num_names is zero, the %COMEDI_DEVCONFIG ioctl matches a 419 * hardware device and its driver by driver name. This is only useful if the 420 * @attach handler is set. If @num_names is non-zero, the driver's @attach 421 * handler will be called with the COMEDI device structure's board_ptr member 422 * pointing to the matched pointer to a board name within the driver's private 423 * array of static, read-only board type information. 424 * 425 * The @detach handler has two roles. If a COMEDI device was successfully 426 * configured by the @attach or @auto_attach handler, it is called when the 427 * device is being deconfigured (by the %COMEDI_DEVCONFIG ioctl, or due to 428 * unloading of the driver, or due to device removal). It is also called when 429 * the @attach or @auto_attach handler returns an error. Therefore, the 430 * @attach or @auto_attach handlers can defer clean-up on error until the 431 * @detach handler is called. If the @attach or @auto_attach handlers free 432 * any resources themselves, they must prevent the @detach handler from 433 * freeing the same resources. The @detach handler must not assume that all 434 * resources requested by the @attach or @auto_attach handler were 435 * successfully allocated. 436 */ 437struct comedi_driver { 438 /* private: */ 439 struct comedi_driver *next; /* Next in list of COMEDI drivers. */ 440 /* public: */ 441 const char *driver_name; 442 struct module *module; 443 int (*attach)(struct comedi_device *dev, struct comedi_devconfig *it); 444 void (*detach)(struct comedi_device *dev); 445 int (*auto_attach)(struct comedi_device *dev, unsigned long context); 446 unsigned int num_names; 447 const char *const *board_name; 448 int offset; 449}; 450 451/** 452 * struct comedi_device - Working data for a COMEDI device 453 * @use_count: Number of open file objects. 454 * @driver: Low-level COMEDI driver attached to this COMEDI device. 455 * @pacer: Optional pointer to a dynamically allocated acquisition pacer 456 * control. It is freed automatically after the COMEDI device is 457 * detached from the low-level driver. 458 * @private: Optional pointer to private data allocated by the low-level 459 * driver. It is freed automatically after the COMEDI device is 460 * detached from the low-level driver. 461 * @class_dev: Sysfs comediX device. 462 * @minor: Minor device number of COMEDI char device (0-47). 463 * @detach_count: Counter incremented every time the COMEDI device is detached. 464 * Used for checking a previous attachment is still valid. 465 * @hw_dev: Optional pointer to the low-level hardware &struct device. It is 466 * required for automatically configured COMEDI devices and optional for 467 * COMEDI devices configured by the %COMEDI_DEVCONFIG ioctl, although 468 * the bus-specific COMEDI functions only work if it is set correctly. 469 * It is also passed to dma_alloc_coherent() for COMEDI subdevices that 470 * have their 'async_dma_dir' member set to something other than 471 * %DMA_NONE. 472 * @board_name: Pointer to a COMEDI board name or a COMEDI driver name. When 473 * the low-level driver's "attach" handler is called by the handler for 474 * the %COMEDI_DEVCONFIG ioctl, it either points to a matched board name 475 * string if the 'num_names' member of the &struct comedi_driver is 476 * non-zero, otherwise it points to the low-level driver name string. 477 * When the low-lever driver's "auto_attach" handler is called for an 478 * automatically configured COMEDI device, it points to the low-level 479 * driver name string. The low-level driver is free to change it in its 480 * "attach" or "auto_attach" handler if it wishes. 481 * @board_ptr: Optional pointer to private, read-only board type information in 482 * the low-level driver. If the 'num_names' member of the &struct 483 * comedi_driver is non-zero, the handler for the %COMEDI_DEVCONFIG ioctl 484 * will point it to a pointer to a matched board name string within the 485 * driver's private array of static, read-only board type information when 486 * calling the driver's "attach" handler. The low-level driver is free to 487 * change it. 488 * @attached: Flag indicating that the COMEDI device is attached to a low-level 489 * driver. 490 * @ioenabled: Flag used to indicate that a PCI device has been enabled and 491 * its regions requested. 492 * @spinlock: Generic spin-lock for use by the low-level driver. 493 * @mutex: Generic mutex for use by the COMEDI core module. 494 * @attach_lock: &struct rw_semaphore used to guard against the COMEDI device 495 * being detached while an operation is in progress. The down_write() 496 * operation is only allowed while @mutex is held and is used when 497 * changing @attached and @detach_count and calling the low-level driver's 498 * "detach" handler. The down_read() operation is generally used without 499 * holding @mutex. 500 * @refcount: &struct kref reference counter for freeing COMEDI device. 501 * @n_subdevices: Number of COMEDI subdevices allocated by the low-level 502 * driver for this device. 503 * @subdevices: Dynamically allocated array of COMEDI subdevices. 504 * @mmio: Optional pointer to a remapped MMIO region set by the low-level 505 * driver. 506 * @iobase: Optional base of an I/O port region requested by the low-level 507 * driver. 508 * @iolen: Length of I/O port region requested at @iobase. 509 * @irq: Optional IRQ number requested by the low-level driver. 510 * @read_subdev: Optional pointer to a default COMEDI subdevice operated on by 511 * the read() file operation. Set by the low-level driver. 512 * @write_subdev: Optional pointer to a default COMEDI subdevice operated on by 513 * the write() file operation. Set by the low-level driver. 514 * @async_queue: Storage for fasync_helper(). 515 * @open: Optional pointer to a function set by the low-level driver to be 516 * called when @use_count changes from 0 to 1. 517 * @close: Optional pointer to a function set by the low-level driver to be 518 * called when @use_count changed from 1 to 0. 519 * 520 * This is the main control data structure for a COMEDI device (as far as the 521 * COMEDI core is concerned). There are two groups of COMEDI devices - 522 * "legacy" devices that are configured by the handler for the 523 * %COMEDI_DEVCONFIG ioctl, and automatically configured devices resulting 524 * from a call to comedi_auto_config() as a result of a bus driver probe in 525 * a low-level COMEDI driver. The "legacy" COMEDI devices are allocated 526 * during module initialization if the "comedi_num_legacy_minors" module 527 * parameter is non-zero and use minor device numbers from 0 to 528 * comedi_num_legacy_minors minus one. The automatically configured COMEDI 529 * devices are allocated on demand and use minor device numbers from 530 * comedi_num_legacy_minors to 47. 531 */ 532struct comedi_device { 533 int use_count; 534 struct comedi_driver *driver; 535 struct comedi_8254 *pacer; 536 void *private; 537 538 struct device *class_dev; 539 int minor; 540 unsigned int detach_count; 541 struct device *hw_dev; 542 543 const char *board_name; 544 const void *board_ptr; 545 bool attached:1; 546 bool ioenabled:1; 547 spinlock_t spinlock; /* generic spin-lock for low-level driver */ 548 struct mutex mutex; /* generic mutex for COMEDI core */ 549 struct rw_semaphore attach_lock; 550 struct kref refcount; 551 552 int n_subdevices; 553 struct comedi_subdevice *subdevices; 554 555 /* dumb */ 556 void __iomem *mmio; 557 unsigned long iobase; 558 unsigned long iolen; 559 unsigned int irq; 560 561 struct comedi_subdevice *read_subdev; 562 struct comedi_subdevice *write_subdev; 563 564 struct fasync_struct *async_queue; 565 566 int (*open)(struct comedi_device *dev); 567 void (*close)(struct comedi_device *dev); 568}; 569 570/* 571 * function prototypes 572 */ 573 574void comedi_event(struct comedi_device *dev, struct comedi_subdevice *s); 575 576struct comedi_device *comedi_dev_get_from_minor(unsigned int minor); 577int comedi_dev_put(struct comedi_device *dev); 578 579bool comedi_is_subdevice_running(struct comedi_subdevice *s); 580 581void *comedi_alloc_spriv(struct comedi_subdevice *s, size_t size); 582void comedi_set_spriv_auto_free(struct comedi_subdevice *s); 583 584int comedi_check_chanlist(struct comedi_subdevice *s, 585 int n, 586 unsigned int *chanlist); 587 588/* range stuff */ 589 590#define RANGE(a, b) {(a) * 1e6, (b) * 1e6, 0} 591#define RANGE_ext(a, b) {(a) * 1e6, (b) * 1e6, RF_EXTERNAL} 592#define RANGE_mA(a, b) {(a) * 1e6, (b) * 1e6, UNIT_mA} 593#define RANGE_unitless(a, b) {(a) * 1e6, (b) * 1e6, 0} 594#define BIP_RANGE(a) {-(a) * 1e6, (a) * 1e6, 0} 595#define UNI_RANGE(a) {0, (a) * 1e6, 0} 596 597extern const struct comedi_lrange range_bipolar10; 598extern const struct comedi_lrange range_bipolar5; 599extern const struct comedi_lrange range_bipolar2_5; 600extern const struct comedi_lrange range_unipolar10; 601extern const struct comedi_lrange range_unipolar5; 602extern const struct comedi_lrange range_unipolar2_5; 603extern const struct comedi_lrange range_0_20mA; 604extern const struct comedi_lrange range_4_20mA; 605extern const struct comedi_lrange range_0_32mA; 606extern const struct comedi_lrange range_unknown; 607 608#define range_digital range_unipolar5 609 610/** 611 * struct comedi_lrange - Describes a COMEDI range table 612 * @length: Number of entries in the range table. 613 * @range: Array of &struct comedi_krange, one for each range. 614 * 615 * Each element of @range[] describes the minimum and maximum physical range 616 * range and the type of units. Typically, the type of unit is %UNIT_volt 617 * (i.e. volts) and the minimum and maximum are in millionths of a volt. 618 * There may also be a flag that indicates the minimum and maximum are merely 619 * scale factors for an unknown, external reference. 620 */ 621struct comedi_lrange { 622 int length; 623 struct comedi_krange range[]; 624}; 625 626/** 627 * comedi_range_is_bipolar() - Test if subdevice range is bipolar 628 * @s: COMEDI subdevice. 629 * @range: Index of range within a range table. 630 * 631 * Tests whether a range is bipolar by checking whether its minimum value 632 * is negative. 633 * 634 * Assumes @range is valid. Does not work for subdevices using a 635 * channel-specific range table list. 636 * 637 * Return: 638 * %true if the range is bipolar. 639 * %false if the range is unipolar. 640 */ 641static inline bool comedi_range_is_bipolar(struct comedi_subdevice *s, 642 unsigned int range) 643{ 644 return s->range_table->range[range].min < 0; 645} 646 647/** 648 * comedi_range_is_unipolar() - Test if subdevice range is unipolar 649 * @s: COMEDI subdevice. 650 * @range: Index of range within a range table. 651 * 652 * Tests whether a range is unipolar by checking whether its minimum value 653 * is at least 0. 654 * 655 * Assumes @range is valid. Does not work for subdevices using a 656 * channel-specific range table list. 657 * 658 * Return: 659 * %true if the range is unipolar. 660 * %false if the range is bipolar. 661 */ 662static inline bool comedi_range_is_unipolar(struct comedi_subdevice *s, 663 unsigned int range) 664{ 665 return s->range_table->range[range].min >= 0; 666} 667 668/** 669 * comedi_range_is_external() - Test if subdevice range is external 670 * @s: COMEDI subdevice. 671 * @range: Index of range within a range table. 672 * 673 * Tests whether a range is externally reference by checking whether its 674 * %RF_EXTERNAL flag is set. 675 * 676 * Assumes @range is valid. Does not work for subdevices using a 677 * channel-specific range table list. 678 * 679 * Return: 680 * %true if the range is external. 681 * %false if the range is internal. 682 */ 683static inline bool comedi_range_is_external(struct comedi_subdevice *s, 684 unsigned int range) 685{ 686 return !!(s->range_table->range[range].flags & RF_EXTERNAL); 687} 688 689/** 690 * comedi_chan_range_is_bipolar() - Test if channel-specific range is bipolar 691 * @s: COMEDI subdevice. 692 * @chan: The channel number. 693 * @range: Index of range within a range table. 694 * 695 * Tests whether a range is bipolar by checking whether its minimum value 696 * is negative. 697 * 698 * Assumes @chan and @range are valid. Only works for subdevices with a 699 * channel-specific range table list. 700 * 701 * Return: 702 * %true if the range is bipolar. 703 * %false if the range is unipolar. 704 */ 705static inline bool comedi_chan_range_is_bipolar(struct comedi_subdevice *s, 706 unsigned int chan, 707 unsigned int range) 708{ 709 return s->range_table_list[chan]->range[range].min < 0; 710} 711 712/** 713 * comedi_chan_range_is_unipolar() - Test if channel-specific range is unipolar 714 * @s: COMEDI subdevice. 715 * @chan: The channel number. 716 * @range: Index of range within a range table. 717 * 718 * Tests whether a range is unipolar by checking whether its minimum value 719 * is at least 0. 720 * 721 * Assumes @chan and @range are valid. Only works for subdevices with a 722 * channel-specific range table list. 723 * 724 * Return: 725 * %true if the range is unipolar. 726 * %false if the range is bipolar. 727 */ 728static inline bool comedi_chan_range_is_unipolar(struct comedi_subdevice *s, 729 unsigned int chan, 730 unsigned int range) 731{ 732 return s->range_table_list[chan]->range[range].min >= 0; 733} 734 735/** 736 * comedi_chan_range_is_external() - Test if channel-specific range is external 737 * @s: COMEDI subdevice. 738 * @chan: The channel number. 739 * @range: Index of range within a range table. 740 * 741 * Tests whether a range is externally reference by checking whether its 742 * %RF_EXTERNAL flag is set. 743 * 744 * Assumes @chan and @range are valid. Only works for subdevices with a 745 * channel-specific range table list. 746 * 747 * Return: 748 * %true if the range is bipolar. 749 * %false if the range is unipolar. 750 */ 751static inline bool comedi_chan_range_is_external(struct comedi_subdevice *s, 752 unsigned int chan, 753 unsigned int range) 754{ 755 return !!(s->range_table_list[chan]->range[range].flags & RF_EXTERNAL); 756} 757 758/** 759 * comedi_offset_munge() - Convert between offset binary and 2's complement 760 * @s: COMEDI subdevice. 761 * @val: Value to be converted. 762 * 763 * Toggles the highest bit of a sample value to toggle between offset binary 764 * and 2's complement. Assumes that @s->maxdata is a power of 2 minus 1. 765 * 766 * Return: The converted value. 767 */ 768static inline unsigned int comedi_offset_munge(struct comedi_subdevice *s, 769 unsigned int val) 770{ 771 return val ^ s->maxdata ^ (s->maxdata >> 1); 772} 773 774/** 775 * comedi_bytes_per_sample() - Determine subdevice sample size 776 * @s: COMEDI subdevice. 777 * 778 * The sample size will be 4 (sizeof int) or 2 (sizeof short) depending on 779 * whether the %SDF_LSAMPL subdevice flag is set or not. 780 * 781 * Return: The subdevice sample size. 782 */ 783static inline unsigned int comedi_bytes_per_sample(struct comedi_subdevice *s) 784{ 785 return s->subdev_flags & SDF_LSAMPL ? sizeof(int) : sizeof(short); 786} 787 788/** 789 * comedi_sample_shift() - Determine log2 of subdevice sample size 790 * @s: COMEDI subdevice. 791 * 792 * The sample size will be 4 (sizeof int) or 2 (sizeof short) depending on 793 * whether the %SDF_LSAMPL subdevice flag is set or not. The log2 of the 794 * sample size will be 2 or 1 and can be used as the right operand of a 795 * bit-shift operator to multiply or divide something by the sample size. 796 * 797 * Return: log2 of the subdevice sample size. 798 */ 799static inline unsigned int comedi_sample_shift(struct comedi_subdevice *s) 800{ 801 return s->subdev_flags & SDF_LSAMPL ? 2 : 1; 802} 803 804/** 805 * comedi_bytes_to_samples() - Convert a number of bytes to a number of samples 806 * @s: COMEDI subdevice. 807 * @nbytes: Number of bytes 808 * 809 * Return: The number of bytes divided by the subdevice sample size. 810 */ 811static inline unsigned int comedi_bytes_to_samples(struct comedi_subdevice *s, 812 unsigned int nbytes) 813{ 814 return nbytes >> comedi_sample_shift(s); 815} 816 817/** 818 * comedi_samples_to_bytes() - Convert a number of samples to a number of bytes 819 * @s: COMEDI subdevice. 820 * @nsamples: Number of samples. 821 * 822 * Return: The number of samples multiplied by the subdevice sample size. 823 * (Does not check for arithmetic overflow.) 824 */ 825static inline unsigned int comedi_samples_to_bytes(struct comedi_subdevice *s, 826 unsigned int nsamples) 827{ 828 return nsamples << comedi_sample_shift(s); 829} 830 831/** 832 * comedi_check_trigger_src() - Trivially validate a comedi_cmd trigger source 833 * @src: Pointer to the trigger source to validate. 834 * @flags: Bitmask of valid %TRIG_* for the trigger. 835 * 836 * This is used in "step 1" of the do_cmdtest functions of comedi drivers 837 * to validate the comedi_cmd triggers. The mask of the @src against the 838 * @flags allows the userspace comedilib to pass all the comedi_cmd 839 * triggers as %TRIG_ANY and get back a bitmask of the valid trigger sources. 840 * 841 * Return: 842 * 0 if trigger sources in *@src are all supported. 843 * -EINVAL if any trigger source in *@src is unsupported. 844 */ 845static inline int comedi_check_trigger_src(unsigned int *src, 846 unsigned int flags) 847{ 848 unsigned int orig_src = *src; 849 850 *src = orig_src & flags; 851 if (*src == TRIG_INVALID || *src != orig_src) 852 return -EINVAL; 853 return 0; 854} 855 856/** 857 * comedi_check_trigger_is_unique() - Make sure a trigger source is unique 858 * @src: The trigger source to check. 859 * 860 * Return: 861 * 0 if no more than one trigger source is set. 862 * -EINVAL if more than one trigger source is set. 863 */ 864static inline int comedi_check_trigger_is_unique(unsigned int src) 865{ 866 /* this test is true if more than one _src bit is set */ 867 if ((src & (src - 1)) != 0) 868 return -EINVAL; 869 return 0; 870} 871 872/** 873 * comedi_check_trigger_arg_is() - Trivially validate a trigger argument 874 * @arg: Pointer to the trigger arg to validate. 875 * @val: The value the argument should be. 876 * 877 * Forces *@arg to be @val. 878 * 879 * Return: 880 * 0 if *@arg was already @val. 881 * -EINVAL if *@arg differed from @val. 882 */ 883static inline int comedi_check_trigger_arg_is(unsigned int *arg, 884 unsigned int val) 885{ 886 if (*arg != val) { 887 *arg = val; 888 return -EINVAL; 889 } 890 return 0; 891} 892 893/** 894 * comedi_check_trigger_arg_min() - Trivially validate a trigger argument min 895 * @arg: Pointer to the trigger arg to validate. 896 * @val: The minimum value the argument should be. 897 * 898 * Forces *@arg to be at least @val, setting it to @val if necessary. 899 * 900 * Return: 901 * 0 if *@arg was already at least @val. 902 * -EINVAL if *@arg was less than @val. 903 */ 904static inline int comedi_check_trigger_arg_min(unsigned int *arg, 905 unsigned int val) 906{ 907 if (*arg < val) { 908 *arg = val; 909 return -EINVAL; 910 } 911 return 0; 912} 913 914/** 915 * comedi_check_trigger_arg_max() - Trivially validate a trigger argument max 916 * @arg: Pointer to the trigger arg to validate. 917 * @val: The maximum value the argument should be. 918 * 919 * Forces *@arg to be no more than @val, setting it to @val if necessary. 920 * 921 * Return: 922 * 0 if*@arg was already no more than @val. 923 * -EINVAL if *@arg was greater than @val. 924 */ 925static inline int comedi_check_trigger_arg_max(unsigned int *arg, 926 unsigned int val) 927{ 928 if (*arg > val) { 929 *arg = val; 930 return -EINVAL; 931 } 932 return 0; 933} 934 935/* 936 * Must set dev->hw_dev if you wish to dma directly into comedi's buffer. 937 * Also useful for retrieving a previously configured hardware device of 938 * known bus type. Set automatically for auto-configured devices. 939 * Automatically set to NULL when detaching hardware device. 940 */ 941int comedi_set_hw_dev(struct comedi_device *dev, struct device *hw_dev); 942 943/** 944 * comedi_buf_n_bytes_ready - Determine amount of unread data in buffer 945 * @s: COMEDI subdevice. 946 * 947 * Determines the number of bytes of unread data in the asynchronous 948 * acquisition data buffer for a subdevice. The data in question might not 949 * have been fully "munged" yet. 950 * 951 * Returns: The amount of unread data in bytes. 952 */ 953static inline unsigned int comedi_buf_n_bytes_ready(struct comedi_subdevice *s) 954{ 955 return s->async->buf_write_count - s->async->buf_read_count; 956} 957 958unsigned int comedi_buf_write_alloc(struct comedi_subdevice *s, unsigned int n); 959unsigned int comedi_buf_write_free(struct comedi_subdevice *s, unsigned int n); 960 961unsigned int comedi_buf_read_n_available(struct comedi_subdevice *s); 962unsigned int comedi_buf_read_alloc(struct comedi_subdevice *s, unsigned int n); 963unsigned int comedi_buf_read_free(struct comedi_subdevice *s, unsigned int n); 964 965unsigned int comedi_buf_write_samples(struct comedi_subdevice *s, 966 const void *data, unsigned int nsamples); 967unsigned int comedi_buf_read_samples(struct comedi_subdevice *s, 968 void *data, unsigned int nsamples); 969 970/* drivers.c - general comedi driver functions */ 971 972#define COMEDI_TIMEOUT_MS 1000 973 974int comedi_timeout(struct comedi_device *dev, struct comedi_subdevice *s, 975 struct comedi_insn *insn, 976 int (*cb)(struct comedi_device *dev, 977 struct comedi_subdevice *s, 978 struct comedi_insn *insn, unsigned long context), 979 unsigned long context); 980 981unsigned int comedi_handle_events(struct comedi_device *dev, 982 struct comedi_subdevice *s); 983 984int comedi_dio_insn_config(struct comedi_device *dev, 985 struct comedi_subdevice *s, 986 struct comedi_insn *insn, unsigned int *data, 987 unsigned int mask); 988unsigned int comedi_dio_update_state(struct comedi_subdevice *s, 989 unsigned int *data); 990unsigned int comedi_bytes_per_scan(struct comedi_subdevice *s); 991unsigned int comedi_nscans_left(struct comedi_subdevice *s, 992 unsigned int nscans); 993unsigned int comedi_nsamples_left(struct comedi_subdevice *s, 994 unsigned int nsamples); 995void comedi_inc_scan_progress(struct comedi_subdevice *s, 996 unsigned int num_bytes); 997 998void *comedi_alloc_devpriv(struct comedi_device *dev, size_t size); 999int comedi_alloc_subdevices(struct comedi_device *dev, int num_subdevices); 1000int comedi_alloc_subdev_readback(struct comedi_subdevice *s);
1001 1002int comedi_readback_insn_read(struct comedi_device *dev, 1003 struct comedi_subdevice *s, 1004 struct comedi_insn *insn, unsigned int *data); 1005 1006int comedi_load_firmware(struct comedi_device *dev, struct device *hw_dev, 1007 const char *name, 1008 int (*cb)(struct comedi_device *dev, 1009 const u8 *data, size_t size, 1010 unsigned long context), 1011 unsigned long context); 1012 1013int __comedi_request_region(struct comedi_device *dev, 1014 unsigned long start, unsigned long len); 1015int comedi_request_region(struct comedi_device *dev, 1016 unsigned long start, unsigned long len); 1017void comedi_legacy_detach(struct comedi_device *dev); 1018 1019int comedi_auto_config(struct device *hardware_device, 1020 struct comedi_driver *driver, unsigned long context); 1021void comedi_auto_unconfig(struct device *hardware_device); 1022 1023int comedi_driver_register(struct comedi_driver *driver); 1024void comedi_driver_unregister(struct comedi_driver *driver); 1025 1026/** 1027 * module_comedi_driver() - Helper macro for registering a comedi driver 1028 * @__comedi_driver: comedi_driver struct 1029 * 1030 * Helper macro for comedi drivers which do not do anything special in module 1031 * init/exit. This eliminates a lot of boilerplate. Each module may only use 1032 * this macro once, and calling it replaces module_init() and module_exit(). 1033 */ 1034#define module_comedi_driver(__comedi_driver) \ 1035 module_driver(__comedi_driver, comedi_driver_register, \ 1036 comedi_driver_unregister) 1037 1038#endif /* _COMEDIDEV_H */ 1039