mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-04-08 12:02:33 +02:00
Add `comedi_open_from(path, from)` and `comedi_close_from(dev, from)` as variants of the existing `comedi_from(path)` and `comedi_close(dev)`. The additional `from` parameter is a minor device number that tells the function that the COMEDI device is being opened or closed from another COMEDI device if the value is in the range [0, `COMEDI_NUM_BOARD_MINORS`-1]. In that case the function will refuse to open the device if it would lead to a chain of devices opening each other. (It will also impose a limit on the number of simultaneous opens from one device to another because we need to count those.) The new functions are intended to be used by the "comedi_bond" driver, which is the only driver that uses the existing `comedi_open()` and `comedi_close()` functions. The new functions will be used to avoid some possible deadlock situations. Replace the existing, exported `comedi_open()` and `comedi_close()` functions with inline wrapper functions that call the newly exported `comedi_open_from()` and `comedi_close_from()` functions. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Link: https://patch.msgid.link/20251027153748.4569-2-abbotti@mev.co.uk Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
57 lines
1.6 KiB
C
57 lines
1.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* comedilib.h
|
|
* Header file for kcomedilib
|
|
*
|
|
* COMEDI - Linux Control and Measurement Device Interface
|
|
* Copyright (C) 1998-2001 David A. Schleef <ds@schleef.org>
|
|
*/
|
|
|
|
#ifndef _LINUX_COMEDILIB_H
|
|
#define _LINUX_COMEDILIB_H
|
|
|
|
struct comedi_device *comedi_open_from(const char *path, int from);
|
|
|
|
/**
|
|
* comedi_open() - Open a COMEDI device from the kernel
|
|
* @filename: Fake pathname of the form "/dev/comediN".
|
|
*
|
|
* Converts @filename to a COMEDI device number and "opens" it if it exists
|
|
* and is attached to a low-level COMEDI driver.
|
|
*
|
|
* Return: A pointer to the COMEDI device on success.
|
|
* Return %NULL on failure.
|
|
*/
|
|
static inline struct comedi_device *comedi_open(const char *path)
|
|
{
|
|
return comedi_open_from(path, -1);
|
|
}
|
|
|
|
int comedi_close_from(struct comedi_device *dev, int from);
|
|
|
|
/**
|
|
* comedi_close() - Close a COMEDI device from the kernel
|
|
* @dev: COMEDI device.
|
|
*
|
|
* Closes a COMEDI device previously opened by comedi_open().
|
|
*
|
|
* Returns: 0
|
|
*/
|
|
static inline int comedi_close(struct comedi_device *dev)
|
|
{
|
|
return comedi_close_from(dev, -1);
|
|
}
|
|
|
|
int comedi_dio_get_config(struct comedi_device *dev, unsigned int subdev,
|
|
unsigned int chan, unsigned int *io);
|
|
int comedi_dio_config(struct comedi_device *dev, unsigned int subdev,
|
|
unsigned int chan, unsigned int io);
|
|
int comedi_dio_bitfield2(struct comedi_device *dev, unsigned int subdev,
|
|
unsigned int mask, unsigned int *bits,
|
|
unsigned int base_channel);
|
|
int comedi_find_subdevice_by_type(struct comedi_device *dev, int type,
|
|
unsigned int subd);
|
|
int comedi_get_n_channels(struct comedi_device *dev, unsigned int subdevice);
|
|
|
|
#endif
|