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

qed_ooo.h (4888B)


      1/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
      2/* QLogic qed NIC Driver
      3 * Copyright (c) 2015-2017  QLogic Corporation
      4 * Copyright (c) 2019-2020 Marvell International Ltd.
      5 */
      6
      7#ifndef _QED_OOO_H
      8#define _QED_OOO_H
      9#include <linux/types.h>
     10#include <linux/list.h>
     11#include <linux/slab.h>
     12#include "qed.h"
     13
     14#define QED_MAX_NUM_ISLES	256
     15#define QED_MAX_NUM_OOO_HISTORY_ENTRIES	512
     16
     17#define QED_OOO_LEFT_BUF	0
     18#define QED_OOO_RIGHT_BUF	1
     19
     20struct qed_ooo_buffer {
     21	struct list_head list_entry;
     22	void *rx_buffer_virt_addr;
     23	dma_addr_t rx_buffer_phys_addr;
     24	u32 rx_buffer_size;
     25	u16 packet_length;
     26	u16 parse_flags;
     27	u16 vlan;
     28	u8 placement_offset;
     29};
     30
     31struct qed_ooo_isle {
     32	struct list_head list_entry;
     33	struct list_head buffers_list;
     34};
     35
     36struct qed_ooo_archipelago {
     37	struct list_head isles_list;
     38};
     39
     40struct qed_ooo_history {
     41	struct ooo_opaque *p_cqes;
     42	u32 head_idx;
     43	u32 num_of_cqes;
     44};
     45
     46struct qed_ooo_info {
     47	struct list_head free_buffers_list;
     48	struct list_head ready_buffers_list;
     49	struct list_head free_isles_list;
     50	struct qed_ooo_archipelago *p_archipelagos_mem;
     51	struct qed_ooo_isle *p_isles_mem;
     52	struct qed_ooo_history ooo_history;
     53	u32 cur_isles_number;
     54	u32 max_isles_number;
     55	u32 gen_isles_number;
     56	u16 max_num_archipelagos;
     57	u16 cid_base;
     58};
     59
     60#if IS_ENABLED(CONFIG_QED_OOO)
     61void qed_ooo_save_history_entry(struct qed_hwfn *p_hwfn,
     62				struct qed_ooo_info *p_ooo_info,
     63				struct ooo_opaque *p_cqe);
     64
     65int qed_ooo_alloc(struct qed_hwfn *p_hwfn);
     66
     67void qed_ooo_setup(struct qed_hwfn *p_hwfn);
     68
     69void qed_ooo_free(struct qed_hwfn *p_hwfn);
     70
     71void qed_ooo_release_connection_isles(struct qed_hwfn *p_hwfn,
     72				      struct qed_ooo_info *p_ooo_info,
     73				      u32 cid);
     74
     75void qed_ooo_release_all_isles(struct qed_hwfn *p_hwfn,
     76			       struct qed_ooo_info *p_ooo_info);
     77
     78void qed_ooo_put_free_buffer(struct qed_hwfn *p_hwfn,
     79			     struct qed_ooo_info *p_ooo_info,
     80			     struct qed_ooo_buffer *p_buffer);
     81
     82struct qed_ooo_buffer *
     83qed_ooo_get_free_buffer(struct qed_hwfn *p_hwfn,
     84			struct qed_ooo_info *p_ooo_info);
     85
     86void qed_ooo_put_ready_buffer(struct qed_hwfn *p_hwfn,
     87			      struct qed_ooo_info *p_ooo_info,
     88			      struct qed_ooo_buffer *p_buffer, u8 on_tail);
     89
     90struct qed_ooo_buffer *
     91qed_ooo_get_ready_buffer(struct qed_hwfn *p_hwfn,
     92			 struct qed_ooo_info *p_ooo_info);
     93
     94void qed_ooo_delete_isles(struct qed_hwfn *p_hwfn,
     95			  struct qed_ooo_info *p_ooo_info,
     96			  u32 cid, u8 drop_isle, u8 drop_size);
     97
     98void qed_ooo_add_new_isle(struct qed_hwfn *p_hwfn,
     99			  struct qed_ooo_info *p_ooo_info,
    100			  u32 cid,
    101			  u8 ooo_isle, struct qed_ooo_buffer *p_buffer);
    102
    103void qed_ooo_add_new_buffer(struct qed_hwfn *p_hwfn,
    104			    struct qed_ooo_info *p_ooo_info,
    105			    u32 cid,
    106			    u8 ooo_isle,
    107			    struct qed_ooo_buffer *p_buffer, u8 buffer_side);
    108
    109void qed_ooo_join_isles(struct qed_hwfn *p_hwfn,
    110			struct qed_ooo_info *p_ooo_info, u32 cid,
    111			u8 left_isle);
    112#else /* IS_ENABLED(CONFIG_QED_ISCSI) */
    113static inline void qed_ooo_save_history_entry(struct qed_hwfn *p_hwfn,
    114					      struct qed_ooo_info *p_ooo_info,
    115					      struct ooo_opaque *p_cqe) {}
    116
    117static inline int qed_ooo_alloc(struct qed_hwfn *p_hwfn)
    118{
    119	return -EINVAL;
    120}
    121
    122static inline void qed_ooo_setup(struct qed_hwfn *p_hwfn) {}
    123
    124static inline void qed_ooo_free(struct qed_hwfn *p_hwfn) {}
    125
    126static inline void
    127qed_ooo_release_connection_isles(struct qed_hwfn *p_hwfn,
    128				 struct qed_ooo_info *p_ooo_info,
    129				 u32 cid) {}
    130
    131static inline void qed_ooo_release_all_isles(struct qed_hwfn *p_hwfn,
    132					     struct qed_ooo_info *p_ooo_info)
    133					     {}
    134
    135static inline void qed_ooo_put_free_buffer(struct qed_hwfn *p_hwfn,
    136					   struct qed_ooo_info *p_ooo_info,
    137					   struct qed_ooo_buffer *p_buffer) {}
    138
    139static inline struct qed_ooo_buffer *
    140qed_ooo_get_free_buffer(struct qed_hwfn *p_hwfn,
    141			struct qed_ooo_info *p_ooo_info) { return NULL; }
    142
    143static inline void qed_ooo_put_ready_buffer(struct qed_hwfn *p_hwfn,
    144					    struct qed_ooo_info *p_ooo_info,
    145					    struct qed_ooo_buffer *p_buffer,
    146					    u8 on_tail) {}
    147
    148static inline struct qed_ooo_buffer *
    149qed_ooo_get_ready_buffer(struct qed_hwfn *p_hwfn,
    150			 struct qed_ooo_info *p_ooo_info) { return NULL; }
    151
    152static inline void qed_ooo_delete_isles(struct qed_hwfn *p_hwfn,
    153					struct qed_ooo_info *p_ooo_info,
    154					u32 cid, u8 drop_isle, u8 drop_size) {}
    155
    156static inline void qed_ooo_add_new_isle(struct qed_hwfn *p_hwfn,
    157					struct qed_ooo_info *p_ooo_info,
    158					u32 cid, u8 ooo_isle,
    159					struct qed_ooo_buffer *p_buffer) {}
    160
    161static inline void qed_ooo_add_new_buffer(struct qed_hwfn *p_hwfn,
    162					  struct qed_ooo_info *p_ooo_info,
    163					  u32 cid, u8 ooo_isle,
    164					  struct qed_ooo_buffer *p_buffer,
    165					  u8 buffer_side) {}
    166
    167static inline void qed_ooo_join_isles(struct qed_hwfn *p_hwfn,
    168				      struct qed_ooo_info *p_ooo_info, u32 cid,
    169				      u8 left_isle) {}
    170#endif /* IS_ENABLED(CONFIG_QED_ISCSI) */
    171
    172#endif