aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ray_cs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/ray_cs.c')
-rw-r--r--drivers/net/wireless/ray_cs.c157
1 files changed, 49 insertions, 108 deletions
diff --git a/drivers/net/wireless/ray_cs.c b/drivers/net/wireless/ray_cs.c
index 88560d0ae50a..2a06ebcd67c5 100644
--- a/drivers/net/wireless/ray_cs.c
+++ b/drivers/net/wireless/ray_cs.c
@@ -43,10 +43,8 @@
43#include <linux/if_arp.h> 43#include <linux/if_arp.h>
44#include <linux/ioport.h> 44#include <linux/ioport.h>
45#include <linux/skbuff.h> 45#include <linux/skbuff.h>
46#include <linux/ethtool.h>
47#include <linux/ieee80211.h> 46#include <linux/ieee80211.h>
48 47
49#include <pcmcia/cs.h>
50#include <pcmcia/cistpl.h> 48#include <pcmcia/cistpl.h>
51#include <pcmcia/cisreg.h> 49#include <pcmcia/cisreg.h>
52#include <pcmcia/ds.h> 50#include <pcmcia/ds.h>
@@ -80,8 +78,6 @@ static int ray_dev_config(struct net_device *dev, struct ifmap *map);
80static struct net_device_stats *ray_get_stats(struct net_device *dev); 78static struct net_device_stats *ray_get_stats(struct net_device *dev);
81static int ray_dev_init(struct net_device *dev); 79static int ray_dev_init(struct net_device *dev);
82 80
83static const struct ethtool_ops netdev_ethtool_ops;
84
85static int ray_open(struct net_device *dev); 81static int ray_open(struct net_device *dev);
86static netdev_tx_t ray_dev_start_xmit(struct sk_buff *skb, 82static netdev_tx_t ray_dev_start_xmit(struct sk_buff *skb,
87 struct net_device *dev); 83 struct net_device *dev);
@@ -169,13 +165,6 @@ static int bc;
169 */ 165 */
170static char *phy_addr = NULL; 166static char *phy_addr = NULL;
171 167
172
173/* A struct pcmcia_device structure has fields for most things that are needed
174 to keep track of a socket, but there will usually be some device
175 specific information that also needs to be kept track of. The
176 'priv' pointer in a struct pcmcia_device structure can be used to point to
177 a device-specific private data structure, like this.
178*/
179static unsigned int ray_mem_speed = 500; 168static unsigned int ray_mem_speed = 500;
180 169
181/* WARNING: THIS DRIVER IS NOT CAPABLE OF HANDLING MULTIPLE DEVICES! */ 170/* WARNING: THIS DRIVER IS NOT CAPABLE OF HANDLING MULTIPLE DEVICES! */
@@ -197,7 +186,7 @@ module_param(bc, int, 0);
197module_param(phy_addr, charp, 0); 186module_param(phy_addr, charp, 0);
198module_param(ray_mem_speed, int, 0); 187module_param(ray_mem_speed, int, 0);
199 188
200static UCHAR b5_default_startup_parms[] = { 189static const UCHAR b5_default_startup_parms[] = {
201 0, 0, /* Adhoc station */ 190 0, 0, /* Adhoc station */
202 'L', 'I', 'N', 'U', 'X', 0, 0, 0, /* 32 char ESSID */ 191 'L', 'I', 'N', 'U', 'X', 0, 0, 0, /* 32 char ESSID */
203 0, 0, 0, 0, 0, 0, 0, 0, 192 0, 0, 0, 0, 0, 0, 0, 0,
@@ -232,7 +221,7 @@ static UCHAR b5_default_startup_parms[] = {
232 2, 0, 0, 0, 0, 0, 0, 0 /* basic rate set */ 221 2, 0, 0, 0, 0, 0, 0, 0 /* basic rate set */
233}; 222};
234 223
235static UCHAR b4_default_startup_parms[] = { 224static const UCHAR b4_default_startup_parms[] = {
236 0, 0, /* Adhoc station */ 225 0, 0, /* Adhoc station */
237 'L', 'I', 'N', 'U', 'X', 0, 0, 0, /* 32 char ESSID */ 226 'L', 'I', 'N', 'U', 'X', 0, 0, 0, /* 32 char ESSID */
238 0, 0, 0, 0, 0, 0, 0, 0, 227 0, 0, 0, 0, 0, 0, 0, 0,
@@ -264,9 +253,9 @@ static UCHAR b4_default_startup_parms[] = {
264}; 253};
265 254
266/*===========================================================================*/ 255/*===========================================================================*/
267static unsigned char eth2_llc[] = { 0xaa, 0xaa, 3, 0, 0, 0 }; 256static const u8 eth2_llc[] = { 0xaa, 0xaa, 3, 0, 0, 0 };
268 257
269static char hop_pattern_length[] = { 1, 258static const char hop_pattern_length[] = { 1,
270 USA_HOP_MOD, EUROPE_HOP_MOD, 259 USA_HOP_MOD, EUROPE_HOP_MOD,
271 JAPAN_HOP_MOD, KOREA_HOP_MOD, 260 JAPAN_HOP_MOD, KOREA_HOP_MOD,
272 SPAIN_HOP_MOD, FRANCE_HOP_MOD, 261 SPAIN_HOP_MOD, FRANCE_HOP_MOD,
@@ -274,7 +263,7 @@ static char hop_pattern_length[] = { 1,
274 JAPAN_TEST_HOP_MOD 263 JAPAN_TEST_HOP_MOD
275}; 264};
276 265
277static char rcsid[] = 266static const char rcsid[] =
278 "Raylink/WebGear wireless LAN - Corey <Thomas corey@world.std.com>"; 267 "Raylink/WebGear wireless LAN - Corey <Thomas corey@world.std.com>";
279 268
280static const struct net_device_ops ray_netdev_ops = { 269static const struct net_device_ops ray_netdev_ops = {
@@ -290,14 +279,6 @@ static const struct net_device_ops ray_netdev_ops = {
290 .ndo_validate_addr = eth_validate_addr, 279 .ndo_validate_addr = eth_validate_addr,
291}; 280};
292 281
293/*=============================================================================
294 ray_attach() creates an "instance" of the driver, allocating
295 local data structures for one device. The device is registered
296 with Card Services.
297 The dev_link structure is initialized, but we don't actually
298 configure the card at this point -- we wait until we receive a
299 card insertion event.
300=============================================================================*/
301static int ray_probe(struct pcmcia_device *p_dev) 282static int ray_probe(struct pcmcia_device *p_dev)
302{ 283{
303 ray_dev_t *local; 284 ray_dev_t *local;
@@ -318,9 +299,8 @@ static int ray_probe(struct pcmcia_device *p_dev)
318 p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_8; 299 p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_8;
319 300
320 /* General socket configuration */ 301 /* General socket configuration */
321 p_dev->conf.Attributes = CONF_ENABLE_IRQ; 302 p_dev->config_flags |= CONF_ENABLE_IRQ;
322 p_dev->conf.IntType = INT_MEMORY_AND_IO; 303 p_dev->config_index = 1;
323 p_dev->conf.ConfigIndex = 1;
324 304
325 p_dev->priv = dev; 305 p_dev->priv = dev;
326 306
@@ -333,7 +313,6 @@ static int ray_probe(struct pcmcia_device *p_dev)
333 313
334 /* Raylink entries in the device structure */ 314 /* Raylink entries in the device structure */
335 dev->netdev_ops = &ray_netdev_ops; 315 dev->netdev_ops = &ray_netdev_ops;
336 SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops);
337 dev->wireless_handlers = &ray_handler_def; 316 dev->wireless_handlers = &ray_handler_def;
338#ifdef WIRELESS_SPY 317#ifdef WIRELESS_SPY
339 local->wireless_data.spy_data = &local->spy_data; 318 local->wireless_data.spy_data = &local->spy_data;
@@ -353,12 +332,6 @@ fail_alloc_dev:
353 return -ENOMEM; 332 return -ENOMEM;
354} /* ray_attach */ 333} /* ray_attach */
355 334
356/*=============================================================================
357 This deletes a driver "instance". The device is de-registered
358 with Card Services. If it has been released, all local data
359 structures are freed. Otherwise, the structures will be freed
360 when the device is released.
361=============================================================================*/
362static void ray_detach(struct pcmcia_device *link) 335static void ray_detach(struct pcmcia_device *link)
363{ 336{
364 struct net_device *dev; 337 struct net_device *dev;
@@ -381,17 +354,11 @@ static void ray_detach(struct pcmcia_device *link)
381 dev_dbg(&link->dev, "ray_cs ray_detach ending\n"); 354 dev_dbg(&link->dev, "ray_cs ray_detach ending\n");
382} /* ray_detach */ 355} /* ray_detach */
383 356
384/*=============================================================================
385 ray_config() is run after a CARD_INSERTION event
386 is received, to configure the PCMCIA socket, and to make the
387 ethernet device available to the system.
388=============================================================================*/
389#define MAX_TUPLE_SIZE 128 357#define MAX_TUPLE_SIZE 128
390static int ray_config(struct pcmcia_device *link) 358static int ray_config(struct pcmcia_device *link)
391{ 359{
392 int ret = 0; 360 int ret = 0;
393 int i; 361 int i;
394 win_req_t req;
395 struct net_device *dev = (struct net_device *)link->priv; 362 struct net_device *dev = (struct net_device *)link->priv;
396 ray_dev_t *local = netdev_priv(dev); 363 ray_dev_t *local = netdev_priv(dev);
397 364
@@ -412,54 +379,50 @@ static int ray_config(struct pcmcia_device *link)
412 goto failed; 379 goto failed;
413 dev->irq = link->irq; 380 dev->irq = link->irq;
414 381
415 /* This actually configures the PCMCIA socket -- setting up 382 ret = pcmcia_enable_device(link);
416 the I/O windows and the interrupt mapping.
417 */
418 ret = pcmcia_request_configuration(link, &link->conf);
419 if (ret) 383 if (ret)
420 goto failed; 384 goto failed;
421 385
422/*** Set up 32k window for shared memory (transmit and control) ************/ 386/*** Set up 32k window for shared memory (transmit and control) ************/
423 req.Attributes = 387 link->resource[2]->flags |= WIN_DATA_WIDTH_8 | WIN_MEMORY_TYPE_CM | WIN_ENABLE | WIN_USE_WAIT;
424 WIN_DATA_WIDTH_8 | WIN_MEMORY_TYPE_CM | WIN_ENABLE | WIN_USE_WAIT; 388 link->resource[2]->start = 0;
425 req.Base = 0; 389 link->resource[2]->end = 0x8000;
426 req.Size = 0x8000; 390 ret = pcmcia_request_window(link, link->resource[2], ray_mem_speed);
427 req.AccessSpeed = ray_mem_speed;
428 ret = pcmcia_request_window(link, &req, &link->win);
429 if (ret) 391 if (ret)
430 goto failed; 392 goto failed;
431 ret = pcmcia_map_mem_page(link, link->win, 0); 393 ret = pcmcia_map_mem_page(link, link->resource[2], 0);
432 if (ret) 394 if (ret)
433 goto failed; 395 goto failed;
434 local->sram = ioremap(req.Base, req.Size); 396 local->sram = ioremap(link->resource[2]->start,
397 resource_size(link->resource[2]));
435 398
436/*** Set up 16k window for shared memory (receive buffer) ***************/ 399/*** Set up 16k window for shared memory (receive buffer) ***************/
437 req.Attributes = 400 link->resource[3]->flags |=
438 WIN_DATA_WIDTH_8 | WIN_MEMORY_TYPE_CM | WIN_ENABLE | WIN_USE_WAIT; 401 WIN_DATA_WIDTH_8 | WIN_MEMORY_TYPE_CM | WIN_ENABLE | WIN_USE_WAIT;
439 req.Base = 0; 402 link->resource[3]->start = 0;
440 req.Size = 0x4000; 403 link->resource[3]->end = 0x4000;
441 req.AccessSpeed = ray_mem_speed; 404 ret = pcmcia_request_window(link, link->resource[3], ray_mem_speed);
442 ret = pcmcia_request_window(link, &req, &local->rmem_handle);
443 if (ret) 405 if (ret)
444 goto failed; 406 goto failed;
445 ret = pcmcia_map_mem_page(link, local->rmem_handle, 0x8000); 407 ret = pcmcia_map_mem_page(link, link->resource[3], 0x8000);
446 if (ret) 408 if (ret)
447 goto failed; 409 goto failed;
448 local->rmem = ioremap(req.Base, req.Size); 410 local->rmem = ioremap(link->resource[3]->start,
411 resource_size(link->resource[3]));
449 412
450/*** Set up window for attribute memory ***********************************/ 413/*** Set up window for attribute memory ***********************************/
451 req.Attributes = 414 link->resource[4]->flags |=
452 WIN_DATA_WIDTH_8 | WIN_MEMORY_TYPE_AM | WIN_ENABLE | WIN_USE_WAIT; 415 WIN_DATA_WIDTH_8 | WIN_MEMORY_TYPE_AM | WIN_ENABLE | WIN_USE_WAIT;
453 req.Base = 0; 416 link->resource[4]->start = 0;
454 req.Size = 0x1000; 417 link->resource[4]->end = 0x1000;
455 req.AccessSpeed = ray_mem_speed; 418 ret = pcmcia_request_window(link, link->resource[4], ray_mem_speed);
456 ret = pcmcia_request_window(link, &req, &local->amem_handle);
457 if (ret) 419 if (ret)
458 goto failed; 420 goto failed;
459 ret = pcmcia_map_mem_page(link, local->amem_handle, 0); 421 ret = pcmcia_map_mem_page(link, link->resource[4], 0);
460 if (ret) 422 if (ret)
461 goto failed; 423 goto failed;
462 local->amem = ioremap(req.Base, req.Size); 424 local->amem = ioremap(link->resource[4]->start,
425 resource_size(link->resource[4]));
463 426
464 dev_dbg(&link->dev, "ray_config sram=%p\n", local->sram); 427 dev_dbg(&link->dev, "ray_config sram=%p\n", local->sram);
465 dev_dbg(&link->dev, "ray_config rmem=%p\n", local->rmem); 428 dev_dbg(&link->dev, "ray_config rmem=%p\n", local->rmem);
@@ -608,7 +571,7 @@ static int dl_startup_params(struct net_device *dev)
608 /* Start kernel timer to wait for dl startup to complete. */ 571 /* Start kernel timer to wait for dl startup to complete. */
609 local->timer.expires = jiffies + HZ / 2; 572 local->timer.expires = jiffies + HZ / 2;
610 local->timer.data = (long)local; 573 local->timer.data = (long)local;
611 local->timer.function = &verify_dl_startup; 574 local->timer.function = verify_dl_startup;
612 add_timer(&local->timer); 575 add_timer(&local->timer);
613 dev_dbg(&link->dev, 576 dev_dbg(&link->dev,
614 "ray_cs dl_startup_params started timer for verify_dl_startup\n"); 577 "ray_cs dl_startup_params started timer for verify_dl_startup\n");
@@ -775,11 +738,7 @@ static void join_net(u_long data)
775 local->card_status = CARD_DOING_ACQ; 738 local->card_status = CARD_DOING_ACQ;
776} 739}
777 740
778/*============================================================================ 741
779 After a card is removed, ray_release() will unregister the net
780 device, and release the PCMCIA configuration. If the device is
781 still open, this will be postponed until it is closed.
782=============================================================================*/
783static void ray_release(struct pcmcia_device *link) 742static void ray_release(struct pcmcia_device *link)
784{ 743{
785 struct net_device *dev = link->priv; 744 struct net_device *dev = link->priv;
@@ -1062,18 +1021,6 @@ AP to AP 1 1 dest AP src AP dest source
1062 } 1021 }
1063} /* end encapsulate_frame */ 1022} /* end encapsulate_frame */
1064 1023
1065/*===========================================================================*/
1066
1067static void netdev_get_drvinfo(struct net_device *dev,
1068 struct ethtool_drvinfo *info)
1069{
1070 strcpy(info->driver, "ray_cs");
1071}
1072
1073static const struct ethtool_ops netdev_ethtool_ops = {
1074 .get_drvinfo = netdev_get_drvinfo,
1075};
1076
1077/*====================================================================*/ 1024/*====================================================================*/
1078 1025
1079/*------------------------------------------------------------------*/ 1026/*------------------------------------------------------------------*/
@@ -1829,11 +1776,8 @@ static void ray_update_multi_list(struct net_device *dev, int all)
1829 /* Copy the kernel's list of MC addresses to card */ 1776 /* Copy the kernel's list of MC addresses to card */
1830 netdev_for_each_mc_addr(ha, dev) { 1777 netdev_for_each_mc_addr(ha, dev) {
1831 memcpy_toio(p, ha->addr, ETH_ALEN); 1778 memcpy_toio(p, ha->addr, ETH_ALEN);
1832 dev_dbg(&link->dev, 1779 dev_dbg(&link->dev, "ray_update_multi add addr %pm\n",
1833 "ray_update_multi add addr %02x%02x%02x%02x%02x%02x\n", 1780 ha->addr);
1834 ha->addr[0], ha->addr[1],
1835 ha->addr[2], ha->addr[3],
1836 ha->addr[4], ha->addr[5]);
1837 p += ETH_ALEN; 1781 p += ETH_ALEN;
1838 i++; 1782 i++;
1839 } 1783 }
@@ -1997,12 +1941,12 @@ static irqreturn_t ray_interrupt(int irq, void *dev_id)
1997 dev_dbg(&link->dev, 1941 dev_dbg(&link->dev,
1998 "ray_cs interrupt network \"%s\" start failed\n", 1942 "ray_cs interrupt network \"%s\" start failed\n",
1999 local->sparm.b4.a_current_ess_id); 1943 local->sparm.b4.a_current_ess_id);
2000 local->timer.function = &start_net; 1944 local->timer.function = start_net;
2001 } else { 1945 } else {
2002 dev_dbg(&link->dev, 1946 dev_dbg(&link->dev,
2003 "ray_cs interrupt network \"%s\" join failed\n", 1947 "ray_cs interrupt network \"%s\" join failed\n",
2004 local->sparm.b4.a_current_ess_id); 1948 local->sparm.b4.a_current_ess_id);
2005 local->timer.function = &join_net; 1949 local->timer.function = join_net;
2006 } 1950 }
2007 add_timer(&local->timer); 1951 add_timer(&local->timer);
2008 } 1952 }
@@ -2068,11 +2012,8 @@ static irqreturn_t ray_interrupt(int irq, void *dev_id)
2068 memcpy_fromio(&local->bss_id, 2012 memcpy_fromio(&local->bss_id,
2069 prcs->var.rejoin_net_complete. 2013 prcs->var.rejoin_net_complete.
2070 bssid, ADDRLEN); 2014 bssid, ADDRLEN);
2071 dev_dbg(&link->dev, 2015 dev_dbg(&link->dev, "ray_cs new BSSID = %pm\n",
2072 "ray_cs new BSSID = %02x%02x%02x%02x%02x%02x\n", 2016 local->bss_id);
2073 local->bss_id[0], local->bss_id[1],
2074 local->bss_id[2], local->bss_id[3],
2075 local->bss_id[4], local->bss_id[5]);
2076 if (!sniffer) 2017 if (!sniffer)
2077 authenticate(local); 2018 authenticate(local);
2078 } 2019 }
@@ -2339,8 +2280,8 @@ static void untranslate(ray_dev_t *local, struct sk_buff *skb, int len)
2339 struct ethhdr *peth; 2280 struct ethhdr *peth;
2340 UCHAR srcaddr[ADDRLEN]; 2281 UCHAR srcaddr[ADDRLEN];
2341 UCHAR destaddr[ADDRLEN]; 2282 UCHAR destaddr[ADDRLEN];
2342 static UCHAR org_bridge[3] = { 0, 0, 0xf8 }; 2283 static const UCHAR org_bridge[3] = { 0, 0, 0xf8 };
2343 static UCHAR org_1042[3] = { 0, 0, 0 }; 2284 static const UCHAR org_1042[3] = { 0, 0, 0 };
2344 2285
2345 memcpy(destaddr, ieee80211_get_DA(pmac), ADDRLEN); 2286 memcpy(destaddr, ieee80211_get_DA(pmac), ADDRLEN);
2346 memcpy(srcaddr, ieee80211_get_SA(pmac), ADDRLEN); 2287 memcpy(srcaddr, ieee80211_get_SA(pmac), ADDRLEN);
@@ -2470,9 +2411,9 @@ static void authenticate(ray_dev_t *local)
2470 2411
2471 del_timer(&local->timer); 2412 del_timer(&local->timer);
2472 if (build_auth_frame(local, local->bss_id, OPEN_AUTH_REQUEST)) { 2413 if (build_auth_frame(local, local->bss_id, OPEN_AUTH_REQUEST)) {
2473 local->timer.function = &join_net; 2414 local->timer.function = join_net;
2474 } else { 2415 } else {
2475 local->timer.function = &authenticate_timeout; 2416 local->timer.function = authenticate_timeout;
2476 } 2417 }
2477 local->timer.expires = jiffies + HZ * 2; 2418 local->timer.expires = jiffies + HZ * 2;
2478 local->timer.data = (long)local; 2419 local->timer.data = (long)local;
@@ -2557,7 +2498,7 @@ static void associate(ray_dev_t *local)
2557 del_timer(&local->timer); 2498 del_timer(&local->timer);
2558 local->timer.expires = jiffies + HZ * 2; 2499 local->timer.expires = jiffies + HZ * 2;
2559 local->timer.data = (long)local; 2500 local->timer.data = (long)local;
2560 local->timer.function = &join_net; 2501 local->timer.function = join_net;
2561 add_timer(&local->timer); 2502 add_timer(&local->timer);
2562 local->card_status = CARD_ASSOC_FAILED; 2503 local->card_status = CARD_ASSOC_FAILED;
2563 return; 2504 return;
@@ -2591,7 +2532,7 @@ static void clear_interrupt(ray_dev_t *local)
2591#ifdef CONFIG_PROC_FS 2532#ifdef CONFIG_PROC_FS
2592#define MAXDATA (PAGE_SIZE - 80) 2533#define MAXDATA (PAGE_SIZE - 80)
2593 2534
2594static char *card_status[] = { 2535static const char *card_status[] = {
2595 "Card inserted - uninitialized", /* 0 */ 2536 "Card inserted - uninitialized", /* 0 */
2596 "Card not downloaded", /* 1 */ 2537 "Card not downloaded", /* 1 */
2597 "Waiting for download parameters", /* 2 */ 2538 "Waiting for download parameters", /* 2 */
@@ -2608,8 +2549,8 @@ static char *card_status[] = {
2608 "Association failed" /* 16 */ 2549 "Association failed" /* 16 */
2609}; 2550};
2610 2551
2611static char *nettype[] = { "Adhoc", "Infra " }; 2552static const char *nettype[] = { "Adhoc", "Infra " };
2612static char *framing[] = { "Encapsulation", "Translation" } 2553static const char *framing[] = { "Encapsulation", "Translation" }
2613 2554
2614; 2555;
2615/*===========================================================================*/ 2556/*===========================================================================*/
@@ -2802,6 +2743,7 @@ static ssize_t ray_cs_essid_proc_write(struct file *file,
2802static const struct file_operations ray_cs_essid_proc_fops = { 2743static const struct file_operations ray_cs_essid_proc_fops = {
2803 .owner = THIS_MODULE, 2744 .owner = THIS_MODULE,
2804 .write = ray_cs_essid_proc_write, 2745 .write = ray_cs_essid_proc_write,
2746 .llseek = noop_llseek,
2805}; 2747};
2806 2748
2807static ssize_t int_proc_write(struct file *file, const char __user *buffer, 2749static ssize_t int_proc_write(struct file *file, const char __user *buffer,
@@ -2835,10 +2777,11 @@ static ssize_t int_proc_write(struct file *file, const char __user *buffer,
2835static const struct file_operations int_proc_fops = { 2777static const struct file_operations int_proc_fops = {
2836 .owner = THIS_MODULE, 2778 .owner = THIS_MODULE,
2837 .write = int_proc_write, 2779 .write = int_proc_write,
2780 .llseek = noop_llseek,
2838}; 2781};
2839#endif 2782#endif
2840 2783
2841static struct pcmcia_device_id ray_ids[] = { 2784static const struct pcmcia_device_id ray_ids[] = {
2842 PCMCIA_DEVICE_MANF_CARD(0x01a6, 0x0000), 2785 PCMCIA_DEVICE_MANF_CARD(0x01a6, 0x0000),
2843 PCMCIA_DEVICE_NULL, 2786 PCMCIA_DEVICE_NULL,
2844}; 2787};
@@ -2847,9 +2790,7 @@ MODULE_DEVICE_TABLE(pcmcia, ray_ids);
2847 2790
2848static struct pcmcia_driver ray_driver = { 2791static struct pcmcia_driver ray_driver = {
2849 .owner = THIS_MODULE, 2792 .owner = THIS_MODULE,
2850 .drv = { 2793 .name = "ray_cs",
2851 .name = "ray_cs",
2852 },
2853 .probe = ray_probe, 2794 .probe = ray_probe,
2854 .remove = ray_detach, 2795 .remove = ray_detach,
2855 .id_table = ray_ids, 2796 .id_table = ray_ids,