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
39ed3b25
Commit
39ed3b25
authored
Sep 09, 2003
by
Paul Mackerras
Browse files
Options
Browse Files
Download
Plain Diff
Merge samba.org:/home/paulus/kernel/linux-2.5
into samba.org:/home/paulus/kernel/for-linus-ppc
parents
d33a40e5
b0deac08
Changes
32
Show whitespace changes
Inline
Side-by-side
Showing
32 changed files
with
379 additions
and
341 deletions
+379
-341
Documentation/ioctl-number.txt
Documentation/ioctl-number.txt
+3
-1
Makefile
Makefile
+2
-2
arch/i386/boot/Makefile
arch/i386/boot/Makefile
+1
-2
arch/i386/boot98/Makefile
arch/i386/boot98/Makefile
+1
-2
drivers/eisa/Makefile
drivers/eisa/Makefile
+6
-6
drivers/ide/legacy/pdc4030.c
drivers/ide/legacy/pdc4030.c
+1
-1
drivers/ieee1394/Makefile
drivers/ieee1394/Makefile
+3
-4
drivers/isdn/capi/capi.c
drivers/isdn/capi/capi.c
+11
-5
drivers/isdn/capi/capidrv.c
drivers/isdn/capi/capidrv.c
+5
-5
drivers/isdn/capi/kcapi.c
drivers/isdn/capi/kcapi.c
+14
-25
drivers/isdn/hardware/avm/c4.c
drivers/isdn/hardware/avm/c4.c
+11
-4
drivers/isdn/hisax/Makefile
drivers/isdn/hisax/Makefile
+2
-2
drivers/isdn/i4l/isdn_audio.c
drivers/isdn/i4l/isdn_audio.c
+2
-2
drivers/isdn/i4l/isdn_common.c
drivers/isdn/i4l/isdn_common.c
+92
-85
drivers/isdn/i4l/isdn_net_lib.c
drivers/isdn/i4l/isdn_net_lib.c
+18
-17
drivers/isdn/i4l/isdn_tty.c
drivers/isdn/i4l/isdn_tty.c
+15
-12
drivers/isdn/icn/icn.c
drivers/isdn/icn/icn.c
+82
-68
drivers/isdn/icn/icn.h
drivers/isdn/icn/icn.h
+9
-9
drivers/media/dvb/frontends/Kconfig
drivers/media/dvb/frontends/Kconfig
+1
-1
drivers/media/dvb/ttusb-dec/Kconfig
drivers/media/dvb/ttusb-dec/Kconfig
+1
-1
drivers/pcmcia/cs.c
drivers/pcmcia/cs.c
+1
-1
include/linux/coda.h
include/linux/coda.h
+1
-1
include/linux/fs.h
include/linux/fs.h
+8
-5
include/linux/i8k.h
include/linux/i8k.h
+6
-6
include/linux/if_pppox.h
include/linux/if_pppox.h
+2
-2
include/linux/isdn.h
include/linux/isdn.h
+49
-51
include/linux/matroxfb.h
include/linux/matroxfb.h
+6
-6
include/linux/pmu.h
include/linux/pmu.h
+5
-5
include/linux/radeonfb.h
include/linux/radeonfb.h
+2
-2
init/Kconfig
init/Kconfig
+9
-0
scripts/genksyms/Makefile
scripts/genksyms/Makefile
+4
-2
sound/oss/Kconfig
sound/oss/Kconfig
+6
-6
No files found.
Documentation/ioctl-number.txt
View file @
39ed3b25
...
...
@@ -30,7 +30,9 @@ I'll register one for you.
The second argument to _IO, _IOW, _IOR, or _IOWR is a sequence number
to distinguish ioctls from each other. The third argument to _IOW,
_IOR, or _IOWR is the type of the data going into the kernel or coming
out of the kernel (e.g. 'int' or 'struct foo').
out of the kernel (e.g. 'int' or 'struct foo'). NOTE! Do NOT use
sizeof(arg) as the third argument as this results in your ioctl thinking
it passes an argument of type size_t.
Some devices use their major number as the identifier; this is OK, as
long as it is unique. Some devices are irregular and don't follow any
...
...
Makefile
View file @
39ed3b25
...
...
@@ -344,8 +344,8 @@ endif
include
arch/$(ARCH)/Makefile
# Let architecture Makefiles change CPPFLAGS if needed
CFLAGS
+
=
$(CPPFLAGS)
$(CFLAGS)
AFLAGS
+
=
$(CPPFLAGS)
$(AFLAGS)
CFLAGS
:
=
$(CPPFLAGS)
$(CFLAGS)
AFLAGS
:
=
$(CPPFLAGS)
$(AFLAGS)
core-y
+=
kernel/ mm/ fs/ ipc/ security/ crypto/
...
...
arch/i386/boot/Makefile
View file @
39ed3b25
...
...
@@ -58,8 +58,7 @@ $(obj)/setup $(obj)/bootsect: %: %.o FORCE
$(
call
if_changed,ld
)
$(obj)/compressed/vmlinux
:
FORCE
$(Q)$(MAKE)
-f
scripts/Makefile.build
obj
=
$(obj)
/compressed
\
IMAGE_OFFSET
=
$(IMAGE_OFFSET)
$@
$(Q)$(MAKE)
$(build)
=
$(obj)
/compressed
IMAGE_OFFSET
=
$(IMAGE_OFFSET)
$@
# Set this if you want to pass append arguments to the zdisk/fdimage kernel
FDARGS
=
...
...
arch/i386/boot98/Makefile
View file @
39ed3b25
...
...
@@ -58,8 +58,7 @@ $(obj)/setup $(obj)/bootsect: %: %.o FORCE
$(
call
if_changed,ld
)
$(obj)/compressed/vmlinux
:
FORCE
$(Q)$(MAKE)
-f
scripts/Makefile.build
obj
=
$(obj)
/compressed
\
IMAGE_OFFSET
=
$(IMAGE_OFFSET)
$@
$(Q)$(MAKE)
$(build)
=
$(obj)
/compressed
IMAGE_OFFSET
=
$(IMAGE_OFFSET)
$@
# Set this if you want to pass append arguments to the zdisk/fdimage kernel
FDARGS
=
...
...
drivers/eisa/Makefile
View file @
39ed3b25
...
...
@@ -10,15 +10,15 @@ obj-${CONFIG_EISA_PCI_EISA} += pci_eisa.o
# so leave it at the end of the list.
obj-${CONFIG_EISA_VIRTUAL_ROOT}
+=
virtual_root.o
clean-files
:=
devlist.h
# Ugly hack to get DEVICE_NAME_SIZE value...
DEVICE_NAME_SIZE
:
=
$(
shell
awk
'$$1=="\#define" && $$2=="DEVICE_NAME_SIZE" {print $$3-1
}
'
$(srctree)
/include/linux/device.h
)
DEVICE_NAME_SIZE
=
$(
shell
awk
'$$1=="\#define" && $$2=="DEVICE_NAME_SIZE" {print $$3-1
}
'
$(srctree)
/include/linux/device.h
)
$(obj)/eisa-bus.o
:
$(obj)/devlist.h
$(obj)/devlist.h
:
$(src)/eisa.ids $(srctree)/include/linux/device.h
sed
-e
'/^
#/D'
-e
's/^\([[:alnum:]]\{7\}\) \+"\([^"]\{1,
$(DEVICE_NAME_SIZE)
\}\).*"/EISA_DEVINFO ("\1", "\2"),/'
$<
>
$@
quiet_cmd_eisaid
=
GEN
$@
cmd_eisaid
=
sed
-e
'/^\
#/D'
-e
's/^\([[:alnum:]]\{7\}\) \+"\([^"]\{1,
$(DEVICE_NAME_SIZE)
\}\).*"/EISA_DEVINFO ("\1", "\2"),/'
$<
>
$@
$(src)/eisa.ids
:
touch
$@
clean-files
:=
devlist.h
$(obj)/devlist.h
:
$(src)/eisa.ids include/linux/device.h
$(
call
cmd,eisaid
)
drivers/ide/legacy/pdc4030.c
View file @
39ed3b25
...
...
@@ -297,7 +297,7 @@ int __init detect_pdc4030(ide_hwif_t *hwif)
}
static
int
__init
ide_probe_for_pdc4030
(
void
)
int
__init
ide_probe_for_pdc4030
(
void
)
{
unsigned
int
index
;
ide_hwif_t
*
hwif
;
...
...
drivers/ieee1394/Makefile
View file @
39ed3b25
...
...
@@ -16,11 +16,10 @@ obj-$(CONFIG_IEEE1394_ETH1394) += eth1394.o
obj-$(CONFIG_IEEE1394_AMDTP)
+=
amdtp.o
obj-$(CONFIG_IEEE1394_CMP)
+=
cmp.o
clean-files
:=
oui.c
quiet_cmd_oui2c
=
OUI2C
$@
cmd_oui2c
=
$(CONFIG_SHELL)
$(
obj)
/oui2c.sh <
$(obj)
/oui.db
>
$@
cmd_oui2c
=
$(CONFIG_SHELL)
$(
srctree)
/
$(src)
/oui2c.sh <
$<
>
$@
targets
:=
oui.c
$(obj)/oui.o
:
$(obj)/oui.c
$(obj)/oui.c
:
$(
obj)/oui.db $(obj)/oui2c.sh
$(obj)/oui.c
:
$(
src)/oui.db $(src)/oui2c.sh FORCE
$(
call
if_changed,oui2c
)
drivers/isdn/capi/capi.c
View file @
39ed3b25
...
...
@@ -58,12 +58,16 @@ MODULE_LICENSE("GPL");
int
capi_major
=
68
;
/* allocated */
#ifdef CONFIG_ISDN_CAPI_MIDDLEWARE
#define CAPINC_NR_PORTS 32
#define CAPINC_MAX_PORTS 256
int
capi_ttymajor
=
191
;
int
capi_ttyminors
=
CAPINC_NR_PORTS
;
#endif
/* CONFIG_ISDN_CAPI_MIDDLEWARE */
MODULE_PARM
(
capi_major
,
"i"
);
#ifdef CONFIG_ISDN_CAPI_MIDDLEWARE
MODULE_PARM
(
capi_ttymajor
,
"i"
);
MODULE_PARM
(
capi_ttyminors
,
"i"
);
#endif
/* CONFIG_ISDN_CAPI_MIDDLEWARE */
/* -------- defines ------------------------------------------------- */
...
...
@@ -1262,7 +1266,6 @@ static int capinc_tty_read_proc(char *page, char **start, off_t off,
return
0
;
}
#define CAPINC_NR_PORTS 256
static
struct
tty_driver
*
capinc_tty_driver
;
static
struct
tty_operations
capinc_ops
=
{
...
...
@@ -1289,8 +1292,14 @@ static struct tty_operations capinc_ops = {
static
int
capinc_tty_init
(
void
)
{
struct
tty_driver
*
drv
=
alloc_tty_driver
(
CAPINC_NR_PORTS
)
;
struct
tty_driver
*
drv
;
if
(
capi_ttyminors
>
CAPINC_MAX_PORTS
)
capi_ttyminors
=
CAPINC_MAX_PORTS
;
if
(
capi_ttyminors
<=
0
)
capi_ttyminors
=
CAPINC_NR_PORTS
;
drv
=
alloc_tty_driver
(
capi_ttyminors
);
if
(
!
drv
)
return
-
ENOMEM
;
...
...
@@ -1454,7 +1463,6 @@ static int __init capi_init(void)
char
*
p
;
char
*
compileinfo
;
if
((
p
=
strchr
(
revision
,
':'
))
!=
0
&&
p
[
1
])
{
strlcpy
(
rev
,
p
+
2
,
sizeof
(
rev
));
if
((
p
=
strchr
(
rev
,
'$'
))
!=
0
&&
p
>
rev
)
...
...
@@ -1470,8 +1478,6 @@ static int __init capi_init(void)
devfs_mk_cdev
(
MKDEV
(
capi_major
,
0
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"isdn/capi20"
);
printk
(
KERN_NOTICE
"capi20: started up with major %d
\n
"
,
capi_major
);
#ifdef CONFIG_ISDN_CAPI_MIDDLEWARE
if
(
capinc_tty_init
()
<
0
)
{
unregister_chrdev
(
capi_major
,
"capi20"
);
...
...
drivers/isdn/capi/capidrv.c
View file @
39ed3b25
...
...
@@ -1991,6 +1991,10 @@ static int capidrv_addcontr(u16 contr, struct capi_profile *profp)
int
i
;
sprintf
(
id
,
"capidrv-%d"
,
contr
);
if
(
!
try_module_get
(
THIS_MODULE
))
{
printk
(
KERN_WARNING
"capidrv: (%s) Could not reserve module
\n
"
,
id
);
return
-
1
;
}
if
(
!
(
card
=
(
capidrv_contr
*
)
kmalloc
(
sizeof
(
capidrv_contr
),
GFP_ATOMIC
)))
{
printk
(
KERN_WARNING
"capidrv: (%s) Could not allocate contr-struct.
\n
"
,
id
);
...
...
@@ -1998,11 +2002,6 @@ static int capidrv_addcontr(u16 contr, struct capi_profile *profp)
}
memset
(
card
,
0
,
sizeof
(
capidrv_contr
));
card
->
owner
=
THIS_MODULE
;
if
(
!
try_module_get
(
card
->
owner
))
{
printk
(
KERN_WARNING
"capidrv: (%s) Could not reserve module
\n
"
,
id
);
kfree
(
card
);
return
-
1
;
}
init_timer
(
&
card
->
listentimer
);
strcpy
(
card
->
name
,
id
);
card
->
contrnr
=
contr
;
...
...
@@ -2099,6 +2098,7 @@ static int capidrv_delcontr(u16 contr)
printk
(
KERN_ERR
"capidrv: delcontr: no contr %u
\n
"
,
contr
);
return
-
1
;
}
#warning FIXME: maybe a race condition the card should be removed here from global list /kkeil
spin_unlock_irqrestore
(
&
global_lock
,
flags
);
del_timer
(
&
card
->
listentimer
);
...
...
drivers/isdn/capi/kcapi.c
View file @
39ed3b25
...
...
@@ -77,31 +77,17 @@ static struct work_struct tq_recv_notify;
static
inline
struct
capi_ctr
*
capi_ctr_get
(
struct
capi_ctr
*
card
)
{
if
(
try_module_get
(
card
->
owner
))
return
card
;
if
(
!
try_module_get
(
card
->
owner
))
return
NULL
;
DBG
(
"Reserve module: %s"
,
card
->
owner
->
name
);
return
card
;
}
static
inline
void
capi_ctr_put
(
struct
capi_ctr
*
card
)
{
module_put
(
card
->
owner
);
DBG
(
"MOD_COUNT DEC"
);
}
/* -------- own ref counting -------------------------------------- */
static
inline
void
kcapi_get_ref
(
void
)
{
if
(
!
try_module_get
(
THIS_MODULE
))
printk
(
KERN_WARNING
"%s: cannot reserve module
\n
"
,
__FUNCTION__
);
}
static
inline
void
kcapi_put_ref
(
void
)
{
module_put
(
THIS_MODULE
);
DBG
(
"Release module: %s"
,
card
->
owner
->
name
);
}
/* ------------------------------------------------------------- */
...
...
@@ -224,10 +210,13 @@ static int notify_push(unsigned int cmd, u32 controller,
{
struct
capi_notifier
*
np
;
kcapi_get_ref
();
if
(
!
try_module_get
(
THIS_MODULE
))
{
printk
(
KERN_WARNING
"%s: cannot reserve module
\n
"
,
__FUNCTION__
);
return
-
1
;
}
np
=
(
struct
capi_notifier
*
)
kmalloc
(
sizeof
(
struct
capi_notifier
),
GFP_ATOMIC
);
if
(
!
np
)
{
kcapi_put_ref
(
);
module_put
(
THIS_MODULE
);
return
-
1
;
}
memset
(
np
,
0
,
sizeof
(
struct
capi_notifier
));
...
...
@@ -241,9 +230,9 @@ static int notify_push(unsigned int cmd, u32 controller,
* of devices. Devices can only removed in
* user process, not in bh.
*/
kcapi_get_ref
(
);
__module_get
(
THIS_MODULE
);
if
(
schedule_work
(
&
tq_state_notify
)
==
0
)
kcapi_put_ref
(
);
module_put
(
THIS_MODULE
);
return
0
;
}
...
...
@@ -301,9 +290,9 @@ static void notify_handler(void *dummy)
while
((
np
=
notify_dequeue
())
!=
0
)
{
notify_doit
(
np
);
kfree
(
np
);
kcapi_put_ref
(
);
module_put
(
THIS_MODULE
);
}
kcapi_put_ref
(
);
module_put
(
THIS_MODULE
);
}
/* -------- Receiver ------------------------------------------ */
...
...
drivers/isdn/hardware/avm/c4.c
View file @
39ed3b25
...
...
@@ -37,8 +37,8 @@
static
int
suppress_pollack
;
static
struct
pci_device_id
c4_pci_tbl
[]
=
{
{
PCI_VENDOR_ID_DEC
,
PCI_DEVICE_ID_DEC_21285
,
PCI_VENDOR_ID_AVM
,
PCI_DEVICE_ID_AVM_C4
,
4
},
{
PCI_VENDOR_ID_DEC
,
PCI_DEVICE_ID_DEC_21285
,
PCI_VENDOR_ID_AVM
,
PCI_DEVICE_ID_AVM_C2
,
2
},
{
PCI_VENDOR_ID_DEC
,
PCI_DEVICE_ID_DEC_21285
,
PCI_VENDOR_ID_AVM
,
PCI_DEVICE_ID_AVM_C4
,
0
,
0
,
(
unsigned
long
)
4
},
{
PCI_VENDOR_ID_DEC
,
PCI_DEVICE_ID_DEC_21285
,
PCI_VENDOR_ID_AVM
,
PCI_DEVICE_ID_AVM_C2
,
0
,
0
,
(
unsigned
long
)
2
},
{
}
/* Terminating entry */
};
...
...
@@ -145,6 +145,7 @@ static inline int wait_for_doorbell(avmcard *card, unsigned long t)
while
(
c4inmeml
(
card
->
mbase
+
DOORBELL
)
!=
0xffffffff
)
{
if
(
!
time_before
(
jiffies
,
stop
))
return
-
1
;
mb
();
}
return
0
;
}
...
...
@@ -297,6 +298,7 @@ static void c4_reset(avmcard *card)
if
(
!
time_before
(
jiffies
,
stop
))
return
;
c4outmeml
(
card
->
mbase
+
DOORBELL
,
DBELL_ADDR
);
mb
();
}
c4_poke
(
card
,
DC21285_ARMCSR_BASE
+
CHAN_1_CONTROL
,
0
);
...
...
@@ -320,6 +322,7 @@ static int c4_detect(avmcard *card)
if
(
!
time_before
(
jiffies
,
stop
))
return
2
;
c4outmeml
(
card
->
mbase
+
DOORBELL
,
DBELL_ADDR
);
mb
();
}
c4_poke
(
card
,
DC21285_ARMCSR_BASE
+
CHAN_1_CONTROL
,
0
);
...
...
@@ -899,6 +902,9 @@ static void c4_remove(struct pci_dev *pdev)
avmctrl_info
*
cinfo
;
u_int
i
;
if
(
!
card
)
return
;
c4_reset
(
card
);
for
(
i
=
0
;
i
<
card
->
nr_controllers
;
i
++
)
{
...
...
@@ -910,6 +916,7 @@ static void c4_remove(struct pci_dev *pdev)
iounmap
(
card
->
mbase
);
release_region
(
card
->
port
,
AVMB1_PORTLEN
);
avmcard_dma_free
(
card
->
dma
);
pci_set_drvdata
(
pdev
,
NULL
);
b1_free_card
(
card
);
}
...
...
@@ -1141,7 +1148,7 @@ static int c4_add_card(struct capicardparams *p, struct pci_dev *dev,
retval
=
c4_detect
(
card
);
if
(
retval
!=
0
)
{
printk
(
KERN_NOTICE
"c4: NO card at 0x%x (%d)
\n
"
,
printk
(
KERN_NOTICE
"c4: NO card at 0x%x
error
(%d)
\n
"
,
card
->
port
,
retval
);
retval
=
-
EIO
;
goto
err_unmap
;
...
...
@@ -1185,7 +1192,7 @@ static int c4_add_card(struct capicardparams *p, struct pci_dev *dev,
printk
(
KERN_INFO
"c4: AVM C%d at i/o %#x, irq %d, mem %#lx
\n
"
,
nr_controllers
,
card
->
port
,
card
->
irq
,
card
->
membase
);
pci_set_drvdata
(
dev
,
card
);
return
0
;
err_free_irq:
...
...
drivers/isdn/hisax/Makefile
View file @
39ed3b25
...
...
@@ -57,5 +57,5 @@ hisax-$(CONFIG_HISAX_W6692) += w6692.o
hisax-$(CONFIG_HISAX_ENTERNOW_PCI)
+=
enternow_pci.o amd7930_fn.o
#hisax-$(CONFIG_HISAX_TESTEMU) += testemu.o
CERT
:
=
$(
shell
cd
$(src)
;
md5sum
-c
md5sums.asc
>
/dev/null 2> /dev/null
;
echo
$$
?
)
CFLAGS_cert.o
:
=
-DCERTIFICATION
=
$(CERT)
CERT
=
$(
shell
cd
$(src)
;
md5sum
-c
md5sums.asc
>
/dev/null 2> /dev/null
;
echo
$$
?
)
CFLAGS_cert.o
=
-DCERTIFICATION
=
$(CERT)
drivers/isdn/i4l/isdn_audio.c
View file @
39ed3b25
...
...
@@ -559,7 +559,7 @@ isdn_audio_eval_dtmf(modem_info * info)
ISDN_AUDIO_SKB_DLECOUNT
(
skb
)
=
0
;
ISDN_AUDIO_SKB_LOCK
(
skb
)
=
0
;
isdn_tty_queue_tail
(
info
,
skb
,
2
);
if
((
dev
->
modempoll
)
&&
(
info
->
rcvsched
))
if
((
(
get_isdn_dev
())
->
modempoll
)
&&
(
info
->
rcvsched
))
mod_timer
(
&
info
->
read_timer
,
jiffies
+
4
);
}
else
kfree_skb
(
skb
);
...
...
@@ -670,7 +670,7 @@ isdn_audio_put_dle_code(modem_info * info, u_char code)
ISDN_AUDIO_SKB_LOCK
(
skb
)
=
0
;
isdn_tty_queue_tail
(
info
,
skb
,
2
);
/* Schedule dequeuing */
if
((
dev
->
modempoll
)
&&
(
info
->
rcvsched
))
if
((
(
get_isdn_dev
())
->
modempoll
)
&&
(
info
->
rcvsched
))
mod_timer
(
&
info
->
read_timer
,
jiffies
+
4
);
}
...
...
drivers/isdn/i4l/isdn_common.c
View file @
39ed3b25
...
...
@@ -32,15 +32,15 @@ MODULE_DESCRIPTION("ISDN4Linux: link layer");
MODULE_AUTHOR
(
"Fritz Elfert"
);
MODULE_LICENSE
(
"GPL"
);
isdn_dev
*
dev
;
static
isdn_dev_t
*
isdn
dev
;
static
void
isdn_lock_driver
(
struct
isdn_driver
*
drv
);
static
void
isdn_unlock_driver
(
struct
isdn_driver
*
drv
);
/* ====================================================================== */
isdn_dev_t
*
get_isdn_dev
(
void
)
{
return
(
isdndev
);
}
/* Description of hardware-level-driver */
struct
isdn_driver
{
typedef
struct
isdn_driver
{
int
di
;
char
id
[
20
];
atomic_t
refcnt
;
...
...
@@ -55,7 +55,15 @@ struct isdn_driver {
spinlock_t
lock
;
struct
isdn_slot
*
slots
;
struct
fsm_inst
fi
;
}
driver
;
}
isdn_driver_t
;
static
spinlock_t
drivers_lock
=
SPIN_LOCK_UNLOCKED
;
static
isdn_driver_t
*
drivers
[
ISDN_MAX_DRIVERS
];
static
void
isdn_lock_driver
(
struct
isdn_driver
*
drv
);
static
void
isdn_unlock_driver
(
struct
isdn_driver
*
drv
);
/* ====================================================================== */
static
void
drv_destroy
(
struct
isdn_driver
*
drv
);
...
...
@@ -332,7 +340,7 @@ slot_icall(struct fsm_inst *fi, int pr, void *arg)
isdn_lock_driver
(
slot
->
drv
);
fsm_change_state
(
fi
,
ST_SLOT_IN
);
slot_debug
(
fi
,
"ICALL: %s
\n
"
,
ctrl
->
parm
.
num
);
if
(
dev
->
global_flags
&
ISDN_GLOBAL_STOPPED
)
if
(
isdn
dev
->
global_flags
&
ISDN_GLOBAL_STOPPED
)
return
0
;
strcpy
(
slot
->
num
,
ctrl
->
parm
.
setup
.
phone
);
...
...
@@ -461,9 +469,6 @@ static char *drv_st_str[] = {
static
int
__drv_command
(
struct
isdn_driver
*
drv
,
isdn_ctrl
*
cmd
);
static
spinlock_t
drivers_lock
=
SPIN_LOCK_UNLOCKED
;
static
struct
isdn_driver
*
drivers
[
ISDN_MAX_DRIVERS
];
static
int
isdn_writebuf_skb
(
struct
isdn_slot
*
slot
,
struct
sk_buff
*
skb
)
{
...
...
@@ -563,14 +568,14 @@ set_global_features(void)
unsigned
long
flags
;
int
drvidx
;
dev
->
global_features
=
0
;
isdn
dev
->
global_features
=
0
;
spin_lock_irqsave
(
&
drivers_lock
,
flags
);
for
(
drvidx
=
0
;
drvidx
<
ISDN_MAX_DRIVERS
;
drvidx
++
)
{
if
(
!
drivers
[
drvidx
])
continue
;
if
(
drivers
[
drvidx
]
->
fi
.
state
!=
ST_DRV_RUNNING
)
continue
;
dev
->
global_features
|=
drivers
[
drvidx
]
->
features
;
isdn
dev
->
global_features
|=
drivers
[
drvidx
]
->
features
;
}
spin_unlock_irqrestore
(
&
drivers_lock
,
flags
);
}
...
...
@@ -632,7 +637,7 @@ drv_stat_unload(struct fsm_inst *fi, int pr, void *arg)
spin_unlock_irqrestore
(
&
drivers_lock
,
flags
);
put_drv
(
drv
);
dev
->
channels
-=
drv
->
channels
;
isdn
dev
->
channels
-=
drv
->
channels
;
isdn_info_update
();
return
0
;
...
...
@@ -798,6 +803,7 @@ isdn_status_callback(isdn_ctrl *c)
case
ISDN_STAT_AUDIO
:
rc
=
fsm_event
(
&
drv
->
fi
,
EV_STAT_AUDIO
,
c
);
break
;
#warning FIXME divert interface
#if 0
case ISDN_STAT_ICALL:
/* Find any ttyI, waiting for D-channel setup */
...
...
@@ -851,12 +857,6 @@ isdn_status_callback(isdn_ctrl *c)
if (divert_if)
divert_if->stat_callback(c);
break;
case ISDN_STAT_BCONN:
break;
case ISDN_STAT_BHUP:
break;
#endif
#if 0 // FIXME
case ISDN_STAT_DISCH:
save_flags(flags);
cli();
...
...
@@ -899,7 +899,7 @@ register_isdn(isdn_if *iif)
unsigned
long
flags
;
int
drvidx
;
drv
=
kmalloc
(
sizeof
(
*
drv
),
GFP_
KERNEL
);
drv
=
kmalloc
(
sizeof
(
*
drv
),
GFP_
ATOMIC
);
if
(
!
drv
)
{
printk
(
KERN_WARNING
"register_isdn: out of mem
\n
"
);
goto
fail
;
...
...
@@ -1264,13 +1264,13 @@ isdn_statstr(void)
void
isdn_info_update
(
void
)
{
infostruct
*
p
=
dev
->
infochain
;
infostruct
*
p
=
isdn
dev
->
infochain
;
while
(
p
)
{
*
(
p
->
private
)
=
1
;
p
=
(
infostruct
*
)
p
->
next
;
}
wake_up_interruptible
(
&
(
dev
->
info_waitq
));
wake_up_interruptible
(
&
(
isdn
dev
->
info_waitq
));
}
static
int
...
...
@@ -1282,9 +1282,9 @@ isdn_status_open(struct inode *ino, struct file *filep)
if
(
!
p
)
return
-
ENOMEM
;
p
->
next
=
(
char
*
)
dev
->
infochain
;
p
->
next
=
(
char
*
)
isdn
dev
->
infochain
;
p
->
private
=
(
char
*
)
&
(
filep
->
private_data
);
dev
->
infochain
=
p
;
isdn
dev
->
infochain
=
p
;
/* At opening we allow a single update */
filep
->
private_data
=
(
char
*
)
1
;
...
...
@@ -1294,7 +1294,7 @@ isdn_status_open(struct inode *ino, struct file *filep)
static
int
isdn_status_release
(
struct
inode
*
ino
,
struct
file
*
filep
)
{
infostruct
*
p
=
dev
->
infochain
;
infostruct
*
p
=
isdn
dev
->
infochain
;
infostruct
*
q
=
NULL
;
lock_kernel
();
...
...
@@ -1304,7 +1304,7 @@ isdn_status_release(struct inode *ino, struct file *filep)
if
(
q
)
q
->
next
=
p
->
next
;
else
dev
->
infochain
=
(
infostruct
*
)
(
p
->
next
);
isdn
dev
->
infochain
=
(
infostruct
*
)
(
p
->
next
);
kfree
(
p
);
goto
out
;
}
...
...
@@ -1331,7 +1331,7 @@ isdn_status_read(struct file *file, char *buf, size_t count, loff_t * off)
if
(
!
file
->
private_data
)
{
if
(
file
->
f_flags
&
O_NONBLOCK
)
return
-
EAGAIN
;
interruptible_sleep_on
(
&
(
dev
->
info_waitq
));
interruptible_sleep_on
(
&
(
isdn
dev
->
info_waitq
));
}
lock_kernel
();
p
=
isdn_statstr
();
...
...
@@ -1364,7 +1364,7 @@ isdn_status_poll(struct file *file, poll_table *wait)
{
unsigned
int
mask
=
0
;
poll_wait
(
file
,
&
(
dev
->
info_waitq
),
wait
);
poll_wait
(
file
,
&
(
isdn
dev
->
info_waitq
),
wait
);
lock_kernel
();
if
(
file
->
private_data
)
mask
|=
POLLIN
|
POLLRDNORM
;
...
...
@@ -1449,8 +1449,8 @@ isdn_ctrl_release(struct inode *ino, struct file *file)
{
struct
isdn_slot
*
slot
=
file
->
private_data
;
if
(
dev
->
profd
==
current
)
dev
->
profd
=
NULL
;
if
(
isdn
dev
->
profd
==
current
)
isdn
dev
->
profd
=
NULL
;
isdn_unlock_driver
(
slot
->
drv
);
put_slot
(
slot
);
...
...
@@ -1590,15 +1590,15 @@ isdn_ctrl_ioctl(struct inode *inode, struct file *file, uint cmd, ulong arg)
case
IIOCNETHUP
:
return
isdn_net_ioctl
(
inode
,
file
,
cmd
,
arg
);
case
IIOCSETVER
:
dev
->
net_verbose
=
arg
;
printk
(
KERN_INFO
"isdn: Verbose-Level is %d
\n
"
,
dev
->
net_verbose
);
isdn
dev
->
net_verbose
=
arg
;
printk
(
KERN_INFO
"isdn: Verbose-Level is %d
\n
"
,
isdn
dev
->
net_verbose
);
return
0
;
case
IIOCSETGST
:
if
(
arg
)
{
dev
->
global_flags
|=
ISDN_GLOBAL_STOPPED
;
isdn
dev
->
global_flags
|=
ISDN_GLOBAL_STOPPED
;
isdn_net_hangup_all
();
}
else
{
dev
->
global_flags
&=
~
ISDN_GLOBAL_STOPPED
;
isdn
dev
->
global_flags
&=
~
ISDN_GLOBAL_STOPPED
;
}
return
0
;
case
IIOCSETBRJ
:
...
...
@@ -1622,7 +1622,7 @@ isdn_ctrl_ioctl(struct inode *inode, struct file *file, uint cmd, ulong arg)
drivers
[
drvidx
]
->
flags
&=
~
DRV_FLAG_REJBUS
;
return
0
;
case
IIOCSIGPRF
:
dev
->
profd
=
current
;
isdn
dev
->
profd
=
current
;
return
0
;
break
;
case
IIOCGETPRF
:
...
...
@@ -1738,7 +1738,7 @@ isdn_ctrl_ioctl(struct inode *inode, struct file *file, uint cmd, ulong arg)
return
-
EINVAL
;
case
IIOCDBGVAR
:
if
(
arg
)
{
if
(
copy_to_user
((
char
*
)
arg
,
(
char
*
)
&
dev
,
sizeof
(
ulong
)))
if
(
copy_to_user
((
char
*
)
arg
,
(
char
*
)
&
isdn
dev
,
sizeof
(
ulong
)))
return
-
EFAULT
;
return
0
;
}
else
...
...
@@ -1940,16 +1940,16 @@ isdn_add_channels(struct isdn_driver *drv, int n)
if
(
n
<
1
)
return
0
;
if
(
dev
->
channels
+
n
>
ISDN_MAX_CHANNELS
)
{
if
(
isdn
dev
->
channels
+
n
>
ISDN_MAX_CHANNELS
)
{
printk
(
KERN_WARNING
"register_isdn: Max. %d channels supported
\n
"
,
ISDN_MAX_CHANNELS
);
return
-
EBUSY
;
}
dev
->
channels
+=
n
;
drv
->
slots
=
kmalloc
(
sizeof
(
struct
isdn_slot
)
*
n
,
GFP_
KERNEL
);
isdn
dev
->
channels
+=
n
;
drv
->
slots
=
kmalloc
(
sizeof
(
struct
isdn_slot
)
*
n
,
GFP_
ATOMIC
);
if
(
!
drv
->
slots
)
return
-
ENOMEM
;
memset
(
drv
->
slots
,
0
,
sizeof
(
struct
isdn_slot
)
*
n
);
for
(
ch
=
0
;
ch
<
n
;
ch
++
)
{
slot
=
drv
->
slots
+
ch
;
...
...
@@ -1973,36 +1973,44 @@ isdn_add_channels(struct isdn_driver *drv, int n)
#if defined(CONFIG_ISDN_DIVERSION) || defined(CONFIG_ISDN_DIVERSION_MODULE)
/*
* map_drvname
*/
static
char
*
map_drvname
(
int
di
)
{
if
((
di
<
0
)
||
(
di
>=
ISDN_MAX_DRIVERS
))
return
(
NULL
);
return
(
dev
->
drvid
[
di
]);
/* driver name */
}
/* map_drvname */
return
(
isdn
dev
->
drvid
[
di
]);
/* driver name */
}
/*
* map_namedrv
*/
static
int
map_namedrv
(
char
*
id
)
{
int
i
;
{
int
i
;
for
(
i
=
0
;
i
<
ISDN_MAX_DRIVERS
;
i
++
)
{
if
(
!
strcmp
(
dev
->
drvid
[
i
],
id
))
for
(
i
=
0
;
i
<
ISDN_MAX_DRIVERS
;
i
++
)
{
if
(
!
strcmp
(
dev
->
drvid
[
i
],
id
))
return
(
i
);
}
return
(
-
1
);
}
/* map_namedrv */
}
/*
* DIVERT_REG_NAME
*/
int
DIVERT_REG_NAME
(
isdn_divert_if
*
i_div
)
{
if
(
i_div
->
if_magic
!=
DIVERT_IF_MAGIC
)
return
(
DIVERT_VER_ERR
);
switch
(
i_div
->
cmd
)
{
switch
(
i_div
->
cmd
)
{
case
DIVERT_CMD_REL
:
if
(
divert_if
!=
i_div
)
return
(
DIVERT_REL_ERR
);
divert_if
=
NULL
;
/* free interface */
MOD_DEC_USE_COUNT
;
return
(
DIVERT_NO_ERR
);
case
DIVERT_CMD_REG
:
if
(
divert_if
)
return
(
DIVERT_REG_ERR
);
...
...
@@ -2012,11 +2020,10 @@ int DIVERT_REG_NAME(isdn_divert_if *i_div)
MOD_INC_USE_COUNT
;
divert_if
=
i_div
;
/* remember interface */
return
(
DIVERT_NO_ERR
);
default:
return
(
DIVERT_CMD_ERR
);
}
}
/* DIVERT_REG_NAME */
}
EXPORT_SYMBOL
(
DIVERT_REG_NAME
);
...
...
@@ -2060,7 +2067,7 @@ isdn_slot_command(struct isdn_slot *slot, int cmd, isdn_ctrl *ctrl)
ctrl
->
arg
&=
~
0xff
;
ctrl
->
arg
|=
slot
->
ch
;
break
;
case
ISDN_CMD_DIAL
:
if
(
dev
->
global_flags
&
ISDN_GLOBAL_STOPPED
)
if
(
isdn
dev
->
global_flags
&
ISDN_GLOBAL_STOPPED
)
return
-
EBUSY
;
/* fall through */
...
...
@@ -2200,14 +2207,14 @@ static int __init isdn_init(void)
if
(
retval
)
goto
err_slot_fsm
;
dev
=
vmalloc
(
sizeof
(
*
dev
));
if
(
!
dev
)
{
isdndev
=
vmalloc
(
sizeof
(
*
isdn
dev
));
if
(
!
isdn
dev
)
{
retval
=
-
ENOMEM
;
goto
err_drv_fsm
;
}
memset
(
dev
,
0
,
sizeof
(
*
dev
));
init_MUTEX
(
&
dev
->
sem
);
init_waitqueue_head
(
&
dev
->
info_waitq
);
memset
(
isdndev
,
0
,
sizeof
(
*
isdn
dev
));
init_MUTEX
(
&
isdn
dev
->
sem
);
init_waitqueue_head
(
&
isdn
dev
->
info_waitq
);
retval
=
register_chrdev
(
ISDN_MAJOR
,
"isdn"
,
&
isdn_fops
);
if
(
retval
)
{
...
...
@@ -2239,7 +2246,7 @@ static int __init isdn_init(void)
isdn_cleanup_devfs
();
unregister_chrdev
(
ISDN_MAJOR
,
"isdn"
);
err_vfree:
vfree
(
dev
);
vfree
(
isdn
dev
);
err_drv_fsm:
fsm_free
(
&
drv_fsm
);
err_slot_fsm:
...
...
@@ -2261,7 +2268,7 @@ static void __exit isdn_exit(void)
isdn_tty_exit
();
unregister_chrdev
(
ISDN_MAJOR
,
"isdn"
);
isdn_cleanup_devfs
();
vfree
(
dev
);
vfree
(
isdn
dev
);
fsm_free
(
&
drv_fsm
);
fsm_free
(
&
slot_fsm
);
}
...
...
drivers/isdn/i4l/isdn_net_lib.c
View file @
39ed3b25
...
...
@@ -837,7 +837,7 @@ isdn_net_force_hangup(char *name) // FIXME rename?
if
(
!
idev
)
return
-
ENODEV
;
if
(
idev
->
isdn_slot
<
0
)
if
(
idev
->
isdn_slot
==
NULL
)
return
-
ENOTCONN
;
isdn_net_hangup
(
idev
);
...
...
@@ -1186,7 +1186,7 @@ isdn_net_unbind_channel(isdn_net_dev *idev)
{
isdn_net_local
*
mlp
=
idev
->
mlp
;
if
(
idev
->
isdn_slot
<
0
)
{
if
(
idev
->
isdn_slot
==
NULL
)
{
isdn_BUG
();
return
;
}
...
...
@@ -1344,7 +1344,7 @@ isdn_net_autodial(struct sk_buff *skb, struct net_device *ndev)
goto
discard
;
/* Log packet, which triggered dialing */
if
(
dev
->
net_verbose
)
if
(
(
get_isdn_dev
())
->
net_verbose
)
isdn_net_log_skb
(
skb
,
idev
);
stop_queue:
...
...
@@ -1502,6 +1502,7 @@ isdn_net_find_icall(struct isdn_slot *slot, setup_parm *setup)
char
*
nr
,
*
eaz
;
unsigned
char
si1
,
si2
;
int
retval
;
int
verbose
=
(
get_isdn_dev
())
->
net_verbose
;
unsigned
long
flags
;
/* fix up calling number */
...
...
@@ -1522,14 +1523,14 @@ isdn_net_find_icall(struct isdn_slot *slot, setup_parm *setup)
}
si1
=
setup
->
si1
;
si2
=
setup
->
si2
;
if
(
dev
->
net_
verbose
>
1
)
if
(
verbose
>
1
)
printk
(
KERN_INFO
"isdn_net: call from %s,%d,%d -> %s
\n
"
,
nr
,
si1
,
si2
,
eaz
);
/* check service indicator */
/* Accept DATA and VOICE calls at this stage
local eaz is checked later for allowed call types */
if
((
si1
!=
7
)
&&
(
si1
!=
1
))
{
if
(
dev
->
net_
verbose
>
1
)
if
(
verbose
>
1
)
printk
(
KERN_INFO
"isdn_net: "
"Service-Indicator not 1 or 7, ignored
\n
"
);
return
0
;
...
...
@@ -1558,7 +1559,7 @@ isdn_net_find_icall(struct isdn_slot *slot, setup_parm *setup)
}
spin_unlock_irqrestore
(
&
running_devs_lock
,
flags
);
if
(
!
retval
)
{
if
(
dev
->
net_
verbose
)
if
(
verbose
)
printk
(
KERN_INFO
"isdn_net: call "
"from %s -> %s ignored
\n
"
,
nr
,
eaz
);
}
...
...
@@ -2208,7 +2209,7 @@ isdn_net_start_xmit(struct sk_buff *skb, struct net_device *ndev)
idev
->
last_jiffies
=
jiffies
;
idev
->
transcount
=
0
;
}
if
(
dev
->
net_verbose
>
3
)
if
(
(
get_isdn_dev
())
->
net_verbose
>
3
)
printk
(
KERN_DEBUG
"%s: %d bogocps
\n
"
,
idev
->
name
,
idev
->
cps
);
if
(
idev
->
cps
>
mlp
->
triggercps
)
{
...
...
drivers/isdn/i4l/isdn_tty.c
View file @
39ed3b25
...
...
@@ -381,7 +381,7 @@ isdn_tty_rcv_skb(struct isdn_slot *slot, struct sk_buff *skb)
);
restore_flags
(
flags
);
/* Schedule dequeuing */
if
(
dev
->
modempoll
&&
info
->
rcvsched
)
if
(
(
get_isdn_dev
())
->
modempoll
&&
info
->
rcvsched
)
mod_timer
(
&
info
->
read_timer
,
jiffies
+
4
);
return
1
;
}
...
...
@@ -1735,8 +1735,10 @@ isdn_tty_open(struct tty_struct *tty, struct file *filp)
info
=
&
isdn_mdm
.
info
[
line
];
if
(
isdn_tty_paranoia_check
(
info
,
tty
->
name
,
"isdn_tty_open"
))
return
-
ENODEV
;
if
(
!
try_module_get
(
info
->
owner
))
if
(
!
try_module_get
(
info
->
owner
))
{
printk
(
KERN_WARNING
"%s: cannot reserve module
\n
"
,
__FUNCTION__
);
return
-
ENODEV
;
}
#ifdef ISDN_DEBUG_MODEM_OPEN
printk
(
KERN_DEBUG
"isdn_tty_open %s, count = %d
\n
"
,
tty
->
name
,
info
->
count
);
...
...
@@ -1766,7 +1768,7 @@ isdn_tty_open(struct tty_struct *tty, struct file *filp)
#ifdef ISDN_DEBUG_MODEM_OPEN
printk
(
KERN_DEBUG
"isdn_tty_open ttyi%d successful...
\n
"
,
info
->
line
);
#endif
dev
->
modempoll
++
;
(
get_isdn_dev
())
->
modempoll
++
;
#ifdef ISDN_DEBUG_MODEM_OPEN
printk
(
KERN_DEBUG
"isdn_tty_open normal exit
\n
"
);
#endif
...
...
@@ -1785,6 +1787,7 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp)
if
(
isdn_tty_paranoia_check
(
info
,
tty
->
name
,
"isdn_tty_close"
))
goto
out
;
#warning need fixing /kkeil
save_flags
(
flags
);
cli
();
if
(
tty_hung_up_p
(
filp
))
{
...
...
@@ -1841,7 +1844,7 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp)
break
;
}
}
dev
->
modempoll
--
;
(
get_isdn_dev
())
->
modempoll
--
;
isdn_tty_shutdown
(
info
);
if
(
tty
->
driver
->
flush_buffer
)
tty
->
driver
->
flush_buffer
(
tty
);
...
...
@@ -1985,8 +1988,8 @@ modem_write_profile(atemu * m)
memcpy
(
m
->
profile
,
m
->
mdmreg
,
ISDN_MODEM_NUMREG
);
memcpy
(
m
->
pmsn
,
m
->
msn
,
ISDN_MSNLEN
);
memcpy
(
m
->
plmsn
,
m
->
lmsn
,
ISDN_LMSNLEN
);
if
(
dev
->
profd
)
kill_pg_info
(
SIGIO
,
SEND_SIG_PRIV
,
dev
->
profd
->
pgrp
);
if
(
(
get_isdn_dev
())
->
profd
)
kill_pg_info
(
SIGIO
,
SEND_SIG_PRIV
,
(
get_isdn_dev
())
->
profd
->
pgrp
);
}
static
struct
tty_operations
modem_ops
=
{
...
...
@@ -2228,7 +2231,7 @@ isdn_tty_find_icall(struct isdn_slot *slot, setup_parm *setup)
printk
(
KERN_DEBUG
"m_fi: match1 wret=%d
\n
"
,
wret
);
printk
(
KERN_DEBUG
"m_fi: sl=%d flags=%08lx drv=%d ch=%d usg=%d
\n
"
,
sl
,
info
->
flags
,
info
->
isdn_driver
,
info
->
isdn_channel
,
dev
->
usage
[
idx
]
);
slot
->
usage
);
#endif
if
(
#ifndef FIX_FILE_TRANSFER
...
...
@@ -2504,7 +2507,7 @@ isdn_tty_at_cout(char *msg, modem_info * info)
isdn_tty_queue_tail
(
info
,
skb
,
skb
->
len
);
restore_flags
(
flags
);
/* Schedule dequeuing */
if
(
dev
->
modempoll
&&
info
->
rcvsched
)
if
(
(
get_isdn_dev
())
->
modempoll
&&
info
->
rcvsched
)
mod_timer
(
&
info
->
read_timer
,
jiffies
+
4
);
}
else
{
restore_flags
(
flags
);
...
...
@@ -3289,7 +3292,7 @@ isdn_tty_cmd_PLUSF(char **p, modem_info * info)
#ifdef CONFIG_ISDN_TTY_FAX
case
'1'
:
p
[
0
]
++
;
if
(
!
(
dev
->
global_features
&
if
(
!
(
(
get_isdn_dev
())
->
global_features
&
ISDN_FEATURE_L3_FCLASS1
))
PARSE_ERROR1
;
m
->
mdmreg
[
REG_SI1
]
=
1
;
...
...
@@ -3300,7 +3303,7 @@ isdn_tty_cmd_PLUSF(char **p, modem_info * info)
break
;
case
'2'
:
p
[
0
]
++
;
if
(
!
(
dev
->
global_features
&
if
(
!
(
(
get_isdn_dev
())
->
global_features
&
ISDN_FEATURE_L3_FCLASS2
))
PARSE_ERROR1
;
m
->
mdmreg
[
REG_SI1
]
=
1
;
...
...
@@ -3322,10 +3325,10 @@ isdn_tty_cmd_PLUSF(char **p, modem_info * info)
p
[
0
]
++
;
strcpy
(
rs
,
"
\r\n
0,"
);
#ifdef CONFIG_ISDN_TTY_FAX
if
(
dev
->
global_features
&
if
(
(
get_isdn_dev
())
->
global_features
&
ISDN_FEATURE_L3_FCLASS1
)
strcat
(
rs
,
"1,"
);
if
(
dev
->
global_features
&
if
(
(
get_isdn_dev
())
->
global_features
&
ISDN_FEATURE_L3_FCLASS2
)
strcat
(
rs
,
"2,"
);
#endif
...
...
drivers/isdn/icn/icn.c
View file @
39ed3b25
...
...
@@ -43,8 +43,6 @@ MODULE_PARM_DESC(icn_id2, "ID-String of first card, second S0 (4B only)");
static
char
*
revision
=
"$Revision: 1.65.6.8 $"
;
static
spinlock_t
icn_lock
=
SPIN_LOCK_UNLOCKED
;
static
int
icn_addcard
(
int
,
char
*
,
char
*
);
/*
...
...
@@ -58,18 +56,14 @@ icn_free_queue(icn_card * card, int channel)
{
struct
sk_buff_head
*
queue
=
&
card
->
spqueue
[
channel
];
struct
sk_buff
*
skb
;
unsigned
long
flags
;
skb_queue_purge
(
queue
);
spin_lock_irqsave
(
&
icn_lock
,
flags
);
card
->
xlen
[
channel
]
=
0
;
card
->
sndcount
[
channel
]
=
0
;
if
((
skb
=
card
->
xskb
[
channel
]))
{
card
->
xskb
[
channel
]
=
NULL
;
spin_unlock_irqrestore
(
&
icn_lock
,
flags
);
dev_kfree_skb
(
skb
);
}
else
spin_unlock_irqrestore
(
&
icn_lock
,
flags
);
}
}
/* Put a value into a shift-register, highest bit first.
...
...
@@ -113,6 +107,8 @@ icn_enable_ram(icn_card * card)
/*
* Map a cards channel0 (Bank0/Bank8) or channel1 (Bank4/Bank12)
*
* must called with holding the devlock
*/
static
inline
void
icn_map_channel
(
icn_card
*
card
,
int
channel
)
...
...
@@ -137,17 +133,17 @@ icn_map_channel(icn_card * card, int channel)
* Lock a cards channel.
* Return 0 if requested card/channel is unmapped (failure).
* Return 1 on success.
*
* must called with holding the devlock
*/
static
inline
int
icn_lock_channel
(
icn_card
*
card
,
int
channel
)
{
register
int
retval
;
ulong
flags
;
#ifdef MAP_DEBUG
printk
(
KERN_DEBUG
"icn_lock_channel %d
\n
"
,
channel
);
#endif
spin_lock_irqsave
(
&
icn_lock
,
flags
);
if
((
dev
.
channel
==
channel
)
&&
(
card
==
dev
.
mcard
))
{
dev
.
chanlock
++
;
retval
=
1
;
...
...
@@ -160,25 +156,35 @@ icn_lock_channel(icn_card * card, int channel)
printk
(
KERN_DEBUG
"icn_lock_channel %d FAILED, dc=%d
\n
"
,
channel
,
dev
.
channel
);
#endif
}
spin_unlock_irqrestore
(
&
icn_lock
,
flags
);
return
retval
;
}
/*
* Release current card/channel lock
*
* must called with holding the devlock
*/
static
inline
void
icn_release_channel
(
void
)
__
icn_release_channel
(
void
)
{
ulong
flags
;
#ifdef MAP_DEBUG
printk
(
KERN_DEBUG
"icn_release_channel l=%d
\n
"
,
dev
.
chanlock
);
#endif
spin_lock_irqsave
(
&
icn_lock
,
flags
);
if
(
dev
.
chanlock
>
0
)
dev
.
chanlock
--
;
spin_unlock_irqrestore
(
&
icn_lock
,
flags
);
}
/*
* Release current card/channel lock
*/
static
inline
void
icn_release_channel
(
void
)
{
ulong
flags
;
spin_lock_irqsave
(
&
dev
.
devlock
,
flags
);
__icn_release_channel
();
spin_unlock_irqrestore
(
&
dev
.
devlock
,
flags
);
}
/*
...
...
@@ -194,18 +200,18 @@ icn_trymaplock_channel(icn_card * card, int channel)
printk
(
KERN_DEBUG
"trymaplock c=%d dc=%d l=%d
\n
"
,
channel
,
dev
.
channel
,
dev
.
chanlock
);
#endif
spin_lock_irqsave
(
&
icn_
lock
,
flags
);
spin_lock_irqsave
(
&
dev
.
dev
lock
,
flags
);
if
((
!
dev
.
chanlock
)
||
((
dev
.
channel
==
channel
)
&&
(
dev
.
mcard
==
card
)))
{
dev
.
chanlock
++
;
icn_map_channel
(
card
,
channel
);
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
dev
.
dev
lock
,
flags
);
#ifdef MAP_DEBUG
printk
(
KERN_DEBUG
"trymaplock %d OK
\n
"
,
channel
);
#endif
return
1
;
}
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
dev
.
dev
lock
,
flags
);
#ifdef MAP_DEBUG
printk
(
KERN_DEBUG
"trymaplock %d FAILED
\n
"
,
channel
);
#endif
...
...
@@ -224,12 +230,12 @@ icn_maprelease_channel(icn_card * card, int channel)
#ifdef MAP_DEBUG
printk
(
KERN_DEBUG
"map_release c=%d l=%d
\n
"
,
channel
,
dev
.
chanlock
);
#endif
spin_lock_irqsave
(
&
icn_
lock
,
flags
);
spin_lock_irqsave
(
&
dev
.
dev
lock
,
flags
);
if
(
dev
.
chanlock
>
0
)
dev
.
chanlock
--
;
if
(
!
dev
.
chanlock
)
icn_map_channel
(
card
,
channel
);
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
dev
.
dev
lock
,
flags
);
}
/* Get Data from the B-Channel, assemble fragmented packets and put them
...
...
@@ -305,13 +311,13 @@ icn_pollbchan_send(int channel, icn_card * card)
(
card
->
sndcount
[
channel
]
||
skb_queue_len
(
&
card
->
spqueue
[
channel
])
||
card
->
xskb
[
channel
]))
{
spin_lock_irqsave
(
&
icn_
lock
,
flags
);
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
if
(
card
->
xmit_lock
[
channel
])
{
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
break
;
}
card
->
xmit_lock
[
channel
]
++
;
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
skb
=
card
->
xskb
[
channel
];
if
(
!
skb
)
{
skb
=
skb_dequeue
(
&
card
->
spqueue
[
channel
]);
...
...
@@ -337,14 +343,15 @@ icn_pollbchan_send(int channel, icn_card * card)
writeb
(
cnt
,
&
sbuf_l
);
memcpy_toio
(
&
sbuf_d
,
skb
->
data
,
cnt
);
skb_pull
(
skb
,
cnt
);
card
->
sndcount
[
channel
]
-=
cnt
;
sbnext
;
/* switch to next buffer */
icn_maprelease_channel
(
card
,
mch
&
2
);
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
card
->
sndcount
[
channel
]
-=
cnt
;
if
(
!
skb
->
len
)
{
spin_lock_irqsave
(
&
icn_lock
,
flags
);
if
(
card
->
xskb
[
channel
])
card
->
xskb
[
channel
]
=
NULL
;
spin_unlock_irqrestore
(
&
icn_lock
,
flags
);
card
->
xmit_lock
[
channel
]
=
0
;
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
dev_kfree_skb
(
skb
);
if
(
card
->
xlen
[
channel
])
{
cmd
.
command
=
ISDN_STAT_BSENT
;
...
...
@@ -354,11 +361,10 @@ icn_pollbchan_send(int channel, icn_card * card)
card
->
interface
.
statcallb
(
&
cmd
);
}
}
else
{
spin_lock_irqsave
(
&
icn_lock
,
flags
);
card
->
xskb
[
channel
]
=
skb
;
spin_unlock_irqrestore
(
&
icn_lock
,
flags
);
}
card
->
xmit_lock
[
channel
]
=
0
;
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
}
if
(
!
icn_trymaplock_channel
(
card
,
mch
))
break
;
}
...
...
@@ -387,10 +393,10 @@ icn_pollbchan(unsigned long data)
}
if
(
card
->
flags
&
(
ICN_FLAGS_B1ACTIVE
|
ICN_FLAGS_B2ACTIVE
))
{
/* schedule b-channel polling again */
spin_lock_irqsave
(
&
icn_
lock
,
flags
);
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
mod_timer
(
&
card
->
rb_timer
,
jiffies
+
ICN_TIMER_BCREAD
);
card
->
flags
|=
ICN_FLAGS_RBTIMER
;
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
}
else
card
->
flags
&=
~
ICN_FLAGS_RBTIMER
;
}
...
...
@@ -458,7 +464,7 @@ icn_parse_status(u_char * status, int channel, icn_card * card)
cmd
.
arg
=
channel
;
switch
(
action
)
{
case
11
:
spin_lock_irqsave
(
&
icn_
lock
,
flags
);
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
icn_free_queue
(
card
,
channel
);
card
->
rcvidx
[
channel
]
=
0
;
...
...
@@ -475,23 +481,25 @@ icn_parse_status(u_char * status, int channel, icn_card * card)
ncmd
.
driver
=
card
->
myid
;
ncmd
.
arg
=
channel
;
ncmd
.
command
=
ISDN_STAT_BHUP
;
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
card
->
interface
.
statcallb
(
&
cmd
);
}
else
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
break
;
case
1
:
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
icn_free_queue
(
card
,
channel
);
card
->
flags
|=
(
channel
)
?
ICN_FLAGS_B2ACTIVE
:
ICN_FLAGS_B1ACTIVE
;
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
break
;
case
2
:
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
card
->
flags
&=
~
((
channel
)
?
ICN_FLAGS_B2ACTIVE
:
ICN_FLAGS_B1ACTIVE
);
icn_free_queue
(
card
,
channel
);
spin_lock_irqsave
(
&
icn_lock
,
flags
);
card
->
rcvidx
[
channel
]
=
0
;
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
break
;
case
3
:
{
...
...
@@ -545,11 +553,11 @@ icn_parse_status(u_char * status, int channel, icn_card * card)
strlcpy
(
cmd
.
parm
.
num
,
status
+
1
,
sizeof
(
cmd
.
parm
.
num
));
break
;
case
8
:
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
card
->
flags
&=
~
ICN_FLAGS_B1ACTIVE
;
icn_free_queue
(
card
,
0
);
spin_lock_irqsave
(
&
icn_lock
,
flags
);
card
->
rcvidx
[
0
]
=
0
;
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
cmd
.
arg
=
0
;
cmd
.
driver
=
card
->
myid
;
card
->
interface
.
statcallb
(
&
cmd
);
...
...
@@ -558,11 +566,11 @@ icn_parse_status(u_char * status, int channel, icn_card * card)
cmd
.
driver
=
card
->
myid
;
card
->
interface
.
statcallb
(
&
cmd
);
cmd
.
command
=
ISDN_STAT_BHUP
;
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
card
->
flags
&=
~
ICN_FLAGS_B2ACTIVE
;
icn_free_queue
(
card
,
1
);
spin_lock_irqsave
(
&
icn_lock
,
flags
);
card
->
rcvidx
[
1
]
=
0
;
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
cmd
.
arg
=
1
;
cmd
.
driver
=
card
->
myid
;
card
->
interface
.
statcallb
(
&
cmd
);
...
...
@@ -580,7 +588,7 @@ icn_putmsg(icn_card * card, unsigned char c)
{
ulong
flags
;
spin_lock_irqsave
(
&
icn_
lock
,
flags
);
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
*
card
->
msg_buf_write
++
=
(
c
==
0xff
)
?
'\n'
:
c
;
if
(
card
->
msg_buf_write
==
card
->
msg_buf_read
)
{
if
(
++
card
->
msg_buf_read
>
card
->
msg_buf_end
)
...
...
@@ -588,7 +596,7 @@ icn_putmsg(icn_card * card, unsigned char c)
}
if
(
card
->
msg_buf_write
>
card
->
msg_buf_end
)
card
->
msg_buf_write
=
card
->
msg_buf
;
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
}
static
void
...
...
@@ -666,22 +674,20 @@ icn_polldchan(unsigned long data)
cmd
.
arg
=
avail
;
card
->
interface
.
statcallb
(
&
cmd
);
}
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
if
(
card
->
flags
&
(
ICN_FLAGS_B1ACTIVE
|
ICN_FLAGS_B2ACTIVE
))
if
(
!
(
card
->
flags
&
ICN_FLAGS_RBTIMER
))
{
/* schedule b-channel polling */
card
->
flags
|=
ICN_FLAGS_RBTIMER
;
spin_lock_irqsave
(
&
icn_lock
,
flags
);
del_timer
(
&
card
->
rb_timer
);
card
->
rb_timer
.
function
=
icn_pollbchan
;
card
->
rb_timer
.
data
=
(
unsigned
long
)
card
;
card
->
rb_timer
.
expires
=
jiffies
+
ICN_TIMER_BCREAD
;
add_timer
(
&
card
->
rb_timer
);
spin_unlock_irqrestore
(
&
icn_lock
,
flags
);
}
/* schedule again */
spin_lock_irqsave
(
&
icn_lock
,
flags
);
mod_timer
(
&
card
->
st_timer
,
jiffies
+
ICN_TIMER_DCREAD
);
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
}
/* Append a packet to the transmit buffer-queue.
...
...
@@ -710,7 +716,7 @@ icn_sendbuf(int channel, int ack, struct sk_buff *skb, icn_card * card)
return
0
;
if
(
card
->
sndcount
[
channel
]
>
ICN_MAX_SQUEUE
)
return
0
;
spin_lock_irqsave
(
&
icn_lock
,
flags
);
#warning TODO test headroom or use skb->nb to flag ACK
nskb
=
skb_clone
(
skb
,
GFP_ATOMIC
);
if
(
nskb
)
{
/* Push ACK flag as one
...
...
@@ -721,8 +727,9 @@ icn_sendbuf(int channel, int ack, struct sk_buff *skb, icn_card * card)
dev_kfree_skb
(
skb
);
}
else
len
=
0
;
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
card
->
sndcount
[
channel
]
+=
len
;
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
}
return
len
;
}
...
...
@@ -844,10 +851,10 @@ icn_loadboot(u_char * buffer, icn_card * card)
#ifdef BOOT_DEBUG
printk
(
KERN_DEBUG
"Map Bank 0
\n
"
);
#endif
spin_lock_irqsave
(
&
icn_
lock
,
flags
);
spin_lock_irqsave
(
&
dev
.
dev
lock
,
flags
);
icn_map_channel
(
card
,
0
);
/* Select Bank 0 */
icn_lock_channel
(
card
,
0
);
/* Lock Bank 0 */
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
dev
.
dev
lock
,
flags
);
SLEEP
(
1
);
memcpy_toio
(
dev
.
shmem
,
codebuf
,
ICN_CODE_STAGE1
);
/* Copy code */
#ifdef BOOT_DEBUG
...
...
@@ -858,11 +865,11 @@ icn_loadboot(u_char * buffer, icn_card * card)
#ifdef BOOT_DEBUG
printk
(
KERN_DEBUG
"Map Bank 8
\n
"
);
#endif
spin_lock_irqsave
(
&
icn_
lock
,
flags
);
icn_release_channel
();
spin_lock_irqsave
(
&
dev
.
dev
lock
,
flags
);
__
icn_release_channel
();
icn_map_channel
(
card
,
2
);
/* Select Bank 8 */
icn_lock_channel
(
card
,
2
);
/* Lock Bank 8 */
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
dev
.
dev
lock
,
flags
);
SLEEP
(
1
);
memcpy_toio
(
dev
.
shmem
,
codebuf
,
ICN_CODE_STAGE1
);
/* Copy code */
#ifdef BOOT_DEBUG
...
...
@@ -882,10 +889,10 @@ icn_loadboot(u_char * buffer, icn_card * card)
#ifdef BOOT_DEBUG
printk
(
KERN_DEBUG
"Map Bank 0
\n
"
);
#endif
spin_lock_irqsave
(
&
icn_
lock
,
flags
);
spin_lock_irqsave
(
&
dev
.
dev
lock
,
flags
);
icn_map_channel
(
card
,
0
);
/* Select Bank 0 */
icn_lock_channel
(
card
,
0
);
/* Lock Bank 0 */
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
dev
.
dev
lock
,
flags
);
SLEEP
(
1
);
ret
=
(
icn_check_loader
(
1
));
...
...
@@ -912,7 +919,7 @@ icn_loadproto(u_char * buffer, icn_card * card)
if
((
ret
=
verify_area
(
VERIFY_READ
,
(
void
*
)
buffer
,
ICN_CODE_STAGE2
)))
return
ret
;
timer
=
0
;
spin_lock_irqsave
(
&
icn_
lock
,
flags
);
spin_lock_irqsave
(
&
dev
.
dev
lock
,
flags
);
if
(
card
->
secondhalf
)
{
icn_map_channel
(
card
,
2
);
icn_lock_channel
(
card
,
2
);
...
...
@@ -920,7 +927,7 @@ icn_loadproto(u_char * buffer, icn_card * card)
icn_map_channel
(
card
,
0
);
icn_lock_channel
(
card
,
0
);
}
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
dev
.
dev
lock
,
flags
);
while
(
left
)
{
if
(
sbfree
)
{
/* If there is a free buffer... */
cnt
=
left
;
...
...
@@ -975,7 +982,7 @@ icn_loadproto(u_char * buffer, icn_card * card)
printk
(
KERN_DEBUG
"Proto loaded, install poll-timer %d
\n
"
,
card
->
secondhalf
);
#endif
spin_lock_irqsave
(
&
icn_
lock
,
flags
);
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
init_timer
(
&
card
->
st_timer
);
card
->
st_timer
.
expires
=
jiffies
+
ICN_TIMER_DCREAD
;
card
->
st_timer
.
function
=
icn_polldchan
;
...
...
@@ -990,7 +997,7 @@ icn_loadproto(u_char * buffer, icn_card * card)
add_timer
(
&
card
->
other
->
st_timer
);
card
->
other
->
flags
|=
ICN_FLAGS_RUNNING
;
}
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
}
icn_maprelease_channel
(
card
,
0
);
return
0
;
...
...
@@ -1048,7 +1055,7 @@ icn_writecmd(const u_char * buf, int len, int user, icn_card * card)
}
else
memcpy
(
msg
,
buf
,
count
);
spin_lock_irqsave
(
&
icn_
lock
,
flags
);
spin_lock_irqsave
(
&
dev
.
dev
lock
,
flags
);
lastmap_card
=
dev
.
mcard
;
lastmap_channel
=
dev
.
channel
;
icn_map_channel
(
card
,
mch
);
...
...
@@ -1070,7 +1077,7 @@ icn_writecmd(const u_char * buf, int len, int user, icn_card * card)
writeb
((
readb
(
&
cmd_i
)
+
count
)
&
0xff
,
&
cmd_i
);
if
(
lastmap_card
)
icn_map_channel
(
lastmap_card
,
lastmap_channel
);
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
dev
.
dev
lock
,
flags
);
if
(
len
)
{
mdelay
(
1
);
if
(
loop
++
>
20
)
...
...
@@ -1096,18 +1103,19 @@ icn_stopcard(icn_card * card)
unsigned
long
flags
;
isdn_ctrl
cmd
;
spin_lock_irqsave
(
&
icn_
lock
,
flags
);
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
if
(
card
->
flags
&
ICN_FLAGS_RUNNING
)
{
card
->
flags
&=
~
ICN_FLAGS_RUNNING
;
del_timer
(
&
card
->
st_timer
);
del_timer
(
&
card
->
rb_timer
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
cmd
.
command
=
ISDN_STAT_STOP
;
cmd
.
driver
=
card
->
myid
;
card
->
interface
.
statcallb
(
&
cmd
);
if
(
card
->
doubleS0
)
icn_stopcard
(
card
->
other
);
}
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
}
else
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
}
static
void
...
...
@@ -1170,14 +1178,14 @@ icn_command(isdn_ctrl * c, icn_card * card)
}
release_mem_region
(
a
&
0x0ffc000
,
0x4000
);
icn_stopallcards
();
spin_lock_irqsave
(
&
icn_
lock
,
flags
);
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
if
(
dev
.
mvalid
)
{
iounmap
(
dev
.
shmem
);
release_mem_region
(
dev
.
memaddr
,
0x4000
);
}
dev
.
mvalid
=
0
;
dev
.
memaddr
=
a
&
0x0ffc000
;
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
printk
(
KERN_INFO
"icn: (%s) mmio set to 0x%08lx
\n
"
,
CID
,
...
...
@@ -1200,7 +1208,7 @@ icn_command(isdn_ctrl * c, icn_card * card)
}
release_region
((
unsigned
short
)
a
,
ICN_PORTLEN
);
icn_stopcard
(
card
);
spin_lock_irqsave
(
&
icn_
lock
,
flags
);
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
if
(
card
->
rvalid
)
release_region
(
card
->
port
,
ICN_PORTLEN
);
card
->
port
=
(
unsigned
short
)
a
;
...
...
@@ -1209,7 +1217,7 @@ icn_command(isdn_ctrl * c, icn_card * card)
card
->
other
->
port
=
(
unsigned
short
)
a
;
card
->
other
->
rvalid
=
0
;
}
spin_unlock_irqrestore
(
&
icn_
lock
,
flags
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
printk
(
KERN_INFO
"icn: (%s) port set to 0x%03x
\n
"
,
CID
,
card
->
port
);
...
...
@@ -1522,6 +1530,7 @@ icn_initcard(int port, char *id)
return
(
icn_card
*
)
0
;
}
memset
((
char
*
)
card
,
0
,
sizeof
(
icn_card
));
spin_lock_init
(
&
card
->
lock
);
card
->
port
=
port
;
card
->
interface
.
owner
=
THIS_MODULE
;
card
->
interface
.
hl_hdrlen
=
1
;
...
...
@@ -1629,6 +1638,7 @@ static int __init icn_init(void)
dev
.
channel
=
-
1
;
dev
.
mcard
=
NULL
;
dev
.
firstload
=
1
;
spin_lock_init
(
&
dev
.
devlock
);
if
((
p
=
strchr
(
revision
,
':'
)))
{
strcpy
(
rev
,
p
+
1
);
...
...
@@ -1647,12 +1657,14 @@ static void __exit icn_exit(void)
icn_card
*
card
=
cards
;
icn_card
*
last
;
int
i
;
unsigned
long
flags
;
icn_stopallcards
();
while
(
card
)
{
cmd
.
command
=
ISDN_STAT_UNLOAD
;
cmd
.
driver
=
card
->
myid
;
card
->
interface
.
statcallb
(
&
cmd
);
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
if
(
card
->
rvalid
)
{
OUTB_P
(
0
,
ICN_RUN
);
/* Reset Controller */
OUTB_P
(
0
,
ICN_MAPRAM
);
/* Disable RAM */
...
...
@@ -1664,8 +1676,10 @@ static void __exit icn_exit(void)
icn_free_queue
(
card
,
i
);
}
card
=
card
->
next
;
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
}
card
=
cards
;
cards
=
NULL
;
while
(
card
)
{
last
=
card
;
card
=
card
->
next
;
...
...
drivers/isdn/icn/icn.h
View file @
39ed3b25
...
...
@@ -162,18 +162,18 @@ typedef struct icn_card {
char
*
msg_buf_end
;
/* Pointer to end of statusbuffer */
int
sndcount
[
ICN_BCH
];
/* Byte-counters for B-Ch.-send */
int
xlen
[
ICN_BCH
];
/* Byte-counters/Flags for sent-ACK */
struct
sk_buff
*
xskb
[
ICN_BCH
];
/* Current transmitted skb */
struct
sk_buff_head
spqueue
[
ICN_BCH
];
/* Sendqueue */
struct
sk_buff
*
xskb
[
ICN_BCH
];
/* Current transmitted skb */
struct
sk_buff_head
spqueue
[
ICN_BCH
];
/* Sendqueue */
char
regname
[
35
];
/* Name used for request_region */
u_char
xmit_lock
[
ICN_BCH
];
/* Semaphore for pollbchan_send() */
u_char
xmit_lock
[
ICN_BCH
];
/* Semaphore for pollbchan_send()*/
spinlock_t
lock
;
/* protect critical operations */
}
icn_card
;
/*
* Main driver data
*/
typedef
struct
icn_dev
{
spinlock_t
devlock
;
/* spinlock to protect this struct */
unsigned
long
memaddr
;
/* Address of memory mapped buffers */
icn_shmem
*
shmem
;
/* Pointer to memory-mapped-buffers */
int
mvalid
;
/* IO-shmem has been requested */
...
...
drivers/media/dvb/frontends/Kconfig
View file @
39ed3b25
...
...
@@ -117,7 +117,7 @@ config DVB_VES1820
config DVB_TDA1004X
tristate "Frontends with external TDA1004X demodulators (OFDM)"
depends on DVB_CORE
depends on DVB_CORE
&& !STANDALONE
help
A DVB-T tuner module. Say Y when you want to support this frontend.
...
...
drivers/media/dvb/ttusb-dec/Kconfig
View file @
39ed3b25
config DVB_TTUSB_DEC
tristate "Technotrend/Hauppauge USB DEC2000-T devices"
depends on DVB_CORE && USB
depends on DVB_CORE && USB
&& !STANDALONE
help
Support for external USB adapters designed by Technotrend and
produced by Hauppauge, shipped under the brand name 'DEC2000-T'.
...
...
drivers/pcmcia/cs.c
View file @
39ed3b25
...
...
@@ -1061,7 +1061,7 @@ int pcmcia_bind_mtd(mtd_bind_t *req)
/*====================================================================*/
int
pcmcia_deregister_client
R
(
client_handle_t
handle
)
int
pcmcia_deregister_client
(
client_handle_t
handle
)
{
client_t
**
client
;
struct
pcmcia_socket
*
s
;
...
...
include/linux/coda.h
View file @
39ed3b25
...
...
@@ -324,7 +324,7 @@ struct coda_statfs {
#define VC_MAXMSGSIZE sizeof(union inputArgs)+sizeof(union outputArgs) +\
VC_MAXDATASIZE
#define CIOC_KERNEL_VERSION _IOWR('c', 10, size
of (int)
)
#define CIOC_KERNEL_VERSION _IOWR('c', 10, size
_t
)
#if 0
#define CODA_KERNEL_VERSION 0 /* don't care about kernel version number */
...
...
include/linux/fs.h
View file @
39ed3b25
...
...
@@ -188,15 +188,18 @@ extern int leases_enable, dir_notify_enable, lease_break_time;
#define BLKSSZGET _IO(0x12,104)
/* get block device sector size */
#if 0
#define BLKPG _IO(0x12,105)/* See blkpg.h */
#define BLKELVGET _IOR(0x12,106,sizeof(blkelv_ioctl_arg_t))/* elevator get */
#define BLKELVSET _IOW(0x12,107,sizeof(blkelv_ioctl_arg_t))/* elevator set */
/* Some people are morons. Do not use sizeof! */
#define BLKELVGET _IOR(0x12,106,size_t)/* elevator get */
#define BLKELVSET _IOW(0x12,107,size_t)/* elevator set */
/* This was here just to show that the number is taken -
probably all these _IO(0x12,*) ioctls should be moved to blkpg.h. */
#endif
/* A jump here: 108-111 have been used for various private purposes. */
#define BLKBSZGET _IOR(0x12,112,size
of(int)
)
#define BLKBSZSET _IOW(0x12,113,size
of(int)
)
#define BLKGETSIZE64 _IOR(0x12,114,size
of(u64)
)
/* return device size in bytes (u64 *arg) */
#define BLKBSZGET _IOR(0x12,112,size
_t
)
#define BLKBSZSET _IOW(0x12,113,size
_t
)
#define BLKGETSIZE64 _IOR(0x12,114,size
_t
)
/* return device size in bytes (u64 *arg) */
#define BMAP_IOCTL 1
/* obsolete - kept for compatibility */
#define FIBMAP _IO(0x00,1)
/* bmap access */
...
...
include/linux/i8k.h
View file @
39ed3b25
...
...
@@ -22,12 +22,12 @@
#define I8K_BIOS_VERSION _IOR ('i', 0x80, 4)
#define I8K_MACHINE_ID _IOR ('i', 0x81, 16)
#define I8K_POWER_STATUS _IOR ('i', 0x82, size
of(int)
)
#define I8K_FN_STATUS _IOR ('i', 0x83, size
of(int)
)
#define I8K_GET_TEMP _IOR ('i', 0x84, size
of(int)
)
#define I8K_GET_SPEED _IOWR('i', 0x85, size
of(int)
)
#define I8K_GET_FAN _IOWR('i', 0x86, size
of(int)
)
#define I8K_SET_FAN _IOWR('i', 0x87, size
of(int)*2
)
#define I8K_POWER_STATUS _IOR ('i', 0x82, size
_t
)
#define I8K_FN_STATUS _IOR ('i', 0x83, size
_t
)
#define I8K_GET_TEMP _IOR ('i', 0x84, size
_t
)
#define I8K_GET_SPEED _IOWR('i', 0x85, size
_t
)
#define I8K_GET_FAN _IOWR('i', 0x86, size
_t
)
#define I8K_SET_FAN _IOWR('i', 0x87, size
_t
)
#define I8K_FAN_LEFT 1
#define I8K_FAN_RIGHT 0
...
...
include/linux/if_pppox.h
View file @
39ed3b25
...
...
@@ -67,9 +67,9 @@ struct sockaddr_pppox {
*
********************************************************************/
#define PPPOEIOCSFWD _IOW(0xB1 ,0, size
of(struct sockaddr_pppox)
)
#define PPPOEIOCSFWD _IOW(0xB1 ,0, size
_t
)
#define PPPOEIOCDFWD _IO(0xB1 ,1)
/*#define PPPOEIOCGFWD _IOWR(0xB1,2, size
of(struct sockaddr_pppox)
)*/
/*#define PPPOEIOCGFWD _IOWR(0xB1,2, size
_t
)*/
/* Codes to identify message types */
#define PADI_CODE 0x09
...
...
include/linux/isdn.h
View file @
39ed3b25
...
...
@@ -385,9 +385,8 @@ typedef struct {
}
infostruct
;
/* Main driver-data */
typedef
struct
isdn_dev
t
{
typedef
struct
_isdn_dev_
t
{
unsigned
short
flags
;
/* Bitmapped Flags: */
/* */
int
channels
;
/* Current number of channels */
int
net_verbose
;
/* Verbose-Flag */
int
modempoll
;
/* Flag: tty-read active */
...
...
@@ -399,10 +398,9 @@ typedef struct isdn_devt {
struct
task_struct
*
profd
;
/* For iprofd */
struct
semaphore
sem
;
/* serialize list access*/
unsigned
long
global_features
;
}
isdn_dev
;
extern
isdn_dev
*
dev
;
}
isdn_dev_t
;
extern
isdn_dev_t
*
get_isdn_dev
(
void
);
#endif
/* __KERNEL__ */
...
...
include/linux/matroxfb.h
View file @
39ed3b25
...
...
@@ -15,21 +15,21 @@ struct matroxioc_output_mode {
#define MATROXFB_OUTPUT_MODE_NTSC 0x0002
#define MATROXFB_OUTPUT_MODE_MONITOR 0x0080
};
#define MATROXFB_SET_OUTPUT_MODE _IOW('n',0xFA,size
of(struct matroxioc_output_mode)
)
#define MATROXFB_GET_OUTPUT_MODE _IOWR('n',0xFA,size
of(struct matroxioc_output_mode)
)
#define MATROXFB_SET_OUTPUT_MODE _IOW('n',0xFA,size
_t
)
#define MATROXFB_GET_OUTPUT_MODE _IOWR('n',0xFA,size
_t
)
/* bitfield */
#define MATROXFB_OUTPUT_CONN_PRIMARY (1 << MATROXFB_OUTPUT_PRIMARY)
#define MATROXFB_OUTPUT_CONN_SECONDARY (1 << MATROXFB_OUTPUT_SECONDARY)
#define MATROXFB_OUTPUT_CONN_DFP (1 << MATROXFB_OUTPUT_DFP)
/* connect these outputs to this framebuffer */
#define MATROXFB_SET_OUTPUT_CONNECTION _IOW('n',0xF8,size
of(__u32)
)
#define MATROXFB_SET_OUTPUT_CONNECTION _IOW('n',0xF8,size
_t
)
/* which outputs are connected to this framebuffer */
#define MATROXFB_GET_OUTPUT_CONNECTION _IOR('n',0xF8,size
of(__u32)
)
#define MATROXFB_GET_OUTPUT_CONNECTION _IOR('n',0xF8,size
_t
)
/* which outputs are available for this framebuffer */
#define MATROXFB_GET_AVAILABLE_OUTPUTS _IOR('n',0xF9,size
of(__u32)
)
#define MATROXFB_GET_AVAILABLE_OUTPUTS _IOR('n',0xF9,size
_t
)
/* which outputs exist on this framebuffer */
#define MATROXFB_GET_ALL_OUTPUTS _IOR('n',0xFB,size
of(__u32)
)
#define MATROXFB_GET_ALL_OUTPUTS _IOR('n',0xFB,size
_t
)
enum
matroxfb_ctrl_id
{
MATROXFB_CID_TESTOUT
=
V4L2_CID_PRIVATE_BASE
,
...
...
include/linux/pmu.h
View file @
39ed3b25
...
...
@@ -122,15 +122,15 @@ enum {
/* no param */
#define PMU_IOC_SLEEP _IO('B', 0)
/* out param: u32* backlight value: 0 to 15 */
#define PMU_IOC_GET_BACKLIGHT _IOR('B', 1, size
of(__u32*)
)
#define PMU_IOC_GET_BACKLIGHT _IOR('B', 1, size
_t
)
/* in param: u32 backlight value: 0 to 15 */
#define PMU_IOC_SET_BACKLIGHT _IOW('B', 2, size
of(__u32)
)
#define PMU_IOC_SET_BACKLIGHT _IOW('B', 2, size
_t
)
/* out param: u32* PMU model */
#define PMU_IOC_GET_MODEL _IOR('B', 3, size
of(__u32*)
)
#define PMU_IOC_GET_MODEL _IOR('B', 3, size
_t
)
/* out param: u32* has_adb: 0 or 1 */
#define PMU_IOC_HAS_ADB _IOR('B', 4, size
of(__u32*)
)
#define PMU_IOC_HAS_ADB _IOR('B', 4, size
_t
)
/* out param: u32* can_sleep: 0 or 1 */
#define PMU_IOC_CAN_SLEEP _IOR('B', 5, size
of(__u32*)
)
#define PMU_IOC_CAN_SLEEP _IOR('B', 5, size
_t
)
/* no param */
#define PMU_IOC_GRAB_BACKLIGHT _IOR('B', 6, 0)
...
...
include/linux/radeonfb.h
View file @
39ed3b25
...
...
@@ -8,8 +8,8 @@
#define ATY_RADEON_CRT_ON 0x00000002
#define FBIO_RADEON_GET_MIRROR _IOR('@', 3, size
of(__u32*)
)
#define FBIO_RADEON_SET_MIRROR _IOW('@', 4, size
of(__u32*)
)
#define FBIO_RADEON_GET_MIRROR _IOR('@', 3, size
_t
)
#define FBIO_RADEON_SET_MIRROR _IOW('@', 4, size
_t
)
#endif
init/Kconfig
View file @
39ed3b25
...
...
@@ -41,6 +41,15 @@ config CLEAN_COMPILE
If unsure, say Y
config STANDALONE
bool "Select only drivers that don't need compile-time external firmware" if EXPERIMENTAL
default y
help
Select this option if you don't have magic firmware for drivers that
need it.
If unsure, say Y.
config BROKEN
bool
depends on !CLEAN_COMPILE
...
...
scripts/genksyms/Makefile
View file @
39ed3b25
...
...
@@ -4,12 +4,14 @@ always := $(host-progs)
genksyms-objs
:=
genksyms.o parse.o lex.o
HOSTCFLAGS_parse.o
:=
-Wno-uninitialized
# -I needed for generated C source (shipped source)
HOSTCFLAGS_parse.o
:=
-Wno-uninitialized
-I
$(src)
# dependencies on generated files need to be listed explicitly
$(obj)/lex.o
:
$(obj)/parse.h $(obj)/keywords.c
# -I needed for generated C source (shipped source)
HOSTCFLAGS_lex.o
:=
-I
$(src)
ifdef
GENERATE_PARSER
...
...
sound/oss/Kconfig
View file @
39ed3b25
...
...
@@ -319,7 +319,7 @@ config SOUND_TRIDENT
config SOUND_MSNDCLAS
tristate "Support for Turtle Beach MultiSound Classic, Tahiti, Monterey"
depends on SOUND_PRIME!=n && SOUND
depends on SOUND_PRIME!=n && SOUND
&& !STANDALONE
help
Say M here if you have a Turtle Beach MultiSound Classic, Tahiti or
Monterey (not for the Pinnacle or Fiji).
...
...
@@ -334,7 +334,7 @@ comment "Compiled-in MSND Classic support requires firmware during compilation."
config MSNDCLAS_HAVE_BOOT
bool
depends on SOUND_MSNDCLAS=y
depends on SOUND_MSNDCLAS=y
&& !STANDALONE
default y
config MSNDCLAS_INIT_FILE
...
...
@@ -383,7 +383,7 @@ config MSNDCLAS_IO
config SOUND_MSNDPIN
tristate "Support for Turtle Beach MultiSound Pinnacle, Fiji"
depends on SOUND_PRIME!=n && SOUND
depends on SOUND_PRIME!=n && SOUND
&& !STANDALONE
help
Say M here if you have a Turtle Beach MultiSound Pinnacle or Fiji.
See <file:Documentation/sound/oss/MultiSound> for important information
...
...
@@ -714,7 +714,7 @@ config SOUND_TRIX
config TRIX_HAVE_BOOT
bool "Have TRXPRO.HEX firmware file"
depends on SOUND_TRIX=y
depends on SOUND_TRIX=y
&& !STANDALONE
help
The MediaTrix AudioTrix Pro has an on-board microcontroller which
needs to be initialized by downloading the code from the file
...
...
@@ -869,7 +869,7 @@ config PSS_MIXER
config PSS_HAVE_BOOT
bool "Have DSPxxx.LD firmware file"
depends on SOUND_PSS
depends on SOUND_PSS
&& !STANDALONE
help
If you have the DSPxxx.LD file or SYNTH.LD file for you card, say Y
to include this file. Without this file the synth device (OPL) may
...
...
@@ -940,7 +940,7 @@ config SOUND_MAUI
config MAUI_HAVE_BOOT
bool "Have OSWF.MOT firmware file"
depends on SOUND_MAUI=y
depends on SOUND_MAUI=y
&& !STANDALONE
help
Turtle Beach Maui and Tropez sound cards have a microcontroller
which needs to be initialized prior to use. OSWF.MOT is a file
...
...
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