cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

fs_cmd.h (4571B)


      1/*
      2 * Copyright (c) 2015, Mellanox Technologies. All rights reserved.
      3 *
      4 * This software is available to you under a choice of one of two
      5 * licenses.  You may choose to be licensed under the terms of the GNU
      6 * General Public License (GPL) Version 2, available from the file
      7 * COPYING in the main directory of this source tree, or the
      8 * OpenIB.org BSD license below:
      9 *
     10 *     Redistribution and use in source and binary forms, with or
     11 *     without modification, are permitted provided that the following
     12 *     conditions are met:
     13 *
     14 *      - Redistributions of source code must retain the above
     15 *        copyright notice, this list of conditions and the following
     16 *        disclaimer.
     17 *
     18 *      - Redistributions in binary form must reproduce the above
     19 *        copyright notice, this list of conditions and the following
     20 *        disclaimer in the documentation and/or other materials
     21 *        provided with the distribution.
     22 *
     23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
     27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
     28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     30 * SOFTWARE.
     31 */
     32
     33#ifndef _MLX5_FS_CMD_
     34#define _MLX5_FS_CMD_
     35
     36#include "fs_core.h"
     37
     38struct mlx5_flow_cmds {
     39	int (*create_flow_table)(struct mlx5_flow_root_namespace *ns,
     40				 struct mlx5_flow_table *ft,
     41				 unsigned int size,
     42				 struct mlx5_flow_table *next_ft);
     43	int (*destroy_flow_table)(struct mlx5_flow_root_namespace *ns,
     44				  struct mlx5_flow_table *ft);
     45
     46	int (*modify_flow_table)(struct mlx5_flow_root_namespace *ns,
     47				 struct mlx5_flow_table *ft,
     48				 struct mlx5_flow_table *next_ft);
     49
     50	int (*create_flow_group)(struct mlx5_flow_root_namespace *ns,
     51				 struct mlx5_flow_table *ft,
     52				 u32 *in,
     53				 struct mlx5_flow_group *fg);
     54
     55	int (*destroy_flow_group)(struct mlx5_flow_root_namespace *ns,
     56				  struct mlx5_flow_table *ft,
     57				  struct mlx5_flow_group *fg);
     58
     59	int (*create_fte)(struct mlx5_flow_root_namespace *ns,
     60			  struct mlx5_flow_table *ft,
     61			  struct mlx5_flow_group *fg,
     62			  struct fs_fte *fte);
     63
     64	int (*update_fte)(struct mlx5_flow_root_namespace *ns,
     65			  struct mlx5_flow_table *ft,
     66			  struct mlx5_flow_group *fg,
     67			  int modify_mask,
     68			  struct fs_fte *fte);
     69
     70	int (*delete_fte)(struct mlx5_flow_root_namespace *ns,
     71			  struct mlx5_flow_table *ft,
     72			  struct fs_fte *fte);
     73
     74	int (*update_root_ft)(struct mlx5_flow_root_namespace *ns,
     75			      struct mlx5_flow_table *ft,
     76			      u32 underlay_qpn,
     77			      bool disconnect);
     78
     79	int (*packet_reformat_alloc)(struct mlx5_flow_root_namespace *ns,
     80				     struct mlx5_pkt_reformat_params *params,
     81				     enum mlx5_flow_namespace_type namespace,
     82				     struct mlx5_pkt_reformat *pkt_reformat);
     83
     84	void (*packet_reformat_dealloc)(struct mlx5_flow_root_namespace *ns,
     85					struct mlx5_pkt_reformat *pkt_reformat);
     86
     87	int (*modify_header_alloc)(struct mlx5_flow_root_namespace *ns,
     88				   u8 namespace, u8 num_actions,
     89				   void *modify_actions,
     90				   struct mlx5_modify_hdr *modify_hdr);
     91
     92	void (*modify_header_dealloc)(struct mlx5_flow_root_namespace *ns,
     93				      struct mlx5_modify_hdr *modify_hdr);
     94
     95	int (*set_peer)(struct mlx5_flow_root_namespace *ns,
     96			struct mlx5_flow_root_namespace *peer_ns);
     97
     98	int (*create_ns)(struct mlx5_flow_root_namespace *ns);
     99	int (*destroy_ns)(struct mlx5_flow_root_namespace *ns);
    100	int (*create_match_definer)(struct mlx5_flow_root_namespace *ns,
    101				    u16 format_id, u32 *match_mask);
    102	int (*destroy_match_definer)(struct mlx5_flow_root_namespace *ns,
    103				     int definer_id);
    104
    105	u32 (*get_capabilities)(struct mlx5_flow_root_namespace *ns,
    106				enum fs_flow_table_type ft_type);
    107};
    108
    109int mlx5_cmd_fc_alloc(struct mlx5_core_dev *dev, u32 *id);
    110int mlx5_cmd_fc_bulk_alloc(struct mlx5_core_dev *dev,
    111			   enum mlx5_fc_bulk_alloc_bitmask alloc_bitmask,
    112			   u32 *id);
    113int mlx5_cmd_fc_free(struct mlx5_core_dev *dev, u32 id);
    114int mlx5_cmd_fc_query(struct mlx5_core_dev *dev, u32 id,
    115		      u64 *packets, u64 *bytes);
    116
    117int mlx5_cmd_fc_get_bulk_query_out_len(int bulk_len);
    118int mlx5_cmd_fc_bulk_query(struct mlx5_core_dev *dev, u32 base_id, int bulk_len,
    119			   u32 *out);
    120
    121const struct mlx5_flow_cmds *mlx5_fs_cmd_get_default(enum fs_flow_table_type type);
    122const struct mlx5_flow_cmds *mlx5_fs_cmd_get_fw_cmds(void);
    123
    124#endif