xref: /openbmc/linux/drivers/scsi/fnic/rq_enet_desc.h (revision e6550b3e)
1*e6550b3eSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
25df6d737SAbhijeet Joglekar /*
35df6d737SAbhijeet Joglekar  * Copyright 2008 Cisco Systems, Inc.  All rights reserved.
45df6d737SAbhijeet Joglekar  * Copyright 2007 Nuova Systems, Inc.  All rights reserved.
55df6d737SAbhijeet Joglekar  */
65df6d737SAbhijeet Joglekar #ifndef _RQ_ENET_DESC_H_
75df6d737SAbhijeet Joglekar #define _RQ_ENET_DESC_H_
85df6d737SAbhijeet Joglekar 
95df6d737SAbhijeet Joglekar /* Ethernet receive queue descriptor: 16B */
105df6d737SAbhijeet Joglekar struct rq_enet_desc {
115df6d737SAbhijeet Joglekar 	__le64 address;
125df6d737SAbhijeet Joglekar 	__le16 length_type;
135df6d737SAbhijeet Joglekar 	u8 reserved[6];
145df6d737SAbhijeet Joglekar };
155df6d737SAbhijeet Joglekar 
165df6d737SAbhijeet Joglekar enum rq_enet_type_types {
175df6d737SAbhijeet Joglekar 	RQ_ENET_TYPE_ONLY_SOP = 0,
185df6d737SAbhijeet Joglekar 	RQ_ENET_TYPE_NOT_SOP = 1,
195df6d737SAbhijeet Joglekar 	RQ_ENET_TYPE_RESV2 = 2,
205df6d737SAbhijeet Joglekar 	RQ_ENET_TYPE_RESV3 = 3,
215df6d737SAbhijeet Joglekar };
225df6d737SAbhijeet Joglekar 
235df6d737SAbhijeet Joglekar #define RQ_ENET_ADDR_BITS		64
245df6d737SAbhijeet Joglekar #define RQ_ENET_LEN_BITS		14
255df6d737SAbhijeet Joglekar #define RQ_ENET_LEN_MASK		((1 << RQ_ENET_LEN_BITS) - 1)
265df6d737SAbhijeet Joglekar #define RQ_ENET_TYPE_BITS		2
275df6d737SAbhijeet Joglekar #define RQ_ENET_TYPE_MASK		((1 << RQ_ENET_TYPE_BITS) - 1)
285df6d737SAbhijeet Joglekar 
rq_enet_desc_enc(struct rq_enet_desc * desc,u64 address,u8 type,u16 length)295df6d737SAbhijeet Joglekar static inline void rq_enet_desc_enc(struct rq_enet_desc *desc,
305df6d737SAbhijeet Joglekar 	u64 address, u8 type, u16 length)
315df6d737SAbhijeet Joglekar {
325df6d737SAbhijeet Joglekar 	desc->address = cpu_to_le64(address);
335df6d737SAbhijeet Joglekar 	desc->length_type = cpu_to_le16((length & RQ_ENET_LEN_MASK) |
345df6d737SAbhijeet Joglekar 		((type & RQ_ENET_TYPE_MASK) << RQ_ENET_LEN_BITS));
355df6d737SAbhijeet Joglekar }
365df6d737SAbhijeet Joglekar 
rq_enet_desc_dec(struct rq_enet_desc * desc,u64 * address,u8 * type,u16 * length)375df6d737SAbhijeet Joglekar static inline void rq_enet_desc_dec(struct rq_enet_desc *desc,
385df6d737SAbhijeet Joglekar 	u64 *address, u8 *type, u16 *length)
395df6d737SAbhijeet Joglekar {
405df6d737SAbhijeet Joglekar 	*address = le64_to_cpu(desc->address);
415df6d737SAbhijeet Joglekar 	*length = le16_to_cpu(desc->length_type) & RQ_ENET_LEN_MASK;
425df6d737SAbhijeet Joglekar 	*type = (u8)((le16_to_cpu(desc->length_type) >> RQ_ENET_LEN_BITS) &
435df6d737SAbhijeet Joglekar 		RQ_ENET_TYPE_MASK);
445df6d737SAbhijeet Joglekar }
455df6d737SAbhijeet Joglekar 
465df6d737SAbhijeet Joglekar #endif /* _RQ_ENET_DESC_H_ */
47