aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2011-02-22 19:57:21 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2011-02-22 19:57:21 -0500
commit4a6514e6d096716fb7bedf238efaaca877e2a7e8 (patch)
treee3601ee168cca90307ac91e750a86d6ed04eab01
parent282361a046edd9d58a134f358a3f65a7cb8655d9 (diff)
tty: move obsolete and broken tty drivers to drivers/staging/tty/
As planned by Arnd Bergmann, this moves the following drivers to the drivers/staging/tty/ directory where they will be removed after 2.6.41 if no one steps up to claim them. epca epca ip2 istallion riscom8 serial167 specialix stallion Cc: Arnd Bergmann <arnd@arndb.de> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Cc: Jiri Slaby <jslaby@suse.cz> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--arch/m68k/Kconfig8
-rw-r--r--drivers/char/Kconfig79
-rw-r--r--drivers/char/Makefile7
-rw-r--r--drivers/staging/Kconfig2
-rw-r--r--drivers/staging/Makefile1
-rw-r--r--drivers/staging/tty/Kconfig87
-rw-r--r--drivers/staging/tty/Makefile7
-rw-r--r--drivers/staging/tty/TODO6
-rw-r--r--drivers/staging/tty/epca.c (renamed from drivers/char/epca.c)0
-rw-r--r--drivers/staging/tty/epca.h (renamed from drivers/char/epca.h)0
-rw-r--r--drivers/staging/tty/epcaconfig.h (renamed from drivers/char/epcaconfig.h)0
-rw-r--r--drivers/staging/tty/ip2/Makefile (renamed from drivers/char/ip2/Makefile)0
-rw-r--r--drivers/staging/tty/ip2/i2cmd.c (renamed from drivers/char/ip2/i2cmd.c)0
-rw-r--r--drivers/staging/tty/ip2/i2cmd.h (renamed from drivers/char/ip2/i2cmd.h)0
-rw-r--r--drivers/staging/tty/ip2/i2ellis.c (renamed from drivers/char/ip2/i2ellis.c)0
-rw-r--r--drivers/staging/tty/ip2/i2ellis.h (renamed from drivers/char/ip2/i2ellis.h)0
-rw-r--r--drivers/staging/tty/ip2/i2hw.h (renamed from drivers/char/ip2/i2hw.h)0
-rw-r--r--drivers/staging/tty/ip2/i2lib.c (renamed from drivers/char/ip2/i2lib.c)0
-rw-r--r--drivers/staging/tty/ip2/i2lib.h (renamed from drivers/char/ip2/i2lib.h)0
-rw-r--r--drivers/staging/tty/ip2/i2pack.h (renamed from drivers/char/ip2/i2pack.h)0
-rw-r--r--drivers/staging/tty/ip2/ip2.h (renamed from drivers/char/ip2/ip2.h)0
-rw-r--r--drivers/staging/tty/ip2/ip2ioctl.h (renamed from drivers/char/ip2/ip2ioctl.h)0
-rw-r--r--drivers/staging/tty/ip2/ip2main.c (renamed from drivers/char/ip2/ip2main.c)0
-rw-r--r--drivers/staging/tty/ip2/ip2trace.h (renamed from drivers/char/ip2/ip2trace.h)0
-rw-r--r--drivers/staging/tty/ip2/ip2types.h (renamed from drivers/char/ip2/ip2types.h)0
-rw-r--r--drivers/staging/tty/istallion.c (renamed from drivers/char/istallion.c)0
-rw-r--r--drivers/staging/tty/riscom8.c (renamed from drivers/char/riscom8.c)0
-rw-r--r--drivers/staging/tty/riscom8.h (renamed from drivers/char/riscom8.h)0
-rw-r--r--drivers/staging/tty/riscom8_reg.h (renamed from drivers/char/riscom8_reg.h)0
-rw-r--r--drivers/staging/tty/serial167.c (renamed from drivers/char/serial167.c)0
-rw-r--r--drivers/staging/tty/specialix.c (renamed from drivers/char/specialix.c)0
-rw-r--r--drivers/staging/tty/specialix_io8.h (renamed from drivers/char/specialix_io8.h)0
-rw-r--r--drivers/staging/tty/stallion.c (renamed from drivers/char/stallion.c)0
33 files changed, 103 insertions, 94 deletions
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig
index bc9271b8575..a85e251c411 100644
--- a/arch/m68k/Kconfig
+++ b/arch/m68k/Kconfig
@@ -554,14 +554,6 @@ config MVME147_SCC
554 This is the driver for the serial ports on the Motorola MVME147 554 This is the driver for the serial ports on the Motorola MVME147
555 boards. Everyone using one of these boards should say Y here. 555 boards. Everyone using one of these boards should say Y here.
556 556
557config SERIAL167
558 bool "CD2401 support for MVME166/7 serial ports"
559 depends on MVME16x
560 help
561 This is the driver for the serial ports on the Motorola MVME166,
562 167, and 172 boards. Everyone using one of these boards should say
563 Y here.
564
565config MVME162_SCC 557config MVME162_SCC
566 bool "SCC support for MVME162 serial ports" 558 bool "SCC support for MVME162 serial ports"
567 depends on MVME16x && BROKEN 559 depends on MVME16x && BROKEN
diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
index 1adfac6a7b0..7b8cf0295f6 100644
--- a/drivers/char/Kconfig
+++ b/drivers/char/Kconfig
@@ -15,63 +15,6 @@ config DEVKMEM
15 kind of kernel debugging operations. 15 kind of kernel debugging operations.
16 When in doubt, say "N". 16 When in doubt, say "N".
17 17
18config COMPUTONE
19 tristate "Computone IntelliPort Plus serial support"
20 depends on SERIAL_NONSTANDARD && (ISA || EISA || PCI)
21 ---help---
22 This driver supports the entire family of Intelliport II/Plus
23 controllers with the exception of the MicroChannel controllers and
24 products previous to the Intelliport II. These are multiport cards,
25 which give you many serial ports. You would need something like this
26 to connect more than two modems to your Linux box, for instance in
27 order to become a dial-in server. If you have a card like that, say
28 Y here and read <file:Documentation/serial/computone.txt>.
29
30 To compile this driver as module, choose M here: the
31 module will be called ip2.
32
33config DIGIEPCA
34 tristate "Digiboard Intelligent Async Support"
35 depends on SERIAL_NONSTANDARD && (ISA || EISA || PCI)
36 ---help---
37 This is a driver for Digi International's Xx, Xeve, and Xem series
38 of cards which provide multiple serial ports. You would need
39 something like this to connect more than two modems to your Linux
40 box, for instance in order to become a dial-in server. This driver
41 supports the original PC (ISA) boards as well as PCI, and EISA. If
42 you have a card like this, say Y here and read the file
43 <file:Documentation/serial/digiepca.txt>.
44
45 To compile this driver as a module, choose M here: the
46 module will be called epca.
47
48config RISCOM8
49 tristate "SDL RISCom/8 card support"
50 depends on SERIAL_NONSTANDARD
51 help
52 This is a driver for the SDL Communications RISCom/8 multiport card,
53 which gives you many serial ports. You would need something like
54 this to connect more than two modems to your Linux box, for instance
55 in order to become a dial-in server. If you have a card like that,
56 say Y here and read the file <file:Documentation/serial/riscom8.txt>.
57
58 Also it's possible to say M here and compile this driver as kernel
59 loadable module; the module will be called riscom8.
60
61config SPECIALIX
62 tristate "Specialix IO8+ card support"
63 depends on SERIAL_NONSTANDARD
64 help
65 This is a driver for the Specialix IO8+ multiport card (both the
66 ISA and the PCI version) which gives you many serial ports. You
67 would need something like this to connect more than two modems to
68 your Linux box, for instance in order to become a dial-in server.
69
70 If you have a card like that, say Y here and read the file
71 <file:Documentation/serial/specialix.txt>. Also it's possible to say
72 M here and compile this driver as kernel loadable module which will be
73 called specialix.
74
75config SX 18config SX
76 tristate "Specialix SX (and SI) card support" 19 tristate "Specialix SX (and SI) card support"
77 depends on SERIAL_NONSTANDARD && (PCI || EISA || ISA) && BROKEN 20 depends on SERIAL_NONSTANDARD && (PCI || EISA || ISA) && BROKEN
@@ -112,28 +55,6 @@ config STALDRV
112 in this case. If you have never heard about all this, it's safe to 55 in this case. If you have never heard about all this, it's safe to
113 say N. 56 say N.
114 57
115config STALLION
116 tristate "Stallion EasyIO or EC8/32 support"
117 depends on STALDRV && (ISA || EISA || PCI)
118 help
119 If you have an EasyIO or EasyConnection 8/32 multiport Stallion
120 card, then this is for you; say Y. Make sure to read
121 <file:Documentation/serial/stallion.txt>.
122
123 To compile this driver as a module, choose M here: the
124 module will be called stallion.
125
126config ISTALLION
127 tristate "Stallion EC8/64, ONboard, Brumby support"
128 depends on STALDRV && (ISA || EISA || PCI)
129 help
130 If you have an EasyConnection 8/64, ONboard, Brumby or Stallion
131 serial multiport card, say Y here. Make sure to read
132 <file:Documentation/serial/stallion.txt>.
133
134 To compile this driver as a module, choose M here: the
135 module will be called istallion.
136
137config A2232 58config A2232
138 tristate "Commodore A2232 serial support (EXPERIMENTAL)" 59 tristate "Commodore A2232 serial support (EXPERIMENTAL)"
139 depends on EXPERIMENTAL && ZORRO && BROKEN 60 depends on EXPERIMENTAL && ZORRO && BROKEN
diff --git a/drivers/char/Makefile b/drivers/char/Makefile
index f5dc7c9bce6..48bb8acbea4 100644
--- a/drivers/char/Makefile
+++ b/drivers/char/Makefile
@@ -8,15 +8,8 @@ obj-y += misc.o
8obj-$(CONFIG_MVME147_SCC) += generic_serial.o vme_scc.o 8obj-$(CONFIG_MVME147_SCC) += generic_serial.o vme_scc.o
9obj-$(CONFIG_MVME162_SCC) += generic_serial.o vme_scc.o 9obj-$(CONFIG_MVME162_SCC) += generic_serial.o vme_scc.o
10obj-$(CONFIG_BVME6000_SCC) += generic_serial.o vme_scc.o 10obj-$(CONFIG_BVME6000_SCC) += generic_serial.o vme_scc.o
11obj-$(CONFIG_SERIAL167) += serial167.o
12obj-$(CONFIG_STALLION) += stallion.o
13obj-$(CONFIG_ISTALLION) += istallion.o
14obj-$(CONFIG_DIGIEPCA) += epca.o
15obj-$(CONFIG_SPECIALIX) += specialix.o
16obj-$(CONFIG_A2232) += ser_a2232.o generic_serial.o 11obj-$(CONFIG_A2232) += ser_a2232.o generic_serial.o
17obj-$(CONFIG_ATARI_DSP56K) += dsp56k.o 12obj-$(CONFIG_ATARI_DSP56K) += dsp56k.o
18obj-$(CONFIG_COMPUTONE) += ip2/
19obj-$(CONFIG_RISCOM8) += riscom8.o
20obj-$(CONFIG_SX) += sx.o generic_serial.o 13obj-$(CONFIG_SX) += sx.o generic_serial.o
21obj-$(CONFIG_RIO) += rio/ generic_serial.o 14obj-$(CONFIG_RIO) += rio/ generic_serial.o
22obj-$(CONFIG_RAW_DRIVER) += raw.o 15obj-$(CONFIG_RAW_DRIVER) += raw.o
diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
index 5c8fcfc42c3..fb1fc4e5a8c 100644
--- a/drivers/staging/Kconfig
+++ b/drivers/staging/Kconfig
@@ -41,6 +41,8 @@ config STAGING_EXCLUDE_BUILD
41 41
42if !STAGING_EXCLUDE_BUILD 42if !STAGING_EXCLUDE_BUILD
43 43
44source "drivers/staging/tty/Kconfig"
45
44source "drivers/staging/et131x/Kconfig" 46source "drivers/staging/et131x/Kconfig"
45 47
46source "drivers/staging/slicoss/Kconfig" 48source "drivers/staging/slicoss/Kconfig"
diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
index d5388631782..f498e345a01 100644
--- a/drivers/staging/Makefile
+++ b/drivers/staging/Makefile
@@ -3,6 +3,7 @@
3# fix for build system bug... 3# fix for build system bug...
4obj-$(CONFIG_STAGING) += staging.o 4obj-$(CONFIG_STAGING) += staging.o
5 5
6obj-y += tty/
6obj-$(CONFIG_ET131X) += et131x/ 7obj-$(CONFIG_ET131X) += et131x/
7obj-$(CONFIG_SLICOSS) += slicoss/ 8obj-$(CONFIG_SLICOSS) += slicoss/
8obj-$(CONFIG_VIDEO_GO7007) += go7007/ 9obj-$(CONFIG_VIDEO_GO7007) += go7007/
diff --git a/drivers/staging/tty/Kconfig b/drivers/staging/tty/Kconfig
new file mode 100644
index 00000000000..77103a07abb
--- /dev/null
+++ b/drivers/staging/tty/Kconfig
@@ -0,0 +1,87 @@
1config STALLION
2 tristate "Stallion EasyIO or EC8/32 support"
3 depends on STALDRV && (ISA || EISA || PCI)
4 help
5 If you have an EasyIO or EasyConnection 8/32 multiport Stallion
6 card, then this is for you; say Y. Make sure to read
7 <file:Documentation/serial/stallion.txt>.
8
9 To compile this driver as a module, choose M here: the
10 module will be called stallion.
11
12config ISTALLION
13 tristate "Stallion EC8/64, ONboard, Brumby support"
14 depends on STALDRV && (ISA || EISA || PCI)
15 help
16 If you have an EasyConnection 8/64, ONboard, Brumby or Stallion
17 serial multiport card, say Y here. Make sure to read
18 <file:Documentation/serial/stallion.txt>.
19
20 To compile this driver as a module, choose M here: the
21 module will be called istallion.
22
23config DIGIEPCA
24 tristate "Digiboard Intelligent Async Support"
25 depends on SERIAL_NONSTANDARD && (ISA || EISA || PCI)
26 ---help---
27 This is a driver for Digi International's Xx, Xeve, and Xem series
28 of cards which provide multiple serial ports. You would need
29 something like this to connect more than two modems to your Linux
30 box, for instance in order to become a dial-in server. This driver
31 supports the original PC (ISA) boards as well as PCI, and EISA. If
32 you have a card like this, say Y here and read the file
33 <file:Documentation/serial/digiepca.txt>.
34
35 To compile this driver as a module, choose M here: the
36 module will be called epca.
37
38config RISCOM8
39 tristate "SDL RISCom/8 card support"
40 depends on SERIAL_NONSTANDARD
41 help
42 This is a driver for the SDL Communications RISCom/8 multiport card,
43 which gives you many serial ports. You would need something like
44 this to connect more than two modems to your Linux box, for instance
45 in order to become a dial-in server. If you have a card like that,
46 say Y here and read the file <file:Documentation/serial/riscom8.txt>.
47
48 Also it's possible to say M here and compile this driver as kernel
49 loadable module; the module will be called riscom8.
50
51config SPECIALIX
52 tristate "Specialix IO8+ card support"
53 depends on SERIAL_NONSTANDARD
54 help
55 This is a driver for the Specialix IO8+ multiport card (both the
56 ISA and the PCI version) which gives you many serial ports. You
57 would need something like this to connect more than two modems to
58 your Linux box, for instance in order to become a dial-in server.
59
60 If you have a card like that, say Y here and read the file
61 <file:Documentation/serial/specialix.txt>. Also it's possible to say
62 M here and compile this driver as kernel loadable module which will be
63 called specialix.
64
65config COMPUTONE
66 tristate "Computone IntelliPort Plus serial support"
67 depends on SERIAL_NONSTANDARD && (ISA || EISA || PCI)
68 ---help---
69 This driver supports the entire family of Intelliport II/Plus
70 controllers with the exception of the MicroChannel controllers and
71 products previous to the Intelliport II. These are multiport cards,
72 which give you many serial ports. You would need something like this
73 to connect more than two modems to your Linux box, for instance in
74 order to become a dial-in server. If you have a card like that, say
75 Y here and read <file:Documentation/serial/computone.txt>.
76
77 To compile this driver as module, choose M here: the
78 module will be called ip2.
79
80config SERIAL167
81 bool "CD2401 support for MVME166/7 serial ports"
82 depends on MVME16x
83 help
84 This is the driver for the serial ports on the Motorola MVME166,
85 167, and 172 boards. Everyone using one of these boards should say
86 Y here.
87
diff --git a/drivers/staging/tty/Makefile b/drivers/staging/tty/Makefile
new file mode 100644
index 00000000000..ac57c105611
--- /dev/null
+++ b/drivers/staging/tty/Makefile
@@ -0,0 +1,7 @@
1obj-$(CONFIG_STALLION) += stallion.o
2obj-$(CONFIG_ISTALLION) += istallion.o
3obj-$(CONFIG_DIGIEPCA) += epca.o
4obj-$(CONFIG_SERIAL167) += serial167.o
5obj-$(CONFIG_SPECIALIX) += specialix.o
6obj-$(CONFIG_RISCOM8) += riscom8.o
7obj-$(CONFIG_COMPUTONE) += ip2/
diff --git a/drivers/staging/tty/TODO b/drivers/staging/tty/TODO
new file mode 100644
index 00000000000..88756453ac6
--- /dev/null
+++ b/drivers/staging/tty/TODO
@@ -0,0 +1,6 @@
1These are a few tty/serial drivers that either do not build,
2or work if they do build, or if they seem to work, are for obsolete
3hardware, or are full of unfixable races and no one uses them anymore.
4
5If no one steps up to adopt any of these drivers, they will be removed
6in the 2.6.41 release.
diff --git a/drivers/char/epca.c b/drivers/staging/tty/epca.c
index 7ad3638967a..7ad3638967a 100644
--- a/drivers/char/epca.c
+++ b/drivers/staging/tty/epca.c
diff --git a/drivers/char/epca.h b/drivers/staging/tty/epca.h
index d414bf2dbf7..d414bf2dbf7 100644
--- a/drivers/char/epca.h
+++ b/drivers/staging/tty/epca.h
diff --git a/drivers/char/epcaconfig.h b/drivers/staging/tty/epcaconfig.h
index 55dec067078..55dec067078 100644
--- a/drivers/char/epcaconfig.h
+++ b/drivers/staging/tty/epcaconfig.h
diff --git a/drivers/char/ip2/Makefile b/drivers/staging/tty/ip2/Makefile
index 7b78e0dfc5b..7b78e0dfc5b 100644
--- a/drivers/char/ip2/Makefile
+++ b/drivers/staging/tty/ip2/Makefile
diff --git a/drivers/char/ip2/i2cmd.c b/drivers/staging/tty/ip2/i2cmd.c
index e7af647800b..e7af647800b 100644
--- a/drivers/char/ip2/i2cmd.c
+++ b/drivers/staging/tty/ip2/i2cmd.c
diff --git a/drivers/char/ip2/i2cmd.h b/drivers/staging/tty/ip2/i2cmd.h
index 29277ec6b8e..29277ec6b8e 100644
--- a/drivers/char/ip2/i2cmd.h
+++ b/drivers/staging/tty/ip2/i2cmd.h
diff --git a/drivers/char/ip2/i2ellis.c b/drivers/staging/tty/ip2/i2ellis.c
index 29db44de399..29db44de399 100644
--- a/drivers/char/ip2/i2ellis.c
+++ b/drivers/staging/tty/ip2/i2ellis.c
diff --git a/drivers/char/ip2/i2ellis.h b/drivers/staging/tty/ip2/i2ellis.h
index fb6df245601..fb6df245601 100644
--- a/drivers/char/ip2/i2ellis.h
+++ b/drivers/staging/tty/ip2/i2ellis.h
diff --git a/drivers/char/ip2/i2hw.h b/drivers/staging/tty/ip2/i2hw.h
index c0ba6c05f0c..c0ba6c05f0c 100644
--- a/drivers/char/ip2/i2hw.h
+++ b/drivers/staging/tty/ip2/i2hw.h
diff --git a/drivers/char/ip2/i2lib.c b/drivers/staging/tty/ip2/i2lib.c
index 0d10b89218e..0d10b89218e 100644
--- a/drivers/char/ip2/i2lib.c
+++ b/drivers/staging/tty/ip2/i2lib.c
diff --git a/drivers/char/ip2/i2lib.h b/drivers/staging/tty/ip2/i2lib.h
index e559e9bac06..e559e9bac06 100644
--- a/drivers/char/ip2/i2lib.h
+++ b/drivers/staging/tty/ip2/i2lib.h
diff --git a/drivers/char/ip2/i2pack.h b/drivers/staging/tty/ip2/i2pack.h
index 00342a677c9..00342a677c9 100644
--- a/drivers/char/ip2/i2pack.h
+++ b/drivers/staging/tty/ip2/i2pack.h
diff --git a/drivers/char/ip2/ip2.h b/drivers/staging/tty/ip2/ip2.h
index 936ccc53394..936ccc53394 100644
--- a/drivers/char/ip2/ip2.h
+++ b/drivers/staging/tty/ip2/ip2.h
diff --git a/drivers/char/ip2/ip2ioctl.h b/drivers/staging/tty/ip2/ip2ioctl.h
index aa0a9da85e0..aa0a9da85e0 100644
--- a/drivers/char/ip2/ip2ioctl.h
+++ b/drivers/staging/tty/ip2/ip2ioctl.h
diff --git a/drivers/char/ip2/ip2main.c b/drivers/staging/tty/ip2/ip2main.c
index ea7a8fb0828..ea7a8fb0828 100644
--- a/drivers/char/ip2/ip2main.c
+++ b/drivers/staging/tty/ip2/ip2main.c
diff --git a/drivers/char/ip2/ip2trace.h b/drivers/staging/tty/ip2/ip2trace.h
index da20435dc8a..da20435dc8a 100644
--- a/drivers/char/ip2/ip2trace.h
+++ b/drivers/staging/tty/ip2/ip2trace.h
diff --git a/drivers/char/ip2/ip2types.h b/drivers/staging/tty/ip2/ip2types.h
index 9d67b260b2f..9d67b260b2f 100644
--- a/drivers/char/ip2/ip2types.h
+++ b/drivers/staging/tty/ip2/ip2types.h
diff --git a/drivers/char/istallion.c b/drivers/staging/tty/istallion.c
index 0b266272ccc..0b266272ccc 100644
--- a/drivers/char/istallion.c
+++ b/drivers/staging/tty/istallion.c
diff --git a/drivers/char/riscom8.c b/drivers/staging/tty/riscom8.c
index 602643a40b4..602643a40b4 100644
--- a/drivers/char/riscom8.c
+++ b/drivers/staging/tty/riscom8.c
diff --git a/drivers/char/riscom8.h b/drivers/staging/tty/riscom8.h
index c9876b3f971..c9876b3f971 100644
--- a/drivers/char/riscom8.h
+++ b/drivers/staging/tty/riscom8.h
diff --git a/drivers/char/riscom8_reg.h b/drivers/staging/tty/riscom8_reg.h
index a32475ed0d1..a32475ed0d1 100644
--- a/drivers/char/riscom8_reg.h
+++ b/drivers/staging/tty/riscom8_reg.h
diff --git a/drivers/char/serial167.c b/drivers/staging/tty/serial167.c
index 674af693397..674af693397 100644
--- a/drivers/char/serial167.c
+++ b/drivers/staging/tty/serial167.c
diff --git a/drivers/char/specialix.c b/drivers/staging/tty/specialix.c
index 47e5753f732..47e5753f732 100644
--- a/drivers/char/specialix.c
+++ b/drivers/staging/tty/specialix.c
diff --git a/drivers/char/specialix_io8.h b/drivers/staging/tty/specialix_io8.h
index c63005274d9..c63005274d9 100644
--- a/drivers/char/specialix_io8.h
+++ b/drivers/staging/tty/specialix_io8.h
diff --git a/drivers/char/stallion.c b/drivers/staging/tty/stallion.c
index 4fff5cd3b16..4fff5cd3b16 100644
--- a/drivers/char/stallion.c
+++ b/drivers/staging/tty/stallion.c