diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/atm/Kconfig | 7 | ||||
-rw-r--r-- | drivers/atm/Makefile | 1 | ||||
-rw-r--r-- | drivers/atm/adummy.c | 168 | ||||
-rw-r--r-- | drivers/atm/atmdev_init.c | 54 | ||||
-rw-r--r-- | drivers/atm/atmtcp.c | 20 | ||||
-rw-r--r-- | drivers/atm/lanai.c | 102 | ||||
-rw-r--r-- | drivers/usb/atm/usbatm.c | 4 |
7 files changed, 188 insertions, 168 deletions
diff --git a/drivers/atm/Kconfig b/drivers/atm/Kconfig index 489de81ea609..01a9f1cb7743 100644 --- a/drivers/atm/Kconfig +++ b/drivers/atm/Kconfig | |||
@@ -5,6 +5,13 @@ | |||
5 | menu "ATM drivers" | 5 | menu "ATM drivers" |
6 | depends on NETDEVICES && ATM | 6 | depends on NETDEVICES && ATM |
7 | 7 | ||
8 | config ATM_DUMMY | ||
9 | tristate "Dummy ATM driver" | ||
10 | depends on ATM | ||
11 | help | ||
12 | Dummy ATM driver. Useful for proxy signalling, testing, | ||
13 | and development. If unsure, say N. | ||
14 | |||
8 | config ATM_TCP | 15 | config ATM_TCP |
9 | tristate "ATM over TCP" | 16 | tristate "ATM over TCP" |
10 | depends on INET && ATM | 17 | depends on INET && ATM |
diff --git a/drivers/atm/Makefile b/drivers/atm/Makefile index 5b77188527a9..b5077ce8cb40 100644 --- a/drivers/atm/Makefile +++ b/drivers/atm/Makefile | |||
@@ -31,6 +31,7 @@ ifeq ($(CONFIG_ATM_IDT77252_USE_SUNI),y) | |||
31 | obj-$(CONFIG_ATM_IDT77252) += suni.o | 31 | obj-$(CONFIG_ATM_IDT77252) += suni.o |
32 | endif | 32 | endif |
33 | 33 | ||
34 | obj-$(CONFIG_ATM_DUMMY) += adummy.o | ||
34 | obj-$(CONFIG_ATM_TCP) += atmtcp.o | 35 | obj-$(CONFIG_ATM_TCP) += atmtcp.o |
35 | obj-$(CONFIG_ATM_FIRESTREAM) += firestream.o | 36 | obj-$(CONFIG_ATM_FIRESTREAM) += firestream.o |
36 | obj-$(CONFIG_ATM_LANAI) += lanai.o | 37 | obj-$(CONFIG_ATM_LANAI) += lanai.o |
diff --git a/drivers/atm/adummy.c b/drivers/atm/adummy.c new file mode 100644 index 000000000000..d15c194be44a --- /dev/null +++ b/drivers/atm/adummy.c | |||
@@ -0,0 +1,168 @@ | |||
1 | /* | ||
2 | * adummy.c: a dummy ATM driver | ||
3 | */ | ||
4 | |||
5 | #include <linux/config.h> | ||
6 | #include <linux/module.h> | ||
7 | #include <linux/version.h> | ||
8 | #include <linux/kernel.h> | ||
9 | #include <linux/skbuff.h> | ||
10 | #include <linux/pci.h> | ||
11 | #include <linux/errno.h> | ||
12 | #include <linux/types.h> | ||
13 | #include <linux/string.h> | ||
14 | #include <linux/delay.h> | ||
15 | #include <linux/init.h> | ||
16 | #include <linux/mm.h> | ||
17 | #include <linux/sched.h> | ||
18 | #include <linux/timer.h> | ||
19 | #include <linux/interrupt.h> | ||
20 | #include <asm/io.h> | ||
21 | #include <asm/byteorder.h> | ||
22 | #include <asm/uaccess.h> | ||
23 | |||
24 | #include <linux/atmdev.h> | ||
25 | #include <linux/atm.h> | ||
26 | #include <linux/sonet.h> | ||
27 | |||
28 | /* version definition */ | ||
29 | |||
30 | #define DRV_VERSION "1.0" | ||
31 | |||
32 | #define DEV_LABEL "adummy" | ||
33 | |||
34 | #define ADUMMY_DEV(dev) ((struct adummy_dev *) (dev)->dev_data) | ||
35 | |||
36 | struct adummy_dev { | ||
37 | struct atm_dev *atm_dev; | ||
38 | |||
39 | struct list_head entry; | ||
40 | }; | ||
41 | |||
42 | /* globals */ | ||
43 | |||
44 | static LIST_HEAD(adummy_devs); | ||
45 | |||
46 | static int __init | ||
47 | adummy_start(struct atm_dev *dev) | ||
48 | { | ||
49 | dev->ci_range.vpi_bits = 4; | ||
50 | dev->ci_range.vci_bits = 12; | ||
51 | |||
52 | return 0; | ||
53 | } | ||
54 | |||
55 | static int | ||
56 | adummy_open(struct atm_vcc *vcc) | ||
57 | { | ||
58 | short vpi = vcc->vpi; | ||
59 | int vci = vcc->vci; | ||
60 | |||
61 | if (vci == ATM_VCI_UNSPEC || vpi == ATM_VPI_UNSPEC) | ||
62 | return 0; | ||
63 | |||
64 | set_bit(ATM_VF_ADDR, &vcc->flags); | ||
65 | set_bit(ATM_VF_READY, &vcc->flags); | ||
66 | |||
67 | return 0; | ||
68 | } | ||
69 | |||
70 | static void | ||
71 | adummy_close(struct atm_vcc *vcc) | ||
72 | { | ||
73 | clear_bit(ATM_VF_READY, &vcc->flags); | ||
74 | clear_bit(ATM_VF_ADDR, &vcc->flags); | ||
75 | } | ||
76 | |||
77 | static int | ||
78 | adummy_send(struct atm_vcc *vcc, struct sk_buff *skb) | ||
79 | { | ||
80 | if (vcc->pop) | ||
81 | vcc->pop(vcc, skb); | ||
82 | else | ||
83 | dev_kfree_skb_any(skb); | ||
84 | atomic_inc(&vcc->stats->tx); | ||
85 | |||
86 | return 0; | ||
87 | } | ||
88 | |||
89 | static int | ||
90 | adummy_proc_read(struct atm_dev *dev, loff_t *pos, char *page) | ||
91 | { | ||
92 | int left = *pos; | ||
93 | |||
94 | if (!left--) | ||
95 | return sprintf(page, "version %s\n", DRV_VERSION); | ||
96 | |||
97 | return 0; | ||
98 | } | ||
99 | |||
100 | static struct atmdev_ops adummy_ops = | ||
101 | { | ||
102 | .open = adummy_open, | ||
103 | .close = adummy_close, | ||
104 | .send = adummy_send, | ||
105 | .proc_read = adummy_proc_read, | ||
106 | .owner = THIS_MODULE | ||
107 | }; | ||
108 | |||
109 | static int __init adummy_init(void) | ||
110 | { | ||
111 | struct atm_dev *atm_dev; | ||
112 | struct adummy_dev *adummy_dev; | ||
113 | int err = 0; | ||
114 | |||
115 | printk(KERN_ERR "adummy: version %s\n", DRV_VERSION); | ||
116 | |||
117 | adummy_dev = (struct adummy_dev *) kmalloc(sizeof(struct adummy_dev), | ||
118 | GFP_KERNEL); | ||
119 | if (!adummy_dev) { | ||
120 | printk(KERN_ERR DEV_LABEL ": kmalloc() failed\n"); | ||
121 | err = -ENOMEM; | ||
122 | goto out; | ||
123 | } | ||
124 | memset(adummy_dev, 0, sizeof(struct adummy_dev)); | ||
125 | |||
126 | atm_dev = atm_dev_register(DEV_LABEL, &adummy_ops, -1, 0); | ||
127 | if (!atm_dev) { | ||
128 | printk(KERN_ERR DEV_LABEL ": atm_dev_register() failed\n"); | ||
129 | err = -ENODEV; | ||
130 | goto out_kfree; | ||
131 | } | ||
132 | |||
133 | adummy_dev->atm_dev = atm_dev; | ||
134 | atm_dev->dev_data = adummy_dev; | ||
135 | |||
136 | if (adummy_start(atm_dev)) { | ||
137 | printk(KERN_ERR DEV_LABEL ": adummy_start() failed\n"); | ||
138 | err = -ENODEV; | ||
139 | goto out_unregister; | ||
140 | } | ||
141 | |||
142 | list_add(&adummy_dev->entry, &adummy_devs); | ||
143 | out: | ||
144 | return err; | ||
145 | |||
146 | out_unregister: | ||
147 | atm_dev_deregister(atm_dev); | ||
148 | out_kfree: | ||
149 | kfree(adummy_dev); | ||
150 | goto out; | ||
151 | } | ||
152 | |||
153 | static void __exit adummy_cleanup(void) | ||
154 | { | ||
155 | struct adummy_dev *adummy_dev, *next; | ||
156 | |||
157 | list_for_each_entry_safe(adummy_dev, next, &adummy_devs, entry) { | ||
158 | atm_dev_deregister(adummy_dev->atm_dev); | ||
159 | kfree(adummy_dev); | ||
160 | } | ||
161 | } | ||
162 | |||
163 | module_init(adummy_init); | ||
164 | module_exit(adummy_cleanup); | ||
165 | |||
166 | MODULE_AUTHOR("chas williams <chas@cmf.nrl.navy.mil>"); | ||
167 | MODULE_DESCRIPTION("dummy ATM driver"); | ||
168 | MODULE_LICENSE("GPL"); | ||
diff --git a/drivers/atm/atmdev_init.c b/drivers/atm/atmdev_init.c deleted file mode 100644 index 0e09e5c28e3f..000000000000 --- a/drivers/atm/atmdev_init.c +++ /dev/null | |||
@@ -1,54 +0,0 @@ | |||
1 | /* drivers/atm/atmdev_init.c - ATM device driver initialization */ | ||
2 | |||
3 | /* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */ | ||
4 | |||
5 | |||
6 | #include <linux/config.h> | ||
7 | #include <linux/init.h> | ||
8 | |||
9 | |||
10 | #ifdef CONFIG_ATM_ZATM | ||
11 | extern int zatm_detect(void); | ||
12 | #endif | ||
13 | #ifdef CONFIG_ATM_AMBASSADOR | ||
14 | extern int amb_detect(void); | ||
15 | #endif | ||
16 | #ifdef CONFIG_ATM_HORIZON | ||
17 | extern int hrz_detect(void); | ||
18 | #endif | ||
19 | #ifdef CONFIG_ATM_FORE200E | ||
20 | extern int fore200e_detect(void); | ||
21 | #endif | ||
22 | #ifdef CONFIG_ATM_LANAI | ||
23 | extern int lanai_detect(void); | ||
24 | #endif | ||
25 | |||
26 | |||
27 | /* | ||
28 | * For historical reasons, atmdev_init returns the number of devices found. | ||
29 | * Note that some detections may not go via atmdev_init (e.g. eni.c), so this | ||
30 | * number is meaningless. | ||
31 | */ | ||
32 | |||
33 | int __init atmdev_init(void) | ||
34 | { | ||
35 | int devs; | ||
36 | |||
37 | devs = 0; | ||
38 | #ifdef CONFIG_ATM_ZATM | ||
39 | devs += zatm_detect(); | ||
40 | #endif | ||
41 | #ifdef CONFIG_ATM_AMBASSADOR | ||
42 | devs += amb_detect(); | ||
43 | #endif | ||
44 | #ifdef CONFIG_ATM_HORIZON | ||
45 | devs += hrz_detect(); | ||
46 | #endif | ||
47 | #ifdef CONFIG_ATM_FORE200E | ||
48 | devs += fore200e_detect(); | ||
49 | #endif | ||
50 | #ifdef CONFIG_ATM_LANAI | ||
51 | devs += lanai_detect(); | ||
52 | #endif | ||
53 | return devs; | ||
54 | } | ||
diff --git a/drivers/atm/atmtcp.c b/drivers/atm/atmtcp.c index 57f1810fdccd..fc518d85543d 100644 --- a/drivers/atm/atmtcp.c +++ b/drivers/atm/atmtcp.c | |||
@@ -246,10 +246,6 @@ static void atmtcp_c_close(struct atm_vcc *vcc) | |||
246 | { | 246 | { |
247 | struct atm_dev *atmtcp_dev; | 247 | struct atm_dev *atmtcp_dev; |
248 | struct atmtcp_dev_data *dev_data; | 248 | struct atmtcp_dev_data *dev_data; |
249 | struct sock *s; | ||
250 | struct hlist_node *node; | ||
251 | struct atm_vcc *walk; | ||
252 | int i; | ||
253 | 249 | ||
254 | atmtcp_dev = (struct atm_dev *) vcc->dev_data; | 250 | atmtcp_dev = (struct atm_dev *) vcc->dev_data; |
255 | dev_data = PRIV(atmtcp_dev); | 251 | dev_data = PRIV(atmtcp_dev); |
@@ -257,20 +253,8 @@ static void atmtcp_c_close(struct atm_vcc *vcc) | |||
257 | if (dev_data->persist) return; | 253 | if (dev_data->persist) return; |
258 | atmtcp_dev->dev_data = NULL; | 254 | atmtcp_dev->dev_data = NULL; |
259 | kfree(dev_data); | 255 | kfree(dev_data); |
260 | shutdown_atm_dev(atmtcp_dev); | 256 | atm_dev_deregister(atmtcp_dev); |
261 | vcc->dev_data = NULL; | 257 | vcc->dev_data = NULL; |
262 | read_lock(&vcc_sklist_lock); | ||
263 | for(i = 0; i < VCC_HTABLE_SIZE; ++i) { | ||
264 | struct hlist_head *head = &vcc_hash[i]; | ||
265 | |||
266 | sk_for_each(s, node, head) { | ||
267 | walk = atm_sk(s); | ||
268 | if (walk->dev != atmtcp_dev) | ||
269 | continue; | ||
270 | wake_up(s->sk_sleep); | ||
271 | } | ||
272 | } | ||
273 | read_unlock(&vcc_sklist_lock); | ||
274 | module_put(THIS_MODULE); | 258 | module_put(THIS_MODULE); |
275 | } | 259 | } |
276 | 260 | ||
@@ -450,7 +434,7 @@ static int atmtcp_remove_persistent(int itf) | |||
450 | if (PRIV(dev)->vcc) return 0; | 434 | if (PRIV(dev)->vcc) return 0; |
451 | kfree(dev_data); | 435 | kfree(dev_data); |
452 | atm_dev_put(dev); | 436 | atm_dev_put(dev); |
453 | shutdown_atm_dev(dev); | 437 | atm_dev_deregister(dev); |
454 | return 0; | 438 | return 0; |
455 | } | 439 | } |
456 | 440 | ||
diff --git a/drivers/atm/lanai.c b/drivers/atm/lanai.c index 51ec14787293..69f4c7ce9a63 100644 --- a/drivers/atm/lanai.c +++ b/drivers/atm/lanai.c | |||
@@ -39,7 +39,7 @@ | |||
39 | * o lanai_change_qos() isn't written yet | 39 | * o lanai_change_qos() isn't written yet |
40 | * | 40 | * |
41 | * o There aren't any ioctl's yet -- I'd like to eventually support | 41 | * o There aren't any ioctl's yet -- I'd like to eventually support |
42 | * setting loopback and LED modes that way. (see lanai_ioctl) | 42 | * setting loopback and LED modes that way. |
43 | * | 43 | * |
44 | * o If the segmentation engine or DMA gets shut down we should restart | 44 | * o If the segmentation engine or DMA gets shut down we should restart |
45 | * card as per section 17.0i. (see lanai_reset) | 45 | * card as per section 17.0i. (see lanai_reset) |
@@ -305,7 +305,7 @@ struct lanai_dev { | |||
305 | * vci with their bit set | 305 | * vci with their bit set |
306 | */ | 306 | */ |
307 | static void vci_bitfield_iterate(struct lanai_dev *lanai, | 307 | static void vci_bitfield_iterate(struct lanai_dev *lanai, |
308 | /*const*/ unsigned long *lp, | 308 | const unsigned long *lp, |
309 | void (*func)(struct lanai_dev *,vci_t vci)) | 309 | void (*func)(struct lanai_dev *,vci_t vci)) |
310 | { | 310 | { |
311 | vci_t vci = find_first_bit(lp, NUM_VCI); | 311 | vci_t vci = find_first_bit(lp, NUM_VCI); |
@@ -951,7 +951,7 @@ static int __devinit eeprom_read(struct lanai_dev *lanai) | |||
951 | /* read a big-endian 4-byte value out of eeprom */ | 951 | /* read a big-endian 4-byte value out of eeprom */ |
952 | static inline u32 eeprom_be4(const struct lanai_dev *lanai, int address) | 952 | static inline u32 eeprom_be4(const struct lanai_dev *lanai, int address) |
953 | { | 953 | { |
954 | return be32_to_cpup((u32 *) (&lanai->eeprom[address])); | 954 | return be32_to_cpup((const u32 *) &lanai->eeprom[address]); |
955 | } | 955 | } |
956 | 956 | ||
957 | /* Checksum/validate EEPROM contents */ | 957 | /* Checksum/validate EEPROM contents */ |
@@ -1160,7 +1160,7 @@ static inline int vcc_tx_space(const struct lanai_vcc *lvcc, int endptr) | |||
1160 | } | 1160 | } |
1161 | 1161 | ||
1162 | /* test if VCC is currently backlogged */ | 1162 | /* test if VCC is currently backlogged */ |
1163 | static inline int vcc_is_backlogged(/*const*/ struct lanai_vcc *lvcc) | 1163 | static inline int vcc_is_backlogged(const struct lanai_vcc *lvcc) |
1164 | { | 1164 | { |
1165 | return !skb_queue_empty(&lvcc->tx.backlog); | 1165 | return !skb_queue_empty(&lvcc->tx.backlog); |
1166 | } | 1166 | } |
@@ -1395,7 +1395,8 @@ static void vcc_rx_aal5(struct lanai_vcc *lvcc, int endptr) | |||
1395 | { | 1395 | { |
1396 | int size; | 1396 | int size; |
1397 | struct sk_buff *skb; | 1397 | struct sk_buff *skb; |
1398 | /*const*/ u32 *x, *end = &lvcc->rx.buf.start[endptr * 4]; | 1398 | const u32 *x; |
1399 | u32 *end = &lvcc->rx.buf.start[endptr * 4]; | ||
1399 | int n = ((unsigned long) end) - ((unsigned long) lvcc->rx.buf.ptr); | 1400 | int n = ((unsigned long) end) - ((unsigned long) lvcc->rx.buf.ptr); |
1400 | if (n < 0) | 1401 | if (n < 0) |
1401 | n += lanai_buf_size(&lvcc->rx.buf); | 1402 | n += lanai_buf_size(&lvcc->rx.buf); |
@@ -2111,7 +2112,7 @@ static int lanai_normalize_ci(struct lanai_dev *lanai, | |||
2111 | * shifted by that much as we compute | 2112 | * shifted by that much as we compute |
2112 | * | 2113 | * |
2113 | */ | 2114 | */ |
2114 | static int pcr_to_cbricg(/*const*/ struct atm_qos *qos) | 2115 | static int pcr_to_cbricg(const struct atm_qos *qos) |
2115 | { | 2116 | { |
2116 | int rounddown = 0; /* 1 = Round PCR down, i.e. round ICG _up_ */ | 2117 | int rounddown = 0; /* 1 = Round PCR down, i.e. round ICG _up_ */ |
2117 | int x, icg, pcr = atm_pcr_goal(&qos->txtp); | 2118 | int x, icg, pcr = atm_pcr_goal(&qos->txtp); |
@@ -2434,93 +2435,6 @@ static int lanai_open(struct atm_vcc *atmvcc) | |||
2434 | return result; | 2435 | return result; |
2435 | } | 2436 | } |
2436 | 2437 | ||
2437 | #if 0 | ||
2438 | /* ioctl operations for card */ | ||
2439 | /* NOTE: these are all DEBUGGING ONLY currently */ | ||
2440 | static int lanai_ioctl(struct atm_dev *atmdev, unsigned int cmd, void __user *arg) | ||
2441 | { | ||
2442 | int result = 0; | ||
2443 | struct lanai_dev *lanai = (struct lanai_dev *) atmdev->dev_data; | ||
2444 | switch(cmd) { | ||
2445 | case 2106275: | ||
2446 | shutdown_atm_dev(atmdev); | ||
2447 | return 0; | ||
2448 | case 2200000: { | ||
2449 | unsigned long flags; | ||
2450 | spin_lock_irqsave(&lanai->servicelock, flags); | ||
2451 | run_service(lanai); | ||
2452 | spin_unlock_irqrestore(&lanai->servicelock, flags); | ||
2453 | return 0; } | ||
2454 | case 2200002: | ||
2455 | get_statistics(lanai); | ||
2456 | return 0; | ||
2457 | case 2200003: { | ||
2458 | unsigned int i; | ||
2459 | for (i = 0; i <= 0x5C ; i += 4) { | ||
2460 | if (i==0x48) /* Write-only butt reg */ | ||
2461 | continue; | ||
2462 | printk(KERN_CRIT DEV_LABEL " 0x%02X: " | ||
2463 | "0x%08X\n", i, | ||
2464 | (unsigned int) readl(lanai->base + i)); | ||
2465 | barrier(); mb(); | ||
2466 | pcistatus_check(lanai, 0); | ||
2467 | barrier(); mb(); | ||
2468 | } | ||
2469 | return 0; } | ||
2470 | case 2200004: { | ||
2471 | u8 b; | ||
2472 | u16 w; | ||
2473 | u32 dw; | ||
2474 | struct pci_dev *pci = lanai->pci; | ||
2475 | (void) pci_read_config_word(pci, PCI_VENDOR_ID, &w); | ||
2476 | DPRINTK("vendor = 0x%X\n", (unsigned int) w); | ||
2477 | (void) pci_read_config_word(pci, PCI_DEVICE_ID, &w); | ||
2478 | DPRINTK("device = 0x%X\n", (unsigned int) w); | ||
2479 | (void) pci_read_config_word(pci, PCI_COMMAND, &w); | ||
2480 | DPRINTK("command = 0x%X\n", (unsigned int) w); | ||
2481 | (void) pci_read_config_word(pci, PCI_STATUS, &w); | ||
2482 | DPRINTK("status = 0x%X\n", (unsigned int) w); | ||
2483 | (void) pci_read_config_dword(pci, | ||
2484 | PCI_CLASS_REVISION, &dw); | ||
2485 | DPRINTK("class/revision = 0x%X\n", (unsigned int) dw); | ||
2486 | (void) pci_read_config_byte(pci, | ||
2487 | PCI_CACHE_LINE_SIZE, &b); | ||
2488 | DPRINTK("cache line size = 0x%X\n", (unsigned int) b); | ||
2489 | (void) pci_read_config_byte(pci, PCI_LATENCY_TIMER, &b); | ||
2490 | DPRINTK("latency = %d (0x%X)\n", | ||
2491 | (int) b, (unsigned int) b); | ||
2492 | (void) pci_read_config_byte(pci, PCI_HEADER_TYPE, &b); | ||
2493 | DPRINTK("header type = 0x%X\n", (unsigned int) b); | ||
2494 | (void) pci_read_config_byte(pci, PCI_BIST, &b); | ||
2495 | DPRINTK("bist = 0x%X\n", (unsigned int) b); | ||
2496 | /* skipping a few here */ | ||
2497 | (void) pci_read_config_byte(pci, | ||
2498 | PCI_INTERRUPT_LINE, &b); | ||
2499 | DPRINTK("pci_int_line = 0x%X\n", (unsigned int) b); | ||
2500 | (void) pci_read_config_byte(pci, | ||
2501 | PCI_INTERRUPT_PIN, &b); | ||
2502 | DPRINTK("pci_int_pin = 0x%X\n", (unsigned int) b); | ||
2503 | (void) pci_read_config_byte(pci, PCI_MIN_GNT, &b); | ||
2504 | DPRINTK("min_gnt = 0x%X\n", (unsigned int) b); | ||
2505 | (void) pci_read_config_byte(pci, PCI_MAX_LAT, &b); | ||
2506 | DPRINTK("max_lat = 0x%X\n", (unsigned int) b); } | ||
2507 | return 0; | ||
2508 | #ifdef USE_POWERDOWN | ||
2509 | case 2200005: | ||
2510 | DPRINTK("Coming out of powerdown\n"); | ||
2511 | lanai->conf1 &= ~CONFIG1_POWERDOWN; | ||
2512 | conf1_write(lanai); | ||
2513 | return 0; | ||
2514 | #endif | ||
2515 | default: | ||
2516 | result = -ENOIOCTLCMD; | ||
2517 | } | ||
2518 | return result; | ||
2519 | } | ||
2520 | #else /* !0 */ | ||
2521 | #define lanai_ioctl NULL | ||
2522 | #endif /* 0 */ | ||
2523 | |||
2524 | static int lanai_send(struct atm_vcc *atmvcc, struct sk_buff *skb) | 2438 | static int lanai_send(struct atm_vcc *atmvcc, struct sk_buff *skb) |
2525 | { | 2439 | { |
2526 | struct lanai_vcc *lvcc = (struct lanai_vcc *) atmvcc->dev_data; | 2440 | struct lanai_vcc *lvcc = (struct lanai_vcc *) atmvcc->dev_data; |
@@ -2678,7 +2592,6 @@ static const struct atmdev_ops ops = { | |||
2678 | .dev_close = lanai_dev_close, | 2592 | .dev_close = lanai_dev_close, |
2679 | .open = lanai_open, | 2593 | .open = lanai_open, |
2680 | .close = lanai_close, | 2594 | .close = lanai_close, |
2681 | .ioctl = lanai_ioctl, | ||
2682 | .getsockopt = NULL, | 2595 | .getsockopt = NULL, |
2683 | .setsockopt = NULL, | 2596 | .setsockopt = NULL, |
2684 | .send = lanai_send, | 2597 | .send = lanai_send, |
@@ -2760,6 +2673,7 @@ static void __exit lanai_module_exit(void) | |||
2760 | * gone, so there isn't much to do | 2673 | * gone, so there isn't much to do |
2761 | */ | 2674 | */ |
2762 | DPRINTK("cleanup_module()\n"); | 2675 | DPRINTK("cleanup_module()\n"); |
2676 | pci_unregister_driver(&lanai_driver); | ||
2763 | } | 2677 | } |
2764 | 2678 | ||
2765 | module_init(lanai_module_init); | 2679 | module_init(lanai_module_init); |
diff --git a/drivers/usb/atm/usbatm.c b/drivers/usb/atm/usbatm.c index c466739428b2..2e6593e6c1bd 100644 --- a/drivers/usb/atm/usbatm.c +++ b/drivers/usb/atm/usbatm.c | |||
@@ -879,7 +879,7 @@ static int usbatm_atm_init(struct usbatm_data *instance) | |||
879 | 879 | ||
880 | fail: | 880 | fail: |
881 | instance->atm_dev = NULL; | 881 | instance->atm_dev = NULL; |
882 | shutdown_atm_dev(atm_dev); /* usbatm_atm_dev_close will eventually be called */ | 882 | atm_dev_deregister(atm_dev); /* usbatm_atm_dev_close will eventually be called */ |
883 | return ret; | 883 | return ret; |
884 | } | 884 | } |
885 | 885 | ||
@@ -1164,7 +1164,7 @@ void usbatm_usb_disconnect(struct usb_interface *intf) | |||
1164 | 1164 | ||
1165 | /* ATM finalize */ | 1165 | /* ATM finalize */ |
1166 | if (instance->atm_dev) | 1166 | if (instance->atm_dev) |
1167 | shutdown_atm_dev(instance->atm_dev); | 1167 | atm_dev_deregister(instance->atm_dev); |
1168 | 1168 | ||
1169 | usbatm_put_instance(instance); /* taken in usbatm_usb_probe */ | 1169 | usbatm_put_instance(instance); /* taken in usbatm_usb_probe */ |
1170 | } | 1170 | } |