diff options
| author | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-29 20:32:08 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-29 20:32:08 -0500 |
| commit | 12074a35b4ef36d7a971beaf42412b22f304cdd1 (patch) | |
| tree | ee52353367f9b2f2bd983d18806a3e64f00886f3 /drivers | |
| parent | 49c91fb01ff3948285608c65754b3ffbf57d50f2 (diff) | |
| parent | 34a0b3cdc078746788ffc49e56da0db62b8b6ea4 (diff) | |
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
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 | } |
