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