brintos

brintos / linux-shallow public Read only

0
0
Text · 5.1 KiB · 4d94329 Raw
171 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright 2008 Cisco Systems, Inc.  All rights reserved.4 * Copyright 2007 Nuova Systems, Inc.  All rights reserved.5 */6#ifndef _CQ_EXCH_DESC_H_7#define _CQ_EXCH_DESC_H_8 9#include "cq_desc.h"10 11/* Exchange completion queue descriptor: 16B */12struct cq_exch_wq_desc {13	u16 completed_index;14	u16 q_number;15	u16 exchange_id;16	u8  tmpl;17	u8  reserved0;18	u32 reserved1;19	u8  exch_status;20	u8  reserved2[2];21	u8  type_color;22};23 24#define CQ_EXCH_WQ_STATUS_BITS      225#define CQ_EXCH_WQ_STATUS_MASK      ((1 << CQ_EXCH_WQ_STATUS_BITS) - 1)26 27enum cq_exch_status_types {28	CQ_EXCH_WQ_STATUS_TYPE_COMPLETE = 0,29	CQ_EXCH_WQ_STATUS_TYPE_ABORT = 1,30	CQ_EXCH_WQ_STATUS_TYPE_SGL_EOF = 2,31	CQ_EXCH_WQ_STATUS_TYPE_TMPL_ERR = 3,32};33 34static inline void cq_exch_wq_desc_dec(struct cq_exch_wq_desc *desc_ptr,35				       u8  *type,36				       u8  *color,37				       u16 *q_number,38				       u16 *completed_index,39				       u8  *exch_status)40{41	cq_desc_dec((struct cq_desc *)desc_ptr, type,42		    color, q_number, completed_index);43	*exch_status = desc_ptr->exch_status & CQ_EXCH_WQ_STATUS_MASK;44}45 46struct cq_fcp_rq_desc {47	u16 completed_index_eop_sop_prt;48	u16 q_number;49	u16 exchange_id;50	u16 tmpl;51	u16 bytes_written;52	u16 vlan;53	u8  sof;54	u8  eof;55	u8  fcs_fer_fck;56	u8  type_color;57};58 59#define CQ_FCP_RQ_DESC_FLAGS_SOP		(1 << 15)60#define CQ_FCP_RQ_DESC_FLAGS_EOP		(1 << 14)61#define CQ_FCP_RQ_DESC_FLAGS_PRT		(1 << 12)62#define CQ_FCP_RQ_DESC_TMPL_MASK		0x1f63#define CQ_FCP_RQ_DESC_BYTES_WRITTEN_MASK	0x3fff64#define CQ_FCP_RQ_DESC_PACKET_ERR_SHIFT		1465#define CQ_FCP_RQ_DESC_PACKET_ERR_MASK (1 << CQ_FCP_RQ_DESC_PACKET_ERR_SHIFT)66#define CQ_FCP_RQ_DESC_VS_STRIPPED_SHIFT	1567#define CQ_FCP_RQ_DESC_VS_STRIPPED_MASK (1 << CQ_FCP_RQ_DESC_VS_STRIPPED_SHIFT)68#define CQ_FCP_RQ_DESC_FC_CRC_OK_MASK		0x169#define CQ_FCP_RQ_DESC_FCOE_ERR_SHIFT		170#define CQ_FCP_RQ_DESC_FCOE_ERR_MASK (1 << CQ_FCP_RQ_DESC_FCOE_ERR_SHIFT)71#define CQ_FCP_RQ_DESC_FCS_OK_SHIFT		772#define CQ_FCP_RQ_DESC_FCS_OK_MASK (1 << CQ_FCP_RQ_DESC_FCS_OK_SHIFT)73 74static inline void cq_fcp_rq_desc_dec(struct cq_fcp_rq_desc *desc_ptr,75				      u8  *type,76				      u8  *color,77				      u16 *q_number,78				      u16 *completed_index,79				      u8  *eop,80				      u8  *sop,81				      u8  *fck,82				      u16 *exchange_id,83				      u16 *tmpl,84				      u32 *bytes_written,85				      u8  *sof,86				      u8  *eof,87				      u8  *ingress_port,88				      u8  *packet_err,89				      u8  *fcoe_err,90				      u8  *fcs_ok,91				      u8  *vlan_stripped,92				      u16 *vlan)93{94	cq_desc_dec((struct cq_desc *)desc_ptr, type,95		    color, q_number, completed_index);96	*eop = (desc_ptr->completed_index_eop_sop_prt &97		CQ_FCP_RQ_DESC_FLAGS_EOP) ? 1 : 0;98	*sop = (desc_ptr->completed_index_eop_sop_prt &99		CQ_FCP_RQ_DESC_FLAGS_SOP) ? 1 : 0;100	*ingress_port =101		(desc_ptr->completed_index_eop_sop_prt &102		 CQ_FCP_RQ_DESC_FLAGS_PRT) ? 1 : 0;103	*exchange_id = desc_ptr->exchange_id;104	*tmpl = desc_ptr->tmpl & CQ_FCP_RQ_DESC_TMPL_MASK;105	*bytes_written =106		desc_ptr->bytes_written & CQ_FCP_RQ_DESC_BYTES_WRITTEN_MASK;107	*packet_err =108		(desc_ptr->bytes_written & CQ_FCP_RQ_DESC_PACKET_ERR_MASK) >>109		CQ_FCP_RQ_DESC_PACKET_ERR_SHIFT;110	*vlan_stripped =111		(desc_ptr->bytes_written & CQ_FCP_RQ_DESC_VS_STRIPPED_MASK) >>112		CQ_FCP_RQ_DESC_VS_STRIPPED_SHIFT;113	*vlan = desc_ptr->vlan;114	*sof = desc_ptr->sof;115	*fck = desc_ptr->fcs_fer_fck & CQ_FCP_RQ_DESC_FC_CRC_OK_MASK;116	*fcoe_err = (desc_ptr->fcs_fer_fck & CQ_FCP_RQ_DESC_FCOE_ERR_MASK) >>117		CQ_FCP_RQ_DESC_FCOE_ERR_SHIFT;118	*eof = desc_ptr->eof;119	*fcs_ok =120		(desc_ptr->fcs_fer_fck & CQ_FCP_RQ_DESC_FCS_OK_MASK) >>121		CQ_FCP_RQ_DESC_FCS_OK_SHIFT;122}123 124struct cq_sgl_desc {125	u16 exchange_id;126	u16 q_number;127	u32 active_burst_offset;128	u32 tot_data_bytes;129	u16 tmpl;130	u8  sgl_err;131	u8  type_color;132};133 134enum cq_sgl_err_types {135	CQ_SGL_ERR_NO_ERROR = 0,136	CQ_SGL_ERR_OVERFLOW,         /* data ran beyond end of SGL */137	CQ_SGL_ERR_SGL_LCL_ADDR_ERR, /* sgl access to local vnic addr illegal*/138	CQ_SGL_ERR_ADDR_RSP_ERR,     /* sgl address error */139	CQ_SGL_ERR_DATA_RSP_ERR,     /* sgl data rsp error */140	CQ_SGL_ERR_CNT_ZERO_ERR,     /* SGL count is 0 */141	CQ_SGL_ERR_CNT_MAX_ERR,      /* SGL count is larger than supported */142	CQ_SGL_ERR_ORDER_ERR,        /* frames recv on both ports, order err */143	CQ_SGL_ERR_DATA_LCL_ADDR_ERR,/* sgl data buf to local vnic addr ill */144	CQ_SGL_ERR_HOST_CQ_ERR,      /* host cq entry to local vnic addr ill */145};146 147#define CQ_SGL_SGL_ERR_MASK             0x1f148#define CQ_SGL_TMPL_MASK                0x1f149 150static inline void cq_sgl_desc_dec(struct cq_sgl_desc *desc_ptr,151				   u8  *type,152				   u8  *color,153				   u16 *q_number,154				   u16 *exchange_id,155				   u32 *active_burst_offset,156				   u32 *tot_data_bytes,157				   u16 *tmpl,158				   u8  *sgl_err)159{160	/* Cheat a little by assuming exchange_id is the same as completed161	   index */162	cq_desc_dec((struct cq_desc *)desc_ptr, type, color, q_number,163		    exchange_id);164	*active_burst_offset = desc_ptr->active_burst_offset;165	*tot_data_bytes = desc_ptr->tot_data_bytes;166	*tmpl = desc_ptr->tmpl & CQ_SGL_TMPL_MASK;167	*sgl_err = desc_ptr->sgl_err & CQ_SGL_SGL_ERR_MASK;168}169 170#endif /* _CQ_EXCH_DESC_H_ */171