linux/drivers/gpu/drm/nouveau/include/nvhw/drf.h

/*
 * Copyright 2019 Red Hat Inc.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 */
#ifndef __NVHW_DRF_H__
#define __NVHW_DRF_H__

/* Helpers common to all DRF accessors. */
#define DRF_LO(drf)
#define DRF_HI(drf)
#define DRF_BITS(drf)
#define DRF_MASK(drf)
#define DRF_SMASK(drf)

/* Helpers for DRF-MW accessors. */
#define DRF_MX_MW(drf)
#define DRF_MX(drf)
#define DRF_MW(drf)
#define DRF_MW_SPANS(o,drf)
#define DRF_MW_SIZE(o)

#define DRF_LW_IDX(o,drf)
#define DRF_LW_LO(o,drf)
#define DRF_LW_HI(o,drf)
#define DRF_LW_BITS(o,drf)
#define DRF_LW_MASK(o,drf)
#define DRF_LW_SMASK(o,drf)
#define DRF_LW_GET(o,drf)
#define DRF_LW_VAL(o,drf,v)
#define DRF_LW_CLR(o,drf)
#define DRF_LW_SET(o,drf,v)

#define DRF_HW_IDX(o,drf)
#define DRF_HW_LO(o,drf)
#define DRF_HW_HI(o,drf)
#define DRF_HW_BITS(o,drf)
#define DRF_HW_MASK(o,drf)
#define DRF_HW_SMASK(o,drf)
#define DRF_HW_GET(o,drf)
#define DRF_HW_VAL(o,drf,v)
#define DRF_HW_CLR(o,drf)
#define DRF_HW_SET(o,drf,v)

/* DRF accessors. */
#define NVVAL_X(drf,v)
#define NVVAL_N(X,d,r,f,  v)
#define NVVAL_I(X,d,r,f,i,v)
#define NVVAL_(X,_1,_2,_3,_4,_5,IMPL,...)
#define NVVAL(A...)

#define NVDEF_N(X,d,r,f,  v)
#define NVDEF_I(X,d,r,f,i,v)
#define NVDEF_(X,_1,_2,_3,_4,_5,IMPL,...)
#define NVDEF(A...)

#define NVVAL_GET_X(o,drf)
#define NVVAL_GET_N(X,o,d,r,f  )
#define NVVAL_GET_I(X,o,d,r,f,i)
#define NVVAL_GET_(X,_1,_2,_3,_4,_5,IMPL,...)
#define NVVAL_GET(A...)

#define NVVAL_TEST_X(o,drf,cmp,drfv)
#define NVVAL_TEST_N(X,o,d,r,f,  cmp,v)
#define NVVAL_TEST_I(X,o,d,r,f,i,cmp,v)
#define NVVAL_TEST_(X,_1,_2,_3,_4,_5,_6,_7,IMPL,...)
#define NVVAL_TEST(A...)

#define NVDEF_TEST_N(X,o,d,r,f,  cmp,v)
#define NVDEF_TEST_I(X,o,d,r,f,i,cmp,v)
#define NVDEF_TEST_(X,_1,_2,_3,_4,_5,_6,_7,IMPL,...)
#define NVDEF_TEST(A...)

#define NVVAL_SET_X(o,drf,v)
#define NVVAL_SET_N(X,o,d,r,f,  v)
#define NVVAL_SET_I(X,o,d,r,f,i,v)
#define NVVAL_SET_(X,_1,_2,_3,_4,_5,_6,IMPL,...)
#define NVVAL_SET(A...)

#define NVDEF_SET_N(X,o,d,r,f,  v)
#define NVDEF_SET_I(X,o,d,r,f,i,v)
#define NVDEF_SET_(X,_1,_2,_3,_4,_5,_6,IMPL,...)
#define NVDEF_SET(A...)

/* DRF-MW accessors. */
#define NVVAL_MW_GET_X(o,drf)
#define NVVAL_MW_GET_N(X,o,d,r,f  )
#define NVVAL_MW_GET_I(X,o,d,r,f,i)
#define NVVAL_MW_GET_(X,_1,_2,_3,_4,_5,IMPL,...)
#define NVVAL_MW_GET(A...)

#define NVVAL_MW_SET_X(o,drf,v)
#define NVVAL_MW_SET_N(X,o,d,r,f,  v)
#define NVVAL_MW_SET_I(X,o,d,r,f,i,v)
#define NVVAL_MW_SET_(X,_1,_2,_3,_4,_5,_6,IMPL,...)
#define NVVAL_MW_SET(A...)

#define NVDEF_MW_SET_N(X,o,d,r,f,  v)
#define NVDEF_MW_SET_I(X,o,d,r,f,i,v)
#define NVDEF_MW_SET_(X,_1,_2,_3,_4,_5,_6,IMPL,...)
#define NVDEF_MW_SET(A...)

/* Helper for reading an arbitrary object. */
#define DRF_RD_X(e,p,o,dr)
#define DRF_RD_N(X,e,p,o,d,r  )
#define DRF_RD_I(X,e,p,o,d,r,i)
#define DRF_RD_(X,_1,_2,_3,_4,_5,_6,IMPL,...)
#define DRF_RD(A...)

/* Helper for writing an arbitrary object. */
#define DRF_WR_X(e,p,o,dr,v)
#define DRF_WR_N(X,e,p,o,d,r,  v)
#define DRF_WR_I(X,e,p,o,d,r,i,v)
#define DRF_WR_(X,_1,_2,_3,_4,_5,_6,_7,IMPL,...)
#define DRF_WR(A...)

/* Helper for modifying an arbitrary object. */
#define DRF_MR_X(er,ew,ty,p,o,dr,m,v)
#define DRF_MR_N(X,er,ew,ty,p,o,d,r  ,m,v)
#define DRF_MR_I(X,er,ew,ty,p,o,d,r,i,m,v)
#define DRF_MR_(X,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,IMPL,...)
#define DRF_MR(A...)

/* Helper for extracting a field value from arbitrary object. */
#define DRF_RV_X(e,p,o,dr,drf)
#define DRF_RV_N(X,e,p,o,d,r,  f)
#define DRF_RV_I(X,e,p,o,d,r,i,f)
#define DRF_RV_(X,_1,_2,_3,_4,_5,_6,_7,IMPL,...)
#define DRF_RV(A...)

/* Helper for writing field value to arbitrary object (all other bits cleared). */
#define DRF_WV_N(X,e,p,o,d,r,  f,v)
#define DRF_WV_I(X,e,p,o,d,r,i,f,v)
#define DRF_WV_(X,_1,_2,_3,_4,_5,_6,_7,_8,IMPL,...)
#define DRF_WV(A...)

/* Helper for writing field definition to arbitrary object (all other bits cleared). */
#define DRF_WD_N(X,e,p,o,d,r,  f,v)
#define DRF_WD_I(X,e,p,o,d,r,i,f,v)
#define DRF_WD_(X,_1,_2,_3,_4,_5,_6,_7,_8,IMPL,...)
#define DRF_WD(A...)

/* Helper for modifying field value in arbitrary object. */
#define DRF_MV_N(X,er,ew,ty,p,o,d,r,  f,v)
#define DRF_MV_I(X,er,ew,ty,p,o,d,r,i,f,v)
#define DRF_MV_(X,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,IMPL,...)
#define DRF_MV(A...)

/* Helper for modifying field definition in arbitrary object. */
#define DRF_MD_N(X,er,ew,ty,p,o,d,r,  f,v)
#define DRF_MD_I(X,er,ew,ty,p,o,d,r,i,f,v)
#define DRF_MD_(X,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,IMPL,...)
#define DRF_MD(A...)

/* Helper for testing against field value in arbitrary object */
#define DRF_TV_N(X,e,p,o,d,r,  f,cmp,v)
#define DRF_TV_I(X,e,p,o,d,r,i,f,cmp,v)
#define DRF_TV_(X,_1,_2,_3,_4,_5,_6,_7,_8,_9,IMPL,...)
#define DRF_TV(A...)

/* Helper for testing against field definition in arbitrary object */
#define DRF_TD_N(X,e,p,o,d,r,  f,cmp,v)
#define DRF_TD_I(X,e,p,o,d,r,i,f,cmp,v)
#define DRF_TD_(X,_1,_2,_3,_4,_5,_6,_7,_8,_9,IMPL,...)
#define DRF_TD(A...)
#endif