Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Copyright 2008-2010 Cisco Systems, Inc.  All rights reserved.
0004  * Copyright 2007 Nuova Systems, Inc.  All rights reserved.
0005  */
0006 
0007 #ifndef _WQ_ENET_DESC_H_
0008 #define _WQ_ENET_DESC_H_
0009 
0010 /* Ethernet work queue descriptor: 16B */
0011 struct wq_enet_desc {
0012     __le64 address;
0013     __le16 length;
0014     __le16 mss_loopback;
0015     __le16 header_length_flags;
0016     __le16 vlan_tag;
0017 };
0018 
0019 #define WQ_ENET_ADDR_BITS       64
0020 #define WQ_ENET_LEN_BITS        14
0021 #define WQ_ENET_LEN_MASK        ((1 << WQ_ENET_LEN_BITS) - 1)
0022 #define WQ_ENET_MSS_BITS        14
0023 #define WQ_ENET_MSS_MASK        ((1 << WQ_ENET_MSS_BITS) - 1)
0024 #define WQ_ENET_MSS_SHIFT       2
0025 #define WQ_ENET_LOOPBACK_SHIFT      1
0026 #define WQ_ENET_HDRLEN_BITS     10
0027 #define WQ_ENET_HDRLEN_MASK     ((1 << WQ_ENET_HDRLEN_BITS) - 1)
0028 #define WQ_ENET_FLAGS_OM_BITS       2
0029 #define WQ_ENET_FLAGS_OM_MASK       ((1 << WQ_ENET_FLAGS_OM_BITS) - 1)
0030 #define WQ_ENET_FLAGS_EOP_SHIFT     12
0031 #define WQ_ENET_FLAGS_CQ_ENTRY_SHIFT    13
0032 #define WQ_ENET_FLAGS_FCOE_ENCAP_SHIFT  14
0033 #define WQ_ENET_FLAGS_VLAN_TAG_INSERT_SHIFT 15
0034 
0035 #define WQ_ENET_OFFLOAD_MODE_CSUM   0
0036 #define WQ_ENET_OFFLOAD_MODE_RESERVED   1
0037 #define WQ_ENET_OFFLOAD_MODE_CSUM_L4    2
0038 #define WQ_ENET_OFFLOAD_MODE_TSO    3
0039 
0040 static inline void wq_enet_desc_enc(struct wq_enet_desc *desc,
0041     u64 address, u16 length, u16 mss, u16 header_length,
0042     u8 offload_mode, u8 eop, u8 cq_entry, u8 fcoe_encap,
0043     u8 vlan_tag_insert, u16 vlan_tag, u8 loopback)
0044 {
0045     desc->address = cpu_to_le64(address);
0046     desc->length = cpu_to_le16(length & WQ_ENET_LEN_MASK);
0047     desc->mss_loopback = cpu_to_le16((mss & WQ_ENET_MSS_MASK) <<
0048         WQ_ENET_MSS_SHIFT | (loopback & 1) << WQ_ENET_LOOPBACK_SHIFT);
0049     desc->header_length_flags = cpu_to_le16(
0050         (header_length & WQ_ENET_HDRLEN_MASK) |
0051         (offload_mode & WQ_ENET_FLAGS_OM_MASK) << WQ_ENET_HDRLEN_BITS |
0052         (eop & 1) << WQ_ENET_FLAGS_EOP_SHIFT |
0053         (cq_entry & 1) << WQ_ENET_FLAGS_CQ_ENTRY_SHIFT |
0054         (fcoe_encap & 1) << WQ_ENET_FLAGS_FCOE_ENCAP_SHIFT |
0055         (vlan_tag_insert & 1) << WQ_ENET_FLAGS_VLAN_TAG_INSERT_SHIFT);
0056     desc->vlan_tag = cpu_to_le16(vlan_tag);
0057 }
0058 
0059 static inline void wq_enet_desc_dec(struct wq_enet_desc *desc,
0060     u64 *address, u16 *length, u16 *mss, u16 *header_length,
0061     u8 *offload_mode, u8 *eop, u8 *cq_entry, u8 *fcoe_encap,
0062     u8 *vlan_tag_insert, u16 *vlan_tag, u8 *loopback)
0063 {
0064     *address = le64_to_cpu(desc->address);
0065     *length = le16_to_cpu(desc->length) & WQ_ENET_LEN_MASK;
0066     *mss = (le16_to_cpu(desc->mss_loopback) >> WQ_ENET_MSS_SHIFT) &
0067         WQ_ENET_MSS_MASK;
0068     *loopback = (u8)((le16_to_cpu(desc->mss_loopback) >>
0069         WQ_ENET_LOOPBACK_SHIFT) & 1);
0070     *header_length = le16_to_cpu(desc->header_length_flags) &
0071         WQ_ENET_HDRLEN_MASK;
0072     *offload_mode = (u8)((le16_to_cpu(desc->header_length_flags) >>
0073         WQ_ENET_HDRLEN_BITS) & WQ_ENET_FLAGS_OM_MASK);
0074     *eop = (u8)((le16_to_cpu(desc->header_length_flags) >>
0075         WQ_ENET_FLAGS_EOP_SHIFT) & 1);
0076     *cq_entry = (u8)((le16_to_cpu(desc->header_length_flags) >>
0077         WQ_ENET_FLAGS_CQ_ENTRY_SHIFT) & 1);
0078     *fcoe_encap = (u8)((le16_to_cpu(desc->header_length_flags) >>
0079         WQ_ENET_FLAGS_FCOE_ENCAP_SHIFT) & 1);
0080     *vlan_tag_insert = (u8)((le16_to_cpu(desc->header_length_flags) >>
0081         WQ_ENET_FLAGS_VLAN_TAG_INSERT_SHIFT) & 1);
0082     *vlan_tag = le16_to_cpu(desc->vlan_tag);
0083 }
0084 
0085 #endif /* _WQ_ENET_DESC_H_ */