diff options
author | Alexey Dobriyan <adobriyan@gmail.com> | 2010-01-14 06:10:54 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-01-14 06:10:54 -0500 |
commit | 9a58a80a701bdb2d220cdab4914218df5b48d781 (patch) | |
tree | 01eeb65ec70f22ec326d0938d002cc6a2aec73e8 /drivers/isdn/hardware | |
parent | 508e14b4a4fb1a824a14f2c5b8d7df67b313f8e4 (diff) |
proc_fops: convert drivers/isdn/ to seq_file
Convert code away from ->read_proc/->write_proc interfaces. Switch to
proc_create()/proc_create_data() which make addition of proc entries
reliable wrt NULL ->proc_fops, NULL ->data and so on.
Problem with ->read_proc et al is described here commit
786d7e1612f0b0adb6046f19b906609e4fe8b1ba "Fix rmmod/read/write races in
/proc entries"
[akpm@linux-foundation.org: CONFIG_PROC_FS=n build fix]
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Tilman Schmidt <tilman@imap.cc>
Signed-off-by: Karsten Keil <keil@b1-systems.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/isdn/hardware')
-rw-r--r-- | drivers/isdn/hardware/avm/avmcard.h | 6 | ||||
-rw-r--r-- | drivers/isdn/hardware/avm/b1.c | 54 | ||||
-rw-r--r-- | drivers/isdn/hardware/avm/b1dma.c | 71 | ||||
-rw-r--r-- | drivers/isdn/hardware/avm/b1isa.c | 2 | ||||
-rw-r--r-- | drivers/isdn/hardware/avm/b1pci.c | 4 | ||||
-rw-r--r-- | drivers/isdn/hardware/avm/b1pcmcia.c | 2 | ||||
-rw-r--r-- | drivers/isdn/hardware/avm/c4.c | 53 | ||||
-rw-r--r-- | drivers/isdn/hardware/avm/t1isa.c | 2 | ||||
-rw-r--r-- | drivers/isdn/hardware/avm/t1pci.c | 2 | ||||
-rw-r--r-- | drivers/isdn/hardware/eicon/capimain.c | 40 | ||||
-rw-r--r-- | drivers/isdn/hardware/eicon/diva_didd.c | 45 | ||||
-rw-r--r-- | drivers/isdn/hardware/eicon/divasi.c | 48 | ||||
-rw-r--r-- | drivers/isdn/hardware/eicon/divasproc.c | 198 |
13 files changed, 267 insertions, 260 deletions
diff --git a/drivers/isdn/hardware/avm/avmcard.h b/drivers/isdn/hardware/avm/avmcard.h index d964f07e4a56..a70e8854461d 100644 --- a/drivers/isdn/hardware/avm/avmcard.h +++ b/drivers/isdn/hardware/avm/avmcard.h | |||
@@ -556,8 +556,7 @@ u16 b1_send_message(struct capi_ctr *ctrl, struct sk_buff *skb); | |||
556 | void b1_parse_version(avmctrl_info *card); | 556 | void b1_parse_version(avmctrl_info *card); |
557 | irqreturn_t b1_interrupt(int interrupt, void *devptr); | 557 | irqreturn_t b1_interrupt(int interrupt, void *devptr); |
558 | 558 | ||
559 | int b1ctl_read_proc(char *page, char **start, off_t off, | 559 | extern const struct file_operations b1ctl_proc_fops; |
560 | int count, int *eof, struct capi_ctr *ctrl); | ||
561 | 560 | ||
562 | avmcard_dmainfo *avmcard_dma_alloc(char *name, struct pci_dev *, | 561 | avmcard_dmainfo *avmcard_dma_alloc(char *name, struct pci_dev *, |
563 | long rsize, long ssize); | 562 | long rsize, long ssize); |
@@ -577,7 +576,6 @@ void b1dma_register_appl(struct capi_ctr *ctrl, | |||
577 | capi_register_params *rp); | 576 | capi_register_params *rp); |
578 | void b1dma_release_appl(struct capi_ctr *ctrl, u16 appl); | 577 | void b1dma_release_appl(struct capi_ctr *ctrl, u16 appl); |
579 | u16 b1dma_send_message(struct capi_ctr *ctrl, struct sk_buff *skb); | 578 | u16 b1dma_send_message(struct capi_ctr *ctrl, struct sk_buff *skb); |
580 | int b1dmactl_read_proc(char *page, char **start, off_t off, | 579 | extern const struct file_operations b1dmactl_proc_fops; |
581 | int count, int *eof, struct capi_ctr *ctrl); | ||
582 | 580 | ||
583 | #endif /* _AVMCARD_H_ */ | 581 | #endif /* _AVMCARD_H_ */ |
diff --git a/drivers/isdn/hardware/avm/b1.c b/drivers/isdn/hardware/avm/b1.c index a7c0083e78a7..c38fa0f4c729 100644 --- a/drivers/isdn/hardware/avm/b1.c +++ b/drivers/isdn/hardware/avm/b1.c | |||
@@ -12,6 +12,8 @@ | |||
12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/pci.h> | 14 | #include <linux/pci.h> |
15 | #include <linux/proc_fs.h> | ||
16 | #include <linux/seq_file.h> | ||
15 | #include <linux/skbuff.h> | 17 | #include <linux/skbuff.h> |
16 | #include <linux/delay.h> | 18 | #include <linux/delay.h> |
17 | #include <linux/mm.h> | 19 | #include <linux/mm.h> |
@@ -634,18 +636,17 @@ irqreturn_t b1_interrupt(int interrupt, void *devptr) | |||
634 | } | 636 | } |
635 | 637 | ||
636 | /* ------------------------------------------------------------- */ | 638 | /* ------------------------------------------------------------- */ |
637 | int b1ctl_read_proc(char *page, char **start, off_t off, | 639 | static int b1ctl_proc_show(struct seq_file *m, void *v) |
638 | int count, int *eof, struct capi_ctr *ctrl) | ||
639 | { | 640 | { |
641 | struct capi_ctr *ctrl = m->private; | ||
640 | avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata); | 642 | avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata); |
641 | avmcard *card = cinfo->card; | 643 | avmcard *card = cinfo->card; |
642 | u8 flag; | 644 | u8 flag; |
643 | int len = 0; | ||
644 | char *s; | 645 | char *s; |
645 | 646 | ||
646 | len += sprintf(page+len, "%-16s %s\n", "name", card->name); | 647 | seq_printf(m, "%-16s %s\n", "name", card->name); |
647 | len += sprintf(page+len, "%-16s 0x%x\n", "io", card->port); | 648 | seq_printf(m, "%-16s 0x%x\n", "io", card->port); |
648 | len += sprintf(page+len, "%-16s %d\n", "irq", card->irq); | 649 | seq_printf(m, "%-16s %d\n", "irq", card->irq); |
649 | switch (card->cardtype) { | 650 | switch (card->cardtype) { |
650 | case avm_b1isa: s = "B1 ISA"; break; | 651 | case avm_b1isa: s = "B1 ISA"; break; |
651 | case avm_b1pci: s = "B1 PCI"; break; | 652 | case avm_b1pci: s = "B1 PCI"; break; |
@@ -658,20 +659,20 @@ int b1ctl_read_proc(char *page, char **start, off_t off, | |||
658 | case avm_c2: s = "C2"; break; | 659 | case avm_c2: s = "C2"; break; |
659 | default: s = "???"; break; | 660 | default: s = "???"; break; |
660 | } | 661 | } |
661 | len += sprintf(page+len, "%-16s %s\n", "type", s); | 662 | seq_printf(m, "%-16s %s\n", "type", s); |
662 | if (card->cardtype == avm_t1isa) | 663 | if (card->cardtype == avm_t1isa) |
663 | len += sprintf(page+len, "%-16s %d\n", "cardnr", card->cardnr); | 664 | seq_printf(m, "%-16s %d\n", "cardnr", card->cardnr); |
664 | if ((s = cinfo->version[VER_DRIVER]) != NULL) | 665 | if ((s = cinfo->version[VER_DRIVER]) != NULL) |
665 | len += sprintf(page+len, "%-16s %s\n", "ver_driver", s); | 666 | seq_printf(m, "%-16s %s\n", "ver_driver", s); |
666 | if ((s = cinfo->version[VER_CARDTYPE]) != NULL) | 667 | if ((s = cinfo->version[VER_CARDTYPE]) != NULL) |
667 | len += sprintf(page+len, "%-16s %s\n", "ver_cardtype", s); | 668 | seq_printf(m, "%-16s %s\n", "ver_cardtype", s); |
668 | if ((s = cinfo->version[VER_SERIAL]) != NULL) | 669 | if ((s = cinfo->version[VER_SERIAL]) != NULL) |
669 | len += sprintf(page+len, "%-16s %s\n", "ver_serial", s); | 670 | seq_printf(m, "%-16s %s\n", "ver_serial", s); |
670 | 671 | ||
671 | if (card->cardtype != avm_m1) { | 672 | if (card->cardtype != avm_m1) { |
672 | flag = ((u8 *)(ctrl->profile.manu))[3]; | 673 | flag = ((u8 *)(ctrl->profile.manu))[3]; |
673 | if (flag) | 674 | if (flag) |
674 | len += sprintf(page+len, "%-16s%s%s%s%s%s%s%s\n", | 675 | seq_printf(m, "%-16s%s%s%s%s%s%s%s\n", |
675 | "protocol", | 676 | "protocol", |
676 | (flag & 0x01) ? " DSS1" : "", | 677 | (flag & 0x01) ? " DSS1" : "", |
677 | (flag & 0x02) ? " CT1" : "", | 678 | (flag & 0x02) ? " CT1" : "", |
@@ -685,7 +686,7 @@ int b1ctl_read_proc(char *page, char **start, off_t off, | |||
685 | if (card->cardtype != avm_m1) { | 686 | if (card->cardtype != avm_m1) { |
686 | flag = ((u8 *)(ctrl->profile.manu))[5]; | 687 | flag = ((u8 *)(ctrl->profile.manu))[5]; |
687 | if (flag) | 688 | if (flag) |
688 | len += sprintf(page+len, "%-16s%s%s%s%s\n", | 689 | seq_printf(m, "%-16s%s%s%s%s\n", |
689 | "linetype", | 690 | "linetype", |
690 | (flag & 0x01) ? " point to point" : "", | 691 | (flag & 0x01) ? " point to point" : "", |
691 | (flag & 0x02) ? " point to multipoint" : "", | 692 | (flag & 0x02) ? " point to multipoint" : "", |
@@ -693,16 +694,25 @@ int b1ctl_read_proc(char *page, char **start, off_t off, | |||
693 | (flag & 0x04) ? " leased line with D-channel" : "" | 694 | (flag & 0x04) ? " leased line with D-channel" : "" |
694 | ); | 695 | ); |
695 | } | 696 | } |
696 | len += sprintf(page+len, "%-16s %s\n", "cardname", cinfo->cardname); | 697 | seq_printf(m, "%-16s %s\n", "cardname", cinfo->cardname); |
697 | 698 | ||
698 | if (off+count >= len) | 699 | return 0; |
699 | *eof = 1; | 700 | } |
700 | if (len < off) | 701 | |
701 | return 0; | 702 | static int b1ctl_proc_open(struct inode *inode, struct file *file) |
702 | *start = page + off; | 703 | { |
703 | return ((count < len-off) ? count : len-off); | 704 | return single_open(file, b1ctl_proc_show, PDE(inode)->data); |
704 | } | 705 | } |
705 | 706 | ||
707 | const struct file_operations b1ctl_proc_fops = { | ||
708 | .owner = THIS_MODULE, | ||
709 | .open = b1ctl_proc_open, | ||
710 | .read = seq_read, | ||
711 | .llseek = seq_lseek, | ||
712 | .release = single_release, | ||
713 | }; | ||
714 | EXPORT_SYMBOL(b1ctl_proc_fops); | ||
715 | |||
706 | /* ------------------------------------------------------------- */ | 716 | /* ------------------------------------------------------------- */ |
707 | 717 | ||
708 | #ifdef CONFIG_PCI | 718 | #ifdef CONFIG_PCI |
@@ -781,8 +791,6 @@ EXPORT_SYMBOL(b1_send_message); | |||
781 | EXPORT_SYMBOL(b1_parse_version); | 791 | EXPORT_SYMBOL(b1_parse_version); |
782 | EXPORT_SYMBOL(b1_interrupt); | 792 | EXPORT_SYMBOL(b1_interrupt); |
783 | 793 | ||
784 | EXPORT_SYMBOL(b1ctl_read_proc); | ||
785 | |||
786 | static int __init b1_init(void) | 794 | static int __init b1_init(void) |
787 | { | 795 | { |
788 | char *p; | 796 | char *p; |
diff --git a/drivers/isdn/hardware/avm/b1dma.c b/drivers/isdn/hardware/avm/b1dma.c index 0e84aaae43fd..124550d0dbf3 100644 --- a/drivers/isdn/hardware/avm/b1dma.c +++ b/drivers/isdn/hardware/avm/b1dma.c | |||
@@ -11,6 +11,8 @@ | |||
11 | 11 | ||
12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/proc_fs.h> | ||
15 | #include <linux/seq_file.h> | ||
14 | #include <linux/skbuff.h> | 16 | #include <linux/skbuff.h> |
15 | #include <linux/delay.h> | 17 | #include <linux/delay.h> |
16 | #include <linux/mm.h> | 18 | #include <linux/mm.h> |
@@ -855,21 +857,20 @@ u16 b1dma_send_message(struct capi_ctr *ctrl, struct sk_buff *skb) | |||
855 | 857 | ||
856 | /* ------------------------------------------------------------- */ | 858 | /* ------------------------------------------------------------- */ |
857 | 859 | ||
858 | int b1dmactl_read_proc(char *page, char **start, off_t off, | 860 | static int b1dmactl_proc_show(struct seq_file *m, void *v) |
859 | int count, int *eof, struct capi_ctr *ctrl) | ||
860 | { | 861 | { |
862 | struct capi_ctr *ctrl = m->private; | ||
861 | avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata); | 863 | avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata); |
862 | avmcard *card = cinfo->card; | 864 | avmcard *card = cinfo->card; |
863 | u8 flag; | 865 | u8 flag; |
864 | int len = 0; | ||
865 | char *s; | 866 | char *s; |
866 | u32 txoff, txlen, rxoff, rxlen, csr; | 867 | u32 txoff, txlen, rxoff, rxlen, csr; |
867 | unsigned long flags; | 868 | unsigned long flags; |
868 | 869 | ||
869 | len += sprintf(page+len, "%-16s %s\n", "name", card->name); | 870 | seq_printf(m, "%-16s %s\n", "name", card->name); |
870 | len += sprintf(page+len, "%-16s 0x%x\n", "io", card->port); | 871 | seq_printf(m, "%-16s 0x%x\n", "io", card->port); |
871 | len += sprintf(page+len, "%-16s %d\n", "irq", card->irq); | 872 | seq_printf(m, "%-16s %d\n", "irq", card->irq); |
872 | len += sprintf(page+len, "%-16s 0x%lx\n", "membase", card->membase); | 873 | seq_printf(m, "%-16s 0x%lx\n", "membase", card->membase); |
873 | switch (card->cardtype) { | 874 | switch (card->cardtype) { |
874 | case avm_b1isa: s = "B1 ISA"; break; | 875 | case avm_b1isa: s = "B1 ISA"; break; |
875 | case avm_b1pci: s = "B1 PCI"; break; | 876 | case avm_b1pci: s = "B1 PCI"; break; |
@@ -882,18 +883,18 @@ int b1dmactl_read_proc(char *page, char **start, off_t off, | |||
882 | case avm_c2: s = "C2"; break; | 883 | case avm_c2: s = "C2"; break; |
883 | default: s = "???"; break; | 884 | default: s = "???"; break; |
884 | } | 885 | } |
885 | len += sprintf(page+len, "%-16s %s\n", "type", s); | 886 | seq_printf(m, "%-16s %s\n", "type", s); |
886 | if ((s = cinfo->version[VER_DRIVER]) != NULL) | 887 | if ((s = cinfo->version[VER_DRIVER]) != NULL) |
887 | len += sprintf(page+len, "%-16s %s\n", "ver_driver", s); | 888 | seq_printf(m, "%-16s %s\n", "ver_driver", s); |
888 | if ((s = cinfo->version[VER_CARDTYPE]) != NULL) | 889 | if ((s = cinfo->version[VER_CARDTYPE]) != NULL) |
889 | len += sprintf(page+len, "%-16s %s\n", "ver_cardtype", s); | 890 | seq_printf(m, "%-16s %s\n", "ver_cardtype", s); |
890 | if ((s = cinfo->version[VER_SERIAL]) != NULL) | 891 | if ((s = cinfo->version[VER_SERIAL]) != NULL) |
891 | len += sprintf(page+len, "%-16s %s\n", "ver_serial", s); | 892 | seq_printf(m, "%-16s %s\n", "ver_serial", s); |
892 | 893 | ||
893 | if (card->cardtype != avm_m1) { | 894 | if (card->cardtype != avm_m1) { |
894 | flag = ((u8 *)(ctrl->profile.manu))[3]; | 895 | flag = ((u8 *)(ctrl->profile.manu))[3]; |
895 | if (flag) | 896 | if (flag) |
896 | len += sprintf(page+len, "%-16s%s%s%s%s%s%s%s\n", | 897 | seq_printf(m, "%-16s%s%s%s%s%s%s%s\n", |
897 | "protocol", | 898 | "protocol", |
898 | (flag & 0x01) ? " DSS1" : "", | 899 | (flag & 0x01) ? " DSS1" : "", |
899 | (flag & 0x02) ? " CT1" : "", | 900 | (flag & 0x02) ? " CT1" : "", |
@@ -907,7 +908,7 @@ int b1dmactl_read_proc(char *page, char **start, off_t off, | |||
907 | if (card->cardtype != avm_m1) { | 908 | if (card->cardtype != avm_m1) { |
908 | flag = ((u8 *)(ctrl->profile.manu))[5]; | 909 | flag = ((u8 *)(ctrl->profile.manu))[5]; |
909 | if (flag) | 910 | if (flag) |
910 | len += sprintf(page+len, "%-16s%s%s%s%s\n", | 911 | seq_printf(m, "%-16s%s%s%s%s\n", |
911 | "linetype", | 912 | "linetype", |
912 | (flag & 0x01) ? " point to point" : "", | 913 | (flag & 0x01) ? " point to point" : "", |
913 | (flag & 0x02) ? " point to multipoint" : "", | 914 | (flag & 0x02) ? " point to multipoint" : "", |
@@ -915,7 +916,7 @@ int b1dmactl_read_proc(char *page, char **start, off_t off, | |||
915 | (flag & 0x04) ? " leased line with D-channel" : "" | 916 | (flag & 0x04) ? " leased line with D-channel" : "" |
916 | ); | 917 | ); |
917 | } | 918 | } |
918 | len += sprintf(page+len, "%-16s %s\n", "cardname", cinfo->cardname); | 919 | seq_printf(m, "%-16s %s\n", "cardname", cinfo->cardname); |
919 | 920 | ||
920 | 921 | ||
921 | spin_lock_irqsave(&card->lock, flags); | 922 | spin_lock_irqsave(&card->lock, flags); |
@@ -930,27 +931,30 @@ int b1dmactl_read_proc(char *page, char **start, off_t off, | |||
930 | 931 | ||
931 | spin_unlock_irqrestore(&card->lock, flags); | 932 | spin_unlock_irqrestore(&card->lock, flags); |
932 | 933 | ||
933 | len += sprintf(page+len, "%-16s 0x%lx\n", | 934 | seq_printf(m, "%-16s 0x%lx\n", "csr (cached)", (unsigned long)card->csr); |
934 | "csr (cached)", (unsigned long)card->csr); | 935 | seq_printf(m, "%-16s 0x%lx\n", "csr", (unsigned long)csr); |
935 | len += sprintf(page+len, "%-16s 0x%lx\n", | 936 | seq_printf(m, "%-16s %lu\n", "txoff", (unsigned long)txoff); |
936 | "csr", (unsigned long)csr); | 937 | seq_printf(m, "%-16s %lu\n", "txlen", (unsigned long)txlen); |
937 | len += sprintf(page+len, "%-16s %lu\n", | 938 | seq_printf(m, "%-16s %lu\n", "rxoff", (unsigned long)rxoff); |
938 | "txoff", (unsigned long)txoff); | 939 | seq_printf(m, "%-16s %lu\n", "rxlen", (unsigned long)rxlen); |
939 | len += sprintf(page+len, "%-16s %lu\n", | 940 | |
940 | "txlen", (unsigned long)txlen); | 941 | return 0; |
941 | len += sprintf(page+len, "%-16s %lu\n", | 942 | } |
942 | "rxoff", (unsigned long)rxoff); | 943 | |
943 | len += sprintf(page+len, "%-16s %lu\n", | 944 | static int b1dmactl_proc_open(struct inode *inode, struct file *file) |
944 | "rxlen", (unsigned long)rxlen); | 945 | { |
945 | 946 | return single_open(file, b1dmactl_proc_show, PDE(inode)->data); | |
946 | if (off+count >= len) | ||
947 | *eof = 1; | ||
948 | if (len < off) | ||
949 | return 0; | ||
950 | *start = page + off; | ||
951 | return ((count < len-off) ? count : len-off); | ||
952 | } | 947 | } |
953 | 948 | ||
949 | const struct file_operations b1dmactl_proc_fops = { | ||
950 | .owner = THIS_MODULE, | ||
951 | .open = b1dmactl_proc_open, | ||
952 | .read = seq_read, | ||
953 | .llseek = seq_lseek, | ||
954 | .release = single_release, | ||
955 | }; | ||
956 | EXPORT_SYMBOL(b1dmactl_proc_fops); | ||
957 | |||
954 | /* ------------------------------------------------------------- */ | 958 | /* ------------------------------------------------------------- */ |
955 | 959 | ||
956 | EXPORT_SYMBOL(b1dma_reset); | 960 | EXPORT_SYMBOL(b1dma_reset); |
@@ -963,7 +967,6 @@ EXPORT_SYMBOL(b1dma_reset_ctr); | |||
963 | EXPORT_SYMBOL(b1dma_register_appl); | 967 | EXPORT_SYMBOL(b1dma_register_appl); |
964 | EXPORT_SYMBOL(b1dma_release_appl); | 968 | EXPORT_SYMBOL(b1dma_release_appl); |
965 | EXPORT_SYMBOL(b1dma_send_message); | 969 | EXPORT_SYMBOL(b1dma_send_message); |
966 | EXPORT_SYMBOL(b1dmactl_read_proc); | ||
967 | 970 | ||
968 | static int __init b1dma_init(void) | 971 | static int __init b1dma_init(void) |
969 | { | 972 | { |
diff --git a/drivers/isdn/hardware/avm/b1isa.c b/drivers/isdn/hardware/avm/b1isa.c index 6461a32bc838..ff5390546f92 100644 --- a/drivers/isdn/hardware/avm/b1isa.c +++ b/drivers/isdn/hardware/avm/b1isa.c | |||
@@ -121,7 +121,7 @@ static int b1isa_probe(struct pci_dev *pdev) | |||
121 | cinfo->capi_ctrl.load_firmware = b1_load_firmware; | 121 | cinfo->capi_ctrl.load_firmware = b1_load_firmware; |
122 | cinfo->capi_ctrl.reset_ctr = b1_reset_ctr; | 122 | cinfo->capi_ctrl.reset_ctr = b1_reset_ctr; |
123 | cinfo->capi_ctrl.procinfo = b1isa_procinfo; | 123 | cinfo->capi_ctrl.procinfo = b1isa_procinfo; |
124 | cinfo->capi_ctrl.ctr_read_proc = b1ctl_read_proc; | 124 | cinfo->capi_ctrl.proc_fops = &b1ctl_proc_fops; |
125 | strcpy(cinfo->capi_ctrl.name, card->name); | 125 | strcpy(cinfo->capi_ctrl.name, card->name); |
126 | 126 | ||
127 | retval = attach_capi_ctr(&cinfo->capi_ctrl); | 127 | retval = attach_capi_ctr(&cinfo->capi_ctrl); |
diff --git a/drivers/isdn/hardware/avm/b1pci.c b/drivers/isdn/hardware/avm/b1pci.c index 5b314a2c4049..c97e4315079d 100644 --- a/drivers/isdn/hardware/avm/b1pci.c +++ b/drivers/isdn/hardware/avm/b1pci.c | |||
@@ -112,7 +112,7 @@ static int b1pci_probe(struct capicardparams *p, struct pci_dev *pdev) | |||
112 | cinfo->capi_ctrl.load_firmware = b1_load_firmware; | 112 | cinfo->capi_ctrl.load_firmware = b1_load_firmware; |
113 | cinfo->capi_ctrl.reset_ctr = b1_reset_ctr; | 113 | cinfo->capi_ctrl.reset_ctr = b1_reset_ctr; |
114 | cinfo->capi_ctrl.procinfo = b1pci_procinfo; | 114 | cinfo->capi_ctrl.procinfo = b1pci_procinfo; |
115 | cinfo->capi_ctrl.ctr_read_proc = b1ctl_read_proc; | 115 | cinfo->capi_ctrl.proc_fops = &b1ctl_proc_fops; |
116 | strcpy(cinfo->capi_ctrl.name, card->name); | 116 | strcpy(cinfo->capi_ctrl.name, card->name); |
117 | cinfo->capi_ctrl.owner = THIS_MODULE; | 117 | cinfo->capi_ctrl.owner = THIS_MODULE; |
118 | 118 | ||
@@ -251,7 +251,7 @@ static int b1pciv4_probe(struct capicardparams *p, struct pci_dev *pdev) | |||
251 | cinfo->capi_ctrl.load_firmware = b1dma_load_firmware; | 251 | cinfo->capi_ctrl.load_firmware = b1dma_load_firmware; |
252 | cinfo->capi_ctrl.reset_ctr = b1dma_reset_ctr; | 252 | cinfo->capi_ctrl.reset_ctr = b1dma_reset_ctr; |
253 | cinfo->capi_ctrl.procinfo = b1pciv4_procinfo; | 253 | cinfo->capi_ctrl.procinfo = b1pciv4_procinfo; |
254 | cinfo->capi_ctrl.ctr_read_proc = b1dmactl_read_proc; | 254 | cinfo->capi_ctrl.proc_fops = &b1dmactl_proc_fops; |
255 | strcpy(cinfo->capi_ctrl.name, card->name); | 255 | strcpy(cinfo->capi_ctrl.name, card->name); |
256 | 256 | ||
257 | retval = attach_capi_ctr(&cinfo->capi_ctrl); | 257 | retval = attach_capi_ctr(&cinfo->capi_ctrl); |
diff --git a/drivers/isdn/hardware/avm/b1pcmcia.c b/drivers/isdn/hardware/avm/b1pcmcia.c index 7740403b40e1..d6391e0afeea 100644 --- a/drivers/isdn/hardware/avm/b1pcmcia.c +++ b/drivers/isdn/hardware/avm/b1pcmcia.c | |||
@@ -108,7 +108,7 @@ static int b1pcmcia_add_card(unsigned int port, unsigned irq, | |||
108 | cinfo->capi_ctrl.load_firmware = b1_load_firmware; | 108 | cinfo->capi_ctrl.load_firmware = b1_load_firmware; |
109 | cinfo->capi_ctrl.reset_ctr = b1_reset_ctr; | 109 | cinfo->capi_ctrl.reset_ctr = b1_reset_ctr; |
110 | cinfo->capi_ctrl.procinfo = b1pcmcia_procinfo; | 110 | cinfo->capi_ctrl.procinfo = b1pcmcia_procinfo; |
111 | cinfo->capi_ctrl.ctr_read_proc = b1ctl_read_proc; | 111 | cinfo->capi_ctrl.proc_fops = &b1ctl_proc_fops; |
112 | strcpy(cinfo->capi_ctrl.name, card->name); | 112 | strcpy(cinfo->capi_ctrl.name, card->name); |
113 | 113 | ||
114 | retval = attach_capi_ctr(&cinfo->capi_ctrl); | 114 | retval = attach_capi_ctr(&cinfo->capi_ctrl); |
diff --git a/drivers/isdn/hardware/avm/c4.c b/drivers/isdn/hardware/avm/c4.c index 6833301a45fc..de6e6b311819 100644 --- a/drivers/isdn/hardware/avm/c4.c +++ b/drivers/isdn/hardware/avm/c4.c | |||
@@ -11,6 +11,8 @@ | |||
11 | 11 | ||
12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/proc_fs.h> | ||
15 | #include <linux/seq_file.h> | ||
14 | #include <linux/skbuff.h> | 16 | #include <linux/skbuff.h> |
15 | #include <linux/delay.h> | 17 | #include <linux/delay.h> |
16 | #include <linux/mm.h> | 18 | #include <linux/mm.h> |
@@ -1062,19 +1064,18 @@ static char *c4_procinfo(struct capi_ctr *ctrl) | |||
1062 | return cinfo->infobuf; | 1064 | return cinfo->infobuf; |
1063 | } | 1065 | } |
1064 | 1066 | ||
1065 | static int c4_read_proc(char *page, char **start, off_t off, | 1067 | static int c4_proc_show(struct seq_file *m, void *v) |
1066 | int count, int *eof, struct capi_ctr *ctrl) | ||
1067 | { | 1068 | { |
1069 | struct capi_ctr *ctrl = m->private; | ||
1068 | avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata); | 1070 | avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata); |
1069 | avmcard *card = cinfo->card; | 1071 | avmcard *card = cinfo->card; |
1070 | u8 flag; | 1072 | u8 flag; |
1071 | int len = 0; | ||
1072 | char *s; | 1073 | char *s; |
1073 | 1074 | ||
1074 | len += sprintf(page+len, "%-16s %s\n", "name", card->name); | 1075 | seq_printf(m, "%-16s %s\n", "name", card->name); |
1075 | len += sprintf(page+len, "%-16s 0x%x\n", "io", card->port); | 1076 | seq_printf(m, "%-16s 0x%x\n", "io", card->port); |
1076 | len += sprintf(page+len, "%-16s %d\n", "irq", card->irq); | 1077 | seq_printf(m, "%-16s %d\n", "irq", card->irq); |
1077 | len += sprintf(page+len, "%-16s 0x%lx\n", "membase", card->membase); | 1078 | seq_printf(m, "%-16s 0x%lx\n", "membase", card->membase); |
1078 | switch (card->cardtype) { | 1079 | switch (card->cardtype) { |
1079 | case avm_b1isa: s = "B1 ISA"; break; | 1080 | case avm_b1isa: s = "B1 ISA"; break; |
1080 | case avm_b1pci: s = "B1 PCI"; break; | 1081 | case avm_b1pci: s = "B1 PCI"; break; |
@@ -1087,18 +1088,18 @@ static int c4_read_proc(char *page, char **start, off_t off, | |||
1087 | case avm_c2: s = "C2"; break; | 1088 | case avm_c2: s = "C2"; break; |
1088 | default: s = "???"; break; | 1089 | default: s = "???"; break; |
1089 | } | 1090 | } |
1090 | len += sprintf(page+len, "%-16s %s\n", "type", s); | 1091 | seq_printf(m, "%-16s %s\n", "type", s); |
1091 | if ((s = cinfo->version[VER_DRIVER]) != NULL) | 1092 | if ((s = cinfo->version[VER_DRIVER]) != NULL) |
1092 | len += sprintf(page+len, "%-16s %s\n", "ver_driver", s); | 1093 | seq_printf(m, "%-16s %s\n", "ver_driver", s); |
1093 | if ((s = cinfo->version[VER_CARDTYPE]) != NULL) | 1094 | if ((s = cinfo->version[VER_CARDTYPE]) != NULL) |
1094 | len += sprintf(page+len, "%-16s %s\n", "ver_cardtype", s); | 1095 | seq_printf(m, "%-16s %s\n", "ver_cardtype", s); |
1095 | if ((s = cinfo->version[VER_SERIAL]) != NULL) | 1096 | if ((s = cinfo->version[VER_SERIAL]) != NULL) |
1096 | len += sprintf(page+len, "%-16s %s\n", "ver_serial", s); | 1097 | seq_printf(m, "%-16s %s\n", "ver_serial", s); |
1097 | 1098 | ||
1098 | if (card->cardtype != avm_m1) { | 1099 | if (card->cardtype != avm_m1) { |
1099 | flag = ((u8 *)(ctrl->profile.manu))[3]; | 1100 | flag = ((u8 *)(ctrl->profile.manu))[3]; |
1100 | if (flag) | 1101 | if (flag) |
1101 | len += sprintf(page+len, "%-16s%s%s%s%s%s%s%s\n", | 1102 | seq_printf(m, "%-16s%s%s%s%s%s%s%s\n", |
1102 | "protocol", | 1103 | "protocol", |
1103 | (flag & 0x01) ? " DSS1" : "", | 1104 | (flag & 0x01) ? " DSS1" : "", |
1104 | (flag & 0x02) ? " CT1" : "", | 1105 | (flag & 0x02) ? " CT1" : "", |
@@ -1112,7 +1113,7 @@ static int c4_read_proc(char *page, char **start, off_t off, | |||
1112 | if (card->cardtype != avm_m1) { | 1113 | if (card->cardtype != avm_m1) { |
1113 | flag = ((u8 *)(ctrl->profile.manu))[5]; | 1114 | flag = ((u8 *)(ctrl->profile.manu))[5]; |
1114 | if (flag) | 1115 | if (flag) |
1115 | len += sprintf(page+len, "%-16s%s%s%s%s\n", | 1116 | seq_printf(m, "%-16s%s%s%s%s\n", |
1116 | "linetype", | 1117 | "linetype", |
1117 | (flag & 0x01) ? " point to point" : "", | 1118 | (flag & 0x01) ? " point to point" : "", |
1118 | (flag & 0x02) ? " point to multipoint" : "", | 1119 | (flag & 0x02) ? " point to multipoint" : "", |
@@ -1120,16 +1121,24 @@ static int c4_read_proc(char *page, char **start, off_t off, | |||
1120 | (flag & 0x04) ? " leased line with D-channel" : "" | 1121 | (flag & 0x04) ? " leased line with D-channel" : "" |
1121 | ); | 1122 | ); |
1122 | } | 1123 | } |
1123 | len += sprintf(page+len, "%-16s %s\n", "cardname", cinfo->cardname); | 1124 | seq_printf(m, "%-16s %s\n", "cardname", cinfo->cardname); |
1124 | 1125 | ||
1125 | if (off+count >= len) | 1126 | return 0; |
1126 | *eof = 1; | ||
1127 | if (len < off) | ||
1128 | return 0; | ||
1129 | *start = page + off; | ||
1130 | return ((count < len-off) ? count : len-off); | ||
1131 | } | 1127 | } |
1132 | 1128 | ||
1129 | static int c4_proc_open(struct inode *inode, struct file *file) | ||
1130 | { | ||
1131 | return single_open(file, c4_proc_show, PDE(inode)->data); | ||
1132 | } | ||
1133 | |||
1134 | static const struct file_operations c4_proc_fops = { | ||
1135 | .owner = THIS_MODULE, | ||
1136 | .open = c4_proc_open, | ||
1137 | .read = seq_read, | ||
1138 | .llseek = seq_lseek, | ||
1139 | .release = single_release, | ||
1140 | }; | ||
1141 | |||
1133 | /* ------------------------------------------------------------- */ | 1142 | /* ------------------------------------------------------------- */ |
1134 | 1143 | ||
1135 | static int c4_add_card(struct capicardparams *p, struct pci_dev *dev, | 1144 | static int c4_add_card(struct capicardparams *p, struct pci_dev *dev, |
@@ -1201,7 +1210,7 @@ static int c4_add_card(struct capicardparams *p, struct pci_dev *dev, | |||
1201 | cinfo->capi_ctrl.load_firmware = c4_load_firmware; | 1210 | cinfo->capi_ctrl.load_firmware = c4_load_firmware; |
1202 | cinfo->capi_ctrl.reset_ctr = c4_reset_ctr; | 1211 | cinfo->capi_ctrl.reset_ctr = c4_reset_ctr; |
1203 | cinfo->capi_ctrl.procinfo = c4_procinfo; | 1212 | cinfo->capi_ctrl.procinfo = c4_procinfo; |
1204 | cinfo->capi_ctrl.ctr_read_proc = c4_read_proc; | 1213 | cinfo->capi_ctrl.proc_fops = &c4_proc_fops; |
1205 | strcpy(cinfo->capi_ctrl.name, card->name); | 1214 | strcpy(cinfo->capi_ctrl.name, card->name); |
1206 | 1215 | ||
1207 | retval = attach_capi_ctr(&cinfo->capi_ctrl); | 1216 | retval = attach_capi_ctr(&cinfo->capi_ctrl); |
diff --git a/drivers/isdn/hardware/avm/t1isa.c b/drivers/isdn/hardware/avm/t1isa.c index 1c53fd49adb6..baeeb3c2a3ee 100644 --- a/drivers/isdn/hardware/avm/t1isa.c +++ b/drivers/isdn/hardware/avm/t1isa.c | |||
@@ -429,7 +429,7 @@ static int t1isa_probe(struct pci_dev *pdev, int cardnr) | |||
429 | cinfo->capi_ctrl.load_firmware = t1isa_load_firmware; | 429 | cinfo->capi_ctrl.load_firmware = t1isa_load_firmware; |
430 | cinfo->capi_ctrl.reset_ctr = t1isa_reset_ctr; | 430 | cinfo->capi_ctrl.reset_ctr = t1isa_reset_ctr; |
431 | cinfo->capi_ctrl.procinfo = t1isa_procinfo; | 431 | cinfo->capi_ctrl.procinfo = t1isa_procinfo; |
432 | cinfo->capi_ctrl.ctr_read_proc = b1ctl_read_proc; | 432 | cinfo->capi_ctrl.proc_fops = &b1ctl_proc_fops; |
433 | strcpy(cinfo->capi_ctrl.name, card->name); | 433 | strcpy(cinfo->capi_ctrl.name, card->name); |
434 | 434 | ||
435 | retval = attach_capi_ctr(&cinfo->capi_ctrl); | 435 | retval = attach_capi_ctr(&cinfo->capi_ctrl); |
diff --git a/drivers/isdn/hardware/avm/t1pci.c b/drivers/isdn/hardware/avm/t1pci.c index e6d298d75146..5a3f83098018 100644 --- a/drivers/isdn/hardware/avm/t1pci.c +++ b/drivers/isdn/hardware/avm/t1pci.c | |||
@@ -119,7 +119,7 @@ static int t1pci_add_card(struct capicardparams *p, struct pci_dev *pdev) | |||
119 | cinfo->capi_ctrl.load_firmware = b1dma_load_firmware; | 119 | cinfo->capi_ctrl.load_firmware = b1dma_load_firmware; |
120 | cinfo->capi_ctrl.reset_ctr = b1dma_reset_ctr; | 120 | cinfo->capi_ctrl.reset_ctr = b1dma_reset_ctr; |
121 | cinfo->capi_ctrl.procinfo = t1pci_procinfo; | 121 | cinfo->capi_ctrl.procinfo = t1pci_procinfo; |
122 | cinfo->capi_ctrl.ctr_read_proc = b1dmactl_read_proc; | 122 | cinfo->capi_ctrl.proc_fops = &b1dmactl_proc_fops; |
123 | strcpy(cinfo->capi_ctrl.name, card->name); | 123 | strcpy(cinfo->capi_ctrl.name, card->name); |
124 | 124 | ||
125 | retval = attach_capi_ctr(&cinfo->capi_ctrl); | 125 | retval = attach_capi_ctr(&cinfo->capi_ctrl); |
diff --git a/drivers/isdn/hardware/eicon/capimain.c b/drivers/isdn/hardware/eicon/capimain.c index 98fcdfc7ca55..0f073cd73763 100644 --- a/drivers/isdn/hardware/eicon/capimain.c +++ b/drivers/isdn/hardware/eicon/capimain.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/module.h> | 13 | #include <linux/module.h> |
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <asm/uaccess.h> | 15 | #include <asm/uaccess.h> |
16 | #include <linux/seq_file.h> | ||
16 | #include <linux/skbuff.h> | 17 | #include <linux/skbuff.h> |
17 | 18 | ||
18 | #include "os_capi.h" | 19 | #include "os_capi.h" |
@@ -75,25 +76,32 @@ void diva_os_free_message_buffer(diva_os_message_buffer_s * dmb) | |||
75 | /* | 76 | /* |
76 | * proc function for controller info | 77 | * proc function for controller info |
77 | */ | 78 | */ |
78 | static int diva_ctl_read_proc(char *page, char **start, off_t off, | 79 | static int diva_ctl_proc_show(struct seq_file *m, void *v) |
79 | int count, int *eof, struct capi_ctr *ctrl) | ||
80 | { | 80 | { |
81 | struct capi_ctr *ctrl = m->private; | ||
81 | diva_card *card = (diva_card *) ctrl->driverdata; | 82 | diva_card *card = (diva_card *) ctrl->driverdata; |
82 | int len = 0; | 83 | |
83 | 84 | seq_printf(m, "%s\n", ctrl->name); | |
84 | len += sprintf(page + len, "%s\n", ctrl->name); | 85 | seq_printf(m, "Serial No. : %s\n", ctrl->serial); |
85 | len += sprintf(page + len, "Serial No. : %s\n", ctrl->serial); | 86 | seq_printf(m, "Id : %d\n", card->Id); |
86 | len += sprintf(page + len, "Id : %d\n", card->Id); | 87 | seq_printf(m, "Channels : %d\n", card->d.channels); |
87 | len += sprintf(page + len, "Channels : %d\n", card->d.channels); | 88 | |
88 | 89 | return 0; | |
89 | if (off + count >= len) | 90 | } |
90 | *eof = 1; | 91 | |
91 | if (len < off) | 92 | static int diva_ctl_proc_open(struct inode *inode, struct file *file) |
92 | return 0; | 93 | { |
93 | *start = page + off; | 94 | return single_open(file, diva_ctl_proc_show, NULL); |
94 | return ((count < len - off) ? count : len - off); | ||
95 | } | 95 | } |
96 | 96 | ||
97 | static const struct file_operations diva_ctl_proc_fops = { | ||
98 | .owner = THIS_MODULE, | ||
99 | .open = diva_ctl_proc_open, | ||
100 | .read = seq_read, | ||
101 | .llseek = seq_lseek, | ||
102 | .release = single_release, | ||
103 | }; | ||
104 | |||
97 | /* | 105 | /* |
98 | * set additional os settings in capi_ctr struct | 106 | * set additional os settings in capi_ctr struct |
99 | */ | 107 | */ |
@@ -102,7 +110,7 @@ void diva_os_set_controller_struct(struct capi_ctr *ctrl) | |||
102 | ctrl->driver_name = DRIVERLNAME; | 110 | ctrl->driver_name = DRIVERLNAME; |
103 | ctrl->load_firmware = NULL; | 111 | ctrl->load_firmware = NULL; |
104 | ctrl->reset_ctr = NULL; | 112 | ctrl->reset_ctr = NULL; |
105 | ctrl->ctr_read_proc = diva_ctl_read_proc; | 113 | ctrl->proc_fops = &diva_ctl_proc_fops; |
106 | ctrl->owner = THIS_MODULE; | 114 | ctrl->owner = THIS_MODULE; |
107 | } | 115 | } |
108 | 116 | ||
diff --git a/drivers/isdn/hardware/eicon/diva_didd.c b/drivers/isdn/hardware/eicon/diva_didd.c index 993b14cf1778..5d06a7437824 100644 --- a/drivers/isdn/hardware/eicon/diva_didd.c +++ b/drivers/isdn/hardware/eicon/diva_didd.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
16 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
17 | #include <linux/proc_fs.h> | 17 | #include <linux/proc_fs.h> |
18 | #include <linux/seq_file.h> | ||
18 | #include <net/net_namespace.h> | 19 | #include <net/net_namespace.h> |
19 | 20 | ||
20 | #include "platform.h" | 21 | #include "platform.h" |
@@ -62,39 +63,41 @@ static char *getrev(const char *revision) | |||
62 | return rev; | 63 | return rev; |
63 | } | 64 | } |
64 | 65 | ||
65 | static int | 66 | static int divadidd_proc_show(struct seq_file *m, void *v) |
66 | proc_read(char *page, char **start, off_t off, int count, int *eof, | ||
67 | void *data) | ||
68 | { | 67 | { |
69 | int len = 0; | ||
70 | char tmprev[32]; | 68 | char tmprev[32]; |
71 | 69 | ||
72 | strcpy(tmprev, main_revision); | 70 | strcpy(tmprev, main_revision); |
73 | len += sprintf(page + len, "%s\n", DRIVERNAME); | 71 | seq_printf(m, "%s\n", DRIVERNAME); |
74 | len += sprintf(page + len, "name : %s\n", DRIVERLNAME); | 72 | seq_printf(m, "name : %s\n", DRIVERLNAME); |
75 | len += sprintf(page + len, "release : %s\n", DRIVERRELEASE_DIDD); | 73 | seq_printf(m, "release : %s\n", DRIVERRELEASE_DIDD); |
76 | len += sprintf(page + len, "build : %s(%s)\n", | 74 | seq_printf(m, "build : %s(%s)\n", |
77 | diva_didd_common_code_build, DIVA_BUILD); | 75 | diva_didd_common_code_build, DIVA_BUILD); |
78 | len += sprintf(page + len, "revision : %s\n", getrev(tmprev)); | 76 | seq_printf(m, "revision : %s\n", getrev(tmprev)); |
79 | 77 | ||
80 | if (off + count >= len) | 78 | return 0; |
81 | *eof = 1; | ||
82 | if (len < off) | ||
83 | return 0; | ||
84 | *start = page + off; | ||
85 | return ((count < len - off) ? count : len - off); | ||
86 | } | 79 | } |
87 | 80 | ||
81 | static int divadidd_proc_open(struct inode *inode, struct file *file) | ||
82 | { | ||
83 | return single_open(file, divadidd_proc_show, NULL); | ||
84 | } | ||
85 | |||
86 | static const struct file_operations divadidd_proc_fops = { | ||
87 | .owner = THIS_MODULE, | ||
88 | .open = divadidd_proc_open, | ||
89 | .read = seq_read, | ||
90 | .llseek = seq_lseek, | ||
91 | .release = single_release, | ||
92 | }; | ||
93 | |||
88 | static int DIVA_INIT_FUNCTION create_proc(void) | 94 | static int DIVA_INIT_FUNCTION create_proc(void) |
89 | { | 95 | { |
90 | proc_net_eicon = proc_mkdir("eicon", init_net.proc_net); | 96 | proc_net_eicon = proc_mkdir("eicon", init_net.proc_net); |
91 | 97 | ||
92 | if (proc_net_eicon) { | 98 | if (proc_net_eicon) { |
93 | if ((proc_didd = | 99 | proc_didd = proc_create(DRIVERLNAME, S_IRUGO, proc_net_eicon, |
94 | create_proc_entry(DRIVERLNAME, S_IFREG | S_IRUGO, | 100 | &divadidd_proc_fops); |
95 | proc_net_eicon))) { | ||
96 | proc_didd->read_proc = proc_read; | ||
97 | } | ||
98 | return (1); | 101 | return (1); |
99 | } | 102 | } |
100 | return (0); | 103 | return (0); |
diff --git a/drivers/isdn/hardware/eicon/divasi.c b/drivers/isdn/hardware/eicon/divasi.c index 69e71ebe7841..f577719ab3fa 100644 --- a/drivers/isdn/hardware/eicon/divasi.c +++ b/drivers/isdn/hardware/eicon/divasi.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/poll.h> | 17 | #include <linux/poll.h> |
18 | #include <linux/proc_fs.h> | 18 | #include <linux/proc_fs.h> |
19 | #include <linux/skbuff.h> | 19 | #include <linux/skbuff.h> |
20 | #include <linux/seq_file.h> | ||
20 | #include <linux/smp_lock.h> | 21 | #include <linux/smp_lock.h> |
21 | #include <asm/uaccess.h> | 22 | #include <asm/uaccess.h> |
22 | 23 | ||
@@ -86,39 +87,40 @@ static void diva_um_timer_function(unsigned long data); | |||
86 | extern struct proc_dir_entry *proc_net_eicon; | 87 | extern struct proc_dir_entry *proc_net_eicon; |
87 | static struct proc_dir_entry *um_idi_proc_entry = NULL; | 88 | static struct proc_dir_entry *um_idi_proc_entry = NULL; |
88 | 89 | ||
89 | static int | 90 | static int um_idi_proc_show(struct seq_file *m, void *v) |
90 | um_idi_proc_read(char *page, char **start, off_t off, int count, int *eof, | ||
91 | void *data) | ||
92 | { | 91 | { |
93 | int len = 0; | ||
94 | char tmprev[32]; | 92 | char tmprev[32]; |
95 | 93 | ||
96 | len += sprintf(page + len, "%s\n", DRIVERNAME); | 94 | seq_printf(m, "%s\n", DRIVERNAME); |
97 | len += sprintf(page + len, "name : %s\n", DRIVERLNAME); | 95 | seq_printf(m, "name : %s\n", DRIVERLNAME); |
98 | len += sprintf(page + len, "release : %s\n", DRIVERRELEASE_IDI); | 96 | seq_printf(m, "release : %s\n", DRIVERRELEASE_IDI); |
99 | strcpy(tmprev, main_revision); | 97 | strcpy(tmprev, main_revision); |
100 | len += sprintf(page + len, "revision : %s\n", getrev(tmprev)); | 98 | seq_printf(m, "revision : %s\n", getrev(tmprev)); |
101 | len += sprintf(page + len, "build : %s\n", DIVA_BUILD); | 99 | seq_printf(m, "build : %s\n", DIVA_BUILD); |
102 | len += sprintf(page + len, "major : %d\n", major); | 100 | seq_printf(m, "major : %d\n", major); |
103 | 101 | ||
104 | if (off + count >= len) | 102 | return 0; |
105 | *eof = 1; | 103 | } |
106 | if (len < off) | 104 | |
107 | return 0; | 105 | static int um_idi_proc_open(struct inode *inode, struct file *file) |
108 | *start = page + off; | 106 | { |
109 | return ((count < len - off) ? count : len - off); | 107 | return single_open(file, um_idi_proc_show, NULL); |
110 | } | 108 | } |
111 | 109 | ||
110 | static const struct file_operations um_idi_proc_fops = { | ||
111 | .owner = THIS_MODULE, | ||
112 | .open = um_idi_proc_open, | ||
113 | .read = seq_read, | ||
114 | .llseek = seq_lseek, | ||
115 | .release = single_release, | ||
116 | }; | ||
117 | |||
112 | static int DIVA_INIT_FUNCTION create_um_idi_proc(void) | 118 | static int DIVA_INIT_FUNCTION create_um_idi_proc(void) |
113 | { | 119 | { |
114 | um_idi_proc_entry = create_proc_entry(DRIVERLNAME, | 120 | um_idi_proc_entry = proc_create(DRIVERLNAME, S_IRUGO, proc_net_eicon, |
115 | S_IFREG | S_IRUGO | S_IWUSR, | 121 | &um_idi_proc_fops); |
116 | proc_net_eicon); | ||
117 | if (!um_idi_proc_entry) | 122 | if (!um_idi_proc_entry) |
118 | return (0); | 123 | return (0); |
119 | |||
120 | um_idi_proc_entry->read_proc = um_idi_proc_read; | ||
121 | |||
122 | return (1); | 124 | return (1); |
123 | } | 125 | } |
124 | 126 | ||
diff --git a/drivers/isdn/hardware/eicon/divasproc.c b/drivers/isdn/hardware/eicon/divasproc.c index 040827288ec9..46d44a942624 100644 --- a/drivers/isdn/hardware/eicon/divasproc.c +++ b/drivers/isdn/hardware/eicon/divasproc.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | #include <linux/poll.h> | 15 | #include <linux/poll.h> |
16 | #include <linux/proc_fs.h> | 16 | #include <linux/proc_fs.h> |
17 | #include <linux/seq_file.h> | ||
17 | #include <linux/list.h> | 18 | #include <linux/list.h> |
18 | #include <asm/uaccess.h> | 19 | #include <asm/uaccess.h> |
19 | 20 | ||
@@ -141,14 +142,10 @@ void remove_divas_proc(void) | |||
141 | } | 142 | } |
142 | } | 143 | } |
143 | 144 | ||
144 | /* | 145 | static ssize_t grp_opt_proc_write(struct file *file, const char __user *buffer, |
145 | ** write group_optimization | 146 | size_t count, loff_t *pos) |
146 | */ | ||
147 | static int | ||
148 | write_grp_opt(struct file *file, const char __user *buffer, unsigned long count, | ||
149 | void *data) | ||
150 | { | 147 | { |
151 | diva_os_xdi_adapter_t *a = (diva_os_xdi_adapter_t *) data; | 148 | diva_os_xdi_adapter_t *a = PDE(file->f_path.dentry->d_inode)->data; |
152 | PISDN_ADAPTER IoAdapter = IoAdapters[a->controller - 1]; | 149 | PISDN_ADAPTER IoAdapter = IoAdapters[a->controller - 1]; |
153 | 150 | ||
154 | if ((count == 1) || (count == 2)) { | 151 | if ((count == 1) || (count == 2)) { |
@@ -172,14 +169,10 @@ write_grp_opt(struct file *file, const char __user *buffer, unsigned long count, | |||
172 | return (-EINVAL); | 169 | return (-EINVAL); |
173 | } | 170 | } |
174 | 171 | ||
175 | /* | 172 | static ssize_t d_l1_down_proc_write(struct file *file, const char __user *buffer, |
176 | ** write dynamic_l1_down | 173 | size_t count, loff_t *pos) |
177 | */ | ||
178 | static int | ||
179 | write_d_l1_down(struct file *file, const char __user *buffer, unsigned long count, | ||
180 | void *data) | ||
181 | { | 174 | { |
182 | diva_os_xdi_adapter_t *a = (diva_os_xdi_adapter_t *) data; | 175 | diva_os_xdi_adapter_t *a = PDE(file->f_path.dentry->d_inode)->data; |
183 | PISDN_ADAPTER IoAdapter = IoAdapters[a->controller - 1]; | 176 | PISDN_ADAPTER IoAdapter = IoAdapters[a->controller - 1]; |
184 | 177 | ||
185 | if ((count == 1) || (count == 2)) { | 178 | if ((count == 1) || (count == 2)) { |
@@ -203,63 +196,62 @@ write_d_l1_down(struct file *file, const char __user *buffer, unsigned long coun | |||
203 | return (-EINVAL); | 196 | return (-EINVAL); |
204 | } | 197 | } |
205 | 198 | ||
206 | 199 | static int d_l1_down_proc_show(struct seq_file *m, void *v) | |
207 | /* | ||
208 | ** read dynamic_l1_down | ||
209 | */ | ||
210 | static int | ||
211 | read_d_l1_down(char *page, char **start, off_t off, int count, int *eof, | ||
212 | void *data) | ||
213 | { | 200 | { |
214 | int len = 0; | 201 | diva_os_xdi_adapter_t *a = m->private; |
215 | diva_os_xdi_adapter_t *a = (diva_os_xdi_adapter_t *) data; | ||
216 | PISDN_ADAPTER IoAdapter = IoAdapters[a->controller - 1]; | 202 | PISDN_ADAPTER IoAdapter = IoAdapters[a->controller - 1]; |
217 | 203 | ||
218 | len += sprintf(page + len, "%s\n", | 204 | seq_printf(m, "%s\n", |
219 | (IoAdapter->capi_cfg. | 205 | (IoAdapter->capi_cfg. |
220 | cfg_1 & DIVA_XDI_CAPI_CFG_1_DYNAMIC_L1_ON) ? "1" : | 206 | cfg_1 & DIVA_XDI_CAPI_CFG_1_DYNAMIC_L1_ON) ? "1" : |
221 | "0"); | 207 | "0"); |
208 | return 0; | ||
209 | } | ||
222 | 210 | ||
223 | if (off + count >= len) | 211 | static int d_l1_down_proc_open(struct inode *inode, struct file *file) |
224 | *eof = 1; | 212 | { |
225 | if (len < off) | 213 | return single_open(file, d_l1_down_proc_show, PDE(inode)->data); |
226 | return 0; | ||
227 | *start = page + off; | ||
228 | return ((count < len - off) ? count : len - off); | ||
229 | } | 214 | } |
230 | 215 | ||
231 | /* | 216 | static const struct file_operations d_l1_down_proc_fops = { |
232 | ** read group_optimization | 217 | .owner = THIS_MODULE, |
233 | */ | 218 | .open = d_l1_down_proc_open, |
234 | static int | 219 | .read = seq_read, |
235 | read_grp_opt(char *page, char **start, off_t off, int count, int *eof, | 220 | .llseek = seq_lseek, |
236 | void *data) | 221 | .release = single_release, |
222 | .write = d_l1_down_proc_write, | ||
223 | }; | ||
224 | |||
225 | static int grp_opt_proc_show(struct seq_file *m, void *v) | ||
237 | { | 226 | { |
238 | int len = 0; | 227 | diva_os_xdi_adapter_t *a = m->private; |
239 | diva_os_xdi_adapter_t *a = (diva_os_xdi_adapter_t *) data; | ||
240 | PISDN_ADAPTER IoAdapter = IoAdapters[a->controller - 1]; | 228 | PISDN_ADAPTER IoAdapter = IoAdapters[a->controller - 1]; |
241 | 229 | ||
242 | len += sprintf(page + len, "%s\n", | 230 | seq_printf(m, "%s\n", |
243 | (IoAdapter->capi_cfg. | 231 | (IoAdapter->capi_cfg. |
244 | cfg_1 & DIVA_XDI_CAPI_CFG_1_GROUP_POPTIMIZATION_ON) | 232 | cfg_1 & DIVA_XDI_CAPI_CFG_1_GROUP_POPTIMIZATION_ON) |
245 | ? "1" : "0"); | 233 | ? "1" : "0"); |
234 | return 0; | ||
235 | } | ||
246 | 236 | ||
247 | if (off + count >= len) | 237 | static int grp_opt_proc_open(struct inode *inode, struct file *file) |
248 | *eof = 1; | 238 | { |
249 | if (len < off) | 239 | return single_open(file, grp_opt_proc_show, PDE(inode)->data); |
250 | return 0; | ||
251 | *start = page + off; | ||
252 | return ((count < len - off) ? count : len - off); | ||
253 | } | 240 | } |
254 | 241 | ||
255 | /* | 242 | static const struct file_operations grp_opt_proc_fops = { |
256 | ** info write | 243 | .owner = THIS_MODULE, |
257 | */ | 244 | .open = grp_opt_proc_open, |
258 | static int | 245 | .read = seq_read, |
259 | info_write(struct file *file, const char __user *buffer, unsigned long count, | 246 | .llseek = seq_lseek, |
260 | void *data) | 247 | .release = single_release, |
248 | .write = grp_opt_proc_write, | ||
249 | }; | ||
250 | |||
251 | static ssize_t info_proc_write(struct file *file, const char __user *buffer, | ||
252 | size_t count, loff_t *pos) | ||
261 | { | 253 | { |
262 | diva_os_xdi_adapter_t *a = (diva_os_xdi_adapter_t *) data; | 254 | diva_os_xdi_adapter_t *a = PDE(file->f_path.dentry->d_inode)->data; |
263 | PISDN_ADAPTER IoAdapter = IoAdapters[a->controller - 1]; | 255 | PISDN_ADAPTER IoAdapter = IoAdapters[a->controller - 1]; |
264 | char c[4]; | 256 | char c[4]; |
265 | 257 | ||
@@ -277,63 +269,46 @@ info_write(struct file *file, const char __user *buffer, unsigned long count, | |||
277 | return (-EINVAL); | 269 | return (-EINVAL); |
278 | } | 270 | } |
279 | 271 | ||
280 | /* | 272 | static int info_proc_show(struct seq_file *m, void *v) |
281 | ** info read | ||
282 | */ | ||
283 | static int | ||
284 | info_read(char *page, char **start, off_t off, int count, int *eof, | ||
285 | void *data) | ||
286 | { | 273 | { |
287 | int i = 0; | 274 | int i = 0; |
288 | int len = 0; | ||
289 | char *p; | 275 | char *p; |
290 | char tmpser[16]; | 276 | char tmpser[16]; |
291 | diva_os_xdi_adapter_t *a = (diva_os_xdi_adapter_t *) data; | 277 | diva_os_xdi_adapter_t *a = m->private; |
292 | PISDN_ADAPTER IoAdapter = IoAdapters[a->controller - 1]; | 278 | PISDN_ADAPTER IoAdapter = IoAdapters[a->controller - 1]; |
293 | 279 | ||
294 | len += | 280 | seq_printf(m, "Name : %s\n", IoAdapter->Properties.Name); |
295 | sprintf(page + len, "Name : %s\n", | 281 | seq_printf(m, "DSP state : %08x\n", a->dsp_mask); |
296 | IoAdapter->Properties.Name); | 282 | seq_printf(m, "Channels : %02d\n", IoAdapter->Properties.Channels); |
297 | len += sprintf(page + len, "DSP state : %08x\n", a->dsp_mask); | 283 | seq_printf(m, "E. max/used : %03d/%03d\n", |
298 | len += sprintf(page + len, "Channels : %02d\n", | ||
299 | IoAdapter->Properties.Channels); | ||
300 | len += sprintf(page + len, "E. max/used : %03d/%03d\n", | ||
301 | IoAdapter->e_max, IoAdapter->e_count); | 284 | IoAdapter->e_max, IoAdapter->e_count); |
302 | diva_get_vserial_number(IoAdapter, tmpser); | 285 | diva_get_vserial_number(IoAdapter, tmpser); |
303 | len += sprintf(page + len, "Serial : %s\n", tmpser); | 286 | seq_printf(m, "Serial : %s\n", tmpser); |
304 | len += | 287 | seq_printf(m, "IRQ : %d\n", IoAdapter->irq_info.irq_nr); |
305 | sprintf(page + len, "IRQ : %d\n", | 288 | seq_printf(m, "CardIndex : %d\n", a->CardIndex); |
306 | IoAdapter->irq_info.irq_nr); | 289 | seq_printf(m, "CardOrdinal : %d\n", a->CardOrdinal); |
307 | len += sprintf(page + len, "CardIndex : %d\n", a->CardIndex); | 290 | seq_printf(m, "Controller : %d\n", a->controller); |
308 | len += sprintf(page + len, "CardOrdinal : %d\n", a->CardOrdinal); | 291 | seq_printf(m, "Bus-Type : %s\n", |
309 | len += sprintf(page + len, "Controller : %d\n", a->controller); | ||
310 | len += sprintf(page + len, "Bus-Type : %s\n", | ||
311 | (a->Bus == | 292 | (a->Bus == |
312 | DIVAS_XDI_ADAPTER_BUS_ISA) ? "ISA" : "PCI"); | 293 | DIVAS_XDI_ADAPTER_BUS_ISA) ? "ISA" : "PCI"); |
313 | len += sprintf(page + len, "Port-Name : %s\n", a->port_name); | 294 | seq_printf(m, "Port-Name : %s\n", a->port_name); |
314 | if (a->Bus == DIVAS_XDI_ADAPTER_BUS_PCI) { | 295 | if (a->Bus == DIVAS_XDI_ADAPTER_BUS_PCI) { |
315 | len += | 296 | seq_printf(m, "PCI-bus : %d\n", a->resources.pci.bus); |
316 | sprintf(page + len, "PCI-bus : %d\n", | 297 | seq_printf(m, "PCI-func : %d\n", a->resources.pci.func); |
317 | a->resources.pci.bus); | ||
318 | len += | ||
319 | sprintf(page + len, "PCI-func : %d\n", | ||
320 | a->resources.pci.func); | ||
321 | for (i = 0; i < 8; i++) { | 298 | for (i = 0; i < 8; i++) { |
322 | if (a->resources.pci.bar[i]) { | 299 | if (a->resources.pci.bar[i]) { |
323 | len += | 300 | seq_printf(m, |
324 | sprintf(page + len, | ||
325 | "Mem / I/O %d : 0x%x / mapped : 0x%lx", | 301 | "Mem / I/O %d : 0x%x / mapped : 0x%lx", |
326 | i, a->resources.pci.bar[i], | 302 | i, a->resources.pci.bar[i], |
327 | (unsigned long) a->resources. | 303 | (unsigned long) a->resources. |
328 | pci.addr[i]); | 304 | pci.addr[i]); |
329 | if (a->resources.pci.length[i]) { | 305 | if (a->resources.pci.length[i]) { |
330 | len += | 306 | seq_printf(m, |
331 | sprintf(page + len, | ||
332 | " / length : %d", | 307 | " / length : %d", |
333 | a->resources.pci. | 308 | a->resources.pci. |
334 | length[i]); | 309 | length[i]); |
335 | } | 310 | } |
336 | len += sprintf(page + len, "\n"); | 311 | seq_putc(m, '\n'); |
337 | } | 312 | } |
338 | } | 313 | } |
339 | } | 314 | } |
@@ -353,16 +328,25 @@ info_read(char *page, char **start, off_t off, int count, int *eof, | |||
353 | } else { | 328 | } else { |
354 | p = "ready"; | 329 | p = "ready"; |
355 | } | 330 | } |
356 | len += sprintf(page + len, "State : %s\n", p); | 331 | seq_printf(m, "State : %s\n", p); |
357 | 332 | ||
358 | if (off + count >= len) | 333 | return 0; |
359 | *eof = 1; | 334 | } |
360 | if (len < off) | 335 | |
361 | return 0; | 336 | static int info_proc_open(struct inode *inode, struct file *file) |
362 | *start = page + off; | 337 | { |
363 | return ((count < len - off) ? count : len - off); | 338 | return single_open(file, info_proc_show, PDE(inode)->data); |
364 | } | 339 | } |
365 | 340 | ||
341 | static const struct file_operations info_proc_fops = { | ||
342 | .owner = THIS_MODULE, | ||
343 | .open = info_proc_open, | ||
344 | .read = seq_read, | ||
345 | .llseek = seq_lseek, | ||
346 | .release = single_release, | ||
347 | .write = info_proc_write, | ||
348 | }; | ||
349 | |||
366 | /* | 350 | /* |
367 | ** adapter proc init/de-init | 351 | ** adapter proc init/de-init |
368 | */ | 352 | */ |
@@ -380,28 +364,20 @@ int create_adapter_proc(diva_os_xdi_adapter_t * a) | |||
380 | return (0); | 364 | return (0); |
381 | a->proc_adapter_dir = (void *) de; | 365 | a->proc_adapter_dir = (void *) de; |
382 | 366 | ||
383 | if (!(pe = | 367 | pe = proc_create_data(info_proc_name, S_IRUGO | S_IWUSR, de, |
384 | create_proc_entry(info_proc_name, S_IFREG | S_IRUGO | S_IWUSR, de))) | 368 | &info_proc_fops, a); |
369 | if (!pe) | ||
385 | return (0); | 370 | return (0); |
386 | a->proc_info = (void *) pe; | 371 | a->proc_info = (void *) pe; |
387 | pe->write_proc = info_write; | ||
388 | pe->read_proc = info_read; | ||
389 | pe->data = a; | ||
390 | 372 | ||
391 | if ((pe = create_proc_entry(grp_opt_proc_name, | 373 | pe = proc_create_data(grp_opt_proc_name, S_IRUGO | S_IWUSR, de, |
392 | S_IFREG | S_IRUGO | S_IWUSR, de))) { | 374 | &grp_opt_proc_fops, a); |
375 | if (pe) | ||
393 | a->proc_grp_opt = (void *) pe; | 376 | a->proc_grp_opt = (void *) pe; |
394 | pe->write_proc = write_grp_opt; | 377 | pe = proc_create_data(d_l1_down_proc_name, S_IRUGO | S_IWUSR, de, |
395 | pe->read_proc = read_grp_opt; | 378 | &d_l1_down_proc_fops, a); |
396 | pe->data = a; | 379 | if (pe) |
397 | } | ||
398 | if ((pe = create_proc_entry(d_l1_down_proc_name, | ||
399 | S_IFREG | S_IRUGO | S_IWUSR, de))) { | ||
400 | a->proc_d_l1_down = (void *) pe; | 380 | a->proc_d_l1_down = (void *) pe; |
401 | pe->write_proc = write_d_l1_down; | ||
402 | pe->read_proc = read_d_l1_down; | ||
403 | pe->data = a; | ||
404 | } | ||
405 | 381 | ||
406 | DBG_TRC(("proc entry %s created", tmp)); | 382 | DBG_TRC(("proc entry %s created", tmp)); |
407 | 383 | ||