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