162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/* Copyright(c) 1999 - 2018 Intel Corporation. */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#ifndef _IXGBE_FCOE_H
562306a36Sopenharmony_ci#define _IXGBE_FCOE_H
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include <scsi/fc/fc_fs.h>
862306a36Sopenharmony_ci#include <scsi/fc/fc_fcoe.h>
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci/* shift bits within STAT fo FCSTAT */
1162306a36Sopenharmony_ci#define IXGBE_RXDADV_FCSTAT_SHIFT	4
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci/* ddp user buffer */
1462306a36Sopenharmony_ci#define IXGBE_BUFFCNT_MAX	256	/* 8 bits bufcnt */
1562306a36Sopenharmony_ci#define IXGBE_FCPTR_ALIGN	16
1662306a36Sopenharmony_ci#define IXGBE_FCPTR_MAX	(IXGBE_BUFFCNT_MAX * sizeof(dma_addr_t))
1762306a36Sopenharmony_ci#define IXGBE_FCBUFF_4KB	0x0
1862306a36Sopenharmony_ci#define IXGBE_FCBUFF_8KB	0x1
1962306a36Sopenharmony_ci#define IXGBE_FCBUFF_16KB	0x2
2062306a36Sopenharmony_ci#define IXGBE_FCBUFF_64KB	0x3
2162306a36Sopenharmony_ci#define IXGBE_FCBUFF_MAX	65536	/* 64KB max */
2262306a36Sopenharmony_ci#define IXGBE_FCBUFF_MIN	4096	/* 4KB min */
2362306a36Sopenharmony_ci#define IXGBE_FCOE_DDP_MAX	512	/* 9 bits xid */
2462306a36Sopenharmony_ci#define IXGBE_FCOE_DDP_MAX_X550	2048	/* 11 bits xid */
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci/* Default traffic class to use for FCoE */
2762306a36Sopenharmony_ci#define IXGBE_FCOE_DEFTC	3
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci/* fcerr */
3062306a36Sopenharmony_ci#define IXGBE_FCERR_BADCRC       0x00100000
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci/* FCoE DDP for target mode */
3362306a36Sopenharmony_ci#define __IXGBE_FCOE_TARGET	1
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_cistruct ixgbe_fcoe_ddp {
3662306a36Sopenharmony_ci	int len;
3762306a36Sopenharmony_ci	u32 err;
3862306a36Sopenharmony_ci	unsigned int sgc;
3962306a36Sopenharmony_ci	struct scatterlist *sgl;
4062306a36Sopenharmony_ci	dma_addr_t udp;
4162306a36Sopenharmony_ci	u64 *udl;
4262306a36Sopenharmony_ci	struct dma_pool *pool;
4362306a36Sopenharmony_ci};
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci/* per cpu variables */
4662306a36Sopenharmony_cistruct ixgbe_fcoe_ddp_pool {
4762306a36Sopenharmony_ci	struct dma_pool *pool;
4862306a36Sopenharmony_ci	u64 noddp;
4962306a36Sopenharmony_ci	u64 noddp_ext_buff;
5062306a36Sopenharmony_ci};
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_cistruct ixgbe_fcoe {
5362306a36Sopenharmony_ci	struct ixgbe_fcoe_ddp_pool __percpu *ddp_pool;
5462306a36Sopenharmony_ci	atomic_t refcnt;
5562306a36Sopenharmony_ci	spinlock_t lock;
5662306a36Sopenharmony_ci	struct ixgbe_fcoe_ddp ddp[IXGBE_FCOE_DDP_MAX_X550];
5762306a36Sopenharmony_ci	void *extra_ddp_buffer;
5862306a36Sopenharmony_ci	dma_addr_t extra_ddp_buffer_dma;
5962306a36Sopenharmony_ci	unsigned long mode;
6062306a36Sopenharmony_ci	u8 up;
6162306a36Sopenharmony_ci};
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci#endif /* _IXGBE_FCOE_H */
64