linux/drivers/gpu/drm/nouveau/include/nvif/push.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 __NVIF_PUSH_H__
#define __NVIF_PUSH_H__
#include <nvif/mem.h>
#include <nvif/printf.h>

#include <nvhw/drf.h>

struct nvif_push {};

static inline __must_check int
PUSH_WAIT(struct nvif_push *push, u32 size)
{}

static inline int
PUSH_KICK(struct nvif_push *push)
{}

#ifdef CONFIG_NOUVEAU_DEBUG_PUSH
#define PUSH_PRINTF(p,f,a...)
#define PUSH_ASSERT_ON(a,b)
#else
#define PUSH_PRINTF
#define PUSH_ASSERT_ON
#endif

#define PUSH_ASSERT(a,b)

#define PUSH_DATA__(p,d,f,a...)

#define PUSH_DATA_(X,p,m,i0,i1,d,s,f,a...)
#define PUSH_DATA(p,d)

//XXX: error-check this against *real* pushbuffer end?
#define PUSH_RSVD(p,d)

#ifdef CONFIG_NOUVEAU_DEBUG_PUSH
#define PUSH_DATAp(X,p,m,i,o,d,s,f,a...)
#else
#define PUSH_DATAp
#endif

#define PUSH_1(X,f,ds,n,o,p,s,mA,dA)
#define PUSH_2(X,f,ds,n,o,p,s,mB,dB,mA,dA,a...)
#define PUSH_3(X,f,ds,n,o,p,s,mB,dB,mA,dA,a...)
#define PUSH_4(X,f,ds,n,o,p,s,mB,dB,mA,dA,a...)
#define PUSH_5(X,f,ds,n,o,p,s,mB,dB,mA,dA,a...)
#define PUSH_6(X,f,ds,n,o,p,s,mB,dB,mA,dA,a...)
#define PUSH_7(X,f,ds,n,o,p,s,mB,dB,mA,dA,a...)
#define PUSH_8(X,f,ds,n,o,p,s,mB,dB,mA,dA,a...)
#define PUSH_9(X,f,ds,n,o,p,s,mB,dB,mA,dA,a...)
#define PUSH_10(X,f,ds,n,o,p,s,mB,dB,mA,dA,a...)

#define PUSH_1D(X,o,p,s,mA,dA)
#define PUSH_2D(X,o,p,s,mA,dA,mB,dB)
#define PUSH_3D(X,o,p,s,mA,dA,mB,dB,mC,dC)
#define PUSH_4D(X,o,p,s,mA,dA,mB,dB,mC,dC,mD,dD)
#define PUSH_5D(X,o,p,s,mA,dA,mB,dB,mC,dC,mD,dD,mE,dE)
#define PUSH_6D(X,o,p,s,mA,dA,mB,dB,mC,dC,mD,dD,mE,dE,mF,dF)
#define PUSH_7D(X,o,p,s,mA,dA,mB,dB,mC,dC,mD,dD,mE,dE,mF,dF,mG,dG)
#define PUSH_8D(X,o,p,s,mA,dA,mB,dB,mC,dC,mD,dD,mE,dE,mF,dF,mG,dG,mH,dH)
#define PUSH_9D(X,o,p,s,mA,dA,mB,dB,mC,dC,mD,dD,mE,dE,mF,dF,mG,dG,mH,dH,mI,dI)
#define PUSH_10D(X,o,p,s,mA,dA,mB,dB,mC,dC,mD,dD,mE,dE,mF,dF,mG,dG,mH,dH,mI,dI,mJ,dJ)

#define PUSH_1P(X,o,p,s,mA,dp,ds)
#define PUSH_2P(X,o,p,s,mA,dA,mB,dp,ds)
#define PUSH_3P(X,o,p,s,mA,dA,mB,dB,mC,dp,ds)

#define PUSH_(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,IMPL,...)
#define PUSH(A...)

#define PUSH_NVIM(p,c,m,d)
#define PUSH_NVSQ(A...)
#define PUSH_NV1I(A...)
#define PUSH_NVNI(A...)


#define PUSH_NV_1(X,o,p,c,mA,d...)
#define PUSH_NV_2(X,o,p,c,mA,dA,mB,d...)
#define PUSH_NV_3(X,o,p,c,mA,dA,mB,dB,mC,d...)
#define PUSH_NV_4(X,o,p,c,mA,dA,mB,dB,mC,dC,mD,d...)
#define PUSH_NV_5(X,o,p,c,mA,dA,mB,dB,mC,dC,mD,dD,mE,d...)
#define PUSH_NV_6(X,o,p,c,mA,dA,mB,dB,mC,dC,mD,dD,mE,dE,mF,d...)
#define PUSH_NV_7(X,o,p,c,mA,dA,mB,dB,mC,dC,mD,dD,mE,dE,mF,dF,mG,d...)
#define PUSH_NV_8(X,o,p,c,mA,dA,mB,dB,mC,dC,mD,dD,mE,dE,mF,dF,mG,dG,mH,d...)
#define PUSH_NV_9(X,o,p,c,mA,dA,mB,dB,mC,dC,mD,dD,mE,dE,mF,dF,mG,dG,mH,dH,mI,d...)
#define PUSH_NV_10(X,o,p,c,mA,dA,mB,dB,mC,dC,mD,dD,mE,dE,mF,dF,mG,dG,mH,dH,mI,dI,mJ,d...)

#define PUSH_NV_(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,IMPL,...)
#define PUSH_NV(A...)

#define PUSH_IMMD(A...)
#define PUSH_MTHD(A...)
#define PUSH_1INC(A...)
#define PUSH_NINC(A...)
#endif