Contents of /trunk/ati-drivers/patches/fglrx-2.6.14-compat_ioctl.patch
Parent Directory | Revision Log
Revision 144 -
(show annotations)
(download)
Tue May 8 20:06:05 2007 UTC (17 years, 4 months ago) by niro
File size: 3227 byte(s)
Tue May 8 20:06:05 2007 UTC (17 years, 4 months ago) by niro
File size: 3227 byte(s)
-import
1 | --- build_mod.orig/firegl_public.c 2005-11-02 20:29:43.535048712 -0800 |
2 | +++ build_mod/firegl_public.c 2005-11-02 20:27:19.013019400 -0800 |
3 | @@ -122,7 +122,6 @@ |
4 | |
5 | #ifdef __x86_64__ |
6 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12) |
7 | -#include "linux/ioctl32.h" |
8 | #else |
9 | #include "asm/ioctl32.h" |
10 | #endif |
11 | @@ -191,6 +190,16 @@ _syscall3( int, modify_ldt, int, func, v |
12 | // ============================================================ |
13 | /* globals */ |
14 | |
15 | +int register_ioctl32_conversion(unsigned int cmd, int (*handler)(unsigned int, unsigned int, unsigned long, struct file*)); |
16 | +long realHandler_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg); |
17 | +void unregister_ioctl32_conversion(unsigned int cmd); |
18 | +struct HandlerList { |
19 | + unsigned int cmd; |
20 | + void *handler; |
21 | + struct HandlerList *next; |
22 | +}; |
23 | +struct HandlerList *HandlerListHead = 0x0; |
24 | + |
25 | char* firegl = NULL; |
26 | int __ke_debuglevel = 0; |
27 | int __ke_moduleflags = 0; |
28 | @@ -258,6 +267,7 @@ static struct file_operations firegl_fop |
29 | open: ip_firegl_open, |
30 | release: ip_firegl_release, |
31 | ioctl: ip_firegl_ioctl, |
32 | + compat_ioctl: realHandler_compat_ioctl, |
33 | mmap: ip_firegl_mmap, |
34 | }; |
35 | |
36 | @@ -2220,10 +2230,68 @@ int ATI_API_CALL __ke_register_ioctl32_c |
37 | return register_ioctl32_conversion(cmd, handler); |
38 | } |
39 | |
40 | + |
41 | + int register_ioctl32_conversion(unsigned int cmd, int (*handler)(unsigned int, unsigned int, unsigned long, struct file*)) |
42 | + { |
43 | + sizeof(struct HandlerList); |
44 | + struct HandlerList *newHandler = kmalloc(sizeof(struct HandlerList), 0); |
45 | + newHandler->cmd = cmd; |
46 | + newHandler->handler = handler; |
47 | + newHandler->next = HandlerListHead; |
48 | + HandlerListHead = newHandler; |
49 | + return 0; |
50 | + } |
51 | + |
52 | + long realHandler_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) |
53 | + { |
54 | + int fd; |
55 | + int (*handler)(unsigned int, unsigned int, unsigned long, struct file*); |
56 | + struct fdtable *fdt; |
57 | + struct HandlerList *HandlerEntry = HandlerListHead; |
58 | + |
59 | + while(HandlerEntry->cmd != cmd){ |
60 | + if(HandlerEntry->next == 0x0){ |
61 | + return -1; |
62 | + } |
63 | + HandlerEntry = HandlerEntry->next; |
64 | + } |
65 | + handler = HandlerEntry->handler; |
66 | + fdt = files_fdtable(current->files); |
67 | + for(fd=0;fd<fdt->max_fds;fd++){ |
68 | + if(fdt->fd[fd] == filp){ |
69 | + return handler(fd, cmd, arg, filp); |
70 | + } |
71 | + } |
72 | + return -1; |
73 | +} |
74 | + |
75 | + |
76 | + |
77 | void ATI_API_CALL __ke_unregister_ioctl32_conversion(unsigned int cmd) |
78 | { |
79 | unregister_ioctl32_conversion(cmd); |
80 | } |
81 | + |
82 | + void unregister_ioctl32_conversion(unsigned int cmd) |
83 | + { |
84 | + struct HandlerList *ahead, *behind; |
85 | + if(HandlerListHead == 0x0) return; |
86 | + behind = HandlerListHead; |
87 | + ahead = HandlerListHead->next; |
88 | + if(behind->cmd == cmd){ |
89 | + HandlerListHead = ahead; |
90 | + kfree(behind); |
91 | + return; |
92 | + } |
93 | + while(ahead->cmd != cmd){ |
94 | + behind = ahead; |
95 | + ahead = ahead->next; |
96 | + } |
97 | + behind->next = ahead->next; |
98 | + kfree(ahead); |
99 | + return; |
100 | + } |
101 | + |
102 | #endif |
103 | |
104 | /* agp_memory related routine for IGP */ |
Properties
Name | Value |
---|---|
svn:executable | * |