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

efc_els.h (2810B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Copyright (C) 2021 Broadcom. All Rights Reserved. The term
      4 * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
      5 */
      6
      7#ifndef __EFC_ELS_H__
      8#define __EFC_ELS_H__
      9
     10#define EFC_STATUS_INVALID	INT_MAX
     11#define EFC_ELS_IO_POOL_SZ	1024
     12
     13struct efc_els_io_req {
     14	struct list_head	list_entry;
     15	struct kref		ref;
     16	void			(*release)(struct kref *arg);
     17	struct efc_node		*node;
     18	void			*cb;
     19	u32			els_retries_remaining;
     20	bool			els_req_free;
     21	struct timer_list       delay_timer;
     22
     23	const char		*display_name;
     24
     25	struct efc_disc_io	io;
     26};
     27
     28typedef int(*efc_hw_srrs_cb_t)(void *arg, u32 length, int status,
     29			       u32 ext_status);
     30
     31void _efc_els_io_free(struct kref *arg);
     32struct efc_els_io_req *
     33efc_els_io_alloc(struct efc_node *node, u32 reqlen);
     34struct efc_els_io_req *
     35efc_els_io_alloc_size(struct efc_node *node, u32 reqlen, u32 rsplen);
     36void efc_els_io_free(struct efc_els_io_req *els);
     37
     38/* ELS command send */
     39typedef void (*els_cb_t)(struct efc_node *node,
     40			 struct efc_node_cb *cbdata, void *arg);
     41int
     42efc_send_plogi(struct efc_node *node);
     43int
     44efc_send_flogi(struct efc_node *node);
     45int
     46efc_send_fdisc(struct efc_node *node);
     47int
     48efc_send_prli(struct efc_node *node);
     49int
     50efc_send_prlo(struct efc_node *node);
     51int
     52efc_send_logo(struct efc_node *node);
     53int
     54efc_send_adisc(struct efc_node *node);
     55int
     56efc_send_pdisc(struct efc_node *node);
     57int
     58efc_send_scr(struct efc_node *node);
     59int
     60efc_ns_send_rftid(struct efc_node *node);
     61int
     62efc_ns_send_rffid(struct efc_node *node);
     63int
     64efc_ns_send_gidpt(struct efc_node *node);
     65void
     66efc_els_io_cleanup(struct efc_els_io_req *els, int evt, void *arg);
     67
     68/* ELS acc send */
     69int
     70efc_send_ls_acc(struct efc_node *node, u32 ox_id);
     71int
     72efc_send_ls_rjt(struct efc_node *node, u32 ox_id, u32 reason_cod,
     73		u32 reason_code_expl, u32 vendor_unique);
     74int
     75efc_send_flogi_p2p_acc(struct efc_node *node, u32 ox_id, u32 s_id);
     76int
     77efc_send_flogi_acc(struct efc_node *node, u32 ox_id, u32 is_fport);
     78int
     79efc_send_plogi_acc(struct efc_node *node, u32 ox_id);
     80int
     81efc_send_prli_acc(struct efc_node *node, u32 ox_id);
     82int
     83efc_send_logo_acc(struct efc_node *node, u32 ox_id);
     84int
     85efc_send_prlo_acc(struct efc_node *node, u32 ox_id);
     86int
     87efc_send_adisc_acc(struct efc_node *node, u32 ox_id);
     88
     89int
     90efc_bls_send_acc_hdr(struct efc *efc, struct efc_node *node,
     91		     struct fc_frame_header *hdr);
     92int
     93efc_bls_send_rjt_hdr(struct efc_els_io_req *io, struct fc_frame_header *hdr);
     94
     95int
     96efc_els_io_list_empty(struct efc_node *node, struct list_head *list);
     97
     98/* CT */
     99int
    100efc_send_ct_rsp(struct efc *efc, struct efc_node *node, u16 ox_id,
    101		struct fc_ct_hdr *ct_hdr, u32 cmd_rsp_code, u32 reason_code,
    102		u32 reason_code_explanation);
    103
    104int
    105efc_send_bls_acc(struct efc_node *node, struct fc_frame_header *hdr);
    106
    107#endif /* __EFC_ELS_H__ */