xref: /dragonfly/sys/dev/drm/include/drm/drm_os_linux.h (revision 65867155)
1 /**
2  * \file drm_os_dragonfly.h
3  * OS abstraction macros.
4  */
5 
6 #include <sys/param.h>
7 #include <sys/endian.h>
8 #include <sys/systm.h>
9 #include <sys/serialize.h>
10 
11 /* Handle the DRM options from kernel config. */
12 #ifdef __DragonFly__
13 #include "opt_drm.h"
14 
15 #ifdef DRM_DEBUG
16 #  if DRM_DEBUG>1
17 #    define DRM_DEBUG_DEFAULT_ON 2
18 #  else
19 #    define DRM_DEBUG_DEFAULT_ON 1
20 #  endif
21 #undef DRM_DEBUG
22 /* XXX disable DRM_LINUX for now to unbreak LINT64 */
23 #undef DRM_LINUX
24 #endif /* DRM_DEBUG */
25 #endif
26 
27 /** Current process ID */
28 #define DRM_CURRENTPID		(curproc != NULL ? curproc->p_pid : -1)
29 #define DRM_UDELAY(d)		DELAY(d)
30 /** Read a byte from a MMIO region */
31 #define DRM_READ8(map, offset)						\
32 	*(volatile u_int8_t *)(((vm_offset_t)(map)->handle) +		\
33 	    (vm_offset_t)(offset))
34 #define DRM_READ16(map, offset)						\
35 	le16toh(*(volatile u_int16_t *)(((vm_offset_t)(map)->handle) +	\
36 	    (vm_offset_t)(offset)))
37 #define DRM_READ32(map, offset)						\
38 	le32toh(*(volatile u_int32_t *)(((vm_offset_t)(map)->handle) +	\
39 	    (vm_offset_t)(offset)))
40 #define DRM_READ64(map, offset)						\
41 	le64toh(*(volatile u_int64_t *)(((vm_offset_t)(map)->handle) +	\
42 	    (vm_offset_t)(offset)))
43 #define DRM_WRITE8(map, offset, val)					\
44 	*(volatile u_int8_t *)(((vm_offset_t)(map)->handle) +		\
45 	    (vm_offset_t)(offset)) = val
46 #define DRM_WRITE16(map, offset, val)					\
47 	*(volatile u_int16_t *)(((vm_offset_t)(map)->handle) +		\
48 	    (vm_offset_t)(offset)) = htole16(val)
49 
50 #define DRM_WRITE32(map, offset, val)					\
51 	*(volatile u_int32_t *)(((vm_offset_t)(map)->handle) +		\
52 	    (vm_offset_t)(offset)) = htole32(val)
53 
54 #define DRM_WRITE64(map, offset, val)					\
55 	*(volatile u_int64_t *)(((vm_offset_t)(map)->handle) +		\
56 	    (vm_offset_t)(offset)) = htole64(val)
57 
58 /* Returns -errno to shared code */
59 #define DRM_WAIT_ON( ret, queue, timeout, condition )		\
60 for ( ret = 0 ; !ret && !(condition) ; ) {			\
61 	lwkt_serialize_enter(&dev->irq_lock);			\
62 	if (!(condition)) {					\
63 		tsleep_interlock(&(queue), PCATCH);		\
64 		lwkt_serialize_exit(&dev->irq_lock);		\
65 		ret = -tsleep(&(queue), PCATCH | PINTERLOCKED,	\
66 			  "drmwtq", (timeout));			\
67 	} else {						\
68 		lwkt_serialize_exit(&dev->irq_lock);		\
69 	}							\
70 }
71 
72 /* include code to override EDID blocks from external firmware modules */
73 #define CONFIG_DRM_LOAD_EDID_FIRMWARE
74