15e111ed8SAndrew Rybchenko /* SPDX-License-Identifier: BSD-3-Clause 25e111ed8SAndrew Rybchenko * 3*672386c1SAndrew Rybchenko * Copyright(c) 2019-2021 Xilinx, Inc. 45e111ed8SAndrew Rybchenko * Copyright(c) 2018-2019 Solarflare Communications Inc. 55e111ed8SAndrew Rybchenko */ 65e111ed8SAndrew Rybchenko 75e111ed8SAndrew Rybchenko #ifndef _SYS_EFX_ANNOTE_H 85e111ed8SAndrew Rybchenko #define _SYS_EFX_ANNOTE_H 95e111ed8SAndrew Rybchenko 105e111ed8SAndrew Rybchenko #if defined(_WIN32) || defined(_WIN64) 115e111ed8SAndrew Rybchenko #define EFX_HAVE_WINDOWS_ANNOTATIONS 1 125e111ed8SAndrew Rybchenko #else 135e111ed8SAndrew Rybchenko #define EFX_HAVE_WINDOWS_ANNOTATIONS 0 145e111ed8SAndrew Rybchenko #endif /* defined(_WIN32) || defined(_WIN64) */ 155e111ed8SAndrew Rybchenko 165e111ed8SAndrew Rybchenko #if defined(__sun) 175e111ed8SAndrew Rybchenko #define EFX_HAVE_SOLARIS_ANNOTATIONS 1 185e111ed8SAndrew Rybchenko #else 195e111ed8SAndrew Rybchenko #define EFX_HAVE_SOLARIS_ANNOTATIONS 0 205e111ed8SAndrew Rybchenko #endif /* defined(__sun) */ 215e111ed8SAndrew Rybchenko 225e111ed8SAndrew Rybchenko #if !EFX_HAVE_WINDOWS_ANNOTATIONS 235e111ed8SAndrew Rybchenko 245e111ed8SAndrew Rybchenko /* Ignore Windows SAL annotations on other platforms */ 255e111ed8SAndrew Rybchenko #define __in 265e111ed8SAndrew Rybchenko #define __in_opt 275e111ed8SAndrew Rybchenko #define __in_ecount(_n) 285e111ed8SAndrew Rybchenko #define __in_ecount_opt(_n) 295e111ed8SAndrew Rybchenko #define __in_bcount(_n) 305e111ed8SAndrew Rybchenko #define __in_bcount_opt(_n) 315e111ed8SAndrew Rybchenko 325e111ed8SAndrew Rybchenko #define __out 335e111ed8SAndrew Rybchenko #define __out_opt 345e111ed8SAndrew Rybchenko #define __out_ecount(_n) 355e111ed8SAndrew Rybchenko #define __out_ecount_opt(_n) 365e111ed8SAndrew Rybchenko #define __out_ecount_part(_n, _l) 375e111ed8SAndrew Rybchenko #define __out_bcount(_n) 385e111ed8SAndrew Rybchenko #define __out_bcount_opt(_n) 395e111ed8SAndrew Rybchenko #define __out_bcount_part(_n, _l) 405e111ed8SAndrew Rybchenko #define __out_bcount_part_opt(_n, _l) 415e111ed8SAndrew Rybchenko 425e111ed8SAndrew Rybchenko #define __deref_out 435e111ed8SAndrew Rybchenko #define __deref_inout 445e111ed8SAndrew Rybchenko 455e111ed8SAndrew Rybchenko #define __inout 465e111ed8SAndrew Rybchenko #define __inout_opt 475e111ed8SAndrew Rybchenko #define __inout_ecount(_n) 485e111ed8SAndrew Rybchenko #define __inout_ecount_opt(_n) 495e111ed8SAndrew Rybchenko #define __inout_bcount(_n) 505e111ed8SAndrew Rybchenko #define __inout_bcount_opt(_n) 515e111ed8SAndrew Rybchenko #define __inout_bcount_full_opt(_n) 525e111ed8SAndrew Rybchenko 535e111ed8SAndrew Rybchenko #define __deref_out_bcount_opt(n) 545e111ed8SAndrew Rybchenko 555e111ed8SAndrew Rybchenko #define __checkReturn 565e111ed8SAndrew Rybchenko #define __success(_x) 575e111ed8SAndrew Rybchenko 585e111ed8SAndrew Rybchenko #define __drv_when(_p, _c) 595e111ed8SAndrew Rybchenko 605e111ed8SAndrew Rybchenko #endif /* !EFX_HAVE_WINDOWS_ANNOTATIONS */ 615e111ed8SAndrew Rybchenko 625e111ed8SAndrew Rybchenko #if !EFX_HAVE_SOLARIS_ANNOTATIONS 635e111ed8SAndrew Rybchenko 645e111ed8SAndrew Rybchenko #if EFX_HAVE_WINDOWS_ANNOTATIONS 655e111ed8SAndrew Rybchenko 665e111ed8SAndrew Rybchenko /* 675e111ed8SAndrew Rybchenko * Support some SunOS/Solaris style _NOTE() annotations 685e111ed8SAndrew Rybchenko * 695e111ed8SAndrew Rybchenko * At present with the facilities provided in the WDL and the SAL we can only 705e111ed8SAndrew Rybchenko * easily act upon _NOTE(ARGUNUSED(arglist)) annotations. 715e111ed8SAndrew Rybchenko * 725e111ed8SAndrew Rybchenko * Intermediate macros to expand individual _NOTE annotation types into 735e111ed8SAndrew Rybchenko * something the WDK or SAL can understand. They shouldn't be used directly, 745e111ed8SAndrew Rybchenko * for example EFX_NOTE_ARGUNUSED() is only used as an intermediate step on the 755e111ed8SAndrew Rybchenko * transformation of _NOTE(ARGUNSED(arg1, arg2)) into 765e111ed8SAndrew Rybchenko * UNREFERENCED_PARAMETER((arg1, arg2)); 775e111ed8SAndrew Rybchenko */ 785e111ed8SAndrew Rybchenko #define EFX_NOTE_ALIGNMENT(_fname, _n) 795e111ed8SAndrew Rybchenko #define EFX_NOTE_ARGUNUSED(...) UNREFERENCED_PARAMETER((__VA_ARGS__)); 805e111ed8SAndrew Rybchenko #define EFX_NOTE_CONSTANTCONDITION 815e111ed8SAndrew Rybchenko #define EFX_NOTE_CONSTCOND 825e111ed8SAndrew Rybchenko #define EFX_NOTE_EMPTY 835e111ed8SAndrew Rybchenko #define EFX_NOTE_FALLTHROUGH 845e111ed8SAndrew Rybchenko #define EFX_NOTE_FALLTHRU 855e111ed8SAndrew Rybchenko #define EFX_NOTE_LINTED(_msg) 865e111ed8SAndrew Rybchenko #define EFX_NOTE_NOTREACHED 875e111ed8SAndrew Rybchenko #define EFX_NOTE_PRINTFLIKE(_n) 885e111ed8SAndrew Rybchenko #define EFX_NOTE_SCANFLIKE(_n) 895e111ed8SAndrew Rybchenko #define EFX_NOTE_VARARGS(_n) 905e111ed8SAndrew Rybchenko 915e111ed8SAndrew Rybchenko #define _NOTE(_annotation) EFX_NOTE_ ## _annotation 925e111ed8SAndrew Rybchenko 935e111ed8SAndrew Rybchenko #else 945e111ed8SAndrew Rybchenko 955e111ed8SAndrew Rybchenko /* Ignore Solaris annotations on other platforms */ 965e111ed8SAndrew Rybchenko 975e111ed8SAndrew Rybchenko #define _NOTE(_annotation) 985e111ed8SAndrew Rybchenko 995e111ed8SAndrew Rybchenko #endif /* EFX_HAVE_WINDOWS_ANNOTATIONS */ 1005e111ed8SAndrew Rybchenko 1015e111ed8SAndrew Rybchenko #endif /* !EFX_HAVE_SOLARIS_ANNOTATIONS */ 1025e111ed8SAndrew Rybchenko 1035e111ed8SAndrew Rybchenko #endif /* _SYS_EFX_ANNOTE_H */ 104