1/*	$NetBSD: os_types.h,v 1.4 2022/07/24 20:05:08 riastradh Exp $	*/
2
3/*
4 * Copyright 2012-16 Advanced Micro Devices, Inc.
5 * Copyright 2019 Raptor Engineering, LLC
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included in
15 * all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * OTHER DEALINGS IN THE SOFTWARE.
24 *
25 * Authors: AMD
26 *
27 */
28
29#ifndef _OS_TYPES_H_
30#define _OS_TYPES_H_
31
32#include <linux/kgdb.h>
33#include <linux/kref.h>
34#include <linux/types.h>
35#include <linux/slab.h>
36
37#include <asm/byteorder.h>
38
39#include <drm/drm_print.h>
40
41#include "cgs_common.h"
42
43#if defined(__BIG_ENDIAN) && !defined(BIGENDIAN_CPU)
44#define BIGENDIAN_CPU
45#elif defined(__LITTLE_ENDIAN) && !defined(LITTLEENDIAN_CPU)
46#define LITTLEENDIAN_CPU
47#endif
48
49#undef FRAME_SIZE
50
51#define dm_output_to_console(fmt, ...) DRM_DEBUG_KMS(fmt, ##__VA_ARGS__)
52
53#define dm_error(fmt, ...) DRM_ERROR(fmt, ##__VA_ARGS__)
54
55#if defined(CONFIG_DRM_AMD_DC_DCN)
56#ifdef __NetBSD__
57#if defined(__i386__) || defined(__x86_64__)
58#include <x86/fpu.h>
59#define	DC_FP_START()	fpu_kern_enter()
60#define	DC_FP_END()	fpu_kern_leave()
61#elif defined(__arm__) || defined(__aarch64__)
62#include <arm/fpu.h>
63#define	DC_FP_START()	fpu_kern_enter()
64#define	DC_FP_END()	fpu_kern_leave()
65#endif
66#else	/* !__NetBSD__ */
67#if defined(CONFIG_X86)
68#include <asm/fpu/api.h>
69#define DC_FP_START() kernel_fpu_begin()
70#define DC_FP_END() kernel_fpu_end()
71#elif defined(CONFIG_PPC64)
72#include <asm/switch_to.h>
73#include <asm/cputable.h>
74#define DC_FP_START() { \
75	if (cpu_has_feature(CPU_FTR_VSX_COMP)) { \
76		preempt_disable(); \
77		enable_kernel_vsx(); \
78	} else if (cpu_has_feature(CPU_FTR_ALTIVEC_COMP)) { \
79		preempt_disable(); \
80		enable_kernel_altivec(); \
81	} else if (!cpu_has_feature(CPU_FTR_FPU_UNAVAILABLE)) { \
82		preempt_disable(); \
83		enable_kernel_fp(); \
84	} \
85}
86#define DC_FP_END() { \
87	if (cpu_has_feature(CPU_FTR_VSX_COMP)) { \
88		disable_kernel_vsx(); \
89		preempt_enable(); \
90	} else if (cpu_has_feature(CPU_FTR_ALTIVEC_COMP)) { \
91		disable_kernel_altivec(); \
92		preempt_enable(); \
93	} else if (!cpu_has_feature(CPU_FTR_FPU_UNAVAILABLE)) { \
94		disable_kernel_fp(); \
95		preempt_enable(); \
96	} \
97}
98#endif
99#endif
100#endif
101
102/*
103 *
104 * general debug capabilities
105 *
106 */
107#if defined(CONFIG_HAVE_KGDB) || defined(CONFIG_KGDB)
108#define ASSERT_CRITICAL(expr) do {	\
109	if (WARN_ON(!(expr))) { \
110		kgdb_breakpoint(); \
111	} \
112} while (0)
113#else
114#define ASSERT_CRITICAL(expr) do {	\
115	if (WARN_ON(!(expr))) { \
116		; \
117	} \
118} while (0)
119#endif
120
121#if defined(CONFIG_DEBUG_KERNEL_DC)
122#define ASSERT(expr) ASSERT_CRITICAL(expr)
123
124#else
125#define ASSERT(expr) WARN_ON(!(expr))
126#endif
127
128#define BREAK_TO_DEBUGGER() ASSERT(0)
129
130#define DC_ERR(...)  do { \
131	dm_error(__VA_ARGS__); \
132	BREAK_TO_DEBUGGER(); \
133} while (0)
134
135#endif /* _OS_TYPES_H_ */
136