1e9dcd831SSlava Shwartsman /*- 2e9dcd831SSlava Shwartsman * Copyright (c) 2017 Mellanox Technologies. All rights reserved. 3e9dcd831SSlava Shwartsman * 4e9dcd831SSlava Shwartsman * This software is available to you under a choice of one of two 5e9dcd831SSlava Shwartsman * licenses. You may choose to be licensed under the terms of the GNU 6e9dcd831SSlava Shwartsman * General Public License (GPL) Version 2, available from the file 7e9dcd831SSlava Shwartsman * COPYING in the main directory of this source tree, or the 8e9dcd831SSlava Shwartsman * OpenIB.org BSD license below: 9e9dcd831SSlava Shwartsman * 10e9dcd831SSlava Shwartsman * Redistribution and use in source and binary forms, with or 11e9dcd831SSlava Shwartsman * without modification, are permitted provided that the following 12e9dcd831SSlava Shwartsman * conditions are met: 13e9dcd831SSlava Shwartsman * 14e9dcd831SSlava Shwartsman * - Redistributions of source code must retain the above 15e9dcd831SSlava Shwartsman * copyright notice, this list of conditions and the following 16e9dcd831SSlava Shwartsman * disclaimer. 17e9dcd831SSlava Shwartsman * 18e9dcd831SSlava Shwartsman * - Redistributions in binary form must reproduce the above 19e9dcd831SSlava Shwartsman * copyright notice, this list of conditions and the following 20e9dcd831SSlava Shwartsman * disclaimer in the documentation and/or other materials 21e9dcd831SSlava Shwartsman * provided with the distribution. 22e9dcd831SSlava Shwartsman * 23e9dcd831SSlava Shwartsman * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24e9dcd831SSlava Shwartsman * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25e9dcd831SSlava Shwartsman * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26e9dcd831SSlava Shwartsman * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27e9dcd831SSlava Shwartsman * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28e9dcd831SSlava Shwartsman * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29e9dcd831SSlava Shwartsman * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30e9dcd831SSlava Shwartsman * SOFTWARE. 31e9dcd831SSlava Shwartsman * 32e9dcd831SSlava Shwartsman * $FreeBSD$ 33e9dcd831SSlava Shwartsman */ 34e9dcd831SSlava Shwartsman 35e9dcd831SSlava Shwartsman #ifndef MLX5_FPGA_SDK_H 36e9dcd831SSlava Shwartsman #define MLX5_FPGA_SDK_H 37e9dcd831SSlava Shwartsman 38e9dcd831SSlava Shwartsman #include <dev/mlx5/driver.h> 39e9dcd831SSlava Shwartsman #include <linux/types.h> 40e9dcd831SSlava Shwartsman #include <linux/list.h> 41e9dcd831SSlava Shwartsman /* #include <linux/dma-direction.h> */ 42e9dcd831SSlava Shwartsman 43e9dcd831SSlava Shwartsman #include <dev/mlx5/mlx5_fpga/cmd.h> 44e9dcd831SSlava Shwartsman #include <dev/mlx5/mlx5io.h> 45e9dcd831SSlava Shwartsman 46e9dcd831SSlava Shwartsman /** 47e9dcd831SSlava Shwartsman * DOC: Innova SDK 48e9dcd831SSlava Shwartsman * This header defines the in-kernel API for Innova FPGA client drivers. 49e9dcd831SSlava Shwartsman */ 50e9dcd831SSlava Shwartsman 51e9dcd831SSlava Shwartsman #define MLX5_FPGA_CLIENT_NAME_MAX 64 52e9dcd831SSlava Shwartsman 53e9dcd831SSlava Shwartsman struct mlx5_fpga_conn; 54e9dcd831SSlava Shwartsman struct mlx5_fpga_device; 55e9dcd831SSlava Shwartsman 56e9dcd831SSlava Shwartsman /** 57e9dcd831SSlava Shwartsman * struct mlx5_fpga_client - Describes an Innova client driver 58e9dcd831SSlava Shwartsman */ 59e9dcd831SSlava Shwartsman struct mlx5_fpga_client { 60e9dcd831SSlava Shwartsman /** 61e9dcd831SSlava Shwartsman * @create: Informs the client that an Innova device was created. 62e9dcd831SSlava Shwartsman * The device is not yet operational at this stage 63e9dcd831SSlava Shwartsman * This callback is optional 64e9dcd831SSlava Shwartsman * @fdev: The FPGA device 65e9dcd831SSlava Shwartsman */ 66e9dcd831SSlava Shwartsman void (*create)(struct mlx5_fpga_device *fdev); 67e9dcd831SSlava Shwartsman /** 68e9dcd831SSlava Shwartsman * @add: Informs the client that a core device is ready and operational. 69e9dcd831SSlava Shwartsman * @fdev: The FPGA device 70e9dcd831SSlava Shwartsman * @param vid SBU Vendor ID 71e9dcd831SSlava Shwartsman * @param pid SBU Product ID 72e9dcd831SSlava Shwartsman * Any SBU-specific initialization should happen at this stage 73e9dcd831SSlava Shwartsman * Return: 0 on success, nonzero error value otherwise 74e9dcd831SSlava Shwartsman */ 75e9dcd831SSlava Shwartsman int (*add)(struct mlx5_fpga_device *fdev, u32 vid, u16 pid); 76e9dcd831SSlava Shwartsman /** 77e9dcd831SSlava Shwartsman * @remove: Informs the client that a core device is not operational 78e9dcd831SSlava Shwartsman * anymore. 79e9dcd831SSlava Shwartsman * @fdev: The FPGA device 80e9dcd831SSlava Shwartsman * SBU-specific cleanup should happen at this stage 81e9dcd831SSlava Shwartsman * This callback is called once for every successful call to add() 82e9dcd831SSlava Shwartsman */ 83e9dcd831SSlava Shwartsman void (*remove)(struct mlx5_fpga_device *fdev); 84e9dcd831SSlava Shwartsman /** 85e9dcd831SSlava Shwartsman * @destroy: Informs the client that a core device is being destroyed. 86e9dcd831SSlava Shwartsman * @fdev: The FPGA device 87e9dcd831SSlava Shwartsman * The device is not operational at this stage 88e9dcd831SSlava Shwartsman */ 89e9dcd831SSlava Shwartsman void (*destroy)(struct mlx5_fpga_device *fdev); 90e9dcd831SSlava Shwartsman /** The name of this client driver */ 91e9dcd831SSlava Shwartsman char name[MLX5_FPGA_CLIENT_NAME_MAX]; 92e9dcd831SSlava Shwartsman /** For use by core. A link in the list of client drivers */ 93e9dcd831SSlava Shwartsman struct list_head list; 94e9dcd831SSlava Shwartsman }; 95e9dcd831SSlava Shwartsman 96e9dcd831SSlava Shwartsman /** 97e9dcd831SSlava Shwartsman * struct mlx5_fpga_dma_entry - A scatter-gather DMA entry 98e9dcd831SSlava Shwartsman */ 99e9dcd831SSlava Shwartsman struct mlx5_fpga_dma_entry { 100e9dcd831SSlava Shwartsman /** @data: Virtual address pointer to the data */ 101e9dcd831SSlava Shwartsman void *data; 102e9dcd831SSlava Shwartsman /** @size: Size in bytes of the data */ 103e9dcd831SSlava Shwartsman unsigned int size; 104e9dcd831SSlava Shwartsman /** @dma_addr: Private member. Physical DMA-mapped address of the data */ 105e9dcd831SSlava Shwartsman dma_addr_t dma_addr; 106e9dcd831SSlava Shwartsman }; 107e9dcd831SSlava Shwartsman 108e9dcd831SSlava Shwartsman /** 109e9dcd831SSlava Shwartsman * struct mlx5_fpga_dma_buf - A packet buffer 110e9dcd831SSlava Shwartsman * May contain up to 2 scatter-gather data entries 111e9dcd831SSlava Shwartsman */ 112e9dcd831SSlava Shwartsman struct mlx5_fpga_dma_buf { 113e9dcd831SSlava Shwartsman /** @dma_dir: DMA direction */ 114e9dcd831SSlava Shwartsman enum dma_data_direction dma_dir; 115e9dcd831SSlava Shwartsman /** @sg: Scatter-gather entries pointing to the data in memory */ 116e9dcd831SSlava Shwartsman struct mlx5_fpga_dma_entry sg[2]; 117e9dcd831SSlava Shwartsman /** @list: Item in SQ backlog, for TX packets */ 118e9dcd831SSlava Shwartsman struct list_head list; 119e9dcd831SSlava Shwartsman /** 120e9dcd831SSlava Shwartsman * @complete: Completion routine, for TX packets 121e9dcd831SSlava Shwartsman * @conn: FPGA Connection this packet was sent to 122e9dcd831SSlava Shwartsman * @fdev: FPGA device this packet was sent to 123e9dcd831SSlava Shwartsman * @buf: The packet buffer 124e9dcd831SSlava Shwartsman * @status: 0 if successful, or an error code otherwise 125e9dcd831SSlava Shwartsman */ 126e9dcd831SSlava Shwartsman void (*complete)(struct mlx5_fpga_conn *conn, 127e9dcd831SSlava Shwartsman struct mlx5_fpga_device *fdev, 128e9dcd831SSlava Shwartsman struct mlx5_fpga_dma_buf *buf, u8 status); 129e9dcd831SSlava Shwartsman }; 130e9dcd831SSlava Shwartsman 131e9dcd831SSlava Shwartsman /** 132e9dcd831SSlava Shwartsman * struct mlx5_fpga_conn_attr - FPGA connection attributes 133e9dcd831SSlava Shwartsman * Describes the attributes of a connection 134e9dcd831SSlava Shwartsman */ 135e9dcd831SSlava Shwartsman struct mlx5_fpga_conn_attr { 136e9dcd831SSlava Shwartsman /** @tx_size: Size of connection TX queue, in packets */ 137e9dcd831SSlava Shwartsman unsigned int tx_size; 138e9dcd831SSlava Shwartsman /** @rx_size: Size of connection RX queue, in packets */ 139e9dcd831SSlava Shwartsman unsigned int rx_size; 140e9dcd831SSlava Shwartsman /** 141e9dcd831SSlava Shwartsman * @recv_cb: Callback function which is called for received packets 142e9dcd831SSlava Shwartsman * @cb_arg: The value provided in mlx5_fpga_conn_attr.cb_arg 143e9dcd831SSlava Shwartsman * @buf: A buffer containing a received packet 144e9dcd831SSlava Shwartsman * 145e9dcd831SSlava Shwartsman * buf is guaranteed to only contain a single scatter-gather entry. 146e9dcd831SSlava Shwartsman * The size of the actual packet received is specified in buf.sg[0].size 147e9dcd831SSlava Shwartsman * When this callback returns, the packet buffer may be re-used for 148e9dcd831SSlava Shwartsman * subsequent receives. 149e9dcd831SSlava Shwartsman */ 150e9dcd831SSlava Shwartsman void (*recv_cb)(void *cb_arg, struct mlx5_fpga_dma_buf *buf); 151e9dcd831SSlava Shwartsman void *cb_arg; 152e9dcd831SSlava Shwartsman }; 153e9dcd831SSlava Shwartsman 154e9dcd831SSlava Shwartsman /** 155e9dcd831SSlava Shwartsman * mlx5_fpga_client_register() - Register a client driver 156e9dcd831SSlava Shwartsman * @client: The properties of the client driver 157e9dcd831SSlava Shwartsman * 158e9dcd831SSlava Shwartsman * Should be called from a client driver's module init routine. 159e9dcd831SSlava Shwartsman * Note: The core will immediately callback create() and add() for any existing 160e9dcd831SSlava Shwartsman * devices in the system, as well as new ones added later on. 161e9dcd831SSlava Shwartsman */ 162e9dcd831SSlava Shwartsman void mlx5_fpga_client_register(struct mlx5_fpga_client *client); 163e9dcd831SSlava Shwartsman /** 164e9dcd831SSlava Shwartsman * mlx5_fpga_client_unregister() - Unregister a client driver 165e9dcd831SSlava Shwartsman * @client: The client driver to unregister 166e9dcd831SSlava Shwartsman * 167e9dcd831SSlava Shwartsman * Should be called from a client driver's module exit routine. 168e9dcd831SSlava Shwartsman * Note: The core will immediately callback delete() and destroy() for any 169e9dcd831SSlava Shwartsman * created/added devices in the system, to clean up their state. 170e9dcd831SSlava Shwartsman */ 171e9dcd831SSlava Shwartsman void mlx5_fpga_client_unregister(struct mlx5_fpga_client *client); 172e9dcd831SSlava Shwartsman 173e9dcd831SSlava Shwartsman /** 174e9dcd831SSlava Shwartsman * mlx5_fpga_device_reload() - Force the FPGA to reload its synthesis from flash 175e9dcd831SSlava Shwartsman * @fdev: The FPGA device 176e9dcd831SSlava Shwartsman * @image: Which flash image to load 177e9dcd831SSlava Shwartsman * 178e9dcd831SSlava Shwartsman * This routine attempts graceful teardown of all device resources before 179e9dcd831SSlava Shwartsman * loading. This includes a callback to client driver delete(). 180e9dcd831SSlava Shwartsman * Calls client driver add() once device is operational again. 181e9dcd831SSlava Shwartsman * Blocks until the new synthesis is loaded, and the device is fully 182e9dcd831SSlava Shwartsman * initialized. 183e9dcd831SSlava Shwartsman * 184e9dcd831SSlava Shwartsman * Return: 0 if successful, or a negative error value otherwise 185e9dcd831SSlava Shwartsman */ 186e9dcd831SSlava Shwartsman int mlx5_fpga_device_reload(struct mlx5_fpga_device *fdev, 187e9dcd831SSlava Shwartsman enum mlx5_fpga_image image); 188e9dcd831SSlava Shwartsman 189e9dcd831SSlava Shwartsman /** 190e9dcd831SSlava Shwartsman * mlx5_fpga_flash_select() - Select the current active flash 191e9dcd831SSlava Shwartsman * @fdev: The FPGA device 192e9dcd831SSlava Shwartsman * @image: Which flash image will be active 193e9dcd831SSlava Shwartsman * 194e9dcd831SSlava Shwartsman * This routine selects the active flash by programming the relevant MUX. 195e9dcd831SSlava Shwartsman * Useful prior to burning a new image on flash. 196e9dcd831SSlava Shwartsman * This setting is volatile and is reset upon reboot or power-cycle 197e9dcd831SSlava Shwartsman * 198e9dcd831SSlava Shwartsman * Return: 0 if successful, or a negative error value otherwise 199e9dcd831SSlava Shwartsman */ 200e9dcd831SSlava Shwartsman int mlx5_fpga_flash_select(struct mlx5_fpga_device *fdev, 201e9dcd831SSlava Shwartsman enum mlx5_fpga_image image); 202e9dcd831SSlava Shwartsman 203e9dcd831SSlava Shwartsman /** 204e9dcd831SSlava Shwartsman * mlx5_fpga_sbu_conn_create() - Initialize a new FPGA SBU connection 205e9dcd831SSlava Shwartsman * @fdev: The FPGA device 206e9dcd831SSlava Shwartsman * @attr: Attributes of the new connection 207e9dcd831SSlava Shwartsman * 208e9dcd831SSlava Shwartsman * Sets up a new FPGA SBU connection with the specified attributes. 209e9dcd831SSlava Shwartsman * The receive callback function may be called for incoming messages even 210e9dcd831SSlava Shwartsman * before this function returns. 211e9dcd831SSlava Shwartsman * 212e9dcd831SSlava Shwartsman * The caller must eventually destroy the connection by calling 213e9dcd831SSlava Shwartsman * mlx5_fpga_sbu_conn_destroy. 214e9dcd831SSlava Shwartsman * 215e9dcd831SSlava Shwartsman * Return: A new connection, or ERR_PTR() error value otherwise. 216e9dcd831SSlava Shwartsman */ 217e9dcd831SSlava Shwartsman struct mlx5_fpga_conn * 218e9dcd831SSlava Shwartsman mlx5_fpga_sbu_conn_create(struct mlx5_fpga_device *fdev, 219e9dcd831SSlava Shwartsman struct mlx5_fpga_conn_attr *attr); 220e9dcd831SSlava Shwartsman 221e9dcd831SSlava Shwartsman /** 222e9dcd831SSlava Shwartsman * mlx5_fpga_sbu_conn_destroy() - Destroy an FPGA SBU connection 223e9dcd831SSlava Shwartsman * @conn: The FPGA SBU connection to destroy 224e9dcd831SSlava Shwartsman * 225e9dcd831SSlava Shwartsman * Cleans up an FPGA SBU connection which was previously created with 226e9dcd831SSlava Shwartsman * mlx5_fpga_sbu_conn_create. 227e9dcd831SSlava Shwartsman */ 228e9dcd831SSlava Shwartsman void mlx5_fpga_sbu_conn_destroy(struct mlx5_fpga_conn *conn); 229e9dcd831SSlava Shwartsman 230e9dcd831SSlava Shwartsman /** 231e9dcd831SSlava Shwartsman * mlx5_fpga_sbu_conn_sendmsg() - Queue the transmission of a packet 232e9dcd831SSlava Shwartsman * @fdev: An FPGA SBU connection 233e9dcd831SSlava Shwartsman * @buf: The packet buffer 234e9dcd831SSlava Shwartsman * 235e9dcd831SSlava Shwartsman * Queues a packet for transmission over an FPGA SBU connection. 236e9dcd831SSlava Shwartsman * The buffer should not be modified or freed until completion. 237e9dcd831SSlava Shwartsman * Upon completion, the buf's complete() callback is invoked, indicating the 238e9dcd831SSlava Shwartsman * success or error status of the transmission. 239e9dcd831SSlava Shwartsman * 240e9dcd831SSlava Shwartsman * Return: 0 if successful, or an error value otherwise. 241e9dcd831SSlava Shwartsman */ 242e9dcd831SSlava Shwartsman int mlx5_fpga_sbu_conn_sendmsg(struct mlx5_fpga_conn *conn, 243e9dcd831SSlava Shwartsman struct mlx5_fpga_dma_buf *buf); 244e9dcd831SSlava Shwartsman 245e9dcd831SSlava Shwartsman /** 246e9dcd831SSlava Shwartsman * mlx5_fpga_mem_read() - Read from FPGA memory address space 247e9dcd831SSlava Shwartsman * @fdev: The FPGA device 248e9dcd831SSlava Shwartsman * @size: Size of chunk to read, in bytes 249e9dcd831SSlava Shwartsman * @addr: Starting address to read from, in FPGA address space 250e9dcd831SSlava Shwartsman * @buf: Buffer to read into 251e9dcd831SSlava Shwartsman * @access_type: Method for reading 252e9dcd831SSlava Shwartsman * 253e9dcd831SSlava Shwartsman * Reads from the specified address into the specified buffer. 254e9dcd831SSlava Shwartsman * The address may point to configuration space or to DDR. 255e9dcd831SSlava Shwartsman * Large reads may be performed internally as several non-atomic operations. 256e9dcd831SSlava Shwartsman * This function may sleep, so should not be called from atomic contexts. 257e9dcd831SSlava Shwartsman * 258e9dcd831SSlava Shwartsman * Return: 0 if successful, or an error value otherwise. 259e9dcd831SSlava Shwartsman */ 260e9dcd831SSlava Shwartsman int mlx5_fpga_mem_read(struct mlx5_fpga_device *fdev, size_t size, u64 addr, 261e9dcd831SSlava Shwartsman void *buf, enum mlx5_fpga_access_type access_type); 262e9dcd831SSlava Shwartsman 263e9dcd831SSlava Shwartsman /** 264e9dcd831SSlava Shwartsman * mlx5_fpga_mem_write() - Write to FPGA memory address space 265e9dcd831SSlava Shwartsman * @fdev: The FPGA device 266e9dcd831SSlava Shwartsman * @size: Size of chunk to write, in bytes 267e9dcd831SSlava Shwartsman * @addr: Starting address to write to, in FPGA address space 268e9dcd831SSlava Shwartsman * @buf: Buffer which contains data to write 269e9dcd831SSlava Shwartsman * @access_type: Method for writing 270e9dcd831SSlava Shwartsman * 271e9dcd831SSlava Shwartsman * Writes the specified buffer data to FPGA memory at the specified address. 272e9dcd831SSlava Shwartsman * The address may point to configuration space or to DDR. 273e9dcd831SSlava Shwartsman * Large writes may be performed internally as several non-atomic operations. 274e9dcd831SSlava Shwartsman * This function may sleep, so should not be called from atomic contexts. 275e9dcd831SSlava Shwartsman * 276e9dcd831SSlava Shwartsman * Return: 0 if successful, or an error value otherwise. 277e9dcd831SSlava Shwartsman */ 278e9dcd831SSlava Shwartsman int mlx5_fpga_mem_write(struct mlx5_fpga_device *fdev, size_t size, u64 addr, 279e9dcd831SSlava Shwartsman void *buf, enum mlx5_fpga_access_type access_type); 280e9dcd831SSlava Shwartsman 281e9dcd831SSlava Shwartsman /** 282e9dcd831SSlava Shwartsman * mlx5_fpga_get_sbu_caps() - Read the SBU capabilities 283e9dcd831SSlava Shwartsman * @fdev: The FPGA device 284e9dcd831SSlava Shwartsman * @size: Size of the buffer to read into 285e9dcd831SSlava Shwartsman * @buf: Buffer to read the capabilities into 286e9dcd831SSlava Shwartsman * 287e9dcd831SSlava Shwartsman * Reads the FPGA SBU capabilities into the specified buffer. 288e9dcd831SSlava Shwartsman * The format of the capabilities buffer is SBU-dependent. 289e9dcd831SSlava Shwartsman * 290e9dcd831SSlava Shwartsman * Return: 0 if successful 291e9dcd831SSlava Shwartsman * -EINVAL if the buffer is not large enough to contain SBU caps 292e9dcd831SSlava Shwartsman * or any other error value otherwise. 293e9dcd831SSlava Shwartsman */ 294e9dcd831SSlava Shwartsman int mlx5_fpga_get_sbu_caps(struct mlx5_fpga_device *fdev, int size, void *buf); 295e9dcd831SSlava Shwartsman 296e9dcd831SSlava Shwartsman /** 297e9dcd831SSlava Shwartsman * mlx5_fpga_ddr_size_get() - Retrieve the size of FPGA DDR 298e9dcd831SSlava Shwartsman * @fdev: The FPGA device 299e9dcd831SSlava Shwartsman * 300e9dcd831SSlava Shwartsman * Return: Size of DDR avaailable for FPGA, in bytes 301e9dcd831SSlava Shwartsman */ 302e9dcd831SSlava Shwartsman u64 mlx5_fpga_ddr_size_get(struct mlx5_fpga_device *fdev); 303e9dcd831SSlava Shwartsman 304e9dcd831SSlava Shwartsman /** 305e9dcd831SSlava Shwartsman * mlx5_fpga_ddr_base_get() - Retrieve the base address of FPGA DDR 306e9dcd831SSlava Shwartsman * @fdev: The FPGA device 307e9dcd831SSlava Shwartsman * 308e9dcd831SSlava Shwartsman * Return: Base address of DDR in FPGA address space 309e9dcd831SSlava Shwartsman */ 310e9dcd831SSlava Shwartsman u64 mlx5_fpga_ddr_base_get(struct mlx5_fpga_device *fdev); 311e9dcd831SSlava Shwartsman 312e9dcd831SSlava Shwartsman /** 313e9dcd831SSlava Shwartsman * mlx5_fpga_client_data_set() - Attach client-defined private value to a device 314e9dcd831SSlava Shwartsman * @fdev: The FPGA device 315e9dcd831SSlava Shwartsman * @client: The client driver 316e9dcd831SSlava Shwartsman * @data: Opaque private value 317e9dcd831SSlava Shwartsman * 318e9dcd831SSlava Shwartsman * Client driver may use the private value for storing device-specific 319e9dcd831SSlava Shwartsman * state and configuration information, and may retrieve it with a call to 320e9dcd831SSlava Shwartsman * mlx5_fpga_client_data_get(). 321e9dcd831SSlava Shwartsman */ 322e9dcd831SSlava Shwartsman void mlx5_fpga_client_data_set(struct mlx5_fpga_device *fdev, 323e9dcd831SSlava Shwartsman struct mlx5_fpga_client *client, 324e9dcd831SSlava Shwartsman void *data); 325e9dcd831SSlava Shwartsman 326e9dcd831SSlava Shwartsman /** 327e9dcd831SSlava Shwartsman * mlx5_fpga_client_data_get() - Retrieve client-defined private value 328e9dcd831SSlava Shwartsman * @fdev: The FPGA device 329e9dcd831SSlava Shwartsman * @client: The client driver 330e9dcd831SSlava Shwartsman * 331e9dcd831SSlava Shwartsman * Client driver may use the private value for storing device-specific 332e9dcd831SSlava Shwartsman * state and configuration information by calling mlx5_fpga_client_data_set() 333e9dcd831SSlava Shwartsman * 334e9dcd831SSlava Shwartsman * Return: The private value 335e9dcd831SSlava Shwartsman */ 336e9dcd831SSlava Shwartsman void *mlx5_fpga_client_data_get(struct mlx5_fpga_device *fdev, 337e9dcd831SSlava Shwartsman struct mlx5_fpga_client *client); 338e9dcd831SSlava Shwartsman 339e9dcd831SSlava Shwartsman /** 340e9dcd831SSlava Shwartsman * mlx5_fpga_device_query() - Query FPGA device state information 341e9dcd831SSlava Shwartsman * @fdev: The FPGA device 342e9dcd831SSlava Shwartsman * @query: Returns the device state 343e9dcd831SSlava Shwartsman * 344e9dcd831SSlava Shwartsman * Queries the device state and returns it in *query 345e9dcd831SSlava Shwartsman */ 346e9dcd831SSlava Shwartsman void mlx5_fpga_device_query(struct mlx5_fpga_device *fdev, 347e9dcd831SSlava Shwartsman struct mlx5_fpga_query *query); 348e9dcd831SSlava Shwartsman 349e9dcd831SSlava Shwartsman /** 350e9dcd831SSlava Shwartsman * mlx5_fpga_dev() - Retrieve FPGA device structure 351e9dcd831SSlava Shwartsman * @fdev: The FPGA device 352e9dcd831SSlava Shwartsman 353e9dcd831SSlava Shwartsman * Return: A pointer to a struct device, which may be used with dev_* logging, 354e9dcd831SSlava Shwartsman * sysfs extensions, etc. 355e9dcd831SSlava Shwartsman */ 356e9dcd831SSlava Shwartsman struct device *mlx5_fpga_dev(struct mlx5_fpga_device *fdev); 357e9dcd831SSlava Shwartsman 358e9dcd831SSlava Shwartsman /** 359*085b35bbSSlava Shwartsman * mlx5_fpga_temperature() - Retrieve FPGA sensor of temperature 360*085b35bbSSlava Shwartsman * @fdev: The FPGA device 361*085b35bbSSlava Shwartsman 362*085b35bbSSlava Shwartsman * Return: 0 if successful 363*085b35bbSSlava Shwartsman * or any other error value otherwise. 364*085b35bbSSlava Shwartsman */ 365*085b35bbSSlava Shwartsman int mlx5_fpga_temperature(struct mlx5_fpga_device *fdev, 366*085b35bbSSlava Shwartsman struct mlx5_fpga_temperature *temp); 367*085b35bbSSlava Shwartsman 368*085b35bbSSlava Shwartsman /** 369e9dcd831SSlava Shwartsman * mlx5_fpga_get_cap() - Returns the FPGA cap mailbox from FW without parsing. 370e9dcd831SSlava Shwartsman * @fdev: The FPGA device 371e9dcd831SSlava Shwartsman * @fpga_caps: Is an array with a length of according to the size of 372e9dcd831SSlava Shwartsman * mlx5_ifc_fpga_cap_bits/32 373e9dcd831SSlava Shwartsman * 374e9dcd831SSlava Shwartsman * Returns a copy of the FPGA caps mailbox and returns it in fpga_caps 375e9dcd831SSlava Shwartsman */ 376e9dcd831SSlava Shwartsman void mlx5_fpga_get_cap(struct mlx5_fpga_device *fdev, u32 *fpga_caps); 377e9dcd831SSlava Shwartsman 378e9dcd831SSlava Shwartsman #endif /* MLX5_FPGA_SDK_H */ 379