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
4ab06c9a
Commit
4ab06c9a
authored
Aug 08, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://bk.arm.linux.org.uk/linux-2.6-rmk
into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents
c25c7712
392bfb26
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
87 additions
and
86 deletions
+87
-86
arch/arm/kernel/io.c
arch/arm/kernel/io.c
+8
-6
arch/arm/nwfpe/fpa11.h
arch/arm/nwfpe/fpa11.h
+1
-1
arch/arm/nwfpe/fpa11_cpdt.c
arch/arm/nwfpe/fpa11_cpdt.c
+24
-24
arch/arm/nwfpe/fpmodule.c
arch/arm/nwfpe/fpmodule.c
+1
-1
arch/arm/nwfpe/fpmodule.inl
arch/arm/nwfpe/fpmodule.inl
+11
-22
drivers/char/ds1620.c
drivers/char/ds1620.c
+16
-10
drivers/char/nwbutton.c
drivers/char/nwbutton.c
+1
-1
drivers/char/nwbutton.h
drivers/char/nwbutton.h
+0
-2
drivers/char/nwflash.c
drivers/char/nwflash.c
+11
-12
drivers/char/watchdog/wdt977.c
drivers/char/watchdog/wdt977.c
+14
-7
No files found.
arch/arm/kernel/io.c
View file @
4ab06c9a
...
...
@@ -7,12 +7,13 @@
* Copy data from IO memory space to "real" memory space.
* This needs to be optimized.
*/
void
_memcpy_fromio
(
void
*
to
,
unsigned
long
from
,
size_t
count
)
void
_memcpy_fromio
(
void
*
to
,
unsigned
long
from
,
size_t
count
)
{
unsigned
char
*
t
=
to
;
while
(
count
)
{
count
--
;
*
(
char
*
)
to
=
readb
(
from
);
((
char
*
)
to
)
++
;
*
t
=
readb
(
from
);
t
++
;
from
++
;
}
}
...
...
@@ -21,12 +22,13 @@ void _memcpy_fromio(void * to, unsigned long from, size_t count)
* Copy data from "real" memory space to IO memory space.
* This needs to be optimized.
*/
void
_memcpy_toio
(
unsigned
long
to
,
const
void
*
from
,
size_t
count
)
void
_memcpy_toio
(
unsigned
long
to
,
const
void
*
from
,
size_t
count
)
{
const
unsigned
char
*
f
=
from
;
while
(
count
)
{
count
--
;
writeb
(
*
(
char
*
)
from
,
to
);
((
char
*
)
from
)
++
;
writeb
(
*
f
,
to
);
f
++
;
to
++
;
}
}
...
...
arch/arm/nwfpe/fpa11.h
View file @
4ab06c9a
...
...
@@ -29,7 +29,7 @@
* stack+task struct. Use the same method as 'current' uses to
* reach them.
*/
register
unsigned
int
*
user_registers
asm
(
"sl"
);
register
unsigned
long
*
user_registers
asm
(
"sl"
);
#define GET_USERREG() (user_registers)
...
...
arch/arm/nwfpe/fpa11_cpdt.c
View file @
4ab06c9a
...
...
@@ -29,14 +29,14 @@
#include <asm/uaccess.h>
static
inline
void
loadSingle
(
const
unsigned
int
Fn
,
const
unsigned
int
*
pMem
)
static
inline
void
loadSingle
(
const
unsigned
int
Fn
,
const
unsigned
int
__user
*
pMem
)
{
FPA11
*
fpa11
=
GET_FPA11
();
fpa11
->
fType
[
Fn
]
=
typeSingle
;
get_user
(
fpa11
->
fpreg
[
Fn
].
fSingle
,
pMem
);
}
static
inline
void
loadDouble
(
const
unsigned
int
Fn
,
const
unsigned
int
*
pMem
)
static
inline
void
loadDouble
(
const
unsigned
int
Fn
,
const
unsigned
int
__user
*
pMem
)
{
FPA11
*
fpa11
=
GET_FPA11
();
unsigned
int
*
p
;
...
...
@@ -47,7 +47,7 @@ static inline void loadDouble(const unsigned int Fn, const unsigned int *pMem)
}
#ifdef CONFIG_FPE_NWFPE_XP
static
inline
void
loadExtended
(
const
unsigned
int
Fn
,
const
unsigned
int
*
pMem
)
static
inline
void
loadExtended
(
const
unsigned
int
Fn
,
const
unsigned
int
__user
*
pMem
)
{
FPA11
*
fpa11
=
GET_FPA11
();
unsigned
int
*
p
;
...
...
@@ -59,7 +59,7 @@ static inline void loadExtended(const unsigned int Fn, const unsigned int *pMem)
}
#endif
static
inline
void
loadMultiple
(
const
unsigned
int
Fn
,
const
unsigned
int
*
pMem
)
static
inline
void
loadMultiple
(
const
unsigned
int
Fn
,
const
unsigned
int
__user
*
pMem
)
{
FPA11
*
fpa11
=
GET_FPA11
();
register
unsigned
int
*
p
;
...
...
@@ -91,7 +91,7 @@ static inline void loadMultiple(const unsigned int Fn, const unsigned int *pMem)
}
}
static
inline
void
storeSingle
(
const
unsigned
int
Fn
,
unsigned
int
*
pMem
)
static
inline
void
storeSingle
(
const
unsigned
int
Fn
,
unsigned
int
__user
*
pMem
)
{
FPA11
*
fpa11
=
GET_FPA11
();
union
{
...
...
@@ -117,7 +117,7 @@ static inline void storeSingle(const unsigned int Fn, unsigned int *pMem)
put_user
(
val
.
i
[
0
],
pMem
);
}
static
inline
void
storeDouble
(
const
unsigned
int
Fn
,
unsigned
int
*
pMem
)
static
inline
void
storeDouble
(
const
unsigned
int
Fn
,
unsigned
int
__user
*
pMem
)
{
FPA11
*
fpa11
=
GET_FPA11
();
union
{
...
...
@@ -145,7 +145,7 @@ static inline void storeDouble(const unsigned int Fn, unsigned int *pMem)
}
#ifdef CONFIG_FPE_NWFPE_XP
static
inline
void
storeExtended
(
const
unsigned
int
Fn
,
unsigned
int
*
pMem
)
static
inline
void
storeExtended
(
const
unsigned
int
Fn
,
unsigned
int
__user
*
pMem
)
{
FPA11
*
fpa11
=
GET_FPA11
();
union
{
...
...
@@ -172,7 +172,7 @@ static inline void storeExtended(const unsigned int Fn, unsigned int *pMem)
}
#endif
static
inline
void
storeMultiple
(
const
unsigned
int
Fn
,
unsigned
int
*
pMem
)
static
inline
void
storeMultiple
(
const
unsigned
int
Fn
,
unsigned
int
__user
*
pMem
)
{
FPA11
*
fpa11
=
GET_FPA11
();
register
unsigned
int
nType
,
*
p
;
...
...
@@ -204,10 +204,10 @@ static inline void storeMultiple(const unsigned int Fn, unsigned int *pMem)
unsigned
int
PerformLDF
(
const
unsigned
int
opcode
)
{
unsigned
int
*
pBase
,
*
pAddress
,
*
pFinal
,
nRc
=
1
,
write_back
=
WRITE_BACK
(
opcode
);
unsigned
int
__user
*
pBase
,
*
pAddress
,
*
pFinal
;
unsigned
int
nRc
=
1
,
write_back
=
WRITE_BACK
(
opcode
);
pBase
=
(
unsigned
int
*
)
readRegister
(
getRn
(
opcode
));
pBase
=
(
unsigned
int
__user
*
)
readRegister
(
getRn
(
opcode
));
if
(
REG_PC
==
getRn
(
opcode
))
{
pBase
+=
2
;
write_back
=
0
;
...
...
@@ -241,18 +241,18 @@ unsigned int PerformLDF(const unsigned int opcode)
}
if
(
write_back
)
writeRegister
(
getRn
(
opcode
),
(
unsigned
int
)
pFinal
);
writeRegister
(
getRn
(
opcode
),
(
unsigned
long
)
pFinal
);
return
nRc
;
}
unsigned
int
PerformSTF
(
const
unsigned
int
opcode
)
{
unsigned
int
*
pBase
,
*
pAddress
,
*
pFinal
,
nRc
=
1
,
write_back
=
WRITE_BACK
(
opcode
);
unsigned
int
__user
*
pBase
,
*
pAddress
,
*
pFinal
;
unsigned
int
nRc
=
1
,
write_back
=
WRITE_BACK
(
opcode
);
SetRoundingMode
(
ROUND_TO_NEAREST
);
pBase
=
(
unsigned
int
*
)
readRegister
(
getRn
(
opcode
));
pBase
=
(
unsigned
int
__user
*
)
readRegister
(
getRn
(
opcode
));
if
(
REG_PC
==
getRn
(
opcode
))
{
pBase
+=
2
;
write_back
=
0
;
...
...
@@ -286,16 +286,16 @@ unsigned int PerformSTF(const unsigned int opcode)
}
if
(
write_back
)
writeRegister
(
getRn
(
opcode
),
(
unsigned
int
)
pFinal
);
writeRegister
(
getRn
(
opcode
),
(
unsigned
long
)
pFinal
);
return
nRc
;
}
unsigned
int
PerformLFM
(
const
unsigned
int
opcode
)
{
unsigned
int
i
,
Fd
,
*
pBase
,
*
pAddress
,
*
pFinal
,
write_back
=
WRITE_BACK
(
opcode
);
unsigned
int
__user
*
pBase
,
*
pAddress
,
*
pFinal
;
unsigned
int
i
,
Fd
,
write_back
=
WRITE_BACK
(
opcode
);
pBase
=
(
unsigned
int
*
)
readRegister
(
getRn
(
opcode
));
pBase
=
(
unsigned
int
__user
*
)
readRegister
(
getRn
(
opcode
));
if
(
REG_PC
==
getRn
(
opcode
))
{
pBase
+=
2
;
write_back
=
0
;
...
...
@@ -322,16 +322,16 @@ unsigned int PerformLFM(const unsigned int opcode)
}
if
(
write_back
)
writeRegister
(
getRn
(
opcode
),
(
unsigned
int
)
pFinal
);
writeRegister
(
getRn
(
opcode
),
(
unsigned
long
)
pFinal
);
return
1
;
}
unsigned
int
PerformSFM
(
const
unsigned
int
opcode
)
{
unsigned
int
i
,
Fd
,
*
pBase
,
*
pAddress
,
*
pFinal
,
write_back
=
WRITE_BACK
(
opcode
);
unsigned
int
__user
*
pBase
,
*
pAddress
,
*
pFinal
;
unsigned
int
i
,
Fd
,
write_back
=
WRITE_BACK
(
opcode
);
pBase
=
(
unsigned
int
*
)
readRegister
(
getRn
(
opcode
));
pBase
=
(
unsigned
int
__user
*
)
readRegister
(
getRn
(
opcode
));
if
(
REG_PC
==
getRn
(
opcode
))
{
pBase
+=
2
;
write_back
=
0
;
...
...
@@ -358,7 +358,7 @@ unsigned int PerformSFM(const unsigned int opcode)
}
if
(
write_back
)
writeRegister
(
getRn
(
opcode
),
(
unsigned
int
)
pFinal
);
writeRegister
(
getRn
(
opcode
),
(
unsigned
long
)
pFinal
);
return
1
;
}
...
...
arch/arm/nwfpe/fpmodule.c
View file @
4ab06c9a
...
...
@@ -131,7 +131,7 @@ void float_raise(signed char flags)
#ifdef CONFIG_DEBUG_USER
printk
(
KERN_DEBUG
"NWFPE: %s[%d] takes exception %08x at %p from %08x
\n
"
,
"NWFPE: %s[%d] takes exception %08x at %p from %08
l
x
\n
"
,
current
->
comm
,
current
->
pid
,
flags
,
__builtin_return_address
(
0
),
GET_USERREG
()[
15
]);
#endif
...
...
arch/arm/nwfpe/fpmodule.inl
View file @
4ab06c9a
...
...
@@ -19,8 +19,7 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
extern __inline__
unsigned int readRegister(const unsigned int nReg)
static inline unsigned long readRegister(const unsigned int nReg)
{
/* Note: The CPU thinks it has dealt with the current instruction.
As a result the program counter has been advanced to the next
...
...
@@ -29,34 +28,31 @@ unsigned int readRegister(const unsigned int nReg)
for this in this routine. LDF/STF instructions with Rn = PC
depend on the PC being correct, as they use PC+8 in their
address calculations. */
unsigned
int
*userRegisters = GET_USERREG();
unsigned
long
*userRegisters = GET_USERREG();
unsigned int val = userRegisters[nReg];
if (REG_PC == nReg)
val -= 4;
return val;
}
extern __inline__
void writeRegister(const unsigned int nReg, const unsigned int
val)
static inline void
writeRegister(const unsigned int nReg, const unsigned long
val)
{
unsigned
int
*userRegisters = GET_USERREG();
unsigned
long
*userRegisters = GET_USERREG();
userRegisters[nReg] = val;
}
extern __inline__
unsigned int readCPSR(void)
static inline unsigned long readCPSR(void)
{
return (readRegister(REG_CPSR));
}
extern __inline__
void writeCPSR(const unsigned int val)
static inline void writeCPSR(const unsigned long val)
{
writeRegister(REG_CPSR, val);
}
extern __inline__
unsigned int readConditionCodes(void)
static inline unsigned long readConditionCodes(void)
{
#ifdef __FPEM_TEST__
return (0);
...
...
@@ -65,11 +61,10 @@ unsigned int readConditionCodes(void)
#endif
}
extern __inline__
void writeConditionCodes(const unsigned int val)
static inline void writeConditionCodes(const unsigned long val)
{
unsigned
int
*userRegisters = GET_USERREG();
unsigned
int
rval;
unsigned
long
*userRegisters = GET_USERREG();
unsigned
long
rval;
/*
* Operate directly on userRegisters since
* the CPSR may be the PC register itself.
...
...
@@ -77,9 +72,3 @@ void writeConditionCodes(const unsigned int val)
rval = userRegisters[REG_CPSR] & ~CC_MASK;
userRegisters[REG_CPSR] = rval | (val & CC_MASK);
}
extern __inline__
unsigned int readMemoryInt(unsigned int *pMem)
{
return *pMem;
}
drivers/char/ds1620.c
View file @
4ab06c9a
...
...
@@ -213,7 +213,7 @@ static void ds1620_read_state(struct therm *therm)
}
static
ssize_t
ds1620_read
(
struct
file
*
file
,
char
*
buf
,
size_t
count
,
loff_t
*
ptr
)
ds1620_read
(
struct
file
*
file
,
char
__user
*
buf
,
size_t
count
,
loff_t
*
ptr
)
{
signed
int
cur_temp
;
signed
char
cur_temp_degF
;
...
...
@@ -233,8 +233,14 @@ static int
ds1620_ioctl
(
struct
inode
*
inode
,
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
struct
therm
therm
;
union
{
struct
therm
__user
*
therm
;
int
__user
*
i
;
}
uarg
;
int
i
;
uarg
.
i
=
(
int
__user
*
)
arg
;
switch
(
cmd
)
{
case
CMD_SET_THERMOSTATE
:
case
CMD_SET_THERMOSTATE2
:
...
...
@@ -242,11 +248,11 @@ ds1620_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned
return
-
EPERM
;
if
(
cmd
==
CMD_SET_THERMOSTATE
)
{
if
(
get_user
(
therm
.
hi
,
(
int
*
)
arg
))
if
(
get_user
(
therm
.
hi
,
uarg
.
i
))
return
-
EFAULT
;
therm
.
lo
=
therm
.
hi
-
3
;
}
else
{
if
(
copy_from_user
(
&
therm
,
(
void
*
)
arg
,
sizeof
(
therm
)))
if
(
copy_from_user
(
&
therm
,
uarg
.
therm
,
sizeof
(
therm
)))
return
-
EFAULT
;
}
...
...
@@ -264,10 +270,10 @@ ds1620_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned
therm
.
hi
>>=
1
;
if
(
cmd
==
CMD_GET_THERMOSTATE
)
{
if
(
put_user
(
therm
.
hi
,
(
int
*
)
arg
))
if
(
put_user
(
therm
.
hi
,
uarg
.
i
))
return
-
EFAULT
;
}
else
{
if
(
copy_to_user
(
(
void
*
)
arg
,
&
therm
,
sizeof
(
therm
)))
if
(
copy_to_user
(
uarg
.
therm
,
&
therm
,
sizeof
(
therm
)))
return
-
EFAULT
;
}
break
;
...
...
@@ -279,23 +285,23 @@ ds1620_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned
if
(
cmd
==
CMD_GET_TEMPERATURE
)
i
>>=
1
;
return
put_user
(
i
,
(
int
*
)
arg
)
?
-
EFAULT
:
0
;
return
put_user
(
i
,
uarg
.
i
)
?
-
EFAULT
:
0
;
case
CMD_GET_STATUS
:
i
=
ds1620_in
(
THERM_READ_CONFIG
,
8
)
&
0xe3
;
return
put_user
(
i
,
(
int
*
)
arg
)
?
-
EFAULT
:
0
;
return
put_user
(
i
,
uarg
.
i
)
?
-
EFAULT
:
0
;
case
CMD_GET_FAN
:
i
=
netwinder_get_fan
();
return
put_user
(
i
,
(
int
*
)
arg
)
?
-
EFAULT
:
0
;
return
put_user
(
i
,
uarg
.
i
)
?
-
EFAULT
:
0
;
case
CMD_SET_FAN
:
if
(
!
capable
(
CAP_SYS_ADMIN
))
return
-
EPERM
;
if
(
get_user
(
i
,
(
int
*
)
arg
))
if
(
get_user
(
i
,
uarg
.
i
))
return
-
EFAULT
;
netwinder_set_fan
(
i
);
...
...
@@ -377,7 +383,7 @@ static int __init ds1620_init(void)
return
ret
;
#ifdef THERM_USE_PROC
proc_therm_ds1620
=
create_proc_entry
(
"therm"
,
0
,
0
);
proc_therm_ds1620
=
create_proc_entry
(
"therm"
,
0
,
NULL
);
if
(
proc_therm_ds1620
)
proc_therm_ds1620
->
read_proc
=
proc_therm_ds1620_read
;
else
...
...
drivers/char/nwbutton.c
View file @
4ab06c9a
...
...
@@ -170,7 +170,7 @@ static irqreturn_t button_handler (int irq, void *dev_id, struct pt_regs *regs)
* device at any one time.
*/
static
int
button_read
(
struct
file
*
filp
,
char
*
buffer
,
static
int
button_read
(
struct
file
*
filp
,
char
__user
*
buffer
,
size_t
count
,
loff_t
*
ppos
)
{
interruptible_sleep_on
(
&
button_wait_queue
);
...
...
drivers/char/nwbutton.h
View file @
4ab06c9a
...
...
@@ -26,8 +26,6 @@ struct button_callback {
static
void
button_sequence_finished
(
unsigned
long
parameters
);
static
irqreturn_t
button_handler
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
);
static
int
button_read
(
struct
file
*
filp
,
char
*
buffer
,
size_t
count
,
loff_t
*
ppos
);
int
button_init
(
void
);
int
button_add_callback
(
void
(
*
callback
)
(
void
),
int
count
);
int
button_del_callback
(
void
(
*
callback
)
(
void
));
...
...
drivers/char/nwflash.c
View file @
4ab06c9a
...
...
@@ -43,11 +43,7 @@
static
void
kick_open
(
void
);
static
int
get_flash_id
(
void
);
static
int
erase_block
(
int
nBlock
);
static
int
write_block
(
unsigned
long
p
,
const
char
*
buf
,
int
count
);
static
int
flash_ioctl
(
struct
inode
*
inodep
,
struct
file
*
filep
,
unsigned
int
cmd
,
unsigned
long
arg
);
static
ssize_t
flash_read
(
struct
file
*
file
,
char
*
buf
,
size_t
count
,
loff_t
*
ppos
);
static
ssize_t
flash_write
(
struct
file
*
file
,
const
char
*
buf
,
size_t
count
,
loff_t
*
ppos
);
static
loff_t
flash_llseek
(
struct
file
*
file
,
loff_t
offset
,
int
orig
);
static
int
write_block
(
unsigned
long
p
,
const
char
__user
*
buf
,
int
count
);
#define KFLASH_SIZE 1024*1024 //1 Meg
#define KFLASH_SIZE4 4*1024*1024 //4 Meg
...
...
@@ -132,15 +128,16 @@ static int flash_ioctl(struct inode *inodep, struct file *filep, unsigned int cm
return
0
;
}
static
ssize_t
flash_read
(
struct
file
*
file
,
char
*
buf
,
size_t
size
,
loff_t
*
ppos
)
static
ssize_t
flash_read
(
struct
file
*
file
,
char
__user
*
buf
,
size_t
size
,
loff_t
*
ppos
)
{
unsigned
long
p
=
*
ppos
;
unsigned
int
count
=
size
;
int
ret
=
0
;
if
(
flashdebug
)
printk
(
KERN_DEBUG
"flash_read: flash_read: offset=0x%lX,
buffer=%p, count=0x%X.
\n
"
,
p
,
buf
,
count
);
printk
(
KERN_DEBUG
"flash_read: flash_read: offset=0x%lX,
"
"buffer=%p, count=0x%X.
\n
"
,
p
,
buf
,
count
);
if
(
count
)
ret
=
-
ENXIO
;
...
...
@@ -166,7 +163,8 @@ static ssize_t flash_read(struct file *file, char *buf, size_t size, loff_t * pp
return
ret
;
}
static
ssize_t
flash_write
(
struct
file
*
file
,
const
char
*
buf
,
size_t
size
,
loff_t
*
ppos
)
static
ssize_t
flash_write
(
struct
file
*
file
,
const
char
__user
*
buf
,
size_t
size
,
loff_t
*
ppos
)
{
unsigned
long
p
=
*
ppos
;
unsigned
int
count
=
size
;
...
...
@@ -244,8 +242,9 @@ static ssize_t flash_write(struct file *file, const char *buf, size_t size, loff
break
;
}
if
(
flashdebug
)
printk
(
KERN_DEBUG
"flash_write: writing offset %lX, from buf "
"%p, bytes left %X.
\n
"
,
p
,
buf
,
count
-
written
);
printk
(
KERN_DEBUG
"flash_write: writing offset %lX, "
"from buf %p, bytes left %X.
\n
"
,
p
,
buf
,
count
-
written
);
/*
* write_block will limit write to space left in this block
...
...
@@ -460,7 +459,7 @@ static int erase_block(int nBlock)
/*
* write_block will limit number of bytes written to the space in this block
*/
static
int
write_block
(
unsigned
long
p
,
const
char
*
buf
,
int
count
)
static
int
write_block
(
unsigned
long
p
,
const
char
__user
*
buf
,
int
count
)
{
volatile
unsigned
int
c1
;
volatile
unsigned
int
c2
;
...
...
drivers/char/watchdog/wdt977.c
View file @
4ab06c9a
...
...
@@ -273,7 +273,8 @@ static int wdt977_release(struct inode *inode, struct file *file)
* write of data will do, as we we don't define content meaning.
*/
static
ssize_t
wdt977_write
(
struct
file
*
file
,
const
char
*
buf
,
size_t
count
,
loff_t
*
ppos
)
static
ssize_t
wdt977_write
(
struct
file
*
file
,
const
char
__user
*
buf
,
size_t
count
,
loff_t
*
ppos
)
{
if
(
count
)
{
if
(
!
nowayout
)
{
...
...
@@ -321,6 +322,12 @@ static int wdt977_ioctl(struct inode *inode, struct file *file,
int
status
;
int
new_options
,
retval
=
-
EINVAL
;
int
new_timeout
;
union
{
struct
watchdog_info
__user
*
ident
;
int
__user
*
i
;
}
uarg
;
uarg
.
i
=
(
int
__user
*
)
arg
;
switch
(
cmd
)
{
...
...
@@ -328,22 +335,22 @@ static int wdt977_ioctl(struct inode *inode, struct file *file,
return
-
ENOIOCTLCMD
;
case
WDIOC_GETSUPPORT
:
return
copy_to_user
(
(
struct
watchdog_info
*
)
arg
,
&
ident
,
return
copy_to_user
(
uarg
.
ident
,
&
ident
,
sizeof
(
ident
))
?
-
EFAULT
:
0
;
case
WDIOC_GETSTATUS
:
wdt977_get_status
(
&
status
);
return
put_user
(
status
,
(
int
*
)
arg
);
return
put_user
(
status
,
uarg
.
i
);
case
WDIOC_GETBOOTSTATUS
:
return
put_user
(
0
,
(
int
*
)
arg
);
return
put_user
(
0
,
uarg
.
i
);
case
WDIOC_KEEPALIVE
:
wdt977_keepalive
();
return
0
;
case
WDIOC_SETOPTIONS
:
if
(
get_user
(
new_options
,
(
int
*
)
arg
))
if
(
get_user
(
new_options
,
uarg
.
i
))
return
-
EFAULT
;
if
(
new_options
&
WDIOS_DISABLECARD
)
{
...
...
@@ -359,7 +366,7 @@ static int wdt977_ioctl(struct inode *inode, struct file *file,
return
retval
;
case
WDIOC_SETTIMEOUT
:
if
(
get_user
(
new_timeout
,
(
int
*
)
arg
))
if
(
get_user
(
new_timeout
,
uarg
.
i
))
return
-
EFAULT
;
if
(
wdt977_set_timeout
(
new_timeout
))
...
...
@@ -369,7 +376,7 @@ static int wdt977_ioctl(struct inode *inode, struct file *file,
/* Fall */
case
WDIOC_GETTIMEOUT
:
return
put_user
(
timeout
,
(
int
*
)
arg
);
return
put_user
(
timeout
,
uarg
.
i
);
}
}
...
...
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