2018-01-17 18:36:44 +02:00
/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
2017-03-13 15:02:00 -04:00
/*
* Copyright 2014 - 2016 Freescale Semiconductor Inc .
* Copyright 2016 NXP
*
*/
# ifndef __FSL_DPAA2_GLOBAL_H
# define __FSL_DPAA2_GLOBAL_H
# include <linux/types.h>
# include <linux/cpumask.h>
# include "dpaa2-fd.h"
struct dpaa2_dq {
union {
struct common {
u8 verb ;
u8 reserved [ 63 ] ;
} common ;
struct dq {
u8 verb ;
u8 stat ;
__le16 seqnum ;
__le16 oprid ;
u8 reserved ;
u8 tok ;
__le32 fqid ;
u32 reserved2 ;
__le32 fq_byte_cnt ;
__le32 fq_frm_cnt ;
__le64 fqd_ctx ;
u8 fd [ 32 ] ;
} dq ;
struct scn {
u8 verb ;
u8 stat ;
u8 state ;
u8 reserved ;
__le32 rid_tok ;
__le64 ctx ;
} scn ;
} ;
} ;
/* Parsing frame dequeue results */
/* FQ empty */
# define DPAA2_DQ_STAT_FQEMPTY 0x80
/* FQ held active */
# define DPAA2_DQ_STAT_HELDACTIVE 0x40
/* FQ force eligible */
# define DPAA2_DQ_STAT_FORCEELIGIBLE 0x20
/* valid frame */
# define DPAA2_DQ_STAT_VALIDFRAME 0x10
/* FQ ODP enable */
# define DPAA2_DQ_STAT_ODPVALID 0x04
/* volatile dequeue */
# define DPAA2_DQ_STAT_VOLATILE 0x02
/* volatile dequeue command is expired */
# define DPAA2_DQ_STAT_EXPIRED 0x01
# define DQ_FQID_MASK 0x00FFFFFF
# define DQ_FRAME_COUNT_MASK 0x00FFFFFF
/**
* dpaa2_dq_flags ( ) - Get the stat field of dequeue response
* @ dq : the dequeue result .
*/
static inline u32 dpaa2_dq_flags ( const struct dpaa2_dq * dq )
{
return dq - > dq . stat ;
}
/**
* dpaa2_dq_is_pull ( ) - Check whether the dq response is from a pull
* command .
* @ dq : the dequeue result
*
* Return 1 for volatile ( pull ) dequeue , 0 for static dequeue .
*/
static inline int dpaa2_dq_is_pull ( const struct dpaa2_dq * dq )
{
return ( int ) ( dpaa2_dq_flags ( dq ) & DPAA2_DQ_STAT_VOLATILE ) ;
}
/**
* dpaa2_dq_is_pull_complete ( ) - Check whether the pull command is completed .
* @ dq : the dequeue result
*
* Return boolean .
*/
static inline bool dpaa2_dq_is_pull_complete ( const struct dpaa2_dq * dq )
{
return ! ! ( dpaa2_dq_flags ( dq ) & DPAA2_DQ_STAT_EXPIRED ) ;
}
/**
* dpaa2_dq_seqnum ( ) - Get the seqnum field in dequeue response
* @ dq : the dequeue result
*
* seqnum is valid only if VALIDFRAME flag is TRUE
*
* Return seqnum .
*/
static inline u16 dpaa2_dq_seqnum ( const struct dpaa2_dq * dq )
{
return le16_to_cpu ( dq - > dq . seqnum ) ;
}
/**
* dpaa2_dq_odpid ( ) - Get the odpid field in dequeue response
* @ dq : the dequeue result
*
* odpid is valid only if ODPVALID flag is TRUE .
*
* Return odpid .
*/
static inline u16 dpaa2_dq_odpid ( const struct dpaa2_dq * dq )
{
return le16_to_cpu ( dq - > dq . oprid ) ;
}
/**
* dpaa2_dq_fqid ( ) - Get the fqid in dequeue response
* @ dq : the dequeue result
*
* Return fqid .
*/
static inline u32 dpaa2_dq_fqid ( const struct dpaa2_dq * dq )
{
return le32_to_cpu ( dq - > dq . fqid ) & DQ_FQID_MASK ;
}
/**
* dpaa2_dq_byte_count ( ) - Get the byte count in dequeue response
* @ dq : the dequeue result
*
* Return the byte count remaining in the FQ .
*/
static inline u32 dpaa2_dq_byte_count ( const struct dpaa2_dq * dq )
{
return le32_to_cpu ( dq - > dq . fq_byte_cnt ) ;
}
/**
* dpaa2_dq_frame_count ( ) - Get the frame count in dequeue response
* @ dq : the dequeue result
*
* Return the frame count remaining in the FQ .
*/
static inline u32 dpaa2_dq_frame_count ( const struct dpaa2_dq * dq )
{
return le32_to_cpu ( dq - > dq . fq_frm_cnt ) & DQ_FRAME_COUNT_MASK ;
}
/**
* dpaa2_dq_fd_ctx ( ) - Get the frame queue context in dequeue response
* @ dq : the dequeue result
*
* Return the frame queue context .
*/
static inline u64 dpaa2_dq_fqd_ctx ( const struct dpaa2_dq * dq )
{
return le64_to_cpu ( dq - > dq . fqd_ctx ) ;
}
/**
* dpaa2_dq_fd ( ) - Get the frame descriptor in dequeue response
* @ dq : the dequeue result
*
* Return the frame descriptor .
*/
static inline const struct dpaa2_fd * dpaa2_dq_fd ( const struct dpaa2_dq * dq )
{
return ( const struct dpaa2_fd * ) & dq - > dq . fd [ 0 ] ;
}
2018-09-12 11:59:29 +03:00
# define DPAA2_CSCN_SIZE sizeof(struct dpaa2_dq)
# define DPAA2_CSCN_ALIGN 16
# define DPAA2_CSCN_STATE_CG BIT(0)
/**
* dpaa2_cscn_state_congested ( ) - Check congestion state
* @ cscn : congestion SCN ( delivered to WQ or memory )
*
i * Return true is congested .
*/
static inline bool dpaa2_cscn_state_congested ( struct dpaa2_dq * cscn )
{
return ! ! ( cscn - > scn . state & DPAA2_CSCN_STATE_CG ) ;
}
2017-03-13 15:02:00 -04:00
# endif /* __FSL_DPAA2_GLOBAL_H */