1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #define ALLOW_SELECT
30
31 #include <linux/param.h>
32 #include <linux/types.h>
33 #include <linux/errno.h>
34 #include <linux/signal.h>
35 #include <linux/fcntl.h>
36 #include <linux/sched.h>
37 #include <linux/timer.h>
38 #include <linux/tty.h>
39 #include <linux/ctype.h>
40 #include <asm/io.h>
41 #include <asm/segment.h>
42 #include <asm/system.h>
43 #include <asm/dma.h>
44 #include <sys/kd.h>
45 #include <linux/wait.h>
46 #include <linux/malloc.h>
47 #include <linux/soundcard.h>
48
49 typedef char snd_rw_buf;
50
51 #define FALSE 0
52 #define TRUE 1
53
54 #define COPY_FROM_USER(d, s, o, c) memcpy_fromfs((d), &((s)[o]), (c))
55 #define COPY_TO_USER(d, o, s, c) memcpy_tofs(&((d)[o]), (s), (c))
56 #define IOCTL_FROM_USER(d, s, o, c) memcpy_fromfs((d), &((s)[o]), (c))
57 #define IOCTL_TO_USER(d, o, s, c) memcpy_tofs(&((d)[o]), (s), (c))
58
59 #define GET_BYTE_FROM_USER(target, addr, offs) target = get_fs_byte(&((addr)[offs]))
60 #define GET_SHORT_FROM_USER(target, addr, offs) target = get_fs_word(&((addr)[offs]))
61 #define GET_WORD_FROM_USER(target, addr, offs) target = get_fs_long((long*)&((addr)[offs]))
62 #define PUT_WORD_TO_USER(addr, offs, data) put_fs_long(data, (long*)&((addr)[offs]))
63 #define IOCTL_IN(arg) get_fs_long((long *)(arg))
64 #define IOCTL_OUT(arg, ret) snd_ioctl_return((int *)arg, ret)
65
66 struct snd_wait {
67 int mode; int aborting;
68 };
69
70 #define DEFINE_WAIT_QUEUE(name, flag) static struct wait_queue *name = NULL; \
71 static volatile struct snd_wait flag = {0}
72 #define DEFINE_WAIT_QUEUES(name, flag) static struct wait_queue *name = {NULL}; \
73 static volatile struct snd_wait flag = {{0}}
74 #define RESET_WAIT_QUEUE(q, f) {f.aborting = 0;f.mode = WK_NONE;}
75 #define PROCESS_ABORTING(q, f) (f.aborting | (current->signal & ~current->blocked))
76 #define SET_ABORT_FLAG(q, f) f.aborting = 1
77 #define TIMED_OUT(q, f) (f.mode & WK_TIMEOUT)
78 #define DO_SLEEP(q, f, time_limit) \
79 { unsigned long tl;\
80 if (time_limit) tl = current->timeout = jiffies + (time_limit); \
81 else tl = 0xffffffff; \
82 f.mode = WK_SLEEP;interruptible_sleep_on(&q); \
83 if (!(f.mode & WK_WAKEUP)) \
84 { \
85 if (current->signal & ~current->blocked) \
86 f.aborting = 1; \
87 else \
88 if (jiffies >= tl) f.mode |= WK_TIMEOUT; \
89 } \
90 f.mode &= ~WK_SLEEP; \
91 }
92 #define SOMEONE_WAITING(q, f) (f.mode & WK_SLEEP)
93 #define WAKE_UP(q, f) {f.mode = WK_WAKEUP;wake_up(&q);}
94
95 #define ALLOC_DMA_CHN(chn) request_dma(chn)
96 #define RELEASE_DMA_CHN(chn) free_dma(chn)
97
98 #define GET_TIME() jiffies
99 #define RELEASE_IRQ free_irq
100 #define RET_ERROR(err) -err
101
102
103
104
105
106
107 #define DISABLE_INTR(flags) __asm__ __volatile__("pushfl ; popl %0 ; cli":"=r" (flags));
108 #define RESTORE_INTR(flags) __asm__ __volatile__("pushl %0 ; popfl": \
109 :"r" (flags));
110
111
112
113
114
115
116
117
118
119 #define KERNEL_MALLOC(nbytes) kmalloc(nbytes, GFP_KERNEL)
120 #define KERNEL_FREE(addr) kfree(addr)
121
122
123
124
125
126
127
128
129
130
131 #define PERMANENT_MALLOC(typecast, mem_ptr, size, linux_ptr) \
132 {mem_ptr = (typecast)linux_ptr; \
133 linux_ptr += (size);}
134
135
136
137
138
139
140
141 #define DEFINE_TIMER(name, proc) \
142 static struct timer_list name = \
143 {NULL, 0, 0, proc}
144
145
146
147
148
149 #define ACTIVATE_TIMER(name, proc, time) \
150 {name.expires = time; \
151 add_timer (&name);}
152
153 #define INB inb
154 #define OUTB outb