diff options
author | Dominik Brodowski <linux@dominikbrodowski.net> | 2005-06-27 19:28:47 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-27 21:03:18 -0400 |
commit | 9a5555b81fde402119a6b4f2b38d3373d272ff69 (patch) | |
tree | 68f5af92d99dc320e7d2954fd1173fa14780f8a8 | |
parent | 3c29976a6469b81a7858812dc2d4b8430d74004a (diff) |
[PATCH] pcmcia: add a config option for the PCMICA ioctl
Add a new config option to control the building of the PCMCIA IOCTL. Currently,
it is not yet made public, though the help text is there already.
Signed-off-by: Dominik Brodowski <linux@dominikbrodowksi.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | drivers/pcmcia/Kconfig | 28 | ||||
-rw-r--r-- | drivers/pcmcia/ds.c | 36 |
2 files changed, 53 insertions, 11 deletions
diff --git a/drivers/pcmcia/Kconfig b/drivers/pcmcia/Kconfig index 22f7e8ca6584..85af1fb2a309 100644 --- a/drivers/pcmcia/Kconfig +++ b/drivers/pcmcia/Kconfig | |||
@@ -14,8 +14,8 @@ config PCCARD | |||
14 | Say Y here if you want to attach PCMCIA- or PC-cards to your Linux | 14 | Say Y here if you want to attach PCMCIA- or PC-cards to your Linux |
15 | computer. These are credit-card size devices such as network cards, | 15 | computer. These are credit-card size devices such as network cards, |
16 | modems or hard drives often used with laptops computers. There are | 16 | modems or hard drives often used with laptops computers. There are |
17 | actually two varieties of these cards: the older 16 bit PCMCIA cards | 17 | actually two varieties of these cards: 16 bit PCMCIA and 32 bit |
18 | and the newer 32 bit CardBus cards. | 18 | CardBus cards. |
19 | 19 | ||
20 | To compile this driver as modules, choose M here: the | 20 | To compile this driver as modules, choose M here: the |
21 | module will be called pcmcia_core. | 21 | module will be called pcmcia_core. |
@@ -48,10 +48,9 @@ config PCMCIA | |||
48 | PC-cards are such 16-bit PCMCIA cards, so unless you know you're | 48 | PC-cards are such 16-bit PCMCIA cards, so unless you know you're |
49 | only using 32-bit CardBus cards, say Y or M here. | 49 | only using 32-bit CardBus cards, say Y or M here. |
50 | 50 | ||
51 | To use 16-bit PCMCIA cards, you will need supporting software from | 51 | To use 16-bit PCMCIA cards, you will need supporting software in |
52 | David Hinds' pcmcia-cs package (see the file <file:Documentation/Changes> | 52 | most cases. (see the file <file:Documentation/Changes> for |
53 | for location). Please also read the PCMCIA-HOWTO, available from | 53 | location and details). |
54 | <http://www.tldp.org/docs.html#howto>. | ||
55 | 54 | ||
56 | To compile this driver as modules, choose M here: the | 55 | To compile this driver as modules, choose M here: the |
57 | module will be called pcmcia. | 56 | module will be called pcmcia. |
@@ -72,6 +71,21 @@ config PCMCIA_LOAD_CIS | |||
72 | 71 | ||
73 | If unsure, say Y. | 72 | If unsure, say Y. |
74 | 73 | ||
74 | config PCMCIA_IOCTL | ||
75 | bool | ||
76 | depends on PCMCIA | ||
77 | default y | ||
78 | help | ||
79 | If you say Y here, the deprecated ioctl interface to the PCMCIA | ||
80 | subsystem will be built. It is needed by cardmgr and cardctl | ||
81 | (pcmcia-cs) to function properly. | ||
82 | |||
83 | If you do not use the new pcmciautils package, and have a | ||
84 | yenta, Cirrus PD6729, i82092, i82365 or tcic compatible bridge, | ||
85 | you need to say Y here to be able to use 16-bit PCMCIA cards. | ||
86 | |||
87 | If unsure, say Y. | ||
88 | |||
75 | config CARDBUS | 89 | config CARDBUS |
76 | bool "32-bit CardBus support" | 90 | bool "32-bit CardBus support" |
77 | depends on PCI | 91 | depends on PCI |
@@ -91,8 +105,6 @@ comment "PC-card bridges" | |||
91 | 105 | ||
92 | config YENTA | 106 | config YENTA |
93 | tristate "CardBus yenta-compatible bridge support" | 107 | tristate "CardBus yenta-compatible bridge support" |
94 | depends on PCI | ||
95 | #fixme: remove dependendcy on CARDBUS | ||
96 | depends on CARDBUS | 108 | depends on CARDBUS |
97 | select PCCARD_NONSTATIC | 109 | select PCCARD_NONSTATIC |
98 | ---help--- | 110 | ---help--- |
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c index 2c3c3da5368e..0c7dc5b38757 100644 --- a/drivers/pcmcia/ds.c +++ b/drivers/pcmcia/ds.c | |||
@@ -116,8 +116,13 @@ static struct bus_type pcmcia_bus_type; | |||
116 | #define DS_SOCKET_DEAD 0x80 | 116 | #define DS_SOCKET_DEAD 0x80 |
117 | 117 | ||
118 | /*====================================================================*/ | 118 | /*====================================================================*/ |
119 | #ifdef CONFIG_PCMCIA_IOCTL | ||
119 | 120 | ||
120 | static int major_dev = -1; | 121 | static int major_dev = -1; |
122 | static struct pcmcia_bus_socket * get_socket_info_by_nr(unsigned int nr); | ||
123 | static struct pcmcia_driver * get_pcmcia_driver (dev_info_t *dev_info); | ||
124 | |||
125 | #endif | ||
121 | 126 | ||
122 | static int unbind_request(struct pcmcia_bus_socket *s); | 127 | static int unbind_request(struct pcmcia_bus_socket *s); |
123 | 128 | ||
@@ -356,8 +361,6 @@ static inline int pcmcia_load_firmware(struct pcmcia_device *dev, char * filenam | |||
356 | 361 | ||
357 | /*======================================================================*/ | 362 | /*======================================================================*/ |
358 | 363 | ||
359 | static struct pcmcia_driver * get_pcmcia_driver (dev_info_t *dev_info); | ||
360 | static struct pcmcia_bus_socket * get_socket_info_by_nr(unsigned int nr); | ||
361 | 364 | ||
362 | static void pcmcia_release_bus_socket(struct kref *refcount) | 365 | static void pcmcia_release_bus_socket(struct kref *refcount) |
363 | { | 366 | { |
@@ -411,6 +414,7 @@ void pcmcia_unregister_driver(struct pcmcia_driver *driver) | |||
411 | } | 414 | } |
412 | EXPORT_SYMBOL(pcmcia_unregister_driver); | 415 | EXPORT_SYMBOL(pcmcia_unregister_driver); |
413 | 416 | ||
417 | #ifdef CONFIG_PCMCIA_IOCTL | ||
414 | #ifdef CONFIG_PROC_FS | 418 | #ifdef CONFIG_PROC_FS |
415 | static struct proc_dir_entry *proc_pccard = NULL; | 419 | static struct proc_dir_entry *proc_pccard = NULL; |
416 | 420 | ||
@@ -443,6 +447,7 @@ static int proc_read_drivers(char *buf, char **start, off_t pos, | |||
443 | return (p - buf); | 447 | return (p - buf); |
444 | } | 448 | } |
445 | #endif | 449 | #endif |
450 | #endif | ||
446 | 451 | ||
447 | /* pcmcia_device handling */ | 452 | /* pcmcia_device handling */ |
448 | 453 | ||
@@ -998,6 +1003,8 @@ static struct device_attribute pcmcia_dev_attrs[] = { | |||
998 | 1003 | ||
999 | ======================================================================*/ | 1004 | ======================================================================*/ |
1000 | 1005 | ||
1006 | #ifdef CONFIG_PCMCIA_IOCTL | ||
1007 | |||
1001 | static int queue_empty(user_info_t *user) | 1008 | static int queue_empty(user_info_t *user) |
1002 | { | 1009 | { |
1003 | return (user->event_head == user->event_tail); | 1010 | return (user->event_head == user->event_tail); |
@@ -1024,6 +1031,11 @@ static void handle_event(struct pcmcia_bus_socket *s, event_t event) | |||
1024 | queue_event(user, event); | 1031 | queue_event(user, event); |
1025 | wake_up_interruptible(&s->queue); | 1032 | wake_up_interruptible(&s->queue); |
1026 | } | 1033 | } |
1034 | #else | ||
1035 | static inline void handle_event(struct pcmcia_bus_socket *s, event_t event) { return; } | ||
1036 | static inline int handle_request(struct pcmcia_bus_socket *s, event_t event) { return CS_SUCCESS; } | ||
1037 | #endif | ||
1038 | |||
1027 | 1039 | ||
1028 | 1040 | ||
1029 | /*====================================================================== | 1041 | /*====================================================================== |
@@ -1142,6 +1154,8 @@ static int ds_event(struct pcmcia_socket *skt, event_t event, int priority) | |||
1142 | 1154 | ||
1143 | ======================================================================*/ | 1155 | ======================================================================*/ |
1144 | 1156 | ||
1157 | #ifdef CONFIG_PCMCIA_IOCTL | ||
1158 | |||
1145 | static int bind_request(struct pcmcia_bus_socket *s, bind_info_t *bind_info) | 1159 | static int bind_request(struct pcmcia_bus_socket *s, bind_info_t *bind_info) |
1146 | { | 1160 | { |
1147 | struct pcmcia_driver *p_drv; | 1161 | struct pcmcia_driver *p_drv; |
@@ -1237,6 +1251,8 @@ rescan: | |||
1237 | return (ret); | 1251 | return (ret); |
1238 | } /* bind_request */ | 1252 | } /* bind_request */ |
1239 | 1253 | ||
1254 | #endif | ||
1255 | |||
1240 | 1256 | ||
1241 | int pcmcia_register_client(client_handle_t *handle, client_reg_t *req) | 1257 | int pcmcia_register_client(client_handle_t *handle, client_reg_t *req) |
1242 | { | 1258 | { |
@@ -1334,6 +1350,7 @@ EXPORT_SYMBOL(pcmcia_register_client); | |||
1334 | 1350 | ||
1335 | 1351 | ||
1336 | /*====================================================================*/ | 1352 | /*====================================================================*/ |
1353 | #ifdef CONFIG_PCMCIA_IOCTL | ||
1337 | 1354 | ||
1338 | extern struct pci_bus *pcmcia_lookup_bus(struct pcmcia_socket *s); | 1355 | extern struct pci_bus *pcmcia_lookup_bus(struct pcmcia_socket *s); |
1339 | 1356 | ||
@@ -1422,6 +1439,8 @@ static int get_device_info(struct pcmcia_bus_socket *s, bind_info_t *bind_info, | |||
1422 | return (ret); | 1439 | return (ret); |
1423 | } /* get_device_info */ | 1440 | } /* get_device_info */ |
1424 | 1441 | ||
1442 | #endif | ||
1443 | |||
1425 | /*====================================================================*/ | 1444 | /*====================================================================*/ |
1426 | 1445 | ||
1427 | /* unbind _all_ devices attached to a given pcmcia_bus_socket. The | 1446 | /* unbind _all_ devices attached to a given pcmcia_bus_socket. The |
@@ -1495,6 +1514,8 @@ EXPORT_SYMBOL(pcmcia_deregister_client); | |||
1495 | 1514 | ||
1496 | ======================================================================*/ | 1515 | ======================================================================*/ |
1497 | 1516 | ||
1517 | #ifdef CONFIG_PCMCIA_IOCTL | ||
1518 | |||
1498 | static int ds_open(struct inode *inode, struct file *file) | 1519 | static int ds_open(struct inode *inode, struct file *file) |
1499 | { | 1520 | { |
1500 | socket_t i = iminor(inode); | 1521 | socket_t i = iminor(inode); |
@@ -1855,6 +1876,8 @@ static struct file_operations ds_fops = { | |||
1855 | .poll = ds_poll, | 1876 | .poll = ds_poll, |
1856 | }; | 1877 | }; |
1857 | 1878 | ||
1879 | #endif | ||
1880 | |||
1858 | static int __devinit pcmcia_bus_add_socket(struct class_device *class_dev) | 1881 | static int __devinit pcmcia_bus_add_socket(struct class_device *class_dev) |
1859 | { | 1882 | { |
1860 | struct pcmcia_socket *socket = class_get_devdata(class_dev); | 1883 | struct pcmcia_socket *socket = class_get_devdata(class_dev); |
@@ -1939,13 +1962,16 @@ static struct bus_type pcmcia_bus_type = { | |||
1939 | 1962 | ||
1940 | static int __init init_pcmcia_bus(void) | 1963 | static int __init init_pcmcia_bus(void) |
1941 | { | 1964 | { |
1965 | #ifdef CONFIG_PCMCIA_IOCTL | ||
1942 | int i; | 1966 | int i; |
1967 | #endif | ||
1943 | 1968 | ||
1944 | spin_lock_init(&pcmcia_dev_list_lock); | 1969 | spin_lock_init(&pcmcia_dev_list_lock); |
1945 | 1970 | ||
1946 | bus_register(&pcmcia_bus_type); | 1971 | bus_register(&pcmcia_bus_type); |
1947 | class_interface_register(&pcmcia_bus_interface); | 1972 | class_interface_register(&pcmcia_bus_interface); |
1948 | 1973 | ||
1974 | #ifdef CONFIG_PCMCIA_IOCTL | ||
1949 | /* Set up character device for user mode clients */ | 1975 | /* Set up character device for user mode clients */ |
1950 | i = register_chrdev(0, "pcmcia", &ds_fops); | 1976 | i = register_chrdev(0, "pcmcia", &ds_fops); |
1951 | if (i < 0) | 1977 | if (i < 0) |
@@ -1959,6 +1985,7 @@ static int __init init_pcmcia_bus(void) | |||
1959 | if (proc_pccard) | 1985 | if (proc_pccard) |
1960 | create_proc_read_entry("drivers",0,proc_pccard,proc_read_drivers,NULL); | 1986 | create_proc_read_entry("drivers",0,proc_pccard,proc_read_drivers,NULL); |
1961 | #endif | 1987 | #endif |
1988 | #endif | ||
1962 | 1989 | ||
1963 | return 0; | 1990 | return 0; |
1964 | } | 1991 | } |
@@ -1970,6 +1997,7 @@ static void __exit exit_pcmcia_bus(void) | |||
1970 | { | 1997 | { |
1971 | class_interface_unregister(&pcmcia_bus_interface); | 1998 | class_interface_unregister(&pcmcia_bus_interface); |
1972 | 1999 | ||
2000 | #ifdef CONFIG_PCMCIA_IOCTL | ||
1973 | #ifdef CONFIG_PROC_FS | 2001 | #ifdef CONFIG_PROC_FS |
1974 | if (proc_pccard) { | 2002 | if (proc_pccard) { |
1975 | remove_proc_entry("drivers", proc_pccard); | 2003 | remove_proc_entry("drivers", proc_pccard); |
@@ -1978,6 +2006,7 @@ static void __exit exit_pcmcia_bus(void) | |||
1978 | #endif | 2006 | #endif |
1979 | if (major_dev != -1) | 2007 | if (major_dev != -1) |
1980 | unregister_chrdev(major_dev, "pcmcia"); | 2008 | unregister_chrdev(major_dev, "pcmcia"); |
2009 | #endif | ||
1981 | 2010 | ||
1982 | bus_unregister(&pcmcia_bus_type); | 2011 | bus_unregister(&pcmcia_bus_type); |
1983 | } | 2012 | } |
@@ -1986,7 +2015,7 @@ module_exit(exit_pcmcia_bus); | |||
1986 | 2015 | ||
1987 | 2016 | ||
1988 | /* helpers for backwards-compatible functions */ | 2017 | /* helpers for backwards-compatible functions */ |
1989 | 2018 | #ifdef CONFIG_PCMCIA_IOCTL | |
1990 | static struct pcmcia_bus_socket * get_socket_info_by_nr(unsigned int nr) | 2019 | static struct pcmcia_bus_socket * get_socket_info_by_nr(unsigned int nr) |
1991 | { | 2020 | { |
1992 | struct pcmcia_socket * s = pcmcia_get_socket_by_nr(nr); | 2021 | struct pcmcia_socket * s = pcmcia_get_socket_by_nr(nr); |
@@ -2011,5 +2040,6 @@ static struct pcmcia_driver * get_pcmcia_driver (dev_info_t *dev_info) | |||
2011 | 2040 | ||
2012 | return (p_drv); | 2041 | return (p_drv); |
2013 | } | 2042 | } |
2043 | #endif | ||
2014 | 2044 | ||
2015 | MODULE_ALIAS("ds"); | 2045 | MODULE_ALIAS("ds"); |