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
Kirill Smelkov
linux
Commits
9add6ead
Commit
9add6ead
authored
Apr 15, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://bk.linux1394.org/ieee1394-2.6
into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents
b0e15db0
3caef8d2
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
268 additions
and
61 deletions
+268
-61
arch/i386/kernel/nmi.c
arch/i386/kernel/nmi.c
+7
-0
arch/ppc64/kernel/entry.S
arch/ppc64/kernel/entry.S
+15
-2
arch/ppc64/kernel/head.S
arch/ppc64/kernel/head.S
+5
-0
arch/ppc64/kernel/prom.c
arch/ppc64/kernel/prom.c
+5
-0
arch/ppc64/kernel/rtas.c
arch/ppc64/kernel/rtas.c
+51
-28
drivers/base/Kconfig
drivers/base/Kconfig
+8
-8
drivers/base/class.c
drivers/base/class.c
+2
-4
drivers/char/dsp56k.c
drivers/char/dsp56k.c
+25
-2
drivers/char/ftape/zftape/zftape-init.c
drivers/char/ftape/zftape/zftape-init.c
+17
-0
drivers/char/istallion.c
drivers/char/istallion.c
+10
-1
drivers/char/stallion.c
drivers/char/stallion.c
+9
-1
drivers/char/tipar.c
drivers/char/tipar.c
+11
-5
drivers/char/tpqic02.c
drivers/char/tpqic02.c
+22
-0
drivers/char/vc_screen.c
drivers/char/vc_screen.c
+10
-0
drivers/char/vt.c
drivers/char/vt.c
+2
-1
drivers/isdn/capi/capi.c
drivers/isdn/capi/capi.c
+16
-1
drivers/video/fbmem.c
drivers/video/fbmem.c
+19
-0
fs/coda/psdev.c
fs/coda/psdev.c
+31
-5
lib/kobject.c
lib/kobject.c
+3
-3
No files found.
arch/i386/kernel/nmi.c
View file @
9add6ead
...
...
@@ -458,6 +458,13 @@ void nmi_watchdog_tick (struct pt_regs * regs)
wrmsr
(
MSR_P4_IQ_CCCR0
,
P4_NMI_IQ_CCCR0
,
0
);
apic_write
(
APIC_LVTPC
,
APIC_DM_NMI
);
}
else
if
(
nmi_perfctr_msr
==
MSR_P6_PERFCTR0
)
{
/* Only P6 based Pentium M need to re-unmask
* the apic vector but it doesn't hurt
* other P6 variant */
apic_write
(
APIC_LVTPC
,
apic_read
(
APIC_LVTPC
)
&
~
APIC_LVT_MASKED
);
}
wrmsr
(
nmi_perfctr_msr
,
-
(
cpu_khz
/
nmi_hz
*
1000
),
-
1
);
}
}
...
...
arch/ppc64/kernel/entry.S
View file @
9add6ead
...
...
@@ -487,7 +487,7 @@ _GLOBAL(enter_rtas)
mflr
r0
std
r0
,
16
(
r1
)
stdu
r1
,-
RTAS_FRAME_SIZE
(
r1
)
/*
Save
SP
and
create
stack
space
.
*/
/
*
Because
RTAS
is
running
in
32
b
mode
,
it
clobbers
the
high
order
half
*
of
all
registers
that
it
saves
.
We
therefore
save
those
registers
*
RTAS
might
touch
to
the
stack
.
(
r0
,
r3
-
r13
are
caller
saved
)
...
...
@@ -512,12 +512,25 @@ _GLOBAL(enter_rtas)
mfsrr1
r10
std
r10
,
_SRR1
(
r1
)
/
*
There
is
no
way
it
is
acceptable
to
get
here
with
interrupts
enabled
,
*
check
it
with
the
asm
equivalent
of
WARN_ON
*/
mfmsr
r6
andi
.
r0
,
r6
,
MSR_EE
1
:
tdnei
r0
,
0
.
section
__bug_table
,"
a
"
.
llong
1
b
,
__LINE__
+
0x1000000
,
1
f
,
2
f
.
previous
.
section
.
rodata
,"
a
"
1
:
.
asciz
__FILE__
2
:
.
asciz
"enter_rtas"
.
previous
/
*
Unfortunately
,
the
stack
pointer
and
the
MSR
are
also
clobbered
,
*
so
they
are
saved
in
the
PACA
which
allows
us
to
restore
*
our
original
state
after
RTAS
returns
.
*/
std
r1
,
PACAR1
(
r13
)
mfmsr
r6
std
r6
,
PACASAVEDMSR
(
r13
)
/
*
Setup
our
real
return
addr
*/
...
...
arch/ppc64/kernel/head.S
View file @
9add6ead
...
...
@@ -93,8 +93,13 @@
_stext
:
#ifdef CONFIG_PPC_PSERIES
_STATIC
(
__start
)
/
*
NOP
this
out
unconditionally
*/
BEGIN_FTR_SECTION
b
.
__start_initialization_pSeries
END_FTR_SECTION
(
0
,
1)
#endif
/
*
Catch
branch
to
0
in
real
mode
*/
trap
#ifdef CONFIG_PPC_ISERIES
/
*
*
At
offset
0x20
,
there
is
a
pointer
to
iSeries
LPAR
data
.
...
...
arch/ppc64/kernel/prom.c
View file @
9add6ead
...
...
@@ -1926,6 +1926,11 @@ finish_node(struct device_node *np, unsigned long mem_start,
np
->
name
=
get_property
(
np
,
"name"
,
0
);
np
->
type
=
get_property
(
np
,
"device_type"
,
0
);
if
(
!
np
->
name
)
np
->
name
=
"<NULL>"
;
if
(
!
np
->
type
)
np
->
type
=
"<NULL>"
;
/* get the device addresses and interrupts */
if
(
ifunc
!=
NULL
)
mem_start
=
ifunc
(
np
,
mem_start
,
naddrc
,
nsizec
);
...
...
arch/ppc64/kernel/rtas.c
View file @
9add6ead
...
...
@@ -68,15 +68,20 @@ char rtas_data_buf[RTAS_DATA_BUF_SIZE]__page_aligned;
void
call_rtas_display_status
(
char
c
)
{
struct
rtas_args
*
rtas
=
&
(
get_paca
()
->
xRtas
);
struct
rtas_args
*
args
=
&
(
get_paca
()
->
xRtas
);
unsigned
long
s
;
spin_lock_irqsave
(
&
rtas
.
lock
,
s
);
rta
s
->
token
=
10
;
rta
s
->
nargs
=
1
;
rta
s
->
nret
=
1
;
rtas
->
rets
=
(
rtas_arg_t
*
)
&
(
rta
s
->
args
[
1
]);
rta
s
->
args
[
0
]
=
(
int
)
c
;
arg
s
->
token
=
10
;
arg
s
->
nargs
=
1
;
arg
s
->
nret
=
1
;
args
->
rets
=
(
rtas_arg_t
*
)
&
(
arg
s
->
args
[
1
]);
arg
s
->
args
[
0
]
=
(
int
)
c
;
enter_rtas
((
void
*
)
__pa
((
unsigned
long
)
rtas
));
enter_rtas
((
void
*
)
__pa
((
unsigned
long
)
args
));
spin_unlock_irqrestore
(
&
rtas
.
lock
,
s
);
}
int
...
...
@@ -91,8 +96,9 @@ rtas_token(const char *service)
return
tokp
?
*
tokp
:
RTAS_UNKNOWN_SERVICE
;
}
void
log_rtas_error
(
struct
rtas_args
*
rtas_args
)
static
int
__log_rtas_error
(
struct
rtas_args
*
rtas_args
)
{
struct
rtas_args
err_args
,
temp_args
;
...
...
@@ -111,13 +117,24 @@ log_rtas_error(struct rtas_args *rtas_args)
PPCDBG
(
PPCDBG_RTAS
,
"
\t
entering rtas with 0x%lx
\n
"
,
(
void
*
)
__pa
((
unsigned
long
)
&
err_args
));
enter_rtas
((
void
*
)
__pa
((
unsigned
long
)
&
get_paca
()
->
xRtas
));
PPCDBG
(
PPCDBG_RTAS
,
"
\t
returned from rtas ...
\n
"
);
PPCDBG
(
PPCDBG_RTAS
,
"
\t
returned from rtas ...
\n
"
);
err_args
=
get_paca
()
->
xRtas
;
get_paca
()
->
xRtas
=
temp_args
;
if
(
err_args
.
rets
[
0
]
==
0
)
return
err_args
.
rets
[
0
];
}
void
log_rtas_error
(
struct
rtas_args
*
rtas_args
)
{
unsigned
long
s
;
int
rc
;
spin_lock_irqsave
(
&
rtas
.
lock
,
s
);
rc
=
__log_rtas_error
(
rtas_args
);
spin_unlock_irqrestore
(
&
rtas
.
lock
,
s
);
if
(
rc
==
0
)
log_error
(
rtas_err_buf
,
ERR_TYPE_RTAS_LOG
,
0
);
}
...
...
@@ -126,9 +143,10 @@ rtas_call(int token, int nargs, int nret,
unsigned
long
*
outputs
,
...)
{
va_list
list
;
int
i
;
int
i
,
logit
=
0
;
unsigned
long
s
;
struct
rtas_args
*
rtas_args
=
&
(
get_paca
()
->
xRtas
);
long
ret
;
PPCDBG
(
PPCDBG_RTAS
,
"Entering rtas_call
\n
"
);
PPCDBG
(
PPCDBG_RTAS
,
"
\t
token = 0x%x
\n
"
,
token
);
...
...
@@ -138,6 +156,9 @@ rtas_call(int token, int nargs, int nret,
if
(
token
==
RTAS_UNKNOWN_SERVICE
)
return
-
1
;
/* Gotta do something different here, use global lock for now... */
spin_lock_irqsave
(
&
rtas
.
lock
,
s
);
rtas_args
->
token
=
token
;
rtas_args
->
nargs
=
nargs
;
rtas_args
->
nret
=
nret
;
...
...
@@ -150,26 +171,16 @@ rtas_call(int token, int nargs, int nret,
va_end
(
list
);
for
(
i
=
0
;
i
<
nret
;
++
i
)
rtas_args
->
rets
[
i
]
=
0
;
rtas_args
->
rets
[
i
]
=
0
;
#if 0 /* Gotta do something different here, use global lock for now... */
spin_lock_irqsave(&rtas_args->lock, s);
#else
spin_lock_irqsave
(
&
rtas
.
lock
,
s
);
#endif
PPCDBG
(
PPCDBG_RTAS
,
"
\t
entering rtas with 0x%lx
\n
"
,
(
void
*
)
__pa
((
unsigned
long
)
rtas_args
));
enter_rtas
((
void
*
)
__pa
((
unsigned
long
)
rtas_args
));
PPCDBG
(
PPCDBG_RTAS
,
"
\t
returned from rtas ...
\n
"
);
if
(
rtas_args
->
rets
[
0
]
==
-
1
)
log
_rtas_error
(
rtas_args
);
log
it
=
(
__log_rtas_error
(
rtas_args
)
==
0
);
#if 0 /* Gotta do something different here, use global lock for now... */
spin_unlock_irqrestore(&rtas_args->lock, s);
#else
spin_unlock_irqrestore
(
&
rtas
.
lock
,
s
);
#endif
ifppcdebug
(
PPCDBG_RTAS
)
{
for
(
i
=
0
;
i
<
nret
;
i
++
)
udbg_printf
(
"
\t
nret[%d] = 0x%lx
\n
"
,
i
,
(
ulong
)
rtas_args
->
rets
[
i
]);
...
...
@@ -178,7 +189,15 @@ rtas_call(int token, int nargs, int nret,
if
(
nret
>
1
&&
outputs
!=
NULL
)
for
(
i
=
0
;
i
<
nret
-
1
;
++
i
)
outputs
[
i
]
=
rtas_args
->
rets
[
i
+
1
];
return
(
ulong
)((
nret
>
0
)
?
rtas_args
->
rets
[
0
]
:
0
);
ret
=
(
ulong
)((
nret
>
0
)
?
rtas_args
->
rets
[
0
]
:
0
);
/* Gotta do something different here, use global lock for now... */
spin_unlock_irqrestore
(
&
rtas
.
lock
,
s
);
if
(
logit
)
log_error
(
rtas_err_buf
,
ERR_TYPE_RTAS_LOG
,
0
);
return
ret
;
}
/* Given an RTAS status code of 990n compute the hinted delay of 10^n
...
...
@@ -464,12 +483,12 @@ asmlinkage int ppc_rtas(struct rtas_args __user *uargs)
enter_rtas
((
void
*
)
__pa
((
unsigned
long
)
&
get_paca
()
->
xRtas
));
args
=
get_paca
()
->
xRtas
;
spin_unlock_irqrestore
(
&
rtas
.
lock
,
flags
);
args
.
rets
=
(
rtas_arg_t
*
)
&
(
args
.
args
[
nargs
]);
if
(
args
.
rets
[
0
]
==
-
1
)
log_rtas_error
(
&
args
);
spin_unlock_irqrestore
(
&
rtas
.
lock
,
flags
);
/* Copy out args. */
if
(
copy_to_user
(
uargs
->
args
+
nargs
,
args
.
args
+
nargs
,
...
...
@@ -485,7 +504,9 @@ asmlinkage int ppc_rtas(struct rtas_args __user *uargs)
void
rtas_stop_self
(
void
)
{
struct
rtas_args
*
rtas_args
=
&
(
get_paca
()
->
xRtas
);
unsigned
long
s
;
spin_lock_irqsave
(
&
rtas
.
lock
,
s
);
rtas_args
->
token
=
rtas_token
(
"stop-self"
);
BUG_ON
(
rtas_args
->
token
==
RTAS_UNKNOWN_SERVICE
);
rtas_args
->
nargs
=
0
;
...
...
@@ -495,6 +516,8 @@ void rtas_stop_self(void)
printk
(
"%u %u Ready to die...
\n
"
,
smp_processor_id
(),
hard_smp_processor_id
());
enter_rtas
((
void
*
)
__pa
(
rtas_args
));
spin_unlock_irqrestore
(
&
rtas
.
lock
,
s
);
panic
(
"Alas, I survived.
\n
"
);
}
#endif
/* CONFIG_HOTPLUG_CPU */
...
...
drivers/base/Kconfig
View file @
9add6ead
...
...
@@ -9,14 +9,14 @@ config FW_LOADER
the kernel tree does.
config DEBUG_DRIVER
bool "Driver Core verbose debug messages"
depends on DEBUG_KERNEL
help
Say Y here if you want the Driver core to produce a bunch of
debug messages to the system log. Select this if you are having a
problem with the driver core and want to see more of what is
going on.
bool "Driver Core verbose debug messages"
depends on DEBUG_KERNEL
help
Say Y here if you want the Driver core to produce a bunch of
debug messages to the system log. Select this if you are having a
problem with the driver core and want to see more of what is
going on.
If you are unsure about this, say N here.
If you are unsure about this, say N here.
endmenu
drivers/base/class.c
View file @
9add6ead
...
...
@@ -155,8 +155,7 @@ static int class_device_dev_link(struct class_device * class_dev)
static
void
class_device_dev_unlink
(
struct
class_device
*
class_dev
)
{
if
(
class_dev
->
dev
)
sysfs_remove_link
(
&
class_dev
->
kobj
,
"device"
);
sysfs_remove_link
(
&
class_dev
->
kobj
,
"device"
);
}
static
int
class_device_driver_link
(
struct
class_device
*
class_dev
)
...
...
@@ -169,8 +168,7 @@ static int class_device_driver_link(struct class_device * class_dev)
static
void
class_device_driver_unlink
(
struct
class_device
*
class_dev
)
{
if
((
class_dev
->
dev
)
&&
(
class_dev
->
dev
->
driver
))
sysfs_remove_link
(
&
class_dev
->
kobj
,
"driver"
);
sysfs_remove_link
(
&
class_dev
->
kobj
,
"driver"
);
}
...
...
drivers/char/dsp56k.c
View file @
9add6ead
...
...
@@ -35,6 +35,7 @@
#include <linux/init.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/smp_lock.h>
#include <linux/device.h>
#include <asm/atarihw.h>
#include <asm/traps.h>
...
...
@@ -149,6 +150,8 @@ static struct dsp56k_device {
int
tx_wsize
,
rx_wsize
;
}
dsp56k
;
static
struct
class_simple
*
dsp56k_class
;
static
int
dsp56k_reset
(
void
)
{
u_char
status
;
...
...
@@ -502,6 +505,8 @@ static char banner[] __initdata = KERN_INFO "DSP56k driver installed\n";
static
int
__init
dsp56k_init_driver
(
void
)
{
int
err
=
0
;
if
(
!
MACH_IS_ATARI
||
!
ATARIHW_PRESENT
(
DSP56K
))
{
printk
(
"DSP56k driver: Hardware not present
\n
"
);
return
-
ENODEV
;
...
...
@@ -511,17 +516,35 @@ static int __init dsp56k_init_driver(void)
printk
(
"DSP56k driver: Unable to register driver
\n
"
);
return
-
ENODEV
;
}
dsp56k_class
=
class_simple_create
(
THIS_MODULE
,
"dsp56k"
);
if
(
IS_ERR
(
dsp56k_class
))
{
err
=
PTR_ERR
(
dsp56k_class
);
goto
out_chrdev
;
}
class_simple_device_add
(
dsp56k_class
,
MKDEV
(
DSP56K_MAJOR
,
0
),
NULL
,
"dsp56k"
);
devfs_mk_cdev
(
MKDEV
(
DSP56K_MAJOR
,
0
),
err
=
devfs_mk_cdev
(
MKDEV
(
DSP56K_MAJOR
,
0
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"dsp56k"
);
if
(
err
)
goto
out_class
;
printk
(
banner
);
return
0
;
goto
out
;
out_class:
class_simple_device_remove
(
MKDEV
(
DSP56K_MAJOR
,
0
));
class_simple_destroy
(
dsp56k_class
);
out_chrdev:
unregister_chrdev
(
DSP56K_MAJOR
,
"dsp56k"
);
out:
return
err
;
}
module_init
(
dsp56k_init_driver
);
static
void
__exit
dsp56k_cleanup_driver
(
void
)
{
class_simple_device_remove
(
MKDEV
(
DSP56K_MAJOR
,
0
));
class_simple_destroy
(
dsp56k_class
);
unregister_chrdev
(
DSP56K_MAJOR
,
"dsp56k"
);
devfs_remove
(
"dsp56k"
);
}
...
...
drivers/char/ftape/zftape/zftape-init.c
View file @
9add6ead
...
...
@@ -38,6 +38,7 @@
#include <linux/zftape.h>
#include <linux/init.h>
#include <linux/device.h>
#include "../zftape/zftape-init.h"
#include "../zftape/zftape-read.h"
...
...
@@ -103,6 +104,8 @@ static struct file_operations zft_cdev =
.
release
=
zft_close
,
};
static
struct
class_simple
*
zft_class
;
/* Open floppy tape device
*/
static
int
zft_open
(
struct
inode
*
ino
,
struct
file
*
filep
)
...
...
@@ -341,22 +344,29 @@ KERN_INFO
"installing zftape VFS interface for ftape driver ..."
);
TRACE_CATCH
(
register_chrdev
(
QIC117_TAPE_MAJOR
,
"zft"
,
&
zft_cdev
),);
zft_class
=
class_simple_create
(
THIS_MODULE
,
"zft"
);
for
(
i
=
0
;
i
<
4
;
i
++
)
{
class_simple_device_add
(
zft_class
,
MKDEV
(
QIC117_TAPE_MAJOR
,
i
),
NULL
,
"qft%i"
,
i
);
devfs_mk_cdev
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"qft%i"
,
i
);
class_simple_device_add
(
zft_class
,
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
4
),
NULL
,
"nqft%i"
,
i
);
devfs_mk_cdev
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
4
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"nqft%i"
,
i
);
class_simple_device_add
(
zft_class
,
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
16
),
NULL
,
"zqft%i"
,
i
);
devfs_mk_cdev
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
16
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"zqft%i"
,
i
);
class_simple_device_add
(
zft_class
,
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
20
),
NULL
,
"nzqft%i"
,
i
);
devfs_mk_cdev
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
20
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"nzqft%i"
,
i
);
class_simple_device_add
(
zft_class
,
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
32
),
NULL
,
"rawqft%i"
,
i
);
devfs_mk_cdev
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
32
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"rawqft%i"
,
i
);
class_simple_device_add
(
zft_class
,
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
36
),
NULL
,
"nrawrawqft%i"
,
i
);
devfs_mk_cdev
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
36
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"nrawqft%i"
,
i
);
...
...
@@ -386,12 +396,19 @@ static void zft_exit(void)
}
for
(
i
=
0
;
i
<
4
;
i
++
)
{
devfs_remove
(
"qft%i"
,
i
);
class_simple_device_remove
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
));
devfs_remove
(
"nqft%i"
,
i
);
class_simple_device_remove
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
4
));
devfs_remove
(
"zqft%i"
,
i
);
class_simple_device_remove
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
16
));
devfs_remove
(
"nzqft%i"
,
i
);
class_simple_device_remove
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
20
));
devfs_remove
(
"rawqft%i"
,
i
);
class_simple_device_remove
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
32
));
devfs_remove
(
"nrawqft%i"
,
i
);
class_simple_device_remove
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
36
));
}
class_simple_destroy
(
zft_class
);
zft_uninit_mem
();
/* release remaining memory, if any */
printk
(
KERN_INFO
"zftape successfully unloaded.
\n
"
);
TRACE_EXIT
;
...
...
drivers/char/istallion.c
View file @
9add6ead
...
...
@@ -40,6 +40,7 @@
#include <linux/delay.h>
#include <linux/init.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/device.h>
#include <asm/io.h>
#include <asm/uaccess.h>
...
...
@@ -795,6 +796,8 @@ static int stli_timeron;
/*****************************************************************************/
static
struct
class_simple
*
istallion_class
;
#ifdef MODULE
/*
...
...
@@ -853,9 +856,12 @@ static void __exit istallion_module_exit(void)
return
;
}
put_tty_driver
(
stli_serial
);
for
(
i
=
0
;
i
<
4
;
i
++
)
for
(
i
=
0
;
i
<
4
;
i
++
)
{
devfs_remove
(
"staliomem/%d"
,
i
);
class_simple_device_remove
(
MKDEV
(
STL_SIOMEMMAJOR
,
i
));
}
devfs_remove
(
"staliomem"
);
class_simple_destroy
(
istallion_class
);
if
((
i
=
unregister_chrdev
(
STL_SIOMEMMAJOR
,
"staliomem"
)))
printk
(
"STALLION: failed to un-register serial memory device, "
"errno=%d
\n
"
,
-
i
);
...
...
@@ -5310,10 +5316,13 @@ int __init stli_init(void)
"device
\n
"
);
devfs_mk_dir
(
"staliomem"
);
istallion_class
=
class_simple_create
(
THIS_MODULE
,
"staliomem"
);
for
(
i
=
0
;
i
<
4
;
i
++
)
{
devfs_mk_cdev
(
MKDEV
(
STL_SIOMEMMAJOR
,
i
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"staliomem/%d"
,
i
);
class_simple_device_add
(
istallion_class
,
MKDEV
(
STL_SIOMEMMAJOR
,
i
),
NULL
,
"staliomem%d"
,
i
);
}
/*
...
...
drivers/char/stallion.c
View file @
9add6ead
...
...
@@ -41,6 +41,7 @@
#include <linux/init.h>
#include <linux/smp_lock.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/device.h>
#include <asm/io.h>
#include <asm/uaccess.h>
...
...
@@ -732,6 +733,8 @@ static struct file_operations stl_fsiomem = {
/*****************************************************************************/
static
struct
class_simple
*
stallion_class
;
#ifdef MODULE
/*
...
...
@@ -788,12 +791,15 @@ static void __exit stallion_module_exit(void)
restore_flags
(
flags
);
return
;
}
for
(
i
=
0
;
i
<
4
;
i
++
)
for
(
i
=
0
;
i
<
4
;
i
++
)
{
devfs_remove
(
"staliomem/%d"
,
i
);
class_simple_device_remove
(
MKDEV
(
STL_SIOMEMMAJOR
,
i
));
}
devfs_remove
(
"staliomem"
);
if
((
i
=
unregister_chrdev
(
STL_SIOMEMMAJOR
,
"staliomem"
)))
printk
(
"STALLION: failed to un-register serial memory device, "
"errno=%d
\n
"
,
-
i
);
class_simple_destroy
(
stallion_class
);
if
(
stl_tmpwritebuf
!=
(
char
*
)
NULL
)
kfree
(
stl_tmpwritebuf
);
...
...
@@ -3181,10 +3187,12 @@ int __init stl_init(void)
printk
(
"STALLION: failed to register serial board device
\n
"
);
devfs_mk_dir
(
"staliomem"
);
stallion_class
=
class_simple_create
(
THIS_MODULE
,
"staliomem"
);
for
(
i
=
0
;
i
<
4
;
i
++
)
{
devfs_mk_cdev
(
MKDEV
(
STL_SIOMEMMAJOR
,
i
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"staliomem/%d"
,
i
);
class_simple_device_add
(
stallion_class
,
MKDEV
(
STL_SIOMEMMAJOR
,
i
),
NULL
,
"staliomem%d"
,
i
);
}
stl_serial
->
owner
=
THIS_MODULE
;
...
...
drivers/char/tipar.c
View file @
9add6ead
...
...
@@ -67,7 +67,7 @@
/*
* Version Information
*/
#define DRIVER_VERSION "1.1
7
"
#define DRIVER_VERSION "1.1
9
"
#define DRIVER_AUTHOR "Romain Lievin <roms@lpg.ticalc.org>"
#define DRIVER_DESC "Device driver for TI/PC parallel link cables"
#define DRIVER_LICENSE "GPL"
...
...
@@ -361,10 +361,13 @@ tipar_ioctl(struct inode *inode, struct file *file,
switch
(
cmd
)
{
case
IOCTL_TIPAR_DELAY
:
delay
=
(
int
)
arg
;
//get_user(delay, &arg);
break
;
delay
=
(
int
)
arg
;
//get_user(delay, &arg);
break
;
case
IOCTL_TIPAR_TIMEOUT
:
timeout
=
(
int
)
arg
;
//get_user(timeout, &arg);
if
(
arg
!=
0
)
timeout
=
(
int
)
arg
;
else
retval
=
-
EINVAL
;
break
;
default:
retval
=
-
ENOTTY
;
...
...
@@ -399,7 +402,10 @@ tipar_setup(char *str)
str
=
get_options
(
str
,
ARRAY_SIZE
(
ints
),
ints
);
if
(
ints
[
0
]
>
0
)
{
timeout
=
ints
[
1
];
if
(
ints
[
1
]
!=
0
)
timeout
=
ints
[
1
];
else
printk
(
"tipar: wrong timeout value (0), using default value instead."
);
if
(
ints
[
0
]
>
1
)
{
delay
=
ints
[
2
];
}
...
...
drivers/char/tpqic02.c
View file @
9add6ead
...
...
@@ -94,6 +94,7 @@
#include <linux/init.h>
#include <linux/smp_lock.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/device.h>
#include <asm/dma.h>
#include <asm/system.h>
...
...
@@ -229,6 +230,8 @@ static const char *format_names[] = {
"600"
/* untested. */
};
static
struct
class_simple
*
tpqic02_class
;
/* `exception_list' is needed for exception status reporting.
* Exceptions 1..14 are defined by QIC-02 rev F.
...
...
@@ -2696,23 +2699,32 @@ int __init qic02_tape_init(void)
return
-
ENODEV
;
}
tpqic02_class
=
class_simple_create
(
THIS_MODULE
,
TPQIC02_NAME
);
class_simple_device_add
(
tpqic02_class
,
MKDEV
(
QIC02_TAPE_MAJOR
,
2
),
NULL
,
"ntpqic11"
);
devfs_mk_cdev
(
MKDEV
(
QIC02_TAPE_MAJOR
,
2
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
,
"ntpqic11"
);
class_simple_device_add
(
tpqic02_class
,
MKDEV
(
QIC02_TAPE_MAJOR
,
3
),
NULL
,
"tpqic11"
);
devfs_mk_cdev
(
MKDEV
(
QIC02_TAPE_MAJOR
,
3
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
,
"tpqic11"
);
class_simple_device_add
(
tpqic02_class
,
MKDEV
(
QIC02_TAPE_MAJOR
,
4
),
NULL
,
"ntpqic24"
);
devfs_mk_cdev
(
MKDEV
(
QIC02_TAPE_MAJOR
,
4
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
,
"ntpqic24"
);
class_simple_device_add
(
tpqic02_class
,
MKDEV
(
QIC02_TAPE_MAJOR
,
5
),
NULL
,
"tpqic24"
);
devfs_mk_cdev
(
MKDEV
(
QIC02_TAPE_MAJOR
,
5
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
,
"tpqic24"
);
class_simple_device_add
(
tpqic02_class
,
MKDEV
(
QIC02_TAPE_MAJOR
,
6
),
NULL
,
"ntpqic20"
);
devfs_mk_cdev
(
MKDEV
(
QIC02_TAPE_MAJOR
,
6
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
,
"ntpqic120"
);
class_simple_device_add
(
tpqic02_class
,
MKDEV
(
QIC02_TAPE_MAJOR
,
7
),
NULL
,
"tpqic20"
);
devfs_mk_cdev
(
MKDEV
(
QIC02_TAPE_MAJOR
,
7
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
,
"tpqic120"
);
class_simple_device_add
(
tpqic02_class
,
MKDEV
(
QIC02_TAPE_MAJOR
,
8
),
NULL
,
"ntpqic50"
);
devfs_mk_cdev
(
MKDEV
(
QIC02_TAPE_MAJOR
,
8
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
,
"ntpqic150"
);
class_simple_device_add
(
tpqic02_class
,
MKDEV
(
QIC02_TAPE_MAJOR
,
9
),
NULL
,
"tpqic50"
);
devfs_mk_cdev
(
MKDEV
(
QIC02_TAPE_MAJOR
,
9
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
,
"tpqic150"
);
...
...
@@ -2757,13 +2769,23 @@ static void qic02_module_exit(void)
qic02_release_resources
();
devfs_remove
(
"ntpqic11"
);
class_simple_device_remove
(
MKDEV
(
QIC02_TAPE_MAJOR
,
2
));
devfs_remove
(
"tpqic11"
);
class_simple_device_remove
(
MKDEV
(
QIC02_TAPE_MAJOR
,
3
));
devfs_remove
(
"ntpqic24"
);
class_simple_device_remove
(
MKDEV
(
QIC02_TAPE_MAJOR
,
4
));
devfs_remove
(
"tpqic24"
);
class_simple_device_remove
(
MKDEV
(
QIC02_TAPE_MAJOR
,
5
));
devfs_remove
(
"ntpqic120"
);
class_simple_device_remove
(
MKDEV
(
QIC02_TAPE_MAJOR
,
6
));
devfs_remove
(
"tpqic120"
);
class_simple_device_remove
(
MKDEV
(
QIC02_TAPE_MAJOR
,
7
));
devfs_remove
(
"ntpqic150"
);
class_simple_device_remove
(
MKDEV
(
QIC02_TAPE_MAJOR
,
8
));
devfs_remove
(
"tpqic150"
);
class_simple_device_remove
(
MKDEV
(
QIC02_TAPE_MAJOR
,
9
));
class_simple_destroy
(
tpqic02_class
);
}
static
int
qic02_module_init
(
void
)
...
...
drivers/char/vc_screen.c
View file @
9add6ead
...
...
@@ -36,6 +36,7 @@
#include <linux/kbd_kern.h>
#include <linux/console.h>
#include <linux/smp_lock.h>
#include <linux/device.h>
#include <asm/uaccess.h>
#include <asm/byteorder.h>
#include <asm/unaligned.h>
...
...
@@ -469,6 +470,8 @@ static struct file_operations vcs_fops = {
.
open
=
vcs_open
,
};
static
struct
class_simple
*
vc_class
;
void
vcs_make_devfs
(
struct
tty_struct
*
tty
)
{
devfs_mk_cdev
(
MKDEV
(
VCS_MAJOR
,
tty
->
index
+
1
),
...
...
@@ -477,19 +480,26 @@ void vcs_make_devfs(struct tty_struct *tty)
devfs_mk_cdev
(
MKDEV
(
VCS_MAJOR
,
tty
->
index
+
129
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"vcc/a%u"
,
tty
->
index
+
1
);
class_simple_device_add
(
vc_class
,
MKDEV
(
VCS_MAJOR
,
tty
->
index
+
1
),
NULL
,
"vcs%u"
,
tty
->
index
+
1
);
class_simple_device_add
(
vc_class
,
MKDEV
(
VCS_MAJOR
,
tty
->
index
+
129
),
NULL
,
"vcsa%u"
,
tty
->
index
+
1
);
}
void
vcs_remove_devfs
(
struct
tty_struct
*
tty
)
{
devfs_remove
(
"vcc/%u"
,
tty
->
index
+
1
);
devfs_remove
(
"vcc/a%u"
,
tty
->
index
+
1
);
class_simple_device_remove
(
MKDEV
(
VCS_MAJOR
,
tty
->
index
+
1
));
class_simple_device_remove
(
MKDEV
(
VCS_MAJOR
,
tty
->
index
+
129
));
}
int
__init
vcs_init
(
void
)
{
if
(
register_chrdev
(
VCS_MAJOR
,
"vcs"
,
&
vcs_fops
))
panic
(
"unable to get major %d for vcs device"
,
VCS_MAJOR
);
vc_class
=
class_simple_create
(
THIS_MODULE
,
"vc"
);
devfs_mk_cdev
(
MKDEV
(
VCS_MAJOR
,
0
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"vcc/0"
);
devfs_mk_cdev
(
MKDEV
(
VCS_MAJOR
,
128
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"vcc/a0"
);
class_simple_device_add
(
vc_class
,
MKDEV
(
VCS_MAJOR
,
0
),
NULL
,
"vcs"
);
class_simple_device_add
(
vc_class
,
MKDEV
(
VCS_MAJOR
,
128
),
NULL
,
"vcsa"
);
return
0
;
}
drivers/char/vt.c
View file @
9add6ead
...
...
@@ -2617,6 +2617,8 @@ static struct tty_operations con_ops = {
int
__init
vty_init
(
void
)
{
vcs_init
();
console_driver
=
alloc_tty_driver
(
MAX_NR_CONSOLES
);
if
(
!
console_driver
)
panic
(
"Couldn't allocate console driver
\n
"
);
...
...
@@ -2644,7 +2646,6 @@ int __init vty_init(void)
#ifdef CONFIG_FRAMEBUFFER_CONSOLE
fb_console_init
();
#endif
vcs_init
();
return
0
;
}
...
...
drivers/isdn/capi/capi.c
View file @
9add6ead
...
...
@@ -37,6 +37,7 @@
#include <linux/capi.h>
#include <linux/kernelcapi.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/isdn/capiutil.h>
#include <linux/isdn/capicmd.h>
...
...
@@ -56,6 +57,8 @@ MODULE_LICENSE("GPL");
/* -------- driver information -------------------------------------- */
static
struct
class_simple
*
capi_class
;
int
capi_major
=
68
;
/* allocated */
#ifdef CONFIG_ISDN_CAPI_MIDDLEWARE
#define CAPINC_NR_PORTS 32
...
...
@@ -1313,7 +1316,8 @@ static int capinc_tty_init(void)
drv
->
owner
=
THIS_MODULE
;
drv
->
driver_name
=
"capi_nc"
;
drv
->
name
=
"capi/"
;
drv
->
devfs_name
=
"capi/"
;
drv
->
name
=
"capi"
;
drv
->
major
=
capi_ttymajor
;
drv
->
minor_start
=
0
;
drv
->
type
=
TTY_DRIVER_TYPE_SERIAL
;
...
...
@@ -1483,11 +1487,20 @@ static int __init capi_init(void)
return
-
EIO
;
}
capi_class
=
class_simple_create
(
THIS_MODULE
,
"capi"
);
if
(
IS_ERR
(
capi_class
))
{
unregister_chrdev
(
capi_major
,
"capi20"
);
return
PTR_ERR
(
capi_class
);
}
class_simple_device_add
(
capi_class
,
MKDEV
(
capi_major
,
0
),
NULL
,
"capi"
);
devfs_mk_cdev
(
MKDEV
(
capi_major
,
0
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"isdn/capi20"
);
#ifdef CONFIG_ISDN_CAPI_MIDDLEWARE
if
(
capinc_tty_init
()
<
0
)
{
class_simple_device_remove
(
MKDEV
(
capi_major
,
0
));
class_simple_destroy
(
capi_class
);
unregister_chrdev
(
capi_major
,
"capi20"
);
return
-
ENOMEM
;
}
...
...
@@ -1514,6 +1527,8 @@ static void __exit capi_exit(void)
{
proc_exit
();
class_simple_device_remove
(
MKDEV
(
capi_major
,
0
));
class_simple_destroy
(
capi_class
);
unregister_chrdev
(
capi_major
,
"capi20"
);
devfs_remove
(
"isdn/capi20"
);
...
...
drivers/video/fbmem.c
View file @
9add6ead
...
...
@@ -32,6 +32,9 @@
#include <linux/kmod.h>
#endif
#include <linux/devfs_fs_kernel.h>
#include <linux/err.h>
#include <linux/kernel.h>
#include <linux/device.h>
#if defined(__mc68000__) || defined(CONFIG_APUS)
#include <asm/setup.h>
...
...
@@ -1245,6 +1248,8 @@ static struct file_operations fb_fops = {
#endif
};
static
struct
class_simple
*
fb_class
;
/**
* register_framebuffer - registers a frame buffer device
* @fb_info: frame buffer info structure
...
...
@@ -1259,6 +1264,7 @@ int
register_framebuffer
(
struct
fb_info
*
fb_info
)
{
int
i
;
struct
class_device
*
c
;
if
(
num_registered_fb
==
FB_MAX
)
return
-
ENXIO
;
...
...
@@ -1267,6 +1273,12 @@ register_framebuffer(struct fb_info *fb_info)
if
(
!
registered_fb
[
i
])
break
;
fb_info
->
node
=
i
;
c
=
class_simple_device_add
(
fb_class
,
MKDEV
(
FB_MAJOR
,
i
),
NULL
,
"fb%d"
,
i
);
if
(
IS_ERR
(
c
))
{
/* Not fatal */
printk
(
KERN_WARNING
"Unable to create class_device for framebuffer %d; errno = %ld
\n
"
,
i
,
PTR_ERR
(
c
));
}
if
(
fb_info
->
pixmap
.
addr
==
NULL
)
{
fb_info
->
pixmap
.
addr
=
kmalloc
(
FBPIXMAPSIZE
,
GFP_KERNEL
);
...
...
@@ -1332,6 +1344,7 @@ unregister_framebuffer(struct fb_info *fb_info)
kfree
(
fb_info
->
sprite
.
addr
);
registered_fb
[
i
]
=
NULL
;
num_registered_fb
--
;
class_simple_device_remove
(
MKDEV
(
FB_MAJOR
,
i
));
return
0
;
}
...
...
@@ -1393,6 +1406,12 @@ fbmem_init(void)
if
(
register_chrdev
(
FB_MAJOR
,
"fb"
,
&
fb_fops
))
printk
(
"unable to get major %d for fb devs
\n
"
,
FB_MAJOR
);
fb_class
=
class_simple_create
(
THIS_MODULE
,
"graphics"
);
if
(
IS_ERR
(
fb_class
))
{
printk
(
KERN_WARNING
"Unable to create fb class; errno = %ld
\n
"
,
PTR_ERR
(
fb_class
));
fb_class
=
NULL
;
}
#ifdef CONFIG_FB_OF
if
(
ofonly
)
{
offb_init
();
...
...
fs/coda/psdev.c
View file @
9add6ead
...
...
@@ -37,6 +37,7 @@
#include <linux/init.h>
#include <linux/list.h>
#include <linux/smp_lock.h>
#include <linux/device.h>
#include <asm/io.h>
#include <asm/system.h>
#include <asm/poll.h>
...
...
@@ -61,6 +62,7 @@ unsigned long coda_timeout = 30; /* .. secs, then signals will dequeue */
struct
venus_comm
coda_comms
[
MAX_CODADEVS
];
static
struct
class_simple
*
coda_psdev_class
;
/*
* Device operations
...
...
@@ -358,20 +360,38 @@ static struct file_operations coda_psdev_fops = {
static
int
init_coda_psdev
(
void
)
{
int
i
;
int
i
,
err
=
0
;
if
(
register_chrdev
(
CODA_PSDEV_MAJOR
,
"coda_psdev"
,
&
coda_psdev_fops
))
{
printk
(
KERN_ERR
"coda_psdev: unable to get major %d
\n
"
,
CODA_PSDEV_MAJOR
);
return
-
EIO
;
}
coda_psdev_class
=
class_simple_create
(
THIS_MODULE
,
"coda_psdev"
);
if
(
IS_ERR
(
coda_psdev_class
))
{
err
=
PTR_ERR
(
coda_psdev_class
);
goto
out_chrdev
;
}
devfs_mk_dir
(
"coda"
);
for
(
i
=
0
;
i
<
MAX_CODADEVS
;
i
++
)
{
devfs_mk_cdev
(
MKDEV
(
CODA_PSDEV_MAJOR
,
i
),
class_simple_device_add
(
coda_psdev_class
,
MKDEV
(
CODA_PSDEV_MAJOR
,
i
),
NULL
,
"cfs%d"
,
i
);
err
=
devfs_mk_cdev
(
MKDEV
(
CODA_PSDEV_MAJOR
,
i
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"coda/%d"
,
i
);
if
(
err
)
goto
out_class
;
}
coda_sysctl_init
();
return
0
;
goto
out
;
out_class:
for
(
i
=
0
;
i
<
MAX_CODADEVS
;
i
++
)
class_simple_device_remove
(
MKDEV
(
CODA_PSDEV_MAJOR
,
i
));
class_simple_destroy
(
coda_psdev_class
);
out_chrdev:
unregister_chrdev
(
CODA_PSDEV_MAJOR
,
"coda_psdev"
);
out:
return
err
;
}
...
...
@@ -408,8 +428,11 @@ static int __init init_coda(void)
}
return
0
;
out:
for
(
i
=
0
;
i
<
MAX_CODADEVS
;
i
++
)
for
(
i
=
0
;
i
<
MAX_CODADEVS
;
i
++
)
{
class_simple_device_remove
(
MKDEV
(
CODA_PSDEV_MAJOR
,
i
));
devfs_remove
(
"coda/%d"
,
i
);
}
class_simple_destroy
(
coda_psdev_class
);
devfs_remove
(
"coda"
);
unregister_chrdev
(
CODA_PSDEV_MAJOR
,
"coda_psdev"
);
coda_sysctl_clean
();
...
...
@@ -427,8 +450,11 @@ static void __exit exit_coda(void)
if
(
err
!=
0
)
{
printk
(
"coda: failed to unregister filesystem
\n
"
);
}
for
(
i
=
0
;
i
<
MAX_CODADEVS
;
i
++
)
for
(
i
=
0
;
i
<
MAX_CODADEVS
;
i
++
)
{
class_simple_device_remove
(
MKDEV
(
CODA_PSDEV_MAJOR
,
i
));
devfs_remove
(
"coda/%d"
,
i
);
}
class_simple_destroy
(
coda_psdev_class
);
devfs_remove
(
"coda"
);
unregister_chrdev
(
CODA_PSDEV_MAJOR
,
"coda_psdev"
);
coda_sysctl_clean
();
...
...
lib/kobject.c
View file @
9add6ead
...
...
@@ -349,16 +349,16 @@ int kobject_set_name(struct kobject * kobj, const char * fmt, ...)
/*
* Need more space? Allocate it and try again
*/
name
=
kmalloc
(
need
,
GFP_KERNEL
);
limit
=
need
+
1
;
name
=
kmalloc
(
limit
,
GFP_KERNEL
);
if
(
!
name
)
{
error
=
-
ENOMEM
;
goto
Done
;
}
limit
=
need
;
need
=
vsnprintf
(
name
,
limit
,
fmt
,
args
);
/* Still? Give up. */
if
(
need
>
limit
)
{
if
(
need
>
=
limit
)
{
kfree
(
name
);
error
=
-
EFAULT
;
goto
Done
;
...
...
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