From: Louis Chauvet <louis.chauvet@bootlin.com>
To: igt-dev@lists.freedesktop.org
Cc: thomas.petazzoni@bootlin.com, luca.ceresoli@bootlin.com,
kory.maincent@bootlin.com, markyacoub@google.com,
khaled.almahallawy@intel.com,
Louis Chauvet <louis.chauvet@bootlin.com>
Subject: [PATCH i-g-t v9 19/49] lib/unigraf: Add TSI.h
Date: Mon, 16 Mar 2026 17:17:40 +0100 [thread overview]
Message-ID: <20260316-unigraf-integration-v9-19-a01dffc3b0cb@bootlin.com> (raw)
In-Reply-To: <20260316-unigraf-integration-v9-0-a01dffc3b0cb@bootlin.com>
Unigraf does not provide header for the libTSI.so file, only dynamic
library loading helpers for windows.
In order to link against this library and use unigraf devices, add the
function declaration used in the dynamic library loading wrappers.
Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>
Signed-off-by: Louis Chauvet <louis.chauvet@bootlin.com>
---
lib/unigraf/TSI.h | 228 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 228 insertions(+)
diff --git a/lib/unigraf/TSI.h b/lib/unigraf/TSI.h
new file mode 100644
index 000000000000..ee822c19a055
--- /dev/null
+++ b/lib/unigraf/TSI.h
@@ -0,0 +1,228 @@
+/* SPDX-License-Identifier: MIT */
+
+/*
+ * tsi.h - Header for libTSI.so
+ * Documentation here is taken from official documentation and developer observation.
+ */
+
+#ifndef TSI_H
+#define TSI_H
+
+#define TSI_CURRENT_VERSION 12
+#define MAX_EDID_SIZE 4096
+
+#define TSI_SUCCESS 0
+
+typedef unsigned int TSI_VERSION_ID;
+typedef unsigned int TSI_SEARCH_OPTIONS;
+typedef unsigned int TSI_DEVICE_CAPS;
+typedef unsigned int TSI_CONFIG_ID;
+typedef unsigned int TSI_DEVICE_ID;
+typedef unsigned int TSI_INPUT_ID;
+typedef int TSI_RESULT;
+typedef void *TSI_HANDLE;
+typedef int TSI_FLAGS;
+
+/**
+ * TSI_MISC_GetErrorDescription() - Get a human readable error message
+ * @ErrorCode: Error code for which you want the message
+ * @ErrorString: Pointer where to copy the message
+ * @StringMaxLen: Size of the allocated string @ErrorString
+ *
+ * The official documentation states: If the function succeeds, the
+ * return value is the number of characters required for the complete
+ * error description string.
+ * In reality, this function always returns 0 or < 0 (error), so there is no way to
+ * tell if the allocated memory was big enough
+ *
+ * Returns:
+ * - >= 0 on success, theorically the required string len to store the message
+ * - < 0 on failure
+ */
+TSI_RESULT TSI_MISC_GetErrorDescription(TSI_RESULT ErrorCode,
+ char *ErrorString,
+ unsigned int StringMaxLen);
+
+/**
+ * TSI_Init() - Initialize the TSI library
+ * @ClientVersion: Indicates the version used to call the libTSI.so functions.
+ *
+ * Initialize libTSI for use and sets up internal state. It can be called
+ * multiple times, but TSI_Clean must be called the exact same number of time.
+ *
+ * Returns:
+ * - In case of success: Reference count to the API (number of times to call TSI_Clean)
+ * - TSI_ERROR_NOT_COMPATIBLE if the requested client version is not supported
+ * by the library
+ * - TSI_ERROR_COMPATIBILITY_MISMATCH if TSI_Init is called twice with
+ * different client version
+ */
+TSI_RESULT TSI_Init(TSI_VERSION_ID ClientVersion);
+
+/**
+ * TSI_Clean() - Cleans and closes the TSI library
+ *
+ * When TSI_Clean is called for the last time, cleanup the internal state. It
+ * should be called exactly the same number of times as TSI_Init
+ */
+TSI_RESULT TSI_Clean(void);
+
+/**
+ * TSIX_DEV_RescanDevices() - Refresh the internal list of devices for libTSI
+ * @SearchOptions: Options to filter the list of devices (e.g.,
+ * TSI_SEARCHOPTIONS_SHOW_DEVICES_IN_USE to include
+ * devices already in use).
+ * @RequiredCaps: Filter to list only devices with specific capabilities.
+ * @UnallowedCaps: Filter to list only devices without specific capabilities.
+ *
+ * Returns: >=0 in case of success, <0 on error. The value is not the number of devices,
+ * you need to use TSIX_DEV_GetDeviceCount to get the discovered devices count.
+ *
+ * This function should be called every time you need to update the list of connected devices,
+ * and it must be called at least once before calling TSI_DEV_GetDeviceCount.
+ */
+TSI_RESULT TSIX_DEV_RescanDevices(TSI_SEARCH_OPTIONS SearchOptions,
+ TSI_DEVICE_CAPS RequiredCaps,
+ TSI_DEVICE_CAPS UnallowedCaps);
+
+/**
+ * TSIX_DEV_GetDeviceCount() - Get the count of scanned devices
+ * Returns: the number of devices that the previous call to TSIX_DEV_RescanDevices() detected
+ *
+ * Must be called after a TSIX_DEV_RescanDevices.
+ */
+TSI_RESULT TSIX_DEV_GetDeviceCount(void);
+
+/**
+ * TSIX_DEV_GetDeviceName() - Get the name of a device from the scanned list
+ * @DeviceID: Index in the TSI_DEV_RescanDevices list
+ * @DevNameString: Pointer to store the device name
+ * @NameStringMaxLength: Size of the allocated memory for @DevNameString
+ *
+ * Returns: >=0 in case of success, the length of the device name string
+ * Note: If the return value is larger than NameStringMaxLength, the string may be truncated
+ */
+TSI_RESULT TSIX_DEV_GetDeviceName(TSI_DEVICE_ID DeviceID, char *DevNameString,
+ unsigned int NameStringMaxLength);
+
+/**
+ * TSIX_DEV_OpenDevice() - Open a device from the scanned list
+ * @DeviceID: index in the TSI_DEV_RescanDevices list
+ * @Result: Pointer to store the error code returned while opening the device
+ * Returns: if the device is found, an opaque pointer that can be used for other
+ * API calls, or NULL on error.
+ */
+TSI_HANDLE TSIX_DEV_OpenDevice(TSI_DEVICE_ID DeviceID, TSI_RESULT *Result);
+
+/**
+ * TSIX_DEV_CloseDevice() - Close the device handle when finished
+ * @Device: Device handle to close
+ * Returns: >=0 in case of success
+ */
+TSI_RESULT TSIX_DEV_CloseDevice(TSI_HANDLE Device);
+
+/**
+ * TSIX_DEV_GetDeviceRoleCount() - Get the number of roles available for a device
+ * @Device: Device handle to query
+ *
+ * Returns: >=0 in case of success, the number of roles available for the device
+ */
+TSI_RESULT TSIX_DEV_GetDeviceRoleCount(TSI_HANDLE Device);
+
+/**
+ * TSIX_DEV_GetDeviceRoleName() - Get the name of a specific role for a device
+ * @Device: Device handle to query
+ * @RoleIndex: Index of the role to get the name for
+ * @RoleNameString: Pointer to store the role name
+ * @RoleStringMaxLength: Size of the allocated memory for @RoleNameString
+ *
+ * Returns: >=0 in case of success, the length of the role name string
+ * Note: If the return value is larger than RoleStringMaxLength, the string may be truncated
+ */
+TSI_RESULT TSIX_DEV_GetDeviceRoleName(TSI_HANDLE Device, int RoleIndex,
+ char *RoleNameString, unsigned int RoleStringMaxLength);
+
+/**
+ * TSIX_DEV_SelectRole() - Select a specific role for the specified device
+ * @Device: Device handle on which to assign the role
+ * @RoleIndex: Index of the role to assign
+ * Returns: >=0 in case of success
+ */
+TSI_RESULT TSIX_DEV_SelectRole(TSI_HANDLE Device, int RoleIndex);
+
+/**
+ * TSIX_VIN_GetInputCount() - Get the number of video inputs available on a device
+ * @Device: Device handle to query
+ *
+ * Returns: >=0 in case of success, the number of video inputs available on the device
+ */
+TSI_RESULT TSIX_VIN_GetInputCount(TSI_HANDLE Device);
+
+/**
+ * TSIX_VIN_GetInputName() - Get the name of a specific video input on a device
+ * @Device: Device handle to query
+ * @InputID: Identifier of the input to get the name for
+ * @InputNameString: Pointer to store the input name
+ * @NameStringMaxLen: Size of the allocated memory for @InputNameString
+ *
+ * Returns: >=0 in case of success, the length of the input name string
+ * Note: If the return value is larger than NameStringMaxLen, the string may be truncated
+ */
+TSI_RESULT TSIX_VIN_GetInputName(TSI_HANDLE Device, TSI_INPUT_ID InputID,
+ char *InputNameString, unsigned int NameStringMaxLen);
+
+/**
+ * TSIX_VIN_Disable() - Disable video input on the specified device
+ * @Device: Device handle to disable video input on
+ * Returns: >=0 in case of success
+ */
+TSI_RESULT TSIX_VIN_Disable(TSI_HANDLE Device);
+
+/**
+ * TSIX_VIN_Select() - Select a specific video input on the specified device
+ * @Device: Device handle on which to select the input
+ * @InputID: Identifier of the input to select
+ * Returns: >=0 in case of success
+ */
+
+TSI_RESULT TSIX_VIN_Select(TSI_HANDLE Device, TSI_INPUT_ID InputID);
+/**
+ * TSIX_VIN_Enable() - Enable video input on the specified device
+ * @Device: Device handle to enable video input on
+ * @Flags: Flags to specify the options for enabling the video input
+ * Returns: >=0 in case of success
+ */
+TSI_RESULT TSIX_VIN_Enable(TSI_HANDLE Device, TSI_FLAGS Flags);
+
+/**
+ * TSIX_TS_GetConfigItem() - Read a configuration item from the UCD device
+ * @Device: Device handle to read config from. Can be NULL for certain configuration items,
+ * for example TSI_VERSION_TEXT.
+ * @ConfigItemID: Identifier of the requested configuration item.
+ * @ConfigItemData: Pointer to store the read value.
+ * @ItemMaxSize: Size of the allocated memory for @ConfigItemData.
+ *
+ * Returns: The size of the raw data. If the return value is larger than ItemMaxSize, no data
+ * is copied to ConfigItemData.
+ * Note:
+ * - Some configurations require specific size and alignment for the allocated buffer. Refer to
+ * the specific item configuration documentation for details.
+ * - Data may still be written to @ConfigItemData even if the return value is larger than
+ * @ItemMaxSize, potentially causing buffer overflow.
+ */
+TSI_RESULT TSIX_TS_GetConfigItem(TSI_HANDLE Device, TSI_CONFIG_ID ConfigItemID,
+ void *ConfigItemData,
+ unsigned int ItemMaxSize);
+
+/**
+ * TSIX_TS_SetConfigItem() - Set a configuration item on the specified device
+ * @Device: Device handle to set the configuration on
+ * @ConfigItemID: Identifier of the configuration item to set
+ * @ItemData: Pointer to the data to set
+ * @ItemSize: Size of the data to set
+ * Returns: >=0 in case of success
+ */
+TSI_RESULT TSIX_TS_SetConfigItem(TSI_HANDLE Device, TSI_CONFIG_ID ConfigItemID,
+ const void *ItemData, unsigned int ItemSize);
+
+#endif
--
2.52.0
next prev parent reply other threads:[~2026-03-16 16:25 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-16 16:17 [PATCH i-g-t v9 00/49] Unigraf integration Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 01/49] lib/igt_kms: Add a detect timeout value Louis Chauvet
2026-03-16 18:50 ` Kamil Konieczny
2026-03-16 16:17 ` [PATCH i-g-t v9 02/49] lib/igt_kms: Add helper to wait for a specific status on a connector Louis Chauvet
2026-03-24 10:22 ` Kamil Konieczny
2026-03-16 16:17 ` [PATCH i-g-t v9 03/49] lib/igt_kms: Add function to list connected connectors Louis Chauvet
2026-03-24 10:34 ` Kamil Konieczny
2026-03-24 13:56 ` Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 04/49] lib/igt_kms: Add helper to obtain a connector by its name or MST path Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 05/49] lib/igt_kms: Add helper to wait for new connectors Louis Chauvet
2026-03-17 14:56 ` Kory Maincent
2026-03-23 14:40 ` Louis Chauvet
2026-03-24 10:11 ` Kamil Konieczny
2026-03-16 16:17 ` [PATCH i-g-t v9 06/49] lib/tests: Add tests for array manipulations Louis Chauvet
2026-03-17 15:00 ` Kory Maincent
2026-03-16 16:17 ` [PATCH i-g-t v9 07/49] lib/igt_kms: Add helper to get a pipe from a connector Louis Chauvet
2026-03-24 7:58 ` Jani Nikula
2026-03-24 10:02 ` Kamil Konieczny
2026-03-16 16:17 ` [PATCH i-g-t v9 08/49] lib/igt_kms: Expose dump_connector_attrs Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 09/49] lib/igt_kms: Expose reset_connectors_at_exit Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 10/49] lib/igt_kms: Expose connector_attr_set and igt_connector_attr_set Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 11/49] lib/igt_debugfs: Move debugfs helpers to the proper location Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 12/49] lib/igt_debugfs: Add const when make sense Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 13/49] lib/igt_amd: " Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 14/49] lib/igt_kms: " Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 15/49] lib/monitor_edids: Add helper functions for using monitor_edid objects Louis Chauvet
2026-03-17 15:09 ` Kory Maincent
2026-03-24 10:15 ` Kamil Konieczny
2026-03-24 14:09 ` Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 16/49] lib/monitor_edids: Add helper to get an EDID by its name Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 17/49] lib/monitor_edids: Add helper to print all available EDID names Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 18/49] lib/unigraf: Add used defines for TSI_Types Louis Chauvet
2026-03-16 16:17 ` Louis Chauvet [this message]
2026-03-16 16:17 ` [PATCH i-g-t v9 20/49] lib/unigraf: Initial Unigraf support Louis Chauvet
2026-03-24 8:19 ` Naladala, Ramanaidu
2026-03-24 9:37 ` Louis Chauvet
2026-03-26 9:59 ` Louis Chauvet
2026-03-24 9:58 ` Kamil Konieczny
2026-03-16 16:17 ` [PATCH i-g-t v9 21/49] lib/igt_kms: Automatically connect unigraf on display require Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 22/49] lib/unigraf: Introduce device configuration Louis Chauvet
2026-03-17 15:16 ` Kory Maincent
2026-03-16 16:17 ` [PATCH i-g-t v9 23/49] lib/unigraf: Introduce role configuration Louis Chauvet
2026-03-17 15:19 ` Kory Maincent
2026-03-16 16:17 ` [PATCH i-g-t v9 24/49] lib/unigraf: Introduce input configuration Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 25/49] lib/unigraf: Add reset function Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 26/49] lib/unigraf: Add unigraf assert and deassert helpers Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 27/49] lib/unigraf: Add plug/unplug helpers Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 28/49] lib/unigraf: Allows sst/mst configuration Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 29/49] lib/unigraf: Add helpers to read and write edid Louis Chauvet
2026-03-17 15:32 ` Kory Maincent
2026-03-23 14:46 ` Louis Chauvet
2026-03-23 16:26 ` Kamil Konieczny
2026-03-23 17:34 ` Louis Chauvet
2026-03-24 9:35 ` Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 30/49] lib/unigraf: Add connector and EDID configuration Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 31/49] tests/unigraf: Add basic unigraf tests Louis Chauvet
2026-03-17 15:46 ` Kory Maincent
2026-03-23 14:49 ` Louis Chauvet
2026-03-24 19:25 ` Naladala, Ramanaidu
2026-03-16 16:17 ` [PATCH i-g-t v9 32/49] lib/unigraf: Add unigraf CRC capture Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 33/49] lib/unigraf: Add configuration for CRC usage Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 34/49] lib/unigraf: add unigraf_get_connector_by_stream Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 35/49] lib/unigraf: Add helper to check timings received by unigraf Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 36/49] lib/igt_pipe_crc: Add unigraf crc calculation Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 37/49] lib/i915/dp: Move DP-related function for i915 to proper folder Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 38/49] lib/i915/dp: Rename functions to avoid confusion Louis Chauvet
2026-03-16 16:18 ` [PATCH i-g-t v9 39/49] lib/i915/dp: Add helper to get maximum supported rate Louis Chauvet
2026-03-16 16:18 ` [PATCH i-g-t v9 40/49] lib/i915/dp: Properly check sscanf results Louis Chauvet
2026-03-16 16:18 ` [PATCH i-g-t v9 41/49] lib/i915/dp: Use igt_output_name instead of private field Louis Chauvet
2026-03-16 16:18 ` [PATCH i-g-t v9 42/49] lib/igt_dp: Create generic helpers for DP information Louis Chauvet
2026-03-17 15:55 ` Kory Maincent
2026-03-23 14:52 ` Louis Chauvet
2026-03-16 16:18 ` [PATCH i-g-t v9 43/49] lib/igt_kms: Add asserts to avoid null pointer dereference Louis Chauvet
2026-03-16 16:18 ` [PATCH i-g-t v9 44/49] lib/igt_kms: Add helper to get a CRTC from an output Louis Chauvet
2026-03-17 15:56 ` Kory Maincent
2026-03-16 16:18 ` [PATCH i-g-t v9 45/49] lib/unigraf: Add lane count configuration Louis Chauvet
2026-03-16 16:18 ` [PATCH i-g-t v9 46/49] docs/unigraf: Add unigraf documentation Louis Chauvet
2026-03-17 15:58 ` Kory Maincent
2026-03-24 8:07 ` Naladala, Ramanaidu
2026-03-16 16:18 ` [PATCH i-g-t v9 47/49] lib/unigraf: Add helpers to set maximum link rate Louis Chauvet
2026-03-16 16:18 ` [PATCH i-g-t v9 48/49] lib/unigraf: Add helpers to get the current LT status Louis Chauvet
2026-03-16 16:18 ` [PATCH i-g-t v9 49/49] tests/unigraf/unigraf_lt: Add test for link training Louis Chauvet
2026-03-17 12:02 ` ✗ Fi.CI.BUILD: failure for Unigraf integration (rev8) Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260316-unigraf-integration-v9-19-a01dffc3b0cb@bootlin.com \
--to=louis.chauvet@bootlin.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=khaled.almahallawy@intel.com \
--cc=kory.maincent@bootlin.com \
--cc=luca.ceresoli@bootlin.com \
--cc=markyacoub@google.com \
--cc=thomas.petazzoni@bootlin.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox