Changes in 6.1.18 net/sched: Retire tcindex classifier auxdisplay: hd44780: Fix potential memory leak in hd44780_remove() fs/jfs: fix shift exponent db_agl2size negative driver: soc: xilinx: fix memory leak in xlnx_add_cb_for_notify_event() f2fs: don't rely on F2FS_MAP_* in f2fs_iomap_begin f2fs: fix to avoid potential deadlock objtool: Fix memory leak in create_static_call_sections() soc: mediatek: mtk-pm-domains: Allow mt8186 ADSP default power on memory: renesas-rpc-if: Split-off private data from struct rpcif memory: renesas-rpc-if: Move resource acquisition to .probe() soc: mediatek: mtk-svs: Enable the IRQ later pwm: sifive: Always let the first pwm_apply_state succeed pwm: stm32-lp: fix the check on arr and cmp registers update f2fs: introduce trace_f2fs_replace_atomic_write_block f2fs: correct i_size change for atomic writes f2fs: clear atomic_write_task in f2fs_abort_atomic_write() soc: mediatek: mtk-svs: restore default voltages when svs_init02() fail soc: mediatek: mtk-svs: reset svs when svs_resume() fail soc: mediatek: mtk-svs: Use pm_runtime_resume_and_get() in svs_init01() fs: f2fs: initialize fsdata in pagecache_write() f2fs: allow set compression option of files without blocks f2fs: fix to abort atomic write only during do_exist() um: vector: Fix memory leak in vector_config ubi: ensure that VID header offset + VID header size <= alloc, size ubifs: Fix build errors as symbol undefined ubifs: Fix memory leak in ubifs_sysfs_init() ubifs: Rectify space budget for ubifs_symlink() if symlink is encrypted ubifs: Rectify space budget for ubifs_xrename() ubifs: Fix wrong dirty space budget for dirty inode ubifs: do_rename: Fix wrong space budget when target inode's nlink > 1 ubifs: Reserve one leb for each journal head while doing budget ubi: Fix use-after-free when volume resizing failed ubi: Fix unreferenced object reported by kmemleak in ubi_resize_volume() ubifs: Fix memory leak in alloc_wbufs() ubi: Fix possible null-ptr-deref in ubi_free_volume() ubifs: Re-statistic cleaned znode count if commit failed ubifs: dirty_cow_znode: Fix memleak in error handling path ubifs: ubifs_writepage: Mark page dirty after writing inode failed ubifs: ubifs_releasepage: Remove ubifs_assert(0) to valid this process ubi: fastmap: Fix missed fm_anchor PEB in wear-leveling after disabling fastmap ubi: Fix UAF wear-leveling entry in eraseblk_count_seq_show() ubi: ubi_wl_put_peb: Fix infinite loop when wear-leveling work failed f2fs: fix to avoid potential memory corruption in __update_iostat_latency() soc: qcom: stats: Populate all subsystem debugfs files ext4: use ext4_fc_tl_mem in fast-commit replay path ext4: don't show commit interval if it is zero netfilter: nf_tables: allow to fetch set elements when table has an owner x86: um: vdso: Add '%rcx' and '%r11' to the syscall clobber list um: virtio_uml: free command if adding to virtqueue failed um: virtio_uml: mark device as unregistered when breaking it um: virtio_uml: move device breaking into workqueue um: virt-pci: properly remove PCI device from bus f2fs: synchronize atomic write aborts watchdog: rzg2l_wdt: Issue a reset before we put the PM clocks watchdog: rzg2l_wdt: Handle TYPE-B reset for RZ/V2M watchdog: at91sam9_wdt: use devm_request_irq to avoid missing free_irq() in error path watchdog: Fix kmemleak in watchdog_cdev_register watchdog: pcwd_usb: Fix attempting to access uninitialized memory watchdog: sbsa_wdog: Make sure the timeout programming is within the limits netfilter: ctnetlink: fix possible refcount leak in ctnetlink_create_conntrack() netfilter: conntrack: fix rmmod double-free race netfilter: ip6t_rpfilter: Fix regression with VRF interfaces netfilter: ebtables: fix table blob use-after-free netfilter: xt_length: use skb len to match in length_mt6 netfilter: ctnetlink: make event listener tracking global netfilter: x_tables: fix percpu counter block leak on error path when creating new netns ptp: vclock: use mutex to fix "sleep on atomic" bug drm/i915: move a Kconfig symbol to unbreak the menu presentation ipv6: Add lwtunnel encap size of all siblings in nexthop calculation octeontx2-pf: Recalculate UDP checksum for ptp 1-step sync packet net: sunhme: Fix region request sctp: add a refcnt in sctp_stream_priorities to avoid a nested loop octeontx2-pf: Use correct struct reference in test condition net: fix __dev_kfree_skb_any() vs drop monitor 9p/xen: fix version parsing 9p/xen: fix connection sequence 9p/rdma: unmap receive dma buffer in rdma_request()/post_recv() spi: tegra210-quad: Fix validate combined sequence mlx5: fix skb leak while fifo resync and push mlx5: fix possible ptp queue fifo use-after-free net/mlx5: ECPF, wait for VF pages only after disabling host PFs net/mlx5e: Verify flow_source cap before using it net/mlx5: Geneve, Fix handling of Geneve object id as error code ext4: fix incorrect options show of original mount_opt and extend mount_opt2 nfc: fix memory leak of se_io context in nfc_genl_se_io net/sched: transition act_pedit to rcu and percpu stats net/sched: act_pedit: fix action bind logic net/sched: act_mpls: fix action bind logic net/sched: act_sample: fix action bind logic net: dsa: seville: ignore mscc-miim read errors from Lynx PCS net: dsa: felix: fix internal MDIO controller resource length ARM: dts: spear320-hmi: correct STMPE GPIO compatible tcp: tcp_check_req() can be called from process context vc_screen: modify vcs_size() handling in vcs_read() spi: tegra210-quad: Fix iterator outside loop rtc: sun6i: Always export the internal oscillator genirq/ipi: Fix NULL pointer deref in irq_data_get_affinity_mask() scsi: ipr: Work around fortify-string warning scsi: mpi3mr: Fix an issue found by KASAN scsi: mpi3mr: Use number of bits to manage bitmap sizes rtc: allow rtc_read_alarm without read_alarm callback io_uring: fix size calculation when registering buf ring loop: loop_set_status_from_info() check before assignment ASoC: adau7118: don't disable regulators on device unbind ASoC: apple: mca: Fix final status read on SERDES reset ASoC: apple: mca: Fix SERDES reset sequence ASoC: apple: mca: Improve handling of unavailable DMA channels nvme: bring back auto-removal of deleted namespaces during sequential scan nvme-tcp: don't access released socket during error recovery nvme-fabrics: show well known discovery name ASoC: zl38060 add gpiolib dependency ASoC: mediatek: mt8195: add missing initialization thermal: intel: quark_dts: fix error pointer dereference thermal: intel: BXT_PMIC: select REGMAP instead of depending on it tracing: Add NULL checks for buffer in ring_buffer_free_read_page() kernel/printk/index.c: fix memory leak with using debugfs_lookup() firmware/efi sysfb_efi: Add quirk for Lenovo IdeaPad Duet 3 bootconfig: Increase max nodes of bootconfig from 1024 to 8192 for DCC support mfd: arizona: Use pm_runtime_resume_and_get() to prevent refcnt leak IB/hfi1: Update RMT size calculation iommu/amd: Fix error handling for pdev_pri_ats_enable() PCI/ACPI: Account for _S0W of the target bridge in acpi_pci_bridge_d3() media: uvcvideo: Remove format descriptions media: uvcvideo: Handle cameras with invalid descriptors media: uvcvideo: Handle errors from calls to usb_string media: uvcvideo: Quirk for autosuspend in Logitech B910 and C910 media: uvcvideo: Silence memcpy() run-time false positive warnings USB: fix memory leak with using debugfs_lookup() cacheinfo: Fix shared_cpu_map to handle shared caches at different levels staging: emxx_udc: Add checks for dma_alloc_coherent() tty: fix out-of-bounds access in tty_driver_lookup_tty() tty: serial: fsl_lpuart: disable the CTS when send break signal serial: sc16is7xx: setup GPIO controller later in probe mei: bus-fixup:upon error print return values of send and receive tools/iio/iio_utils:fix memory leak bus: mhi: ep: Fix the debug message for MHI_PKT_TYPE_RESET_CHAN_CMD cmd iio: accel: mma9551_core: Prevent uninitialized variable in mma9551_read_status_word() iio: accel: mma9551_core: Prevent uninitialized variable in mma9551_read_config_word() media: uvcvideo: Add GUID for BGRA/X 8:8:8:8 soundwire: bus_type: Avoid lockdep assert in sdw_drv_probe() PCI: loongson: Prevent LS7A MRRS increases staging: pi433: fix memory leak with using debugfs_lookup() USB: dwc3: fix memory leak with using debugfs_lookup() USB: chipidea: fix memory leak with using debugfs_lookup() USB: ULPI: fix memory leak with using debugfs_lookup() USB: uhci: fix memory leak with using debugfs_lookup() USB: sl811: fix memory leak with using debugfs_lookup() USB: fotg210: fix memory leak with using debugfs_lookup() USB: isp116x: fix memory leak with using debugfs_lookup() USB: isp1362: fix memory leak with using debugfs_lookup() USB: gadget: gr_udc: fix memory leak with using debugfs_lookup() USB: gadget: bcm63xx_udc: fix memory leak with using debugfs_lookup() USB: gadget: lpc32xx_udc: fix memory leak with using debugfs_lookup() USB: gadget: pxa25x_udc: fix memory leak with using debugfs_lookup() USB: gadget: pxa27x_udc: fix memory leak with using debugfs_lookup() usb: host: xhci: mvebu: Iterate over array indexes instead of using pointer math USB: ene_usb6250: Allocate enough memory for full object usb: uvc: Enumerate valid values for color matching usb: gadget: uvc: Make bSourceID read/write PCI: Align extra resources for hotplug bridges properly PCI: Take other bus devices into account when distributing resources PCI: Distribute available resources for root buses, too tty: pcn_uart: fix memory leak with using debugfs_lookup() misc: vmw_balloon: fix memory leak with using debugfs_lookup() drivers: base: component: fix memory leak with using debugfs_lookup() drivers: base: dd: fix memory leak with using debugfs_lookup() kernel/fail_function: fix memory leak with using debugfs_lookup() PCI: loongson: Add more devices that need MRRS quirk PCI: Add ACS quirk for Wangxun NICs PCI: pciehp: Add Qualcomm quirk for Command Completed erratum phy: rockchip-typec: Fix unsigned comparison with less than zero RDMA/cma: Distinguish between sockaddr_in and sockaddr_in6 by size iommu: Attach device group to old domain in error path soundwire: cadence: Remove wasted space in response_buf soundwire: cadence: Drain the RX FIFO after an IO timeout net: tls: avoid hanging tasks on the tx_lock x86/resctl: fix scheduler confusion with 'current' vDPA/ifcvf: decouple hw features manipulators from the adapter vDPA/ifcvf: decouple config space ops from the adapter vDPA/ifcvf: alloc the mgmt_dev before the adapter vDPA/ifcvf: decouple vq IRQ releasers from the adapter vDPA/ifcvf: decouple config IRQ releaser from the adapter vDPA/ifcvf: decouple vq irq requester from the adapter vDPA/ifcvf: decouple config/dev IRQ requester and vectors allocator from the adapter vDPA/ifcvf: ifcvf_request_irq works on ifcvf_hw vDPA/ifcvf: manage ifcvf_hw in the mgmt_dev vDPA/ifcvf: allocate the adapter in dev_add() drm/display/dp_mst: Add drm_atomic_get_old_mst_topology_state() drm/display/dp_mst: Fix down/up message handling after sink disconnect drm/display/dp_mst: Fix down message handling after a packet reception error drm/display/dp_mst: Fix payload addition on a disconnected sink drm/i915/dp_mst: Add the MST topology state for modesetted CRTCs drm/i915: Fix system suspend without fbdev being initialized media: uvcvideo: Fix race condition with usb_kill_urb io_uring: fix two assignments in if conditions io_uring/poll: allow some retries for poll triggering spuriously arm64: efi: Make efi_rt_lock a raw_spinlock arm64: mte: Fix/clarify the PG_mte_tagged semantics arm64: Reset KASAN tag in copy_highpage with HW tags only usb: gadget: uvc: fix missing mutex_unlock() if kstrtou8() fails Linux 6.1.18 Change-Id: Icb8e56528d481a17780bdd517c69efa9e76b94c0 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
601 lines
17 KiB
C
601 lines
17 KiB
C
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
|
/*
|
|
* USB Video Class definitions.
|
|
*
|
|
* Copyright (C) 2009 Laurent Pinchart <laurent.pinchart@skynet.be>
|
|
*
|
|
* This file holds USB constants and structures defined by the USB Device
|
|
* Class Definition for Video Devices. Unless otherwise stated, comments
|
|
* below reference relevant sections of the USB Video Class 1.1 specification
|
|
* available at
|
|
*
|
|
* http://www.usb.org/developers/devclass_docs/USB_Video_Class_1_1.zip
|
|
*/
|
|
|
|
#ifndef __LINUX_USB_VIDEO_H
|
|
#define __LINUX_USB_VIDEO_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
/* --------------------------------------------------------------------------
|
|
* UVC constants
|
|
*/
|
|
|
|
/* A.2. Video Interface Subclass Codes */
|
|
#define UVC_SC_UNDEFINED 0x00
|
|
#define UVC_SC_VIDEOCONTROL 0x01
|
|
#define UVC_SC_VIDEOSTREAMING 0x02
|
|
#define UVC_SC_VIDEO_INTERFACE_COLLECTION 0x03
|
|
|
|
/* A.3. Video Interface Protocol Codes */
|
|
#define UVC_PC_PROTOCOL_UNDEFINED 0x00
|
|
#define UVC_PC_PROTOCOL_15 0x01
|
|
|
|
/* A.5. Video Class-Specific VC Interface Descriptor Subtypes */
|
|
#define UVC_VC_DESCRIPTOR_UNDEFINED 0x00
|
|
#define UVC_VC_HEADER 0x01
|
|
#define UVC_VC_INPUT_TERMINAL 0x02
|
|
#define UVC_VC_OUTPUT_TERMINAL 0x03
|
|
#define UVC_VC_SELECTOR_UNIT 0x04
|
|
#define UVC_VC_PROCESSING_UNIT 0x05
|
|
#define UVC_VC_EXTENSION_UNIT 0x06
|
|
|
|
/* A.6. Video Class-Specific VS Interface Descriptor Subtypes */
|
|
#define UVC_VS_UNDEFINED 0x00
|
|
#define UVC_VS_INPUT_HEADER 0x01
|
|
#define UVC_VS_OUTPUT_HEADER 0x02
|
|
#define UVC_VS_STILL_IMAGE_FRAME 0x03
|
|
#define UVC_VS_FORMAT_UNCOMPRESSED 0x04
|
|
#define UVC_VS_FRAME_UNCOMPRESSED 0x05
|
|
#define UVC_VS_FORMAT_MJPEG 0x06
|
|
#define UVC_VS_FRAME_MJPEG 0x07
|
|
#define UVC_VS_FORMAT_MPEG2TS 0x0a
|
|
#define UVC_VS_FORMAT_DV 0x0c
|
|
#define UVC_VS_COLORFORMAT 0x0d
|
|
#define UVC_VS_FORMAT_FRAME_BASED 0x10
|
|
#define UVC_VS_FRAME_FRAME_BASED 0x11
|
|
#define UVC_VS_FORMAT_STREAM_BASED 0x12
|
|
|
|
/* A.7. Video Class-Specific Endpoint Descriptor Subtypes */
|
|
#define UVC_EP_UNDEFINED 0x00
|
|
#define UVC_EP_GENERAL 0x01
|
|
#define UVC_EP_ENDPOINT 0x02
|
|
#define UVC_EP_INTERRUPT 0x03
|
|
|
|
/* A.8. Video Class-Specific Request Codes */
|
|
#define UVC_RC_UNDEFINED 0x00
|
|
#define UVC_SET_CUR 0x01
|
|
#define UVC_GET_CUR 0x81
|
|
#define UVC_GET_MIN 0x82
|
|
#define UVC_GET_MAX 0x83
|
|
#define UVC_GET_RES 0x84
|
|
#define UVC_GET_LEN 0x85
|
|
#define UVC_GET_INFO 0x86
|
|
#define UVC_GET_DEF 0x87
|
|
|
|
/* A.9.1. VideoControl Interface Control Selectors */
|
|
#define UVC_VC_CONTROL_UNDEFINED 0x00
|
|
#define UVC_VC_VIDEO_POWER_MODE_CONTROL 0x01
|
|
#define UVC_VC_REQUEST_ERROR_CODE_CONTROL 0x02
|
|
|
|
/* A.9.2. Terminal Control Selectors */
|
|
#define UVC_TE_CONTROL_UNDEFINED 0x00
|
|
|
|
/* A.9.3. Selector Unit Control Selectors */
|
|
#define UVC_SU_CONTROL_UNDEFINED 0x00
|
|
#define UVC_SU_INPUT_SELECT_CONTROL 0x01
|
|
|
|
/* A.9.4. Camera Terminal Control Selectors */
|
|
#define UVC_CT_CONTROL_UNDEFINED 0x00
|
|
#define UVC_CT_SCANNING_MODE_CONTROL 0x01
|
|
#define UVC_CT_AE_MODE_CONTROL 0x02
|
|
#define UVC_CT_AE_PRIORITY_CONTROL 0x03
|
|
#define UVC_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x04
|
|
#define UVC_CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x05
|
|
#define UVC_CT_FOCUS_ABSOLUTE_CONTROL 0x06
|
|
#define UVC_CT_FOCUS_RELATIVE_CONTROL 0x07
|
|
#define UVC_CT_FOCUS_AUTO_CONTROL 0x08
|
|
#define UVC_CT_IRIS_ABSOLUTE_CONTROL 0x09
|
|
#define UVC_CT_IRIS_RELATIVE_CONTROL 0x0a
|
|
#define UVC_CT_ZOOM_ABSOLUTE_CONTROL 0x0b
|
|
#define UVC_CT_ZOOM_RELATIVE_CONTROL 0x0c
|
|
#define UVC_CT_PANTILT_ABSOLUTE_CONTROL 0x0d
|
|
#define UVC_CT_PANTILT_RELATIVE_CONTROL 0x0e
|
|
#define UVC_CT_ROLL_ABSOLUTE_CONTROL 0x0f
|
|
#define UVC_CT_ROLL_RELATIVE_CONTROL 0x10
|
|
#define UVC_CT_PRIVACY_CONTROL 0x11
|
|
|
|
/* A.9.5. Processing Unit Control Selectors */
|
|
#define UVC_PU_CONTROL_UNDEFINED 0x00
|
|
#define UVC_PU_BACKLIGHT_COMPENSATION_CONTROL 0x01
|
|
#define UVC_PU_BRIGHTNESS_CONTROL 0x02
|
|
#define UVC_PU_CONTRAST_CONTROL 0x03
|
|
#define UVC_PU_GAIN_CONTROL 0x04
|
|
#define UVC_PU_POWER_LINE_FREQUENCY_CONTROL 0x05
|
|
#define UVC_PU_HUE_CONTROL 0x06
|
|
#define UVC_PU_SATURATION_CONTROL 0x07
|
|
#define UVC_PU_SHARPNESS_CONTROL 0x08
|
|
#define UVC_PU_GAMMA_CONTROL 0x09
|
|
#define UVC_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x0a
|
|
#define UVC_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x0b
|
|
#define UVC_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x0c
|
|
#define UVC_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x0d
|
|
#define UVC_PU_DIGITAL_MULTIPLIER_CONTROL 0x0e
|
|
#define UVC_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x0f
|
|
#define UVC_PU_HUE_AUTO_CONTROL 0x10
|
|
#define UVC_PU_ANALOG_VIDEO_STANDARD_CONTROL 0x11
|
|
#define UVC_PU_ANALOG_LOCK_STATUS_CONTROL 0x12
|
|
|
|
/* A.9.7. VideoStreaming Interface Control Selectors */
|
|
#define UVC_VS_CONTROL_UNDEFINED 0x00
|
|
#define UVC_VS_PROBE_CONTROL 0x01
|
|
#define UVC_VS_COMMIT_CONTROL 0x02
|
|
#define UVC_VS_STILL_PROBE_CONTROL 0x03
|
|
#define UVC_VS_STILL_COMMIT_CONTROL 0x04
|
|
#define UVC_VS_STILL_IMAGE_TRIGGER_CONTROL 0x05
|
|
#define UVC_VS_STREAM_ERROR_CODE_CONTROL 0x06
|
|
#define UVC_VS_GENERATE_KEY_FRAME_CONTROL 0x07
|
|
#define UVC_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08
|
|
#define UVC_VS_SYNC_DELAY_CONTROL 0x09
|
|
|
|
/* B.1. USB Terminal Types */
|
|
#define UVC_TT_VENDOR_SPECIFIC 0x0100
|
|
#define UVC_TT_STREAMING 0x0101
|
|
|
|
/* B.2. Input Terminal Types */
|
|
#define UVC_ITT_VENDOR_SPECIFIC 0x0200
|
|
#define UVC_ITT_CAMERA 0x0201
|
|
#define UVC_ITT_MEDIA_TRANSPORT_INPUT 0x0202
|
|
|
|
/* B.3. Output Terminal Types */
|
|
#define UVC_OTT_VENDOR_SPECIFIC 0x0300
|
|
#define UVC_OTT_DISPLAY 0x0301
|
|
#define UVC_OTT_MEDIA_TRANSPORT_OUTPUT 0x0302
|
|
|
|
/* B.4. External Terminal Types */
|
|
#define UVC_EXTERNAL_VENDOR_SPECIFIC 0x0400
|
|
#define UVC_COMPOSITE_CONNECTOR 0x0401
|
|
#define UVC_SVIDEO_CONNECTOR 0x0402
|
|
#define UVC_COMPONENT_CONNECTOR 0x0403
|
|
|
|
/* 2.4.2.2. Status Packet Type */
|
|
#define UVC_STATUS_TYPE_CONTROL 1
|
|
#define UVC_STATUS_TYPE_STREAMING 2
|
|
|
|
/* 2.4.3.3. Payload Header Information */
|
|
#define UVC_STREAM_EOH (1 << 7)
|
|
#define UVC_STREAM_ERR (1 << 6)
|
|
#define UVC_STREAM_STI (1 << 5)
|
|
#define UVC_STREAM_RES (1 << 4)
|
|
#define UVC_STREAM_SCR (1 << 3)
|
|
#define UVC_STREAM_PTS (1 << 2)
|
|
#define UVC_STREAM_EOF (1 << 1)
|
|
#define UVC_STREAM_FID (1 << 0)
|
|
|
|
/* 4.1.2. Control Capabilities */
|
|
#define UVC_CONTROL_CAP_GET (1 << 0)
|
|
#define UVC_CONTROL_CAP_SET (1 << 1)
|
|
#define UVC_CONTROL_CAP_DISABLED (1 << 2)
|
|
#define UVC_CONTROL_CAP_AUTOUPDATE (1 << 3)
|
|
#define UVC_CONTROL_CAP_ASYNCHRONOUS (1 << 4)
|
|
|
|
/* 3.9.2.6 Color Matching Descriptor Values */
|
|
enum uvc_color_primaries_values {
|
|
UVC_COLOR_PRIMARIES_UNSPECIFIED,
|
|
UVC_COLOR_PRIMARIES_BT_709_SRGB,
|
|
UVC_COLOR_PRIMARIES_BT_470_2_M,
|
|
UVC_COLOR_PRIMARIES_BT_470_2_B_G,
|
|
UVC_COLOR_PRIMARIES_SMPTE_170M,
|
|
UVC_COLOR_PRIMARIES_SMPTE_240M,
|
|
};
|
|
|
|
enum uvc_transfer_characteristics_values {
|
|
UVC_TRANSFER_CHARACTERISTICS_UNSPECIFIED,
|
|
UVC_TRANSFER_CHARACTERISTICS_BT_709,
|
|
UVC_TRANSFER_CHARACTERISTICS_BT_470_2_M,
|
|
UVC_TRANSFER_CHARACTERISTICS_BT_470_2_B_G,
|
|
UVC_TRANSFER_CHARACTERISTICS_SMPTE_170M,
|
|
UVC_TRANSFER_CHARACTERISTICS_SMPTE_240M,
|
|
UVC_TRANSFER_CHARACTERISTICS_LINEAR,
|
|
UVC_TRANSFER_CHARACTERISTICS_SRGB,
|
|
};
|
|
|
|
enum uvc_matrix_coefficients {
|
|
UVC_MATRIX_COEFFICIENTS_UNSPECIFIED,
|
|
UVC_MATRIX_COEFFICIENTS_BT_709,
|
|
UVC_MATRIX_COEFFICIENTS_FCC,
|
|
UVC_MATRIX_COEFFICIENTS_BT_470_2_B_G,
|
|
UVC_MATRIX_COEFFICIENTS_SMPTE_170M,
|
|
UVC_MATRIX_COEFFICIENTS_SMPTE_240M,
|
|
};
|
|
|
|
/* ------------------------------------------------------------------------
|
|
* UVC structures
|
|
*/
|
|
|
|
/* All UVC descriptors have these 3 fields at the beginning */
|
|
struct uvc_descriptor_header {
|
|
__u8 bLength;
|
|
__u8 bDescriptorType;
|
|
__u8 bDescriptorSubType;
|
|
} __attribute__((packed));
|
|
|
|
/* 3.7.2. Video Control Interface Header Descriptor */
|
|
struct uvc_header_descriptor {
|
|
__u8 bLength;
|
|
__u8 bDescriptorType;
|
|
__u8 bDescriptorSubType;
|
|
__le16 bcdUVC;
|
|
__le16 wTotalLength;
|
|
__le32 dwClockFrequency;
|
|
__u8 bInCollection;
|
|
__u8 baInterfaceNr[];
|
|
} __attribute__((__packed__));
|
|
|
|
#define UVC_DT_HEADER_SIZE(n) (12+(n))
|
|
|
|
#define UVC_HEADER_DESCRIPTOR(n) \
|
|
uvc_header_descriptor_##n
|
|
|
|
#define DECLARE_UVC_HEADER_DESCRIPTOR(n) \
|
|
struct UVC_HEADER_DESCRIPTOR(n) { \
|
|
__u8 bLength; \
|
|
__u8 bDescriptorType; \
|
|
__u8 bDescriptorSubType; \
|
|
__le16 bcdUVC; \
|
|
__le16 wTotalLength; \
|
|
__le32 dwClockFrequency; \
|
|
__u8 bInCollection; \
|
|
__u8 baInterfaceNr[n]; \
|
|
} __attribute__ ((packed))
|
|
|
|
/* 3.7.2.1. Input Terminal Descriptor */
|
|
struct uvc_input_terminal_descriptor {
|
|
__u8 bLength;
|
|
__u8 bDescriptorType;
|
|
__u8 bDescriptorSubType;
|
|
__u8 bTerminalID;
|
|
__le16 wTerminalType;
|
|
__u8 bAssocTerminal;
|
|
__u8 iTerminal;
|
|
} __attribute__((__packed__));
|
|
|
|
#define UVC_DT_INPUT_TERMINAL_SIZE 8
|
|
|
|
/* 3.7.2.2. Output Terminal Descriptor */
|
|
struct uvc_output_terminal_descriptor {
|
|
__u8 bLength;
|
|
__u8 bDescriptorType;
|
|
__u8 bDescriptorSubType;
|
|
__u8 bTerminalID;
|
|
__le16 wTerminalType;
|
|
__u8 bAssocTerminal;
|
|
__u8 bSourceID;
|
|
__u8 iTerminal;
|
|
} __attribute__((__packed__));
|
|
|
|
#define UVC_DT_OUTPUT_TERMINAL_SIZE 9
|
|
|
|
/* 3.7.2.3. Camera Terminal Descriptor */
|
|
struct uvc_camera_terminal_descriptor {
|
|
__u8 bLength;
|
|
__u8 bDescriptorType;
|
|
__u8 bDescriptorSubType;
|
|
__u8 bTerminalID;
|
|
__le16 wTerminalType;
|
|
__u8 bAssocTerminal;
|
|
__u8 iTerminal;
|
|
__le16 wObjectiveFocalLengthMin;
|
|
__le16 wObjectiveFocalLengthMax;
|
|
__le16 wOcularFocalLength;
|
|
__u8 bControlSize;
|
|
__u8 bmControls[3];
|
|
} __attribute__((__packed__));
|
|
|
|
#define UVC_DT_CAMERA_TERMINAL_SIZE(n) (15+(n))
|
|
|
|
/* 3.7.2.4. Selector Unit Descriptor */
|
|
struct uvc_selector_unit_descriptor {
|
|
__u8 bLength;
|
|
__u8 bDescriptorType;
|
|
__u8 bDescriptorSubType;
|
|
__u8 bUnitID;
|
|
__u8 bNrInPins;
|
|
__u8 baSourceID[0];
|
|
__u8 iSelector;
|
|
} __attribute__((__packed__));
|
|
|
|
#define UVC_DT_SELECTOR_UNIT_SIZE(n) (6+(n))
|
|
|
|
#define UVC_SELECTOR_UNIT_DESCRIPTOR(n) \
|
|
uvc_selector_unit_descriptor_##n
|
|
|
|
#define DECLARE_UVC_SELECTOR_UNIT_DESCRIPTOR(n) \
|
|
struct UVC_SELECTOR_UNIT_DESCRIPTOR(n) { \
|
|
__u8 bLength; \
|
|
__u8 bDescriptorType; \
|
|
__u8 bDescriptorSubType; \
|
|
__u8 bUnitID; \
|
|
__u8 bNrInPins; \
|
|
__u8 baSourceID[n]; \
|
|
__u8 iSelector; \
|
|
} __attribute__ ((packed))
|
|
|
|
/* 3.7.2.5. Processing Unit Descriptor */
|
|
struct uvc_processing_unit_descriptor {
|
|
__u8 bLength;
|
|
__u8 bDescriptorType;
|
|
__u8 bDescriptorSubType;
|
|
__u8 bUnitID;
|
|
__u8 bSourceID;
|
|
__le16 wMaxMultiplier;
|
|
__u8 bControlSize;
|
|
__u8 bmControls[2];
|
|
__u8 iProcessing;
|
|
__u8 bmVideoStandards;
|
|
} __attribute__((__packed__));
|
|
|
|
#define UVC_DT_PROCESSING_UNIT_SIZE(n) (10+(n))
|
|
|
|
/* 3.7.2.6. Extension Unit Descriptor */
|
|
struct uvc_extension_unit_descriptor {
|
|
__u8 bLength;
|
|
__u8 bDescriptorType;
|
|
__u8 bDescriptorSubType;
|
|
__u8 bUnitID;
|
|
__u8 guidExtensionCode[16];
|
|
__u8 bNumControls;
|
|
__u8 bNrInPins;
|
|
__u8 baSourceID[0];
|
|
__u8 bControlSize;
|
|
__u8 bmControls[0];
|
|
__u8 iExtension;
|
|
} __attribute__((__packed__));
|
|
|
|
#define UVC_DT_EXTENSION_UNIT_SIZE(p, n) (24+(p)+(n))
|
|
|
|
#define UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) \
|
|
uvc_extension_unit_descriptor_##p_##n
|
|
|
|
#define DECLARE_UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) \
|
|
struct UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) { \
|
|
__u8 bLength; \
|
|
__u8 bDescriptorType; \
|
|
__u8 bDescriptorSubType; \
|
|
__u8 bUnitID; \
|
|
__u8 guidExtensionCode[16]; \
|
|
__u8 bNumControls; \
|
|
__u8 bNrInPins; \
|
|
__u8 baSourceID[p]; \
|
|
__u8 bControlSize; \
|
|
__u8 bmControls[n]; \
|
|
__u8 iExtension; \
|
|
} __attribute__ ((packed))
|
|
|
|
/* 3.8.2.2. Video Control Interrupt Endpoint Descriptor */
|
|
struct uvc_control_endpoint_descriptor {
|
|
__u8 bLength;
|
|
__u8 bDescriptorType;
|
|
__u8 bDescriptorSubType;
|
|
__le16 wMaxTransferSize;
|
|
} __attribute__((__packed__));
|
|
|
|
#define UVC_DT_CONTROL_ENDPOINT_SIZE 5
|
|
|
|
/* 3.9.2.1. Input Header Descriptor */
|
|
struct uvc_input_header_descriptor {
|
|
__u8 bLength;
|
|
__u8 bDescriptorType;
|
|
__u8 bDescriptorSubType;
|
|
__u8 bNumFormats;
|
|
__le16 wTotalLength;
|
|
__u8 bEndpointAddress;
|
|
__u8 bmInfo;
|
|
__u8 bTerminalLink;
|
|
__u8 bStillCaptureMethod;
|
|
__u8 bTriggerSupport;
|
|
__u8 bTriggerUsage;
|
|
__u8 bControlSize;
|
|
__u8 bmaControls[];
|
|
} __attribute__((__packed__));
|
|
|
|
#define UVC_DT_INPUT_HEADER_SIZE(n, p) (13+(n*p))
|
|
|
|
#define UVC_INPUT_HEADER_DESCRIPTOR(n, p) \
|
|
uvc_input_header_descriptor_##n_##p
|
|
|
|
#define DECLARE_UVC_INPUT_HEADER_DESCRIPTOR(n, p) \
|
|
struct UVC_INPUT_HEADER_DESCRIPTOR(n, p) { \
|
|
__u8 bLength; \
|
|
__u8 bDescriptorType; \
|
|
__u8 bDescriptorSubType; \
|
|
__u8 bNumFormats; \
|
|
__le16 wTotalLength; \
|
|
__u8 bEndpointAddress; \
|
|
__u8 bmInfo; \
|
|
__u8 bTerminalLink; \
|
|
__u8 bStillCaptureMethod; \
|
|
__u8 bTriggerSupport; \
|
|
__u8 bTriggerUsage; \
|
|
__u8 bControlSize; \
|
|
__u8 bmaControls[p][n]; \
|
|
} __attribute__ ((packed))
|
|
|
|
/* 3.9.2.2. Output Header Descriptor */
|
|
struct uvc_output_header_descriptor {
|
|
__u8 bLength;
|
|
__u8 bDescriptorType;
|
|
__u8 bDescriptorSubType;
|
|
__u8 bNumFormats;
|
|
__le16 wTotalLength;
|
|
__u8 bEndpointAddress;
|
|
__u8 bTerminalLink;
|
|
__u8 bControlSize;
|
|
__u8 bmaControls[];
|
|
} __attribute__((__packed__));
|
|
|
|
#define UVC_DT_OUTPUT_HEADER_SIZE(n, p) (9+(n*p))
|
|
|
|
#define UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) \
|
|
uvc_output_header_descriptor_##n_##p
|
|
|
|
#define DECLARE_UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) \
|
|
struct UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) { \
|
|
__u8 bLength; \
|
|
__u8 bDescriptorType; \
|
|
__u8 bDescriptorSubType; \
|
|
__u8 bNumFormats; \
|
|
__le16 wTotalLength; \
|
|
__u8 bEndpointAddress; \
|
|
__u8 bTerminalLink; \
|
|
__u8 bControlSize; \
|
|
__u8 bmaControls[p][n]; \
|
|
} __attribute__ ((packed))
|
|
|
|
/* 3.9.2.6. Color matching descriptor */
|
|
struct uvc_color_matching_descriptor {
|
|
__u8 bLength;
|
|
__u8 bDescriptorType;
|
|
__u8 bDescriptorSubType;
|
|
__u8 bColorPrimaries;
|
|
__u8 bTransferCharacteristics;
|
|
__u8 bMatrixCoefficients;
|
|
} __attribute__((__packed__));
|
|
|
|
#define UVC_DT_COLOR_MATCHING_SIZE 6
|
|
|
|
/* 4.3.1.1. Video Probe and Commit Controls */
|
|
struct uvc_streaming_control {
|
|
__u16 bmHint;
|
|
__u8 bFormatIndex;
|
|
__u8 bFrameIndex;
|
|
__u32 dwFrameInterval;
|
|
__u16 wKeyFrameRate;
|
|
__u16 wPFrameRate;
|
|
__u16 wCompQuality;
|
|
__u16 wCompWindowSize;
|
|
__u16 wDelay;
|
|
__u32 dwMaxVideoFrameSize;
|
|
__u32 dwMaxPayloadTransferSize;
|
|
__u32 dwClockFrequency;
|
|
__u8 bmFramingInfo;
|
|
__u8 bPreferedVersion;
|
|
__u8 bMinVersion;
|
|
__u8 bMaxVersion;
|
|
} __attribute__((__packed__));
|
|
|
|
/* Uncompressed Payload - 3.1.1. Uncompressed Video Format Descriptor */
|
|
struct uvc_format_uncompressed {
|
|
__u8 bLength;
|
|
__u8 bDescriptorType;
|
|
__u8 bDescriptorSubType;
|
|
__u8 bFormatIndex;
|
|
__u8 bNumFrameDescriptors;
|
|
__u8 guidFormat[16];
|
|
__u8 bBitsPerPixel;
|
|
__u8 bDefaultFrameIndex;
|
|
__u8 bAspectRatioX;
|
|
__u8 bAspectRatioY;
|
|
__u8 bmInterlaceFlags;
|
|
__u8 bCopyProtect;
|
|
} __attribute__((__packed__));
|
|
|
|
#define UVC_DT_FORMAT_UNCOMPRESSED_SIZE 27
|
|
|
|
/* Uncompressed Payload - 3.1.2. Uncompressed Video Frame Descriptor */
|
|
struct uvc_frame_uncompressed {
|
|
__u8 bLength;
|
|
__u8 bDescriptorType;
|
|
__u8 bDescriptorSubType;
|
|
__u8 bFrameIndex;
|
|
__u8 bmCapabilities;
|
|
__le16 wWidth;
|
|
__le16 wHeight;
|
|
__le32 dwMinBitRate;
|
|
__le32 dwMaxBitRate;
|
|
__le32 dwMaxVideoFrameBufferSize;
|
|
__le32 dwDefaultFrameInterval;
|
|
__u8 bFrameIntervalType;
|
|
__le32 dwFrameInterval[];
|
|
} __attribute__((__packed__));
|
|
|
|
#define UVC_DT_FRAME_UNCOMPRESSED_SIZE(n) (26+4*(n))
|
|
|
|
#define UVC_FRAME_UNCOMPRESSED(n) \
|
|
uvc_frame_uncompressed_##n
|
|
|
|
#define DECLARE_UVC_FRAME_UNCOMPRESSED(n) \
|
|
struct UVC_FRAME_UNCOMPRESSED(n) { \
|
|
__u8 bLength; \
|
|
__u8 bDescriptorType; \
|
|
__u8 bDescriptorSubType; \
|
|
__u8 bFrameIndex; \
|
|
__u8 bmCapabilities; \
|
|
__le16 wWidth; \
|
|
__le16 wHeight; \
|
|
__le32 dwMinBitRate; \
|
|
__le32 dwMaxBitRate; \
|
|
__le32 dwMaxVideoFrameBufferSize; \
|
|
__le32 dwDefaultFrameInterval; \
|
|
__u8 bFrameIntervalType; \
|
|
__le32 dwFrameInterval[n]; \
|
|
} __attribute__ ((packed))
|
|
|
|
/* MJPEG Payload - 3.1.1. MJPEG Video Format Descriptor */
|
|
struct uvc_format_mjpeg {
|
|
__u8 bLength;
|
|
__u8 bDescriptorType;
|
|
__u8 bDescriptorSubType;
|
|
__u8 bFormatIndex;
|
|
__u8 bNumFrameDescriptors;
|
|
__u8 bmFlags;
|
|
__u8 bDefaultFrameIndex;
|
|
__u8 bAspectRatioX;
|
|
__u8 bAspectRatioY;
|
|
__u8 bmInterlaceFlags;
|
|
__u8 bCopyProtect;
|
|
} __attribute__((__packed__));
|
|
|
|
#define UVC_DT_FORMAT_MJPEG_SIZE 11
|
|
|
|
/* MJPEG Payload - 3.1.2. MJPEG Video Frame Descriptor */
|
|
struct uvc_frame_mjpeg {
|
|
__u8 bLength;
|
|
__u8 bDescriptorType;
|
|
__u8 bDescriptorSubType;
|
|
__u8 bFrameIndex;
|
|
__u8 bmCapabilities;
|
|
__le16 wWidth;
|
|
__le16 wHeight;
|
|
__le32 dwMinBitRate;
|
|
__le32 dwMaxBitRate;
|
|
__le32 dwMaxVideoFrameBufferSize;
|
|
__le32 dwDefaultFrameInterval;
|
|
__u8 bFrameIntervalType;
|
|
__le32 dwFrameInterval[];
|
|
} __attribute__((__packed__));
|
|
|
|
#define UVC_DT_FRAME_MJPEG_SIZE(n) (26+4*(n))
|
|
|
|
#define UVC_FRAME_MJPEG(n) \
|
|
uvc_frame_mjpeg_##n
|
|
|
|
#define DECLARE_UVC_FRAME_MJPEG(n) \
|
|
struct UVC_FRAME_MJPEG(n) { \
|
|
__u8 bLength; \
|
|
__u8 bDescriptorType; \
|
|
__u8 bDescriptorSubType; \
|
|
__u8 bFrameIndex; \
|
|
__u8 bmCapabilities; \
|
|
__le16 wWidth; \
|
|
__le16 wHeight; \
|
|
__le32 dwMinBitRate; \
|
|
__le32 dwMaxBitRate; \
|
|
__le32 dwMaxVideoFrameBufferSize; \
|
|
__le32 dwDefaultFrameInterval; \
|
|
__u8 bFrameIntervalType; \
|
|
__le32 dwFrameInterval[n]; \
|
|
} __attribute__ ((packed))
|
|
|
|
#endif /* __LINUX_USB_VIDEO_H */
|
|
|