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
33173395
Commit
33173395
authored
Aug 30, 2002
by
Andy Grover
Browse files
Options
Browse Files
Download
Plain Diff
Merge groveronline.com:/root/bk/linux-2.5
into groveronline.com:/root/bk/linux-acpi
parents
f5afaed8
6923b9bd
Changes
23
Hide whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
553 additions
and
171 deletions
+553
-171
Documentation/filesystems/devfs/ChangeLog
Documentation/filesystems/devfs/ChangeLog
+8
-0
Documentation/filesystems/devfs/README
Documentation/filesystems/devfs/README
+12
-2
Documentation/preempt-locking.txt
Documentation/preempt-locking.txt
+23
-2
arch/i386/kernel/ioport.c
arch/i386/kernel/ioport.c
+13
-4
drivers/char/Config.help
drivers/char/Config.help
+4
-3
drivers/char/Makefile
drivers/char/Makefile
+1
-1
drivers/char/nvram.c
drivers/char/nvram.c
+304
-104
drivers/input/input.c
drivers/input/input.c
+1
-0
drivers/input/mousedev.c
drivers/input/mousedev.c
+4
-5
drivers/input/serio/Config.in
drivers/input/serio/Config.in
+0
-5
drivers/input/serio/i8042-io.h
drivers/input/serio/i8042-io.h
+10
-6
fs/devfs/base.c
fs/devfs/base.c
+18
-12
fs/lockd/svc.c
fs/lockd/svc.c
+1
-0
include/asm-i386/xor.h
include/asm-i386/xor.h
+10
-4
include/asm-x86_64/xor.h
include/asm-x86_64/xor.h
+9
-5
include/linux/cobalt-nvram.h
include/linux/cobalt-nvram.h
+109
-0
include/linux/devfs_fs_kernel.h
include/linux/devfs_fs_kernel.h
+0
-2
include/linux/highmem.h
include/linux/highmem.h
+1
-1
include/linux/nvram.h
include/linux/nvram.h
+16
-6
include/linux/smp.h
include/linux/smp.h
+0
-3
kernel/sched.c
kernel/sched.c
+1
-0
net/core/dev.c
net/core/dev.c
+7
-6
net/sunrpc/sched.c
net/sunrpc/sched.c
+1
-0
No files found.
Documentation/filesystems/devfs/ChangeLog
View file @
33173395
...
@@ -1957,3 +1957,11 @@ Changes for patch v216
...
@@ -1957,3 +1957,11 @@ Changes for patch v216
<devfs_get_handle>
<devfs_get_handle>
- Removed deprecated <devfs_find_handle>
- Removed deprecated <devfs_find_handle>
===============================================================================
Changes for patch v217
- Exported <devfs_find_and_unregister> and <devfs_only> to modules
- Updated README from master HTML file
- Fixed module unload race in <devfs_open>
Documentation/filesystems/devfs/README
View file @
33173395
...
@@ -3,7 +3,7 @@ Devfs (Device File System) FAQ
...
@@ -3,7 +3,7 @@ Devfs (Device File System) FAQ
Linux Devfs (Device File System) FAQ
Linux Devfs (Device File System) FAQ
Richard Gooch
Richard Gooch
2
1-JUL
-2002
2
0-AUG
-2002
Document languages:
Document languages:
...
@@ -1509,6 +1509,16 @@ Here are some common questions and answers.
...
@@ -1509,6 +1509,16 @@ Here are some common questions and answers.
Devfsd doesn't start
Make sure you have compiled and installed devfsd
Make sure devfsd is being started from your boot
scripts
Make sure you have configured your kernel to enable devfs (see
below)
Make sure devfs is mounted (see below)
Devfsd is not managing all my permissions
Devfsd is not managing all my permissions
Make sure you are capturing the appropriate events. For example,
Make sure you are capturing the appropriate events. For example,
...
@@ -1777,7 +1787,7 @@ I hate the naming scheme
...
@@ -1777,7 +1787,7 @@ I hate the naming scheme
First, remember that no naming scheme will please everybody. You hate
First, remember that no naming scheme will please everybody. You hate
the scheme, others love it. Who's to say who's right and who's wrong?
the scheme, others love it. Who's to say who's right and who's wrong?
Ultimately, the person who writes the code gets to choose, and what
Ultimately, the person who writes the code gets to choose, and what
exists now is a combination of the
the
choices made by the
exists now is a combination of the choices made by the
devfs author and the
devfs author and the
kernel maintainer (Linus).
kernel maintainer (Linus).
...
...
Documentation/preempt-locking.txt
View file @
33173395
Proper Locking Under a Preemptible Kernel:
Proper Locking Under a Preemptible Kernel:
Keeping Kernel Code Preempt-Safe
Keeping Kernel Code Preempt-Safe
Robert Love <rml@tech9.net>
Robert Love <rml@tech9.net>
Last Updated: 22 Jan
2002
Last Updated: 28 Aug
2002
INTRODUCTION
INTRODUCTION
...
@@ -112,3 +112,24 @@ critical variables. Another example:
...
@@ -112,3 +112,24 @@ critical variables. Another example:
This code is not preempt-safe, but see how easily we can fix it by simply
This code is not preempt-safe, but see how easily we can fix it by simply
moving the spin_lock up two lines.
moving the spin_lock up two lines.
PREVENTING PREEMPTION USING INTERRUPT DISABLING
It is possible to prevent a preemption event using local_irq_disable and
local_irq_save. Note, when doing so, you must be very careful to not cause
an event that would set need_resched and result in a preemption check. When
in doubt, rely on locking or explicit preemption disabling.
Note in 2.5 interrupt disabling is now only per-CPU (e.g. local).
An additional concern is proper usage of local_irq_disable and local_irq_save.
These may be used to protect from preemption, however, on exit, if preemption
may be enabled, a test to see if preemption is required should be done. If
these are called from the spin_lock and read/write lock macros, the right thing
is done. They may also be called within a spin-lock protected region, however,
if they are ever called outside of this context, a test for preemption should
be made. Do note that calls from interrupt context or bottom half/ tasklets
are also protected by preemption locks and so may use the versions which do
not check preemption.
arch/i386/kernel/ioport.c
View file @
33173395
...
@@ -55,12 +55,16 @@ static void set_bitmap(unsigned long *bitmap, short base, short extent, int new_
...
@@ -55,12 +55,16 @@ static void set_bitmap(unsigned long *bitmap, short base, short extent, int new_
asmlinkage
int
sys_ioperm
(
unsigned
long
from
,
unsigned
long
num
,
int
turn_on
)
asmlinkage
int
sys_ioperm
(
unsigned
long
from
,
unsigned
long
num
,
int
turn_on
)
{
{
struct
thread_struct
*
t
=
&
current
->
thread
;
struct
thread_struct
*
t
=
&
current
->
thread
;
struct
tss_struct
*
tss
=
init_tss
+
smp_processor_id
();
struct
tss_struct
*
tss
;
int
ret
=
0
;
if
((
from
+
num
<=
from
)
||
(
from
+
num
>
IO_BITMAP_SIZE
*
32
))
if
((
from
+
num
<=
from
)
||
(
from
+
num
>
IO_BITMAP_SIZE
*
32
))
return
-
EINVAL
;
return
-
EINVAL
;
if
(
turn_on
&&
!
capable
(
CAP_SYS_RAWIO
))
if
(
turn_on
&&
!
capable
(
CAP_SYS_RAWIO
))
return
-
EPERM
;
return
-
EPERM
;
tss
=
init_tss
+
get_cpu
();
/*
/*
* If it's the first ioperm() call in this thread's lifetime, set the
* If it's the first ioperm() call in this thread's lifetime, set the
* IO bitmap up. ioperm() is much less timing critical than clone(),
* IO bitmap up. ioperm() is much less timing critical than clone(),
...
@@ -69,8 +73,11 @@ asmlinkage int sys_ioperm(unsigned long from, unsigned long num, int turn_on)
...
@@ -69,8 +73,11 @@ asmlinkage int sys_ioperm(unsigned long from, unsigned long num, int turn_on)
if
(
!
t
->
ts_io_bitmap
)
{
if
(
!
t
->
ts_io_bitmap
)
{
unsigned
long
*
bitmap
;
unsigned
long
*
bitmap
;
bitmap
=
kmalloc
(
IO_BITMAP_BYTES
,
GFP_KERNEL
);
bitmap
=
kmalloc
(
IO_BITMAP_BYTES
,
GFP_KERNEL
);
if
(
!
bitmap
)
if
(
!
bitmap
)
{
return
-
ENOMEM
;
ret
=
-
ENOMEM
;
goto
out
;
}
/*
/*
* just in case ...
* just in case ...
*/
*/
...
@@ -88,7 +95,9 @@ asmlinkage int sys_ioperm(unsigned long from, unsigned long num, int turn_on)
...
@@ -88,7 +95,9 @@ asmlinkage int sys_ioperm(unsigned long from, unsigned long num, int turn_on)
set_bitmap
(
t
->
ts_io_bitmap
,
from
,
num
,
!
turn_on
);
set_bitmap
(
t
->
ts_io_bitmap
,
from
,
num
,
!
turn_on
);
set_bitmap
(
tss
->
io_bitmap
,
from
,
num
,
!
turn_on
);
set_bitmap
(
tss
->
io_bitmap
,
from
,
num
,
!
turn_on
);
return
0
;
out:
put_cpu
();
return
ret
;
}
}
/*
/*
...
...
drivers/char/Config.help
View file @
33173395
...
@@ -985,9 +985,10 @@ CONFIG_H8
...
@@ -985,9 +985,10 @@ CONFIG_H8
CONFIG_NVRAM
CONFIG_NVRAM
If you say Y here and create a character special file /dev/nvram
If you say Y here and create a character special file /dev/nvram
with major number 10 and minor number 144 using mknod ("man mknod"),
with major number 10 and minor number 144 using mknod ("man mknod"),
you get read and write access to the 50 bytes of non-volatile memory
you get read and write access to the extra bytes of non-volatile
in the real time clock (RTC), which is contained in every PC and
memory in the real time clock (RTC), which is contained in every PC
most Ataris.
and most Ataris. The actual number of bytes varies, depending on the
nvram in the system, but is usually 114 (128-14 for the RTC).
This memory is conventionally called "CMOS RAM" on PCs and "NVRAM"
This memory is conventionally called "CMOS RAM" on PCs and "NVRAM"
on Ataris. /dev/nvram may be used to view settings there, or to
on Ataris. /dev/nvram may be used to view settings there, or to
...
...
drivers/char/Makefile
View file @
33173395
...
@@ -15,7 +15,7 @@ obj-y += mem.o tty_io.o n_tty.o tty_ioctl.o pty.o misc.o random.o
...
@@ -15,7 +15,7 @@ obj-y += mem.o tty_io.o n_tty.o tty_ioctl.o pty.o misc.o random.o
export-objs
:=
busmouse.o console.o keyboard.o sysrq.o
\
export-objs
:=
busmouse.o console.o keyboard.o sysrq.o
\
misc.o pty.o random.o selection.o
\
misc.o pty.o random.o selection.o
\
sonypi.o tty_io.o tty_ioctl.o generic_serial.o rtc.o
\
sonypi.o tty_io.o tty_ioctl.o generic_serial.o rtc.o
\
ip2main.o
ip2main.o
nvram.o
obj-$(CONFIG_VT)
+=
vt.o vc_screen.o consolemap.o consolemap_deftbl.o selection.o keyboard.o
obj-$(CONFIG_VT)
+=
vt.o vc_screen.o consolemap.o consolemap_deftbl.o selection.o keyboard.o
obj-$(CONFIG_HW_CONSOLE)
+=
console.o defkeymap.o
obj-$(CONFIG_HW_CONSOLE)
+=
console.o defkeymap.o
...
...
drivers/char/nvram.c
View file @
33173395
...
@@ -3,6 +3,7 @@
...
@@ -3,6 +3,7 @@
*
*
* Copyright (C) 1997 Roman Hodek <Roman.Hodek@informatik.uni-erlangen.de>
* Copyright (C) 1997 Roman Hodek <Roman.Hodek@informatik.uni-erlangen.de>
* idea by and with help from Richard Jelinek <rj@suse.de>
* idea by and with help from Richard Jelinek <rj@suse.de>
* Portions copyright (c) 2001,2002 Sun Microsystems (thockin@sun.com)
*
*
* This driver allows you to access the contents of the non-volatile memory in
* This driver allows you to access the contents of the non-volatile memory in
* the mc146818rtc.h real-time clock. This chip is built into all PCs and into
* the mc146818rtc.h real-time clock. This chip is built into all PCs and into
...
@@ -10,9 +11,10 @@
...
@@ -10,9 +11,10 @@
* "NVRAM" (NV stands for non-volatile).
* "NVRAM" (NV stands for non-volatile).
*
*
* The data are supplied as a (seekable) character device, /dev/nvram. The
* The data are supplied as a (seekable) character device, /dev/nvram. The
* size of this file is 50, the number of freely available bytes in the memory
* size of this file is dependant on the controller. The usual size is 114,
* (i.e., not used by the RTC itself).
* the number of freely available bytes in the memory (i.e., not used by the
*
* RTC itself).
*
* Checksums over the NVRAM contents are managed by this driver. In case of a
* Checksums over the NVRAM contents are managed by this driver. In case of a
* bad checksum, reads and writes return -EIO. The checksum can be initialized
* bad checksum, reads and writes return -EIO. The checksum can be initialized
* to a sane state either by ioctl(NVRAM_INIT) (clear whole NVRAM) or
* to a sane state either by ioctl(NVRAM_INIT) (clear whole NVRAM) or
...
@@ -28,25 +30,35 @@
...
@@ -28,25 +30,35 @@
*
*
* 1.1 Cesar Barros: SMP locking fixes
* 1.1 Cesar Barros: SMP locking fixes
* added changelog
* added changelog
* 1.2 Erik Gilling: Cobalt Networks support
* Tim Hockin: general cleanup, Cobalt support
*/
*/
#define NVRAM_VERSION
"1.1
"
#define NVRAM_VERSION
"1.2
"
#include <linux/module.h>
#include <linux/module.h>
#include <linux/config.h>
#include <linux/config.h>
#include <linux/sched.h>
#include <linux/sched.h>
#include <linux/smp_lock.h>
#include <linux/smp_lock.h>
#include <linux/nvram.h>
#define PC 1
#define PC 1
#define ATARI 2
#define ATARI 2
#define COBALT 3
/* select machine configuration */
/* select machine configuration */
#if defined(CONFIG_ATARI)
#if defined(CONFIG_ATARI)
#define MACH ATARI
#
define MACH ATARI
#elif defined(__i386__) || defined(__x86_64__) || defined(__arm__)
/* and others?? */
#elif defined(__i386__) || defined(__x86_64__) || defined(__arm__)
/* and others?? */
#define MACH PC
#define MACH PC
# if defined(CONFIG_COBALT)
# include <linux/cobalt-nvram.h>
# define MACH COBALT
# else
# define MACH PC
# endif
#else
#else
#error Cannot build nvram driver for this machine configuration.
#
error Cannot build nvram driver for this machine configuration.
#endif
#endif
#if MACH == PC
#if MACH == PC
...
@@ -58,10 +70,23 @@
...
@@ -58,10 +70,23 @@
#define PC_CKS_RANGE_START 2
#define PC_CKS_RANGE_START 2
#define PC_CKS_RANGE_END 31
#define PC_CKS_RANGE_END 31
#define PC_CKS_LOC 32
#define PC_CKS_LOC 32
#define NVRAM_BYTES (128-NVRAM_FIRST_BYTE)
#define mach_check_checksum pc_check_checksum
#define mach_set_checksum pc_set_checksum
#define mach_proc_infos pc_proc_infos
#endif
#if MACH == COBALT
#define CHECK_DRIVER_INIT() 1
#define NVRAM_BYTES (128-NVRAM_FIRST_BYTE)
#define
mach_check_checksum pc
_check_checksum
#define
mach_check_checksum cobalt
_check_checksum
#define
mach_set_checksum pc
_set_checksum
#define
mach_set_checksum cobalt
_set_checksum
#define
mach_proc_infos pc
_proc_infos
#define
mach_proc_infos cobalt
_proc_infos
#endif
#endif
...
@@ -79,9 +104,9 @@
...
@@ -79,9 +104,9 @@
#define ATARI_CKS_RANGE_END 47
#define ATARI_CKS_RANGE_END 47
#define ATARI_CKS_LOC 48
#define ATARI_CKS_LOC 48
#define
mach_check_checksum atari_check_checksum
#define
mach_check_checksum atari_check_checksum
#define
mach_set_checksum atari_set_checksum
#define
mach_set_checksum atari_set_checksum
#define
mach_proc_infos atari_proc_infos
#define
mach_proc_infos atari_proc_infos
#endif
#endif
...
@@ -98,7 +123,6 @@
...
@@ -98,7 +123,6 @@
#include <linux/ioport.h>
#include <linux/ioport.h>
#include <linux/fcntl.h>
#include <linux/fcntl.h>
#include <linux/mc146818rtc.h>
#include <linux/mc146818rtc.h>
#include <linux/nvram.h>
#include <linux/init.h>
#include <linux/init.h>
#include <linux/proc_fs.h>
#include <linux/proc_fs.h>
#include <linux/spinlock.h>
#include <linux/spinlock.h>
...
@@ -107,17 +131,11 @@
...
@@ -107,17 +131,11 @@
#include <asm/uaccess.h>
#include <asm/uaccess.h>
#include <asm/system.h>
#include <asm/system.h>
static
spinlock_t
nvram_state_lock
=
SPIN_LOCK_UNLOCKED
;
static
int
nvram_open_cnt
;
/* #times opened */
static
int
nvram_open_cnt
;
/* #times opened */
static
int
nvram_open_mode
;
/* special open modes */
static
int
nvram_open_mode
;
/* special open modes */
static
spinlock_t
nvram_open_lock
=
SPIN_LOCK_UNLOCKED
;
/* guards
#define NVRAM_WRITE 1
/* opened for writing (exclusive) */
* nvram_open_cnt and
#define NVRAM_EXCL 2
/* opened with O_EXCL */
* nvram_open_mode */
#define NVRAM_WRITE 1
/* opened for writing (exclusive) */
#define NVRAM_EXCL 2
/* opened with O_EXCL */
#define RTC_FIRST_BYTE 14
/* RTC register number of first
* NVRAM byte */
#define NVRAM_BYTES 128-RTC_FIRST_BYTE
/* number of NVRAM bytes */
static
int
mach_check_checksum
(
void
);
static
int
mach_check_checksum
(
void
);
static
void
mach_set_checksum
(
void
);
static
void
mach_set_checksum
(
void
);
...
@@ -128,48 +146,22 @@ static int mach_proc_infos(unsigned char *contents, char *buffer, int *len,
...
@@ -128,48 +146,22 @@ static int mach_proc_infos(unsigned char *contents, char *buffer, int *len,
#endif
#endif
/*
/*
* These are the internal NVRAM access functions, which do NOT disable
* These functions are provided to be called internally or by other parts of
* interrupts and do not check the checksum. Both tasks are left to higher
* level function, so they need to be done only once per syscall.
*/
static
__inline__
unsigned
char
nvram_read_int
(
int
i
)
{
return
CMOS_READ
(
RTC_FIRST_BYTE
+
i
);
}
static
__inline__
void
nvram_write_int
(
unsigned
char
c
,
int
i
)
{
CMOS_WRITE
(
c
,
RTC_FIRST_BYTE
+
i
);
}
static
__inline__
int
nvram_check_checksum_int
(
void
)
{
return
mach_check_checksum
();
}
static
__inline__
void
nvram_set_checksum_int
(
void
)
{
mach_set_checksum
();
}
#if MACH == ATARI
/*
* These non-internal functions are provided to be called by other parts of
* the kernel. It's up to the caller to ensure correct checksum before reading
* the kernel. It's up to the caller to ensure correct checksum before reading
* or after writing (needs to be done only once).
* or after writing (needs to be done only once).
*
*
*
They're only built if CONFIG_ATARI is defined, because Atari drivers use
*
It is worth noting that these functions all access bytes of general
*
them. For other configurations (PC), the rest of the kernel can't rely on
*
purpose memory in the NVRAM - that is to say, they all add the
*
them being present (this driver may not be configured at all, or as a
*
NVRAM_FIRST_BYTE offset. Pass them offsets into NVRAM as if you did not
*
module), so they access config information themselves
.
*
know about the RTC cruft
.
*/
*/
unsigned
char
__nvram_read_byte
(
int
i
)
{
return
CMOS_READ
(
NVRAM_FIRST_BYTE
+
i
);
}
unsigned
char
unsigned
char
nvram_read_byte
(
int
i
)
nvram_read_byte
(
int
i
)
{
{
...
@@ -177,22 +169,34 @@ nvram_read_byte(int i)
...
@@ -177,22 +169,34 @@ nvram_read_byte(int i)
unsigned
char
c
;
unsigned
char
c
;
spin_lock_irqsave
(
&
rtc_lock
,
flags
);
spin_lock_irqsave
(
&
rtc_lock
,
flags
);
c
=
nvram_read_int
(
i
);
c
=
__nvram_read_byte
(
i
);
spin_unlock_irqrestore
(
&
rtc_lock
,
flags
);
spin_unlock_irqrestore
(
&
rtc_lock
,
flags
);
return
c
;
return
c
;
}
}
/* This races nicely with trying to read with checksum checking (nvram_read) */
/* This races nicely with trying to read with checksum checking (nvram_read) */
void
__nvram_write_byte
(
unsigned
char
c
,
int
i
)
{
CMOS_WRITE
(
c
,
NVRAM_FIRST_BYTE
+
i
);
}
void
void
nvram_write_byte
(
unsigned
char
c
,
int
i
)
nvram_write_byte
(
unsigned
char
c
,
int
i
)
{
{
unsigned
long
flags
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
rtc_lock
,
flags
);
spin_lock_irqsave
(
&
rtc_lock
,
flags
);
nvram_write_int
(
c
,
i
);
__nvram_write_byte
(
c
,
i
);
spin_unlock_irqrestore
(
&
rtc_lock
,
flags
);
spin_unlock_irqrestore
(
&
rtc_lock
,
flags
);
}
}
int
__nvram_check_checksum
(
void
)
{
return
mach_check_checksum
();
}
int
int
nvram_check_checksum
(
void
)
nvram_check_checksum
(
void
)
{
{
...
@@ -200,23 +204,27 @@ nvram_check_checksum(void)
...
@@ -200,23 +204,27 @@ nvram_check_checksum(void)
int
rv
;
int
rv
;
spin_lock_irqsave
(
&
rtc_lock
,
flags
);
spin_lock_irqsave
(
&
rtc_lock
,
flags
);
rv
=
nvram_check_checksum_int
();
rv
=
__nvram_check_checksum
();
spin_unlock_irqrestore
(
&
rtc_lock
,
flags
);
spin_unlock_irqrestore
(
&
rtc_lock
,
flags
);
return
rv
;
return
rv
;
}
}
void
__nvram_set_checksum
(
void
)
{
mach_set_checksum
();
}
void
void
nvram_set_checksum
(
void
)
nvram_set_checksum
(
void
)
{
{
unsigned
long
flags
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
rtc_lock
,
flags
);
spin_lock_irqsave
(
&
rtc_lock
,
flags
);
nvram_set_checksum_int
();
__nvram_set_checksum
();
spin_unlock_irqrestore
(
&
rtc_lock
,
flags
);
spin_unlock_irqrestore
(
&
rtc_lock
,
flags
);
}
}
#endif
/* MACH == ATARI */
/*
/*
* The are the file operation function for user access to /dev/nvram
* The are the file operation function for user access to /dev/nvram
*/
*/
...
@@ -243,17 +251,17 @@ nvram_llseek(struct file *file, loff_t offset, int origin)
...
@@ -243,17 +251,17 @@ nvram_llseek(struct file *file, loff_t offset, int origin)
static
ssize_t
static
ssize_t
nvram_read
(
struct
file
*
file
,
char
*
buf
,
size_t
count
,
loff_t
*
ppos
)
nvram_read
(
struct
file
*
file
,
char
*
buf
,
size_t
count
,
loff_t
*
ppos
)
{
{
char
contents
[
NVRAM_BYTES
];
unsigned
char
contents
[
NVRAM_BYTES
];
unsigned
i
=
*
ppos
;
unsigned
i
=
*
ppos
;
char
*
tmp
;
unsigned
char
*
tmp
;
spin_lock_irq
(
&
rtc_lock
);
spin_lock_irq
(
&
rtc_lock
);
if
(
!
nvram_check_checksum_int
())
if
(
!
__nvram_check_checksum
())
goto
checksum_err
;
goto
checksum_err
;
for
(
tmp
=
contents
;
count
--
>
0
&&
i
<
NVRAM_BYTES
;
++
i
,
++
tmp
)
for
(
tmp
=
contents
;
count
--
>
0
&&
i
<
NVRAM_BYTES
;
++
i
,
++
tmp
)
*
tmp
=
nvram_read_int
(
i
);
*
tmp
=
__nvram_read_byte
(
i
);
spin_unlock_irq
(
&
rtc_lock
);
spin_unlock_irq
(
&
rtc_lock
);
...
@@ -272,23 +280,24 @@ nvram_read(struct file *file, char *buf, size_t count, loff_t *ppos)
...
@@ -272,23 +280,24 @@ nvram_read(struct file *file, char *buf, size_t count, loff_t *ppos)
static
ssize_t
static
ssize_t
nvram_write
(
struct
file
*
file
,
const
char
*
buf
,
size_t
count
,
loff_t
*
ppos
)
nvram_write
(
struct
file
*
file
,
const
char
*
buf
,
size_t
count
,
loff_t
*
ppos
)
{
{
char
contents
[
NVRAM_BYTES
];
unsigned
char
contents
[
NVRAM_BYTES
];
unsigned
i
=
*
ppos
;
unsigned
i
=
*
ppos
;
char
*
tmp
;
unsigned
char
*
tmp
;
int
len
;
if
(
copy_from_user
(
contents
,
buf
,
(
NVRAM_BYTES
-
i
)
<
count
?
len
=
(
NVRAM_BYTES
-
i
)
<
count
?
(
NVRAM_BYTES
-
i
)
:
count
;
(
NVRAM_BYTES
-
i
)
:
count
))
if
(
copy_from_user
(
contents
,
buf
,
len
))
return
-
EFAULT
;
return
-
EFAULT
;
spin_lock_irq
(
&
rtc_lock
);
spin_lock_irq
(
&
rtc_lock
);
if
(
!
nvram_check_checksum_int
())
if
(
!
__nvram_check_checksum
())
goto
checksum_err
;
goto
checksum_err
;
for
(
tmp
=
contents
;
count
--
>
0
&&
i
<
NVRAM_BYTES
;
++
i
,
++
tmp
)
for
(
tmp
=
contents
;
count
--
>
0
&&
i
<
NVRAM_BYTES
;
++
i
,
++
tmp
)
nvram_write_int
(
*
tmp
,
i
);
__nvram_write_byte
(
*
tmp
,
i
);
nvram_set_checksum_int
();
__nvram_set_checksum
();
spin_unlock_irq
(
&
rtc_lock
);
spin_unlock_irq
(
&
rtc_lock
);
...
@@ -309,27 +318,28 @@ nvram_ioctl(struct inode *inode, struct file *file,
...
@@ -309,27 +318,28 @@ nvram_ioctl(struct inode *inode, struct file *file,
switch
(
cmd
)
{
switch
(
cmd
)
{
case
NVRAM_INIT
:
/* initialize NVRAM contents and checksum */
case
NVRAM_INIT
:
/* initialize NVRAM contents and checksum */
if
(
!
capable
(
CAP_SYS_ADMIN
))
if
(
!
capable
(
CAP_SYS_ADMIN
))
return
-
EACCES
;
return
-
EACCES
;
spin_lock_irq
(
&
rtc_lock
);
spin_lock_irq
(
&
rtc_lock
);
for
(
i
=
0
;
i
<
NVRAM_BYTES
;
++
i
)
for
(
i
=
0
;
i
<
NVRAM_BYTES
;
++
i
)
nvram_write_int
(
0
,
i
);
__nvram_write_byte
(
0
,
i
);
nvram_set_checksum_int
();
__nvram_set_checksum
();
spin_unlock_irq
(
&
rtc_lock
);
spin_unlock_irq
(
&
rtc_lock
);
return
0
;
return
0
;
case
NVRAM_SETCKS
:
/* just set checksum, contents unchanged
case
NVRAM_SETCKS
:
* (maybe useful after checksum garbaged
/* just set checksum, contents unchanged (maybe useful after
*
somehow...) */
* checksum garbaged
somehow...) */
if
(
!
capable
(
CAP_SYS_ADMIN
))
if
(
!
capable
(
CAP_SYS_ADMIN
))
return
-
EACCES
;
return
-
EACCES
;
spin_lock_irq
(
&
rtc_lock
);
spin_lock_irq
(
&
rtc_lock
);
nvram_set_checksum_int
();
__nvram_set_checksum
();
spin_unlock_irq
(
&
rtc_lock
);
spin_unlock_irq
(
&
rtc_lock
);
return
0
;
return
0
;
...
@@ -341,11 +351,12 @@ nvram_ioctl(struct inode *inode, struct file *file,
...
@@ -341,11 +351,12 @@ nvram_ioctl(struct inode *inode, struct file *file,
static
int
static
int
nvram_open
(
struct
inode
*
inode
,
struct
file
*
file
)
nvram_open
(
struct
inode
*
inode
,
struct
file
*
file
)
{
{
spin_lock
(
&
nvram_open_lock
);
spin_lock
(
&
nvram_state_lock
);
if
((
nvram_open_cnt
&&
(
file
->
f_flags
&
O_EXCL
))
||
if
((
nvram_open_cnt
&&
(
file
->
f_flags
&
O_EXCL
))
||
(
nvram_open_mode
&
NVRAM_EXCL
)
||
(
nvram_open_mode
&
NVRAM_EXCL
)
||
((
file
->
f_mode
&
2
)
&&
(
nvram_open_mode
&
NVRAM_WRITE
)))
{
((
file
->
f_mode
&
2
)
&&
(
nvram_open_mode
&
NVRAM_WRITE
)))
{
spin_unlock
(
&
nvram_
open
_lock
);
spin_unlock
(
&
nvram_
state
_lock
);
return
-
EBUSY
;
return
-
EBUSY
;
}
}
...
@@ -354,20 +365,27 @@ nvram_open(struct inode *inode, struct file *file)
...
@@ -354,20 +365,27 @@ nvram_open(struct inode *inode, struct file *file)
if
(
file
->
f_mode
&
2
)
if
(
file
->
f_mode
&
2
)
nvram_open_mode
|=
NVRAM_WRITE
;
nvram_open_mode
|=
NVRAM_WRITE
;
nvram_open_cnt
++
;
nvram_open_cnt
++
;
spin_unlock
(
&
nvram_open_lock
);
spin_unlock
(
&
nvram_state_lock
);
return
0
;
return
0
;
}
}
static
int
static
int
nvram_release
(
struct
inode
*
inode
,
struct
file
*
file
)
nvram_release
(
struct
inode
*
inode
,
struct
file
*
file
)
{
{
spin_lock
(
&
nvram_open_lock
);
spin_lock
(
&
nvram_state_lock
);
nvram_open_cnt
--
;
nvram_open_cnt
--
;
if
(
file
->
f_flags
&
O_EXCL
)
/* if only one instance is open, clear the EXCL bit */
if
(
nvram_open_mode
&
NVRAM_EXCL
)
nvram_open_mode
&=
~
NVRAM_EXCL
;
nvram_open_mode
&=
~
NVRAM_EXCL
;
if
(
file
->
f_mode
&
2
)
if
(
file
->
f_mode
&
2
)
nvram_open_mode
&=
~
NVRAM_WRITE
;
nvram_open_mode
&=
~
NVRAM_WRITE
;
spin_unlock
(
&
nvram_open_lock
);
spin_unlock
(
&
nvram_state_lock
);
return
0
;
return
0
;
}
}
...
@@ -390,7 +408,7 @@ nvram_read_proc(char *buffer, char **start, off_t offset,
...
@@ -390,7 +408,7 @@ nvram_read_proc(char *buffer, char **start, off_t offset,
spin_lock_irq
(
&
rtc_lock
);
spin_lock_irq
(
&
rtc_lock
);
for
(
i
=
0
;
i
<
NVRAM_BYTES
;
++
i
)
for
(
i
=
0
;
i
<
NVRAM_BYTES
;
++
i
)
contents
[
i
]
=
nvram_read_int
(
i
);
contents
[
i
]
=
__nvram_read_byte
(
i
);
spin_unlock_irq
(
&
rtc_lock
);
spin_unlock_irq
(
&
rtc_lock
);
*
eof
=
mach_proc_infos
(
contents
,
buffer
,
&
len
,
&
begin
,
offset
,
size
);
*
eof
=
mach_proc_infos
(
contents
,
buffer
,
&
len
,
&
begin
,
offset
,
size
);
...
@@ -404,7 +422,7 @@ nvram_read_proc(char *buffer, char **start, off_t offset,
...
@@ -404,7 +422,7 @@ nvram_read_proc(char *buffer, char **start, off_t offset,
/* This macro frees the machine specific function from bounds checking and
/* This macro frees the machine specific function from bounds checking and
* this like that... */
* this like that... */
#define
PRINT_PROC(fmt,args...) \
#define
PRINT_PROC(fmt,args...) \
do { \
do { \
*len += sprintf(buffer+*len, fmt, ##args); \
*len += sprintf(buffer+*len, fmt, ##args); \
if (*begin + *len > offset + size) \
if (*begin + *len > offset + size) \
...
@@ -484,11 +502,13 @@ pc_check_checksum(void)
...
@@ -484,11 +502,13 @@ pc_check_checksum(void)
{
{
int
i
;
int
i
;
unsigned
short
sum
=
0
;
unsigned
short
sum
=
0
;
unsigned
short
expect
;
for
(
i
=
PC_CKS_RANGE_START
;
i
<=
PC_CKS_RANGE_END
;
++
i
)
for
(
i
=
PC_CKS_RANGE_START
;
i
<=
PC_CKS_RANGE_END
;
++
i
)
sum
+=
nvram_read_int
(
i
);
sum
+=
__nvram_read_byte
(
i
);
return
((
sum
&
0xffff
)
==
expect
=
__nvram_read_byte
(
PC_CKS_LOC
)
<<
8
|
((
nvram_read_int
(
PC_CKS_LOC
)
<<
8
)
|
nvram_read_int
(
PC_CKS_LOC
+
1
)));
__nvram_read_byte
(
PC_CKS_LOC
+
1
);
return
((
sum
&
0xffff
)
==
expect
);
}
}
static
void
static
void
...
@@ -498,9 +518,9 @@ pc_set_checksum(void)
...
@@ -498,9 +518,9 @@ pc_set_checksum(void)
unsigned
short
sum
=
0
;
unsigned
short
sum
=
0
;
for
(
i
=
PC_CKS_RANGE_START
;
i
<=
PC_CKS_RANGE_END
;
++
i
)
for
(
i
=
PC_CKS_RANGE_START
;
i
<=
PC_CKS_RANGE_END
;
++
i
)
sum
+=
nvram_read_int
(
i
);
sum
+=
__nvram_read_byte
(
i
);
nvram_write_int
(
sum
>>
8
,
PC_CKS_LOC
);
__nvram_write_byte
(
sum
>>
8
,
PC_CKS_LOC
);
nvram_write_int
(
sum
&
0xff
,
PC_CKS_LOC
+
1
);
__nvram_write_byte
(
sum
&
0xff
,
PC_CKS_LOC
+
1
);
}
}
#ifdef CONFIG_PROC_FS
#ifdef CONFIG_PROC_FS
...
@@ -525,7 +545,7 @@ pc_proc_infos(unsigned char *nvram, char *buffer, int *len,
...
@@ -525,7 +545,7 @@ pc_proc_infos(unsigned char *nvram, char *buffer, int *len,
int
type
;
int
type
;
spin_lock_irq
(
&
rtc_lock
);
spin_lock_irq
(
&
rtc_lock
);
checksum
=
nvram_check_checksum_int
();
checksum
=
__nvram_check_checksum
();
spin_unlock_irq
(
&
rtc_lock
);
spin_unlock_irq
(
&
rtc_lock
);
PRINT_PROC
(
"Checksum status: %svalid
\n
"
,
checksum
?
""
:
"not "
);
PRINT_PROC
(
"Checksum status: %svalid
\n
"
,
checksum
?
""
:
"not "
);
...
@@ -583,6 +603,177 @@ pc_proc_infos(unsigned char *nvram, char *buffer, int *len,
...
@@ -583,6 +603,177 @@ pc_proc_infos(unsigned char *nvram, char *buffer, int *len,
#endif
/* MACH == PC */
#endif
/* MACH == PC */
#if MACH == COBALT
/* the cobalt CMOS has a wider range of it's checksum */
static
int
cobalt_check_checksum
(
void
)
{
int
i
;
unsigned
short
sum
=
0
;
unsigned
short
expect
;
for
(
i
=
COBT_CMOS_CKS_START
;
i
<=
COBT_CMOS_CKS_END
;
++
i
)
{
if
((
i
==
COBT_CMOS_CHECKSUM
)
||
(
i
==
(
COBT_CMOS_CHECKSUM
+
1
)))
continue
;
sum
+=
__nvram_read_byte
(
i
);
}
expect
=
__nvram_read_byte
(
COBT_CMOS_CHECKSUM
)
<<
8
|
__nvram_read_byte
(
COBT_CMOS_CHECKSUM
+
1
);
return
((
sum
&
0xffff
)
==
expect
);
}
static
void
cobalt_set_checksum
(
void
)
{
int
i
;
unsigned
short
sum
=
0
;
for
(
i
=
COBT_CMOS_CKS_START
;
i
<=
COBT_CMOS_CKS_END
;
++
i
)
{
if
((
i
==
COBT_CMOS_CHECKSUM
)
||
(
i
==
(
COBT_CMOS_CHECKSUM
+
1
)))
continue
;
sum
+=
__nvram_read_byte
(
i
);
}
__nvram_write_byte
(
sum
>>
8
,
COBT_CMOS_CHECKSUM
);
__nvram_write_byte
(
sum
&
0xff
,
COBT_CMOS_CHECKSUM
+
1
);
}
#ifdef CONFIG_PROC_FS
static
int
cobalt_proc_infos
(
unsigned
char
*
nvram
,
char
*
buffer
,
int
*
len
,
off_t
*
begin
,
off_t
offset
,
int
size
)
{
int
i
;
unsigned
int
checksum
;
unsigned
int
flags
;
char
sernum
[
14
];
char
*
key
=
"cNoEbTaWlOtR!"
;
unsigned
char
bto_csum
;
spin_lock_irq
(
&
rtc_lock
);
checksum
=
__nvram_check_checksum
();
spin_unlock_irq
(
&
rtc_lock
);
PRINT_PROC
(
"Checksum status: %svalid
\n
"
,
checksum
?
""
:
"not "
);
flags
=
nvram
[
COBT_CMOS_FLAG_BYTE_0
]
<<
8
|
nvram
[
COBT_CMOS_FLAG_BYTE_1
];
PRINT_PROC
(
"Console: %s
\n
"
,
flags
&
COBT_CMOS_CONSOLE_FLAG
?
"on"
:
"off"
);
PRINT_PROC
(
"Firmware Debug Messages: %s
\n
"
,
flags
&
COBT_CMOS_DEBUG_FLAG
?
"on"
:
"off"
);
PRINT_PROC
(
"Auto Prompt: %s
\n
"
,
flags
&
COBT_CMOS_AUTO_PROMPT_FLAG
?
"on"
:
"off"
);
PRINT_PROC
(
"Shutdown Status: %s
\n
"
,
flags
&
COBT_CMOS_CLEAN_BOOT_FLAG
?
"clean"
:
"dirty"
);
PRINT_PROC
(
"Hardware Probe: %s
\n
"
,
flags
&
COBT_CMOS_HW_NOPROBE_FLAG
?
"partial"
:
"full"
);
PRINT_PROC
(
"System Fault: %sdetected
\n
"
,
flags
&
COBT_CMOS_SYSFAULT_FLAG
?
""
:
"not "
);
PRINT_PROC
(
"Panic on OOPS: %s
\n
"
,
flags
&
COBT_CMOS_OOPSPANIC_FLAG
?
"yes"
:
"no"
);
PRINT_PROC
(
"Delayed Cache Initialization: %s
\n
"
,
flags
&
COBT_CMOS_DELAY_CACHE_FLAG
?
"yes"
:
"no"
);
PRINT_PROC
(
"Show Logo at Boot: %s
\n
"
,
flags
&
COBT_CMOS_NOLOGO_FLAG
?
"no"
:
"yes"
);
PRINT_PROC
(
"Boot Method: "
);
switch
(
nvram
[
COBT_CMOS_BOOT_METHOD
])
{
case
COBT_CMOS_BOOT_METHOD_DISK
:
PRINT_PROC
(
"disk
\n
"
);
break
;
case
COBT_CMOS_BOOT_METHOD_ROM
:
PRINT_PROC
(
"rom
\n
"
);
break
;
case
COBT_CMOS_BOOT_METHOD_NET
:
PRINT_PROC
(
"net
\n
"
);
break
;
default:
PRINT_PROC
(
"unknown
\n
"
);
break
;
}
PRINT_PROC
(
"Primary Boot Device: %d:%d
\n
"
,
nvram
[
COBT_CMOS_BOOT_DEV0_MAJ
],
nvram
[
COBT_CMOS_BOOT_DEV0_MIN
]
);
PRINT_PROC
(
"Secondary Boot Device: %d:%d
\n
"
,
nvram
[
COBT_CMOS_BOOT_DEV1_MAJ
],
nvram
[
COBT_CMOS_BOOT_DEV1_MIN
]
);
PRINT_PROC
(
"Tertiary Boot Device: %d:%d
\n
"
,
nvram
[
COBT_CMOS_BOOT_DEV2_MAJ
],
nvram
[
COBT_CMOS_BOOT_DEV2_MIN
]
);
PRINT_PROC
(
"Uptime: %d
\n
"
,
nvram
[
COBT_CMOS_UPTIME_0
]
<<
24
|
nvram
[
COBT_CMOS_UPTIME_1
]
<<
16
|
nvram
[
COBT_CMOS_UPTIME_2
]
<<
8
|
nvram
[
COBT_CMOS_UPTIME_3
]);
PRINT_PROC
(
"Boot Count: %d
\n
"
,
nvram
[
COBT_CMOS_BOOTCOUNT_0
]
<<
24
|
nvram
[
COBT_CMOS_BOOTCOUNT_1
]
<<
16
|
nvram
[
COBT_CMOS_BOOTCOUNT_2
]
<<
8
|
nvram
[
COBT_CMOS_BOOTCOUNT_3
]);
/* 13 bytes of serial num */
for
(
i
=
0
;
i
<
13
;
i
++
)
{
sernum
[
i
]
=
nvram
[
COBT_CMOS_SYS_SERNUM_0
+
i
];
}
sernum
[
13
]
=
'\0'
;
checksum
=
0
;
for
(
i
=
0
;
i
<
13
;
i
++
)
{
checksum
+=
sernum
[
i
]
^
key
[
i
];
}
checksum
=
((
checksum
&
0x7f
)
^
(
0xd6
))
&
0xff
;
PRINT_PROC
(
"Serial Number: %s"
,
sernum
);
if
(
checksum
!=
nvram
[
COBT_CMOS_SYS_SERNUM_CSUM
])
{
PRINT_PROC
(
" (invalid checksum)"
);
}
PRINT_PROC
(
"
\n
"
);
PRINT_PROC
(
"Rom Revison: %d.%d.%d
\n
"
,
nvram
[
COBT_CMOS_ROM_REV_MAJ
],
nvram
[
COBT_CMOS_ROM_REV_MIN
],
nvram
[
COBT_CMOS_ROM_REV_REV
]);
PRINT_PROC
(
"BTO Server: %d.%d.%d.%d"
,
nvram
[
COBT_CMOS_BTO_IP_0
],
nvram
[
COBT_CMOS_BTO_IP_1
],
nvram
[
COBT_CMOS_BTO_IP_2
],
nvram
[
COBT_CMOS_BTO_IP_3
]);
bto_csum
=
nvram
[
COBT_CMOS_BTO_IP_0
]
+
nvram
[
COBT_CMOS_BTO_IP_1
]
+
nvram
[
COBT_CMOS_BTO_IP_2
]
+
nvram
[
COBT_CMOS_BTO_IP_3
];
if
(
bto_csum
!=
nvram
[
COBT_CMOS_BTO_IP_CSUM
])
{
PRINT_PROC
(
" (invalid checksum)"
);
}
PRINT_PROC
(
"
\n
"
);
if
(
flags
&
COBT_CMOS_VERSION_FLAG
&&
nvram
[
COBT_CMOS_VERSION
]
>=
COBT_CMOS_VER_BTOCODE
)
{
PRINT_PROC
(
"BTO Code: 0x%x
\n
"
,
nvram
[
COBT_CMOS_BTO_CODE_0
]
<<
24
|
nvram
[
COBT_CMOS_BTO_CODE_1
]
<<
16
|
nvram
[
COBT_CMOS_BTO_CODE_2
]
<<
8
|
nvram
[
COBT_CMOS_BTO_CODE_3
]);
}
return
1
;
}
#endif
/* CONFIG_PROC_FS */
#endif
/* MACH == COBALT */
#if MACH == ATARI
#if MACH == ATARI
static
int
static
int
...
@@ -592,9 +783,9 @@ atari_check_checksum(void)
...
@@ -592,9 +783,9 @@ atari_check_checksum(void)
unsigned
char
sum
=
0
;
unsigned
char
sum
=
0
;
for
(
i
=
ATARI_CKS_RANGE_START
;
i
<=
ATARI_CKS_RANGE_END
;
++
i
)
for
(
i
=
ATARI_CKS_RANGE_START
;
i
<=
ATARI_CKS_RANGE_END
;
++
i
)
sum
+=
nvram_read_int
(
i
);
sum
+=
__nvram_read_byte
(
i
);
return
(
nvram_read_int
(
ATARI_CKS_LOC
)
==
(
~
sum
&
0xff
)
&&
return
(
__nvram_read_byte
(
ATARI_CKS_LOC
)
==
(
~
sum
&
0xff
)
&&
nvram_read_int
(
ATARI_CKS_LOC
+
1
)
==
(
sum
&
0xff
));
__nvram_read_byte
(
ATARI_CKS_LOC
+
1
)
==
(
sum
&
0xff
));
}
}
static
void
static
void
...
@@ -604,9 +795,9 @@ atari_set_checksum(void)
...
@@ -604,9 +795,9 @@ atari_set_checksum(void)
unsigned
char
sum
=
0
;
unsigned
char
sum
=
0
;
for
(
i
=
ATARI_CKS_RANGE_START
;
i
<=
ATARI_CKS_RANGE_END
;
++
i
)
for
(
i
=
ATARI_CKS_RANGE_START
;
i
<=
ATARI_CKS_RANGE_END
;
++
i
)
sum
+=
nvram_read_int
(
i
);
sum
+=
__nvram_read_byte
(
i
);
nvram_write_int
(
~
sum
,
ATARI_CKS_LOC
);
__nvram_write_byte
(
~
sum
,
ATARI_CKS_LOC
);
nvram_write_int
(
sum
,
ATARI_CKS_LOC
+
1
);
__nvram_write_byte
(
sum
,
ATARI_CKS_LOC
+
1
);
}
}
#ifdef CONFIG_PROC_FS
#ifdef CONFIG_PROC_FS
...
@@ -722,3 +913,12 @@ atari_proc_infos(unsigned char *nvram, char *buffer, int *len,
...
@@ -722,3 +913,12 @@ atari_proc_infos(unsigned char *nvram, char *buffer, int *len,
#endif
/* MACH == ATARI */
#endif
/* MACH == ATARI */
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
EXPORT_SYMBOL
(
__nvram_read_byte
);
EXPORT_SYMBOL
(
nvram_read_byte
);
EXPORT_SYMBOL
(
__nvram_write_byte
);
EXPORT_SYMBOL
(
nvram_write_byte
);
EXPORT_SYMBOL
(
__nvram_check_checksum
);
EXPORT_SYMBOL
(
nvram_check_checksum
);
EXPORT_SYMBOL
(
__nvram_set_checksum
);
EXPORT_SYMBOL
(
nvram_set_checksum
);
drivers/input/input.c
View file @
33173395
...
@@ -38,6 +38,7 @@ EXPORT_SYMBOL(input_close_device);
...
@@ -38,6 +38,7 @@ EXPORT_SYMBOL(input_close_device);
EXPORT_SYMBOL
(
input_accept_process
);
EXPORT_SYMBOL
(
input_accept_process
);
EXPORT_SYMBOL
(
input_flush_device
);
EXPORT_SYMBOL
(
input_flush_device
);
EXPORT_SYMBOL
(
input_event
);
EXPORT_SYMBOL
(
input_event
);
EXPORT_SYMBOL
(
input_devclass
);
#define INPUT_MAJOR 13
#define INPUT_MAJOR 13
#define INPUT_DEVICES 256
#define INPUT_DEVICES 256
...
...
drivers/input/mousedev.c
View file @
33173395
...
@@ -330,7 +330,6 @@ static ssize_t mousedev_write(struct file * file, const char * buffer, size_t co
...
@@ -330,7 +330,6 @@ static ssize_t mousedev_write(struct file * file, const char * buffer, size_t co
list
->
ps2
[
0
]
=
0xfa
;
list
->
ps2
[
0
]
=
0xfa
;
list
->
bufsiz
=
1
;
list
->
bufsiz
=
1
;
list
->
ready
=
1
;
switch
(
c
)
{
switch
(
c
)
{
...
@@ -404,17 +403,17 @@ static ssize_t mousedev_read(struct file * file, char * buffer, size_t count, lo
...
@@ -404,17 +403,17 @@ static ssize_t mousedev_read(struct file * file, char * buffer, size_t count, lo
if
(
retval
)
if
(
retval
)
return
retval
;
return
retval
;
if
(
!
list
->
buffer
)
if
(
!
list
->
buffer
&&
list
->
ready
)
mousedev_packet
(
list
,
0
);
mousedev_packet
(
list
,
0
);
if
(
count
>
list
->
buffer
)
if
(
count
>
list
->
buffer
)
count
=
list
->
buffer
;
count
=
list
->
buffer
;
if
(
copy_to_user
(
buffer
,
list
->
ps2
+
list
->
bufsiz
-
list
->
buffer
,
count
))
return
-
EFAULT
;
list
->
buffer
-=
count
;
list
->
buffer
-=
count
;
if
(
copy_to_user
(
buffer
,
list
->
ps2
+
list
->
bufsiz
-
list
->
buffer
-
count
,
count
))
return
-
EFAULT
;
return
count
;
return
count
;
}
}
...
...
drivers/input/serio/Config.in
View file @
33173395
...
@@ -5,11 +5,6 @@
...
@@ -5,11 +5,6 @@
tristate 'Serial i/o support' CONFIG_SERIO
tristate 'Serial i/o support' CONFIG_SERIO
dep_tristate ' i8042 PC Keyboard controller' CONFIG_SERIO_I8042 $CONFIG_SERIO
dep_tristate ' i8042 PC Keyboard controller' CONFIG_SERIO_I8042 $CONFIG_SERIO
if [ "$CONFIG_SERIO_I8042" != "n" ]; then
hex ' Register Base Address' CONFIG_I8042_REG_BASE 60
int ' PS/2 Keyboard IRQ' CONFIG_I8042_KBD_IRQ 1
int ' PS/2 AUX IRQ' CONFIG_I8042_AUX_IRQ 12
fi
dep_tristate ' Serial port line discipline' CONFIG_SERIO_SERPORT $CONFIG_SERIO
dep_tristate ' Serial port line discipline' CONFIG_SERIO_SERPORT $CONFIG_SERIO
dep_tristate ' ct82c710 Aux port controller' CONFIG_SERIO_CT82C710 $CONFIG_SERIO
dep_tristate ' ct82c710 Aux port controller' CONFIG_SERIO_CT82C710 $CONFIG_SERIO
if [ "$CONFIG_Q40" = "y" ]; then
if [ "$CONFIG_Q40" = "y" ]; then
...
...
drivers/input/serio/i8042-io.h
View file @
33173395
...
@@ -18,17 +18,21 @@
...
@@ -18,17 +18,21 @@
* IRQs.
* IRQs.
*/
*/
#define I8042_KBD_IRQ CONFIG_I8042_KBD_IRQ
#ifdef __alpha__
#define I8042_AUX_IRQ CONFIG_I8042_AUX_IRQ
#define I8042_KBD_IRQ 1
#define I8042_AUX_IRQ (RTC_PORT(0) == 0x170 ? 9 : 12)
/* Jensen is special */
#else
#define I8042_KBD_IRQ 1
#define I8042_AUX_IRQ 12
#endif
/*
/*
* Register numbers.
* Register numbers.
*/
*/
#define I8042_COMMAND_REG CONFIG_I8042_REG_BASE + 4
#define I8042_COMMAND_REG 0x64
#define I8042_STATUS_REG CONFIG_I8042_REG_BASE + 4
#define I8042_STATUS_REG 0x64
#define I8042_DATA_REG CONFIG_I8042_REG_BASE
#define I8042_DATA_REG 0x60
static
inline
int
i8042_read_data
(
void
)
static
inline
int
i8042_read_data
(
void
)
{
{
...
...
fs/devfs/base.c
View file @
33173395
...
@@ -645,6 +645,9 @@
...
@@ -645,6 +645,9 @@
20020728 Richard Gooch <rgooch@atnf.csiro.au>
20020728 Richard Gooch <rgooch@atnf.csiro.au>
Removed deprecated <devfs_find_handle>.
Removed deprecated <devfs_find_handle>.
v1.20
v1.20
20020820 Richard Gooch <rgooch@atnf.csiro.au>
Fixed module unload race in <devfs_open>.
v1.21
*/
*/
#include <linux/types.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/errno.h>
...
@@ -677,7 +680,7 @@
...
@@ -677,7 +680,7 @@
#include <asm/bitops.h>
#include <asm/bitops.h>
#include <asm/atomic.h>
#include <asm/atomic.h>
#define DEVFS_VERSION "1.2
0 (20020728
)"
#define DEVFS_VERSION "1.2
1 (20020820
)"
#define DEVFS_NAME "devfs"
#define DEVFS_NAME "devfs"
...
@@ -2228,16 +2231,15 @@ const char *devfs_get_name (devfs_handle_t de, unsigned int *namelen)
...
@@ -2228,16 +2231,15 @@ const char *devfs_get_name (devfs_handle_t de, unsigned int *namelen)
/**
/**
* devfs_only - returns if "devfs=only" is a boot option
* devfs_only - returns
true
if "devfs=only" is a boot option
*
*
* If "devfs=only" this function will return 1, otherwise 0 is returned.
* If "devfs=only" this function will return 1, otherwise 0 is returned.
*/
*/
int
devfs_only
(
void
)
int
devfs_only
(
void
)
{
{
if
(
boot_options
&
OPTION_ONLY
)
return
(
boot_options
&
OPTION_ONLY
)
?
1
:
0
;
return
1
;
}
/* End Function devfs_only */
return
0
;
}
/**
/**
...
@@ -2312,6 +2314,7 @@ EXPORT_SYMBOL(devfs_unregister);
...
@@ -2312,6 +2314,7 @@ EXPORT_SYMBOL(devfs_unregister);
EXPORT_SYMBOL
(
devfs_mk_symlink
);
EXPORT_SYMBOL
(
devfs_mk_symlink
);
EXPORT_SYMBOL
(
devfs_mk_dir
);
EXPORT_SYMBOL
(
devfs_mk_dir
);
EXPORT_SYMBOL
(
devfs_get_handle
);
EXPORT_SYMBOL
(
devfs_get_handle
);
EXPORT_SYMBOL
(
devfs_find_and_unregister
);
EXPORT_SYMBOL
(
devfs_get_flags
);
EXPORT_SYMBOL
(
devfs_get_flags
);
EXPORT_SYMBOL
(
devfs_set_flags
);
EXPORT_SYMBOL
(
devfs_set_flags
);
EXPORT_SYMBOL
(
devfs_get_maj_min
);
EXPORT_SYMBOL
(
devfs_get_maj_min
);
...
@@ -2327,6 +2330,7 @@ EXPORT_SYMBOL(devfs_get_next_sibling);
...
@@ -2327,6 +2330,7 @@ EXPORT_SYMBOL(devfs_get_next_sibling);
EXPORT_SYMBOL
(
devfs_auto_unregister
);
EXPORT_SYMBOL
(
devfs_auto_unregister
);
EXPORT_SYMBOL
(
devfs_get_unregister_slave
);
EXPORT_SYMBOL
(
devfs_get_unregister_slave
);
EXPORT_SYMBOL
(
devfs_get_name
);
EXPORT_SYMBOL
(
devfs_get_name
);
EXPORT_SYMBOL
(
devfs_only
);
/**
/**
...
@@ -2382,7 +2386,7 @@ static int check_disc_changed (struct devfs_entry *de)
...
@@ -2382,7 +2386,7 @@ static int check_disc_changed (struct devfs_entry *de)
extern
int
warn_no_part
;
extern
int
warn_no_part
;
if
(
!
S_ISBLK
(
de
->
mode
)
)
return
0
;
if
(
!
S_ISBLK
(
de
->
mode
)
)
return
0
;
bdev
=
bdget
(
kdev_t_to_nr
(
dev
)
);
bdev
=
bdget
(
kdev_t_to_nr
(
dev
)
);
if
(
!
bdev
)
return
0
;
if
(
!
bdev
)
return
0
;
bdops
=
devfs_get_ops
(
de
);
bdops
=
devfs_get_ops
(
de
);
if
(
!
bdops
)
return
0
;
if
(
!
bdops
)
return
0
;
...
@@ -2390,7 +2394,7 @@ static int check_disc_changed (struct devfs_entry *de)
...
@@ -2390,7 +2394,7 @@ static int check_disc_changed (struct devfs_entry *de)
/* Ugly hack to disable messages about unable to read partition table */
/* Ugly hack to disable messages about unable to read partition table */
tmp
=
warn_no_part
;
tmp
=
warn_no_part
;
warn_no_part
=
0
;
warn_no_part
=
0
;
retval
=
full_check_disk_change
(
bdev
);
retval
=
full_check_disk_change
(
bdev
);
warn_no_part
=
tmp
;
warn_no_part
=
tmp
;
out:
out:
devfs_put_ops
(
de
);
devfs_put_ops
(
de
);
...
@@ -2692,21 +2696,23 @@ static int devfs_open (struct inode *inode, struct file *file)
...
@@ -2692,21 +2696,23 @@ static int devfs_open (struct inode *inode, struct file *file)
struct
fcb_type
*
df
;
struct
fcb_type
*
df
;
struct
devfs_entry
*
de
;
struct
devfs_entry
*
de
;
struct
fs_info
*
fs_info
=
inode
->
i_sb
->
u
.
generic_sbp
;
struct
fs_info
*
fs_info
=
inode
->
i_sb
->
u
.
generic_sbp
;
void
*
ops
;
de
=
get_devfs_entry_from_vfs_inode
(
inode
);
de
=
get_devfs_entry_from_vfs_inode
(
inode
);
if
(
de
==
NULL
)
return
-
ENODEV
;
if
(
de
==
NULL
)
return
-
ENODEV
;
if
(
S_ISDIR
(
de
->
mode
)
)
return
0
;
if
(
S_ISDIR
(
de
->
mode
)
)
return
0
;
df
=
&
de
->
u
.
fcb
;
df
=
&
de
->
u
.
fcb
;
file
->
private_data
=
de
->
info
;
file
->
private_data
=
de
->
info
;
ops
=
devfs_get_ops
(
de
);
/* Now have module refcount */
if
(
S_ISBLK
(
inode
->
i_mode
)
)
if
(
S_ISBLK
(
inode
->
i_mode
)
)
{
{
file
->
f_op
=
&
def_blk_fops
;
file
->
f_op
=
&
def_blk_fops
;
if
(
df
->
ops
)
inode
->
i_bdev
->
bd_op
=
df
->
ops
;
if
(
ops
)
inode
->
i_bdev
->
bd_op
=
ops
;
err
=
def_blk_fops
.
open
(
inode
,
file
);
err
=
def_blk_fops
.
open
(
inode
,
file
);
/* Module refcount unchanged */
}
}
else
else
{
{
file
->
f_op
=
fops_get
(
(
struct
file_operations
*
)
df
->
ops
)
;
file
->
f_op
=
ops
;
if
(
file
->
f_op
)
if
(
file
->
f_op
)
{
{
lock_kernel
();
lock_kernel
();
...
@@ -2714,7 +2720,7 @@ static int devfs_open (struct inode *inode, struct file *file)
...
@@ -2714,7 +2720,7 @@ static int devfs_open (struct inode *inode, struct file *file)
unlock_kernel
();
unlock_kernel
();
}
}
else
else
{
/* Fallback to legacy scheme */
{
/* Fallback to legacy scheme
(I don't have a module refcount)
*/
if
(
S_ISCHR
(
inode
->
i_mode
)
)
err
=
chrdev_open
(
inode
,
file
);
if
(
S_ISCHR
(
inode
->
i_mode
)
)
err
=
chrdev_open
(
inode
,
file
);
else
err
=
-
ENODEV
;
else
err
=
-
ENODEV
;
}
}
...
...
fs/lockd/svc.c
View file @
33173395
...
@@ -203,6 +203,7 @@ lockd(struct svc_rqst *rqstp)
...
@@ -203,6 +203,7 @@ lockd(struct svc_rqst *rqstp)
rpciod_down
();
rpciod_down
();
/* Release module */
/* Release module */
unlock_kernel
();
MOD_DEC_USE_COUNT
;
MOD_DEC_USE_COUNT
;
}
}
...
...
include/asm-i386/xor.h
View file @
33173395
...
@@ -20,6 +20,7 @@
...
@@ -20,6 +20,7 @@
#define FPU_SAVE \
#define FPU_SAVE \
do { \
do { \
preempt_disable(); \
if (!test_thread_flag(TIF_USEDFPU)) \
if (!test_thread_flag(TIF_USEDFPU)) \
__asm__ __volatile__ (" clts;\n"); \
__asm__ __volatile__ (" clts;\n"); \
__asm__ __volatile__ ("fsave %0; fwait": "=m"(fpu_save[0])); \
__asm__ __volatile__ ("fsave %0; fwait": "=m"(fpu_save[0])); \
...
@@ -30,6 +31,7 @@
...
@@ -30,6 +31,7 @@
__asm__ __volatile__ ("frstor %0": : "m"(fpu_save[0])); \
__asm__ __volatile__ ("frstor %0": : "m"(fpu_save[0])); \
if (!test_thread_flag(TIF_USEDFPU)) \
if (!test_thread_flag(TIF_USEDFPU)) \
stts(); \
stts(); \
preempt_enable(); \
} while (0)
} while (0)
#define LD(x,y) " movq 8*("#x")(%1), %%mm"#y" ;\n"
#define LD(x,y) " movq 8*("#x")(%1), %%mm"#y" ;\n"
...
@@ -542,7 +544,8 @@ static struct xor_block_template xor_block_p5_mmx = {
...
@@ -542,7 +544,8 @@ static struct xor_block_template xor_block_p5_mmx = {
* Copyright (C) 1999 Zach Brown (with obvious credit due Ingo)
* Copyright (C) 1999 Zach Brown (with obvious credit due Ingo)
*/
*/
#define XMMS_SAVE \
#define XMMS_SAVE do { \
preempt_disable(); \
__asm__ __volatile__ ( \
__asm__ __volatile__ ( \
"movl %%cr0,%0 ;\n\t" \
"movl %%cr0,%0 ;\n\t" \
"clts ;\n\t" \
"clts ;\n\t" \
...
@@ -552,9 +555,10 @@ static struct xor_block_template xor_block_p5_mmx = {
...
@@ -552,9 +555,10 @@ static struct xor_block_template xor_block_p5_mmx = {
"movups %%xmm3,0x30(%1) ;\n\t" \
"movups %%xmm3,0x30(%1) ;\n\t" \
: "=&r" (cr0) \
: "=&r" (cr0) \
: "r" (xmm_save) \
: "r" (xmm_save) \
: "memory")
: "memory"); \
} while(0)
#define XMMS_RESTORE
\
#define XMMS_RESTORE
do {
\
__asm__ __volatile__ ( \
__asm__ __volatile__ ( \
"sfence ;\n\t" \
"sfence ;\n\t" \
"movups (%1),%%xmm0 ;\n\t" \
"movups (%1),%%xmm0 ;\n\t" \
...
@@ -564,7 +568,9 @@ static struct xor_block_template xor_block_p5_mmx = {
...
@@ -564,7 +568,9 @@ static struct xor_block_template xor_block_p5_mmx = {
"movl %0,%%cr0 ;\n\t" \
"movl %0,%%cr0 ;\n\t" \
: \
: \
: "r" (cr0), "r" (xmm_save) \
: "r" (cr0), "r" (xmm_save) \
: "memory")
: "memory"); \
preempt_enable(); \
} while(0)
#define ALIGN16 __attribute__((aligned(16)))
#define ALIGN16 __attribute__((aligned(16)))
...
...
include/asm-x86_64/xor.h
View file @
33173395
...
@@ -37,8 +37,9 @@ typedef struct { unsigned long a,b; } __attribute__((aligned(16))) xmm_store_t;
...
@@ -37,8 +37,9 @@ typedef struct { unsigned long a,b; } __attribute__((aligned(16))) xmm_store_t;
/* Doesn't use gcc to save the XMM registers, because there is no easy way to
/* Doesn't use gcc to save the XMM registers, because there is no easy way to
tell it to do a clts before the register saving. */
tell it to do a clts before the register saving. */
#define XMMS_SAVE \
#define XMMS_SAVE do { \
asm volatile ( \
preempt_disable(); \
asm volatile ( \
"movq %%cr0,%0 ;\n\t" \
"movq %%cr0,%0 ;\n\t" \
"clts ;\n\t" \
"clts ;\n\t" \
"movups %%xmm0,(%1) ;\n\t" \
"movups %%xmm0,(%1) ;\n\t" \
...
@@ -47,10 +48,11 @@ typedef struct { unsigned long a,b; } __attribute__((aligned(16))) xmm_store_t;
...
@@ -47,10 +48,11 @@ typedef struct { unsigned long a,b; } __attribute__((aligned(16))) xmm_store_t;
"movups %%xmm3,0x30(%1) ;\n\t" \
"movups %%xmm3,0x30(%1) ;\n\t" \
: "=r" (cr0) \
: "=r" (cr0) \
: "r" (xmm_save) \
: "r" (xmm_save) \
: "memory")
: "memory"); \
} while(0)
#define XMMS_RESTORE \
#define XMMS_RESTORE \
asm volatile (
\
asm volatile (
\
"sfence ;\n\t" \
"sfence ;\n\t" \
"movups (%1),%%xmm0 ;\n\t" \
"movups (%1),%%xmm0 ;\n\t" \
"movups 0x10(%1),%%xmm1 ;\n\t" \
"movups 0x10(%1),%%xmm1 ;\n\t" \
...
@@ -59,7 +61,9 @@ typedef struct { unsigned long a,b; } __attribute__((aligned(16))) xmm_store_t;
...
@@ -59,7 +61,9 @@ typedef struct { unsigned long a,b; } __attribute__((aligned(16))) xmm_store_t;
"movq %0,%%cr0 ;\n\t" \
"movq %0,%%cr0 ;\n\t" \
: \
: \
: "r" (cr0), "r" (xmm_save) \
: "r" (cr0), "r" (xmm_save) \
: "memory")
: "memory"); \
preempt_enable(); \
} while(0)
#define OFFS(x) "16*("#x")"
#define OFFS(x) "16*("#x")"
#define PF_OFFS(x) "256+16*("#x")"
#define PF_OFFS(x) "256+16*("#x")"
...
...
include/linux/cobalt-nvram.h
0 → 100644
View file @
33173395
/*
* $Id: cobalt-nvram.h,v 1.20 2001/10/17 23:16:55 thockin Exp $
* cobalt-nvram.h : defines for the various fields in the cobalt NVRAM
*
* Copyright 2001,2002 Sun Microsystems, Inc.
*/
#ifndef COBALT_NVRAM_H
#define COBALT_NVRAM_H
#include <linux/nvram.h>
#define COBT_CMOS_INFO_MAX 0x7f
/* top address allowed */
#define COBT_CMOS_BIOS_DRIVE_INFO 0x12
/* drive info would go here */
#define COBT_CMOS_CKS_START NVRAM_OFFSET(0x0e)
#define COBT_CMOS_CKS_END NVRAM_OFFSET(0x7f)
/* flag bytes - 16 flags for now, leave room for more */
#define COBT_CMOS_FLAG_BYTE_0 NVRAM_OFFSET(0x10)
#define COBT_CMOS_FLAG_BYTE_1 NVRAM_OFFSET(0x11)
/* flags in flag bytes - up to 16 */
#define COBT_CMOS_FLAG_MIN 0x0001
#define COBT_CMOS_CONSOLE_FLAG 0x0001
/* console on/off */
#define COBT_CMOS_DEBUG_FLAG 0x0002
/* ROM debug messages */
#define COBT_CMOS_AUTO_PROMPT_FLAG 0x0004
/* boot to ROM prompt? */
#define COBT_CMOS_CLEAN_BOOT_FLAG 0x0008
/* set by a clean shutdown */
#define COBT_CMOS_HW_NOPROBE_FLAG 0x0010
/* go easy on the probing */
#define COBT_CMOS_SYSFAULT_FLAG 0x0020
/* system fault detected */
#define COBT_CMOS_OOPSPANIC_FLAG 0x0040
/* panic on oops */
#define COBT_CMOS_DELAY_CACHE_FLAG 0x0080
/* delay cache initialization */
#define COBT_CMOS_NOLOGO_FLAG 0x0100
/* hide "C" logo @ boot */
#define COBT_CMOS_VERSION_FLAG 0x0200
/* the version field is valid */
#define COBT_CMOS_FLAG_MAX 0x0200
/* leave byte 0x12 blank - Linux looks for drive info here */
/* CMOS structure version, valid if COBT_CMOS_VERSION_FLAG is true */
#define COBT_CMOS_VERSION NVRAM_OFFSET(0x13)
#define COBT_CMOS_VER_BTOCODE 1
/* min. version needed for btocode */
/* index of default boot method */
#define COBT_CMOS_BOOT_METHOD NVRAM_OFFSET(0x20)
#define COBT_CMOS_BOOT_METHOD_DISK 0
#define COBT_CMOS_BOOT_METHOD_ROM 1
#define COBT_CMOS_BOOT_METHOD_NET 2
#define COBT_CMOS_BOOT_DEV_MIN NVRAM_OFFSET(0x21)
/* major #, minor # of first through fourth boot device */
#define COBT_CMOS_BOOT_DEV0_MAJ NVRAM_OFFSET(0x21)
#define COBT_CMOS_BOOT_DEV0_MIN NVRAM_OFFSET(0x22)
#define COBT_CMOS_BOOT_DEV1_MAJ NVRAM_OFFSET(0x23)
#define COBT_CMOS_BOOT_DEV1_MIN NVRAM_OFFSET(0x24)
#define COBT_CMOS_BOOT_DEV2_MAJ NVRAM_OFFSET(0x25)
#define COBT_CMOS_BOOT_DEV2_MIN NVRAM_OFFSET(0x26)
#define COBT_CMOS_BOOT_DEV3_MAJ NVRAM_OFFSET(0x27)
#define COBT_CMOS_BOOT_DEV3_MIN NVRAM_OFFSET(0x28)
#define COBT_CMOS_BOOT_DEV_MAX NVRAM_OFFSET(0x28)
/* checksum of bytes 0xe-0x7f */
#define COBT_CMOS_CHECKSUM NVRAM_OFFSET(0x2e)
/* running uptime counter, units of 5 minutes (32 bits =~ 41000 years) */
#define COBT_CMOS_UPTIME_0 NVRAM_OFFSET(0x30)
#define COBT_CMOS_UPTIME_1 NVRAM_OFFSET(0x31)
#define COBT_CMOS_UPTIME_2 NVRAM_OFFSET(0x32)
#define COBT_CMOS_UPTIME_3 NVRAM_OFFSET(0x33)
/* count of successful boots (32 bits) */
#define COBT_CMOS_BOOTCOUNT_0 NVRAM_OFFSET(0x38)
#define COBT_CMOS_BOOTCOUNT_1 NVRAM_OFFSET(0x39)
#define COBT_CMOS_BOOTCOUNT_2 NVRAM_OFFSET(0x3a)
#define COBT_CMOS_BOOTCOUNT_3 NVRAM_OFFSET(0x3b)
/* 13 bytes: system serial number, same as on the back of the system */
#define COBT_CMOS_SYS_SERNUM_LEN 13
#define COBT_CMOS_SYS_SERNUM_0 NVRAM_OFFSET(0x40)
#define COBT_CMOS_SYS_SERNUM_1 NVRAM_OFFSET(0x41)
#define COBT_CMOS_SYS_SERNUM_2 NVRAM_OFFSET(0x42)
#define COBT_CMOS_SYS_SERNUM_3 NVRAM_OFFSET(0x43)
#define COBT_CMOS_SYS_SERNUM_4 NVRAM_OFFSET(0x44)
#define COBT_CMOS_SYS_SERNUM_5 NVRAM_OFFSET(0x45)
#define COBT_CMOS_SYS_SERNUM_6 NVRAM_OFFSET(0x46)
#define COBT_CMOS_SYS_SERNUM_7 NVRAM_OFFSET(0x47)
#define COBT_CMOS_SYS_SERNUM_8 NVRAM_OFFSET(0x48)
#define COBT_CMOS_SYS_SERNUM_9 NVRAM_OFFSET(0x49)
#define COBT_CMOS_SYS_SERNUM_10 NVRAM_OFFSET(0x4a)
#define COBT_CMOS_SYS_SERNUM_11 NVRAM_OFFSET(0x4b)
#define COBT_CMOS_SYS_SERNUM_12 NVRAM_OFFSET(0x4c)
/* checksum for serial num - 1 byte */
#define COBT_CMOS_SYS_SERNUM_CSUM NVRAM_OFFSET(0x4f)
#define COBT_CMOS_ROM_REV_MAJ NVRAM_OFFSET(0x50)
#define COBT_CMOS_ROM_REV_MIN NVRAM_OFFSET(0x51)
#define COBT_CMOS_ROM_REV_REV NVRAM_OFFSET(0x52)
#define COBT_CMOS_BTO_CODE_0 NVRAM_OFFSET(0x53)
#define COBT_CMOS_BTO_CODE_1 NVRAM_OFFSET(0x54)
#define COBT_CMOS_BTO_CODE_2 NVRAM_OFFSET(0x55)
#define COBT_CMOS_BTO_CODE_3 NVRAM_OFFSET(0x56)
#define COBT_CMOS_BTO_IP_CSUM NVRAM_OFFSET(0x57)
#define COBT_CMOS_BTO_IP_0 NVRAM_OFFSET(0x58)
#define COBT_CMOS_BTO_IP_1 NVRAM_OFFSET(0x59)
#define COBT_CMOS_BTO_IP_2 NVRAM_OFFSET(0x5a)
#define COBT_CMOS_BTO_IP_3 NVRAM_OFFSET(0x5b)
#endif
/* COBALT_NVRAM_H */
include/linux/devfs_fs_kernel.h
View file @
33173395
...
@@ -95,7 +95,6 @@ extern void devfs_auto_unregister (devfs_handle_t master,devfs_handle_t slave);
...
@@ -95,7 +95,6 @@ extern void devfs_auto_unregister (devfs_handle_t master,devfs_handle_t slave);
extern
devfs_handle_t
devfs_get_unregister_slave
(
devfs_handle_t
master
);
extern
devfs_handle_t
devfs_get_unregister_slave
(
devfs_handle_t
master
);
extern
const
char
*
devfs_get_name
(
devfs_handle_t
de
,
unsigned
int
*
namelen
);
extern
const
char
*
devfs_get_name
(
devfs_handle_t
de
,
unsigned
int
*
namelen
);
extern
int
devfs_only
(
void
);
extern
int
devfs_only
(
void
);
extern
void
devfs_register_tape
(
devfs_handle_t
de
);
extern
void
devfs_register_tape
(
devfs_handle_t
de
);
extern
void
devfs_register_series
(
devfs_handle_t
dir
,
const
char
*
format
,
extern
void
devfs_register_series
(
devfs_handle_t
dir
,
const
char
*
format
,
unsigned
int
num_entries
,
unsigned
int
num_entries
,
...
@@ -238,7 +237,6 @@ static inline int devfs_only (void)
...
@@ -238,7 +237,6 @@ static inline int devfs_only (void)
{
{
return
0
;
return
0
;
}
}
static
inline
void
devfs_register_tape
(
devfs_handle_t
de
)
static
inline
void
devfs_register_tape
(
devfs_handle_t
de
)
{
{
return
;
return
;
...
...
include/linux/highmem.h
View file @
33173395
...
@@ -22,7 +22,7 @@ static inline unsigned int nr_free_highpages(void) { return 0; }
...
@@ -22,7 +22,7 @@ static inline unsigned int nr_free_highpages(void) { return 0; }
static
inline
void
*
kmap
(
struct
page
*
page
)
{
return
page_address
(
page
);
}
static
inline
void
*
kmap
(
struct
page
*
page
)
{
return
page_address
(
page
);
}
#define kunmap(page) do { } while (0)
#define kunmap(page) do {
(void) (page);
} while (0)
#define kmap_atomic(page,idx) kmap(page)
#define kmap_atomic(page,idx) kmap(page)
#define kunmap_atomic(page,idx) kunmap(page)
#define kunmap_atomic(page,idx) kunmap(page)
...
...
include/linux/nvram.h
View file @
33173395
...
@@ -4,14 +4,24 @@
...
@@ -4,14 +4,24 @@
#include <linux/ioctl.h>
#include <linux/ioctl.h>
/* /dev/nvram ioctls */
/* /dev/nvram ioctls */
#define NVRAM_INIT _IO('p', 0x40)
/* initialize NVRAM and set checksum */
#define NVRAM_INIT _IO('p', 0x40)
/* initialize NVRAM and set checksum */
#define NVRAM_SETCKS _IO('p', 0x41)
/* recalculate checksum */
#define NVRAM_SETCKS _IO('p', 0x41)
/* recalculate checksum */
/* for all current systems, this is where NVRAM starts */
#define NVRAM_FIRST_BYTE 14
/* all these functions expect an NVRAM offset, not an absolute */
#define NVRAM_OFFSET(x) ((x)-NVRAM_FIRST_BYTE)
#ifdef __KERNEL__
#ifdef __KERNEL__
extern
unsigned
char
nvram_read_byte
(
int
i
);
/* __foo is foo without grabbing the rtc_lock - get it yourself */
extern
void
nvram_write_byte
(
unsigned
char
c
,
int
i
);
extern
unsigned
char
__nvram_read_byte
(
int
i
);
extern
int
nvram_check_checksum
(
void
);
extern
unsigned
char
nvram_read_byte
(
int
i
);
extern
void
nvram_set_checksum
(
void
);
extern
void
__nvram_write_byte
(
unsigned
char
c
,
int
i
);
extern
void
nvram_write_byte
(
unsigned
char
c
,
int
i
);
extern
int
__nvram_check_checksum
(
void
);
extern
int
nvram_check_checksum
(
void
);
extern
void
__nvram_set_checksum
(
void
);
extern
void
nvram_set_checksum
(
void
);
#endif
#endif
#endif
/* _LINUX_NVRAM_H */
#endif
/* _LINUX_NVRAM_H */
include/linux/smp.h
View file @
33173395
...
@@ -87,9 +87,6 @@ int cpu_up(unsigned int cpu);
...
@@ -87,9 +87,6 @@ int cpu_up(unsigned int cpu);
#define smp_processor_id() 0
#define smp_processor_id() 0
#define hard_smp_processor_id() 0
#define hard_smp_processor_id() 0
#define smp_threads_ready 1
#define smp_threads_ready 1
#ifndef CONFIG_PREEMPT
#define kernel_lock()
#endif
#define smp_call_function(func,info,retry,wait) ({ 0; })
#define smp_call_function(func,info,retry,wait) ({ 0; })
static
inline
void
smp_send_reschedule
(
int
cpu
)
{
}
static
inline
void
smp_send_reschedule
(
int
cpu
)
{
}
static
inline
void
smp_send_reschedule_all
(
void
)
{
}
static
inline
void
smp_send_reschedule_all
(
void
)
{
}
...
...
kernel/sched.c
View file @
33173395
...
@@ -1039,6 +1039,7 @@ asmlinkage void preempt_schedule(void)
...
@@ -1039,6 +1039,7 @@ asmlinkage void preempt_schedule(void)
printk
(
"bad: schedule() with irqs disabled!
\n
"
);
printk
(
"bad: schedule() with irqs disabled!
\n
"
);
show_stack
(
NULL
);
show_stack
(
NULL
);
preempt_enable_no_resched
();
preempt_enable_no_resched
();
return
;
}
}
need_resched:
need_resched:
...
...
net/core/dev.c
View file @
33173395
...
@@ -1229,19 +1229,20 @@ static void sample_queue(unsigned long dummy)
...
@@ -1229,19 +1229,20 @@ static void sample_queue(unsigned long dummy)
int
netif_rx
(
struct
sk_buff
*
skb
)
int
netif_rx
(
struct
sk_buff
*
skb
)
{
{
int
this_cpu
=
smp_processor_id
()
;
int
this_cpu
;
struct
softnet_data
*
queue
;
struct
softnet_data
*
queue
;
unsigned
long
flags
;
unsigned
long
flags
;
if
(
!
skb
->
stamp
.
tv_sec
)
if
(
!
skb
->
stamp
.
tv_sec
)
do_gettimeofday
(
&
skb
->
stamp
);
do_gettimeofday
(
&
skb
->
stamp
);
/* The code is rearranged so that the path is the most
/*
short when CPU is congested, but is still operating.
* The code is rearranged so that the path is the most
* short when CPU is congested, but is still operating.
*/
*/
queue
=
&
softnet_data
[
this_cpu
];
local_irq_save
(
flags
);
local_irq_save
(
flags
);
this_cpu
=
smp_processor_id
();
queue
=
&
softnet_data
[
this_cpu
];
netdev_rx_stat
[
this_cpu
].
total
++
;
netdev_rx_stat
[
this_cpu
].
total
++
;
if
(
queue
->
input_pkt_queue
.
qlen
<=
netdev_max_backlog
)
{
if
(
queue
->
input_pkt_queue
.
qlen
<=
netdev_max_backlog
)
{
...
@@ -1252,10 +1253,10 @@ int netif_rx(struct sk_buff *skb)
...
@@ -1252,10 +1253,10 @@ int netif_rx(struct sk_buff *skb)
enqueue:
enqueue:
dev_hold
(
skb
->
dev
);
dev_hold
(
skb
->
dev
);
__skb_queue_tail
(
&
queue
->
input_pkt_queue
,
skb
);
__skb_queue_tail
(
&
queue
->
input_pkt_queue
,
skb
);
local_irq_restore
(
flags
);
#ifndef OFFLINE_SAMPLE
#ifndef OFFLINE_SAMPLE
get_sample_stats
(
this_cpu
);
get_sample_stats
(
this_cpu
);
#endif
#endif
local_irq_restore
(
flags
);
return
queue
->
cng_level
;
return
queue
->
cng_level
;
}
}
...
...
net/sunrpc/sched.c
View file @
33173395
...
@@ -1030,6 +1030,7 @@ rpciod(void *ptr)
...
@@ -1030,6 +1030,7 @@ rpciod(void *ptr)
wake_up
(
assassin
);
wake_up
(
assassin
);
dprintk
(
"RPC: rpciod exiting
\n
"
);
dprintk
(
"RPC: rpciod exiting
\n
"
);
unlock_kernel
();
MOD_DEC_USE_COUNT
;
MOD_DEC_USE_COUNT
;
return
0
;
return
0
;
}
}
...
...
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