Blame view

include/drm/drm_os_linux.h 3.39 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
  /**
   * \file drm_os_linux.h
   * OS abstraction macros.
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
5
6
  #include <linux/interrupt.h>	/* For task queue support */
  #include <linux/delay.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
7
  /** Current process ID */
ba25f9dcc   Pavel Emelyanov   Use helpers to ob...
8
  #define DRM_CURRENTPID			task_pid_nr(current)
925142431   Dave Airlie   drm: update VIA d...
9
  #define DRM_SUSER(p)			capable(CAP_SYS_ADMIN)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
  #define DRM_UDELAY(d)			udelay(d)
  /** Read a byte from a MMIO region */
  #define DRM_READ8(map, offset)		readb(((void __iomem *)(map)->handle) + (offset))
  /** Read a word from a MMIO region */
  #define DRM_READ16(map, offset)         readw(((void __iomem *)(map)->handle) + (offset))
  /** Read a dword from a MMIO region */
  #define DRM_READ32(map, offset)		readl(((void __iomem *)(map)->handle) + (offset))
  /** Write a byte into a MMIO region */
  #define DRM_WRITE8(map, offset, val)	writeb(val, ((void __iomem *)(map)->handle) + (offset))
  /** Write a word into a MMIO region */
  #define DRM_WRITE16(map, offset, val)   writew(val, ((void __iomem *)(map)->handle) + (offset))
  /** Write a dword into a MMIO region */
  #define DRM_WRITE32(map, offset, val)	writel(val, ((void __iomem *)(map)->handle) + (offset))
  /** Read memory barrier */
  #define DRM_READMEMORYBARRIER()		rmb()
  /** Write memory barrier */
  #define DRM_WRITEMEMORYBARRIER()	wmb()
  /** Read/write memory barrier */
  #define DRM_MEMORYBARRIER()		mb()
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
29
30
  
  /** IRQ handler arguments and return type and values */
7d12e780e   David Howells   IRQ: Maintain reg...
31
  #define DRM_IRQ_ARGS		int irq, void *arg
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
32
33
34
35
36
37
38
39
  
  /** AGP types */
  #if __OS_HAS_AGP
  #define DRM_AGP_MEM		struct agp_memory
  #define DRM_AGP_KERN		struct agp_kern_info
  #else
  /* define some dummy types for non AGP supporting kernels */
  struct no_agp_kern {
b5e89ed53   Dave Airlie   drm: lindent the ...
40
41
  	unsigned long aper_base;
  	unsigned long aper_size;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
42
43
44
45
46
47
  };
  #define DRM_AGP_MEM             int
  #define DRM_AGP_KERN            struct no_agp_kern
  #endif
  
  #if !(__OS_HAS_MTRR)
b5e89ed53   Dave Airlie   drm: lindent the ...
48
49
  static __inline__ int mtrr_add(unsigned long base, unsigned long size,
  			       unsigned int type, char increment)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
50
51
52
  {
  	return -ENODEV;
  }
b5e89ed53   Dave Airlie   drm: lindent the ...
53
  static __inline__ int mtrr_del(int reg, unsigned long base, unsigned long size)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
54
55
56
  {
  	return -ENODEV;
  }
b5e89ed53   Dave Airlie   drm: lindent the ...
57

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
58
59
60
  #define MTRR_TYPE_WRCOMB     1
  
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
61
62
63
64
65
66
67
  /** Other copying of data to kernel space */
  #define DRM_COPY_FROM_USER(arg1, arg2, arg3)		\
  	copy_from_user(arg1, arg2, arg3)
  /** Other copying of data from kernel space */
  #define DRM_COPY_TO_USER(arg1, arg2, arg3)		\
  	copy_to_user(arg1, arg2, arg3)
  /* Macros for copyfrom user, but checking readability only once */
bc5f4523f   Dave Airlie   drm: run cleanfil...
68
  #define DRM_VERIFYAREA_READ( uaddr, size )		\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
69
  	(access_ok( VERIFY_READ, uaddr, size ) ? 0 : -EFAULT)
bc5f4523f   Dave Airlie   drm: run cleanfil...
70
  #define DRM_COPY_FROM_USER_UNCHECKED(arg1, arg2, arg3)	\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
71
72
73
74
75
  	__copy_from_user(arg1, arg2, arg3)
  #define DRM_COPY_TO_USER_UNCHECKED(arg1, arg2, arg3)	\
  	__copy_to_user(arg1, arg2, arg3)
  #define DRM_GET_USER_UNCHECKED(val, uaddr)		\
  	__get_user(val, uaddr)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
  #define DRM_HZ HZ
  
  #define DRM_WAIT_ON( ret, queue, timeout, condition )		\
  do {								\
  	DECLARE_WAITQUEUE(entry, current);			\
  	unsigned long end = jiffies + (timeout);		\
  	add_wait_queue(&(queue), &entry);			\
  								\
  	for (;;) {						\
  		__set_current_state(TASK_INTERRUPTIBLE);	\
  		if (condition)					\
  			break;					\
  		if (time_after_eq(jiffies, end)) {		\
  			ret = -EBUSY;				\
  			break;					\
  		}						\
  		schedule_timeout((HZ/100 > 1) ? HZ/100 : 1);	\
  		if (signal_pending(current)) {			\
  			ret = -EINTR;				\
  			break;					\
  		}						\
  	}							\
  	__set_current_state(TASK_RUNNING);			\
  	remove_wait_queue(&(queue), &entry);			\
  } while (0)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
101
102
  #define DRM_WAKEUP( queue ) wake_up_interruptible( queue )
  #define DRM_INIT_WAITQUEUE( queue ) init_waitqueue_head( queue )