diff options
-rw-r--r-- | Documentation/kernel-parameters.txt | 8 | ||||
-rw-r--r-- | drivers/ata/libata-acpi.c | 3 | ||||
-rw-r--r-- | drivers/ata/libata-core.c | 2 | ||||
-rw-r--r-- | drivers/ata/pata_pcmcia.c | 1 | ||||
-rw-r--r-- | drivers/ata/pata_qdi.c | 2 | ||||
-rw-r--r-- | drivers/ata/pata_scc.c | 4 | ||||
-rw-r--r-- | drivers/ata/sata_nv.c | 92 | ||||
-rw-r--r-- | drivers/ata/sata_promise.c | 24 | ||||
-rw-r--r-- | drivers/ata/sata_via.c | 8 | ||||
-rw-r--r-- | drivers/md/md.c | 26 | ||||
-rw-r--r-- | drivers/md/raid1.c | 1 | ||||
-rw-r--r-- | drivers/md/raid5.c | 2 | ||||
-rw-r--r-- | drivers/net/atl1/atl1_main.c | 12 | ||||
-rw-r--r-- | drivers/net/pcmcia/ibmtr_cs.c | 14 | ||||
-rw-r--r-- | drivers/net/skge.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/bcm43xx/bcm43xx.h | 18 | ||||
-rw-r--r-- | drivers/net/wireless/bcm43xx/bcm43xx_dma.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/bcm43xx/bcm43xx_main.c | 81 | ||||
-rw-r--r-- | drivers/net/wireless/bcm43xx/bcm43xx_main.h | 19 | ||||
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_usb.c | 4 | ||||
-rw-r--r-- | include/linux/raid/md_k.h | 1 | ||||
-rw-r--r-- | include/net/ieee80211.h | 2 | ||||
-rw-r--r-- | net/ieee80211/ieee80211_geo.c | 16 | ||||
-rw-r--r-- | net/ieee80211/ieee80211_wx.c | 8 |
24 files changed, 190 insertions, 166 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 6b8ad06846c4..09220a1e22d9 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -754,14 +754,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
754 | inport.irq= [HW] Inport (ATI XL and Microsoft) busmouse driver | 754 | inport.irq= [HW] Inport (ATI XL and Microsoft) busmouse driver |
755 | Format: <irq> | 755 | Format: <irq> |
756 | 756 | ||
757 | combined_mode= [HW] control which driver uses IDE ports in combined | ||
758 | mode: legacy IDE driver, libata, or both | ||
759 | (in the libata case, libata.atapi_enabled=1 may be | ||
760 | useful as well). Note that using the ide or libata | ||
761 | options may affect your device naming (e.g. by | ||
762 | changing hdc to sdb). | ||
763 | Format: combined (default), ide, or libata | ||
764 | |||
765 | inttest= [IA64] | 757 | inttest= [IA64] |
766 | 758 | ||
767 | io7= [HW] IO7 for Marvel based alpha systems | 759 | io7= [HW] IO7 for Marvel based alpha systems |
diff --git a/drivers/ata/libata-acpi.c b/drivers/ata/libata-acpi.c index 03a0acff6cfa..cb3eab6e379d 100644 --- a/drivers/ata/libata-acpi.c +++ b/drivers/ata/libata-acpi.c | |||
@@ -489,8 +489,7 @@ static void taskfile_load_raw(struct ata_port *ap, | |||
489 | 489 | ||
490 | /* convert gtf to tf */ | 490 | /* convert gtf to tf */ |
491 | tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; /* TBD */ | 491 | tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; /* TBD */ |
492 | tf.protocol = atadev->class == ATA_DEV_ATAPI ? | 492 | tf.protocol = ATA_PROT_NODATA; |
493 | ATA_PROT_ATAPI_NODATA : ATA_PROT_NODATA; | ||
494 | tf.feature = gtf->tfa[0]; /* 0x1f1 */ | 493 | tf.feature = gtf->tfa[0]; /* 0x1f1 */ |
495 | tf.nsect = gtf->tfa[1]; /* 0x1f2 */ | 494 | tf.nsect = gtf->tfa[1]; /* 0x1f2 */ |
496 | tf.lbal = gtf->tfa[2]; /* 0x1f3 */ | 495 | tf.lbal = gtf->tfa[2]; /* 0x1f3 */ |
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index fef87dd70d17..4595d1f8cf60 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -895,6 +895,7 @@ static u64 ata_read_native_max_address(struct ata_device *dev) | |||
895 | /** | 895 | /** |
896 | * ata_set_native_max_address_ext - LBA48 native max set | 896 | * ata_set_native_max_address_ext - LBA48 native max set |
897 | * @dev: Device to query | 897 | * @dev: Device to query |
898 | * @new_sectors: new max sectors value to set for the device | ||
898 | * | 899 | * |
899 | * Perform an LBA48 size set max upon the device in question. Return the | 900 | * Perform an LBA48 size set max upon the device in question. Return the |
900 | * actual LBA48 size or zero if the command fails. | 901 | * actual LBA48 size or zero if the command fails. |
@@ -932,6 +933,7 @@ static u64 ata_set_native_max_address_ext(struct ata_device *dev, u64 new_sector | |||
932 | /** | 933 | /** |
933 | * ata_set_native_max_address - LBA28 native max set | 934 | * ata_set_native_max_address - LBA28 native max set |
934 | * @dev: Device to query | 935 | * @dev: Device to query |
936 | * @new_sectors: new max sectors value to set for the device | ||
935 | * | 937 | * |
936 | * Perform an LBA28 size set max upon the device in question. Return the | 938 | * Perform an LBA28 size set max upon the device in question. Return the |
937 | * actual LBA28 size or zero if the command fails. | 939 | * actual LBA28 size or zero if the command fails. |
diff --git a/drivers/ata/pata_pcmcia.c b/drivers/ata/pata_pcmcia.c index 75dc84797ff3..11245e331f77 100644 --- a/drivers/ata/pata_pcmcia.c +++ b/drivers/ata/pata_pcmcia.c | |||
@@ -357,6 +357,7 @@ static struct pcmcia_device_id pcmcia_devices[] = { | |||
357 | PCMCIA_DEVICE_MANF_CARD(0x000a, 0x0000), /* I-O Data CFA */ | 357 | PCMCIA_DEVICE_MANF_CARD(0x000a, 0x0000), /* I-O Data CFA */ |
358 | PCMCIA_DEVICE_MANF_CARD(0x001c, 0x0001), /* Mitsubishi CFA */ | 358 | PCMCIA_DEVICE_MANF_CARD(0x001c, 0x0001), /* Mitsubishi CFA */ |
359 | PCMCIA_DEVICE_MANF_CARD(0x0032, 0x0704), | 359 | PCMCIA_DEVICE_MANF_CARD(0x0032, 0x0704), |
360 | PCMCIA_DEVICE_MANF_CARD(0x0032, 0x2904), | ||
360 | PCMCIA_DEVICE_MANF_CARD(0x0045, 0x0401), /* SanDisk CFA */ | 361 | PCMCIA_DEVICE_MANF_CARD(0x0045, 0x0401), /* SanDisk CFA */ |
361 | PCMCIA_DEVICE_MANF_CARD(0x0098, 0x0000), /* Toshiba */ | 362 | PCMCIA_DEVICE_MANF_CARD(0x0098, 0x0000), /* Toshiba */ |
362 | PCMCIA_DEVICE_MANF_CARD(0x00a4, 0x002d), | 363 | PCMCIA_DEVICE_MANF_CARD(0x00a4, 0x002d), |
diff --git a/drivers/ata/pata_qdi.c b/drivers/ata/pata_qdi.c index 27685ce63ceb..fb8c9e14b8d4 100644 --- a/drivers/ata/pata_qdi.c +++ b/drivers/ata/pata_qdi.c | |||
@@ -375,7 +375,7 @@ static __init int qdi_init(void) | |||
375 | res = inb(port + 3); | 375 | res = inb(port + 3); |
376 | if (res & 1) { | 376 | if (res & 1) { |
377 | /* Single channel mode */ | 377 | /* Single channel mode */ |
378 | if (qdi_init_one(port, 6580, ide_port[r & 0x01], ide_irq[r & 0x01], r & 0x04)) | 378 | if (qdi_init_one(port, 6580, ide_port[r & 0x01], ide_irq[r & 0x01], r & 0x04) == 0) |
379 | ct++; | 379 | ct++; |
380 | } else { | 380 | } else { |
381 | /* Dual channel mode */ | 381 | /* Dual channel mode */ |
diff --git a/drivers/ata/pata_scc.c b/drivers/ata/pata_scc.c index 5df354d573e8..203f463ac39f 100644 --- a/drivers/ata/pata_scc.c +++ b/drivers/ata/pata_scc.c | |||
@@ -1142,14 +1142,14 @@ static int scc_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1142 | static int printed_version; | 1142 | static int printed_version; |
1143 | unsigned int board_idx = (unsigned int) ent->driver_data; | 1143 | unsigned int board_idx = (unsigned int) ent->driver_data; |
1144 | const struct ata_port_info *ppi[] = { &scc_port_info[board_idx], NULL }; | 1144 | const struct ata_port_info *ppi[] = { &scc_port_info[board_idx], NULL }; |
1145 | struct device *dev = &pdev->dev; | 1145 | struct ata_host *host; |
1146 | int rc; | 1146 | int rc; |
1147 | 1147 | ||
1148 | if (!printed_version++) | 1148 | if (!printed_version++) |
1149 | dev_printk(KERN_DEBUG, &pdev->dev, | 1149 | dev_printk(KERN_DEBUG, &pdev->dev, |
1150 | "version " DRV_VERSION "\n"); | 1150 | "version " DRV_VERSION "\n"); |
1151 | 1151 | ||
1152 | host = ata_port_alloc_pinfo(&pdev->dev, ppi, 1); | 1152 | host = ata_host_alloc_pinfo(&pdev->dev, ppi, 1); |
1153 | if (!host) | 1153 | if (!host) |
1154 | return -ENOMEM; | 1154 | return -ENOMEM; |
1155 | 1155 | ||
diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c index e2e795e58236..a097595d4dc7 100644 --- a/drivers/ata/sata_nv.c +++ b/drivers/ata/sata_nv.c | |||
@@ -257,6 +257,8 @@ static void nv_adma_port_stop(struct ata_port *ap); | |||
257 | static int nv_adma_port_suspend(struct ata_port *ap, pm_message_t mesg); | 257 | static int nv_adma_port_suspend(struct ata_port *ap, pm_message_t mesg); |
258 | static int nv_adma_port_resume(struct ata_port *ap); | 258 | static int nv_adma_port_resume(struct ata_port *ap); |
259 | #endif | 259 | #endif |
260 | static void nv_adma_freeze(struct ata_port *ap); | ||
261 | static void nv_adma_thaw(struct ata_port *ap); | ||
260 | static void nv_adma_error_handler(struct ata_port *ap); | 262 | static void nv_adma_error_handler(struct ata_port *ap); |
261 | static void nv_adma_host_stop(struct ata_host *host); | 263 | static void nv_adma_host_stop(struct ata_host *host); |
262 | static void nv_adma_post_internal_cmd(struct ata_queued_cmd *qc); | 264 | static void nv_adma_post_internal_cmd(struct ata_queued_cmd *qc); |
@@ -444,8 +446,8 @@ static const struct ata_port_operations nv_adma_ops = { | |||
444 | .bmdma_status = ata_bmdma_status, | 446 | .bmdma_status = ata_bmdma_status, |
445 | .qc_prep = nv_adma_qc_prep, | 447 | .qc_prep = nv_adma_qc_prep, |
446 | .qc_issue = nv_adma_qc_issue, | 448 | .qc_issue = nv_adma_qc_issue, |
447 | .freeze = nv_ck804_freeze, | 449 | .freeze = nv_adma_freeze, |
448 | .thaw = nv_ck804_thaw, | 450 | .thaw = nv_adma_thaw, |
449 | .error_handler = nv_adma_error_handler, | 451 | .error_handler = nv_adma_error_handler, |
450 | .post_internal_cmd = nv_adma_post_internal_cmd, | 452 | .post_internal_cmd = nv_adma_post_internal_cmd, |
451 | .data_xfer = ata_data_xfer, | 453 | .data_xfer = ata_data_xfer, |
@@ -815,8 +817,16 @@ static irqreturn_t nv_adma_interrupt(int irq, void *dev_instance) | |||
815 | u16 status; | 817 | u16 status; |
816 | u32 gen_ctl; | 818 | u32 gen_ctl; |
817 | u32 notifier, notifier_error; | 819 | u32 notifier, notifier_error; |
820 | |||
821 | /* if ADMA is disabled, use standard ata interrupt handler */ | ||
822 | if (pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) { | ||
823 | u8 irq_stat = readb(host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_CK804) | ||
824 | >> (NV_INT_PORT_SHIFT * i); | ||
825 | handled += nv_host_intr(ap, irq_stat); | ||
826 | continue; | ||
827 | } | ||
818 | 828 | ||
819 | /* if in ATA register mode, use standard ata interrupt handler */ | 829 | /* if in ATA register mode, check for standard interrupts */ |
820 | if (pp->flags & NV_ADMA_PORT_REGISTER_MODE) { | 830 | if (pp->flags & NV_ADMA_PORT_REGISTER_MODE) { |
821 | u8 irq_stat = readb(host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_CK804) | 831 | u8 irq_stat = readb(host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_CK804) |
822 | >> (NV_INT_PORT_SHIFT * i); | 832 | >> (NV_INT_PORT_SHIFT * i); |
@@ -826,7 +836,6 @@ static irqreturn_t nv_adma_interrupt(int irq, void *dev_instance) | |||
826 | command is active, to prevent losing interrupts. */ | 836 | command is active, to prevent losing interrupts. */ |
827 | irq_stat |= NV_INT_DEV; | 837 | irq_stat |= NV_INT_DEV; |
828 | handled += nv_host_intr(ap, irq_stat); | 838 | handled += nv_host_intr(ap, irq_stat); |
829 | continue; | ||
830 | } | 839 | } |
831 | 840 | ||
832 | notifier = readl(mmio + NV_ADMA_NOTIFIER); | 841 | notifier = readl(mmio + NV_ADMA_NOTIFIER); |
@@ -912,22 +921,77 @@ static irqreturn_t nv_adma_interrupt(int irq, void *dev_instance) | |||
912 | return IRQ_RETVAL(handled); | 921 | return IRQ_RETVAL(handled); |
913 | } | 922 | } |
914 | 923 | ||
924 | static void nv_adma_freeze(struct ata_port *ap) | ||
925 | { | ||
926 | struct nv_adma_port_priv *pp = ap->private_data; | ||
927 | void __iomem *mmio = pp->ctl_block; | ||
928 | u16 tmp; | ||
929 | |||
930 | nv_ck804_freeze(ap); | ||
931 | |||
932 | if (pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) | ||
933 | return; | ||
934 | |||
935 | /* clear any outstanding CK804 notifications */ | ||
936 | writeb( NV_INT_ALL << (ap->port_no * NV_INT_PORT_SHIFT), | ||
937 | ap->host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_CK804); | ||
938 | |||
939 | /* Disable interrupt */ | ||
940 | tmp = readw(mmio + NV_ADMA_CTL); | ||
941 | writew( tmp & ~(NV_ADMA_CTL_AIEN | NV_ADMA_CTL_HOTPLUG_IEN), | ||
942 | mmio + NV_ADMA_CTL); | ||
943 | readw( mmio + NV_ADMA_CTL ); /* flush posted write */ | ||
944 | } | ||
945 | |||
946 | static void nv_adma_thaw(struct ata_port *ap) | ||
947 | { | ||
948 | struct nv_adma_port_priv *pp = ap->private_data; | ||
949 | void __iomem *mmio = pp->ctl_block; | ||
950 | u16 tmp; | ||
951 | |||
952 | nv_ck804_thaw(ap); | ||
953 | |||
954 | if (pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) | ||
955 | return; | ||
956 | |||
957 | /* Enable interrupt */ | ||
958 | tmp = readw(mmio + NV_ADMA_CTL); | ||
959 | writew( tmp | (NV_ADMA_CTL_AIEN | NV_ADMA_CTL_HOTPLUG_IEN), | ||
960 | mmio + NV_ADMA_CTL); | ||
961 | readw( mmio + NV_ADMA_CTL ); /* flush posted write */ | ||
962 | } | ||
963 | |||
915 | static void nv_adma_irq_clear(struct ata_port *ap) | 964 | static void nv_adma_irq_clear(struct ata_port *ap) |
916 | { | 965 | { |
917 | struct nv_adma_port_priv *pp = ap->private_data; | 966 | struct nv_adma_port_priv *pp = ap->private_data; |
918 | void __iomem *mmio = pp->ctl_block; | 967 | void __iomem *mmio = pp->ctl_block; |
919 | u16 status = readw(mmio + NV_ADMA_STAT); | 968 | u32 notifier_clears[2]; |
920 | u32 notifier = readl(mmio + NV_ADMA_NOTIFIER); | ||
921 | u32 notifier_error = readl(mmio + NV_ADMA_NOTIFIER_ERROR); | ||
922 | void __iomem *dma_stat_addr = ap->ioaddr.bmdma_addr + ATA_DMA_STATUS; | ||
923 | 969 | ||
924 | /* clear ADMA status */ | 970 | if (pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) { |
925 | writew(status, mmio + NV_ADMA_STAT); | 971 | ata_bmdma_irq_clear(ap); |
926 | writel(notifier | notifier_error, | 972 | return; |
927 | pp->notifier_clear_block); | 973 | } |
974 | |||
975 | /* clear any outstanding CK804 notifications */ | ||
976 | writeb( NV_INT_ALL << (ap->port_no * NV_INT_PORT_SHIFT), | ||
977 | ap->host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_CK804); | ||
928 | 978 | ||
929 | /** clear legacy status */ | 979 | /* clear ADMA status */ |
930 | iowrite8(ioread8(dma_stat_addr), dma_stat_addr); | 980 | writew(0xffff, mmio + NV_ADMA_STAT); |
981 | |||
982 | /* clear notifiers - note both ports need to be written with | ||
983 | something even though we are only clearing on one */ | ||
984 | if (ap->port_no == 0) { | ||
985 | notifier_clears[0] = 0xFFFFFFFF; | ||
986 | notifier_clears[1] = 0; | ||
987 | } else { | ||
988 | notifier_clears[0] = 0; | ||
989 | notifier_clears[1] = 0xFFFFFFFF; | ||
990 | } | ||
991 | pp = ap->host->ports[0]->private_data; | ||
992 | writel(notifier_clears[0], pp->notifier_clear_block); | ||
993 | pp = ap->host->ports[1]->private_data; | ||
994 | writel(notifier_clears[1], pp->notifier_clear_block); | ||
931 | } | 995 | } |
932 | 996 | ||
933 | static void nv_adma_post_internal_cmd(struct ata_queued_cmd *qc) | 997 | static void nv_adma_post_internal_cmd(struct ata_queued_cmd *qc) |
diff --git a/drivers/ata/sata_promise.c b/drivers/ata/sata_promise.c index f56549b90aa6..3a7d9b5332af 100644 --- a/drivers/ata/sata_promise.c +++ b/drivers/ata/sata_promise.c | |||
@@ -45,7 +45,7 @@ | |||
45 | #include "sata_promise.h" | 45 | #include "sata_promise.h" |
46 | 46 | ||
47 | #define DRV_NAME "sata_promise" | 47 | #define DRV_NAME "sata_promise" |
48 | #define DRV_VERSION "2.05" | 48 | #define DRV_VERSION "2.07" |
49 | 49 | ||
50 | 50 | ||
51 | enum { | 51 | enum { |
@@ -653,6 +653,8 @@ static void pdc_error_intr(struct ata_port *ap, struct ata_queued_cmd *qc, | |||
653 | qc->err_mask |= ac_err_mask; | 653 | qc->err_mask |= ac_err_mask; |
654 | 654 | ||
655 | pdc_reset_port(ap); | 655 | pdc_reset_port(ap); |
656 | |||
657 | ata_port_abort(ap); | ||
656 | } | 658 | } |
657 | 659 | ||
658 | static inline unsigned int pdc_host_intr( struct ata_port *ap, | 660 | static inline unsigned int pdc_host_intr( struct ata_port *ap, |
@@ -924,6 +926,7 @@ static int pdc_ata_init_one (struct pci_dev *pdev, const struct pci_device_id *e | |||
924 | struct ata_host *host; | 926 | struct ata_host *host; |
925 | void __iomem *base; | 927 | void __iomem *base; |
926 | int n_ports, i, rc; | 928 | int n_ports, i, rc; |
929 | int is_sataii_tx4; | ||
927 | 930 | ||
928 | if (!printed_version++) | 931 | if (!printed_version++) |
929 | dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); | 932 | dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); |
@@ -962,10 +965,23 @@ static int pdc_ata_init_one (struct pci_dev *pdev, const struct pci_device_id *e | |||
962 | } | 965 | } |
963 | host->iomap = pcim_iomap_table(pdev); | 966 | host->iomap = pcim_iomap_table(pdev); |
964 | 967 | ||
965 | for (i = 0; i < host->n_ports; i++) | 968 | is_sataii_tx4 = 0; |
969 | if ((pi->flags & (PDC_FLAG_GEN_II|PDC_FLAG_4_PORTS)) == (PDC_FLAG_GEN_II|PDC_FLAG_4_PORTS)) { | ||
970 | is_sataii_tx4 = 1; | ||
971 | dev_printk(KERN_INFO, &pdev->dev, "applying SATAII TX4 port numbering workaround\n"); | ||
972 | } | ||
973 | for (i = 0; i < host->n_ports; i++) { | ||
974 | static const unsigned char sataii_tx4_port_remap[4] = { 3, 1, 0, 2}; | ||
975 | int ata_nr; | ||
976 | |||
977 | ata_nr = i; | ||
978 | if (is_sataii_tx4) | ||
979 | ata_nr = sataii_tx4_port_remap[i]; | ||
980 | |||
966 | pdc_ata_setup_port(host->ports[i], | 981 | pdc_ata_setup_port(host->ports[i], |
967 | base + 0x200 + i * 0x80, | 982 | base + 0x200 + ata_nr * 0x80, |
968 | base + 0x400 + i * 0x100); | 983 | base + 0x400 + ata_nr * 0x100); |
984 | } | ||
969 | 985 | ||
970 | /* initialize adapter */ | 986 | /* initialize adapter */ |
971 | pdc_host_init(host); | 987 | pdc_host_init(host); |
diff --git a/drivers/ata/sata_via.c b/drivers/ata/sata_via.c index 305ab7c68ca5..939c9246fdd1 100644 --- a/drivers/ata/sata_via.c +++ b/drivers/ata/sata_via.c | |||
@@ -93,6 +93,10 @@ static struct pci_driver svia_pci_driver = { | |||
93 | .name = DRV_NAME, | 93 | .name = DRV_NAME, |
94 | .id_table = svia_pci_tbl, | 94 | .id_table = svia_pci_tbl, |
95 | .probe = svia_init_one, | 95 | .probe = svia_init_one, |
96 | #ifdef CONFIG_PM | ||
97 | .suspend = ata_pci_device_suspend, | ||
98 | .resume = ata_pci_device_resume, | ||
99 | #endif | ||
96 | .remove = ata_pci_remove_one, | 100 | .remove = ata_pci_remove_one, |
97 | }; | 101 | }; |
98 | 102 | ||
@@ -112,6 +116,10 @@ static struct scsi_host_template svia_sht = { | |||
112 | .slave_configure = ata_scsi_slave_config, | 116 | .slave_configure = ata_scsi_slave_config, |
113 | .slave_destroy = ata_scsi_slave_destroy, | 117 | .slave_destroy = ata_scsi_slave_destroy, |
114 | .bios_param = ata_std_bios_param, | 118 | .bios_param = ata_std_bios_param, |
119 | #ifdef CONFIG_PM | ||
120 | .suspend = ata_scsi_device_suspend, | ||
121 | .resume = ata_scsi_device_resume, | ||
122 | #endif | ||
115 | }; | 123 | }; |
116 | 124 | ||
117 | static const struct ata_port_operations vt6420_sata_ops = { | 125 | static const struct ata_port_operations vt6420_sata_ops = { |
diff --git a/drivers/md/md.c b/drivers/md/md.c index 2901d0c0ee9e..65814b0340cb 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -3104,7 +3104,6 @@ static int do_md_run(mddev_t * mddev) | |||
3104 | struct gendisk *disk; | 3104 | struct gendisk *disk; |
3105 | struct mdk_personality *pers; | 3105 | struct mdk_personality *pers; |
3106 | char b[BDEVNAME_SIZE]; | 3106 | char b[BDEVNAME_SIZE]; |
3107 | struct block_device *bdev; | ||
3108 | 3107 | ||
3109 | if (list_empty(&mddev->disks)) | 3108 | if (list_empty(&mddev->disks)) |
3110 | /* cannot run an array with no devices.. */ | 3109 | /* cannot run an array with no devices.. */ |
@@ -3332,13 +3331,7 @@ static int do_md_run(mddev_t * mddev) | |||
3332 | md_wakeup_thread(mddev->thread); | 3331 | md_wakeup_thread(mddev->thread); |
3333 | md_wakeup_thread(mddev->sync_thread); /* possibly kick off a reshape */ | 3332 | md_wakeup_thread(mddev->sync_thread); /* possibly kick off a reshape */ |
3334 | 3333 | ||
3335 | bdev = bdget_disk(mddev->gendisk, 0); | 3334 | mddev->changed = 1; |
3336 | if (bdev) { | ||
3337 | bd_set_size(bdev, mddev->array_size << 1); | ||
3338 | blkdev_ioctl(bdev->bd_inode, NULL, BLKRRPART, 0); | ||
3339 | bdput(bdev); | ||
3340 | } | ||
3341 | |||
3342 | md_new_event(mddev); | 3335 | md_new_event(mddev); |
3343 | kobject_uevent(&mddev->gendisk->kobj, KOBJ_CHANGE); | 3336 | kobject_uevent(&mddev->gendisk->kobj, KOBJ_CHANGE); |
3344 | return 0; | 3337 | return 0; |
@@ -3460,6 +3453,7 @@ static int do_md_stop(mddev_t * mddev, int mode) | |||
3460 | mddev->pers = NULL; | 3453 | mddev->pers = NULL; |
3461 | 3454 | ||
3462 | set_capacity(disk, 0); | 3455 | set_capacity(disk, 0); |
3456 | mddev->changed = 1; | ||
3463 | 3457 | ||
3464 | if (mddev->ro) | 3458 | if (mddev->ro) |
3465 | mddev->ro = 0; | 3459 | mddev->ro = 0; |
@@ -4599,6 +4593,20 @@ static int md_release(struct inode *inode, struct file * file) | |||
4599 | return 0; | 4593 | return 0; |
4600 | } | 4594 | } |
4601 | 4595 | ||
4596 | static int md_media_changed(struct gendisk *disk) | ||
4597 | { | ||
4598 | mddev_t *mddev = disk->private_data; | ||
4599 | |||
4600 | return mddev->changed; | ||
4601 | } | ||
4602 | |||
4603 | static int md_revalidate(struct gendisk *disk) | ||
4604 | { | ||
4605 | mddev_t *mddev = disk->private_data; | ||
4606 | |||
4607 | mddev->changed = 0; | ||
4608 | return 0; | ||
4609 | } | ||
4602 | static struct block_device_operations md_fops = | 4610 | static struct block_device_operations md_fops = |
4603 | { | 4611 | { |
4604 | .owner = THIS_MODULE, | 4612 | .owner = THIS_MODULE, |
@@ -4606,6 +4614,8 @@ static struct block_device_operations md_fops = | |||
4606 | .release = md_release, | 4614 | .release = md_release, |
4607 | .ioctl = md_ioctl, | 4615 | .ioctl = md_ioctl, |
4608 | .getgeo = md_getgeo, | 4616 | .getgeo = md_getgeo, |
4617 | .media_changed = md_media_changed, | ||
4618 | .revalidate_disk= md_revalidate, | ||
4609 | }; | 4619 | }; |
4610 | 4620 | ||
4611 | static int md_thread(void * arg) | 4621 | static int md_thread(void * arg) |
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 1b7130cad21f..97ee870b265d 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
@@ -2063,6 +2063,7 @@ static int raid1_resize(mddev_t *mddev, sector_t sectors) | |||
2063 | */ | 2063 | */ |
2064 | mddev->array_size = sectors>>1; | 2064 | mddev->array_size = sectors>>1; |
2065 | set_capacity(mddev->gendisk, mddev->array_size << 1); | 2065 | set_capacity(mddev->gendisk, mddev->array_size << 1); |
2066 | mddev->changed = 1; | ||
2066 | if (mddev->array_size > mddev->size && mddev->recovery_cp == MaxSector) { | 2067 | if (mddev->array_size > mddev->size && mddev->recovery_cp == MaxSector) { |
2067 | mddev->recovery_cp = mddev->size << 1; | 2068 | mddev->recovery_cp = mddev->size << 1; |
2068 | set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); | 2069 | set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); |
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index a72e70ad0975..061375ee6592 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c | |||
@@ -3864,6 +3864,7 @@ static int raid5_resize(mddev_t *mddev, sector_t sectors) | |||
3864 | sectors &= ~((sector_t)mddev->chunk_size/512 - 1); | 3864 | sectors &= ~((sector_t)mddev->chunk_size/512 - 1); |
3865 | mddev->array_size = (sectors * (mddev->raid_disks-conf->max_degraded))>>1; | 3865 | mddev->array_size = (sectors * (mddev->raid_disks-conf->max_degraded))>>1; |
3866 | set_capacity(mddev->gendisk, mddev->array_size << 1); | 3866 | set_capacity(mddev->gendisk, mddev->array_size << 1); |
3867 | mddev->changed = 1; | ||
3867 | if (sectors/2 > mddev->size && mddev->recovery_cp == MaxSector) { | 3868 | if (sectors/2 > mddev->size && mddev->recovery_cp == MaxSector) { |
3868 | mddev->recovery_cp = mddev->size << 1; | 3869 | mddev->recovery_cp = mddev->size << 1; |
3869 | set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); | 3870 | set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); |
@@ -3998,6 +3999,7 @@ static void end_reshape(raid5_conf_t *conf) | |||
3998 | conf->mddev->array_size = conf->mddev->size * | 3999 | conf->mddev->array_size = conf->mddev->size * |
3999 | (conf->raid_disks - conf->max_degraded); | 4000 | (conf->raid_disks - conf->max_degraded); |
4000 | set_capacity(conf->mddev->gendisk, conf->mddev->array_size << 1); | 4001 | set_capacity(conf->mddev->gendisk, conf->mddev->array_size << 1); |
4002 | conf->mddev->changed = 1; | ||
4001 | 4003 | ||
4002 | bdev = bdget_disk(conf->mddev->gendisk, 0); | 4004 | bdev = bdget_disk(conf->mddev->gendisk, 0); |
4003 | if (bdev) { | 4005 | if (bdev) { |
diff --git a/drivers/net/atl1/atl1_main.c b/drivers/net/atl1/atl1_main.c index d28f88bbdd5f..78cf00ff3d38 100644 --- a/drivers/net/atl1/atl1_main.c +++ b/drivers/net/atl1/atl1_main.c | |||
@@ -2038,6 +2038,15 @@ static int atl1_close(struct net_device *netdev) | |||
2038 | return 0; | 2038 | return 0; |
2039 | } | 2039 | } |
2040 | 2040 | ||
2041 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
2042 | static void atl1_poll_controller(struct net_device *netdev) | ||
2043 | { | ||
2044 | disable_irq(netdev->irq); | ||
2045 | atl1_intr(netdev->irq, netdev); | ||
2046 | enable_irq(netdev->irq); | ||
2047 | } | ||
2048 | #endif | ||
2049 | |||
2041 | /* | 2050 | /* |
2042 | * If TPD Buffer size equal to 0, PCIE DMAR_TO_INT | 2051 | * If TPD Buffer size equal to 0, PCIE DMAR_TO_INT |
2043 | * will assert. We do soft reset <0x1400=1> according | 2052 | * will assert. We do soft reset <0x1400=1> according |
@@ -2190,6 +2199,9 @@ static int __devinit atl1_probe(struct pci_dev *pdev, | |||
2190 | netdev->do_ioctl = &atl1_ioctl; | 2199 | netdev->do_ioctl = &atl1_ioctl; |
2191 | netdev->tx_timeout = &atl1_tx_timeout; | 2200 | netdev->tx_timeout = &atl1_tx_timeout; |
2192 | netdev->watchdog_timeo = 5 * HZ; | 2201 | netdev->watchdog_timeo = 5 * HZ; |
2202 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
2203 | netdev->poll_controller = atl1_poll_controller; | ||
2204 | #endif | ||
2193 | netdev->vlan_rx_register = atl1_vlan_rx_register; | 2205 | netdev->vlan_rx_register = atl1_vlan_rx_register; |
2194 | netdev->vlan_rx_add_vid = atl1_vlan_rx_add_vid; | 2206 | netdev->vlan_rx_add_vid = atl1_vlan_rx_add_vid; |
2195 | netdev->vlan_rx_kill_vid = atl1_vlan_rx_kill_vid; | 2207 | netdev->vlan_rx_kill_vid = atl1_vlan_rx_kill_vid; |
diff --git a/drivers/net/pcmcia/ibmtr_cs.c b/drivers/net/pcmcia/ibmtr_cs.c index 1060154ae750..4ecb8ca5a992 100644 --- a/drivers/net/pcmcia/ibmtr_cs.c +++ b/drivers/net/pcmcia/ibmtr_cs.c | |||
@@ -189,16 +189,20 @@ static void ibmtr_detach(struct pcmcia_device *link) | |||
189 | { | 189 | { |
190 | struct ibmtr_dev_t *info = link->priv; | 190 | struct ibmtr_dev_t *info = link->priv; |
191 | struct net_device *dev = info->dev; | 191 | struct net_device *dev = info->dev; |
192 | struct tok_info *ti = netdev_priv(dev); | ||
192 | 193 | ||
193 | DEBUG(0, "ibmtr_detach(0x%p)\n", link); | 194 | DEBUG(0, "ibmtr_detach(0x%p)\n", link); |
195 | |||
196 | /* | ||
197 | * When the card removal interrupt hits tok_interrupt(), | ||
198 | * bail out early, so we don't crash the machine | ||
199 | */ | ||
200 | ti->sram_phys |= 1; | ||
194 | 201 | ||
195 | if (link->dev_node) | 202 | if (link->dev_node) |
196 | unregister_netdev(dev); | 203 | unregister_netdev(dev); |
197 | 204 | ||
198 | { | 205 | del_timer_sync(&(ti->tr_timer)); |
199 | struct tok_info *ti = netdev_priv(dev); | ||
200 | del_timer_sync(&(ti->tr_timer)); | ||
201 | } | ||
202 | 206 | ||
203 | ibmtr_release(link); | 207 | ibmtr_release(link); |
204 | 208 | ||
diff --git a/drivers/net/skge.c b/drivers/net/skge.c index b07da1054add..e0489578945d 100644 --- a/drivers/net/skge.c +++ b/drivers/net/skge.c | |||
@@ -3594,7 +3594,9 @@ static struct net_device *skge_devinit(struct skge_hw *hw, int port, | |||
3594 | skge->duplex = -1; | 3594 | skge->duplex = -1; |
3595 | skge->speed = -1; | 3595 | skge->speed = -1; |
3596 | skge->advertising = skge_supported_modes(hw); | 3596 | skge->advertising = skge_supported_modes(hw); |
3597 | skge->wol = pci_wake_enabled(hw->pdev) ? wol_supported(hw) : 0; | 3597 | |
3598 | if (pci_wake_enabled(hw->pdev)) | ||
3599 | skge->wol = wol_supported(hw) & WAKE_MAGIC; | ||
3598 | 3600 | ||
3599 | hw->dev[port] = dev; | 3601 | hw->dev[port] = dev; |
3600 | 3602 | ||
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx.h b/drivers/net/wireless/bcm43xx/bcm43xx.h index f8483c179e4c..10e07e865426 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx.h +++ b/drivers/net/wireless/bcm43xx/bcm43xx.h | |||
@@ -658,12 +658,6 @@ struct bcm43xx_pio { | |||
658 | 658 | ||
659 | #define BCM43xx_MAX_80211_CORES 2 | 659 | #define BCM43xx_MAX_80211_CORES 2 |
660 | 660 | ||
661 | #ifdef CONFIG_BCM947XX | ||
662 | #define core_offset(bcm) (bcm)->current_core_offset | ||
663 | #else | ||
664 | #define core_offset(bcm) 0 | ||
665 | #endif | ||
666 | |||
667 | /* Generic information about a core. */ | 661 | /* Generic information about a core. */ |
668 | struct bcm43xx_coreinfo { | 662 | struct bcm43xx_coreinfo { |
669 | u8 available:1, | 663 | u8 available:1, |
@@ -789,10 +783,6 @@ struct bcm43xx_private { | |||
789 | 783 | ||
790 | /* The currently active core. */ | 784 | /* The currently active core. */ |
791 | struct bcm43xx_coreinfo *current_core; | 785 | struct bcm43xx_coreinfo *current_core; |
792 | #ifdef CONFIG_BCM947XX | ||
793 | /** current core memory offset */ | ||
794 | u32 current_core_offset; | ||
795 | #endif | ||
796 | struct bcm43xx_coreinfo *active_80211_core; | 786 | struct bcm43xx_coreinfo *active_80211_core; |
797 | /* coreinfo structs for all possible cores follow. | 787 | /* coreinfo structs for all possible cores follow. |
798 | * Note that a core might not exist. | 788 | * Note that a core might not exist. |
@@ -943,25 +933,25 @@ struct bcm43xx_lopair * bcm43xx_get_lopair(struct bcm43xx_phyinfo *phy, | |||
943 | static inline | 933 | static inline |
944 | u16 bcm43xx_read16(struct bcm43xx_private *bcm, u16 offset) | 934 | u16 bcm43xx_read16(struct bcm43xx_private *bcm, u16 offset) |
945 | { | 935 | { |
946 | return ioread16(bcm->mmio_addr + core_offset(bcm) + offset); | 936 | return ioread16(bcm->mmio_addr + offset); |
947 | } | 937 | } |
948 | 938 | ||
949 | static inline | 939 | static inline |
950 | void bcm43xx_write16(struct bcm43xx_private *bcm, u16 offset, u16 value) | 940 | void bcm43xx_write16(struct bcm43xx_private *bcm, u16 offset, u16 value) |
951 | { | 941 | { |
952 | iowrite16(value, bcm->mmio_addr + core_offset(bcm) + offset); | 942 | iowrite16(value, bcm->mmio_addr + offset); |
953 | } | 943 | } |
954 | 944 | ||
955 | static inline | 945 | static inline |
956 | u32 bcm43xx_read32(struct bcm43xx_private *bcm, u16 offset) | 946 | u32 bcm43xx_read32(struct bcm43xx_private *bcm, u16 offset) |
957 | { | 947 | { |
958 | return ioread32(bcm->mmio_addr + core_offset(bcm) + offset); | 948 | return ioread32(bcm->mmio_addr + offset); |
959 | } | 949 | } |
960 | 950 | ||
961 | static inline | 951 | static inline |
962 | void bcm43xx_write32(struct bcm43xx_private *bcm, u16 offset, u32 value) | 952 | void bcm43xx_write32(struct bcm43xx_private *bcm, u16 offset, u32 value) |
963 | { | 953 | { |
964 | iowrite32(value, bcm->mmio_addr + core_offset(bcm) + offset); | 954 | iowrite32(value, bcm->mmio_addr + offset); |
965 | } | 955 | } |
966 | 956 | ||
967 | static inline | 957 | static inline |
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_dma.c b/drivers/net/wireless/bcm43xx/bcm43xx_dma.c index e3d2e61a31ee..1f7731fcfbd5 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_dma.c +++ b/drivers/net/wireless/bcm43xx/bcm43xx_dma.c | |||
@@ -660,10 +660,6 @@ struct bcm43xx_dmaring * bcm43xx_setup_dmaring(struct bcm43xx_private *bcm, | |||
660 | ring->routing = BCM43xx_DMA32_CLIENTTRANS; | 660 | ring->routing = BCM43xx_DMA32_CLIENTTRANS; |
661 | if (dma64) | 661 | if (dma64) |
662 | ring->routing = BCM43xx_DMA64_CLIENTTRANS; | 662 | ring->routing = BCM43xx_DMA64_CLIENTTRANS; |
663 | #ifdef CONFIG_BCM947XX | ||
664 | if (bcm->pci_dev->bus->number == 0) | ||
665 | ring->routing = dma64 ? BCM43xx_DMA64_NOTRANS : BCM43xx_DMA32_NOTRANS; | ||
666 | #endif | ||
667 | 663 | ||
668 | ring->bcm = bcm; | 664 | ring->bcm = bcm; |
669 | ring->nr_slots = nr_slots; | 665 | ring->nr_slots = nr_slots; |
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/bcm43xx/bcm43xx_main.c index 5e96bca6730a..ef6b253a92ce 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c +++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.c | |||
@@ -61,10 +61,6 @@ MODULE_AUTHOR("Stefano Brivio"); | |||
61 | MODULE_AUTHOR("Michael Buesch"); | 61 | MODULE_AUTHOR("Michael Buesch"); |
62 | MODULE_LICENSE("GPL"); | 62 | MODULE_LICENSE("GPL"); |
63 | 63 | ||
64 | #ifdef CONFIG_BCM947XX | ||
65 | extern char *nvram_get(char *name); | ||
66 | #endif | ||
67 | |||
68 | #if defined(CONFIG_BCM43XX_DMA) && defined(CONFIG_BCM43XX_PIO) | 64 | #if defined(CONFIG_BCM43XX_DMA) && defined(CONFIG_BCM43XX_PIO) |
69 | static int modparam_pio; | 65 | static int modparam_pio; |
70 | module_param_named(pio, modparam_pio, int, 0444); | 66 | module_param_named(pio, modparam_pio, int, 0444); |
@@ -142,10 +138,6 @@ MODULE_PARM_DESC(fwpostfix, "Postfix for .fw files. Useful for using multiple fi | |||
142 | { PCI_VENDOR_ID_BROADCOM, 0x4324, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, | 138 | { PCI_VENDOR_ID_BROADCOM, 0x4324, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, |
143 | /* Broadcom 43XG 802.11b/g */ | 139 | /* Broadcom 43XG 802.11b/g */ |
144 | { PCI_VENDOR_ID_BROADCOM, 0x4325, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, | 140 | { PCI_VENDOR_ID_BROADCOM, 0x4325, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, |
145 | #ifdef CONFIG_BCM947XX | ||
146 | /* SB bus on BCM947xx */ | ||
147 | { PCI_VENDOR_ID_BROADCOM, 0x0800, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, | ||
148 | #endif | ||
149 | { 0 }, | 141 | { 0 }, |
150 | }; | 142 | }; |
151 | MODULE_DEVICE_TABLE(pci, bcm43xx_pci_tbl); | 143 | MODULE_DEVICE_TABLE(pci, bcm43xx_pci_tbl); |
@@ -786,9 +778,6 @@ static int bcm43xx_sprom_extract(struct bcm43xx_private *bcm) | |||
786 | { | 778 | { |
787 | u16 value; | 779 | u16 value; |
788 | u16 *sprom; | 780 | u16 *sprom; |
789 | #ifdef CONFIG_BCM947XX | ||
790 | char *c; | ||
791 | #endif | ||
792 | 781 | ||
793 | sprom = kzalloc(BCM43xx_SPROM_SIZE * sizeof(u16), | 782 | sprom = kzalloc(BCM43xx_SPROM_SIZE * sizeof(u16), |
794 | GFP_KERNEL); | 783 | GFP_KERNEL); |
@@ -796,28 +785,7 @@ static int bcm43xx_sprom_extract(struct bcm43xx_private *bcm) | |||
796 | printk(KERN_ERR PFX "sprom_extract OOM\n"); | 785 | printk(KERN_ERR PFX "sprom_extract OOM\n"); |
797 | return -ENOMEM; | 786 | return -ENOMEM; |
798 | } | 787 | } |
799 | #ifdef CONFIG_BCM947XX | ||
800 | sprom[BCM43xx_SPROM_BOARDFLAGS2] = atoi(nvram_get("boardflags2")); | ||
801 | sprom[BCM43xx_SPROM_BOARDFLAGS] = atoi(nvram_get("boardflags")); | ||
802 | |||
803 | if ((c = nvram_get("il0macaddr")) != NULL) | ||
804 | e_aton(c, (char *) &(sprom[BCM43xx_SPROM_IL0MACADDR])); | ||
805 | |||
806 | if ((c = nvram_get("et1macaddr")) != NULL) | ||
807 | e_aton(c, (char *) &(sprom[BCM43xx_SPROM_ET1MACADDR])); | ||
808 | |||
809 | sprom[BCM43xx_SPROM_PA0B0] = atoi(nvram_get("pa0b0")); | ||
810 | sprom[BCM43xx_SPROM_PA0B1] = atoi(nvram_get("pa0b1")); | ||
811 | sprom[BCM43xx_SPROM_PA0B2] = atoi(nvram_get("pa0b2")); | ||
812 | |||
813 | sprom[BCM43xx_SPROM_PA1B0] = atoi(nvram_get("pa1b0")); | ||
814 | sprom[BCM43xx_SPROM_PA1B1] = atoi(nvram_get("pa1b1")); | ||
815 | sprom[BCM43xx_SPROM_PA1B2] = atoi(nvram_get("pa1b2")); | ||
816 | |||
817 | sprom[BCM43xx_SPROM_BOARDREV] = atoi(nvram_get("boardrev")); | ||
818 | #else | ||
819 | bcm43xx_sprom_read(bcm, sprom); | 788 | bcm43xx_sprom_read(bcm, sprom); |
820 | #endif | ||
821 | 789 | ||
822 | /* boardflags2 */ | 790 | /* boardflags2 */ |
823 | value = sprom[BCM43xx_SPROM_BOARDFLAGS2]; | 791 | value = sprom[BCM43xx_SPROM_BOARDFLAGS2]; |
@@ -1225,12 +1193,6 @@ static int _switch_core(struct bcm43xx_private *bcm, int core) | |||
1225 | goto error; | 1193 | goto error; |
1226 | udelay(10); | 1194 | udelay(10); |
1227 | } | 1195 | } |
1228 | #ifdef CONFIG_BCM947XX | ||
1229 | if (bcm->pci_dev->bus->number == 0) | ||
1230 | bcm->current_core_offset = 0x1000 * core; | ||
1231 | else | ||
1232 | bcm->current_core_offset = 0; | ||
1233 | #endif | ||
1234 | 1196 | ||
1235 | return 0; | 1197 | return 0; |
1236 | error: | 1198 | error: |
@@ -1387,19 +1349,6 @@ void bcm43xx_wireless_core_reset(struct bcm43xx_private *bcm, int connect_phy) | |||
1387 | 1349 | ||
1388 | if ((bcm43xx_core_enabled(bcm)) && | 1350 | if ((bcm43xx_core_enabled(bcm)) && |
1389 | !bcm43xx_using_pio(bcm)) { | 1351 | !bcm43xx_using_pio(bcm)) { |
1390 | //FIXME: Do we _really_ want #ifndef CONFIG_BCM947XX here? | ||
1391 | #if 0 | ||
1392 | #ifndef CONFIG_BCM947XX | ||
1393 | /* reset all used DMA controllers. */ | ||
1394 | bcm43xx_dmacontroller_tx_reset(bcm, BCM43xx_MMIO_DMA1_BASE); | ||
1395 | bcm43xx_dmacontroller_tx_reset(bcm, BCM43xx_MMIO_DMA2_BASE); | ||
1396 | bcm43xx_dmacontroller_tx_reset(bcm, BCM43xx_MMIO_DMA3_BASE); | ||
1397 | bcm43xx_dmacontroller_tx_reset(bcm, BCM43xx_MMIO_DMA4_BASE); | ||
1398 | bcm43xx_dmacontroller_rx_reset(bcm, BCM43xx_MMIO_DMA1_BASE); | ||
1399 | if (bcm->current_core->rev < 5) | ||
1400 | bcm43xx_dmacontroller_rx_reset(bcm, BCM43xx_MMIO_DMA4_BASE); | ||
1401 | #endif | ||
1402 | #endif | ||
1403 | } | 1352 | } |
1404 | if (bcm43xx_status(bcm) == BCM43xx_STAT_SHUTTINGDOWN) { | 1353 | if (bcm43xx_status(bcm) == BCM43xx_STAT_SHUTTINGDOWN) { |
1405 | bcm43xx_write32(bcm, BCM43xx_MMIO_STATUS_BITFIELD, | 1354 | bcm43xx_write32(bcm, BCM43xx_MMIO_STATUS_BITFIELD, |
@@ -2140,32 +2089,11 @@ out: | |||
2140 | return err; | 2089 | return err; |
2141 | } | 2090 | } |
2142 | 2091 | ||
2143 | #ifdef CONFIG_BCM947XX | ||
2144 | static struct pci_device_id bcm43xx_47xx_ids[] = { | ||
2145 | { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4324) }, | ||
2146 | { 0 } | ||
2147 | }; | ||
2148 | #endif | ||
2149 | |||
2150 | static int bcm43xx_initialize_irq(struct bcm43xx_private *bcm) | 2092 | static int bcm43xx_initialize_irq(struct bcm43xx_private *bcm) |
2151 | { | 2093 | { |
2152 | int err; | 2094 | int err; |
2153 | 2095 | ||
2154 | bcm->irq = bcm->pci_dev->irq; | 2096 | bcm->irq = bcm->pci_dev->irq; |
2155 | #ifdef CONFIG_BCM947XX | ||
2156 | if (bcm->pci_dev->bus->number == 0) { | ||
2157 | struct pci_dev *d; | ||
2158 | struct pci_device_id *id; | ||
2159 | for (id = bcm43xx_47xx_ids; id->vendor; id++) { | ||
2160 | d = pci_get_device(id->vendor, id->device, NULL); | ||
2161 | if (d != NULL) { | ||
2162 | bcm->irq = d->irq; | ||
2163 | pci_dev_put(d); | ||
2164 | break; | ||
2165 | } | ||
2166 | } | ||
2167 | } | ||
2168 | #endif | ||
2169 | err = request_irq(bcm->irq, bcm43xx_interrupt_handler, | 2097 | err = request_irq(bcm->irq, bcm43xx_interrupt_handler, |
2170 | IRQF_SHARED, KBUILD_MODNAME, bcm); | 2098 | IRQF_SHARED, KBUILD_MODNAME, bcm); |
2171 | if (err) | 2099 | if (err) |
@@ -2645,10 +2573,6 @@ static int bcm43xx_probe_cores(struct bcm43xx_private *bcm) | |||
2645 | chip_id_16 = 0x4610; | 2573 | chip_id_16 = 0x4610; |
2646 | else if ((pci_device >= 0x4710) && (pci_device <= 0x4715)) | 2574 | else if ((pci_device >= 0x4710) && (pci_device <= 0x4715)) |
2647 | chip_id_16 = 0x4710; | 2575 | chip_id_16 = 0x4710; |
2648 | #ifdef CONFIG_BCM947XX | ||
2649 | else if ((pci_device >= 0x4320) && (pci_device <= 0x4325)) | ||
2650 | chip_id_16 = 0x4309; | ||
2651 | #endif | ||
2652 | else { | 2576 | else { |
2653 | printk(KERN_ERR PFX "Could not determine Chip ID\n"); | 2577 | printk(KERN_ERR PFX "Could not determine Chip ID\n"); |
2654 | return -ENODEV; | 2578 | return -ENODEV; |
@@ -4144,11 +4068,6 @@ static int __devinit bcm43xx_init_one(struct pci_dev *pdev, | |||
4144 | struct bcm43xx_private *bcm; | 4068 | struct bcm43xx_private *bcm; |
4145 | int err; | 4069 | int err; |
4146 | 4070 | ||
4147 | #ifdef CONFIG_BCM947XX | ||
4148 | if ((pdev->bus->number == 0) && (pdev->device != 0x0800)) | ||
4149 | return -ENODEV; | ||
4150 | #endif | ||
4151 | |||
4152 | #ifdef DEBUG_SINGLE_DEVICE_ONLY | 4071 | #ifdef DEBUG_SINGLE_DEVICE_ONLY |
4153 | if (strcmp(pci_name(pdev), DEBUG_SINGLE_DEVICE_ONLY)) | 4072 | if (strcmp(pci_name(pdev), DEBUG_SINGLE_DEVICE_ONLY)) |
4154 | return -ENODEV; | 4073 | return -ENODEV; |
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.h b/drivers/net/wireless/bcm43xx/bcm43xx_main.h index f76357178e4d..c8f3c532bab5 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_main.h +++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.h | |||
@@ -33,25 +33,6 @@ | |||
33 | 33 | ||
34 | #include "bcm43xx.h" | 34 | #include "bcm43xx.h" |
35 | 35 | ||
36 | #ifdef CONFIG_BCM947XX | ||
37 | #define atoi(str) simple_strtoul(((str != NULL) ? str : ""), NULL, 0) | ||
38 | |||
39 | static inline void e_aton(char *str, char *dest) | ||
40 | { | ||
41 | int i = 0; | ||
42 | u16 *d = (u16 *) dest; | ||
43 | |||
44 | for (;;) { | ||
45 | dest[i++] = (char) simple_strtoul(str, NULL, 16); | ||
46 | str += 2; | ||
47 | if (!*str++ || i == 6) | ||
48 | break; | ||
49 | } | ||
50 | for (i = 0; i < 3; i++) | ||
51 | d[i] = cpu_to_be16(d[i]); | ||
52 | } | ||
53 | #endif | ||
54 | |||
55 | #define P4D_BYT3S(magic, nr_bytes) u8 __p4dding##magic[nr_bytes] | 36 | #define P4D_BYT3S(magic, nr_bytes) u8 __p4dding##magic[nr_bytes] |
56 | #define P4D_BYTES(line, nr_bytes) P4D_BYT3S(line, nr_bytes) | 37 | #define P4D_BYTES(line, nr_bytes) P4D_BYT3S(line, nr_bytes) |
57 | /* Magic helper macro to pad structures. Ignore those above. It's magic. */ | 38 | /* Magic helper macro to pad structures. Ignore those above. It's magic. */ |
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c index e04cffc8adf3..8459549d0cee 100644 --- a/drivers/net/wireless/zd1211rw/zd_usb.c +++ b/drivers/net/wireless/zd1211rw/zd_usb.c | |||
@@ -40,6 +40,7 @@ static struct usb_device_id usb_ids[] = { | |||
40 | { USB_DEVICE(0x126f, 0xa006), .driver_info = DEVICE_ZD1211 }, | 40 | { USB_DEVICE(0x126f, 0xa006), .driver_info = DEVICE_ZD1211 }, |
41 | { USB_DEVICE(0x6891, 0xa727), .driver_info = DEVICE_ZD1211 }, | 41 | { USB_DEVICE(0x6891, 0xa727), .driver_info = DEVICE_ZD1211 }, |
42 | { USB_DEVICE(0x0df6, 0x9071), .driver_info = DEVICE_ZD1211 }, | 42 | { USB_DEVICE(0x0df6, 0x9071), .driver_info = DEVICE_ZD1211 }, |
43 | { USB_DEVICE(0x0df6, 0x9075), .driver_info = DEVICE_ZD1211 }, | ||
43 | { USB_DEVICE(0x157e, 0x300b), .driver_info = DEVICE_ZD1211 }, | 44 | { USB_DEVICE(0x157e, 0x300b), .driver_info = DEVICE_ZD1211 }, |
44 | { USB_DEVICE(0x079b, 0x004a), .driver_info = DEVICE_ZD1211 }, | 45 | { USB_DEVICE(0x079b, 0x004a), .driver_info = DEVICE_ZD1211 }, |
45 | { USB_DEVICE(0x1740, 0x2000), .driver_info = DEVICE_ZD1211 }, | 46 | { USB_DEVICE(0x1740, 0x2000), .driver_info = DEVICE_ZD1211 }, |
@@ -67,8 +68,11 @@ static struct usb_device_id usb_ids[] = { | |||
67 | { USB_DEVICE(0x0586, 0x3410), .driver_info = DEVICE_ZD1211B }, | 68 | { USB_DEVICE(0x0586, 0x3410), .driver_info = DEVICE_ZD1211B }, |
68 | { USB_DEVICE(0x0baf, 0x0121), .driver_info = DEVICE_ZD1211B }, | 69 | { USB_DEVICE(0x0baf, 0x0121), .driver_info = DEVICE_ZD1211B }, |
69 | { USB_DEVICE(0x0586, 0x3412), .driver_info = DEVICE_ZD1211B }, | 70 | { USB_DEVICE(0x0586, 0x3412), .driver_info = DEVICE_ZD1211B }, |
71 | { USB_DEVICE(0x0586, 0x3413), .driver_info = DEVICE_ZD1211B }, | ||
72 | { USB_DEVICE(0x0053, 0x5301), .driver_info = DEVICE_ZD1211B }, | ||
70 | /* "Driverless" devices that need ejecting */ | 73 | /* "Driverless" devices that need ejecting */ |
71 | { USB_DEVICE(0x0ace, 0x2011), .driver_info = DEVICE_INSTALLER }, | 74 | { USB_DEVICE(0x0ace, 0x2011), .driver_info = DEVICE_INSTALLER }, |
75 | { USB_DEVICE(0x0ace, 0x20ff), .driver_info = DEVICE_INSTALLER }, | ||
72 | {} | 76 | {} |
73 | }; | 77 | }; |
74 | 78 | ||
diff --git a/include/linux/raid/md_k.h b/include/linux/raid/md_k.h index a121f36f4437..de72c49747c8 100644 --- a/include/linux/raid/md_k.h +++ b/include/linux/raid/md_k.h | |||
@@ -201,6 +201,7 @@ struct mddev_s | |||
201 | struct mutex reconfig_mutex; | 201 | struct mutex reconfig_mutex; |
202 | atomic_t active; | 202 | atomic_t active; |
203 | 203 | ||
204 | int changed; /* true if we might need to reread partition info */ | ||
204 | int degraded; /* whether md should consider | 205 | int degraded; /* whether md should consider |
205 | * adding a spare | 206 | * adding a spare |
206 | */ | 207 | */ |
diff --git a/include/net/ieee80211.h b/include/net/ieee80211.h index d56b2923d61a..bbd85cd61ed5 100644 --- a/include/net/ieee80211.h +++ b/include/net/ieee80211.h | |||
@@ -1291,6 +1291,8 @@ extern u8 ieee80211_get_channel_flags(struct ieee80211_device *ieee, | |||
1291 | extern const struct ieee80211_channel *ieee80211_get_channel(struct | 1291 | extern const struct ieee80211_channel *ieee80211_get_channel(struct |
1292 | ieee80211_device | 1292 | ieee80211_device |
1293 | *ieee, u8 channel); | 1293 | *ieee, u8 channel); |
1294 | extern u32 ieee80211_channel_to_freq(struct ieee80211_device * ieee, | ||
1295 | u8 channel); | ||
1294 | 1296 | ||
1295 | /* ieee80211_wx.c */ | 1297 | /* ieee80211_wx.c */ |
1296 | extern int ieee80211_wx_get_scan(struct ieee80211_device *ieee, | 1298 | extern int ieee80211_wx_get_scan(struct ieee80211_device *ieee, |
diff --git a/net/ieee80211/ieee80211_geo.c b/net/ieee80211/ieee80211_geo.c index 305a09de85a5..960ad13f5e9f 100644 --- a/net/ieee80211/ieee80211_geo.c +++ b/net/ieee80211/ieee80211_geo.c | |||
@@ -94,6 +94,21 @@ int ieee80211_channel_to_index(struct ieee80211_device *ieee, u8 channel) | |||
94 | return -1; | 94 | return -1; |
95 | } | 95 | } |
96 | 96 | ||
97 | u32 ieee80211_channel_to_freq(struct ieee80211_device * ieee, u8 channel) | ||
98 | { | ||
99 | const struct ieee80211_channel * ch; | ||
100 | |||
101 | /* Driver needs to initialize the geography map before using | ||
102 | * these helper functions */ | ||
103 | if (ieee->geo.bg_channels == 0 && ieee->geo.a_channels == 0) | ||
104 | return 0; | ||
105 | |||
106 | ch = ieee80211_get_channel(ieee, channel); | ||
107 | if (!ch->channel) | ||
108 | return 0; | ||
109 | return ch->freq; | ||
110 | } | ||
111 | |||
97 | u8 ieee80211_freq_to_channel(struct ieee80211_device * ieee, u32 freq) | 112 | u8 ieee80211_freq_to_channel(struct ieee80211_device * ieee, u32 freq) |
98 | { | 113 | { |
99 | int i; | 114 | int i; |
@@ -174,6 +189,7 @@ EXPORT_SYMBOL(ieee80211_get_channel); | |||
174 | EXPORT_SYMBOL(ieee80211_get_channel_flags); | 189 | EXPORT_SYMBOL(ieee80211_get_channel_flags); |
175 | EXPORT_SYMBOL(ieee80211_is_valid_channel); | 190 | EXPORT_SYMBOL(ieee80211_is_valid_channel); |
176 | EXPORT_SYMBOL(ieee80211_freq_to_channel); | 191 | EXPORT_SYMBOL(ieee80211_freq_to_channel); |
192 | EXPORT_SYMBOL(ieee80211_channel_to_freq); | ||
177 | EXPORT_SYMBOL(ieee80211_channel_to_index); | 193 | EXPORT_SYMBOL(ieee80211_channel_to_index); |
178 | EXPORT_SYMBOL(ieee80211_set_geo); | 194 | EXPORT_SYMBOL(ieee80211_set_geo); |
179 | EXPORT_SYMBOL(ieee80211_get_geo); | 195 | EXPORT_SYMBOL(ieee80211_get_geo); |
diff --git a/net/ieee80211/ieee80211_wx.c b/net/ieee80211/ieee80211_wx.c index cee5e13bc427..523a137d49dd 100644 --- a/net/ieee80211/ieee80211_wx.c +++ b/net/ieee80211/ieee80211_wx.c | |||
@@ -89,15 +89,17 @@ static char *ieee80211_translate_scan(struct ieee80211_device *ieee, | |||
89 | start = iwe_stream_add_event(start, stop, &iwe, IW_EV_UINT_LEN); | 89 | start = iwe_stream_add_event(start, stop, &iwe, IW_EV_UINT_LEN); |
90 | } | 90 | } |
91 | 91 | ||
92 | /* Add frequency/channel */ | 92 | /* Add channel and frequency */ |
93 | iwe.cmd = SIOCGIWFREQ; | 93 | iwe.cmd = SIOCGIWFREQ; |
94 | /* iwe.u.freq.m = ieee80211_frequency(network->channel, network->mode); | ||
95 | iwe.u.freq.e = 3; */ | ||
96 | iwe.u.freq.m = network->channel; | 94 | iwe.u.freq.m = network->channel; |
97 | iwe.u.freq.e = 0; | 95 | iwe.u.freq.e = 0; |
98 | iwe.u.freq.i = 0; | 96 | iwe.u.freq.i = 0; |
99 | start = iwe_stream_add_event(start, stop, &iwe, IW_EV_FREQ_LEN); | 97 | start = iwe_stream_add_event(start, stop, &iwe, IW_EV_FREQ_LEN); |
100 | 98 | ||
99 | iwe.u.freq.m = ieee80211_channel_to_freq(ieee, network->channel); | ||
100 | iwe.u.freq.e = 6; | ||
101 | start = iwe_stream_add_event(start, stop, &iwe, IW_EV_FREQ_LEN); | ||
102 | |||
101 | /* Add encryption capability */ | 103 | /* Add encryption capability */ |
102 | iwe.cmd = SIOCGIWENCODE; | 104 | iwe.cmd = SIOCGIWENCODE; |
103 | if (network->capability & WLAN_CAPABILITY_PRIVACY) | 105 | if (network->capability & WLAN_CAPABILITY_PRIVACY) |