Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
ff3c0388
Commit
ff3c0388
authored
Jun 06, 2004
by
Steve French
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://linux.bkbits.net/linux-2.5
into hostme.bitkeeper.com:/repos/c/cifs/linux-2.5cifs
parents
6ecc87a7
501a9693
Changes
96
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
96 changed files
with
1382 additions
and
1192 deletions
+1382
-1192
Documentation/kernel-parameters.txt
Documentation/kernel-parameters.txt
+2
-2
arch/arm/mm/fault-armv.c
arch/arm/mm/fault-armv.c
+13
-1
arch/arm/mm/proc-syms.c
arch/arm/mm/proc-syms.c
+0
-3
arch/arm/tools/mach-types
arch/arm/tools/mach-types
+15
-2
arch/i386/kernel/dmi_scan.c
arch/i386/kernel/dmi_scan.c
+1
-0
arch/ppc/mm/tlb.c
arch/ppc/mm/tlb.c
+11
-0
drivers/char/synclink.c
drivers/char/synclink.c
+1
-1
drivers/input/Kconfig
drivers/input/Kconfig
+8
-1
drivers/input/evbug.c
drivers/input/evbug.c
+7
-7
drivers/input/evdev.c
drivers/input/evdev.c
+4
-4
drivers/input/gameport/cs461x.c
drivers/input/gameport/cs461x.c
+15
-15
drivers/input/gameport/emu10k1-gp.c
drivers/input/gameport/emu10k1-gp.c
+6
-6
drivers/input/gameport/fm801-gp.c
drivers/input/gameport/fm801-gp.c
+1
-1
drivers/input/gameport/gameport.c
drivers/input/gameport/gameport.c
+1
-1
drivers/input/gameport/lightning.c
drivers/input/gameport/lightning.c
+8
-8
drivers/input/gameport/ns558.c
drivers/input/gameport/ns558.c
+7
-7
drivers/input/gameport/vortex.c
drivers/input/gameport/vortex.c
+3
-3
drivers/input/input.c
drivers/input/input.c
+20
-20
drivers/input/joydev.c
drivers/input/joydev.c
+8
-8
drivers/input/joystick/Kconfig
drivers/input/joystick/Kconfig
+8
-8
drivers/input/joystick/a3d.c
drivers/input/joystick/a3d.c
+7
-7
drivers/input/joystick/adi.c
drivers/input/joystick/adi.c
+15
-15
drivers/input/joystick/amijoy.c
drivers/input/joystick/amijoy.c
+1
-1
drivers/input/joystick/analog.c
drivers/input/joystick/analog.c
+21
-21
drivers/input/joystick/cobra.c
drivers/input/joystick/cobra.c
+5
-5
drivers/input/joystick/db9.c
drivers/input/joystick/db9.c
+12
-12
drivers/input/joystick/gamecon.c
drivers/input/joystick/gamecon.c
+16
-16
drivers/input/joystick/gf2k.c
drivers/input/joystick/gf2k.c
+6
-6
drivers/input/joystick/grip.c
drivers/input/joystick/grip.c
+3
-3
drivers/input/joystick/grip_mp.c
drivers/input/joystick/grip_mp.c
+22
-22
drivers/input/joystick/guillemot.c
drivers/input/joystick/guillemot.c
+4
-4
drivers/input/joystick/iforce/Kconfig
drivers/input/joystick/iforce/Kconfig
+1
-1
drivers/input/joystick/iforce/Makefile
drivers/input/joystick/iforce/Makefile
+3
-3
drivers/input/joystick/iforce/iforce-ff.c
drivers/input/joystick/iforce/iforce-ff.c
+2
-2
drivers/input/joystick/iforce/iforce-main.c
drivers/input/joystick/iforce/iforce-main.c
+2
-2
drivers/input/joystick/iforce/iforce-packets.c
drivers/input/joystick/iforce/iforce-packets.c
+2
-2
drivers/input/joystick/iforce/iforce-serio.c
drivers/input/joystick/iforce/iforce-serio.c
+1
-1
drivers/input/joystick/iforce/iforce.h
drivers/input/joystick/iforce/iforce.h
+1
-1
drivers/input/joystick/interact.c
drivers/input/joystick/interact.c
+4
-4
drivers/input/joystick/joydump.c
drivers/input/joystick/joydump.c
+5
-5
drivers/input/joystick/magellan.c
drivers/input/joystick/magellan.c
+6
-6
drivers/input/joystick/sidewinder.c
drivers/input/joystick/sidewinder.c
+10
-10
drivers/input/joystick/spaceball.c
drivers/input/joystick/spaceball.c
+10
-10
drivers/input/joystick/spaceorb.c
drivers/input/joystick/spaceorb.c
+9
-9
drivers/input/joystick/stinger.c
drivers/input/joystick/stinger.c
+3
-3
drivers/input/joystick/tmdc.c
drivers/input/joystick/tmdc.c
+12
-12
drivers/input/joystick/turbografx.c
drivers/input/joystick/turbografx.c
+10
-10
drivers/input/joystick/twidjoy.c
drivers/input/joystick/twidjoy.c
+9
-6
drivers/input/joystick/warrior.c
drivers/input/joystick/warrior.c
+16
-16
drivers/input/keyboard/98kbd.c
drivers/input/keyboard/98kbd.c
+23
-19
drivers/input/keyboard/Kconfig
drivers/input/keyboard/Kconfig
+3
-3
drivers/input/keyboard/atkbd.c
drivers/input/keyboard/atkbd.c
+33
-22
drivers/input/keyboard/maple_keyb.c
drivers/input/keyboard/maple_keyb.c
+1
-1
drivers/input/keyboard/sunkbd.c
drivers/input/keyboard/sunkbd.c
+8
-8
drivers/input/keyboard/xtkbd.c
drivers/input/keyboard/xtkbd.c
+6
-6
drivers/input/misc/98spkr.c
drivers/input/misc/98spkr.c
+2
-2
drivers/input/misc/pcspkr.c
drivers/input/misc/pcspkr.c
+2
-2
drivers/input/misc/sparcspkr.c
drivers/input/misc/sparcspkr.c
+4
-4
drivers/input/misc/uinput.c
drivers/input/misc/uinput.c
+25
-25
drivers/input/mouse/logips2pp.c
drivers/input/mouse/logips2pp.c
+153
-113
drivers/input/mouse/logips2pp.h
drivers/input/mouse/logips2pp.h
+2
-7
drivers/input/mouse/psmouse-base.c
drivers/input/mouse/psmouse-base.c
+116
-59
drivers/input/mouse/psmouse.h
drivers/input/mouse/psmouse.h
+10
-1
drivers/input/mouse/synaptics.c
drivers/input/mouse/synaptics.c
+198
-255
drivers/input/mouse/synaptics.h
drivers/input/mouse/synaptics.h
+8
-15
drivers/input/mousedev.c
drivers/input/mousedev.c
+161
-129
drivers/input/power.c
drivers/input/power.c
+14
-13
drivers/input/serio/98kbd-io.c
drivers/input/serio/98kbd-io.c
+5
-4
drivers/input/serio/ct82c710.c
drivers/input/serio/ct82c710.c
+4
-4
drivers/input/serio/gscps2.c
drivers/input/serio/gscps2.c
+11
-11
drivers/input/serio/i8042.c
drivers/input/serio/i8042.c
+26
-18
drivers/input/serio/parkbd.c
drivers/input/serio/parkbd.c
+6
-17
drivers/input/serio/q40kbd.c
drivers/input/serio/q40kbd.c
+1
-12
drivers/input/serio/rpckbd.c
drivers/input/serio/rpckbd.c
+1
-1
drivers/input/serio/serio.c
drivers/input/serio/serio.c
+9
-8
drivers/input/serio/serport.c
drivers/input/serio/serport.c
+2
-8
drivers/input/touchscreen/gunze.c
drivers/input/touchscreen/gunze.c
+3
-5
drivers/input/touchscreen/h3600_ts_input.c
drivers/input/touchscreen/h3600_ts_input.c
+60
-52
drivers/video/sbuslib.c
drivers/video/sbuslib.c
+1
-0
include/asm-arm/cacheflush.h
include/asm-arm/cacheflush.h
+1
-11
include/asm-ppc/pgtable.h
include/asm-ppc/pgtable.h
+5
-1
include/asm-ppc/tlbflush.h
include/asm-ppc/tlbflush.h
+7
-0
include/asm-ppc64/pgtable.h
include/asm-ppc64/pgtable.h
+4
-1
include/asm-ppc64/tlbflush.h
include/asm-ppc64/tlbflush.h
+2
-0
include/linux/input.h
include/linux/input.h
+52
-11
include/linux/netfilter.h
include/linux/netfilter.h
+6
-0
include/linux/netfilter_arp.h
include/linux/netfilter_arp.h
+1
-0
include/linux/netfilter_ipv4/ip_tables.h
include/linux/netfilter_ipv4/ip_tables.h
+8
-0
include/linux/netfilter_ipv6/ip6_tables.h
include/linux/netfilter_ipv6/ip6_tables.h
+2
-0
include/linux/watchdog.h
include/linux/watchdog.h
+1
-0
include/net/tcp.h
include/net/tcp.h
+3
-0
kernel/sched.c
kernel/sched.c
+7
-0
net/ipv4/netfilter/arp_tables.c
net/ipv4/netfilter/arp_tables.c
+8
-8
net/ipv4/netfilter/ip_tables.c
net/ipv4/netfilter/ip_tables.c
+10
-12
net/ipv6/netfilter/ip6_tables.c
net/ipv6/netfilter/ip6_tables.c
+9
-10
net/sunrpc/auth_gss/auth_gss.c
net/sunrpc/auth_gss/auth_gss.c
+1
-1
No files found.
Documentation/kernel-parameters.txt
View file @
ff3c0388
...
...
@@ -896,8 +896,8 @@ running once the system is up.
psmouse.rate= [HW,MOUSE] Set desired mouse report rate, in reports
per second.
psmouse.resetafter=
[HW,MOUSE] Try to reset
Synaptics Touchpad after so many
bad packets
(0 = never).
[HW,MOUSE] Try to reset
the device after so many bad packets
(0 = never).
psmouse.resolution=
[HW,MOUSE] Set desired mouse resolution, in dpi.
psmouse.smartscroll=
...
...
arch/arm/mm/fault-armv.c
View file @
ff3c0388
...
...
@@ -8,6 +8,7 @@
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <linux/mm.h>
...
...
@@ -75,7 +76,7 @@ static int adjust_pte(struct vm_area_struct *vma, unsigned long address)
return
0
;
}
void
__flush_dcache_page
(
struct
page
*
page
)
static
void
__flush_dcache_page
(
struct
page
*
page
)
{
struct
address_space
*
mapping
=
page_mapping
(
page
);
struct
mm_struct
*
mm
=
current
->
active_mm
;
...
...
@@ -111,6 +112,17 @@ void __flush_dcache_page(struct page *page)
flush_dcache_mmap_unlock
(
mapping
);
}
void
flush_dcache_page
(
struct
page
*
page
)
{
struct
address_space
*
mapping
=
page_mapping
(
page
);
if
(
mapping
&&
!
mapping_mapped
(
mapping
))
set_bit
(
PG_dcache_dirty
,
&
page
->
flags
);
else
__flush_dcache_page
(
page
);
}
EXPORT_SYMBOL
(
flush_dcache_page
);
static
void
make_coherent
(
struct
vm_area_struct
*
vma
,
unsigned
long
addr
,
struct
page
*
page
,
int
dirty
)
{
...
...
arch/arm/mm/proc-syms.c
View file @
ff3c0388
...
...
@@ -14,8 +14,6 @@
#include <asm/proc-fns.h>
#include <asm/tlbflush.h>
EXPORT_SYMBOL
(
__flush_dcache_page
);
#ifndef MULTI_CPU
EXPORT_SYMBOL
(
cpu_dcache_clean_area
);
EXPORT_SYMBOL
(
cpu_set_pte
);
...
...
@@ -28,7 +26,6 @@ EXPORT_SYMBOL_NOVERS(__cpuc_flush_kern_all);
EXPORT_SYMBOL_NOVERS
(
__cpuc_flush_user_all
);
EXPORT_SYMBOL_NOVERS
(
__cpuc_flush_user_range
);
EXPORT_SYMBOL_NOVERS
(
__cpuc_coherent_kern_range
);
EXPORT_SYMBOL_NOVERS
(
__cpuc_flush_dcache_page
);
#else
EXPORT_SYMBOL
(
cpu_cache
);
#endif
...
...
arch/arm/tools/mach-types
View file @
ff3c0388
...
...
@@ -6,7 +6,7 @@
# To add an entry into this database, please see Documentation/arm/README,
# or contact rmk@arm.linux.org.uk
#
# Last update:
Thu Apr 29 19:06:33
2004
# Last update:
Fri May 28 13:17:46
2004
#
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
#
...
...
@@ -509,7 +509,7 @@ s3c5500 MACH_S3C5500 S3C5500 498
smdk5500 MACH_SMDK5500 SMDK5500 499
signalsync MACH_SIGNALSYNC SIGNALSYNC 500
nbc MACH_NBC NBC 501
er4525 MACH_ER4525 ER4525
502
kodiak MACH_KODIAK KODIAK
502
netbookpro MACH_NETBOOKPRO NETBOOKPRO 503
hw90200 MACH_HW90200 HW90200 504
condor MACH_CONDOR CONDOR 505
...
...
@@ -533,3 +533,16 @@ emc1000 MACH_EMC1000 EMC1000 522
tidsc25 MACH_TIDSC25 TIDSC25 523
akcpmxl MACH_AKCPMXL AKCPMXL 524
av3xx MACH_AV3XX AV3XX 525
avila MACH_AVILA AVILA 526
pxa_mpm10 MACH_PXA_MPM10 PXA_MPM10 527
pxa_kyanite MACH_PXA_KYANITE PXA_KYANITE 528
sgold MACH_SGOLD SGOLD 529
oscar MACH_OSCAR OSCAR 530
epxa4usb2 MACH_EPXA4USB2 EPXA4USB2 531
xsengine MACH_XSENGINE XSENGINE 532
ip600 MACH_IP600 IP600 533
mcan2 MACH_MCAN2 MCAN2 534
ddi_blueridge MACH_DDI_BLUERIDGE DDI_BLUERIDGE 535
skyminder MACH_SKYMINDER SKYMINDER 536
lpd79520 MACH_LPD79520 LPD79520 537
edb9302 MACH_EDB9302 EDB9302 538
arch/i386/kernel/dmi_scan.c
View file @
ff3c0388
...
...
@@ -783,6 +783,7 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
{
exploding_pnp_bios
,
"ASUS P4P800"
,
{
/* PnPBIOS GPF on boot */
MATCH
(
DMI_BOARD_VENDOR
,
"ASUSTeK Computer Inc."
),
MATCH
(
DMI_BOARD_NAME
,
"P4P800"
),
NO_MATCH
,
NO_MATCH
}
},
/* Machines which have problems handling enabled local APICs */
...
...
arch/ppc/mm/tlb.c
View file @
ff3c0388
...
...
@@ -66,6 +66,17 @@ void flush_hash_one_pte(pte_t *ptep)
flush_hash_pages
(
mm
->
context
,
addr
,
ptephys
,
1
);
}
/*
* Called by ptep_set_access_flags, must flush on CPUs for which the
* DSI handler can't just "fixup" the TLB on a write fault
*/
void
flush_tlb_page_nohash
(
struct
vm_area_struct
*
vma
,
unsigned
long
addr
)
{
if
(
Hash
!=
0
)
return
;
_tlbie
(
addr
);
}
/*
* Called at the end of a mmu_gather operation to make sure the
* TLB flush is completely done.
...
...
drivers/char/synclink.c
View file @
ff3c0388
...
...
@@ -4525,7 +4525,7 @@ static int mgsl_init_tty(void)
/* enumerate user specified ISA adapters
*/
static
int
mgsl_enum_isa_devices
(
void
)
static
void
mgsl_enum_isa_devices
(
void
)
{
struct
mgsl_struct
*
info
;
int
i
;
...
...
drivers/input/Kconfig
View file @
ff3c0388
...
...
@@ -41,9 +41,16 @@ config INPUT_MOUSEDEV
module will be called mousedev.
config INPUT_MOUSEDEV_PSAUX
bool "Provide legacy /dev/psaux device"
if EMBEDDED
bool "Provide legacy /dev/psaux device"
default y
depends on INPUT_MOUSEDEV
---help---
Say Y here if you want your mouse also be accessible as char device
10:1 - /dev/psaux. The data available through /dev/psaux is exactly
the same as the data from /dev/input/mice.
If unsure, say Y.
config INPUT_MOUSEDEV_SCREEN_X
int "Horizontal screen resolution"
...
...
drivers/input/evbug.c
View file @
ff3c0388
drivers/input/evdev.c
View file @
ff3c0388
...
...
@@ -126,7 +126,7 @@ static int evdev_open(struct inode * inode, struct file * file)
int
i
=
iminor
(
inode
)
-
EVDEV_MINOR_BASE
;
int
accept_err
;
if
(
i
>=
EVDEV_MINORS
||
!
evdev_table
[
i
])
if
(
i
>=
EVDEV_MINORS
||
!
evdev_table
[
i
]
||
!
evdev_table
[
i
]
->
exist
)
return
-
ENODEV
;
if
((
accept_err
=
input_accept_process
(
&
(
evdev_table
[
i
]
->
handle
),
file
)))
...
...
@@ -175,7 +175,7 @@ static ssize_t evdev_read(struct file * file, char __user * buffer, size_t count
return
-
EAGAIN
;
retval
=
wait_event_interruptible
(
list
->
evdev
->
wait
,
list
->
head
!=
list
->
tail
&&
list
->
evdev
->
exist
);
list
->
head
!=
list
->
tail
||
(
!
list
->
evdev
->
exist
)
);
if
(
retval
)
return
retval
;
...
...
drivers/input/gameport/cs461x.c
View file @
ff3c0388
drivers/input/gameport/emu10k1-gp.c
View file @
ff3c0388
drivers/input/gameport/fm801-gp.c
View file @
ff3c0388
drivers/input/gameport/gameport.c
View file @
ff3c0388
drivers/input/gameport/lightning.c
View file @
ff3c0388
drivers/input/gameport/ns558.c
View file @
ff3c0388
drivers/input/gameport/vortex.c
View file @
ff3c0388
drivers/input/input.c
View file @
ff3c0388
drivers/input/joydev.c
View file @
ff3c0388
drivers/input/joystick/Kconfig
View file @
ff3c0388
drivers/input/joystick/a3d.c
View file @
ff3c0388
drivers/input/joystick/adi.c
View file @
ff3c0388
drivers/input/joystick/amijoy.c
View file @
ff3c0388
drivers/input/joystick/analog.c
View file @
ff3c0388
drivers/input/joystick/cobra.c
View file @
ff3c0388
drivers/input/joystick/db9.c
View file @
ff3c0388
drivers/input/joystick/gamecon.c
View file @
ff3c0388
drivers/input/joystick/gf2k.c
View file @
ff3c0388
drivers/input/joystick/grip.c
View file @
ff3c0388
drivers/input/joystick/grip_mp.c
View file @
ff3c0388
drivers/input/joystick/guillemot.c
View file @
ff3c0388
drivers/input/joystick/iforce/Kconfig
View file @
ff3c0388
drivers/input/joystick/iforce/Makefile
View file @
ff3c0388
drivers/input/joystick/iforce/iforce-ff.c
View file @
ff3c0388
drivers/input/joystick/iforce/iforce-main.c
View file @
ff3c0388
drivers/input/joystick/iforce/iforce-packets.c
View file @
ff3c0388
drivers/input/joystick/iforce/iforce-serio.c
View file @
ff3c0388
drivers/input/joystick/iforce/iforce.h
View file @
ff3c0388
drivers/input/joystick/interact.c
View file @
ff3c0388
drivers/input/joystick/joydump.c
View file @
ff3c0388
drivers/input/joystick/magellan.c
View file @
ff3c0388
drivers/input/joystick/sidewinder.c
View file @
ff3c0388
drivers/input/joystick/spaceball.c
View file @
ff3c0388
drivers/input/joystick/spaceorb.c
View file @
ff3c0388
drivers/input/joystick/stinger.c
View file @
ff3c0388
drivers/input/joystick/tmdc.c
View file @
ff3c0388
drivers/input/joystick/turbografx.c
View file @
ff3c0388
drivers/input/joystick/twidjoy.c
View file @
ff3c0388
...
...
@@ -58,6 +58,9 @@
#include <linux/serio.h>
#include <linux/init.h>
MODULE_DESCRIPTION
(
"Handykey Twiddler keyboard as a joystick driver"
);
MODULE_LICENSE
(
"GPL"
);
/*
* Constants.
*/
...
...
@@ -142,7 +145,7 @@ static void twidjoy_process_packet(struct twidjoy *twidjoy, struct pt_regs *regs
* packet processing routine.
*/
static
void
twidjoy_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struc
pt_regs
*
regs
)
static
irqreturn_t
twidjoy_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
{
struct
twidjoy
*
twidjoy
=
serio
->
private
;
...
...
@@ -153,7 +156,7 @@ static void twidjoy_interrupt(struct serio *serio, unsigned char data, unsigned
if
((
data
&
0x80
)
==
0
)
twidjoy
->
idx
=
0
;
/* this byte starts a new packet */
else
if
(
twidjoy
->
idx
==
0
)
return
;
/* wrong MSB -- ignore this byte */
return
IRQ_HANDLED
;
/* wrong MSB -- ignore this byte */
if
(
twidjoy
->
idx
<
TWIDJOY_MAX_LENGTH
)
twidjoy
->
data
[
twidjoy
->
idx
++
]
=
data
;
...
...
@@ -163,7 +166,7 @@ static void twidjoy_interrupt(struct serio *serio, unsigned char data, unsigned
twidjoy
->
idx
=
0
;
}
return
;
return
IRQ_HANDLED
;
}
/*
...
...
drivers/input/joystick/warrior.c
View file @
ff3c0388
drivers/input/keyboard/98kbd.c
View file @
ff3c0388
...
...
@@ -109,7 +109,7 @@ struct kbd98 {
struct
jis_kbd_conv
jis
[
16
];
};
void
kbd98_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
irqreturn_t
kbd98_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
{
struct
kbd98
*
kbd98
=
serio
->
private
;
...
...
@@ -119,15 +119,15 @@ void kbd98_interrupt(struct serio *serio, unsigned char data,
switch
(
data
)
{
case
KBD98_RET_ACK
:
kbd98
->
ack
=
1
;
return
;
goto
out
;
case
KBD98_RET_NAK
:
kbd98
->
ack
=
-
1
;
return
;
goto
out
;
}
if
(
kbd98
->
cmdcnt
)
{
kbd98
->
cmdbuf
[
--
kbd98
->
cmdcnt
]
=
data
;
return
;
goto
out
;
}
scancode
=
data
&
KBD98_KEY
;
...
...
@@ -164,7 +164,7 @@ void kbd98_interrupt(struct serio *serio, unsigned char data,
keycode
=
kbd98
->
jis
[
i
].
emul
[
kbd98
->
shift
].
keycode
;
if
(
keycode
==
KBD98_KEY_NULL
)
return
;
break
;
if
(
press
)
{
kbd98
->
emul
.
scancode
=
scancode
;
...
...
@@ -187,27 +187,31 @@ void kbd98_interrupt(struct serio *serio, unsigned char data,
}
input_sync
(
&
kbd98
->
dev
);
return
;
break
;
case
KEY_CAPSLOCK
:
input_report_key
(
&
kbd98
->
dev
,
keycode
,
1
);
input_sync
(
&
kbd98
->
dev
);
input_report_key
(
&
kbd98
->
dev
,
keycode
,
0
);
input_sync
(
&
kbd98
->
dev
);
return
;
break
;
case
KBD98_KEY_NULL
:
return
;
break
;
case
0
:
printk
(
KERN_WARNING
"kbd98.c: Unknown key (scancode %#x) %s.
\n
"
,
data
&
KBD98_KEY
,
data
&
KBD98_RELEASE
?
"released"
:
"pressed"
);
return
;
break
;
default:
input_report_key
(
&
kbd98
->
dev
,
keycode
,
press
);
input_sync
(
&
kbd98
->
dev
);
break
;
}
out:
return
IRQ_HANDLED
;
}
/*
...
...
drivers/input/keyboard/Kconfig
View file @
ff3c0388
drivers/input/keyboard/atkbd.c
View file @
ff3c0388
...
...
@@ -26,7 +26,6 @@
#include <linux/input.h>
#include <linux/serio.h>
#include <linux/workqueue.h>
#include <linux/timer.h>
MODULE_AUTHOR
(
"Vojtech Pavlik <vojtech@suse.cz>"
);
MODULE_DESCRIPTION
(
"AT and PS/2 keyboard driver"
);
...
...
@@ -173,22 +172,24 @@ struct atkbd {
unsigned
char
keycode
[
512
];
struct
input_dev
dev
;
struct
serio
*
serio
;
struct
timer_list
timer
;
char
name
[
64
];
char
phys
[
32
];
unsigned
short
id
;
unsigned
char
set
;
unsigned
int
translated
:
1
;
unsigned
int
extra
:
1
;
unsigned
int
write
:
1
;
unsigned
char
cmdbuf
[
4
];
unsigned
char
cmdcnt
;
unsigned
char
set
;
unsigned
char
extra
;
unsigned
char
release
;
int
lastkey
;
volatile
signed
char
ack
;
unsigned
char
emul
;
unsigned
short
id
;
unsigned
char
write
;
unsigned
char
translated
;
unsigned
char
resend
;
unsigned
char
bat_xl
;
unsigned
int
resend
:
1
;
unsigned
int
release
:
1
;
unsigned
int
bat_xl
:
1
;
unsigned
int
enabled
:
1
;
unsigned
int
last
;
unsigned
long
time
;
};
...
...
@@ -248,6 +249,9 @@ static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
goto
out
;
}
if
(
!
atkbd
->
enabled
)
goto
out
;
if
(
atkbd
->
translated
)
{
if
(
atkbd
->
emul
||
...
...
@@ -300,15 +304,20 @@ static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
case
ATKBD_KEY_NULL
:
break
;
case
ATKBD_KEY_UNKNOWN
:
printk
(
KERN_WARNING
"atkbd.c: Unknown key %s (%s set %d, code %#x on %s).
\n
"
,
if
(
data
==
ATKBD_RET_ACK
||
data
==
ATKBD_RET_NAK
)
{
printk
(
KERN_WARNING
"atkbd.c: Spurious %s on %s. Some program, "
"like XFree86, might be trying access hardware directly.
\n
"
,
data
==
ATKBD_RET_ACK
?
"ACK"
:
"NAK"
,
serio
->
phys
);
}
else
{
printk
(
KERN_WARNING
"atkbd.c: Unknown key %s "
"(%s set %d, code %#x on %s).
\n
"
,
atkbd
->
release
?
"released"
:
"pressed"
,
atkbd
->
translated
?
"translated"
:
"raw"
,
atkbd
->
set
,
code
,
serio
->
phys
);
if
(
atkbd
->
translated
&&
atkbd
->
set
==
2
&&
code
==
0x7a
)
printk
(
KERN_WARNING
"atkbd.c: This is an XFree86 bug. It shouldn't access"
" hardware directly.
\n
"
);
else
printk
(
KERN_WARNING
"atkbd.c: Use 'setkeycodes %s%02x <keycode>' to make it known.
\n
"
,
code
&
0x80
?
"e0"
:
""
,
code
&
0x7f
);
printk
(
KERN_WARNING
"atkbd.c: Use 'setkeycodes %s%02x <keycode>' "
"to make it known.
\n
"
,
code
&
0x80
?
"e0"
:
""
,
code
&
0x7f
);
}
break
;
case
ATKBD_SCR_1
:
scroll
=
1
-
atkbd
->
release
*
2
;
...
...
@@ -745,6 +754,8 @@ static void atkbd_connect(struct serio *serio, struct serio_dev *dev)
atkbd
->
id
=
0xab00
;
}
atkbd
->
enabled
=
1
;
if
(
atkbd
->
extra
)
{
atkbd
->
dev
.
ledbit
[
0
]
|=
BIT
(
LED_COMPOSE
)
|
BIT
(
LED_SUSPEND
)
|
BIT
(
LED_SLEEP
)
|
BIT
(
LED_MUTE
)
|
BIT
(
LED_MISC
);
sprintf
(
atkbd
->
name
,
"AT Set 2 Extra keyboard"
);
...
...
drivers/input/keyboard/maple_keyb.c
View file @
ff3c0388
drivers/input/keyboard/sunkbd.c
View file @
ff3c0388
drivers/input/keyboard/xtkbd.c
View file @
ff3c0388
drivers/input/misc/98spkr.c
View file @
ff3c0388
drivers/input/misc/pcspkr.c
View file @
ff3c0388
drivers/input/misc/sparcspkr.c
View file @
ff3c0388
drivers/input/misc/uinput.c
View file @
ff3c0388
drivers/input/mouse/logips2pp.c
View file @
ff3c0388
...
...
@@ -14,6 +14,25 @@
#include "psmouse.h"
#include "logips2pp.h"
/* Logitech mouse types */
#define PS2PP_KIND_WHEEL 1
#define PS2PP_KIND_MX 2
#define PS2PP_KIND_TP3 3
/* Logitech mouse features */
#define PS2PP_WHEEL 0x01
#define PS2PP_HWHEEL 0x02
#define PS2PP_SIDE_BTN 0x04
#define PS2PP_EXTRA_BTN 0x08
#define PS2PP_TASK_BTN 0x10
#define PS2PP_NAV_BTN 0x20
struct
ps2pp_info
{
const
int
model
;
unsigned
const
int
kind
;
unsigned
const
int
features
;
};
/*
* Process a PS2++ or PS2T++ packet.
*/
...
...
@@ -63,7 +82,6 @@ void ps2pp_process_packet(struct psmouse *psmouse)
packet
[
0
]
&=
0x0f
;
packet
[
1
]
=
0
;
packet
[
2
]
=
0
;
}
}
...
...
@@ -76,18 +94,9 @@ void ps2pp_process_packet(struct psmouse *psmouse)
static
int
ps2pp_cmd
(
struct
psmouse
*
psmouse
,
unsigned
char
*
param
,
unsigned
char
command
)
{
unsigned
char
d
;
int
i
;
if
(
psmouse_command
(
psmouse
,
NULL
,
PSMOUSE_CMD_SETSCALE11
))
if
(
psmouse_sliced_command
(
psmouse
,
command
))
return
-
1
;
for
(
i
=
6
;
i
>=
0
;
i
-=
2
)
{
d
=
(
command
>>
i
)
&
3
;
if
(
psmouse_command
(
psmouse
,
&
d
,
PSMOUSE_CMD_SETRES
))
return
-
1
;
}
if
(
psmouse_command
(
psmouse
,
param
,
PSMOUSE_CMD_POLL
))
return
-
1
;
...
...
@@ -113,14 +122,11 @@ static void ps2pp_set_smartscroll(struct psmouse *psmouse)
psmouse_command
(
psmouse
,
param
,
PSMOUSE_CMD_SETRES
);
psmouse_command
(
psmouse
,
param
,
PSMOUSE_CMD_SETRES
);
if
(
psmouse_smartscroll
==
1
)
param
[
0
]
=
1
;
else
if
(
psmouse_smartscroll
>
2
)
return
;
/* else leave param[0] == 0 to disable */
if
(
psmouse_smartscroll
<
2
)
{
/* 0 - disabled, 1 - enabled */
param
[
0
]
=
psmouse_smartscroll
;
psmouse_command
(
psmouse
,
param
,
PSMOUSE_CMD_SETRES
);
}
}
/*
...
...
@@ -138,133 +144,167 @@ void ps2pp_set_800dpi(struct psmouse *psmouse)
psmouse_command
(
psmouse
,
&
param
,
PSMOUSE_CMD_SETRES
);
}
/*
* Detect the exact model and features of a PS2++ or PS2T++ Logitech mouse or
* touchpad.
*/
static
int
ps2pp_detect_model
(
struct
psmouse
*
psmouse
,
unsigned
char
*
param
)
static
struct
ps2pp_info
*
get_model_info
(
unsigned
char
model
)
{
int
i
;
static
struct
_logips2_list
{
const
int
model
;
unsigned
const
int
features
;
}
logips2pp_list
[]
=
{
{
12
,
PS2PP_4BTN
},
{
13
,
0
},
{
40
,
PS2PP_4BTN
},
{
41
,
PS2PP_4BTN
},
{
42
,
PS2PP_4BTN
},
{
43
,
PS2PP_4BTN
},
{
50
,
0
},
{
51
,
0
},
{
52
,
PS2PP_4BTN
|
PS2PP_WHEEL
},
{
53
,
PS2PP_WHEEL
},
{
61
,
PS2PP_WHEEL
|
PS2PP_MX
},
/* MX700 */
{
73
,
PS2PP_4BTN
},
{
75
,
PS2PP_WHEEL
},
{
76
,
PS2PP_WHEEL
},
{
80
,
PS2PP_4BTN
|
PS2PP_WHEEL
},
{
81
,
PS2PP_WHEEL
},
{
83
,
PS2PP_WHEEL
},
{
88
,
PS2PP_WHEEL
},
{
96
,
0
},
{
97
,
0
},
{
100
,
PS2PP_WHEEL
|
PS2PP_MX
},
/* MX510 */
{
112
,
PS2PP_WHEEL
|
PS2PP_MX
},
/* MX500 */
{
114
,
PS2PP_WHEEL
|
PS2PP_MX
|
PS2PP_MX310
},
/* MX310 */
static
struct
ps2pp_info
ps2pp_list
[]
=
{
{
12
,
0
,
PS2PP_SIDE_BTN
},
{
13
,
0
,
0
},
{
40
,
0
,
PS2PP_SIDE_BTN
},
{
41
,
0
,
PS2PP_SIDE_BTN
},
{
42
,
0
,
PS2PP_SIDE_BTN
},
{
43
,
0
,
PS2PP_SIDE_BTN
},
{
50
,
0
,
0
},
{
51
,
0
,
0
},
{
52
,
PS2PP_KIND_WHEEL
,
PS2PP_SIDE_BTN
|
PS2PP_WHEEL
},
{
53
,
PS2PP_KIND_WHEEL
,
PS2PP_WHEEL
},
{
61
,
PS2PP_KIND_MX
,
PS2PP_WHEEL
|
PS2PP_SIDE_BTN
|
PS2PP_TASK_BTN
|
PS2PP_EXTRA_BTN
|
PS2PP_NAV_BTN
},
/* MX700 */
{
73
,
0
,
PS2PP_SIDE_BTN
},
{
75
,
PS2PP_KIND_WHEEL
,
PS2PP_WHEEL
},
{
76
,
PS2PP_KIND_WHEEL
,
PS2PP_WHEEL
},
{
80
,
PS2PP_KIND_WHEEL
,
PS2PP_SIDE_BTN
|
PS2PP_WHEEL
},
{
81
,
PS2PP_KIND_WHEEL
,
PS2PP_WHEEL
},
{
83
,
PS2PP_KIND_WHEEL
,
PS2PP_WHEEL
},
{
88
,
PS2PP_KIND_WHEEL
,
PS2PP_WHEEL
},
{
96
,
0
,
0
},
{
97
,
PS2PP_KIND_TP3
,
PS2PP_WHEEL
|
PS2PP_HWHEEL
},
{
100
,
PS2PP_KIND_MX
,
PS2PP_WHEEL
|
PS2PP_SIDE_BTN
|
PS2PP_TASK_BTN
|
PS2PP_EXTRA_BTN
|
PS2PP_NAV_BTN
},
/* MX510 */
{
112
,
PS2PP_KIND_MX
,
PS2PP_WHEEL
|
PS2PP_SIDE_BTN
|
PS2PP_TASK_BTN
|
PS2PP_EXTRA_BTN
|
PS2PP_NAV_BTN
},
/* MX500 */
{
114
,
PS2PP_KIND_MX
,
PS2PP_WHEEL
|
PS2PP_SIDE_BTN
|
PS2PP_TASK_BTN
|
PS2PP_EXTRA_BTN
},
/* M310 */
{
}
};
int
i
;
psmouse
->
vendor
=
"Logitech"
;
psmouse
->
model
=
((
param
[
0
]
>>
4
)
&
0x07
)
|
((
param
[
0
]
<<
3
)
&
0x78
);
if
(
param
[
1
]
<
3
)
clear_bit
(
BTN_MIDDLE
,
psmouse
->
dev
.
keybit
);
if
(
param
[
1
]
<
2
)
clear_bit
(
BTN_RIGHT
,
psmouse
->
dev
.
keybit
);
for
(
i
=
0
;
ps2pp_list
[
i
].
model
;
i
++
)
if
(
model
==
ps2pp_list
[
i
].
model
)
return
&
ps2pp_list
[
i
];
return
NULL
;
}
psmouse
->
type
=
PSMOUSE_PS2
;
/*
* Set up input device's properties based on the detected mouse model.
*/
for
(
i
=
0
;
logips2pp_list
[
i
].
model
;
i
++
){
if
(
logips2pp_list
[
i
].
model
==
psmouse
->
model
){
psmouse
->
type
=
PSMOUSE_PS2PP
;
if
(
logips2pp_list
[
i
].
features
&
PS2PP_4BTN
)
static
void
ps2pp_set_model_properties
(
struct
psmouse
*
psmouse
,
struct
ps2pp_info
*
model_info
)
{
if
(
model_info
->
features
&
PS2PP_SIDE_BTN
)
set_bit
(
BTN_SIDE
,
psmouse
->
dev
.
keybit
);
if
(
logips2pp_list
[
i
].
features
&
PS2PP_WHEEL
){
set_bit
(
REL_WHEEL
,
psmouse
->
dev
.
relbit
);
psmouse
->
name
=
"Wheel Mouse"
;
}
if
(
logips2pp_list
[
i
].
features
&
PS2PP_MX
)
{
set_bit
(
BTN_SIDE
,
psmouse
->
dev
.
keybit
);
if
(
model_info
->
features
&
PS2PP_EXTRA_BTN
)
set_bit
(
BTN_EXTRA
,
psmouse
->
dev
.
keybit
);
if
(
model_info
->
features
&
PS2PP_TASK_BTN
)
set_bit
(
BTN_TASK
,
psmouse
->
dev
.
keybit
);
if
(
!
(
logips2pp_list
[
i
].
features
&
PS2PP_MX310
)){
set_bit
(
BTN_BACK
,
psmouse
->
dev
.
keybit
);
if
(
model_info
->
features
&
PS2PP_NAV_BTN
)
{
set_bit
(
BTN_FORWARD
,
psmouse
->
dev
.
keybit
);
set_bit
(
BTN_BACK
,
psmouse
->
dev
.
keybit
);
}
if
(
model_info
->
features
&
PS2PP_WHEEL
)
set_bit
(
REL_WHEEL
,
psmouse
->
dev
.
relbit
);
if
(
model_info
->
features
&
PS2PP_HWHEEL
)
set_bit
(
REL_HWHEEL
,
psmouse
->
dev
.
relbit
);
switch
(
model_info
->
kind
)
{
case
PS2PP_KIND_WHEEL
:
psmouse
->
name
=
"Wheel Mouse"
;
break
;
case
PS2PP_KIND_MX
:
psmouse
->
name
=
"MX Mouse"
;
}
break
;
case
PS2PP_KIND_TP3
:
psmouse
->
name
=
"TouchPad 3"
;
break
;
}
}
}
/*
* Do Logitech PS2++ / PS2T++ magic init.
* Logitech magic init. Detect whether the mouse is a Logitech one
* and its exact model and try turning on extended protocol for ones
* that support it.
*/
if
(
psmouse
->
type
==
PSMOUSE_PS2PP
)
{
if
(
psmouse
->
model
==
97
)
{
/* TouchPad 3 */
int
ps2pp_init
(
struct
psmouse
*
psmouse
,
int
set_properties
)
{
unsigned
char
param
[
4
];
unsigned
char
protocol
=
PSMOUSE_PS2
;
unsigned
char
model
,
buttons
;
struct
ps2pp_info
*
model_info
;
set_bit
(
REL_WHEEL
,
psmouse
->
dev
.
relbit
);
set_bit
(
REL_HWHEEL
,
psmouse
->
dev
.
relbit
);
param
[
0
]
=
0
;
psmouse_command
(
psmouse
,
param
,
PSMOUSE_CMD_SETRES
);
psmouse_command
(
psmouse
,
NULL
,
PSMOUSE_CMD_SETSCALE11
);
psmouse_command
(
psmouse
,
NULL
,
PSMOUSE_CMD_SETSCALE11
);
psmouse_command
(
psmouse
,
NULL
,
PSMOUSE_CMD_SETSCALE11
);
param
[
1
]
=
0
;
psmouse_command
(
psmouse
,
param
,
PSMOUSE_CMD_GETINFO
);
if
(
param
[
1
]
!=
0
)
{
model
=
((
param
[
0
]
>>
4
)
&
0x07
)
|
((
param
[
0
]
<<
3
)
&
0x78
);
buttons
=
param
[
1
];
model_info
=
get_model_info
(
model
);
param
[
0
]
=
0x11
;
param
[
1
]
=
0x04
;
param
[
2
]
=
0x68
;
/* Unprotect RAM */
/*
* Do Logitech PS2++ / PS2T++ magic init.
*/
if
(
model
==
97
)
{
/* Touch Pad 3 */
/* Unprotect RAM */
param
[
0
]
=
0x11
;
param
[
1
]
=
0x04
;
param
[
2
]
=
0x68
;
psmouse_command
(
psmouse
,
param
,
0x30d1
);
param
[
0
]
=
0x11
;
param
[
1
]
=
0x05
;
param
[
2
]
=
0x0b
;
/* Enable features */
/* Enable features */
param
[
0
]
=
0x11
;
param
[
1
]
=
0x05
;
param
[
2
]
=
0x0b
;
psmouse_command
(
psmouse
,
param
,
0x30d1
);
param
[
0
]
=
0x11
;
param
[
1
]
=
0x09
;
param
[
2
]
=
0xc3
;
/* Enable PS2++ */
/* Enable PS2++ */
param
[
0
]
=
0x11
;
param
[
1
]
=
0x09
;
param
[
2
]
=
0xc3
;
psmouse_command
(
psmouse
,
param
,
0x30d1
);
param
[
0
]
=
0
;
if
(
!
psmouse_command
(
psmouse
,
param
,
0x13d1
)
&&
param
[
0
]
==
0x06
&&
param
[
1
]
==
0x00
&&
param
[
2
]
==
0x14
)
{
psmouse
->
name
=
"TouchPad 3"
;
return
PSMOUSE_PS2TPP
;
protocol
=
PSMOUSE_PS2TPP
;
}
}
else
{
}
else
if
(
get_model_info
(
model
)
!=
NULL
)
{
param
[
0
]
=
param
[
1
]
=
param
[
2
]
=
0
;
ps2pp_cmd
(
psmouse
,
param
,
0x39
);
/* Magic knock */
ps2pp_cmd
(
psmouse
,
param
,
0xDB
);
if
((
param
[
0
]
&
0x78
)
==
0x48
&&
(
param
[
1
]
&
0xf3
)
==
0xc2
&&
(
param
[
2
]
&
3
)
==
((
param
[
1
]
>>
2
)
&
3
))
{
if
((
param
[
0
]
&
0x78
)
==
0x48
&&
(
param
[
1
]
&
0xf3
)
==
0xc2
&&
(
param
[
2
]
&
0x03
)
==
((
param
[
1
]
>>
2
)
&
3
))
{
ps2pp_set_smartscroll
(
psmouse
);
return
PSMOUSE_PS2PP
;
}
protocol
=
PSMOUSE_PS2PP
;
}
}
return
0
;
}
if
(
set_properties
)
{
psmouse
->
vendor
=
"Logitech"
;
psmouse
->
model
=
model
;
/*
* Logitech magic init.
*/
int
ps2pp_detect
(
struct
psmouse
*
psmouse
)
{
unsigned
char
param
[
4
];
if
(
buttons
<
3
)
clear_bit
(
BTN_MIDDLE
,
psmouse
->
dev
.
keybit
);
if
(
buttons
<
2
)
clear_bit
(
BTN_RIGHT
,
psmouse
->
dev
.
keybit
);
param
[
0
]
=
0
;
psmouse_command
(
psmouse
,
param
,
PSMOUSE_CMD_SETRES
);
psmouse_command
(
psmouse
,
NULL
,
PSMOUSE_CMD_SETSCALE11
);
psmouse_command
(
psmouse
,
NULL
,
PSMOUSE_CMD_SETSCALE11
);
psmouse_command
(
psmouse
,
NULL
,
PSMOUSE_CMD_SETSCALE11
);
param
[
1
]
=
0
;
psmouse_command
(
psmouse
,
param
,
PSMOUSE_CMD_GETINFO
);
if
(
model_info
)
ps2pp_set_model_properties
(
psmouse
,
model_info
);
}
}
return
p
aram
[
1
]
!=
0
?
ps2pp_detect_model
(
psmouse
,
param
)
:
0
;
return
p
rotocol
;
}
drivers/input/mouse/logips2pp.h
View file @
ff3c0388
...
...
@@ -11,13 +11,8 @@
#ifndef _LOGIPS2PP_H
#define _LOGIPS2PP_H
#define PS2PP_4BTN 0x01
#define PS2PP_WHEEL 0x02
#define PS2PP_MX 0x04
#define PS2PP_MX310 0x08
struct
psmouse
;
void
ps2pp_process_packet
(
struct
psmouse
*
psmouse
);
void
ps2pp_set_800dpi
(
struct
psmouse
*
psmouse
);
int
ps2pp_detect
(
struct
psmouse
*
psmouse
);
int
ps2pp_init
(
struct
psmouse
*
psmouse
,
int
set_properties
);
#endif
drivers/input/mouse/psmouse-base.c
View file @
ff3c0388
...
...
@@ -43,9 +43,9 @@ int psmouse_smartscroll = 1;
module_param_named
(
smartscroll
,
psmouse_smartscroll
,
bool
,
0
);
MODULE_PARM_DESC
(
smartscroll
,
"Logitech Smartscroll autorepeat, 1 = enabled (default), 0 = disabled."
);
unsigned
int
psmouse_resetafter
;
static
unsigned
int
psmouse_resetafter
;
module_param_named
(
resetafter
,
psmouse_resetafter
,
uint
,
0
);
MODULE_PARM_DESC
(
resetafter
,
"Reset
Synaptics Touchpad
after so many bad packets (0 = never)."
);
MODULE_PARM_DESC
(
resetafter
,
"Reset
device
after so many bad packets (0 = never)."
);
__obsolete_setup
(
"psmouse_noext"
);
__obsolete_setup
(
"psmouse_resolution="
);
...
...
@@ -56,15 +56,22 @@ __obsolete_setup("psmouse_rate=");
static
char
*
psmouse_protocols
[]
=
{
"None"
,
"PS/2"
,
"PS2++"
,
"PS2T++"
,
"GenPS/2"
,
"ImPS/2"
,
"ImExPS/2"
,
"SynPS/2"
};
/*
* psmouse_process_
packet() analyzes the PS/2 mouse packet contents and
* re
ports relevant events to the input module
.
* psmouse_process_
byte() analyzes the PS/2 data stream and reports
* re
levant events to the input module once full packet has arrived
.
*/
static
void
psmouse_process_packet
(
struct
psmouse
*
psmouse
,
struct
pt_regs
*
regs
)
static
psmouse_ret_t
psmouse_process_byte
(
struct
psmouse
*
psmouse
,
struct
pt_regs
*
regs
)
{
struct
input_dev
*
dev
=
&
psmouse
->
dev
;
unsigned
char
*
packet
=
psmouse
->
packet
;
if
(
psmouse
->
pktcnt
<
3
+
(
psmouse
->
type
>=
PSMOUSE_GENPS
))
return
PSMOUSE_GOOD_DATA
;
/*
* Full packet accumulated, process it
*/
input_regs
(
dev
,
regs
);
/*
...
...
@@ -112,6 +119,8 @@ static void psmouse_process_packet(struct psmouse *psmouse, struct pt_regs *regs
input_report_rel
(
dev
,
REL_Y
,
packet
[
2
]
?
(
int
)
((
packet
[
0
]
<<
3
)
&
0x100
)
-
(
int
)
packet
[
2
]
:
0
);
input_sync
(
dev
);
return
PSMOUSE_FULL_PACKET
;
}
/*
...
...
@@ -123,6 +132,7 @@ static irqreturn_t psmouse_interrupt(struct serio *serio,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
{
struct
psmouse
*
psmouse
=
serio
->
private
;
psmouse_ret_t
rc
;
if
(
psmouse
->
state
==
PSMOUSE_IGNORE
)
goto
out
;
...
...
@@ -180,7 +190,7 @@ static irqreturn_t psmouse_interrupt(struct serio *serio,
if
(
psmouse
->
pktcnt
==
2
)
{
if
(
psmouse
->
packet
[
1
]
==
PSMOUSE_RET_ID
)
{
psmouse
->
state
=
PSMOUSE_IGNORE
;
serio_re
scan
(
serio
);
serio_re
connect
(
serio
);
goto
out
;
}
if
(
psmouse
->
type
==
PSMOUSE_SYNAPTICS
)
{
...
...
@@ -193,19 +203,32 @@ static irqreturn_t psmouse_interrupt(struct serio *serio,
}
}
if
(
psmouse
->
type
==
PSMOUSE_SYNAPTICS
)
{
/*
* The synaptics driver has its own resync logic,
* so it needs to receive all bytes one at a time.
*/
synaptics_process_byte
(
psmouse
,
regs
);
goto
out
;
rc
=
psmouse
->
protocol_handler
(
psmouse
,
regs
);
switch
(
rc
)
{
case
PSMOUSE_BAD_DATA
:
printk
(
KERN_WARNING
"psmouse.c: %s at %s lost sync at byte %d
\n
"
,
psmouse
->
name
,
psmouse
->
phys
,
psmouse
->
pktcnt
);
psmouse
->
pktcnt
=
0
;
if
(
++
psmouse
->
out_of_sync
==
psmouse_resetafter
)
{
psmouse
->
state
=
PSMOUSE_IGNORE
;
printk
(
KERN_NOTICE
"psmouse.c: issuing reconnect request
\n
"
);
serio_reconnect
(
psmouse
->
serio
);
}
break
;
if
(
psmouse
->
pktcnt
==
3
+
(
psmouse
->
type
>=
PSMOUSE_GENPS
))
{
psmouse_process_packet
(
psmouse
,
regs
);
case
PSMOUSE_FULL_PACKET
:
psmouse
->
pktcnt
=
0
;
goto
out
;
if
(
psmouse
->
out_of_sync
)
{
psmouse
->
out_of_sync
=
0
;
printk
(
KERN_NOTICE
"psmouse.c: %s at %s - driver resynched.
\n
"
,
psmouse
->
name
,
psmouse
->
phys
);
}
break
;
case
PSMOUSE_GOOD_DATA
:
break
;
}
out:
return
IRQ_HANDLED
;
...
...
@@ -288,6 +311,30 @@ int psmouse_command(struct psmouse *psmouse, unsigned char *param, int command)
}
/*
* psmouse_sliced_command() sends an extended PS/2 command to the mouse
* using sliced syntax, understood by advanced devices, such as Logitech
* or Synaptics touchpads. The command is encoded as:
* 0xE6 0xE8 rr 0xE8 ss 0xE8 tt 0xE8 uu where (rr*64)+(ss*16)+(tt*4)+uu
* is the command.
*/
int
psmouse_sliced_command
(
struct
psmouse
*
psmouse
,
unsigned
char
command
)
{
int
i
;
if
(
psmouse_command
(
psmouse
,
NULL
,
PSMOUSE_CMD_SETSCALE11
))
return
-
1
;
for
(
i
=
6
;
i
>=
0
;
i
-=
2
)
{
unsigned
char
d
=
(
command
>>
i
)
&
3
;
if
(
psmouse_command
(
psmouse
,
&
d
,
PSMOUSE_CMD_SETRES
))
return
-
1
;
}
return
0
;
}
/*
* psmouse_reset() resets the mouse into power-on state.
*/
...
...
@@ -363,31 +410,31 @@ static int im_explorer_detect(struct psmouse *psmouse)
* the mouse may have.
*/
static
int
psmouse_extensions
(
struct
psmouse
*
psmouse
)
static
int
psmouse_extensions
(
struct
psmouse
*
psmouse
,
unsigned
int
max_proto
,
int
set_properties
)
{
int
synaptics_hardware
=
0
;
psmouse
->
vendor
=
"Generic"
;
psmouse
->
name
=
"Mouse"
;
psmouse
->
model
=
0
;
/*
* Try Synaptics TouchPad
*/
if
(
psmouse_
max_proto
>
PSMOUSE_PS2
&&
synaptics_detect
(
psmouse
))
{
if
(
max_proto
>
PSMOUSE_PS2
&&
synaptics_detect
(
psmouse
))
{
synaptics_hardware
=
1
;
if
(
set_properties
)
{
psmouse
->
vendor
=
"Synaptics"
;
psmouse
->
name
=
"TouchPad"
;
}
if
(
psmouse_
max_proto
>
PSMOUSE_IMEX
)
{
if
(
synaptics_init
(
psmouse
)
==
0
)
if
(
max_proto
>
PSMOUSE_IMEX
)
{
if
(
!
set_properties
||
synaptics_init
(
psmouse
)
==
0
)
return
PSMOUSE_SYNAPTICS
;
/*
* Some Synaptics touchpads can emulate extended protocols (like IMPS/2).
* Unfortunately Logitech/Genius probes confuse some firmware versions so
* we'll have to skip them.
*/
psmouse_
max_proto
=
PSMOUSE_IMEX
;
max_proto
=
PSMOUSE_IMEX
;
}
/*
* Make sure that touchpad is in relative mode, gestures (taps) are enabled
...
...
@@ -395,35 +442,46 @@ static int psmouse_extensions(struct psmouse *psmouse)
synaptics_reset
(
psmouse
);
}
if
(
psmouse_max_proto
>
PSMOUSE_IMEX
&&
genius_detect
(
psmouse
))
{
if
(
max_proto
>
PSMOUSE_IMEX
&&
genius_detect
(
psmouse
))
{
if
(
set_properties
)
{
set_bit
(
BTN_EXTRA
,
psmouse
->
dev
.
keybit
);
set_bit
(
BTN_SIDE
,
psmouse
->
dev
.
keybit
);
set_bit
(
REL_WHEEL
,
psmouse
->
dev
.
relbit
);
psmouse
->
vendor
=
"Genius"
;
psmouse
->
name
=
"Wheel Mouse"
;
}
return
PSMOUSE_GENPS
;
}
if
(
psmouse_
max_proto
>
PSMOUSE_IMEX
)
{
int
type
=
ps2pp_
detect
(
psmouse
);
if
(
type
)
if
(
max_proto
>
PSMOUSE_IMEX
)
{
int
type
=
ps2pp_
init
(
psmouse
,
set_properties
);
if
(
type
>
PSMOUSE_PS2
)
return
type
;
}
if
(
psmouse_max_proto
>=
PSMOUSE_IMPS
&&
intellimouse_detect
(
psmouse
))
{
set_bit
(
REL_WHEEL
,
psmouse
->
dev
.
relbit
);
if
(
max_proto
>=
PSMOUSE_IMEX
&&
im_explorer_detect
(
psmouse
))
{
if
(
psmouse_max_proto
>=
PSMOUSE_IMEX
&&
im_explorer_detect
(
psmouse
))
{
if
(
set_properties
)
{
set_bit
(
REL_WHEEL
,
psmouse
->
dev
.
relbit
);
set_bit
(
BTN_SIDE
,
psmouse
->
dev
.
keybit
);
set_bit
(
BTN_EXTRA
,
psmouse
->
dev
.
keybit
);
if
(
!
psmouse
->
name
)
psmouse
->
name
=
"Explorer Mouse"
;
}
return
PSMOUSE_IMEX
;
}
if
(
max_proto
>=
PSMOUSE_IMPS
&&
intellimouse_detect
(
psmouse
))
{
if
(
set_properties
)
{
set_bit
(
REL_WHEEL
,
psmouse
->
dev
.
relbit
);
if
(
!
psmouse
->
name
)
psmouse
->
name
=
"Wheel Mouse"
;
}
return
PSMOUSE_IMPS
;
}
...
...
@@ -473,12 +531,7 @@ static int psmouse_probe(struct psmouse *psmouse)
if
(
psmouse_command
(
psmouse
,
NULL
,
PSMOUSE_CMD_RESET_DIS
))
printk
(
KERN_WARNING
"psmouse.c: Failed to reset mouse on %s
\n
"
,
psmouse
->
serio
->
phys
);
/*
* And here we try to determine if it has any extensions over the
* basic PS/2 3-button mouse.
*/
return
psmouse
->
type
=
psmouse_extensions
(
psmouse
);
return
0
;
}
/*
...
...
@@ -616,7 +669,6 @@ static void psmouse_connect(struct serio *serio, struct serio_dev *dev)
psmouse
->
dev
.
evbit
[
0
]
=
BIT
(
EV_KEY
)
|
BIT
(
EV_REL
);
psmouse
->
dev
.
keybit
[
LONG
(
BTN_MOUSE
)]
=
BIT
(
BTN_LEFT
)
|
BIT
(
BTN_MIDDLE
)
|
BIT
(
BTN_RIGHT
);
psmouse
->
dev
.
relbit
[
0
]
=
BIT
(
REL_X
)
|
BIT
(
REL_Y
);
psmouse
->
state
=
PSMOUSE_CMD_MODE
;
psmouse
->
serio
=
serio
;
psmouse
->
dev
.
private
=
psmouse
;
...
...
@@ -628,13 +680,21 @@ static void psmouse_connect(struct serio *serio, struct serio_dev *dev)
return
;
}
if
(
psmouse_probe
(
psmouse
)
<
=
0
)
{
if
(
psmouse_probe
(
psmouse
)
<
0
)
{
serio_close
(
serio
);
kfree
(
psmouse
);
serio
->
private
=
NULL
;
return
;
}
psmouse
->
type
=
psmouse_extensions
(
psmouse
,
psmouse_max_proto
,
1
);
if
(
!
psmouse
->
vendor
)
psmouse
->
vendor
=
"Generic"
;
if
(
!
psmouse
->
name
)
psmouse
->
name
=
"Mouse"
;
if
(
!
psmouse
->
protocol_handler
)
psmouse
->
protocol_handler
=
psmouse_process_byte
;
sprintf
(
psmouse
->
devname
,
"%s %s %s"
,
psmouse_protocols
[
psmouse
->
type
],
psmouse
->
vendor
,
psmouse
->
name
);
sprintf
(
psmouse
->
phys
,
"%s/input0"
,
...
...
@@ -668,27 +728,24 @@ static int psmouse_reconnect(struct serio *serio)
{
struct
psmouse
*
psmouse
=
serio
->
private
;
struct
serio_dev
*
dev
=
serio
->
dev
;
int
old_type
;
if
(
!
dev
||
!
psmouse
)
{
printk
(
KERN_DEBUG
"psmouse: reconnect request, but serio is disconnected, ignoring...
\n
"
);
return
-
1
;
}
old_type
=
psmouse
->
type
;
psmouse
->
state
=
PSMOUSE_CMD_MODE
;
psmouse
->
type
=
psmouse
->
acking
=
psmouse
->
cmdcnt
=
psmouse
->
pktcnt
=
0
;
psmouse
->
acking
=
psmouse
->
cmdcnt
=
psmouse
->
pktcnt
=
psmouse
->
out_of_sync
=
0
;
if
(
psmouse
->
reconnect
)
{
if
(
psmouse
->
reconnect
(
psmouse
))
return
-
1
;
}
else
if
(
psmouse_probe
(
psmouse
)
!=
old_type
)
}
else
if
(
psmouse_probe
(
psmouse
)
<
0
||
psmouse
->
type
!=
psmouse_extensions
(
psmouse
,
psmouse_max_proto
,
0
))
return
-
1
;
/* ok, the device type (and capabilities) match the old one,
* we can continue using it, complete intialization
*/
psmouse
->
type
=
old_type
;
psmouse_initialize
(
psmouse
);
if
(
psmouse
->
ptport
)
{
...
...
drivers/input/mouse/psmouse.h
View file @
ff3c0388
...
...
@@ -22,6 +22,13 @@
#define PSMOUSE_ACTIVATED 1
#define PSMOUSE_IGNORE 2
/* psmouse protocol handler return codes */
typedef
enum
{
PSMOUSE_BAD_DATA
,
PSMOUSE_GOOD_DATA
,
PSMOUSE_FULL_PACKET
}
psmouse_ret_t
;
struct
psmouse
;
struct
psmouse_ptport
{
...
...
@@ -45,6 +52,7 @@ struct psmouse {
unsigned
char
type
;
unsigned
char
model
;
unsigned
long
last
;
unsigned
long
out_of_sync
;
unsigned
char
state
;
char
acking
;
volatile
char
ack
;
...
...
@@ -52,6 +60,7 @@ struct psmouse {
char
devname
[
64
];
char
phys
[
32
];
psmouse_ret_t
(
*
protocol_handler
)(
struct
psmouse
*
psmouse
,
struct
pt_regs
*
regs
);
int
(
*
reconnect
)(
struct
psmouse
*
psmouse
);
void
(
*
disconnect
)(
struct
psmouse
*
psmouse
);
};
...
...
@@ -65,10 +74,10 @@ struct psmouse {
#define PSMOUSE_SYNAPTICS 7
int
psmouse_command
(
struct
psmouse
*
psmouse
,
unsigned
char
*
param
,
int
command
);
int
psmouse_sliced_command
(
struct
psmouse
*
psmouse
,
unsigned
char
command
);
int
psmouse_reset
(
struct
psmouse
*
psmouse
);
extern
int
psmouse_smartscroll
;
extern
unsigned
int
psmouse_rate
;
extern
unsigned
int
psmouse_resetafter
;
#endif
/* _PSMOUSE_H */
drivers/input/mouse/synaptics.c
View file @
ff3c0388
This diff is collapsed.
Click to expand it.
drivers/input/mouse/synaptics.h
View file @
ff3c0388
...
...
@@ -9,7 +9,6 @@
#ifndef _SYNAPTICS_H
#define _SYNAPTICS_H
extern
void
synaptics_process_byte
(
struct
psmouse
*
psmouse
,
struct
pt_regs
*
regs
);
extern
int
synaptics_detect
(
struct
psmouse
*
psmouse
);
extern
int
synaptics_init
(
struct
psmouse
*
psmouse
);
extern
void
synaptics_reset
(
struct
psmouse
*
psmouse
);
...
...
@@ -44,13 +43,14 @@ extern void synaptics_reset(struct psmouse *psmouse);
/* synaptics capability bits */
#define SYN_CAP_EXTENDED(c) ((c) & (1 << 23))
#define SYN_CAP_MIDDLE_BUTTON(c) ((c) & (1 << 18))
#define SYN_CAP_PASS_THROUGH(c) ((c) & (1 << 7))
#define SYN_CAP_SLEEP(c) ((c) & (1 << 4))
#define SYN_CAP_FOUR_BUTTON(c) ((c) & (1 << 3))
#define SYN_CAP_MULTIFINGER(c) ((c) & (1 << 1))
#define SYN_CAP_PALMDETECT(c) ((c) & (1 << 0))
#define SYN_CAP_VALID(c) ((((c) & 0x00ff00) >> 8) == 0x47)
#define SYN_EXT_CAP_REQUESTS(c) (((
(c) & 0x700000) >> 20) == 1
)
#define SYN_EXT_CAP_REQUESTS(c) (((
c) & 0x700000) >> 20
)
#define SYN_CAP_MULTI_BUTTON_NO(ec) (((ec) & 0x00f000) >> 12)
/* synaptics modes query bits */
...
...
@@ -86,18 +86,12 @@ struct synaptics_hw_state {
int
y
;
int
z
;
int
w
;
int
left
;
int
right
;
int
up
;
int
down
;
int
b0
;
int
b1
;
int
b2
;
int
b3
;
int
b4
;
int
b5
;
int
b6
;
int
b7
;
unsigned
int
left
:
1
;
unsigned
int
right
:
1
;
unsigned
int
middle
:
1
;
unsigned
int
up
:
1
;
unsigned
int
down
:
1
;
unsigned
char
ext_buttons
;
};
struct
synaptics_data
{
...
...
@@ -108,7 +102,6 @@ struct synaptics_data {
unsigned
long
int
identity
;
/* Identification */
/* Data for normal processing */
unsigned
int
out_of_sync
;
/* # of packets out of sync */
int
old_w
;
/* Previous w value */
unsigned
char
pkt_type
;
/* packet type - old, new, etc */
};
...
...
drivers/input/mousedev.c
View file @
ff3c0388
...
...
@@ -2,6 +2,7 @@
* Input driver to ExplorerPS/2 device driver module.
*
* Copyright (c) 1999-2002 Vojtech Pavlik
* Copyright (c) 2004 Dmitry Torokhov
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as published by
...
...
@@ -47,15 +48,24 @@ static int yres = CONFIG_INPUT_MOUSEDEV_SCREEN_Y;
module_param
(
yres
,
uint
,
0
);
MODULE_PARM_DESC
(
yres
,
"Vertical screen resolution"
);
struct
mousedev_motion
{
int
dx
,
dy
,
dz
;
};
struct
mousedev
{
int
exist
;
int
open
;
int
minor
;
int
misc
;
char
name
[
16
];
wait_queue_head_t
wait
;
struct
list_head
list
;
struct
input_handle
handle
;
struct
mousedev_motion
packet
;
unsigned
long
buttons
;
unsigned
int
pkt_count
;
int
old_x
[
4
],
old_y
[
4
];
unsigned
int
touch
;
};
struct
mousedev_list
{
...
...
@@ -63,13 +73,10 @@ struct mousedev_list {
struct
mousedev
*
mousedev
;
struct
list_head
node
;
int
dx
,
dy
,
dz
;
int
old_x
[
4
],
old_y
[
4
];
unsigned
long
buttons
;
signed
char
ps2
[
6
];
unsigned
char
ready
,
buffer
,
bufsiz
;
unsigned
char
mode
,
imexseq
,
impsseq
;
unsigned
int
pkt_count
;
unsigned
char
touch
;
};
#define MOUSEDEV_SEQ_LEN 6
...
...
@@ -82,135 +89,157 @@ static struct input_handler mousedev_handler;
static
struct
mousedev
*
mousedev_table
[
MOUSEDEV_MINORS
];
static
struct
mousedev
mousedev_mix
;
#define fx(i) (
list->old_x[(list
->pkt_count - (i)) & 03])
#define fy(i) (
list->old_y[(list
->pkt_count - (i)) & 03])
#define fx(i) (
mousedev->old_x[(mousedev
->pkt_count - (i)) & 03])
#define fy(i) (
mousedev->old_y[(mousedev
->pkt_count - (i)) & 03])
static
void
mousedev_
abs_event
(
struct
input_handle
*
handle
,
struct
mousedev_list
*
list
,
unsigned
int
code
,
int
value
)
static
void
mousedev_
touchpad_event
(
struct
mousedev
*
mousedev
,
unsigned
int
code
,
int
value
)
{
int
size
;
int
touchpad
;
/* Ignore joysticks */
if
(
test_bit
(
BTN_TRIGGER
,
handle
->
dev
->
keybit
))
return
;
touchpad
=
test_bit
(
BTN_TOOL_FINGER
,
handle
->
dev
->
keybit
);
if
(
mousedev
->
touch
)
{
switch
(
code
)
{
case
ABS_X
:
if
(
touchpad
)
{
if
(
list
->
touch
)
{
fx
(
0
)
=
value
;
if
(
list
->
pkt_count
>=
2
)
list
->
dx
=
((
fx
(
0
)
-
fx
(
1
))
/
2
+
(
fx
(
1
)
-
fx
(
2
))
/
2
)
/
8
;
}
}
else
{
size
=
handle
->
dev
->
absmax
[
ABS_X
]
-
handle
->
dev
->
absmin
[
ABS_X
];
if
(
size
==
0
)
size
=
xres
;
list
->
dx
+=
(
value
*
xres
-
list
->
old_x
[
0
])
/
size
;
list
->
old_x
[
0
]
+=
list
->
dx
*
size
;
}
if
(
mousedev
->
pkt_count
>=
2
)
mousedev
->
packet
.
dx
=
((
fx
(
0
)
-
fx
(
1
))
/
2
+
(
fx
(
1
)
-
fx
(
2
))
/
2
)
/
8
;
break
;
case
ABS_Y
:
if
(
touchpad
)
{
if
(
list
->
touch
)
{
fy
(
0
)
=
value
;
if
(
list
->
pkt_count
>=
2
)
list
->
dy
=
-
((
fy
(
0
)
-
fy
(
1
))
/
2
+
(
fy
(
1
)
-
fy
(
2
))
/
2
)
/
8
;
}
}
else
{
size
=
handle
->
dev
->
absmax
[
ABS_Y
]
-
handle
->
dev
->
absmin
[
ABS_Y
];
if
(
size
==
0
)
size
=
yres
;
list
->
dy
-=
(
value
*
yres
-
list
->
old_y
[
0
])
/
size
;
list
->
old_y
[
0
]
-=
list
->
dy
*
size
;
}
if
(
mousedev
->
pkt_count
>=
2
)
mousedev
->
packet
.
dy
=
-
((
fy
(
0
)
-
fy
(
1
))
/
2
+
(
fy
(
1
)
-
fy
(
2
))
/
2
)
/
8
;
break
;
}
}
}
static
void
mousedev_
event
(
struct
input_handle
*
handle
,
unsigned
int
type
,
unsigned
int
code
,
int
value
)
static
void
mousedev_
abs_event
(
struct
input_dev
*
dev
,
struct
mousedev
*
mousedev
,
unsigned
int
code
,
int
value
)
{
struct
mousedev
*
mousedevs
[
3
]
=
{
handle
->
private
,
&
mousedev_mix
,
NULL
};
struct
mousedev
**
mousedev
=
mousedevs
;
struct
mousedev_list
*
list
;
int
index
,
wake
;
while
(
*
mousedev
)
{
int
size
;
wake
=
0
;
switch
(
code
)
{
case
ABS_X
:
size
=
dev
->
absmax
[
ABS_X
]
-
dev
->
absmin
[
ABS_X
];
if
(
size
==
0
)
size
=
xres
;
mousedev
->
packet
.
dx
=
(
value
*
xres
-
mousedev
->
old_x
[
0
])
/
size
;
mousedev
->
old_x
[
0
]
=
mousedev
->
packet
.
dx
*
size
;
break
;
list_for_each_entry
(
list
,
&
(
*
mousedev
)
->
list
,
node
)
switch
(
type
)
{
case
EV_ABS
:
mousedev_abs_event
(
handle
,
list
,
code
,
value
);
case
ABS_Y
:
size
=
dev
->
absmax
[
ABS_Y
]
-
dev
->
absmin
[
ABS_Y
];
if
(
size
==
0
)
size
=
yres
;
mousedev
->
packet
.
dy
=
(
value
*
yres
-
mousedev
->
old_y
[
0
])
/
size
;
mousedev
->
old_y
[
0
]
=
mousedev
->
packet
.
dy
*
size
;
break
;
}
}
case
EV_REL
:
static
void
mousedev_rel_event
(
struct
mousedev
*
mousedev
,
unsigned
int
code
,
int
value
)
{
switch
(
code
)
{
case
REL_X
:
list
->
dx
+=
value
;
break
;
case
REL_Y
:
list
->
dy
-=
value
;
break
;
case
REL_WHEEL
:
if
(
list
->
mode
)
list
->
dz
-=
value
;
break
;
case
REL_X
:
mousedev
->
packet
.
dx
+=
value
;
break
;
case
REL_Y
:
mousedev
->
packet
.
dy
-=
value
;
break
;
case
REL_WHEEL
:
mousedev
->
packet
.
dz
-=
value
;
break
;
}
break
;
}
case
EV_KEY
:
if
(
code
==
BTN_TOUCH
&&
test_bit
(
BTN_TOOL_FINGER
,
handle
->
dev
->
keybit
))
{
/* Handle touchpad data */
list
->
touch
=
value
;
if
(
!
list
->
touch
)
list
->
pkt_count
=
0
;
break
;
}
static
void
mousedev_key_event
(
struct
mousedev
*
mousedev
,
unsigned
int
code
,
int
value
)
{
int
index
;
switch
(
code
)
{
case
BTN_TOUCH
:
case
BTN_0
:
case
BTN_FORWARD
:
case
BTN_LEFT
:
index
=
0
;
break
;
case
BTN_4
:
case
BTN_EXTRA
:
if
(
list
->
mode
==
2
)
{
index
=
4
;
break
;
}
case
BTN_STYLUS
:
case
BTN_1
:
case
BTN_RIGHT
:
index
=
1
;
break
;
case
BTN_3
:
case
BTN_BACK
:
case
BTN_SIDE
:
if
(
list
->
mode
==
2
)
{
index
=
3
;
break
;
}
case
BTN_2
:
case
BTN_STYLUS2
:
case
BTN_MIDDLE
:
index
=
2
;
break
;
case
BTN_3
:
case
BTN_BACK
:
case
BTN_SIDE
:
index
=
3
;
break
;
case
BTN_4
:
case
BTN_EXTRA
:
index
=
4
;
break
;
default:
return
;
}
switch
(
value
)
{
case
0
:
clear_bit
(
index
,
&
list
->
buttons
);
break
;
case
1
:
set_bit
(
index
,
&
list
->
buttons
);
break
;
case
2
:
return
;
}
break
;
case
EV_SYN
:
switch
(
code
)
{
case
SYN_REPORT
:
if
(
list
->
touch
)
{
list
->
pkt_count
++
;
/* Input system eats duplicate events,
* but we need all of them to do correct
* averaging so apply present one forward
*/
fx
(
0
)
=
fx
(
1
);
fy
(
0
)
=
fy
(
1
);
if
(
value
)
{
set_bit
(
index
,
&
mousedev
->
buttons
);
set_bit
(
index
,
&
mousedev_mix
.
buttons
);
}
else
{
clear_bit
(
index
,
&
mousedev
->
buttons
);
clear_bit
(
index
,
&
mousedev_mix
.
buttons
);
}
}
static
void
mousedev_notify_readers
(
struct
mousedev
*
mousedev
,
struct
mousedev_motion
*
packet
)
{
struct
mousedev_list
*
list
;
list_for_each_entry
(
list
,
&
mousedev
->
list
,
node
)
{
list
->
dx
+=
packet
->
dx
;
list
->
dy
+=
packet
->
dy
;
list
->
dz
+=
packet
->
dz
;
list
->
buttons
=
mousedev
->
buttons
;
list
->
ready
=
1
;
kill_fasync
(
&
list
->
fasync
,
SIGIO
,
POLL_IN
);
wake
=
1
;
}
wake_up_interruptible
(
&
mousedev
->
wait
);
}
static
void
mousedev_event
(
struct
input_handle
*
handle
,
unsigned
int
type
,
unsigned
int
code
,
int
value
)
{
struct
mousedev
*
mousedev
=
handle
->
private
;
switch
(
type
)
{
case
EV_ABS
:
/* Ignore joysticks */
if
(
test_bit
(
BTN_TRIGGER
,
handle
->
dev
->
keybit
))
return
;
if
(
test_bit
(
BTN_TOOL_FINGER
,
handle
->
dev
->
keybit
))
mousedev_touchpad_event
(
mousedev
,
code
,
value
);
else
mousedev_abs_event
(
handle
->
dev
,
mousedev
,
code
,
value
);
break
;
case
EV_REL
:
mousedev_rel_event
(
mousedev
,
code
,
value
);
break
;
case
EV_KEY
:
if
(
value
!=
2
)
{
if
(
code
==
BTN_TOUCH
&&
test_bit
(
BTN_TOOL_FINGER
,
handle
->
dev
->
keybit
))
{
/* Handle touchpad data */
mousedev
->
touch
=
value
;
if
(
!
mousedev
->
touch
)
mousedev
->
pkt_count
=
0
;
}
else
mousedev_key_event
(
mousedev
,
code
,
value
);
}
break
;
case
EV_SYN
:
if
(
code
==
SYN_REPORT
)
{
if
(
mousedev
->
touch
)
{
mousedev
->
pkt_count
++
;
/* Input system eats duplicate events, but we need all of them
* to do correct averaging so apply present one forward
*/
fx
(
0
)
=
fx
(
1
);
fy
(
0
)
=
fy
(
1
);
}
if
(
wake
)
wake_up_interruptible
(
&
((
*
mousedev
)
->
wait
)
);
mousedev_notify_readers
(
mousedev
,
&
mousedev
->
packet
);
mousedev_notify_readers
(
&
mousedev_mix
,
&
mousedev
->
packet
);
mousedev
++
;
memset
(
&
mousedev
->
packet
,
0
,
sizeof
(
struct
mousedev_motion
));
}
break
;
}
}
...
...
@@ -326,6 +355,8 @@ static void mousedev_packet(struct mousedev_list *list, unsigned char off)
list
->
dz
-=
list
->
ps2
[
off
+
3
];
list
->
ps2
[
off
+
3
]
=
(
list
->
ps2
[
off
+
3
]
&
0x0f
)
|
((
list
->
buttons
&
0x18
)
<<
1
);
list
->
bufsiz
++
;
}
else
{
list
->
ps2
[
off
]
|=
((
list
->
buttons
&
0x10
)
>>
3
)
|
((
list
->
buttons
&
0x08
)
>>
1
);
}
if
(
list
->
mode
==
1
)
{
...
...
@@ -391,9 +422,9 @@ static ssize_t mousedev_write(struct file * file, const char __user * buffer, si
list
->
impsseq
=
0
;
list
->
imexseq
=
0
;
list
->
mode
=
0
;
list
->
ps2
[
0
]
=
0xaa
;
list
->
ps2
[
1
]
=
0x00
;
list
->
bufsiz
=
2
;
list
->
ps2
[
1
]
=
0xaa
;
list
->
ps2
[
2
]
=
0x00
;
list
->
bufsiz
=
3
;
break
;
}
...
...
@@ -553,6 +584,7 @@ static struct input_handler mousedev_handler = {
static
struct
miscdevice
psaux_mouse
=
{
PSMOUSE_MINOR
,
"psaux"
,
&
mousedev_fops
};
static
int
psaux_registered
;
#endif
static
int
__init
mousedev_init
(
void
)
...
...
@@ -572,7 +604,7 @@ static int __init mousedev_init(void)
NULL
,
"mice"
);
#ifdef CONFIG_INPUT_MOUSEDEV_PSAUX
if
(
!
(
mousedev_mix
.
misc
=
!
misc_register
(
&
psaux_mouse
)))
if
(
!
(
psaux_registered
=
!
misc_register
(
&
psaux_mouse
)))
printk
(
KERN_WARNING
"mice: could not misc_register the device
\n
"
);
#endif
...
...
@@ -584,7 +616,7 @@ static int __init mousedev_init(void)
static
void
__exit
mousedev_exit
(
void
)
{
#ifdef CONFIG_INPUT_MOUSEDEV_PSAUX
if
(
mousedev_mix
.
misc
)
if
(
psaux_registered
)
misc_deregister
(
&
psaux_mouse
);
#endif
devfs_remove
(
"input/mice"
);
...
...
drivers/input/power.c
View file @
ff3c0388
...
...
@@ -172,3 +172,4 @@ module_exit(power_exit);
MODULE_AUTHOR
(
"James Simmons <jsimmons@transvirtual.com>"
);
MODULE_DESCRIPTION
(
"Input Power Management driver"
);
MODULE_LICENSE
(
"GPL"
);
drivers/input/serio/98kbd-io.c
View file @
ff3c0388
...
...
@@ -51,7 +51,7 @@ spinlock_t kbd98io_lock = SPIN_LOCK_UNLOCKED;
static
struct
serio
kbd98_port
;
extern
struct
pt_regs
*
kbd_pt_regs
;
static
void
kbd98io_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
);
static
irqreturn_t
kbd98io_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
);
/*
* kbd98_flush() flushes all data that may be in the keyboard buffers
...
...
@@ -143,7 +143,7 @@ static struct serio kbd98_port =
* to the upper layers.
*/
static
void
kbd98io_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
static
irqreturn_t
kbd98io_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
unsigned
long
flags
;
unsigned
char
data
;
...
...
@@ -154,6 +154,7 @@ static void kbd98io_interrupt(int irq, void *dev_id, struct pt_regs *regs)
spin_unlock_irqrestore
(
&
kbd98io_lock
,
flags
);
serio_interrupt
(
&
kbd98_port
,
data
,
0
,
regs
);
return
IRQ_HANDLED
;
}
int
__init
kbd98io_init
(
void
)
...
...
drivers/input/serio/ct82c710.c
View file @
ff3c0388
drivers/input/serio/gscps2.c
View file @
ff3c0388
drivers/input/serio/i8042.c
View file @
ff3c0388
...
...
@@ -474,8 +474,17 @@ static int i8042_enable_mux_mode(struct i8042_values *values, unsigned char *mux
if
(
i8042_command
(
&
param
,
I8042_CMD_AUX_LOOP
)
||
param
!=
0xa9
)
return
-
1
;
param
=
0xa4
;
if
(
i8042_command
(
&
param
,
I8042_CMD_AUX_LOOP
)
||
param
==
0x5b
)
if
(
i8042_command
(
&
param
,
I8042_CMD_AUX_LOOP
)
||
param
==
0x5b
)
{
/*
* Do another loop test with the 0x5a value. Doing anything else upsets
* Profusion/ServerWorks OSB4 chipsets.
*/
param
=
0x5a
;
i8042_command
(
&
param
,
I8042_CMD_AUX_LOOP
);
return
-
1
;
}
if
(
mux_version
)
*
mux_version
=
~
param
;
...
...
@@ -532,8 +541,8 @@ static int __init i8042_check_mux(struct i8042_values *values)
return
-
1
;
/* Workaround for broken chips which seem to support MUX, but in reality don't. */
/* They all report version 1
2.10
*/
if
(
mux_version
==
0x
CA
)
/* They all report version 1
0.12
*/
if
(
mux_version
==
0x
AC
)
return
-
1
;
printk
(
KERN_INFO
"i8042.c: Detected active multiplexing controller, rev %d.%d.
\n
"
,
...
...
@@ -868,7 +877,7 @@ static int i8042_controller_resume(void)
static
int
i8042_notify_sys
(
struct
notifier_block
*
this
,
unsigned
long
code
,
void
*
unused
)
{
if
(
code
==
SYS_DOWN
||
code
==
SYS_HALT
)
if
(
code
==
SYS_DOWN
||
code
==
SYS_HALT
)
i8042_controller_cleanup
();
return
NOTIFY_DONE
;
}
...
...
@@ -997,8 +1006,6 @@ void __exit i8042_exit(void)
sysdev_class_unregister
(
&
kbc_sysclass
);
}
del_timer_sync
(
&
i8042_timer
);
i8042_controller_cleanup
();
if
(
i8042_kbd_values
.
exists
)
...
...
@@ -1010,6 +1017,7 @@ void __exit i8042_exit(void)
for
(
i
=
0
;
i
<
4
;
i
++
)
if
(
i8042_mux_values
[
i
].
exists
)
serio_unregister_port
(
i8042_mux_port
+
i
);
del_timer_sync
(
&
i8042_timer
);
i8042_platform_exit
();
}
...
...
drivers/input/serio/parkbd.c
View file @
ff3c0388
...
...
@@ -86,20 +86,9 @@ static int parkbd_write(struct serio *port, unsigned char c)
return
0
;
}
static
int
parkbd_open
(
struct
serio
*
port
)
{
return
0
;
}
static
void
parkbd_close
(
struct
serio
*
port
)
{
}
static
struct
serio
parkbd_port
=
{
.
write
=
parkbd_write
,
.
open
=
parkbd_open
,
.
close
=
parkbd_close
,
.
name
=
parkbd_name
,
.
phys
=
parkbd_phys
,
};
...
...
drivers/input/serio/q40kbd.c
View file @
ff3c0388
...
...
@@ -47,23 +47,12 @@ MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
MODULE_DESCRIPTION
(
"Q40 PS/2 keyboard controller driver"
);
MODULE_LICENSE
(
"GPL"
);
static
int
q40kbd_open
(
struct
serio
*
port
)
{
return
0
;
}
static
void
q40kbd_close
(
struct
serio
*
port
)
{
}
static
struct
serio
q40kbd_port
=
{
.
type
=
SERIO_8042
,
.
name
=
"Q40 kbd port"
,
.
phys
=
"Q40"
,
.
write
=
NULL
,
.
open
=
q40kbd_open
,
.
close
=
q40kbd_close
,
};
static
irqreturn_t
q40kbd_interrupt
(
int
irq
,
void
*
dev_id
,
...
...
drivers/input/serio/rpckbd.c
View file @
ff3c0388
drivers/input/serio/serio.c
View file @
ff3c0388
...
...
@@ -293,7 +293,7 @@ void serio_unregister_device(struct serio_dev *dev)
int
serio_open
(
struct
serio
*
serio
,
struct
serio_dev
*
dev
)
{
serio
->
dev
=
dev
;
if
(
serio
->
open
(
serio
))
{
if
(
serio
->
open
&&
serio
->
open
(
serio
))
{
serio
->
dev
=
NULL
;
return
-
1
;
}
...
...
@@ -303,6 +303,7 @@ int serio_open(struct serio *serio, struct serio_dev *dev)
/* called from serio_dev->connect/disconnect methods under serio_sem */
void
serio_close
(
struct
serio
*
serio
)
{
if
(
serio
->
close
)
serio
->
close
(
serio
);
serio
->
dev
=
NULL
;
}
...
...
drivers/input/serio/serport.c
View file @
ff3c0388
...
...
@@ -48,11 +48,6 @@ static int serport_serio_write(struct serio *serio, unsigned char data)
return
-
(
serport
->
tty
->
driver
->
write
(
serport
->
tty
,
0
,
&
data
,
1
)
!=
1
);
}
static
int
serport_serio_open
(
struct
serio
*
serio
)
{
return
0
;
}
static
void
serport_serio_close
(
struct
serio
*
serio
)
{
struct
serport
*
serport
=
serio
->
driver
;
...
...
@@ -87,7 +82,6 @@ static int serport_ldisc_open(struct tty_struct *tty)
serport
->
serio
.
type
=
SERIO_RS232
;
serport
->
serio
.
write
=
serport_serio_write
;
serport
->
serio
.
open
=
serport_serio_open
;
serport
->
serio
.
close
=
serport_serio_close
;
serport
->
serio
.
driver
=
serport
;
...
...
drivers/input/touchscreen/gunze.c
View file @
ff3c0388
...
...
@@ -125,11 +125,9 @@ static void gunze_connect(struct serio *serio, struct serio_dev *dev)
init_input_dev
(
&
gunze
->
dev
);
gunze
->
dev
.
evbit
[
0
]
=
BIT
(
EV_KEY
)
|
BIT
(
EV_ABS
);
gunze
->
dev
.
absbit
[
0
]
=
BIT
(
ABS_X
)
|
BIT
(
ABS_Y
);
gunze
->
dev
.
keybit
[
LONG
(
BTN_TOUCH
)]
=
BIT
(
BTN_TOUCH
);
gunze
->
dev
.
absmin
[
ABS_X
]
=
96
;
gunze
->
dev
.
absmin
[
ABS_Y
]
=
72
;
gunze
->
dev
.
absmax
[
ABS_X
]
=
4000
;
gunze
->
dev
.
absmax
[
ABS_Y
]
=
3000
;
input_set_abs_params
(
&
gunze
->
dev
,
ABS_X
,
96
,
4000
,
0
,
0
);
input_set_abs_params
(
&
gunze
->
dev
,
ABS_Y
,
72
,
3000
,
0
,
0
);
gunze
->
serio
=
serio
;
serio
->
private
=
gunze
;
...
...
drivers/input/touchscreen/h3600_ts_input.c
View file @
ff3c0388
...
...
@@ -45,6 +45,10 @@
#include <asm/arch/hardware.h>
#include <asm/arch/irqs.h>
MODULE_AUTHOR
(
"James Simmons <jsimmons@transvirtual.com>"
);
MODULE_DESCRIPTION
(
"H3600 touchscreen driver"
);
MODULE_LICENSE
(
"GPL"
);
/*
* Definitions & global arrays.
*/
...
...
@@ -103,7 +107,7 @@ struct h3600_dev {
char
phys
[
32
];
};
static
void
action_button_handler
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
static
irqreturn_t
action_button_handler
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
int
down
=
(
GPLR
&
GPIO_BITSY_ACTION_BUTTON
)
?
0
:
1
;
struct
input_dev
*
dev
=
(
struct
input_dev
*
)
dev_id
;
...
...
@@ -111,9 +115,11 @@ static void action_button_handler(int irq, void *dev_id, struct pt_regs *regs)
input_regs
(
dev
,
regs
);
input_report_key
(
dev
,
KEY_ENTER
,
down
);
input_sync
(
dev
);
return
IRQ_HANDLED
;
}
static
void
npower_button_handler
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
static
irqreturn_t
npower_button_handler
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
int
down
=
(
GPLR
&
GPIO_BITSY_NPOWER_BUTTON
)
?
0
:
1
;
struct
input_dev
*
dev
=
(
struct
input_dev
*
)
dev_id
;
...
...
@@ -126,6 +132,8 @@ static void npower_button_handler(int irq, void *dev_id, struct pt_regs *regs)
input_report_key
(
dev
,
KEY_SUSPEND
,
1
);
input_report_key
(
dev
,
KEY_SUSPEND
,
down
);
input_sync
(
dev
);
return
IRQ_HANDLED
;
}
#ifdef CONFIG_PM
...
...
@@ -141,7 +149,7 @@ enum flite_pwr {
* h3600_flite_power: enables or disables power to frontlight, using last bright */
unsigned
int
h3600_flite_power
(
struct
input_dev
*
dev
,
enum
flite_pwr
pwr
)
{
unsigned
char
brightness
=
(
(
pwr
==
FLITE_PWR_OFF
)
?
0
:
flite_brightness
)
;
unsigned
char
brightness
=
(
pwr
==
FLITE_PWR_OFF
)
?
0
:
flite_brightness
;
struct
h3600_dev
*
ts
=
dev
->
private
;
/* Must be in this order */
...
...
@@ -317,8 +325,8 @@ static int state;
#define STATE_DATA 2
/* state where we decode data */
#define STATE_EOF 3
/* state where we decode checksum or EOF */
static
void
h3600ts_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
fla
gs
)
static
irqreturn_t
h3600ts_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
re
gs
)
{
struct
h3600_dev
*
ts
=
serio
->
private
;
...
...
@@ -329,7 +337,7 @@ static void h3600ts_interrupt(struct serio *serio, unsigned char data,
case
STATE_SOF
:
if
(
data
==
CHAR_SOF
)
state
=
STATE_ID
;
return
;
break
;
case
STATE_ID
:
ts
->
event
=
(
data
&
0xf0
)
>>
4
;
ts
->
len
=
(
data
&
0xf
);
...
...
@@ -339,7 +347,7 @@ static void h3600ts_interrupt(struct serio *serio, unsigned char data,
break
;
}
ts
->
chksum
=
data
;
state
=
(
ts
->
len
>
0
)
?
STATE_DATA
:
STATE_EOF
;
state
=
(
ts
->
len
>
0
)
?
STATE_DATA
:
STATE_EOF
;
break
;
case
STATE_DATA
:
ts
->
chksum
+=
data
;
...
...
@@ -349,13 +357,15 @@ static void h3600ts_interrupt(struct serio *serio, unsigned char data,
break
;
case
STATE_EOF
:
state
=
STATE_SOF
;
if
(
data
==
CHAR_EOF
||
data
==
ts
->
chksum
)
h3600ts_process_packet
(
ts
);
if
(
data
==
CHAR_EOF
||
data
==
ts
->
chksum
)
h3600ts_process_packet
(
ts
,
regs
);
break
;
default:
printk
(
"Error3
\n
"
);
break
;
}
return
IRQ_HANDLED
;
}
/*
...
...
@@ -378,8 +388,8 @@ static void h3600ts_connect(struct serio *serio, struct serio_dev *dev)
init_input_dev
(
&
ts
->
dev
);
/* Device specific stuff */
set_GPIO_IRQ_edge
(
GPIO_BITSY_ACTION_BUTTON
,
GPIO_BOTH_EDGES
);
set_GPIO_IRQ_edge
(
GPIO_BITSY_NPOWER_BUTTON
,
GPIO_RISING_EDGE
);
set_GPIO_IRQ_edge
(
GPIO_BITSY_ACTION_BUTTON
,
GPIO_BOTH_EDGES
);
set_GPIO_IRQ_edge
(
GPIO_BITSY_NPOWER_BUTTON
,
GPIO_RISING_EDGE
);
if
(
request_irq
(
IRQ_GPIO_BITSY_ACTION_BUTTON
,
action_button_handler
,
SA_SHIRQ
|
SA_INTERRUPT
|
SA_SAMPLE_RANDOM
,
...
...
@@ -397,17 +407,12 @@ static void h3600ts_connect(struct serio *serio, struct serio_dev *dev)
kfree
(
ts
);
return
;
}
/* Now we have things going we setup our input device */
ts
->
dev
.
evbit
[
0
]
=
BIT
(
EV_KEY
)
|
BIT
(
EV_ABS
)
|
BIT
(
EV_LED
)
|
BIT
(
EV_PWR
);
ts
->
dev
.
absbit
[
0
]
=
BIT
(
ABS_X
)
|
BIT
(
ABS_Y
);
ts
->
dev
.
ledbit
[
0
]
=
BIT
(
LED_SLEEP
);
ts
->
dev
.
absmin
[
ABS_X
]
=
60
;
ts
->
dev
.
absmin
[
ABS_Y
]
=
35
;
ts
->
dev
.
absmax
[
ABS_X
]
=
985
;
ts
->
dev
.
absmax
[
ABS_Y
]
=
1024
;
ts
->
dev
.
absfuzz
[
ABS_X
]
=
0
;
ts
->
dev
.
absfuzz
[
ABS_Y
]
=
0
;
ts
->
serio
=
serio
;
serio
->
private
=
ts
;
input_set_abs_params
(
&
ts
->
dev
,
ABS_X
,
60
,
985
,
0
,
0
);
input_set_abs_params
(
&
ts
->
dev
,
ABS_Y
,
35
,
1024
,
0
,
0
);
set_bit
(
KEY_RECORD
,
ts
->
dev
.
keybit
);
set_bit
(
KEY_Q
,
ts
->
dev
.
keybit
);
...
...
@@ -422,6 +427,9 @@ static void h3600ts_connect(struct serio *serio, struct serio_dev *dev)
ts
->
dev
.
keybit
[
LONG
(
BTN_TOUCH
)]
|=
BIT
(
BTN_TOUCH
);
ts
->
dev
.
keybit
[
LONG
(
KEY_SUSPEND
)]
|=
BIT
(
KEY_SUSPEND
);
ts
->
serio
=
serio
;
serio
->
private
=
ts
;
sprintf
(
ts
->
phys
,
"%s/input0"
,
serio
->
phys
);
ts
->
dev
.
event
=
h3600ts_event
;
...
...
drivers/video/sbuslib.c
View file @
ff3c0388
...
...
@@ -122,6 +122,7 @@ int sbusfb_ioctl_helper(unsigned long cmd, unsigned long arg,
cmap
.
red
=
&
red
;
cmap
.
green
=
&
green
;
cmap
.
blue
=
&
blue
;
cmap
.
transp
=
NULL
;
for
(
i
=
0
;
i
<
count
;
i
++
)
{
int
err
;
...
...
include/asm-arm/cacheflush.h
View file @
ff3c0388
...
...
@@ -291,17 +291,7 @@ flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr)
* about to change to user space. This is the same method as used on SPARC64.
* See update_mmu_cache for the user space part.
*/
extern
void
__flush_dcache_page
(
struct
page
*
);
static
inline
void
flush_dcache_page
(
struct
page
*
page
)
{
struct
address_space
*
mapping
=
page_mapping
(
page
);
if
(
mapping
&&
!
mapping_mapped
(
mapping
))
set_bit
(
PG_dcache_dirty
,
&
page
->
flags
);
else
__flush_dcache_page
(
page
);
}
extern
void
flush_dcache_page
(
struct
page
*
);
#define flush_dcache_mmap_lock(mapping) \
spin_lock_irq(&(mapping)->tree_lock)
...
...
include/asm-ppc/pgtable.h
View file @
ff3c0388
...
...
@@ -555,8 +555,12 @@ static inline void __ptep_set_access_flags(pte_t *ptep, pte_t entry, int dirty)
(
_PAGE_DIRTY
|
_PAGE_ACCESSED
|
_PAGE_RW
);
pte_update
(
ptep
,
0
,
bits
);
}
#define ptep_set_access_flags(__vma, __address, __ptep, __entry, __dirty) \
__ptep_set_access_flags(__ptep, __entry, __dirty)
do { \
__ptep_set_access_flags(__ptep, __entry, __dirty); \
flush_tlb_page_nohash(__vma, __address); \
} while(0)
/*
* Macro to mark a page protection value as "uncacheable".
...
...
include/asm-ppc/tlbflush.h
View file @
ff3c0388
...
...
@@ -29,6 +29,9 @@ static inline void flush_tlb_mm(struct mm_struct *mm)
static
inline
void
flush_tlb_page
(
struct
vm_area_struct
*
vma
,
unsigned
long
vmaddr
)
{
_tlbie
(
vmaddr
);
}
static
inline
void
flush_tlb_page_nohash
(
struct
vm_area_struct
*
vma
,
unsigned
long
vmaddr
)
{
_tlbie
(
vmaddr
);
}
static
inline
void
flush_tlb_range
(
struct
vm_area_struct
*
vma
,
unsigned
long
start
,
unsigned
long
end
)
{
__tlbia
();
}
...
...
@@ -44,6 +47,9 @@ static inline void flush_tlb_mm(struct mm_struct *mm)
static
inline
void
flush_tlb_page
(
struct
vm_area_struct
*
vma
,
unsigned
long
vmaddr
)
{
_tlbie
(
vmaddr
);
}
static
inline
void
flush_tlb_page_nohash
(
struct
vm_area_struct
*
vma
,
unsigned
long
vmaddr
)
{
_tlbie
(
vmaddr
);
}
static
inline
void
flush_tlb_range
(
struct
mm_struct
*
mm
,
unsigned
long
start
,
unsigned
long
end
)
{
__tlbia
();
}
...
...
@@ -56,6 +62,7 @@ struct mm_struct;
struct
vm_area_struct
;
extern
void
flush_tlb_mm
(
struct
mm_struct
*
mm
);
extern
void
flush_tlb_page
(
struct
vm_area_struct
*
vma
,
unsigned
long
vmaddr
);
extern
void
flush_tlb_page_nohash
(
struct
vm_area_struct
*
vma
,
unsigned
long
addr
);
extern
void
flush_tlb_range
(
struct
vm_area_struct
*
vma
,
unsigned
long
start
,
unsigned
long
end
);
extern
void
flush_tlb_kernel_range
(
unsigned
long
start
,
unsigned
long
end
);
...
...
include/asm-ppc64/pgtable.h
View file @
ff3c0388
...
...
@@ -428,7 +428,10 @@ static inline void __ptep_set_access_flags(pte_t *ptep, pte_t entry, int dirty)
:
"cc"
);
}
#define ptep_set_access_flags(__vma, __address, __ptep, __entry, __dirty) \
__ptep_set_access_flags(__ptep, __entry, __dirty)
do { \
__ptep_set_access_flags(__ptep, __entry, __dirty); \
flush_tlb_page_nohash(__vma, __address); \
} while(0)
/*
* Macro to mark a page protection value as "uncacheable".
...
...
include/asm-ppc64/tlbflush.h
View file @
ff3c0388
...
...
@@ -6,6 +6,7 @@
*
* - flush_tlb_mm(mm) flushes the specified mm context TLB's
* - flush_tlb_page(vma, vmaddr) flushes one page
* - flush_tlb_page_nohash(vma, vmaddr) flushes one page if SW loaded TLB
* - flush_tlb_range(vma, start, end) flushes a range of pages
* - flush_tlb_kernel_range(start, end) flushes a range of kernel pages
* - flush_tlb_pgtables(mm, start, end) flushes a range of page tables
...
...
@@ -39,6 +40,7 @@ static inline void flush_tlb_pending(void)
#define flush_tlb_mm(mm) flush_tlb_pending()
#define flush_tlb_page(vma, addr) flush_tlb_pending()
#define flush_tlb_page_nohash(vma, addr) do { } while (0)
#define flush_tlb_range(vma, start, end) \
do { (void)(start); flush_tlb_pending(); } while (0)
#define flush_tlb_kernel_range(start, end) flush_tlb_pending()
...
...
include/linux/input.h
View file @
ff3c0388
...
...
@@ -749,8 +749,6 @@ struct ff_effect {
#define INPUT_KEYCODE(dev, scancode) ((dev->keycodesize == 1) ? ((u8*)dev->keycode)[scancode] : \
((dev->keycodesize == 2) ? ((u16*)dev->keycode)[scancode] : (((u32*)dev->keycode)[scancode])))
#define init_input_dev(dev) do { INIT_LIST_HEAD(&((dev)->h_list)); INIT_LIST_HEAD(&((dev)->node)); } while (0)
#define SET_INPUT_KEYCODE(dev, scancode, val) \
({ unsigned __old; \
switch (dev->keycodesize) { \
...
...
@@ -915,6 +913,12 @@ struct input_handle {
#define to_handle(n) container_of(n,struct input_handle,d_node)
#define to_handle_h(n) container_of(n,struct input_handle,h_node)
static
inline
void
init_input_dev
(
struct
input_dev
*
dev
)
{
INIT_LIST_HEAD
(
&
dev
->
h_list
);
INIT_LIST_HEAD
(
&
dev
->
node
);
}
void
input_register_device
(
struct
input_dev
*
);
void
input_unregister_device
(
struct
input_dev
*
);
...
...
@@ -932,14 +936,51 @@ int input_flush_device(struct input_handle* handle, struct file* file);
void
input_event
(
struct
input_dev
*
dev
,
unsigned
int
type
,
unsigned
int
code
,
int
value
);
#define input_report_key(a,b,c) input_event(a, EV_KEY, b, !!(c))
#define input_report_rel(a,b,c) input_event(a, EV_REL, b, c)
#define input_report_abs(a,b,c) input_event(a, EV_ABS, b, c)
#define input_report_ff(a,b,c) input_event(a, EV_FF, b, c)
#define input_report_ff_status(a,b,c) input_event(a, EV_FF_STATUS, b, c)
#define input_regs(a,b) do { (a)->regs = (b); } while (0)
#define input_sync(a) do { input_event(a, EV_SYN, SYN_REPORT, 0); (a)->regs = NULL; } while (0)
static
inline
void
input_report_key
(
struct
input_dev
*
dev
,
unsigned
int
code
,
int
value
)
{
input_event
(
dev
,
EV_KEY
,
code
,
!!
value
);
}
static
inline
void
input_report_rel
(
struct
input_dev
*
dev
,
unsigned
int
code
,
int
value
)
{
input_event
(
dev
,
EV_REL
,
code
,
value
);
}
static
inline
void
input_report_abs
(
struct
input_dev
*
dev
,
unsigned
int
code
,
int
value
)
{
input_event
(
dev
,
EV_ABS
,
code
,
value
);
}
static
inline
void
input_report_ff
(
struct
input_dev
*
dev
,
unsigned
int
code
,
int
value
)
{
input_event
(
dev
,
EV_FF
,
code
,
value
);
}
static
inline
void
input_report_ff_status
(
struct
input_dev
*
dev
,
unsigned
int
code
,
int
value
)
{
input_event
(
dev
,
EV_FF_STATUS
,
code
,
value
);
}
static
inline
void
input_regs
(
struct
input_dev
*
dev
,
struct
pt_regs
*
regs
)
{
dev
->
regs
=
regs
;
}
static
inline
void
input_sync
(
struct
input_dev
*
dev
)
{
input_event
(
dev
,
EV_SYN
,
SYN_REPORT
,
0
);
dev
->
regs
=
NULL
;
}
static
inline
void
input_set_abs_params
(
struct
input_dev
*
dev
,
int
axis
,
int
min
,
int
max
,
int
fuzz
,
int
flat
)
{
dev
->
absmin
[
axis
]
=
min
;
dev
->
absmax
[
axis
]
=
max
;
dev
->
absfuzz
[
axis
]
=
fuzz
;
dev
->
absflat
[
axis
]
=
flat
;
dev
->
absbit
[
LONG
(
axis
)]
|=
BIT
(
axis
);
}
extern
struct
class_simple
*
input_class
;
...
...
include/linux/netfilter.h
View file @
ff3c0388
...
...
@@ -171,6 +171,12 @@ extern void nf_reinject(struct sk_buff *skb,
struct
nf_info
*
info
,
unsigned
int
verdict
);
extern
inline
struct
ipt_target
*
ipt_find_target_lock
(
const
char
*
name
,
int
*
error
,
struct
semaphore
*
mutex
);
extern
inline
struct
ip6t_target
*
ip6t_find_target_lock
(
const
char
*
name
,
int
*
error
,
struct
semaphore
*
mutex
);
extern
inline
struct
arpt_target
*
arpt_find_target_lock
(
const
char
*
name
,
int
*
error
,
struct
semaphore
*
mutex
);
extern
void
(
*
ip_ct_attach
)(
struct
sk_buff
*
,
struct
nf_ct_info
*
);
#ifdef CONFIG_NETFILTER_DEBUG
...
...
include/linux/netfilter_arp.h
View file @
ff3c0388
...
...
@@ -17,4 +17,5 @@
#define NF_ARP_FORWARD 2
#define NF_ARP_NUMHOOKS 3
static
DECLARE_MUTEX
(
arpt_mutex
);
#endif
/* __LINUX_ARP_NETFILTER_H */
include/linux/netfilter_ipv4/ip_tables.h
View file @
ff3c0388
...
...
@@ -283,6 +283,8 @@ struct ipt_get_entries
struct
ipt_entry
entrytable
[
0
];
};
extern
struct
semaphore
ipt_mutex
;
/* Standard return verdict, or do jump. */
#define IPT_STANDARD_TARGET ""
/* Error verdict. */
...
...
@@ -334,6 +336,7 @@ ipt_get_target(struct ipt_entry *e)
/*
* Main firewall chains definitions and global var's definitions.
*/
static
DECLARE_MUTEX
(
ipt_mutex
);
#ifdef __KERNEL__
#include <linux/init.h>
...
...
@@ -406,6 +409,11 @@ struct ipt_target
struct
module
*
me
;
};
extern
struct
ipt_target
*
ipt_find_target_lock
(
const
char
*
name
,
int
*
error
,
struct
semaphore
*
mutex
);
extern
struct
arpt_target
*
arpt_find_target_lock
(
const
char
*
name
,
int
*
error
,
struct
semaphore
*
mutex
);
extern
int
ipt_register_target
(
struct
ipt_target
*
target
);
extern
void
ipt_unregister_target
(
struct
ipt_target
*
target
);
...
...
include/linux/netfilter_ipv6/ip6_tables.h
View file @
ff3c0388
...
...
@@ -106,6 +106,8 @@ struct ip6t_counters
u_int64_t
pcnt
,
bcnt
;
/* Packet and byte counters */
};
static
DECLARE_MUTEX
(
ip6t_mutex
);
/* Values for "flag" field in struct ip6t_ip6 (general ip6 structure). */
#define IP6T_F_PROTO 0x01
/* Set if rule cares about upper
protocols */
...
...
include/linux/watchdog.h
View file @
ff3c0388
...
...
@@ -10,6 +10,7 @@
#define _LINUX_WATCHDOG_H
#include <linux/ioctl.h>
#include <linux/types.h>
#define WATCHDOG_IOCTL_BASE 'W'
...
...
include/net/tcp.h
View file @
ff3c0388
...
...
@@ -970,6 +970,9 @@ extern int tcp_sync_mss(struct sock *sk, u32 pmtu);
extern
const
char
timer_bug_msg
[];
/* tcp_diag.c */
extern
void
tcp_get_info
(
struct
sock
*
,
struct
tcp_info
*
);
/* Read 'sendfile()'-style from a TCP socket */
typedef
int
(
*
sk_read_actor_t
)(
read_descriptor_t
*
,
struct
sk_buff
*
,
unsigned
int
,
size_t
);
...
...
kernel/sched.c
View file @
ff3c0388
...
...
@@ -762,6 +762,13 @@ static int try_to_wake_up(task_t * p, unsigned int state, int sync)
load
=
source_load
(
cpu
);
this_load
=
target_load
(
this_cpu
);
/*
* If sync wakeup then subtract the (maximum possible) effect of
* the currently running task from the load of the current CPU:
*/
if
(
sync
)
this_load
-=
SCHED_LOAD_SCALE
;
/* Don't pull the task off an idle CPU to a busy one */
if
(
load
<
SCHED_LOAD_SCALE
&&
load
+
this_load
>
SCHED_LOAD_SCALE
&&
this_load
>
load
)
...
...
net/ipv4/netfilter/arp_tables.c
View file @
ff3c0388
...
...
@@ -56,7 +56,6 @@ do { \
#endif
#define SMP_ALIGN(x) (((x) + SMP_CACHE_BYTES-1) & ~(SMP_CACHE_BYTES-1))
static
DECLARE_MUTEX
(
arpt_mutex
);
#define ASSERT_READ_LOCK(x) ARP_NF_ASSERT(down_trylock(&arpt_mutex) != 0)
#define ASSERT_WRITE_LOCK(x) ARP_NF_ASSERT(down_trylock(&arpt_mutex) != 0)
...
...
@@ -388,12 +387,12 @@ find_inlist_lock(struct list_head *head,
}
#endif
static
inline
struct
arpt_table
*
find_table_lock
(
const
char
*
name
,
int
*
error
,
struct
semaphore
*
mutex
)
static
inline
struct
arpt_table
*
arpt_
find_table_lock
(
const
char
*
name
,
int
*
error
,
struct
semaphore
*
mutex
)
{
return
find_inlist_lock
(
&
arpt_tables
,
name
,
"arptable_"
,
error
,
mutex
);
}
st
atic
inline
struct
arpt_target
*
find_target_lock
(
const
char
*
name
,
int
*
error
,
struct
semaphore
*
mutex
)
st
ruct
arpt_target
*
arpt_
find_target_lock
(
const
char
*
name
,
int
*
error
,
struct
semaphore
*
mutex
)
{
return
find_inlist_lock
(
&
arpt_target
,
name
,
"arpt_"
,
error
,
mutex
);
}
...
...
@@ -543,7 +542,7 @@ static inline int check_entry(struct arpt_entry *e, const char *name, unsigned i
}
t
=
arpt_get_target
(
e
);
target
=
find_target_lock
(
t
->
u
.
user
.
name
,
&
ret
,
&
arpt_mutex
);
target
=
arpt_
find_target_lock
(
t
->
u
.
user
.
name
,
&
ret
,
&
arpt_mutex
);
if
(
!
target
)
{
duprintf
(
"check_entry: `%s' not found
\n
"
,
t
->
u
.
user
.
name
);
goto
out
;
...
...
@@ -843,7 +842,7 @@ static int get_entries(const struct arpt_get_entries *entries,
int
ret
;
struct
arpt_table
*
t
;
t
=
find_table_lock
(
entries
->
name
,
&
ret
,
&
arpt_mutex
);
t
=
arpt_
find_table_lock
(
entries
->
name
,
&
ret
,
&
arpt_mutex
);
if
(
t
)
{
duprintf
(
"t->private->number = %u
\n
"
,
t
->
private
->
number
);
...
...
@@ -909,7 +908,7 @@ static int do_replace(void __user *user, unsigned int len)
duprintf
(
"arp_tables: Translated table
\n
"
);
t
=
find_table_lock
(
tmp
.
name
,
&
ret
,
&
arpt_mutex
);
t
=
arpt_
find_table_lock
(
tmp
.
name
,
&
ret
,
&
arpt_mutex
);
if
(
!
t
)
goto
free_newinfo_counters_untrans
;
...
...
@@ -1002,7 +1001,7 @@ static int do_add_counters(void __user *user, unsigned int len)
goto
free
;
}
t
=
find_table_lock
(
tmp
.
name
,
&
ret
,
&
arpt_mutex
);
t
=
arpt_
find_table_lock
(
tmp
.
name
,
&
ret
,
&
arpt_mutex
);
if
(
!
t
)
goto
free
;
...
...
@@ -1075,7 +1074,7 @@ static int do_arpt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len
break
;
}
name
[
ARPT_TABLE_MAXNAMELEN
-
1
]
=
'\0'
;
t
=
find_table_lock
(
name
,
&
ret
,
&
arpt_mutex
);
t
=
arpt_
find_table_lock
(
name
,
&
ret
,
&
arpt_mutex
);
if
(
t
)
{
struct
arpt_getinfo
info
;
...
...
@@ -1323,6 +1322,7 @@ static void __exit fini(void)
EXPORT_SYMBOL
(
arpt_register_table
);
EXPORT_SYMBOL
(
arpt_unregister_table
);
EXPORT_SYMBOL
(
arpt_do_table
);
EXPORT_SYMBOL
(
arpt_find_target_lock
);
EXPORT_SYMBOL
(
arpt_register_target
);
EXPORT_SYMBOL
(
arpt_unregister_target
);
...
...
net/ipv4/netfilter/ip_tables.c
View file @
ff3c0388
...
...
@@ -61,9 +61,6 @@ do { \
#endif
#define SMP_ALIGN(x) (((x) + SMP_CACHE_BYTES-1) & ~(SMP_CACHE_BYTES-1))
/* Mutex protects lists (only traversed in user context). */
static
DECLARE_MUTEX
(
ipt_mutex
);
/* Must have mutex */
#define ASSERT_READ_LOCK(x) IP_NF_ASSERT(down_trylock(&ipt_mutex) != 0)
#define ASSERT_WRITE_LOCK(x) IP_NF_ASSERT(down_trylock(&ipt_mutex) != 0)
...
...
@@ -461,7 +458,7 @@ find_inlist_lock(struct list_head *head,
#endif
static
inline
struct
ipt_table
*
find_table_lock
(
const
char
*
name
,
int
*
error
,
struct
semaphore
*
mutex
)
ipt_
find_table_lock
(
const
char
*
name
,
int
*
error
,
struct
semaphore
*
mutex
)
{
return
find_inlist_lock
(
&
ipt_tables
,
name
,
"iptable_"
,
error
,
mutex
);
}
...
...
@@ -472,8 +469,8 @@ find_match_lock(const char *name, int *error, struct semaphore *mutex)
return
find_inlist_lock
(
&
ipt_match
,
name
,
"ipt_"
,
error
,
mutex
);
}
st
atic
inline
st
ruct
ipt_target
*
find_target_lock
(
const
char
*
name
,
int
*
error
,
struct
semaphore
*
mutex
)
struct
ipt_target
*
ipt_
find_target_lock
(
const
char
*
name
,
int
*
error
,
struct
semaphore
*
mutex
)
{
return
find_inlist_lock
(
&
ipt_target
,
name
,
"ipt_"
,
error
,
mutex
);
}
...
...
@@ -688,7 +685,7 @@ check_entry(struct ipt_entry *e, const char *name, unsigned int size,
goto
cleanup_matches
;
t
=
ipt_get_target
(
e
);
target
=
find_target_lock
(
t
->
u
.
user
.
name
,
&
ret
,
&
ipt_mutex
);
target
=
ipt_
find_target_lock
(
t
->
u
.
user
.
name
,
&
ret
,
&
ipt_mutex
);
if
(
!
target
)
{
duprintf
(
"check_entry: `%s' not found
\n
"
,
t
->
u
.
user
.
name
);
goto
cleanup_matches
;
...
...
@@ -1025,7 +1022,7 @@ get_entries(const struct ipt_get_entries *entries,
int
ret
;
struct
ipt_table
*
t
;
t
=
find_table_lock
(
entries
->
name
,
&
ret
,
&
ipt_mutex
);
t
=
ipt_
find_table_lock
(
entries
->
name
,
&
ret
,
&
ipt_mutex
);
if
(
t
)
{
duprintf
(
"t->private->number = %u
\n
"
,
t
->
private
->
number
);
...
...
@@ -1092,7 +1089,7 @@ do_replace(void __user *user, unsigned int len)
duprintf
(
"ip_tables: Translated table
\n
"
);
t
=
find_table_lock
(
tmp
.
name
,
&
ret
,
&
ipt_mutex
);
t
=
ipt_
find_table_lock
(
tmp
.
name
,
&
ret
,
&
ipt_mutex
);
if
(
!
t
)
goto
free_newinfo_counters_untrans
;
...
...
@@ -1195,7 +1192,7 @@ do_add_counters(void __user *user, unsigned int len)
goto
free
;
}
t
=
find_table_lock
(
tmp
.
name
,
&
ret
,
&
ipt_mutex
);
t
=
ipt_
find_table_lock
(
tmp
.
name
,
&
ret
,
&
ipt_mutex
);
if
(
!
t
)
goto
free
;
...
...
@@ -1270,7 +1267,7 @@ do_ipt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
break
;
}
name
[
IPT_TABLE_MAXNAMELEN
-
1
]
=
'\0'
;
t
=
find_table_lock
(
name
,
&
ret
,
&
ipt_mutex
);
t
=
ipt_
find_table_lock
(
name
,
&
ret
,
&
ipt_mutex
);
if
(
t
)
{
struct
ipt_getinfo
info
;
...
...
@@ -1855,6 +1852,7 @@ EXPORT_SYMBOL(ipt_unregister_match);
EXPORT_SYMBOL
(
ipt_do_table
);
EXPORT_SYMBOL
(
ipt_register_target
);
EXPORT_SYMBOL
(
ipt_unregister_target
);
EXPORT_SYMBOL
(
ipt_find_target_lock
);
module_init
(
init
);
module_exit
(
fini
);
net/ipv6/netfilter/ip6_tables.c
View file @
ff3c0388
...
...
@@ -66,8 +66,6 @@ do { \
#endif
#define SMP_ALIGN(x) (((x) + SMP_CACHE_BYTES-1) & ~(SMP_CACHE_BYTES-1))
/* Mutex protects lists (only traversed in user context). */
static
DECLARE_MUTEX
(
ip6t_mutex
);
/* Must have mutex */
#define ASSERT_READ_LOCK(x) IP_NF_ASSERT(down_trylock(&ip6t_mutex) != 0)
...
...
@@ -544,7 +542,7 @@ find_inlist_lock(struct list_head *head,
#endif
static
inline
struct
ip6t_table
*
find_table_lock
(
const
char
*
name
,
int
*
error
,
struct
semaphore
*
mutex
)
ip6t_
find_table_lock
(
const
char
*
name
,
int
*
error
,
struct
semaphore
*
mutex
)
{
return
find_inlist_lock
(
&
ip6t_tables
,
name
,
"ip6table_"
,
error
,
mutex
);
}
...
...
@@ -555,8 +553,8 @@ find_match_lock(const char *name, int *error, struct semaphore *mutex)
return
find_inlist_lock
(
&
ip6t_match
,
name
,
"ip6t_"
,
error
,
mutex
);
}
st
atic
inline
st
ruct
ip6t_target
*
find_target_lock
(
const
char
*
name
,
int
*
error
,
struct
semaphore
*
mutex
)
struct
ip6t_target
*
ip6t_
find_target_lock
(
const
char
*
name
,
int
*
error
,
struct
semaphore
*
mutex
)
{
return
find_inlist_lock
(
&
ip6t_target
,
name
,
"ip6t_"
,
error
,
mutex
);
}
...
...
@@ -771,7 +769,7 @@ check_entry(struct ip6t_entry *e, const char *name, unsigned int size,
goto
cleanup_matches
;
t
=
ip6t_get_target
(
e
);
target
=
find_target_lock
(
t
->
u
.
user
.
name
,
&
ret
,
&
ip6t_mutex
);
target
=
ip6t_
find_target_lock
(
t
->
u
.
user
.
name
,
&
ret
,
&
ip6t_mutex
);
if
(
!
target
)
{
duprintf
(
"check_entry: `%s' not found
\n
"
,
t
->
u
.
user
.
name
);
goto
cleanup_matches
;
...
...
@@ -1111,7 +1109,7 @@ get_entries(const struct ip6t_get_entries *entries,
int
ret
;
struct
ip6t_table
*
t
;
t
=
find_table_lock
(
entries
->
name
,
&
ret
,
&
ip6t_mutex
);
t
=
ip6t_
find_table_lock
(
entries
->
name
,
&
ret
,
&
ip6t_mutex
);
if
(
t
)
{
duprintf
(
"t->private->number = %u
\n
"
,
t
->
private
->
number
);
...
...
@@ -1174,7 +1172,7 @@ do_replace(void __user *user, unsigned int len)
duprintf
(
"ip_tables: Translated table
\n
"
);
t
=
find_table_lock
(
tmp
.
name
,
&
ret
,
&
ip6t_mutex
);
t
=
ip6t_
find_table_lock
(
tmp
.
name
,
&
ret
,
&
ip6t_mutex
);
if
(
!
t
)
goto
free_newinfo_counters_untrans
;
...
...
@@ -1276,7 +1274,7 @@ do_add_counters(void __user *user, unsigned int len)
goto
free
;
}
t
=
find_table_lock
(
tmp
.
name
,
&
ret
,
&
ip6t_mutex
);
t
=
ip6t_
find_table_lock
(
tmp
.
name
,
&
ret
,
&
ip6t_mutex
);
if
(
!
t
)
goto
free
;
...
...
@@ -1351,7 +1349,7 @@ do_ip6t_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
break
;
}
name
[
IP6T_TABLE_MAXNAMELEN
-
1
]
=
'\0'
;
t
=
find_table_lock
(
name
,
&
ret
,
&
ip6t_mutex
);
t
=
ip6t_
find_table_lock
(
name
,
&
ret
,
&
ip6t_mutex
);
if
(
t
)
{
struct
ip6t_getinfo
info
;
...
...
@@ -1964,6 +1962,7 @@ static void __exit fini(void)
EXPORT_SYMBOL
(
ip6t_register_table
);
EXPORT_SYMBOL
(
ip6t_unregister_table
);
EXPORT_SYMBOL
(
ip6t_do_table
);
EXPORT_SYMBOL
(
ip6t_find_target_lock
);
EXPORT_SYMBOL
(
ip6t_register_match
);
EXPORT_SYMBOL
(
ip6t_unregister_match
);
EXPORT_SYMBOL
(
ip6t_register_target
);
...
...
net/sunrpc/auth_gss/auth_gss.c
View file @
ff3c0388
...
...
@@ -493,7 +493,7 @@ gss_pipe_downcall(struct file *filp, const char *src, size_t mlen)
spin_unlock
(
&
gss_auth
->
lock
);
rpc_release_client
(
clnt
);
kfree
(
obj
.
data
);
dprintk
(
"RPC: gss_pipe_downcall returning length %u
\n
"
,
mlen
);
dprintk
(
"RPC: gss_pipe_downcall returning length %
Z
u
\n
"
,
mlen
);
return
mlen
;
err:
if
(
ctx
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment