Commit 9303c9d5 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab

docs: get rid of :c:type explicit declarations for structs

The :c:type:`foo` only works properly with structs before
Sphinx 3.x.

On Sphinx 3.x, structs should now be declared using the
.. c:struct, and referenced via :c:struct tag.

As we now have the automarkup.py macro, that automatically
convert:
	struct foo

into cross-references, let's get rid of that, solving
several warnings when building docs with Sphinx 3.x.

Reviewed-by: André Almeida <andrealmeid@collabora.com> # blk-mq.rst
Reviewed-by: Takashi Iwai <tiwai@suse.de> # sound
Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent abc59fd4
...@@ -63,10 +63,10 @@ Software staging queues ...@@ -63,10 +63,10 @@ Software staging queues
~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
The block IO subsystem adds requests in the software staging queues The block IO subsystem adds requests in the software staging queues
(represented by struct :c:type:`blk_mq_ctx`) in case that they weren't sent (represented by struct blk_mq_ctx) in case that they weren't sent
directly to the driver. A request is one or more BIOs. They arrived at the directly to the driver. A request is one or more BIOs. They arrived at the
block layer through the data structure struct :c:type:`bio`. The block layer block layer through the data structure struct bio. The block layer
will then build a new structure from it, the struct :c:type:`request` that will will then build a new structure from it, the struct request that will
be used to communicate with the device driver. Each queue has its own lock and be used to communicate with the device driver. Each queue has its own lock and
the number of queues is defined by a per-CPU or per-node basis. the number of queues is defined by a per-CPU or per-node basis.
...@@ -102,7 +102,7 @@ hardware queue will be drained in sequence according to their mapping. ...@@ -102,7 +102,7 @@ hardware queue will be drained in sequence according to their mapping.
Hardware dispatch queues Hardware dispatch queues
~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~
The hardware queue (represented by struct :c:type:`blk_mq_hw_ctx`) is a struct The hardware queue (represented by struct blk_mq_hw_ctx) is a struct
used by device drivers to map the device submission queues (or device DMA ring used by device drivers to map the device submission queues (or device DMA ring
buffer), and are the last step of the block layer submission code before the buffer), and are the last step of the block layer submission code before the
low level device driver taking ownership of the request. To run this queue, the low level device driver taking ownership of the request. To run this queue, the
......
...@@ -52,7 +52,7 @@ Constraints and notes ...@@ -52,7 +52,7 @@ Constraints and notes
Design Design
====== ======
We add a :c:type:`struct bio_crypt_ctx` to :c:type:`struct bio` that can We add a struct bio_crypt_ctx to struct bio that can
represent an encryption context, because we need to be able to pass this represent an encryption context, because we need to be able to pass this
encryption context from the upper layers (like the fs layer) to the encryption context from the upper layers (like the fs layer) to the
device driver to act upon. device driver to act upon.
...@@ -85,7 +85,7 @@ blk-mq changes, other block layer changes and blk-crypto-fallback ...@@ -85,7 +85,7 @@ blk-mq changes, other block layer changes and blk-crypto-fallback
================================================================= =================================================================
We add a pointer to a ``bi_crypt_context`` and ``keyslot`` to We add a pointer to a ``bi_crypt_context`` and ``keyslot`` to
:c:type:`struct request`. These will be referred to as the ``crypto fields`` struct request. These will be referred to as the ``crypto fields``
for the request. This ``keyslot`` is the keyslot into which the for the request. This ``keyslot`` is the keyslot into which the
``bi_crypt_context`` has been programmed in the KSM of the ``request_queue`` ``bi_crypt_context`` has been programmed in the KSM of the ``request_queue``
that this request is being sent to. that this request is being sent to.
...@@ -118,7 +118,7 @@ of the algorithm being used adheres to spec and functions correctly). ...@@ -118,7 +118,7 @@ of the algorithm being used adheres to spec and functions correctly).
If a ``request queue``'s inline encryption hardware claimed to support the If a ``request queue``'s inline encryption hardware claimed to support the
encryption context specified with a bio, then it will not be handled by the encryption context specified with a bio, then it will not be handled by the
``blk-crypto-fallback``. We will eventually reach a point in blk-mq when a ``blk-crypto-fallback``. We will eventually reach a point in blk-mq when a
:c:type:`struct request` needs to be allocated for that bio. At that point, struct request needs to be allocated for that bio. At that point,
blk-mq tries to program the encryption context into the ``request_queue``'s blk-mq tries to program the encryption context into the ``request_queue``'s
keyslot_manager, and obtain a keyslot, which it stores in its newly added keyslot_manager, and obtain a keyslot, which it stores in its newly added
``keyslot`` field. This keyslot is released when the request is completed. ``keyslot`` field. This keyslot is released when the request is completed.
...@@ -188,7 +188,7 @@ keyslots supported by the hardware. ...@@ -188,7 +188,7 @@ keyslots supported by the hardware.
The device driver also needs to tell the KSM how to actually manipulate the The device driver also needs to tell the KSM how to actually manipulate the
IE hardware in the device to do things like programming the crypto key into IE hardware in the device to do things like programming the crypto key into
the IE hardware into a particular keyslot. All this is achieved through the the IE hardware into a particular keyslot. All this is achieved through the
:c:type:`struct blk_ksm_ll_ops` field in the KSM that the device driver struct blk_ksm_ll_ops field in the KSM that the device driver
must fill up after initing the ``blk_keyslot_manager``. must fill up after initing the ``blk_keyslot_manager``.
The KSM also handles runtime power management for the device when applicable The KSM also handles runtime power management for the device when applicable
......
...@@ -4,8 +4,8 @@ FPGA Bridge ...@@ -4,8 +4,8 @@ FPGA Bridge
API to implement a new FPGA bridge API to implement a new FPGA bridge
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* struct :c:type:`fpga_bridge` — The FPGA Bridge structure * struct fpga_bridge — The FPGA Bridge structure
* struct :c:type:`fpga_bridge_ops` — Low level Bridge driver ops * struct fpga_bridge_ops — Low level Bridge driver ops
* devm_fpga_bridge_create() — Allocate and init a bridge struct * devm_fpga_bridge_create() — Allocate and init a bridge struct
* fpga_bridge_register() — Register a bridge * fpga_bridge_register() — Register a bridge
* fpga_bridge_unregister() — Unregister a bridge * fpga_bridge_unregister() — Unregister a bridge
......
...@@ -102,8 +102,8 @@ API for implementing a new FPGA Manager driver ...@@ -102,8 +102,8 @@ API for implementing a new FPGA Manager driver
---------------------------------------------- ----------------------------------------------
* ``fpga_mgr_states`` — Values for :c:member:`fpga_manager->state`. * ``fpga_mgr_states`` — Values for :c:member:`fpga_manager->state`.
* struct :c:type:`fpga_manager` — the FPGA manager struct * struct fpga_manager — the FPGA manager struct
* struct :c:type:`fpga_manager_ops` — Low level FPGA manager driver ops * struct fpga_manager_ops — Low level FPGA manager driver ops
* devm_fpga_mgr_create() — Allocate and init a manager struct * devm_fpga_mgr_create() — Allocate and init a manager struct
* fpga_mgr_register() — Register an FPGA manager * fpga_mgr_register() — Register an FPGA manager
* fpga_mgr_unregister() — Unregister an FPGA manager * fpga_mgr_unregister() — Unregister an FPGA manager
......
...@@ -45,7 +45,7 @@ An example of usage can be seen in the probe function of [#f2]_. ...@@ -45,7 +45,7 @@ An example of usage can be seen in the probe function of [#f2]_.
API to add a new FPGA region API to add a new FPGA region
---------------------------- ----------------------------
* struct :c:type:`fpga_region` — The FPGA region struct * struct fpga_region — The FPGA region struct
* devm_fpga_region_create() — Allocate and init a region struct * devm_fpga_region_create() — Allocate and init a region struct
* fpga_region_register() — Register an FPGA region * fpga_region_register() — Register an FPGA region
* fpga_region_unregister() — Unregister an FPGA region * fpga_region_unregister() — Unregister an FPGA region
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
Buffers Buffers
======= =======
* struct :c:type:`iio_buffer` — general buffer structure * struct iio_buffer — general buffer structure
* :c:func:`iio_validate_scan_mask_onehot` — Validates that exactly one channel * :c:func:`iio_validate_scan_mask_onehot` — Validates that exactly one channel
is selected is selected
* :c:func:`iio_buffer_get` — Grab a reference to the buffer * :c:func:`iio_buffer_get` — Grab a reference to the buffer
......
...@@ -10,7 +10,7 @@ applications manipulating sensors. The implementation can be found under ...@@ -10,7 +10,7 @@ applications manipulating sensors. The implementation can be found under
Industrial I/O Devices Industrial I/O Devices
---------------------- ----------------------
* struct :c:type:`iio_dev` - industrial I/O device * struct iio_dev - industrial I/O device
* iio_device_alloc() - allocate an :c:type:`iio_dev` from a driver * iio_device_alloc() - allocate an :c:type:`iio_dev` from a driver
* iio_device_free() - free an :c:type:`iio_dev` from a driver * iio_device_free() - free an :c:type:`iio_dev` from a driver
* iio_device_register() - register a device with the IIO subsystem * iio_device_register() - register a device with the IIO subsystem
...@@ -66,7 +66,7 @@ Common attributes are: ...@@ -66,7 +66,7 @@ Common attributes are:
IIO device channels IIO device channels
=================== ===================
struct :c:type:`iio_chan_spec` - specification of a single channel struct iio_chan_spec - specification of a single channel
An IIO device channel is a representation of a data channel. An IIO device can An IIO device channel is a representation of a data channel. An IIO device can
have one or multiple channels. For example: have one or multiple channels. For example:
...@@ -77,7 +77,7 @@ have one or multiple channels. For example: ...@@ -77,7 +77,7 @@ have one or multiple channels. For example:
* an accelerometer can have up to 3 channels representing acceleration on X, Y * an accelerometer can have up to 3 channels representing acceleration on X, Y
and Z axes. and Z axes.
An IIO channel is described by the struct :c:type:`iio_chan_spec`. An IIO channel is described by the struct iio_chan_spec.
A thermometer driver for the temperature sensor in the example above would A thermometer driver for the temperature sensor in the example above would
have to describe its channel as follows:: have to describe its channel as follows::
......
...@@ -8,7 +8,7 @@ software buffer for data. The implementation can be found under ...@@ -8,7 +8,7 @@ software buffer for data. The implementation can be found under
:file:`drivers/iio/buffer/hw-consumer.c` :file:`drivers/iio/buffer/hw-consumer.c`
* struct :c:type:`iio_hw_consumer` — Hardware consumer structure * struct iio_hw_consumer — Hardware consumer structure
* :c:func:`iio_hw_consumer_alloc` — Allocate IIO hardware consumer * :c:func:`iio_hw_consumer_alloc` — Allocate IIO hardware consumer
* :c:func:`iio_hw_consumer_free` — Free IIO hardware consumer * :c:func:`iio_hw_consumer_free` — Free IIO hardware consumer
* :c:func:`iio_hw_consumer_enable` — Enable IIO hardware consumer * :c:func:`iio_hw_consumer_enable` — Enable IIO hardware consumer
......
...@@ -10,7 +10,7 @@ IIO triggered buffer setup ...@@ -10,7 +10,7 @@ IIO triggered buffer setup
* :c:func:`iio_triggered_buffer_setup` — Setup triggered buffer and pollfunc * :c:func:`iio_triggered_buffer_setup` — Setup triggered buffer and pollfunc
* :c:func:`iio_triggered_buffer_cleanup` — Free resources allocated by * :c:func:`iio_triggered_buffer_cleanup` — Free resources allocated by
:c:func:`iio_triggered_buffer_setup` :c:func:`iio_triggered_buffer_setup`
* struct :c:type:`iio_buffer_setup_ops` — buffer setup related callbacks * struct iio_buffer_setup_ops — buffer setup related callbacks
A typical triggered buffer setup looks like this:: A typical triggered buffer setup looks like this::
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
Triggers Triggers
======== ========
* struct :c:type:`iio_trigger` — industrial I/O trigger device * struct iio_trigger — industrial I/O trigger device
* :c:func:`devm_iio_trigger_alloc` — Resource-managed iio_trigger_alloc * :c:func:`devm_iio_trigger_alloc` — Resource-managed iio_trigger_alloc
* :c:func:`devm_iio_trigger_register` — Resource-managed iio_trigger_register * :c:func:`devm_iio_trigger_register` — Resource-managed iio_trigger_register
iio_trigger_unregister iio_trigger_unregister
...@@ -63,7 +63,7 @@ Let's see a simple example of how to setup a trigger to be used by a driver:: ...@@ -63,7 +63,7 @@ Let's see a simple example of how to setup a trigger to be used by a driver::
IIO trigger ops IIO trigger ops
=============== ===============
* struct :c:type:`iio_trigger_ops` — operations structure for an iio_trigger. * struct iio_trigger_ops — operations structure for an iio_trigger.
Notice that a trigger has a set of operations attached: Notice that a trigger has a set of operations attached:
......
...@@ -125,7 +125,7 @@ responsible for tuning the device. It supports multiple algorithms to ...@@ -125,7 +125,7 @@ responsible for tuning the device. It supports multiple algorithms to
detect a channel, as defined at enum :c:func:`dvbfe_algo`. detect a channel, as defined at enum :c:func:`dvbfe_algo`.
The algorithm to be used is obtained via ``.get_frontend_algo``. If the driver The algorithm to be used is obtained via ``.get_frontend_algo``. If the driver
doesn't fill its field at struct :c:type:`dvb_frontend_ops`, it will default to doesn't fill its field at struct dvb_frontend_ops, it will default to
``DVBFE_ALGO_SW``, meaning that the dvb-core will do a zigzag when tuning, ``DVBFE_ALGO_SW``, meaning that the dvb-core will do a zigzag when tuning,
e. g. it will try first to use the specified center frequency ``f``, e. g. it will try first to use the specified center frequency ``f``,
then, it will do ``f`` + |delta|, ``f`` - |delta|, ``f`` + 2 x |delta|, then, it will do ``f`` + |delta|, ``f`` - |delta|, ``f`` + 2 x |delta|,
...@@ -140,7 +140,7 @@ define a ``.get_frontend_algo`` function that would return ``DVBFE_ALGO_HW``. ...@@ -140,7 +140,7 @@ define a ``.get_frontend_algo`` function that would return ``DVBFE_ALGO_HW``.
a third type (``DVBFE_ALGO_CUSTOM``), in order to allow the driver to a third type (``DVBFE_ALGO_CUSTOM``), in order to allow the driver to
define its own hardware-assisted algorithm. Very few hardware need to define its own hardware-assisted algorithm. Very few hardware need to
use it nowadays. Using ``DVBFE_ALGO_CUSTOM`` require to provide other use it nowadays. Using ``DVBFE_ALGO_CUSTOM`` require to provide other
function callbacks at struct :c:type:`dvb_frontend_ops`. function callbacks at struct dvb_frontend_ops.
Attaching frontend driver to the bridge driver Attaching frontend driver to the bridge driver
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
......
...@@ -36,7 +36,7 @@ pad to a sink pad. ...@@ -36,7 +36,7 @@ pad to a sink pad.
Media device Media device
^^^^^^^^^^^^ ^^^^^^^^^^^^
A media device is represented by a struct :c:type:`media_device` A media device is represented by a struct media_device
instance, defined in ``include/media/media-device.h``. instance, defined in ``include/media/media-device.h``.
Allocation of the structure is handled by the media device driver, usually by Allocation of the structure is handled by the media device driver, usually by
embedding the :c:type:`media_device` instance in a larger driver-specific embedding the :c:type:`media_device` instance in a larger driver-specific
...@@ -49,7 +49,7 @@ and unregistered by calling :c:func:`media_device_unregister()`. ...@@ -49,7 +49,7 @@ and unregistered by calling :c:func:`media_device_unregister()`.
Entities Entities
^^^^^^^^ ^^^^^^^^
Entities are represented by a struct :c:type:`media_entity` Entities are represented by a struct media_entity
instance, defined in ``include/media/media-entity.h``. The structure is usually instance, defined in ``include/media/media-entity.h``. The structure is usually
embedded into a higher-level structure, such as embedded into a higher-level structure, such as
:c:type:`v4l2_subdev` or :c:type:`video_device` :c:type:`v4l2_subdev` or :c:type:`video_device`
...@@ -67,10 +67,10 @@ Interfaces ...@@ -67,10 +67,10 @@ Interfaces
^^^^^^^^^^ ^^^^^^^^^^
Interfaces are represented by a Interfaces are represented by a
struct :c:type:`media_interface` instance, defined in struct media_interface instance, defined in
``include/media/media-entity.h``. Currently, only one type of interface is ``include/media/media-entity.h``. Currently, only one type of interface is
defined: a device node. Such interfaces are represented by a defined: a device node. Such interfaces are represented by a
struct :c:type:`media_intf_devnode`. struct media_intf_devnode.
Drivers initialize and create device node interfaces by calling Drivers initialize and create device node interfaces by calling
:c:func:`media_devnode_create()` :c:func:`media_devnode_create()`
...@@ -79,7 +79,7 @@ and remove them by calling: ...@@ -79,7 +79,7 @@ and remove them by calling:
Pads Pads
^^^^ ^^^^
Pads are represented by a struct :c:type:`media_pad` instance, Pads are represented by a struct media_pad instance,
defined in ``include/media/media-entity.h``. Each entity stores its pads in defined in ``include/media/media-entity.h``. Each entity stores its pads in
a pads array managed by the entity driver. Drivers usually embed the array in a pads array managed by the entity driver. Drivers usually embed the array in
a driver-specific structure. a driver-specific structure.
...@@ -87,8 +87,8 @@ a driver-specific structure. ...@@ -87,8 +87,8 @@ a driver-specific structure.
Pads are identified by their entity and their 0-based index in the pads Pads are identified by their entity and their 0-based index in the pads
array. array.
Both information are stored in the struct :c:type:`media_pad`, Both information are stored in the struct media_pad,
making the struct :c:type:`media_pad` pointer the canonical way making the struct media_pad pointer the canonical way
to store and pass link references. to store and pass link references.
Pads have flags that describe the pad capabilities and state. Pads have flags that describe the pad capabilities and state.
...@@ -104,7 +104,7 @@ Pads have flags that describe the pad capabilities and state. ...@@ -104,7 +104,7 @@ Pads have flags that describe the pad capabilities and state.
Links Links
^^^^^ ^^^^^
Links are represented by a struct :c:type:`media_link` instance, Links are represented by a struct media_link instance,
defined in ``include/media/media-entity.h``. There are two types of links: defined in ``include/media/media-entity.h``. There are two types of links:
**1. pad to pad links**: **1. pad to pad links**:
...@@ -187,7 +187,7 @@ Use count and power handling ...@@ -187,7 +187,7 @@ Use count and power handling
Due to the wide differences between drivers regarding power management Due to the wide differences between drivers regarding power management
needs, the media controller does not implement power management. However, needs, the media controller does not implement power management. However,
the struct :c:type:`media_entity` includes a ``use_count`` the struct media_entity includes a ``use_count``
field that media drivers field that media drivers
can use to track the number of users of every entity for power management can use to track the number of users of every entity for power management
needs. needs.
...@@ -213,11 +213,11 @@ prevent link states from being modified during streaming by calling ...@@ -213,11 +213,11 @@ prevent link states from being modified during streaming by calling
The function will mark all entities connected to the given entity through The function will mark all entities connected to the given entity through
enabled links, either directly or indirectly, as streaming. enabled links, either directly or indirectly, as streaming.
The struct :c:type:`media_pipeline` instance pointed to by The struct media_pipeline instance pointed to by
the pipe argument will be stored in every entity in the pipeline. the pipe argument will be stored in every entity in the pipeline.
Drivers should embed the struct :c:type:`media_pipeline` Drivers should embed the struct media_pipeline
in higher-level pipeline structures and can then access the in higher-level pipeline structures and can then access the
pipeline through the struct :c:type:`media_entity` pipeline through the struct media_entity
pipe field. pipe field.
Calls to :c:func:`media_pipeline_start()` can be nested. Calls to :c:func:`media_pipeline_start()` can be nested.
......
...@@ -27,7 +27,7 @@ V4L2 specification with respect to controls in a central place. And to make ...@@ -27,7 +27,7 @@ V4L2 specification with respect to controls in a central place. And to make
life as easy as possible for the driver developer. life as easy as possible for the driver developer.
Note that the control framework relies on the presence of a struct Note that the control framework relies on the presence of a struct
:c:type:`v4l2_device` for V4L2 drivers and struct :c:type:`v4l2_subdev` for :c:type:`v4l2_device` for V4L2 drivers and struct v4l2_subdev for
sub-device drivers. sub-device drivers.
......
...@@ -67,7 +67,7 @@ You should also set these fields of :c:type:`video_device`: ...@@ -67,7 +67,7 @@ You should also set these fields of :c:type:`video_device`:
file operation is called this lock will be taken by the core and released file operation is called this lock will be taken by the core and released
afterwards. See the next section for more details. afterwards. See the next section for more details.
- :c:type:`video_device`->queue: a pointer to the struct :c:type:`vb2_queue` - :c:type:`video_device`->queue: a pointer to the struct vb2_queue
associated with this device node. associated with this device node.
If queue is not ``NULL``, and queue->lock is not ``NULL``, then queue->lock If queue is not ``NULL``, and queue->lock is not ``NULL``, then queue->lock
is used for the queuing ioctls (``VIDIOC_REQBUFS``, ``CREATE_BUFS``, is used for the queuing ioctls (``VIDIOC_REQBUFS``, ``CREATE_BUFS``,
...@@ -81,7 +81,7 @@ You should also set these fields of :c:type:`video_device`: ...@@ -81,7 +81,7 @@ You should also set these fields of :c:type:`video_device`:
- :c:type:`video_device`->prio: keeps track of the priorities. Used to - :c:type:`video_device`->prio: keeps track of the priorities. Used to
implement ``VIDIOC_G_PRIORITY`` and ``VIDIOC_S_PRIORITY``. implement ``VIDIOC_G_PRIORITY`` and ``VIDIOC_S_PRIORITY``.
If left to ``NULL``, then it will use the struct :c:type:`v4l2_prio_state` If left to ``NULL``, then it will use the struct v4l2_prio_state
in :c:type:`v4l2_device`. If you want to have a separate priority state per in :c:type:`v4l2_device`. If you want to have a separate priority state per
(group of) device node(s), then you can point it to your own struct (group of) device node(s), then you can point it to your own struct
:c:type:`v4l2_prio_state`. :c:type:`v4l2_prio_state`.
...@@ -95,7 +95,7 @@ You should also set these fields of :c:type:`video_device`: ...@@ -95,7 +95,7 @@ You should also set these fields of :c:type:`video_device`:
but it is used by both a raw video PCI device (cx8800) and a MPEG PCI device but it is used by both a raw video PCI device (cx8800) and a MPEG PCI device
(cx8802). Since the :c:type:`v4l2_device` cannot be associated with two PCI (cx8802). Since the :c:type:`v4l2_device` cannot be associated with two PCI
devices at the same time it is setup without a parent device. But when the devices at the same time it is setup without a parent device. But when the
struct :c:type:`video_device` is initialized you **do** know which parent struct video_device is initialized you **do** know which parent
PCI device to use and so you set ``dev_device`` to the correct PCI device. PCI device to use and so you set ``dev_device`` to the correct PCI device.
If you use :c:type:`v4l2_ioctl_ops`, then you should set If you use :c:type:`v4l2_ioctl_ops`, then you should set
...@@ -138,7 +138,7 @@ ioctls and locking ...@@ -138,7 +138,7 @@ ioctls and locking
------------------ ------------------
The V4L core provides optional locking services. The main service is the The V4L core provides optional locking services. The main service is the
lock field in struct :c:type:`video_device`, which is a pointer to a mutex. lock field in struct video_device, which is a pointer to a mutex.
If you set this pointer, then that will be used by unlocked_ioctl to If you set this pointer, then that will be used by unlocked_ioctl to
serialize all ioctls. serialize all ioctls.
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
V4L2 device instance V4L2 device instance
-------------------- --------------------
Each device instance is represented by a struct :c:type:`v4l2_device`. Each device instance is represented by a struct v4l2_device.
Very simple devices can just allocate this struct, but most of the time you Very simple devices can just allocate this struct, but most of the time you
would embed this struct inside a larger struct. would embed this struct inside a larger struct.
...@@ -18,9 +18,9 @@ dev->driver_data field is ``NULL``, it will be linked to ...@@ -18,9 +18,9 @@ dev->driver_data field is ``NULL``, it will be linked to
Drivers that want integration with the media device framework need to set Drivers that want integration with the media device framework need to set
dev->driver_data manually to point to the driver-specific device structure dev->driver_data manually to point to the driver-specific device structure
that embed the struct :c:type:`v4l2_device` instance. This is achieved by a that embed the struct v4l2_device instance. This is achieved by a
``dev_set_drvdata()`` call before registering the V4L2 device instance. ``dev_set_drvdata()`` call before registering the V4L2 device instance.
They must also set the struct :c:type:`v4l2_device` mdev field to point to a They must also set the struct v4l2_device mdev field to point to a
properly initialized and registered :c:type:`media_device` instance. properly initialized and registered :c:type:`media_device` instance.
If :c:type:`v4l2_dev <v4l2_device>`\ ->name is empty then it will be set to a If :c:type:`v4l2_dev <v4l2_device>`\ ->name is empty then it will be set to a
......
...@@ -44,18 +44,18 @@ such objects. ...@@ -44,18 +44,18 @@ such objects.
So to summarize: So to summarize:
- struct :c:type:`v4l2_fh` has two lists: one of the ``subscribed`` events, - struct v4l2_fh has two lists: one of the ``subscribed`` events,
and one of the ``available`` events. and one of the ``available`` events.
- struct :c:type:`v4l2_subscribed_event` has a ringbuffer of raised - struct v4l2_subscribed_event has a ringbuffer of raised
(pending) events of that particular type. (pending) events of that particular type.
- If struct :c:type:`v4l2_subscribed_event` is associated with a specific - If struct v4l2_subscribed_event is associated with a specific
object, then that object will have an internal list of object, then that object will have an internal list of
struct :c:type:`v4l2_subscribed_event` so it knows who subscribed an struct v4l2_subscribed_event so it knows who subscribed an
event to that object. event to that object.
Furthermore, the internal struct :c:type:`v4l2_subscribed_event` has Furthermore, the internal struct v4l2_subscribed_event has
``merge()`` and ``replace()`` callbacks which drivers can set. These ``merge()`` and ``replace()`` callbacks which drivers can set. These
callbacks are called when a new event is raised and there is no more room. callbacks are called when a new event is raised and there is no more room.
......
...@@ -3,11 +3,11 @@ ...@@ -3,11 +3,11 @@
V4L2 File handlers V4L2 File handlers
------------------ ------------------
struct :c:type:`v4l2_fh` provides a way to easily keep file handle specific struct v4l2_fh provides a way to easily keep file handle specific
data that is used by the V4L2 framework. data that is used by the V4L2 framework.
.. attention:: .. attention::
New drivers must use struct :c:type:`v4l2_fh` New drivers must use struct v4l2_fh
since it is also used to implement priority handling since it is also used to implement priority handling
(:ref:`VIDIOC_G_PRIORITY`). (:ref:`VIDIOC_G_PRIORITY`).
...@@ -16,11 +16,11 @@ whether a driver uses :c:type:`v4l2_fh` as its ``file->private_data`` pointer ...@@ -16,11 +16,11 @@ whether a driver uses :c:type:`v4l2_fh` as its ``file->private_data`` pointer
by testing the ``V4L2_FL_USES_V4L2_FH`` bit in :c:type:`video_device`->flags. by testing the ``V4L2_FL_USES_V4L2_FH`` bit in :c:type:`video_device`->flags.
This bit is set whenever :c:func:`v4l2_fh_init` is called. This bit is set whenever :c:func:`v4l2_fh_init` is called.
struct :c:type:`v4l2_fh` is allocated as a part of the driver's own file handle struct v4l2_fh is allocated as a part of the driver's own file handle
structure and ``file->private_data`` is set to it in the driver's ``open()`` structure and ``file->private_data`` is set to it in the driver's ``open()``
function by the driver. function by the driver.
In many cases the struct :c:type:`v4l2_fh` will be embedded in a larger In many cases the struct v4l2_fh will be embedded in a larger
structure. In that case you should call: structure. In that case you should call:
#) :c:func:`v4l2_fh_init` and :c:func:`v4l2_fh_add` in ``open()`` #) :c:func:`v4l2_fh_init` and :c:func:`v4l2_fh_add` in ``open()``
...@@ -102,18 +102,18 @@ Below is a short description of the :c:type:`v4l2_fh` functions used: ...@@ -102,18 +102,18 @@ Below is a short description of the :c:type:`v4l2_fh` functions used:
memory can be freed. memory can be freed.
If struct :c:type:`v4l2_fh` is not embedded, then you can use these helper functions: If struct v4l2_fh is not embedded, then you can use these helper functions:
:c:func:`v4l2_fh_open <v4l2_fh_open>` :c:func:`v4l2_fh_open <v4l2_fh_open>`
(struct file \*filp) (struct file \*filp)
- This allocates a struct :c:type:`v4l2_fh`, initializes it and adds it to - This allocates a struct v4l2_fh, initializes it and adds it to
the struct :c:type:`video_device` associated with the file struct. the struct video_device associated with the file struct.
:c:func:`v4l2_fh_release <v4l2_fh_release>` :c:func:`v4l2_fh_release <v4l2_fh_release>`
(struct file \*filp) (struct file \*filp)
- This deletes it from the struct :c:type:`video_device` associated with the - This deletes it from the struct video_device associated with the
file struct, uninitialised the :c:type:`v4l2_fh` and frees it. file struct, uninitialised the :c:type:`v4l2_fh` and frees it.
These two functions can be plugged into the v4l2_file_operation's ``open()`` These two functions can be plugged into the v4l2_file_operation's ``open()``
......
...@@ -110,7 +110,7 @@ pads: ...@@ -110,7 +110,7 @@ pads:
err = media_entity_pads_init(&sd->entity, npads, pads); err = media_entity_pads_init(&sd->entity, npads, pads);
The pads array must have been previously initialized. There is no need to The pads array must have been previously initialized. There is no need to
manually set the struct :c:type:`media_entity` function and name fields, but the manually set the struct media_entity function and name fields, but the
revision field must be initialized if needed. revision field must be initialized if needed.
A reference to the entity will be automatically acquired/released when the A reference to the entity will be automatically acquired/released when the
......
...@@ -116,7 +116,7 @@ core, providing operations structures to the core. A notifier interface ...@@ -116,7 +116,7 @@ core, providing operations structures to the core. A notifier interface
allows error conditions to be reported to the core. allows error conditions to be reported to the core.
Registration should be triggered by explicit setup done by the platform, Registration should be triggered by explicit setup done by the platform,
supplying a struct :c:type:`regulator_init_data` for the regulator supplying a struct regulator_init_data for the regulator
containing constraint and supply information. containing constraint and supply information.
Machine interface Machine interface
...@@ -144,7 +144,7 @@ a given system, for example supporting higher supply voltages than the ...@@ -144,7 +144,7 @@ a given system, for example supporting higher supply voltages than the
consumers are rated for. consumers are rated for.
This is done at driver registration time` by providing a This is done at driver registration time` by providing a
struct :c:type:`regulation_constraints`. struct regulation_constraints.
The constraints may also specify an initial configuration for the The constraints may also specify an initial configuration for the
regulator in the constraints, which is particularly useful for use with regulator in the constraints, which is particularly useful for use with
......
...@@ -47,7 +47,7 @@ called USB Request Block, or URB for short. ...@@ -47,7 +47,7 @@ called USB Request Block, or URB for short.
The URB structure The URB structure
================= =================
Some of the fields in struct :c:type:`urb` are:: Some of the fields in struct urb are::
struct urb struct urb
{ {
......
...@@ -176,9 +176,9 @@ Kernel Mode Gadget API ...@@ -176,9 +176,9 @@ Kernel Mode Gadget API
Gadget drivers declare themselves through a struct Gadget drivers declare themselves through a struct
:c:type:`usb_gadget_driver`, which is responsible for most parts of enumeration :c:type:`usb_gadget_driver`, which is responsible for most parts of enumeration
for a struct :c:type:`usb_gadget`. The response to a set_configuration usually for a struct usb_gadget. The response to a set_configuration usually
involves enabling one or more of the struct :c:type:`usb_ep` objects exposed by involves enabling one or more of the struct usb_ep objects exposed by
the gadget, and submitting one or more struct :c:type:`usb_request` buffers to the gadget, and submitting one or more struct usb_request buffers to
transfer data. Understand those four data types, and their operations, transfer data. Understand those four data types, and their operations,
and you will understand how this API works. and you will understand how this API works.
...@@ -339,8 +339,8 @@ multi-configuration devices (also more than one function, but not ...@@ -339,8 +339,8 @@ multi-configuration devices (also more than one function, but not
necessarily sharing a given configuration). There is however an optional necessarily sharing a given configuration). There is however an optional
framework which makes it easier to reuse and combine functions. framework which makes it easier to reuse and combine functions.
Devices using this framework provide a struct :c:type:`usb_composite_driver`, Devices using this framework provide a struct usb_composite_driver,
which in turn provides one or more struct :c:type:`usb_configuration` which in turn provides one or more struct usb_configuration
instances. Each such configuration includes at least one struct instances. Each such configuration includes at least one struct
:c:type:`usb_function`, which packages a user visible role such as "network :c:type:`usb_function`, which packages a user visible role such as "network
link" or "mass storage device". Management functions may also exist, link" or "mass storage device". Management functions may also exist,
......
...@@ -122,7 +122,7 @@ and their quirks, might have a MODULE_DEVICE_TABLE like this:: ...@@ -122,7 +122,7 @@ and their quirks, might have a MODULE_DEVICE_TABLE like this::
Most USB device drivers should pass these tables to the USB subsystem as Most USB device drivers should pass these tables to the USB subsystem as
well as to the module management subsystem. Not all, though: some driver well as to the module management subsystem. Not all, though: some driver
frameworks connect using interfaces layered over USB, and so they won't frameworks connect using interfaces layered over USB, and so they won't
need such a struct :c:type:`usb_driver`. need such a struct usb_driver.
Drivers that connect directly to the USB subsystem should be declared Drivers that connect directly to the USB subsystem should be declared
something like this:: something like this::
......
...@@ -84,7 +84,7 @@ FS_IOC_ENABLE_VERITY ...@@ -84,7 +84,7 @@ FS_IOC_ENABLE_VERITY
-------------------- --------------------
The FS_IOC_ENABLE_VERITY ioctl enables fs-verity on a file. It takes The FS_IOC_ENABLE_VERITY ioctl enables fs-verity on a file. It takes
in a pointer to a :c:type:`struct fsverity_enable_arg`, defined as in a pointer to a struct fsverity_enable_arg, defined as
follows:: follows::
struct fsverity_enable_arg { struct fsverity_enable_arg {
......
...@@ -34,20 +34,20 @@ substream. In this procedure, PCM hardware parameters are decided by ...@@ -34,20 +34,20 @@ substream. In this procedure, PCM hardware parameters are decided by
interaction between applications and ALSA PCM core. Once decided, runtime of interaction between applications and ALSA PCM core. Once decided, runtime of
the PCM substream keeps the parameters. the PCM substream keeps the parameters.
The parameters are described in :c:type:`struct snd_pcm_hw_params`. This The parameters are described in struct snd_pcm_hw_params. This
structure includes several types of parameters. Applications set preferable structure includes several types of parameters. Applications set preferable
value to these parameters, then execute ioctl(2) with SNDRV_PCM_IOCTL_HW_REFINE value to these parameters, then execute ioctl(2) with SNDRV_PCM_IOCTL_HW_REFINE
or SNDRV_PCM_IOCTL_HW_PARAMS. The former is used just for refining available or SNDRV_PCM_IOCTL_HW_PARAMS. The former is used just for refining available
set of parameters. The latter is used for an actual decision of the parameters. set of parameters. The latter is used for an actual decision of the parameters.
The :c:type:`struct snd_pcm_hw_params` structure has below members: The struct snd_pcm_hw_params structure has below members:
``flags`` ``flags``
Configurable. ALSA PCM core and some drivers handle this flag to select Configurable. ALSA PCM core and some drivers handle this flag to select
convenient parameters or change their behaviour. convenient parameters or change their behaviour.
``masks`` ``masks``
Configurable. This type of parameter is described in Configurable. This type of parameter is described in
:c:type:`struct snd_mask` and represent mask values. As of PCM protocol struct snd_mask and represent mask values. As of PCM protocol
v2.0.13, three types are defined. v2.0.13, three types are defined.
- SNDRV_PCM_HW_PARAM_ACCESS - SNDRV_PCM_HW_PARAM_ACCESS
...@@ -55,7 +55,7 @@ The :c:type:`struct snd_pcm_hw_params` structure has below members: ...@@ -55,7 +55,7 @@ The :c:type:`struct snd_pcm_hw_params` structure has below members:
- SNDRV_PCM_HW_PARAM_SUBFORMAT - SNDRV_PCM_HW_PARAM_SUBFORMAT
``intervals`` ``intervals``
Configurable. This type of parameter is described in Configurable. This type of parameter is described in
:c:type:`struct snd_interval` and represent values with a range. As of struct snd_interval and represent values with a range. As of
PCM protocol v2.0.13, twelve types are defined. PCM protocol v2.0.13, twelve types are defined.
- SNDRV_PCM_HW_PARAM_SAMPLE_BITS - SNDRV_PCM_HW_PARAM_SAMPLE_BITS
...@@ -78,7 +78,7 @@ The :c:type:`struct snd_pcm_hw_params` structure has below members: ...@@ -78,7 +78,7 @@ The :c:type:`struct snd_pcm_hw_params` structure has below members:
are going to be changed. are going to be changed.
``cmask`` ``cmask``
Read-only. After returning from ioctl(2), buffer in user space for Read-only. After returning from ioctl(2), buffer in user space for
:c:type:`struct snd_pcm_hw_params` includes result of each operation. struct snd_pcm_hw_params includes result of each operation.
This mask represents which mask/interval parameter is actually changed. This mask represents which mask/interval parameter is actually changed.
``info`` ``info``
Read-only. This represents hardware/driver capabilities as bit flags Read-only. This represents hardware/driver capabilities as bit flags
...@@ -110,10 +110,10 @@ The :c:type:`struct snd_pcm_hw_params` structure has below members: ...@@ -110,10 +110,10 @@ The :c:type:`struct snd_pcm_hw_params` structure has below members:
value to this parameter but some drivers intentionally set zero with value to this parameter but some drivers intentionally set zero with
a care of hardware design or data transmission protocol. a care of hardware design or data transmission protocol.
ALSA PCM core handles buffer of :c:type:`struct snd_pcm_hw_params` when ALSA PCM core handles buffer of struct snd_pcm_hw_params when
applications execute ioctl(2) with SNDRV_PCM_HW_REFINE or SNDRV_PCM_HW_PARAMS. applications execute ioctl(2) with SNDRV_PCM_HW_REFINE or SNDRV_PCM_HW_PARAMS.
Parameters in the buffer are changed according to Parameters in the buffer are changed according to
:c:type:`struct snd_pcm_hardware` and rules of constraints in the runtime. The struct snd_pcm_hardware and rules of constraints in the runtime. The
structure describes capabilities of handled hardware. The rules describes structure describes capabilities of handled hardware. The rules describes
dependencies on which a parameter is decided according to several parameters. dependencies on which a parameter is decided according to several parameters.
A rule has a callback function, and drivers can register arbitrary functions A rule has a callback function, and drivers can register arbitrary functions
...@@ -121,17 +121,17 @@ to compute the target parameter. ALSA PCM core registers some rules to the ...@@ -121,17 +121,17 @@ to compute the target parameter. ALSA PCM core registers some rules to the
runtime as a default. runtime as a default.
Each driver can join in the interaction as long as it prepared for two stuffs Each driver can join in the interaction as long as it prepared for two stuffs
in a callback of :c:type:`struct snd_pcm_ops.open`. in a callback of struct snd_pcm_ops.open.
1. In the callback, drivers are expected to change a member of 1. In the callback, drivers are expected to change a member of
:c:type:`struct snd_pcm_hardware` type in the runtime, according to struct snd_pcm_hardware type in the runtime, according to
capacities of corresponding hardware. capacities of corresponding hardware.
2. In the same callback, drivers are also expected to register additional rules 2. In the same callback, drivers are also expected to register additional rules
of constraints into the runtime when several parameters have dependencies of constraints into the runtime when several parameters have dependencies
due to hardware design. due to hardware design.
The driver can refers to result of the interaction in a callback of The driver can refers to result of the interaction in a callback of
:c:type:`struct snd_pcm_ops.hw_params`, however it should not change the struct snd_pcm_ops.hw_params, however it should not change the
content. content.
Tracepoints in this category are designed to trace changes of the Tracepoints in this category are designed to trace changes of the
...@@ -163,7 +163,7 @@ fields are different according to type of the parameter. For parameters of mask ...@@ -163,7 +163,7 @@ fields are different according to type of the parameter. For parameters of mask
type, the fields represent hexadecimal dump of content of the parameter. For type, the fields represent hexadecimal dump of content of the parameter. For
parameters of interval type, the fields represent values of each member of parameters of interval type, the fields represent values of each member of
``empty``, ``integer``, ``openmin``, ``min``, ``max``, ``openmax`` in ``empty``, ``integer``, ``openmin``, ``min``, ``max``, ``openmax`` in
:c:type:`struct snd_interval` in this order. struct snd_interval in this order.
Tracepoints in drivers Tracepoints in drivers
====================== ======================
......
...@@ -110,7 +110,7 @@ while (<IN>) { ...@@ -110,7 +110,7 @@ while (<IN>) {
) { ) {
my $s = $1; my $s = $1;
$structs{$s} = "struct :c:type:`$s`\\ "; $structs{$s} = "struct $s\\ ";
next; next;
} }
} }
......
...@@ -26,7 +26,7 @@ tree. ...@@ -26,7 +26,7 @@ tree.
If a KSM page is shared between less than ``max_page_sharing`` VMAs, If a KSM page is shared between less than ``max_page_sharing`` VMAs,
the node of the stable tree that represents such KSM page points to a the node of the stable tree that represents such KSM page points to a
list of :c:type:`struct rmap_item` and the ``page->mapping`` of the list of struct rmap_item and the ``page->mapping`` of the
KSM page points to the stable tree node. KSM page points to the stable tree node.
When the sharing passes this threshold, KSM adds a second dimension to When the sharing passes this threshold, KSM adds a second dimension to
......
...@@ -24,7 +24,7 @@ whether it is possible to manually override that default. ...@@ -24,7 +24,7 @@ whether it is possible to manually override that default.
although it is still in use by several architectures. although it is still in use by several architectures.
All the memory models track the status of physical page frames using All the memory models track the status of physical page frames using
:c:type:`struct page` arranged in one or more arrays. struct page arranged in one or more arrays.
Regardless of the selected memory model, there exists one-to-one Regardless of the selected memory model, there exists one-to-one
mapping between the physical page frame number (PFN) and the mapping between the physical page frame number (PFN) and the
...@@ -111,7 +111,7 @@ maps for non-volatile memory devices and deferred initialization of ...@@ -111,7 +111,7 @@ maps for non-volatile memory devices and deferred initialization of
the memory map for larger systems. the memory map for larger systems.
The SPARSEMEM model presents the physical memory as a collection of The SPARSEMEM model presents the physical memory as a collection of
sections. A section is represented with :c:type:`struct mem_section` sections. A section is represented with struct mem_section
that contains `section_mem_map` that is, logically, a pointer to an that contains `section_mem_map` that is, logically, a pointer to an
array of struct pages. However, it is stored with some other magic array of struct pages. However, it is stored with some other magic
that aids the sections management. The section size and maximal number that aids the sections management. The section size and maximal number
...@@ -172,7 +172,7 @@ management. ...@@ -172,7 +172,7 @@ management.
The virtually mapped memory map allows storing `struct page` objects The virtually mapped memory map allows storing `struct page` objects
for persistent memory devices in pre-allocated storage on those for persistent memory devices in pre-allocated storage on those
devices. This storage is represented with :c:type:`struct vmem_altmap` devices. This storage is represented with struct vmem_altmap
that is eventually passed to vmemmap_populate() through a long chain that is eventually passed to vmemmap_populate() through a long chain
of function calls. The vmemmap_populate() implementation may use the of function calls. The vmemmap_populate() implementation may use the
`vmem_altmap` along with :c:func:`vmemmap_alloc_block_buf` helper to `vmem_altmap` along with :c:func:`vmemmap_alloc_block_buf` helper to
......
...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
* different KSM page copy of that content * different KSM page copy of that content
* *
* Internally, the regular nodes, "dups" and "chains" are represented * Internally, the regular nodes, "dups" and "chains" are represented
* using the same :c:type:`struct stable_node` structure. * using the same struct stable_node structure.
* *
* In addition to the stable tree, KSM uses a second data structure called the * In addition to the stable tree, KSM uses a second data structure called the
* unstable tree: this tree holds pointers to pages which have been found to * unstable tree: this tree holds pointers to pages which have been found to
......
...@@ -48,12 +48,12 @@ ...@@ -48,12 +48,12 @@
* boot regardless of the possible restrictions and memory hot(un)plug; * boot regardless of the possible restrictions and memory hot(un)plug;
* the ``physmem`` type is only available on some architectures. * the ``physmem`` type is only available on some architectures.
* *
* Each region is represented by :c:type:`struct memblock_region` that * Each region is represented by struct memblock_region that
* defines the region extents, its attributes and NUMA node id on NUMA * defines the region extents, its attributes and NUMA node id on NUMA
* systems. Every memory type is described by the :c:type:`struct * systems. Every memory type is described by the :c:type:`struct
* memblock_type` which contains an array of memory regions along with * memblock_type` which contains an array of memory regions along with
* the allocator metadata. The "memory" and "reserved" types are nicely * the allocator metadata. The "memory" and "reserved" types are nicely
* wrapped with :c:type:`struct memblock`. This structure is statically * wrapped with struct memblock. This structure is statically
* initialized at build time. The region arrays are initially sized to * initialized at build time. The region arrays are initially sized to
* %INIT_MEMBLOCK_REGIONS for "memory" and %INIT_MEMBLOCK_RESERVED_REGIONS * %INIT_MEMBLOCK_REGIONS for "memory" and %INIT_MEMBLOCK_RESERVED_REGIONS
* for "reserved". The region array for "physmem" is initially sized to * for "reserved". The region array for "physmem" is initially sized to
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment