diff options
Diffstat (limited to 'drivers/net/3c59x.c')
-rw-r--r-- | drivers/net/3c59x.c | 586 |
1 files changed, 314 insertions, 272 deletions
diff --git a/drivers/net/3c59x.c b/drivers/net/3c59x.c index 455ba915ede7..7488ee7f7caf 100644 --- a/drivers/net/3c59x.c +++ b/drivers/net/3c59x.c | |||
@@ -602,7 +602,7 @@ MODULE_DEVICE_TABLE(pci, vortex_pci_tbl); | |||
602 | First the windows. There are eight register windows, with the command | 602 | First the windows. There are eight register windows, with the command |
603 | and status registers available in each. | 603 | and status registers available in each. |
604 | */ | 604 | */ |
605 | #define EL3WINDOW(win_num) outw(SelectWindow + (win_num), ioaddr + EL3_CMD) | 605 | #define EL3WINDOW(win_num) iowrite16(SelectWindow + (win_num), ioaddr + EL3_CMD) |
606 | #define EL3_CMD 0x0e | 606 | #define EL3_CMD 0x0e |
607 | #define EL3_STATUS 0x0e | 607 | #define EL3_STATUS 0x0e |
608 | 608 | ||
@@ -776,7 +776,8 @@ struct vortex_private { | |||
776 | 776 | ||
777 | /* PCI configuration space information. */ | 777 | /* PCI configuration space information. */ |
778 | struct device *gendev; | 778 | struct device *gendev; |
779 | char __iomem *cb_fn_base; /* CardBus function status addr space. */ | 779 | void __iomem *ioaddr; /* IO address space */ |
780 | void __iomem *cb_fn_base; /* CardBus function status addr space. */ | ||
780 | 781 | ||
781 | /* Some values here only for performance evaluation and path-coverage */ | 782 | /* Some values here only for performance evaluation and path-coverage */ |
782 | int rx_nocopy, rx_copy, queued_packet, rx_csumhits; | 783 | int rx_nocopy, rx_copy, queued_packet, rx_csumhits; |
@@ -869,12 +870,12 @@ static struct { | |||
869 | /* number of ETHTOOL_GSTATS u64's */ | 870 | /* number of ETHTOOL_GSTATS u64's */ |
870 | #define VORTEX_NUM_STATS 3 | 871 | #define VORTEX_NUM_STATS 3 |
871 | 872 | ||
872 | static int vortex_probe1(struct device *gendev, long ioaddr, int irq, | 873 | static int vortex_probe1(struct device *gendev, void __iomem *ioaddr, int irq, |
873 | int chip_idx, int card_idx); | 874 | int chip_idx, int card_idx); |
874 | static void vortex_up(struct net_device *dev); | 875 | static void vortex_up(struct net_device *dev); |
875 | static void vortex_down(struct net_device *dev, int final); | 876 | static void vortex_down(struct net_device *dev, int final); |
876 | static int vortex_open(struct net_device *dev); | 877 | static int vortex_open(struct net_device *dev); |
877 | static void mdio_sync(long ioaddr, int bits); | 878 | static void mdio_sync(void __iomem *ioaddr, int bits); |
878 | static int mdio_read(struct net_device *dev, int phy_id, int location); | 879 | static int mdio_read(struct net_device *dev, int phy_id, int location); |
879 | static void mdio_write(struct net_device *vp, int phy_id, int location, int value); | 880 | static void mdio_write(struct net_device *vp, int phy_id, int location, int value); |
880 | static void vortex_timer(unsigned long arg); | 881 | static void vortex_timer(unsigned long arg); |
@@ -887,7 +888,7 @@ static irqreturn_t vortex_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
887 | static irqreturn_t boomerang_interrupt(int irq, void *dev_id, struct pt_regs *regs); | 888 | static irqreturn_t boomerang_interrupt(int irq, void *dev_id, struct pt_regs *regs); |
888 | static int vortex_close(struct net_device *dev); | 889 | static int vortex_close(struct net_device *dev); |
889 | static void dump_tx_ring(struct net_device *dev); | 890 | static void dump_tx_ring(struct net_device *dev); |
890 | static void update_stats(long ioaddr, struct net_device *dev); | 891 | static void update_stats(void __iomem *ioaddr, struct net_device *dev); |
891 | static struct net_device_stats *vortex_get_stats(struct net_device *dev); | 892 | static struct net_device_stats *vortex_get_stats(struct net_device *dev); |
892 | static void set_rx_mode(struct net_device *dev); | 893 | static void set_rx_mode(struct net_device *dev); |
893 | #ifdef CONFIG_PCI | 894 | #ifdef CONFIG_PCI |
@@ -902,14 +903,16 @@ static void set_8021q_mode(struct net_device *dev, int enable); | |||
902 | /* This driver uses 'options' to pass the media type, full-duplex flag, etc. */ | 903 | /* This driver uses 'options' to pass the media type, full-duplex flag, etc. */ |
903 | /* Option count limit only -- unlimited interfaces are supported. */ | 904 | /* Option count limit only -- unlimited interfaces are supported. */ |
904 | #define MAX_UNITS 8 | 905 | #define MAX_UNITS 8 |
905 | static int options[MAX_UNITS] = { -1, -1, -1, -1, -1, -1, -1, -1,}; | 906 | static int options[MAX_UNITS] = { [0 ... MAX_UNITS-1] = -1 }; |
906 | static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1}; | 907 | static int full_duplex[MAX_UNITS] = {[0 ... MAX_UNITS-1] = -1 }; |
907 | static int hw_checksums[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1}; | 908 | static int hw_checksums[MAX_UNITS] = {[0 ... MAX_UNITS-1] = -1 }; |
908 | static int flow_ctrl[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1}; | 909 | static int flow_ctrl[MAX_UNITS] = {[0 ... MAX_UNITS-1] = -1 }; |
909 | static int enable_wol[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1}; | 910 | static int enable_wol[MAX_UNITS] = {[0 ... MAX_UNITS-1] = -1 }; |
911 | static int use_mmio[MAX_UNITS] = {[0 ... MAX_UNITS-1] = -1 }; | ||
910 | static int global_options = -1; | 912 | static int global_options = -1; |
911 | static int global_full_duplex = -1; | 913 | static int global_full_duplex = -1; |
912 | static int global_enable_wol = -1; | 914 | static int global_enable_wol = -1; |
915 | static int global_use_mmio = -1; | ||
913 | 916 | ||
914 | /* #define dev_alloc_skb dev_alloc_skb_debug */ | 917 | /* #define dev_alloc_skb dev_alloc_skb_debug */ |
915 | 918 | ||
@@ -934,21 +937,25 @@ module_param(compaq_ioaddr, int, 0); | |||
934 | module_param(compaq_irq, int, 0); | 937 | module_param(compaq_irq, int, 0); |
935 | module_param(compaq_device_id, int, 0); | 938 | module_param(compaq_device_id, int, 0); |
936 | module_param(watchdog, int, 0); | 939 | module_param(watchdog, int, 0); |
940 | module_param(global_use_mmio, int, 0); | ||
941 | module_param_array(use_mmio, int, NULL, 0); | ||
937 | MODULE_PARM_DESC(debug, "3c59x debug level (0-6)"); | 942 | MODULE_PARM_DESC(debug, "3c59x debug level (0-6)"); |
938 | MODULE_PARM_DESC(options, "3c59x: Bits 0-3: media type, bit 4: bus mastering, bit 9: full duplex"); | 943 | MODULE_PARM_DESC(options, "3c59x: Bits 0-3: media type, bit 4: bus mastering, bit 9: full duplex"); |
939 | MODULE_PARM_DESC(global_options, "3c59x: same as options, but applies to all NICs if options is unset"); | 944 | MODULE_PARM_DESC(global_options, "3c59x: same as options, but applies to all NICs if options is unset"); |
940 | MODULE_PARM_DESC(full_duplex, "3c59x full duplex setting(s) (1)"); | 945 | MODULE_PARM_DESC(full_duplex, "3c59x full duplex setting(s) (1)"); |
941 | MODULE_PARM_DESC(global_full_duplex, "3c59x: same as full_duplex, but applies to all NICs if options is unset"); | 946 | MODULE_PARM_DESC(global_full_duplex, "3c59x: same as full_duplex, but applies to all NICs if full_duplex is unset"); |
942 | MODULE_PARM_DESC(hw_checksums, "3c59x Hardware checksum checking by adapter(s) (0-1)"); | 947 | MODULE_PARM_DESC(hw_checksums, "3c59x Hardware checksum checking by adapter(s) (0-1)"); |
943 | MODULE_PARM_DESC(flow_ctrl, "3c59x 802.3x flow control usage (PAUSE only) (0-1)"); | 948 | MODULE_PARM_DESC(flow_ctrl, "3c59x 802.3x flow control usage (PAUSE only) (0-1)"); |
944 | MODULE_PARM_DESC(enable_wol, "3c59x: Turn on Wake-on-LAN for adapter(s) (0-1)"); | 949 | MODULE_PARM_DESC(enable_wol, "3c59x: Turn on Wake-on-LAN for adapter(s) (0-1)"); |
945 | MODULE_PARM_DESC(global_enable_wol, "3c59x: same as enable_wol, but applies to all NICs if options is unset"); | 950 | MODULE_PARM_DESC(global_enable_wol, "3c59x: same as enable_wol, but applies to all NICs if enable_wol is unset"); |
946 | MODULE_PARM_DESC(rx_copybreak, "3c59x copy breakpoint for copy-only-tiny-frames"); | 951 | MODULE_PARM_DESC(rx_copybreak, "3c59x copy breakpoint for copy-only-tiny-frames"); |
947 | MODULE_PARM_DESC(max_interrupt_work, "3c59x maximum events handled per interrupt"); | 952 | MODULE_PARM_DESC(max_interrupt_work, "3c59x maximum events handled per interrupt"); |
948 | MODULE_PARM_DESC(compaq_ioaddr, "3c59x PCI I/O base address (Compaq BIOS problem workaround)"); | 953 | MODULE_PARM_DESC(compaq_ioaddr, "3c59x PCI I/O base address (Compaq BIOS problem workaround)"); |
949 | MODULE_PARM_DESC(compaq_irq, "3c59x PCI IRQ number (Compaq BIOS problem workaround)"); | 954 | MODULE_PARM_DESC(compaq_irq, "3c59x PCI IRQ number (Compaq BIOS problem workaround)"); |
950 | MODULE_PARM_DESC(compaq_device_id, "3c59x PCI device ID (Compaq BIOS problem workaround)"); | 955 | MODULE_PARM_DESC(compaq_device_id, "3c59x PCI device ID (Compaq BIOS problem workaround)"); |
951 | MODULE_PARM_DESC(watchdog, "3c59x transmit timeout in milliseconds"); | 956 | MODULE_PARM_DESC(watchdog, "3c59x transmit timeout in milliseconds"); |
957 | MODULE_PARM_DESC(global_use_mmio, "3c59x: same as use_mmio, but applies to all NICs if options is unset"); | ||
958 | MODULE_PARM_DESC(use_mmio, "3c59x: use memory-mapped PCI I/O resource (0-1)"); | ||
952 | 959 | ||
953 | #ifdef CONFIG_NET_POLL_CONTROLLER | 960 | #ifdef CONFIG_NET_POLL_CONTROLLER |
954 | static void poll_vortex(struct net_device *dev) | 961 | static void poll_vortex(struct net_device *dev) |
@@ -1029,18 +1036,19 @@ static struct eisa_driver vortex_eisa_driver = { | |||
1029 | 1036 | ||
1030 | static int vortex_eisa_probe (struct device *device) | 1037 | static int vortex_eisa_probe (struct device *device) |
1031 | { | 1038 | { |
1032 | long ioaddr; | 1039 | void __iomem *ioaddr; |
1033 | struct eisa_device *edev; | 1040 | struct eisa_device *edev; |
1034 | 1041 | ||
1035 | edev = to_eisa_device (device); | 1042 | edev = to_eisa_device (device); |
1036 | ioaddr = edev->base_addr; | ||
1037 | 1043 | ||
1038 | if (!request_region(ioaddr, VORTEX_TOTAL_SIZE, DRV_NAME)) | 1044 | if (!request_region(edev->base_addr, VORTEX_TOTAL_SIZE, DRV_NAME)) |
1039 | return -EBUSY; | 1045 | return -EBUSY; |
1040 | 1046 | ||
1041 | if (vortex_probe1(device, ioaddr, inw(ioaddr + 0xC88) >> 12, | 1047 | ioaddr = ioport_map(edev->base_addr, VORTEX_TOTAL_SIZE); |
1048 | |||
1049 | if (vortex_probe1(device, ioaddr, ioread16(ioaddr + 0xC88) >> 12, | ||
1042 | edev->id.driver_data, vortex_cards_found)) { | 1050 | edev->id.driver_data, vortex_cards_found)) { |
1043 | release_region (ioaddr, VORTEX_TOTAL_SIZE); | 1051 | release_region (edev->base_addr, VORTEX_TOTAL_SIZE); |
1044 | return -ENODEV; | 1052 | return -ENODEV; |
1045 | } | 1053 | } |
1046 | 1054 | ||
@@ -1054,7 +1062,7 @@ static int vortex_eisa_remove (struct device *device) | |||
1054 | struct eisa_device *edev; | 1062 | struct eisa_device *edev; |
1055 | struct net_device *dev; | 1063 | struct net_device *dev; |
1056 | struct vortex_private *vp; | 1064 | struct vortex_private *vp; |
1057 | long ioaddr; | 1065 | void __iomem *ioaddr; |
1058 | 1066 | ||
1059 | edev = to_eisa_device (device); | 1067 | edev = to_eisa_device (device); |
1060 | dev = eisa_get_drvdata (edev); | 1068 | dev = eisa_get_drvdata (edev); |
@@ -1065,11 +1073,11 @@ static int vortex_eisa_remove (struct device *device) | |||
1065 | } | 1073 | } |
1066 | 1074 | ||
1067 | vp = netdev_priv(dev); | 1075 | vp = netdev_priv(dev); |
1068 | ioaddr = dev->base_addr; | 1076 | ioaddr = vp->ioaddr; |
1069 | 1077 | ||
1070 | unregister_netdev (dev); | 1078 | unregister_netdev (dev); |
1071 | outw (TotalReset|0x14, ioaddr + EL3_CMD); | 1079 | iowrite16 (TotalReset|0x14, ioaddr + EL3_CMD); |
1072 | release_region (ioaddr, VORTEX_TOTAL_SIZE); | 1080 | release_region (dev->base_addr, VORTEX_TOTAL_SIZE); |
1073 | 1081 | ||
1074 | free_netdev (dev); | 1082 | free_netdev (dev); |
1075 | return 0; | 1083 | return 0; |
@@ -1096,8 +1104,8 @@ static int __init vortex_eisa_init (void) | |||
1096 | 1104 | ||
1097 | /* Special code to work-around the Compaq PCI BIOS32 problem. */ | 1105 | /* Special code to work-around the Compaq PCI BIOS32 problem. */ |
1098 | if (compaq_ioaddr) { | 1106 | if (compaq_ioaddr) { |
1099 | vortex_probe1(NULL, compaq_ioaddr, compaq_irq, | 1107 | vortex_probe1(NULL, ioport_map(compaq_ioaddr, VORTEX_TOTAL_SIZE), |
1100 | compaq_device_id, vortex_cards_found++); | 1108 | compaq_irq, compaq_device_id, vortex_cards_found++); |
1101 | } | 1109 | } |
1102 | 1110 | ||
1103 | return vortex_cards_found - orig_cards_found + eisa_found; | 1111 | return vortex_cards_found - orig_cards_found + eisa_found; |
@@ -1107,15 +1115,32 @@ static int __init vortex_eisa_init (void) | |||
1107 | static int __devinit vortex_init_one (struct pci_dev *pdev, | 1115 | static int __devinit vortex_init_one (struct pci_dev *pdev, |
1108 | const struct pci_device_id *ent) | 1116 | const struct pci_device_id *ent) |
1109 | { | 1117 | { |
1110 | int rc; | 1118 | int rc, unit, pci_bar; |
1119 | struct vortex_chip_info *vci; | ||
1120 | void __iomem *ioaddr; | ||
1111 | 1121 | ||
1112 | /* wake up and enable device */ | 1122 | /* wake up and enable device */ |
1113 | rc = pci_enable_device (pdev); | 1123 | rc = pci_enable_device (pdev); |
1114 | if (rc < 0) | 1124 | if (rc < 0) |
1115 | goto out; | 1125 | goto out; |
1116 | 1126 | ||
1117 | rc = vortex_probe1 (&pdev->dev, pci_resource_start (pdev, 0), | 1127 | unit = vortex_cards_found; |
1118 | pdev->irq, ent->driver_data, vortex_cards_found); | 1128 | |
1129 | if (global_use_mmio < 0 && (unit >= MAX_UNITS || use_mmio[unit] < 0)) { | ||
1130 | /* Determine the default if the user didn't override us */ | ||
1131 | vci = &vortex_info_tbl[ent->driver_data]; | ||
1132 | pci_bar = vci->drv_flags & (IS_CYCLONE | IS_TORNADO) ? 1 : 0; | ||
1133 | } else if (unit < MAX_UNITS && use_mmio[unit] >= 0) | ||
1134 | pci_bar = use_mmio[unit] ? 1 : 0; | ||
1135 | else | ||
1136 | pci_bar = global_use_mmio ? 1 : 0; | ||
1137 | |||
1138 | ioaddr = pci_iomap(pdev, pci_bar, 0); | ||
1139 | if (!ioaddr) /* If mapping fails, fall-back to BAR 0... */ | ||
1140 | ioaddr = pci_iomap(pdev, 0, 0); | ||
1141 | |||
1142 | rc = vortex_probe1(&pdev->dev, ioaddr, pdev->irq, | ||
1143 | ent->driver_data, unit); | ||
1119 | if (rc < 0) { | 1144 | if (rc < 0) { |
1120 | pci_disable_device (pdev); | 1145 | pci_disable_device (pdev); |
1121 | goto out; | 1146 | goto out; |
@@ -1134,7 +1159,7 @@ out: | |||
1134 | * NOTE: pdev can be NULL, for the case of a Compaq device | 1159 | * NOTE: pdev can be NULL, for the case of a Compaq device |
1135 | */ | 1160 | */ |
1136 | static int __devinit vortex_probe1(struct device *gendev, | 1161 | static int __devinit vortex_probe1(struct device *gendev, |
1137 | long ioaddr, int irq, | 1162 | void __iomem *ioaddr, int irq, |
1138 | int chip_idx, int card_idx) | 1163 | int chip_idx, int card_idx) |
1139 | { | 1164 | { |
1140 | struct vortex_private *vp; | 1165 | struct vortex_private *vp; |
@@ -1202,15 +1227,16 @@ static int __devinit vortex_probe1(struct device *gendev, | |||
1202 | if (print_info) | 1227 | if (print_info) |
1203 | printk (KERN_INFO "See Documentation/networking/vortex.txt\n"); | 1228 | printk (KERN_INFO "See Documentation/networking/vortex.txt\n"); |
1204 | 1229 | ||
1205 | printk(KERN_INFO "%s: 3Com %s %s at 0x%lx. Vers " DRV_VERSION "\n", | 1230 | printk(KERN_INFO "%s: 3Com %s %s at %p. Vers " DRV_VERSION "\n", |
1206 | print_name, | 1231 | print_name, |
1207 | pdev ? "PCI" : "EISA", | 1232 | pdev ? "PCI" : "EISA", |
1208 | vci->name, | 1233 | vci->name, |
1209 | ioaddr); | 1234 | ioaddr); |
1210 | 1235 | ||
1211 | dev->base_addr = ioaddr; | 1236 | dev->base_addr = (unsigned long)ioaddr; |
1212 | dev->irq = irq; | 1237 | dev->irq = irq; |
1213 | dev->mtu = mtu; | 1238 | dev->mtu = mtu; |
1239 | vp->ioaddr = ioaddr; | ||
1214 | vp->large_frames = mtu > 1500; | 1240 | vp->large_frames = mtu > 1500; |
1215 | vp->drv_flags = vci->drv_flags; | 1241 | vp->drv_flags = vci->drv_flags; |
1216 | vp->has_nway = (vci->drv_flags & HAS_NWAY) ? 1 : 0; | 1242 | vp->has_nway = (vci->drv_flags & HAS_NWAY) ? 1 : 0; |
@@ -1226,7 +1252,7 @@ static int __devinit vortex_probe1(struct device *gendev, | |||
1226 | if (pdev) { | 1252 | if (pdev) { |
1227 | /* EISA resources already marked, so only PCI needs to do this here */ | 1253 | /* EISA resources already marked, so only PCI needs to do this here */ |
1228 | /* Ignore return value, because Cardbus drivers already allocate for us */ | 1254 | /* Ignore return value, because Cardbus drivers already allocate for us */ |
1229 | if (request_region(ioaddr, vci->io_size, print_name) != NULL) | 1255 | if (request_region(dev->base_addr, vci->io_size, print_name) != NULL) |
1230 | vp->must_free_region = 1; | 1256 | vp->must_free_region = 1; |
1231 | 1257 | ||
1232 | /* enable bus-mastering if necessary */ | 1258 | /* enable bus-mastering if necessary */ |
@@ -1316,14 +1342,14 @@ static int __devinit vortex_probe1(struct device *gendev, | |||
1316 | 1342 | ||
1317 | for (i = 0; i < 0x40; i++) { | 1343 | for (i = 0; i < 0x40; i++) { |
1318 | int timer; | 1344 | int timer; |
1319 | outw(base + i, ioaddr + Wn0EepromCmd); | 1345 | iowrite16(base + i, ioaddr + Wn0EepromCmd); |
1320 | /* Pause for at least 162 us. for the read to take place. */ | 1346 | /* Pause for at least 162 us. for the read to take place. */ |
1321 | for (timer = 10; timer >= 0; timer--) { | 1347 | for (timer = 10; timer >= 0; timer--) { |
1322 | udelay(162); | 1348 | udelay(162); |
1323 | if ((inw(ioaddr + Wn0EepromCmd) & 0x8000) == 0) | 1349 | if ((ioread16(ioaddr + Wn0EepromCmd) & 0x8000) == 0) |
1324 | break; | 1350 | break; |
1325 | } | 1351 | } |
1326 | eeprom[i] = inw(ioaddr + Wn0EepromData); | 1352 | eeprom[i] = ioread16(ioaddr + Wn0EepromData); |
1327 | } | 1353 | } |
1328 | } | 1354 | } |
1329 | for (i = 0; i < 0x18; i++) | 1355 | for (i = 0; i < 0x18; i++) |
@@ -1338,6 +1364,7 @@ static int __devinit vortex_probe1(struct device *gendev, | |||
1338 | printk(" ***INVALID CHECKSUM %4.4x*** ", checksum); | 1364 | printk(" ***INVALID CHECKSUM %4.4x*** ", checksum); |
1339 | for (i = 0; i < 3; i++) | 1365 | for (i = 0; i < 3; i++) |
1340 | ((u16 *)dev->dev_addr)[i] = htons(eeprom[i + 10]); | 1366 | ((u16 *)dev->dev_addr)[i] = htons(eeprom[i + 10]); |
1367 | memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); | ||
1341 | if (print_info) { | 1368 | if (print_info) { |
1342 | for (i = 0; i < 6; i++) | 1369 | for (i = 0; i < 6; i++) |
1343 | printk("%c%2.2x", i ? ':' : ' ', dev->dev_addr[i]); | 1370 | printk("%c%2.2x", i ? ':' : ' ', dev->dev_addr[i]); |
@@ -1351,7 +1378,7 @@ static int __devinit vortex_probe1(struct device *gendev, | |||
1351 | } | 1378 | } |
1352 | EL3WINDOW(2); | 1379 | EL3WINDOW(2); |
1353 | for (i = 0; i < 6; i++) | 1380 | for (i = 0; i < 6; i++) |
1354 | outb(dev->dev_addr[i], ioaddr + i); | 1381 | iowrite8(dev->dev_addr[i], ioaddr + i); |
1355 | 1382 | ||
1356 | #ifdef __sparc__ | 1383 | #ifdef __sparc__ |
1357 | if (print_info) | 1384 | if (print_info) |
@@ -1366,7 +1393,7 @@ static int __devinit vortex_probe1(struct device *gendev, | |||
1366 | #endif | 1393 | #endif |
1367 | 1394 | ||
1368 | EL3WINDOW(4); | 1395 | EL3WINDOW(4); |
1369 | step = (inb(ioaddr + Wn4_NetDiag) & 0x1e) >> 1; | 1396 | step = (ioread8(ioaddr + Wn4_NetDiag) & 0x1e) >> 1; |
1370 | if (print_info) { | 1397 | if (print_info) { |
1371 | printk(KERN_INFO " product code %02x%02x rev %02x.%d date %02d-" | 1398 | printk(KERN_INFO " product code %02x%02x rev %02x.%d date %02d-" |
1372 | "%02d-%02d\n", eeprom[6]&0xff, eeprom[6]>>8, eeprom[0x14], | 1399 | "%02d-%02d\n", eeprom[6]&0xff, eeprom[6]>>8, eeprom[0x14], |
@@ -1375,31 +1402,30 @@ static int __devinit vortex_probe1(struct device *gendev, | |||
1375 | 1402 | ||
1376 | 1403 | ||
1377 | if (pdev && vci->drv_flags & HAS_CB_FNS) { | 1404 | if (pdev && vci->drv_flags & HAS_CB_FNS) { |
1378 | unsigned long fn_st_addr; /* Cardbus function status space */ | ||
1379 | unsigned short n; | 1405 | unsigned short n; |
1380 | 1406 | ||
1381 | fn_st_addr = pci_resource_start (pdev, 2); | 1407 | vp->cb_fn_base = pci_iomap(pdev, 2, 0); |
1382 | if (fn_st_addr) { | 1408 | if (!vp->cb_fn_base) { |
1383 | vp->cb_fn_base = ioremap(fn_st_addr, 128); | ||
1384 | retval = -ENOMEM; | 1409 | retval = -ENOMEM; |
1385 | if (!vp->cb_fn_base) | 1410 | goto free_ring; |
1386 | goto free_ring; | ||
1387 | } | 1411 | } |
1412 | |||
1388 | if (print_info) { | 1413 | if (print_info) { |
1389 | printk(KERN_INFO "%s: CardBus functions mapped %8.8lx->%p\n", | 1414 | printk(KERN_INFO "%s: CardBus functions mapped %8.8lx->%p\n", |
1390 | print_name, fn_st_addr, vp->cb_fn_base); | 1415 | print_name, pci_resource_start(pdev, 2), |
1416 | vp->cb_fn_base); | ||
1391 | } | 1417 | } |
1392 | EL3WINDOW(2); | 1418 | EL3WINDOW(2); |
1393 | 1419 | ||
1394 | n = inw(ioaddr + Wn2_ResetOptions) & ~0x4010; | 1420 | n = ioread16(ioaddr + Wn2_ResetOptions) & ~0x4010; |
1395 | if (vp->drv_flags & INVERT_LED_PWR) | 1421 | if (vp->drv_flags & INVERT_LED_PWR) |
1396 | n |= 0x10; | 1422 | n |= 0x10; |
1397 | if (vp->drv_flags & INVERT_MII_PWR) | 1423 | if (vp->drv_flags & INVERT_MII_PWR) |
1398 | n |= 0x4000; | 1424 | n |= 0x4000; |
1399 | outw(n, ioaddr + Wn2_ResetOptions); | 1425 | iowrite16(n, ioaddr + Wn2_ResetOptions); |
1400 | if (vp->drv_flags & WNO_XCVR_PWR) { | 1426 | if (vp->drv_flags & WNO_XCVR_PWR) { |
1401 | EL3WINDOW(0); | 1427 | EL3WINDOW(0); |
1402 | outw(0x0800, ioaddr); | 1428 | iowrite16(0x0800, ioaddr); |
1403 | } | 1429 | } |
1404 | } | 1430 | } |
1405 | 1431 | ||
@@ -1418,13 +1444,13 @@ static int __devinit vortex_probe1(struct device *gendev, | |||
1418 | static const char * ram_split[] = {"5:3", "3:1", "1:1", "3:5"}; | 1444 | static const char * ram_split[] = {"5:3", "3:1", "1:1", "3:5"}; |
1419 | unsigned int config; | 1445 | unsigned int config; |
1420 | EL3WINDOW(3); | 1446 | EL3WINDOW(3); |
1421 | vp->available_media = inw(ioaddr + Wn3_Options); | 1447 | vp->available_media = ioread16(ioaddr + Wn3_Options); |
1422 | if ((vp->available_media & 0xff) == 0) /* Broken 3c916 */ | 1448 | if ((vp->available_media & 0xff) == 0) /* Broken 3c916 */ |
1423 | vp->available_media = 0x40; | 1449 | vp->available_media = 0x40; |
1424 | config = inl(ioaddr + Wn3_Config); | 1450 | config = ioread32(ioaddr + Wn3_Config); |
1425 | if (print_info) { | 1451 | if (print_info) { |
1426 | printk(KERN_DEBUG " Internal config register is %4.4x, " | 1452 | printk(KERN_DEBUG " Internal config register is %4.4x, " |
1427 | "transceivers %#x.\n", config, inw(ioaddr + Wn3_Options)); | 1453 | "transceivers %#x.\n", config, ioread16(ioaddr + Wn3_Options)); |
1428 | printk(KERN_INFO " %dK %s-wide RAM %s Rx:Tx split, %s%s interface.\n", | 1454 | printk(KERN_INFO " %dK %s-wide RAM %s Rx:Tx split, %s%s interface.\n", |
1429 | 8 << RAM_SIZE(config), | 1455 | 8 << RAM_SIZE(config), |
1430 | RAM_WIDTH(config) ? "word" : "byte", | 1456 | RAM_WIDTH(config) ? "word" : "byte", |
@@ -1455,7 +1481,7 @@ static int __devinit vortex_probe1(struct device *gendev, | |||
1455 | if (vp->drv_flags & EXTRA_PREAMBLE) | 1481 | if (vp->drv_flags & EXTRA_PREAMBLE) |
1456 | mii_preamble_required++; | 1482 | mii_preamble_required++; |
1457 | mdio_sync(ioaddr, 32); | 1483 | mdio_sync(ioaddr, 32); |
1458 | mdio_read(dev, 24, 1); | 1484 | mdio_read(dev, 24, MII_BMSR); |
1459 | for (phy = 0; phy < 32 && phy_idx < 1; phy++) { | 1485 | for (phy = 0; phy < 32 && phy_idx < 1; phy++) { |
1460 | int mii_status, phyx; | 1486 | int mii_status, phyx; |
1461 | 1487 | ||
@@ -1469,7 +1495,7 @@ static int __devinit vortex_probe1(struct device *gendev, | |||
1469 | phyx = phy - 1; | 1495 | phyx = phy - 1; |
1470 | else | 1496 | else |
1471 | phyx = phy; | 1497 | phyx = phy; |
1472 | mii_status = mdio_read(dev, phyx, 1); | 1498 | mii_status = mdio_read(dev, phyx, MII_BMSR); |
1473 | if (mii_status && mii_status != 0xffff) { | 1499 | if (mii_status && mii_status != 0xffff) { |
1474 | vp->phys[phy_idx++] = phyx; | 1500 | vp->phys[phy_idx++] = phyx; |
1475 | if (print_info) { | 1501 | if (print_info) { |
@@ -1485,7 +1511,7 @@ static int __devinit vortex_probe1(struct device *gendev, | |||
1485 | printk(KERN_WARNING" ***WARNING*** No MII transceivers found!\n"); | 1511 | printk(KERN_WARNING" ***WARNING*** No MII transceivers found!\n"); |
1486 | vp->phys[0] = 24; | 1512 | vp->phys[0] = 24; |
1487 | } else { | 1513 | } else { |
1488 | vp->advertising = mdio_read(dev, vp->phys[0], 4); | 1514 | vp->advertising = mdio_read(dev, vp->phys[0], MII_ADVERTISE); |
1489 | if (vp->full_duplex) { | 1515 | if (vp->full_duplex) { |
1490 | /* Only advertise the FD media types. */ | 1516 | /* Only advertise the FD media types. */ |
1491 | vp->advertising &= ~0x02A0; | 1517 | vp->advertising &= ~0x02A0; |
@@ -1510,10 +1536,10 @@ static int __devinit vortex_probe1(struct device *gendev, | |||
1510 | if (vp->full_bus_master_tx) { | 1536 | if (vp->full_bus_master_tx) { |
1511 | dev->hard_start_xmit = boomerang_start_xmit; | 1537 | dev->hard_start_xmit = boomerang_start_xmit; |
1512 | /* Actually, it still should work with iommu. */ | 1538 | /* Actually, it still should work with iommu. */ |
1513 | dev->features |= NETIF_F_SG; | 1539 | if (card_idx < MAX_UNITS && |
1514 | if (((hw_checksums[card_idx] == -1) && (vp->drv_flags & HAS_HWCKSM)) || | 1540 | ((hw_checksums[card_idx] == -1 && (vp->drv_flags & HAS_HWCKSM)) || |
1515 | (hw_checksums[card_idx] == 1)) { | 1541 | hw_checksums[card_idx] == 1)) { |
1516 | dev->features |= NETIF_F_IP_CSUM; | 1542 | dev->features |= NETIF_F_IP_CSUM | NETIF_F_SG; |
1517 | } | 1543 | } |
1518 | } else { | 1544 | } else { |
1519 | dev->hard_start_xmit = vortex_start_xmit; | 1545 | dev->hard_start_xmit = vortex_start_xmit; |
@@ -1555,7 +1581,7 @@ free_ring: | |||
1555 | vp->rx_ring_dma); | 1581 | vp->rx_ring_dma); |
1556 | free_region: | 1582 | free_region: |
1557 | if (vp->must_free_region) | 1583 | if (vp->must_free_region) |
1558 | release_region(ioaddr, vci->io_size); | 1584 | release_region(dev->base_addr, vci->io_size); |
1559 | free_netdev(dev); | 1585 | free_netdev(dev); |
1560 | printk(KERN_ERR PFX "vortex_probe1 fails. Returns %d\n", retval); | 1586 | printk(KERN_ERR PFX "vortex_probe1 fails. Returns %d\n", retval); |
1561 | out: | 1587 | out: |
@@ -1565,17 +1591,19 @@ out: | |||
1565 | static void | 1591 | static void |
1566 | issue_and_wait(struct net_device *dev, int cmd) | 1592 | issue_and_wait(struct net_device *dev, int cmd) |
1567 | { | 1593 | { |
1594 | struct vortex_private *vp = netdev_priv(dev); | ||
1595 | void __iomem *ioaddr = vp->ioaddr; | ||
1568 | int i; | 1596 | int i; |
1569 | 1597 | ||
1570 | outw(cmd, dev->base_addr + EL3_CMD); | 1598 | iowrite16(cmd, ioaddr + EL3_CMD); |
1571 | for (i = 0; i < 2000; i++) { | 1599 | for (i = 0; i < 2000; i++) { |
1572 | if (!(inw(dev->base_addr + EL3_STATUS) & CmdInProgress)) | 1600 | if (!(ioread16(ioaddr + EL3_STATUS) & CmdInProgress)) |
1573 | return; | 1601 | return; |
1574 | } | 1602 | } |
1575 | 1603 | ||
1576 | /* OK, that didn't work. Do it the slow way. One second */ | 1604 | /* OK, that didn't work. Do it the slow way. One second */ |
1577 | for (i = 0; i < 100000; i++) { | 1605 | for (i = 0; i < 100000; i++) { |
1578 | if (!(inw(dev->base_addr + EL3_STATUS) & CmdInProgress)) { | 1606 | if (!(ioread16(ioaddr + EL3_STATUS) & CmdInProgress)) { |
1579 | if (vortex_debug > 1) | 1607 | if (vortex_debug > 1) |
1580 | printk(KERN_INFO "%s: command 0x%04x took %d usecs\n", | 1608 | printk(KERN_INFO "%s: command 0x%04x took %d usecs\n", |
1581 | dev->name, cmd, i * 10); | 1609 | dev->name, cmd, i * 10); |
@@ -1584,14 +1612,14 @@ issue_and_wait(struct net_device *dev, int cmd) | |||
1584 | udelay(10); | 1612 | udelay(10); |
1585 | } | 1613 | } |
1586 | printk(KERN_ERR "%s: command 0x%04x did not complete! Status=0x%x\n", | 1614 | printk(KERN_ERR "%s: command 0x%04x did not complete! Status=0x%x\n", |
1587 | dev->name, cmd, inw(dev->base_addr + EL3_STATUS)); | 1615 | dev->name, cmd, ioread16(ioaddr + EL3_STATUS)); |
1588 | } | 1616 | } |
1589 | 1617 | ||
1590 | static void | 1618 | static void |
1591 | vortex_up(struct net_device *dev) | 1619 | vortex_up(struct net_device *dev) |
1592 | { | 1620 | { |
1593 | long ioaddr = dev->base_addr; | ||
1594 | struct vortex_private *vp = netdev_priv(dev); | 1621 | struct vortex_private *vp = netdev_priv(dev); |
1622 | void __iomem *ioaddr = vp->ioaddr; | ||
1595 | unsigned int config; | 1623 | unsigned int config; |
1596 | int i; | 1624 | int i; |
1597 | 1625 | ||
@@ -1604,7 +1632,7 @@ vortex_up(struct net_device *dev) | |||
1604 | 1632 | ||
1605 | /* Before initializing select the active media port. */ | 1633 | /* Before initializing select the active media port. */ |
1606 | EL3WINDOW(3); | 1634 | EL3WINDOW(3); |
1607 | config = inl(ioaddr + Wn3_Config); | 1635 | config = ioread32(ioaddr + Wn3_Config); |
1608 | 1636 | ||
1609 | if (vp->media_override != 7) { | 1637 | if (vp->media_override != 7) { |
1610 | printk(KERN_INFO "%s: Media override to transceiver %d (%s).\n", | 1638 | printk(KERN_INFO "%s: Media override to transceiver %d (%s).\n", |
@@ -1651,14 +1679,14 @@ vortex_up(struct net_device *dev) | |||
1651 | config = BFINS(config, dev->if_port, 20, 4); | 1679 | config = BFINS(config, dev->if_port, 20, 4); |
1652 | if (vortex_debug > 6) | 1680 | if (vortex_debug > 6) |
1653 | printk(KERN_DEBUG "vortex_up(): writing 0x%x to InternalConfig\n", config); | 1681 | printk(KERN_DEBUG "vortex_up(): writing 0x%x to InternalConfig\n", config); |
1654 | outl(config, ioaddr + Wn3_Config); | 1682 | iowrite32(config, ioaddr + Wn3_Config); |
1655 | 1683 | ||
1656 | if (dev->if_port == XCVR_MII || dev->if_port == XCVR_NWAY) { | 1684 | if (dev->if_port == XCVR_MII || dev->if_port == XCVR_NWAY) { |
1657 | int mii_reg1, mii_reg5; | 1685 | int mii_reg1, mii_reg5; |
1658 | EL3WINDOW(4); | 1686 | EL3WINDOW(4); |
1659 | /* Read BMSR (reg1) only to clear old status. */ | 1687 | /* Read BMSR (reg1) only to clear old status. */ |
1660 | mii_reg1 = mdio_read(dev, vp->phys[0], 1); | 1688 | mii_reg1 = mdio_read(dev, vp->phys[0], MII_BMSR); |
1661 | mii_reg5 = mdio_read(dev, vp->phys[0], 5); | 1689 | mii_reg5 = mdio_read(dev, vp->phys[0], MII_LPA); |
1662 | if (mii_reg5 == 0xffff || mii_reg5 == 0x0000) { | 1690 | if (mii_reg5 == 0xffff || mii_reg5 == 0x0000) { |
1663 | netif_carrier_off(dev); /* No MII device or no link partner report */ | 1691 | netif_carrier_off(dev); /* No MII device or no link partner report */ |
1664 | } else { | 1692 | } else { |
@@ -1679,7 +1707,7 @@ vortex_up(struct net_device *dev) | |||
1679 | } | 1707 | } |
1680 | 1708 | ||
1681 | /* Set the full-duplex bit. */ | 1709 | /* Set the full-duplex bit. */ |
1682 | outw( ((vp->info1 & 0x8000) || vp->full_duplex ? 0x20 : 0) | | 1710 | iowrite16( ((vp->info1 & 0x8000) || vp->full_duplex ? 0x20 : 0) | |
1683 | (vp->large_frames ? 0x40 : 0) | | 1711 | (vp->large_frames ? 0x40 : 0) | |
1684 | ((vp->full_duplex && vp->flow_ctrl && vp->partner_flow_ctrl) ? 0x100 : 0), | 1712 | ((vp->full_duplex && vp->flow_ctrl && vp->partner_flow_ctrl) ? 0x100 : 0), |
1685 | ioaddr + Wn3_MAC_Ctrl); | 1713 | ioaddr + Wn3_MAC_Ctrl); |
@@ -1695,51 +1723,51 @@ vortex_up(struct net_device *dev) | |||
1695 | */ | 1723 | */ |
1696 | issue_and_wait(dev, RxReset|0x04); | 1724 | issue_and_wait(dev, RxReset|0x04); |
1697 | 1725 | ||
1698 | outw(SetStatusEnb | 0x00, ioaddr + EL3_CMD); | 1726 | iowrite16(SetStatusEnb | 0x00, ioaddr + EL3_CMD); |
1699 | 1727 | ||
1700 | if (vortex_debug > 1) { | 1728 | if (vortex_debug > 1) { |
1701 | EL3WINDOW(4); | 1729 | EL3WINDOW(4); |
1702 | printk(KERN_DEBUG "%s: vortex_up() irq %d media status %4.4x.\n", | 1730 | printk(KERN_DEBUG "%s: vortex_up() irq %d media status %4.4x.\n", |
1703 | dev->name, dev->irq, inw(ioaddr + Wn4_Media)); | 1731 | dev->name, dev->irq, ioread16(ioaddr + Wn4_Media)); |
1704 | } | 1732 | } |
1705 | 1733 | ||
1706 | /* Set the station address and mask in window 2 each time opened. */ | 1734 | /* Set the station address and mask in window 2 each time opened. */ |
1707 | EL3WINDOW(2); | 1735 | EL3WINDOW(2); |
1708 | for (i = 0; i < 6; i++) | 1736 | for (i = 0; i < 6; i++) |
1709 | outb(dev->dev_addr[i], ioaddr + i); | 1737 | iowrite8(dev->dev_addr[i], ioaddr + i); |
1710 | for (; i < 12; i+=2) | 1738 | for (; i < 12; i+=2) |
1711 | outw(0, ioaddr + i); | 1739 | iowrite16(0, ioaddr + i); |
1712 | 1740 | ||
1713 | if (vp->cb_fn_base) { | 1741 | if (vp->cb_fn_base) { |
1714 | unsigned short n = inw(ioaddr + Wn2_ResetOptions) & ~0x4010; | 1742 | unsigned short n = ioread16(ioaddr + Wn2_ResetOptions) & ~0x4010; |
1715 | if (vp->drv_flags & INVERT_LED_PWR) | 1743 | if (vp->drv_flags & INVERT_LED_PWR) |
1716 | n |= 0x10; | 1744 | n |= 0x10; |
1717 | if (vp->drv_flags & INVERT_MII_PWR) | 1745 | if (vp->drv_flags & INVERT_MII_PWR) |
1718 | n |= 0x4000; | 1746 | n |= 0x4000; |
1719 | outw(n, ioaddr + Wn2_ResetOptions); | 1747 | iowrite16(n, ioaddr + Wn2_ResetOptions); |
1720 | } | 1748 | } |
1721 | 1749 | ||
1722 | if (dev->if_port == XCVR_10base2) | 1750 | if (dev->if_port == XCVR_10base2) |
1723 | /* Start the thinnet transceiver. We should really wait 50ms...*/ | 1751 | /* Start the thinnet transceiver. We should really wait 50ms...*/ |
1724 | outw(StartCoax, ioaddr + EL3_CMD); | 1752 | iowrite16(StartCoax, ioaddr + EL3_CMD); |
1725 | if (dev->if_port != XCVR_NWAY) { | 1753 | if (dev->if_port != XCVR_NWAY) { |
1726 | EL3WINDOW(4); | 1754 | EL3WINDOW(4); |
1727 | outw((inw(ioaddr + Wn4_Media) & ~(Media_10TP|Media_SQE)) | | 1755 | iowrite16((ioread16(ioaddr + Wn4_Media) & ~(Media_10TP|Media_SQE)) | |
1728 | media_tbl[dev->if_port].media_bits, ioaddr + Wn4_Media); | 1756 | media_tbl[dev->if_port].media_bits, ioaddr + Wn4_Media); |
1729 | } | 1757 | } |
1730 | 1758 | ||
1731 | /* Switch to the stats window, and clear all stats by reading. */ | 1759 | /* Switch to the stats window, and clear all stats by reading. */ |
1732 | outw(StatsDisable, ioaddr + EL3_CMD); | 1760 | iowrite16(StatsDisable, ioaddr + EL3_CMD); |
1733 | EL3WINDOW(6); | 1761 | EL3WINDOW(6); |
1734 | for (i = 0; i < 10; i++) | 1762 | for (i = 0; i < 10; i++) |
1735 | inb(ioaddr + i); | 1763 | ioread8(ioaddr + i); |
1736 | inw(ioaddr + 10); | 1764 | ioread16(ioaddr + 10); |
1737 | inw(ioaddr + 12); | 1765 | ioread16(ioaddr + 12); |
1738 | /* New: On the Vortex we must also clear the BadSSD counter. */ | 1766 | /* New: On the Vortex we must also clear the BadSSD counter. */ |
1739 | EL3WINDOW(4); | 1767 | EL3WINDOW(4); |
1740 | inb(ioaddr + 12); | 1768 | ioread8(ioaddr + 12); |
1741 | /* ..and on the Boomerang we enable the extra statistics bits. */ | 1769 | /* ..and on the Boomerang we enable the extra statistics bits. */ |
1742 | outw(0x0040, ioaddr + Wn4_NetDiag); | 1770 | iowrite16(0x0040, ioaddr + Wn4_NetDiag); |
1743 | 1771 | ||
1744 | /* Switch to register set 7 for normal use. */ | 1772 | /* Switch to register set 7 for normal use. */ |
1745 | EL3WINDOW(7); | 1773 | EL3WINDOW(7); |
@@ -1747,30 +1775,30 @@ vortex_up(struct net_device *dev) | |||
1747 | if (vp->full_bus_master_rx) { /* Boomerang bus master. */ | 1775 | if (vp->full_bus_master_rx) { /* Boomerang bus master. */ |
1748 | vp->cur_rx = vp->dirty_rx = 0; | 1776 | vp->cur_rx = vp->dirty_rx = 0; |
1749 | /* Initialize the RxEarly register as recommended. */ | 1777 | /* Initialize the RxEarly register as recommended. */ |
1750 | outw(SetRxThreshold + (1536>>2), ioaddr + EL3_CMD); | 1778 | iowrite16(SetRxThreshold + (1536>>2), ioaddr + EL3_CMD); |
1751 | outl(0x0020, ioaddr + PktStatus); | 1779 | iowrite32(0x0020, ioaddr + PktStatus); |
1752 | outl(vp->rx_ring_dma, ioaddr + UpListPtr); | 1780 | iowrite32(vp->rx_ring_dma, ioaddr + UpListPtr); |
1753 | } | 1781 | } |
1754 | if (vp->full_bus_master_tx) { /* Boomerang bus master Tx. */ | 1782 | if (vp->full_bus_master_tx) { /* Boomerang bus master Tx. */ |
1755 | vp->cur_tx = vp->dirty_tx = 0; | 1783 | vp->cur_tx = vp->dirty_tx = 0; |
1756 | if (vp->drv_flags & IS_BOOMERANG) | 1784 | if (vp->drv_flags & IS_BOOMERANG) |
1757 | outb(PKT_BUF_SZ>>8, ioaddr + TxFreeThreshold); /* Room for a packet. */ | 1785 | iowrite8(PKT_BUF_SZ>>8, ioaddr + TxFreeThreshold); /* Room for a packet. */ |
1758 | /* Clear the Rx, Tx rings. */ | 1786 | /* Clear the Rx, Tx rings. */ |
1759 | for (i = 0; i < RX_RING_SIZE; i++) /* AKPM: this is done in vortex_open, too */ | 1787 | for (i = 0; i < RX_RING_SIZE; i++) /* AKPM: this is done in vortex_open, too */ |
1760 | vp->rx_ring[i].status = 0; | 1788 | vp->rx_ring[i].status = 0; |
1761 | for (i = 0; i < TX_RING_SIZE; i++) | 1789 | for (i = 0; i < TX_RING_SIZE; i++) |
1762 | vp->tx_skbuff[i] = NULL; | 1790 | vp->tx_skbuff[i] = NULL; |
1763 | outl(0, ioaddr + DownListPtr); | 1791 | iowrite32(0, ioaddr + DownListPtr); |
1764 | } | 1792 | } |
1765 | /* Set receiver mode: presumably accept b-case and phys addr only. */ | 1793 | /* Set receiver mode: presumably accept b-case and phys addr only. */ |
1766 | set_rx_mode(dev); | 1794 | set_rx_mode(dev); |
1767 | /* enable 802.1q tagged frames */ | 1795 | /* enable 802.1q tagged frames */ |
1768 | set_8021q_mode(dev, 1); | 1796 | set_8021q_mode(dev, 1); |
1769 | outw(StatsEnable, ioaddr + EL3_CMD); /* Turn on statistics. */ | 1797 | iowrite16(StatsEnable, ioaddr + EL3_CMD); /* Turn on statistics. */ |
1770 | 1798 | ||
1771 | // issue_and_wait(dev, SetTxStart|0x07ff); | 1799 | // issue_and_wait(dev, SetTxStart|0x07ff); |
1772 | outw(RxEnable, ioaddr + EL3_CMD); /* Enable the receiver. */ | 1800 | iowrite16(RxEnable, ioaddr + EL3_CMD); /* Enable the receiver. */ |
1773 | outw(TxEnable, ioaddr + EL3_CMD); /* Enable transmitter. */ | 1801 | iowrite16(TxEnable, ioaddr + EL3_CMD); /* Enable transmitter. */ |
1774 | /* Allow status bits to be seen. */ | 1802 | /* Allow status bits to be seen. */ |
1775 | vp->status_enable = SetStatusEnb | HostError|IntReq|StatsFull|TxComplete| | 1803 | vp->status_enable = SetStatusEnb | HostError|IntReq|StatsFull|TxComplete| |
1776 | (vp->full_bus_master_tx ? DownComplete : TxAvailable) | | 1804 | (vp->full_bus_master_tx ? DownComplete : TxAvailable) | |
@@ -1780,13 +1808,13 @@ vortex_up(struct net_device *dev) | |||
1780 | (vp->full_bus_master_rx ? 0 : RxComplete) | | 1808 | (vp->full_bus_master_rx ? 0 : RxComplete) | |
1781 | StatsFull | HostError | TxComplete | IntReq | 1809 | StatsFull | HostError | TxComplete | IntReq |
1782 | | (vp->bus_master ? DMADone : 0) | UpComplete | DownComplete; | 1810 | | (vp->bus_master ? DMADone : 0) | UpComplete | DownComplete; |
1783 | outw(vp->status_enable, ioaddr + EL3_CMD); | 1811 | iowrite16(vp->status_enable, ioaddr + EL3_CMD); |
1784 | /* Ack all pending events, and set active indicator mask. */ | 1812 | /* Ack all pending events, and set active indicator mask. */ |
1785 | outw(AckIntr | IntLatch | TxAvailable | RxEarly | IntReq, | 1813 | iowrite16(AckIntr | IntLatch | TxAvailable | RxEarly | IntReq, |
1786 | ioaddr + EL3_CMD); | 1814 | ioaddr + EL3_CMD); |
1787 | outw(vp->intr_enable, ioaddr + EL3_CMD); | 1815 | iowrite16(vp->intr_enable, ioaddr + EL3_CMD); |
1788 | if (vp->cb_fn_base) /* The PCMCIA people are idiots. */ | 1816 | if (vp->cb_fn_base) /* The PCMCIA people are idiots. */ |
1789 | writel(0x8000, vp->cb_fn_base + 4); | 1817 | iowrite32(0x8000, vp->cb_fn_base + 4); |
1790 | netif_start_queue (dev); | 1818 | netif_start_queue (dev); |
1791 | } | 1819 | } |
1792 | 1820 | ||
@@ -1852,7 +1880,7 @@ vortex_timer(unsigned long data) | |||
1852 | { | 1880 | { |
1853 | struct net_device *dev = (struct net_device *)data; | 1881 | struct net_device *dev = (struct net_device *)data; |
1854 | struct vortex_private *vp = netdev_priv(dev); | 1882 | struct vortex_private *vp = netdev_priv(dev); |
1855 | long ioaddr = dev->base_addr; | 1883 | void __iomem *ioaddr = vp->ioaddr; |
1856 | int next_tick = 60*HZ; | 1884 | int next_tick = 60*HZ; |
1857 | int ok = 0; | 1885 | int ok = 0; |
1858 | int media_status, mii_status, old_window; | 1886 | int media_status, mii_status, old_window; |
@@ -1866,9 +1894,9 @@ vortex_timer(unsigned long data) | |||
1866 | if (vp->medialock) | 1894 | if (vp->medialock) |
1867 | goto leave_media_alone; | 1895 | goto leave_media_alone; |
1868 | disable_irq(dev->irq); | 1896 | disable_irq(dev->irq); |
1869 | old_window = inw(ioaddr + EL3_CMD) >> 13; | 1897 | old_window = ioread16(ioaddr + EL3_CMD) >> 13; |
1870 | EL3WINDOW(4); | 1898 | EL3WINDOW(4); |
1871 | media_status = inw(ioaddr + Wn4_Media); | 1899 | media_status = ioread16(ioaddr + Wn4_Media); |
1872 | switch (dev->if_port) { | 1900 | switch (dev->if_port) { |
1873 | case XCVR_10baseT: case XCVR_100baseTx: case XCVR_100baseFx: | 1901 | case XCVR_10baseT: case XCVR_100baseTx: case XCVR_100baseFx: |
1874 | if (media_status & Media_LnkBeat) { | 1902 | if (media_status & Media_LnkBeat) { |
@@ -1888,14 +1916,17 @@ vortex_timer(unsigned long data) | |||
1888 | case XCVR_MII: case XCVR_NWAY: | 1916 | case XCVR_MII: case XCVR_NWAY: |
1889 | { | 1917 | { |
1890 | spin_lock_bh(&vp->lock); | 1918 | spin_lock_bh(&vp->lock); |
1891 | mii_status = mdio_read(dev, vp->phys[0], 1); | 1919 | mii_status = mdio_read(dev, vp->phys[0], MII_BMSR); |
1892 | mii_status = mdio_read(dev, vp->phys[0], 1); | 1920 | if (!(mii_status & BMSR_LSTATUS)) { |
1921 | /* Re-read to get actual link status */ | ||
1922 | mii_status = mdio_read(dev, vp->phys[0], MII_BMSR); | ||
1923 | } | ||
1893 | ok = 1; | 1924 | ok = 1; |
1894 | if (vortex_debug > 2) | 1925 | if (vortex_debug > 2) |
1895 | printk(KERN_DEBUG "%s: MII transceiver has status %4.4x.\n", | 1926 | printk(KERN_DEBUG "%s: MII transceiver has status %4.4x.\n", |
1896 | dev->name, mii_status); | 1927 | dev->name, mii_status); |
1897 | if (mii_status & BMSR_LSTATUS) { | 1928 | if (mii_status & BMSR_LSTATUS) { |
1898 | int mii_reg5 = mdio_read(dev, vp->phys[0], 5); | 1929 | int mii_reg5 = mdio_read(dev, vp->phys[0], MII_LPA); |
1899 | if (! vp->force_fd && mii_reg5 != 0xffff) { | 1930 | if (! vp->force_fd && mii_reg5 != 0xffff) { |
1900 | int duplex; | 1931 | int duplex; |
1901 | 1932 | ||
@@ -1909,7 +1940,7 @@ vortex_timer(unsigned long data) | |||
1909 | vp->phys[0], mii_reg5); | 1940 | vp->phys[0], mii_reg5); |
1910 | /* Set the full-duplex bit. */ | 1941 | /* Set the full-duplex bit. */ |
1911 | EL3WINDOW(3); | 1942 | EL3WINDOW(3); |
1912 | outw( (vp->full_duplex ? 0x20 : 0) | | 1943 | iowrite16( (vp->full_duplex ? 0x20 : 0) | |
1913 | (vp->large_frames ? 0x40 : 0) | | 1944 | (vp->large_frames ? 0x40 : 0) | |
1914 | ((vp->full_duplex && vp->flow_ctrl && vp->partner_flow_ctrl) ? 0x100 : 0), | 1945 | ((vp->full_duplex && vp->flow_ctrl && vp->partner_flow_ctrl) ? 0x100 : 0), |
1915 | ioaddr + Wn3_MAC_Ctrl); | 1946 | ioaddr + Wn3_MAC_Ctrl); |
@@ -1950,15 +1981,15 @@ vortex_timer(unsigned long data) | |||
1950 | dev->name, media_tbl[dev->if_port].name); | 1981 | dev->name, media_tbl[dev->if_port].name); |
1951 | next_tick = media_tbl[dev->if_port].wait; | 1982 | next_tick = media_tbl[dev->if_port].wait; |
1952 | } | 1983 | } |
1953 | outw((media_status & ~(Media_10TP|Media_SQE)) | | 1984 | iowrite16((media_status & ~(Media_10TP|Media_SQE)) | |
1954 | media_tbl[dev->if_port].media_bits, ioaddr + Wn4_Media); | 1985 | media_tbl[dev->if_port].media_bits, ioaddr + Wn4_Media); |
1955 | 1986 | ||
1956 | EL3WINDOW(3); | 1987 | EL3WINDOW(3); |
1957 | config = inl(ioaddr + Wn3_Config); | 1988 | config = ioread32(ioaddr + Wn3_Config); |
1958 | config = BFINS(config, dev->if_port, 20, 4); | 1989 | config = BFINS(config, dev->if_port, 20, 4); |
1959 | outl(config, ioaddr + Wn3_Config); | 1990 | iowrite32(config, ioaddr + Wn3_Config); |
1960 | 1991 | ||
1961 | outw(dev->if_port == XCVR_10base2 ? StartCoax : StopCoax, | 1992 | iowrite16(dev->if_port == XCVR_10base2 ? StartCoax : StopCoax, |
1962 | ioaddr + EL3_CMD); | 1993 | ioaddr + EL3_CMD); |
1963 | if (vortex_debug > 1) | 1994 | if (vortex_debug > 1) |
1964 | printk(KERN_DEBUG "wrote 0x%08x to Wn3_Config\n", config); | 1995 | printk(KERN_DEBUG "wrote 0x%08x to Wn3_Config\n", config); |
@@ -1974,29 +2005,29 @@ leave_media_alone: | |||
1974 | 2005 | ||
1975 | mod_timer(&vp->timer, RUN_AT(next_tick)); | 2006 | mod_timer(&vp->timer, RUN_AT(next_tick)); |
1976 | if (vp->deferred) | 2007 | if (vp->deferred) |
1977 | outw(FakeIntr, ioaddr + EL3_CMD); | 2008 | iowrite16(FakeIntr, ioaddr + EL3_CMD); |
1978 | return; | 2009 | return; |
1979 | } | 2010 | } |
1980 | 2011 | ||
1981 | static void vortex_tx_timeout(struct net_device *dev) | 2012 | static void vortex_tx_timeout(struct net_device *dev) |
1982 | { | 2013 | { |
1983 | struct vortex_private *vp = netdev_priv(dev); | 2014 | struct vortex_private *vp = netdev_priv(dev); |
1984 | long ioaddr = dev->base_addr; | 2015 | void __iomem *ioaddr = vp->ioaddr; |
1985 | 2016 | ||
1986 | printk(KERN_ERR "%s: transmit timed out, tx_status %2.2x status %4.4x.\n", | 2017 | printk(KERN_ERR "%s: transmit timed out, tx_status %2.2x status %4.4x.\n", |
1987 | dev->name, inb(ioaddr + TxStatus), | 2018 | dev->name, ioread8(ioaddr + TxStatus), |
1988 | inw(ioaddr + EL3_STATUS)); | 2019 | ioread16(ioaddr + EL3_STATUS)); |
1989 | EL3WINDOW(4); | 2020 | EL3WINDOW(4); |
1990 | printk(KERN_ERR " diagnostics: net %04x media %04x dma %08x fifo %04x\n", | 2021 | printk(KERN_ERR " diagnostics: net %04x media %04x dma %08x fifo %04x\n", |
1991 | inw(ioaddr + Wn4_NetDiag), | 2022 | ioread16(ioaddr + Wn4_NetDiag), |
1992 | inw(ioaddr + Wn4_Media), | 2023 | ioread16(ioaddr + Wn4_Media), |
1993 | inl(ioaddr + PktStatus), | 2024 | ioread32(ioaddr + PktStatus), |
1994 | inw(ioaddr + Wn4_FIFODiag)); | 2025 | ioread16(ioaddr + Wn4_FIFODiag)); |
1995 | /* Slight code bloat to be user friendly. */ | 2026 | /* Slight code bloat to be user friendly. */ |
1996 | if ((inb(ioaddr + TxStatus) & 0x88) == 0x88) | 2027 | if ((ioread8(ioaddr + TxStatus) & 0x88) == 0x88) |
1997 | printk(KERN_ERR "%s: Transmitter encountered 16 collisions --" | 2028 | printk(KERN_ERR "%s: Transmitter encountered 16 collisions --" |
1998 | " network cable problem?\n", dev->name); | 2029 | " network cable problem?\n", dev->name); |
1999 | if (inw(ioaddr + EL3_STATUS) & IntLatch) { | 2030 | if (ioread16(ioaddr + EL3_STATUS) & IntLatch) { |
2000 | printk(KERN_ERR "%s: Interrupt posted but not delivered --" | 2031 | printk(KERN_ERR "%s: Interrupt posted but not delivered --" |
2001 | " IRQ blocked by another device?\n", dev->name); | 2032 | " IRQ blocked by another device?\n", dev->name); |
2002 | /* Bad idea here.. but we might as well handle a few events. */ | 2033 | /* Bad idea here.. but we might as well handle a few events. */ |
@@ -2022,21 +2053,21 @@ static void vortex_tx_timeout(struct net_device *dev) | |||
2022 | vp->stats.tx_errors++; | 2053 | vp->stats.tx_errors++; |
2023 | if (vp->full_bus_master_tx) { | 2054 | if (vp->full_bus_master_tx) { |
2024 | printk(KERN_DEBUG "%s: Resetting the Tx ring pointer.\n", dev->name); | 2055 | printk(KERN_DEBUG "%s: Resetting the Tx ring pointer.\n", dev->name); |
2025 | if (vp->cur_tx - vp->dirty_tx > 0 && inl(ioaddr + DownListPtr) == 0) | 2056 | if (vp->cur_tx - vp->dirty_tx > 0 && ioread32(ioaddr + DownListPtr) == 0) |
2026 | outl(vp->tx_ring_dma + (vp->dirty_tx % TX_RING_SIZE) * sizeof(struct boom_tx_desc), | 2057 | iowrite32(vp->tx_ring_dma + (vp->dirty_tx % TX_RING_SIZE) * sizeof(struct boom_tx_desc), |
2027 | ioaddr + DownListPtr); | 2058 | ioaddr + DownListPtr); |
2028 | if (vp->cur_tx - vp->dirty_tx < TX_RING_SIZE) | 2059 | if (vp->cur_tx - vp->dirty_tx < TX_RING_SIZE) |
2029 | netif_wake_queue (dev); | 2060 | netif_wake_queue (dev); |
2030 | if (vp->drv_flags & IS_BOOMERANG) | 2061 | if (vp->drv_flags & IS_BOOMERANG) |
2031 | outb(PKT_BUF_SZ>>8, ioaddr + TxFreeThreshold); | 2062 | iowrite8(PKT_BUF_SZ>>8, ioaddr + TxFreeThreshold); |
2032 | outw(DownUnstall, ioaddr + EL3_CMD); | 2063 | iowrite16(DownUnstall, ioaddr + EL3_CMD); |
2033 | } else { | 2064 | } else { |
2034 | vp->stats.tx_dropped++; | 2065 | vp->stats.tx_dropped++; |
2035 | netif_wake_queue(dev); | 2066 | netif_wake_queue(dev); |
2036 | } | 2067 | } |
2037 | 2068 | ||
2038 | /* Issue Tx Enable */ | 2069 | /* Issue Tx Enable */ |
2039 | outw(TxEnable, ioaddr + EL3_CMD); | 2070 | iowrite16(TxEnable, ioaddr + EL3_CMD); |
2040 | dev->trans_start = jiffies; | 2071 | dev->trans_start = jiffies; |
2041 | 2072 | ||
2042 | /* Switch to register set 7 for normal use. */ | 2073 | /* Switch to register set 7 for normal use. */ |
@@ -2051,7 +2082,7 @@ static void | |||
2051 | vortex_error(struct net_device *dev, int status) | 2082 | vortex_error(struct net_device *dev, int status) |
2052 | { | 2083 | { |
2053 | struct vortex_private *vp = netdev_priv(dev); | 2084 | struct vortex_private *vp = netdev_priv(dev); |
2054 | long ioaddr = dev->base_addr; | 2085 | void __iomem *ioaddr = vp->ioaddr; |
2055 | int do_tx_reset = 0, reset_mask = 0; | 2086 | int do_tx_reset = 0, reset_mask = 0; |
2056 | unsigned char tx_status = 0; | 2087 | unsigned char tx_status = 0; |
2057 | 2088 | ||
@@ -2060,7 +2091,7 @@ vortex_error(struct net_device *dev, int status) | |||
2060 | } | 2091 | } |
2061 | 2092 | ||
2062 | if (status & TxComplete) { /* Really "TxError" for us. */ | 2093 | if (status & TxComplete) { /* Really "TxError" for us. */ |
2063 | tx_status = inb(ioaddr + TxStatus); | 2094 | tx_status = ioread8(ioaddr + TxStatus); |
2064 | /* Presumably a tx-timeout. We must merely re-enable. */ | 2095 | /* Presumably a tx-timeout. We must merely re-enable. */ |
2065 | if (vortex_debug > 2 | 2096 | if (vortex_debug > 2 |
2066 | || (tx_status != 0x88 && vortex_debug > 0)) { | 2097 | || (tx_status != 0x88 && vortex_debug > 0)) { |
@@ -2074,20 +2105,20 @@ vortex_error(struct net_device *dev, int status) | |||
2074 | } | 2105 | } |
2075 | if (tx_status & 0x14) vp->stats.tx_fifo_errors++; | 2106 | if (tx_status & 0x14) vp->stats.tx_fifo_errors++; |
2076 | if (tx_status & 0x38) vp->stats.tx_aborted_errors++; | 2107 | if (tx_status & 0x38) vp->stats.tx_aborted_errors++; |
2077 | outb(0, ioaddr + TxStatus); | 2108 | iowrite8(0, ioaddr + TxStatus); |
2078 | if (tx_status & 0x30) { /* txJabber or txUnderrun */ | 2109 | if (tx_status & 0x30) { /* txJabber or txUnderrun */ |
2079 | do_tx_reset = 1; | 2110 | do_tx_reset = 1; |
2080 | } else if ((tx_status & 0x08) && (vp->drv_flags & MAX_COLLISION_RESET)) { /* maxCollisions */ | 2111 | } else if ((tx_status & 0x08) && (vp->drv_flags & MAX_COLLISION_RESET)) { /* maxCollisions */ |
2081 | do_tx_reset = 1; | 2112 | do_tx_reset = 1; |
2082 | reset_mask = 0x0108; /* Reset interface logic, but not download logic */ | 2113 | reset_mask = 0x0108; /* Reset interface logic, but not download logic */ |
2083 | } else { /* Merely re-enable the transmitter. */ | 2114 | } else { /* Merely re-enable the transmitter. */ |
2084 | outw(TxEnable, ioaddr + EL3_CMD); | 2115 | iowrite16(TxEnable, ioaddr + EL3_CMD); |
2085 | } | 2116 | } |
2086 | } | 2117 | } |
2087 | 2118 | ||
2088 | if (status & RxEarly) { /* Rx early is unused. */ | 2119 | if (status & RxEarly) { /* Rx early is unused. */ |
2089 | vortex_rx(dev); | 2120 | vortex_rx(dev); |
2090 | outw(AckIntr | RxEarly, ioaddr + EL3_CMD); | 2121 | iowrite16(AckIntr | RxEarly, ioaddr + EL3_CMD); |
2091 | } | 2122 | } |
2092 | if (status & StatsFull) { /* Empty statistics. */ | 2123 | if (status & StatsFull) { /* Empty statistics. */ |
2093 | static int DoneDidThat; | 2124 | static int DoneDidThat; |
@@ -2097,29 +2128,29 @@ vortex_error(struct net_device *dev, int status) | |||
2097 | /* HACK: Disable statistics as an interrupt source. */ | 2128 | /* HACK: Disable statistics as an interrupt source. */ |
2098 | /* This occurs when we have the wrong media type! */ | 2129 | /* This occurs when we have the wrong media type! */ |
2099 | if (DoneDidThat == 0 && | 2130 | if (DoneDidThat == 0 && |
2100 | inw(ioaddr + EL3_STATUS) & StatsFull) { | 2131 | ioread16(ioaddr + EL3_STATUS) & StatsFull) { |
2101 | printk(KERN_WARNING "%s: Updating statistics failed, disabling " | 2132 | printk(KERN_WARNING "%s: Updating statistics failed, disabling " |
2102 | "stats as an interrupt source.\n", dev->name); | 2133 | "stats as an interrupt source.\n", dev->name); |
2103 | EL3WINDOW(5); | 2134 | EL3WINDOW(5); |
2104 | outw(SetIntrEnb | (inw(ioaddr + 10) & ~StatsFull), ioaddr + EL3_CMD); | 2135 | iowrite16(SetIntrEnb | (ioread16(ioaddr + 10) & ~StatsFull), ioaddr + EL3_CMD); |
2105 | vp->intr_enable &= ~StatsFull; | 2136 | vp->intr_enable &= ~StatsFull; |
2106 | EL3WINDOW(7); | 2137 | EL3WINDOW(7); |
2107 | DoneDidThat++; | 2138 | DoneDidThat++; |
2108 | } | 2139 | } |
2109 | } | 2140 | } |
2110 | if (status & IntReq) { /* Restore all interrupt sources. */ | 2141 | if (status & IntReq) { /* Restore all interrupt sources. */ |
2111 | outw(vp->status_enable, ioaddr + EL3_CMD); | 2142 | iowrite16(vp->status_enable, ioaddr + EL3_CMD); |
2112 | outw(vp->intr_enable, ioaddr + EL3_CMD); | 2143 | iowrite16(vp->intr_enable, ioaddr + EL3_CMD); |
2113 | } | 2144 | } |
2114 | if (status & HostError) { | 2145 | if (status & HostError) { |
2115 | u16 fifo_diag; | 2146 | u16 fifo_diag; |
2116 | EL3WINDOW(4); | 2147 | EL3WINDOW(4); |
2117 | fifo_diag = inw(ioaddr + Wn4_FIFODiag); | 2148 | fifo_diag = ioread16(ioaddr + Wn4_FIFODiag); |
2118 | printk(KERN_ERR "%s: Host error, FIFO diagnostic register %4.4x.\n", | 2149 | printk(KERN_ERR "%s: Host error, FIFO diagnostic register %4.4x.\n", |
2119 | dev->name, fifo_diag); | 2150 | dev->name, fifo_diag); |
2120 | /* Adapter failure requires Tx/Rx reset and reinit. */ | 2151 | /* Adapter failure requires Tx/Rx reset and reinit. */ |
2121 | if (vp->full_bus_master_tx) { | 2152 | if (vp->full_bus_master_tx) { |
2122 | int bus_status = inl(ioaddr + PktStatus); | 2153 | int bus_status = ioread32(ioaddr + PktStatus); |
2123 | /* 0x80000000 PCI master abort. */ | 2154 | /* 0x80000000 PCI master abort. */ |
2124 | /* 0x40000000 PCI target abort. */ | 2155 | /* 0x40000000 PCI target abort. */ |
2125 | if (vortex_debug) | 2156 | if (vortex_debug) |
@@ -2139,14 +2170,14 @@ vortex_error(struct net_device *dev, int status) | |||
2139 | set_rx_mode(dev); | 2170 | set_rx_mode(dev); |
2140 | /* enable 802.1q VLAN tagged frames */ | 2171 | /* enable 802.1q VLAN tagged frames */ |
2141 | set_8021q_mode(dev, 1); | 2172 | set_8021q_mode(dev, 1); |
2142 | outw(RxEnable, ioaddr + EL3_CMD); /* Re-enable the receiver. */ | 2173 | iowrite16(RxEnable, ioaddr + EL3_CMD); /* Re-enable the receiver. */ |
2143 | outw(AckIntr | HostError, ioaddr + EL3_CMD); | 2174 | iowrite16(AckIntr | HostError, ioaddr + EL3_CMD); |
2144 | } | 2175 | } |
2145 | } | 2176 | } |
2146 | 2177 | ||
2147 | if (do_tx_reset) { | 2178 | if (do_tx_reset) { |
2148 | issue_and_wait(dev, TxReset|reset_mask); | 2179 | issue_and_wait(dev, TxReset|reset_mask); |
2149 | outw(TxEnable, ioaddr + EL3_CMD); | 2180 | iowrite16(TxEnable, ioaddr + EL3_CMD); |
2150 | if (!vp->full_bus_master_tx) | 2181 | if (!vp->full_bus_master_tx) |
2151 | netif_wake_queue(dev); | 2182 | netif_wake_queue(dev); |
2152 | } | 2183 | } |
@@ -2156,29 +2187,29 @@ static int | |||
2156 | vortex_start_xmit(struct sk_buff *skb, struct net_device *dev) | 2187 | vortex_start_xmit(struct sk_buff *skb, struct net_device *dev) |
2157 | { | 2188 | { |
2158 | struct vortex_private *vp = netdev_priv(dev); | 2189 | struct vortex_private *vp = netdev_priv(dev); |
2159 | long ioaddr = dev->base_addr; | 2190 | void __iomem *ioaddr = vp->ioaddr; |
2160 | 2191 | ||
2161 | /* Put out the doubleword header... */ | 2192 | /* Put out the doubleword header... */ |
2162 | outl(skb->len, ioaddr + TX_FIFO); | 2193 | iowrite32(skb->len, ioaddr + TX_FIFO); |
2163 | if (vp->bus_master) { | 2194 | if (vp->bus_master) { |
2164 | /* Set the bus-master controller to transfer the packet. */ | 2195 | /* Set the bus-master controller to transfer the packet. */ |
2165 | int len = (skb->len + 3) & ~3; | 2196 | int len = (skb->len + 3) & ~3; |
2166 | outl( vp->tx_skb_dma = pci_map_single(VORTEX_PCI(vp), skb->data, len, PCI_DMA_TODEVICE), | 2197 | iowrite32( vp->tx_skb_dma = pci_map_single(VORTEX_PCI(vp), skb->data, len, PCI_DMA_TODEVICE), |
2167 | ioaddr + Wn7_MasterAddr); | 2198 | ioaddr + Wn7_MasterAddr); |
2168 | outw(len, ioaddr + Wn7_MasterLen); | 2199 | iowrite16(len, ioaddr + Wn7_MasterLen); |
2169 | vp->tx_skb = skb; | 2200 | vp->tx_skb = skb; |
2170 | outw(StartDMADown, ioaddr + EL3_CMD); | 2201 | iowrite16(StartDMADown, ioaddr + EL3_CMD); |
2171 | /* netif_wake_queue() will be called at the DMADone interrupt. */ | 2202 | /* netif_wake_queue() will be called at the DMADone interrupt. */ |
2172 | } else { | 2203 | } else { |
2173 | /* ... and the packet rounded to a doubleword. */ | 2204 | /* ... and the packet rounded to a doubleword. */ |
2174 | outsl(ioaddr + TX_FIFO, skb->data, (skb->len + 3) >> 2); | 2205 | iowrite32_rep(ioaddr + TX_FIFO, skb->data, (skb->len + 3) >> 2); |
2175 | dev_kfree_skb (skb); | 2206 | dev_kfree_skb (skb); |
2176 | if (inw(ioaddr + TxFree) > 1536) { | 2207 | if (ioread16(ioaddr + TxFree) > 1536) { |
2177 | netif_start_queue (dev); /* AKPM: redundant? */ | 2208 | netif_start_queue (dev); /* AKPM: redundant? */ |
2178 | } else { | 2209 | } else { |
2179 | /* Interrupt us when the FIFO has room for max-sized packet. */ | 2210 | /* Interrupt us when the FIFO has room for max-sized packet. */ |
2180 | netif_stop_queue(dev); | 2211 | netif_stop_queue(dev); |
2181 | outw(SetTxThreshold + (1536>>2), ioaddr + EL3_CMD); | 2212 | iowrite16(SetTxThreshold + (1536>>2), ioaddr + EL3_CMD); |
2182 | } | 2213 | } |
2183 | } | 2214 | } |
2184 | 2215 | ||
@@ -2189,7 +2220,7 @@ vortex_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
2189 | int tx_status; | 2220 | int tx_status; |
2190 | int i = 32; | 2221 | int i = 32; |
2191 | 2222 | ||
2192 | while (--i > 0 && (tx_status = inb(ioaddr + TxStatus)) > 0) { | 2223 | while (--i > 0 && (tx_status = ioread8(ioaddr + TxStatus)) > 0) { |
2193 | if (tx_status & 0x3C) { /* A Tx-disabling error occurred. */ | 2224 | if (tx_status & 0x3C) { /* A Tx-disabling error occurred. */ |
2194 | if (vortex_debug > 2) | 2225 | if (vortex_debug > 2) |
2195 | printk(KERN_DEBUG "%s: Tx error, status %2.2x.\n", | 2226 | printk(KERN_DEBUG "%s: Tx error, status %2.2x.\n", |
@@ -2199,9 +2230,9 @@ vortex_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
2199 | if (tx_status & 0x30) { | 2230 | if (tx_status & 0x30) { |
2200 | issue_and_wait(dev, TxReset); | 2231 | issue_and_wait(dev, TxReset); |
2201 | } | 2232 | } |
2202 | outw(TxEnable, ioaddr + EL3_CMD); | 2233 | iowrite16(TxEnable, ioaddr + EL3_CMD); |
2203 | } | 2234 | } |
2204 | outb(0x00, ioaddr + TxStatus); /* Pop the status stack. */ | 2235 | iowrite8(0x00, ioaddr + TxStatus); /* Pop the status stack. */ |
2205 | } | 2236 | } |
2206 | } | 2237 | } |
2207 | return 0; | 2238 | return 0; |
@@ -2211,7 +2242,7 @@ static int | |||
2211 | boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev) | 2242 | boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev) |
2212 | { | 2243 | { |
2213 | struct vortex_private *vp = netdev_priv(dev); | 2244 | struct vortex_private *vp = netdev_priv(dev); |
2214 | long ioaddr = dev->base_addr; | 2245 | void __iomem *ioaddr = vp->ioaddr; |
2215 | /* Calculate the next Tx descriptor entry. */ | 2246 | /* Calculate the next Tx descriptor entry. */ |
2216 | int entry = vp->cur_tx % TX_RING_SIZE; | 2247 | int entry = vp->cur_tx % TX_RING_SIZE; |
2217 | struct boom_tx_desc *prev_entry = &vp->tx_ring[(vp->cur_tx-1) % TX_RING_SIZE]; | 2248 | struct boom_tx_desc *prev_entry = &vp->tx_ring[(vp->cur_tx-1) % TX_RING_SIZE]; |
@@ -2275,8 +2306,8 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
2275 | /* Wait for the stall to complete. */ | 2306 | /* Wait for the stall to complete. */ |
2276 | issue_and_wait(dev, DownStall); | 2307 | issue_and_wait(dev, DownStall); |
2277 | prev_entry->next = cpu_to_le32(vp->tx_ring_dma + entry * sizeof(struct boom_tx_desc)); | 2308 | prev_entry->next = cpu_to_le32(vp->tx_ring_dma + entry * sizeof(struct boom_tx_desc)); |
2278 | if (inl(ioaddr + DownListPtr) == 0) { | 2309 | if (ioread32(ioaddr + DownListPtr) == 0) { |
2279 | outl(vp->tx_ring_dma + entry * sizeof(struct boom_tx_desc), ioaddr + DownListPtr); | 2310 | iowrite32(vp->tx_ring_dma + entry * sizeof(struct boom_tx_desc), ioaddr + DownListPtr); |
2280 | vp->queued_packet++; | 2311 | vp->queued_packet++; |
2281 | } | 2312 | } |
2282 | 2313 | ||
@@ -2291,7 +2322,7 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
2291 | prev_entry->status &= cpu_to_le32(~TxIntrUploaded); | 2322 | prev_entry->status &= cpu_to_le32(~TxIntrUploaded); |
2292 | #endif | 2323 | #endif |
2293 | } | 2324 | } |
2294 | outw(DownUnstall, ioaddr + EL3_CMD); | 2325 | iowrite16(DownUnstall, ioaddr + EL3_CMD); |
2295 | spin_unlock_irqrestore(&vp->lock, flags); | 2326 | spin_unlock_irqrestore(&vp->lock, flags); |
2296 | dev->trans_start = jiffies; | 2327 | dev->trans_start = jiffies; |
2297 | return 0; | 2328 | return 0; |
@@ -2310,15 +2341,15 @@ vortex_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
2310 | { | 2341 | { |
2311 | struct net_device *dev = dev_id; | 2342 | struct net_device *dev = dev_id; |
2312 | struct vortex_private *vp = netdev_priv(dev); | 2343 | struct vortex_private *vp = netdev_priv(dev); |
2313 | long ioaddr; | 2344 | void __iomem *ioaddr; |
2314 | int status; | 2345 | int status; |
2315 | int work_done = max_interrupt_work; | 2346 | int work_done = max_interrupt_work; |
2316 | int handled = 0; | 2347 | int handled = 0; |
2317 | 2348 | ||
2318 | ioaddr = dev->base_addr; | 2349 | ioaddr = vp->ioaddr; |
2319 | spin_lock(&vp->lock); | 2350 | spin_lock(&vp->lock); |
2320 | 2351 | ||
2321 | status = inw(ioaddr + EL3_STATUS); | 2352 | status = ioread16(ioaddr + EL3_STATUS); |
2322 | 2353 | ||
2323 | if (vortex_debug > 6) | 2354 | if (vortex_debug > 6) |
2324 | printk("vortex_interrupt(). status=0x%4x\n", status); | 2355 | printk("vortex_interrupt(). status=0x%4x\n", status); |
@@ -2337,7 +2368,7 @@ vortex_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
2337 | 2368 | ||
2338 | if (vortex_debug > 4) | 2369 | if (vortex_debug > 4) |
2339 | printk(KERN_DEBUG "%s: interrupt, status %4.4x, latency %d ticks.\n", | 2370 | printk(KERN_DEBUG "%s: interrupt, status %4.4x, latency %d ticks.\n", |
2340 | dev->name, status, inb(ioaddr + Timer)); | 2371 | dev->name, status, ioread8(ioaddr + Timer)); |
2341 | 2372 | ||
2342 | do { | 2373 | do { |
2343 | if (vortex_debug > 5) | 2374 | if (vortex_debug > 5) |
@@ -2350,16 +2381,16 @@ vortex_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
2350 | if (vortex_debug > 5) | 2381 | if (vortex_debug > 5) |
2351 | printk(KERN_DEBUG " TX room bit was handled.\n"); | 2382 | printk(KERN_DEBUG " TX room bit was handled.\n"); |
2352 | /* There's room in the FIFO for a full-sized packet. */ | 2383 | /* There's room in the FIFO for a full-sized packet. */ |
2353 | outw(AckIntr | TxAvailable, ioaddr + EL3_CMD); | 2384 | iowrite16(AckIntr | TxAvailable, ioaddr + EL3_CMD); |
2354 | netif_wake_queue (dev); | 2385 | netif_wake_queue (dev); |
2355 | } | 2386 | } |
2356 | 2387 | ||
2357 | if (status & DMADone) { | 2388 | if (status & DMADone) { |
2358 | if (inw(ioaddr + Wn7_MasterStatus) & 0x1000) { | 2389 | if (ioread16(ioaddr + Wn7_MasterStatus) & 0x1000) { |
2359 | outw(0x1000, ioaddr + Wn7_MasterStatus); /* Ack the event. */ | 2390 | iowrite16(0x1000, ioaddr + Wn7_MasterStatus); /* Ack the event. */ |
2360 | pci_unmap_single(VORTEX_PCI(vp), vp->tx_skb_dma, (vp->tx_skb->len + 3) & ~3, PCI_DMA_TODEVICE); | 2391 | pci_unmap_single(VORTEX_PCI(vp), vp->tx_skb_dma, (vp->tx_skb->len + 3) & ~3, PCI_DMA_TODEVICE); |
2361 | dev_kfree_skb_irq(vp->tx_skb); /* Release the transferred buffer */ | 2392 | dev_kfree_skb_irq(vp->tx_skb); /* Release the transferred buffer */ |
2362 | if (inw(ioaddr + TxFree) > 1536) { | 2393 | if (ioread16(ioaddr + TxFree) > 1536) { |
2363 | /* | 2394 | /* |
2364 | * AKPM: FIXME: I don't think we need this. If the queue was stopped due to | 2395 | * AKPM: FIXME: I don't think we need this. If the queue was stopped due to |
2365 | * insufficient FIFO room, the TxAvailable test will succeed and call | 2396 | * insufficient FIFO room, the TxAvailable test will succeed and call |
@@ -2367,7 +2398,7 @@ vortex_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
2367 | */ | 2398 | */ |
2368 | netif_wake_queue(dev); | 2399 | netif_wake_queue(dev); |
2369 | } else { /* Interrupt when FIFO has room for max-sized packet. */ | 2400 | } else { /* Interrupt when FIFO has room for max-sized packet. */ |
2370 | outw(SetTxThreshold + (1536>>2), ioaddr + EL3_CMD); | 2401 | iowrite16(SetTxThreshold + (1536>>2), ioaddr + EL3_CMD); |
2371 | netif_stop_queue(dev); | 2402 | netif_stop_queue(dev); |
2372 | } | 2403 | } |
2373 | } | 2404 | } |
@@ -2385,17 +2416,17 @@ vortex_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
2385 | /* Disable all pending interrupts. */ | 2416 | /* Disable all pending interrupts. */ |
2386 | do { | 2417 | do { |
2387 | vp->deferred |= status; | 2418 | vp->deferred |= status; |
2388 | outw(SetStatusEnb | (~vp->deferred & vp->status_enable), | 2419 | iowrite16(SetStatusEnb | (~vp->deferred & vp->status_enable), |
2389 | ioaddr + EL3_CMD); | 2420 | ioaddr + EL3_CMD); |
2390 | outw(AckIntr | (vp->deferred & 0x7ff), ioaddr + EL3_CMD); | 2421 | iowrite16(AckIntr | (vp->deferred & 0x7ff), ioaddr + EL3_CMD); |
2391 | } while ((status = inw(ioaddr + EL3_CMD)) & IntLatch); | 2422 | } while ((status = ioread16(ioaddr + EL3_CMD)) & IntLatch); |
2392 | /* The timer will reenable interrupts. */ | 2423 | /* The timer will reenable interrupts. */ |
2393 | mod_timer(&vp->timer, jiffies + 1*HZ); | 2424 | mod_timer(&vp->timer, jiffies + 1*HZ); |
2394 | break; | 2425 | break; |
2395 | } | 2426 | } |
2396 | /* Acknowledge the IRQ. */ | 2427 | /* Acknowledge the IRQ. */ |
2397 | outw(AckIntr | IntReq | IntLatch, ioaddr + EL3_CMD); | 2428 | iowrite16(AckIntr | IntReq | IntLatch, ioaddr + EL3_CMD); |
2398 | } while ((status = inw(ioaddr + EL3_STATUS)) & (IntLatch | RxComplete)); | 2429 | } while ((status = ioread16(ioaddr + EL3_STATUS)) & (IntLatch | RxComplete)); |
2399 | 2430 | ||
2400 | if (vortex_debug > 4) | 2431 | if (vortex_debug > 4) |
2401 | printk(KERN_DEBUG "%s: exiting interrupt, status %4.4x.\n", | 2432 | printk(KERN_DEBUG "%s: exiting interrupt, status %4.4x.\n", |
@@ -2415,11 +2446,11 @@ boomerang_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
2415 | { | 2446 | { |
2416 | struct net_device *dev = dev_id; | 2447 | struct net_device *dev = dev_id; |
2417 | struct vortex_private *vp = netdev_priv(dev); | 2448 | struct vortex_private *vp = netdev_priv(dev); |
2418 | long ioaddr; | 2449 | void __iomem *ioaddr; |
2419 | int status; | 2450 | int status; |
2420 | int work_done = max_interrupt_work; | 2451 | int work_done = max_interrupt_work; |
2421 | 2452 | ||
2422 | ioaddr = dev->base_addr; | 2453 | ioaddr = vp->ioaddr; |
2423 | 2454 | ||
2424 | /* | 2455 | /* |
2425 | * It seems dopey to put the spinlock this early, but we could race against vortex_tx_timeout | 2456 | * It seems dopey to put the spinlock this early, but we could race against vortex_tx_timeout |
@@ -2427,7 +2458,7 @@ boomerang_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
2427 | */ | 2458 | */ |
2428 | spin_lock(&vp->lock); | 2459 | spin_lock(&vp->lock); |
2429 | 2460 | ||
2430 | status = inw(ioaddr + EL3_STATUS); | 2461 | status = ioread16(ioaddr + EL3_STATUS); |
2431 | 2462 | ||
2432 | if (vortex_debug > 6) | 2463 | if (vortex_debug > 6) |
2433 | printk(KERN_DEBUG "boomerang_interrupt. status=0x%4x\n", status); | 2464 | printk(KERN_DEBUG "boomerang_interrupt. status=0x%4x\n", status); |
@@ -2448,13 +2479,13 @@ boomerang_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
2448 | 2479 | ||
2449 | if (vortex_debug > 4) | 2480 | if (vortex_debug > 4) |
2450 | printk(KERN_DEBUG "%s: interrupt, status %4.4x, latency %d ticks.\n", | 2481 | printk(KERN_DEBUG "%s: interrupt, status %4.4x, latency %d ticks.\n", |
2451 | dev->name, status, inb(ioaddr + Timer)); | 2482 | dev->name, status, ioread8(ioaddr + Timer)); |
2452 | do { | 2483 | do { |
2453 | if (vortex_debug > 5) | 2484 | if (vortex_debug > 5) |
2454 | printk(KERN_DEBUG "%s: In interrupt loop, status %4.4x.\n", | 2485 | printk(KERN_DEBUG "%s: In interrupt loop, status %4.4x.\n", |
2455 | dev->name, status); | 2486 | dev->name, status); |
2456 | if (status & UpComplete) { | 2487 | if (status & UpComplete) { |
2457 | outw(AckIntr | UpComplete, ioaddr + EL3_CMD); | 2488 | iowrite16(AckIntr | UpComplete, ioaddr + EL3_CMD); |
2458 | if (vortex_debug > 5) | 2489 | if (vortex_debug > 5) |
2459 | printk(KERN_DEBUG "boomerang_interrupt->boomerang_rx\n"); | 2490 | printk(KERN_DEBUG "boomerang_interrupt->boomerang_rx\n"); |
2460 | boomerang_rx(dev); | 2491 | boomerang_rx(dev); |
@@ -2463,11 +2494,11 @@ boomerang_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
2463 | if (status & DownComplete) { | 2494 | if (status & DownComplete) { |
2464 | unsigned int dirty_tx = vp->dirty_tx; | 2495 | unsigned int dirty_tx = vp->dirty_tx; |
2465 | 2496 | ||
2466 | outw(AckIntr | DownComplete, ioaddr + EL3_CMD); | 2497 | iowrite16(AckIntr | DownComplete, ioaddr + EL3_CMD); |
2467 | while (vp->cur_tx - dirty_tx > 0) { | 2498 | while (vp->cur_tx - dirty_tx > 0) { |
2468 | int entry = dirty_tx % TX_RING_SIZE; | 2499 | int entry = dirty_tx % TX_RING_SIZE; |
2469 | #if 1 /* AKPM: the latter is faster, but cyclone-only */ | 2500 | #if 1 /* AKPM: the latter is faster, but cyclone-only */ |
2470 | if (inl(ioaddr + DownListPtr) == | 2501 | if (ioread32(ioaddr + DownListPtr) == |
2471 | vp->tx_ring_dma + entry * sizeof(struct boom_tx_desc)) | 2502 | vp->tx_ring_dma + entry * sizeof(struct boom_tx_desc)) |
2472 | break; /* It still hasn't been processed. */ | 2503 | break; /* It still hasn't been processed. */ |
2473 | #else | 2504 | #else |
@@ -2514,20 +2545,20 @@ boomerang_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
2514 | /* Disable all pending interrupts. */ | 2545 | /* Disable all pending interrupts. */ |
2515 | do { | 2546 | do { |
2516 | vp->deferred |= status; | 2547 | vp->deferred |= status; |
2517 | outw(SetStatusEnb | (~vp->deferred & vp->status_enable), | 2548 | iowrite16(SetStatusEnb | (~vp->deferred & vp->status_enable), |
2518 | ioaddr + EL3_CMD); | 2549 | ioaddr + EL3_CMD); |
2519 | outw(AckIntr | (vp->deferred & 0x7ff), ioaddr + EL3_CMD); | 2550 | iowrite16(AckIntr | (vp->deferred & 0x7ff), ioaddr + EL3_CMD); |
2520 | } while ((status = inw(ioaddr + EL3_CMD)) & IntLatch); | 2551 | } while ((status = ioread16(ioaddr + EL3_CMD)) & IntLatch); |
2521 | /* The timer will reenable interrupts. */ | 2552 | /* The timer will reenable interrupts. */ |
2522 | mod_timer(&vp->timer, jiffies + 1*HZ); | 2553 | mod_timer(&vp->timer, jiffies + 1*HZ); |
2523 | break; | 2554 | break; |
2524 | } | 2555 | } |
2525 | /* Acknowledge the IRQ. */ | 2556 | /* Acknowledge the IRQ. */ |
2526 | outw(AckIntr | IntReq | IntLatch, ioaddr + EL3_CMD); | 2557 | iowrite16(AckIntr | IntReq | IntLatch, ioaddr + EL3_CMD); |
2527 | if (vp->cb_fn_base) /* The PCMCIA people are idiots. */ | 2558 | if (vp->cb_fn_base) /* The PCMCIA people are idiots. */ |
2528 | writel(0x8000, vp->cb_fn_base + 4); | 2559 | iowrite32(0x8000, vp->cb_fn_base + 4); |
2529 | 2560 | ||
2530 | } while ((status = inw(ioaddr + EL3_STATUS)) & IntLatch); | 2561 | } while ((status = ioread16(ioaddr + EL3_STATUS)) & IntLatch); |
2531 | 2562 | ||
2532 | if (vortex_debug > 4) | 2563 | if (vortex_debug > 4) |
2533 | printk(KERN_DEBUG "%s: exiting interrupt, status %4.4x.\n", | 2564 | printk(KERN_DEBUG "%s: exiting interrupt, status %4.4x.\n", |
@@ -2540,16 +2571,16 @@ handler_exit: | |||
2540 | static int vortex_rx(struct net_device *dev) | 2571 | static int vortex_rx(struct net_device *dev) |
2541 | { | 2572 | { |
2542 | struct vortex_private *vp = netdev_priv(dev); | 2573 | struct vortex_private *vp = netdev_priv(dev); |
2543 | long ioaddr = dev->base_addr; | 2574 | void __iomem *ioaddr = vp->ioaddr; |
2544 | int i; | 2575 | int i; |
2545 | short rx_status; | 2576 | short rx_status; |
2546 | 2577 | ||
2547 | if (vortex_debug > 5) | 2578 | if (vortex_debug > 5) |
2548 | printk(KERN_DEBUG "vortex_rx(): status %4.4x, rx_status %4.4x.\n", | 2579 | printk(KERN_DEBUG "vortex_rx(): status %4.4x, rx_status %4.4x.\n", |
2549 | inw(ioaddr+EL3_STATUS), inw(ioaddr+RxStatus)); | 2580 | ioread16(ioaddr+EL3_STATUS), ioread16(ioaddr+RxStatus)); |
2550 | while ((rx_status = inw(ioaddr + RxStatus)) > 0) { | 2581 | while ((rx_status = ioread16(ioaddr + RxStatus)) > 0) { |
2551 | if (rx_status & 0x4000) { /* Error, update stats. */ | 2582 | if (rx_status & 0x4000) { /* Error, update stats. */ |
2552 | unsigned char rx_error = inb(ioaddr + RxErrors); | 2583 | unsigned char rx_error = ioread8(ioaddr + RxErrors); |
2553 | if (vortex_debug > 2) | 2584 | if (vortex_debug > 2) |
2554 | printk(KERN_DEBUG " Rx error: status %2.2x.\n", rx_error); | 2585 | printk(KERN_DEBUG " Rx error: status %2.2x.\n", rx_error); |
2555 | vp->stats.rx_errors++; | 2586 | vp->stats.rx_errors++; |
@@ -2572,34 +2603,35 @@ static int vortex_rx(struct net_device *dev) | |||
2572 | skb_reserve(skb, 2); /* Align IP on 16 byte boundaries */ | 2603 | skb_reserve(skb, 2); /* Align IP on 16 byte boundaries */ |
2573 | /* 'skb_put()' points to the start of sk_buff data area. */ | 2604 | /* 'skb_put()' points to the start of sk_buff data area. */ |
2574 | if (vp->bus_master && | 2605 | if (vp->bus_master && |
2575 | ! (inw(ioaddr + Wn7_MasterStatus) & 0x8000)) { | 2606 | ! (ioread16(ioaddr + Wn7_MasterStatus) & 0x8000)) { |
2576 | dma_addr_t dma = pci_map_single(VORTEX_PCI(vp), skb_put(skb, pkt_len), | 2607 | dma_addr_t dma = pci_map_single(VORTEX_PCI(vp), skb_put(skb, pkt_len), |
2577 | pkt_len, PCI_DMA_FROMDEVICE); | 2608 | pkt_len, PCI_DMA_FROMDEVICE); |
2578 | outl(dma, ioaddr + Wn7_MasterAddr); | 2609 | iowrite32(dma, ioaddr + Wn7_MasterAddr); |
2579 | outw((skb->len + 3) & ~3, ioaddr + Wn7_MasterLen); | 2610 | iowrite16((skb->len + 3) & ~3, ioaddr + Wn7_MasterLen); |
2580 | outw(StartDMAUp, ioaddr + EL3_CMD); | 2611 | iowrite16(StartDMAUp, ioaddr + EL3_CMD); |
2581 | while (inw(ioaddr + Wn7_MasterStatus) & 0x8000) | 2612 | while (ioread16(ioaddr + Wn7_MasterStatus) & 0x8000) |
2582 | ; | 2613 | ; |
2583 | pci_unmap_single(VORTEX_PCI(vp), dma, pkt_len, PCI_DMA_FROMDEVICE); | 2614 | pci_unmap_single(VORTEX_PCI(vp), dma, pkt_len, PCI_DMA_FROMDEVICE); |
2584 | } else { | 2615 | } else { |
2585 | insl(ioaddr + RX_FIFO, skb_put(skb, pkt_len), | 2616 | ioread32_rep(ioaddr + RX_FIFO, |
2586 | (pkt_len + 3) >> 2); | 2617 | skb_put(skb, pkt_len), |
2618 | (pkt_len + 3) >> 2); | ||
2587 | } | 2619 | } |
2588 | outw(RxDiscard, ioaddr + EL3_CMD); /* Pop top Rx packet. */ | 2620 | iowrite16(RxDiscard, ioaddr + EL3_CMD); /* Pop top Rx packet. */ |
2589 | skb->protocol = eth_type_trans(skb, dev); | 2621 | skb->protocol = eth_type_trans(skb, dev); |
2590 | netif_rx(skb); | 2622 | netif_rx(skb); |
2591 | dev->last_rx = jiffies; | 2623 | dev->last_rx = jiffies; |
2592 | vp->stats.rx_packets++; | 2624 | vp->stats.rx_packets++; |
2593 | /* Wait a limited time to go to next packet. */ | 2625 | /* Wait a limited time to go to next packet. */ |
2594 | for (i = 200; i >= 0; i--) | 2626 | for (i = 200; i >= 0; i--) |
2595 | if ( ! (inw(ioaddr + EL3_STATUS) & CmdInProgress)) | 2627 | if ( ! (ioread16(ioaddr + EL3_STATUS) & CmdInProgress)) |
2596 | break; | 2628 | break; |
2597 | continue; | 2629 | continue; |
2598 | } else if (vortex_debug > 0) | 2630 | } else if (vortex_debug > 0) |
2599 | printk(KERN_NOTICE "%s: No memory to allocate a sk_buff of " | 2631 | printk(KERN_NOTICE "%s: No memory to allocate a sk_buff of " |
2600 | "size %d.\n", dev->name, pkt_len); | 2632 | "size %d.\n", dev->name, pkt_len); |
2633 | vp->stats.rx_dropped++; | ||
2601 | } | 2634 | } |
2602 | vp->stats.rx_dropped++; | ||
2603 | issue_and_wait(dev, RxDiscard); | 2635 | issue_and_wait(dev, RxDiscard); |
2604 | } | 2636 | } |
2605 | 2637 | ||
@@ -2611,12 +2643,12 @@ boomerang_rx(struct net_device *dev) | |||
2611 | { | 2643 | { |
2612 | struct vortex_private *vp = netdev_priv(dev); | 2644 | struct vortex_private *vp = netdev_priv(dev); |
2613 | int entry = vp->cur_rx % RX_RING_SIZE; | 2645 | int entry = vp->cur_rx % RX_RING_SIZE; |
2614 | long ioaddr = dev->base_addr; | 2646 | void __iomem *ioaddr = vp->ioaddr; |
2615 | int rx_status; | 2647 | int rx_status; |
2616 | int rx_work_limit = vp->dirty_rx + RX_RING_SIZE - vp->cur_rx; | 2648 | int rx_work_limit = vp->dirty_rx + RX_RING_SIZE - vp->cur_rx; |
2617 | 2649 | ||
2618 | if (vortex_debug > 5) | 2650 | if (vortex_debug > 5) |
2619 | printk(KERN_DEBUG "boomerang_rx(): status %4.4x\n", inw(ioaddr+EL3_STATUS)); | 2651 | printk(KERN_DEBUG "boomerang_rx(): status %4.4x\n", ioread16(ioaddr+EL3_STATUS)); |
2620 | 2652 | ||
2621 | while ((rx_status = le32_to_cpu(vp->rx_ring[entry].status)) & RxDComplete){ | 2653 | while ((rx_status = le32_to_cpu(vp->rx_ring[entry].status)) & RxDComplete){ |
2622 | if (--rx_work_limit < 0) | 2654 | if (--rx_work_limit < 0) |
@@ -2699,7 +2731,7 @@ boomerang_rx(struct net_device *dev) | |||
2699 | vp->rx_skbuff[entry] = skb; | 2731 | vp->rx_skbuff[entry] = skb; |
2700 | } | 2732 | } |
2701 | vp->rx_ring[entry].status = 0; /* Clear complete bit. */ | 2733 | vp->rx_ring[entry].status = 0; /* Clear complete bit. */ |
2702 | outw(UpUnstall, ioaddr + EL3_CMD); | 2734 | iowrite16(UpUnstall, ioaddr + EL3_CMD); |
2703 | } | 2735 | } |
2704 | return 0; | 2736 | return 0; |
2705 | } | 2737 | } |
@@ -2728,7 +2760,7 @@ static void | |||
2728 | vortex_down(struct net_device *dev, int final_down) | 2760 | vortex_down(struct net_device *dev, int final_down) |
2729 | { | 2761 | { |
2730 | struct vortex_private *vp = netdev_priv(dev); | 2762 | struct vortex_private *vp = netdev_priv(dev); |
2731 | long ioaddr = dev->base_addr; | 2763 | void __iomem *ioaddr = vp->ioaddr; |
2732 | 2764 | ||
2733 | netif_stop_queue (dev); | 2765 | netif_stop_queue (dev); |
2734 | 2766 | ||
@@ -2736,26 +2768,26 @@ vortex_down(struct net_device *dev, int final_down) | |||
2736 | del_timer_sync(&vp->timer); | 2768 | del_timer_sync(&vp->timer); |
2737 | 2769 | ||
2738 | /* Turn off statistics ASAP. We update vp->stats below. */ | 2770 | /* Turn off statistics ASAP. We update vp->stats below. */ |
2739 | outw(StatsDisable, ioaddr + EL3_CMD); | 2771 | iowrite16(StatsDisable, ioaddr + EL3_CMD); |
2740 | 2772 | ||
2741 | /* Disable the receiver and transmitter. */ | 2773 | /* Disable the receiver and transmitter. */ |
2742 | outw(RxDisable, ioaddr + EL3_CMD); | 2774 | iowrite16(RxDisable, ioaddr + EL3_CMD); |
2743 | outw(TxDisable, ioaddr + EL3_CMD); | 2775 | iowrite16(TxDisable, ioaddr + EL3_CMD); |
2744 | 2776 | ||
2745 | /* Disable receiving 802.1q tagged frames */ | 2777 | /* Disable receiving 802.1q tagged frames */ |
2746 | set_8021q_mode(dev, 0); | 2778 | set_8021q_mode(dev, 0); |
2747 | 2779 | ||
2748 | if (dev->if_port == XCVR_10base2) | 2780 | if (dev->if_port == XCVR_10base2) |
2749 | /* Turn off thinnet power. Green! */ | 2781 | /* Turn off thinnet power. Green! */ |
2750 | outw(StopCoax, ioaddr + EL3_CMD); | 2782 | iowrite16(StopCoax, ioaddr + EL3_CMD); |
2751 | 2783 | ||
2752 | outw(SetIntrEnb | 0x0000, ioaddr + EL3_CMD); | 2784 | iowrite16(SetIntrEnb | 0x0000, ioaddr + EL3_CMD); |
2753 | 2785 | ||
2754 | update_stats(ioaddr, dev); | 2786 | update_stats(ioaddr, dev); |
2755 | if (vp->full_bus_master_rx) | 2787 | if (vp->full_bus_master_rx) |
2756 | outl(0, ioaddr + UpListPtr); | 2788 | iowrite32(0, ioaddr + UpListPtr); |
2757 | if (vp->full_bus_master_tx) | 2789 | if (vp->full_bus_master_tx) |
2758 | outl(0, ioaddr + DownListPtr); | 2790 | iowrite32(0, ioaddr + DownListPtr); |
2759 | 2791 | ||
2760 | if (final_down && VORTEX_PCI(vp)) { | 2792 | if (final_down && VORTEX_PCI(vp)) { |
2761 | vp->pm_state_valid = 1; | 2793 | vp->pm_state_valid = 1; |
@@ -2768,7 +2800,7 @@ static int | |||
2768 | vortex_close(struct net_device *dev) | 2800 | vortex_close(struct net_device *dev) |
2769 | { | 2801 | { |
2770 | struct vortex_private *vp = netdev_priv(dev); | 2802 | struct vortex_private *vp = netdev_priv(dev); |
2771 | long ioaddr = dev->base_addr; | 2803 | void __iomem *ioaddr = vp->ioaddr; |
2772 | int i; | 2804 | int i; |
2773 | 2805 | ||
2774 | if (netif_device_present(dev)) | 2806 | if (netif_device_present(dev)) |
@@ -2776,17 +2808,18 @@ vortex_close(struct net_device *dev) | |||
2776 | 2808 | ||
2777 | if (vortex_debug > 1) { | 2809 | if (vortex_debug > 1) { |
2778 | printk(KERN_DEBUG"%s: vortex_close() status %4.4x, Tx status %2.2x.\n", | 2810 | printk(KERN_DEBUG"%s: vortex_close() status %4.4x, Tx status %2.2x.\n", |
2779 | dev->name, inw(ioaddr + EL3_STATUS), inb(ioaddr + TxStatus)); | 2811 | dev->name, ioread16(ioaddr + EL3_STATUS), ioread8(ioaddr + TxStatus)); |
2780 | printk(KERN_DEBUG "%s: vortex close stats: rx_nocopy %d rx_copy %d" | 2812 | printk(KERN_DEBUG "%s: vortex close stats: rx_nocopy %d rx_copy %d" |
2781 | " tx_queued %d Rx pre-checksummed %d.\n", | 2813 | " tx_queued %d Rx pre-checksummed %d.\n", |
2782 | dev->name, vp->rx_nocopy, vp->rx_copy, vp->queued_packet, vp->rx_csumhits); | 2814 | dev->name, vp->rx_nocopy, vp->rx_copy, vp->queued_packet, vp->rx_csumhits); |
2783 | } | 2815 | } |
2784 | 2816 | ||
2785 | #if DO_ZEROCOPY | 2817 | #if DO_ZEROCOPY |
2786 | if ( vp->rx_csumhits && | 2818 | if (vp->rx_csumhits && |
2787 | ((vp->drv_flags & HAS_HWCKSM) == 0) && | 2819 | (vp->drv_flags & HAS_HWCKSM) == 0 && |
2788 | (hw_checksums[vp->card_idx] == -1)) { | 2820 | (vp->card_idx >= MAX_UNITS || hw_checksums[vp->card_idx] == -1)) { |
2789 | printk(KERN_WARNING "%s supports hardware checksums, and we're not using them!\n", dev->name); | 2821 | printk(KERN_WARNING "%s supports hardware checksums, and we're " |
2822 | "not using them!\n", dev->name); | ||
2790 | } | 2823 | } |
2791 | #endif | 2824 | #endif |
2792 | 2825 | ||
@@ -2830,18 +2863,18 @@ dump_tx_ring(struct net_device *dev) | |||
2830 | { | 2863 | { |
2831 | if (vortex_debug > 0) { | 2864 | if (vortex_debug > 0) { |
2832 | struct vortex_private *vp = netdev_priv(dev); | 2865 | struct vortex_private *vp = netdev_priv(dev); |
2833 | long ioaddr = dev->base_addr; | 2866 | void __iomem *ioaddr = vp->ioaddr; |
2834 | 2867 | ||
2835 | if (vp->full_bus_master_tx) { | 2868 | if (vp->full_bus_master_tx) { |
2836 | int i; | 2869 | int i; |
2837 | int stalled = inl(ioaddr + PktStatus) & 0x04; /* Possible racy. But it's only debug stuff */ | 2870 | int stalled = ioread32(ioaddr + PktStatus) & 0x04; /* Possible racy. But it's only debug stuff */ |
2838 | 2871 | ||
2839 | printk(KERN_ERR " Flags; bus-master %d, dirty %d(%d) current %d(%d)\n", | 2872 | printk(KERN_ERR " Flags; bus-master %d, dirty %d(%d) current %d(%d)\n", |
2840 | vp->full_bus_master_tx, | 2873 | vp->full_bus_master_tx, |
2841 | vp->dirty_tx, vp->dirty_tx % TX_RING_SIZE, | 2874 | vp->dirty_tx, vp->dirty_tx % TX_RING_SIZE, |
2842 | vp->cur_tx, vp->cur_tx % TX_RING_SIZE); | 2875 | vp->cur_tx, vp->cur_tx % TX_RING_SIZE); |
2843 | printk(KERN_ERR " Transmit list %8.8x vs. %p.\n", | 2876 | printk(KERN_ERR " Transmit list %8.8x vs. %p.\n", |
2844 | inl(ioaddr + DownListPtr), | 2877 | ioread32(ioaddr + DownListPtr), |
2845 | &vp->tx_ring[vp->dirty_tx % TX_RING_SIZE]); | 2878 | &vp->tx_ring[vp->dirty_tx % TX_RING_SIZE]); |
2846 | issue_and_wait(dev, DownStall); | 2879 | issue_and_wait(dev, DownStall); |
2847 | for (i = 0; i < TX_RING_SIZE; i++) { | 2880 | for (i = 0; i < TX_RING_SIZE; i++) { |
@@ -2855,7 +2888,7 @@ dump_tx_ring(struct net_device *dev) | |||
2855 | le32_to_cpu(vp->tx_ring[i].status)); | 2888 | le32_to_cpu(vp->tx_ring[i].status)); |
2856 | } | 2889 | } |
2857 | if (!stalled) | 2890 | if (!stalled) |
2858 | outw(DownUnstall, ioaddr + EL3_CMD); | 2891 | iowrite16(DownUnstall, ioaddr + EL3_CMD); |
2859 | } | 2892 | } |
2860 | } | 2893 | } |
2861 | } | 2894 | } |
@@ -2863,11 +2896,12 @@ dump_tx_ring(struct net_device *dev) | |||
2863 | static struct net_device_stats *vortex_get_stats(struct net_device *dev) | 2896 | static struct net_device_stats *vortex_get_stats(struct net_device *dev) |
2864 | { | 2897 | { |
2865 | struct vortex_private *vp = netdev_priv(dev); | 2898 | struct vortex_private *vp = netdev_priv(dev); |
2899 | void __iomem *ioaddr = vp->ioaddr; | ||
2866 | unsigned long flags; | 2900 | unsigned long flags; |
2867 | 2901 | ||
2868 | if (netif_device_present(dev)) { /* AKPM: Used to be netif_running */ | 2902 | if (netif_device_present(dev)) { /* AKPM: Used to be netif_running */ |
2869 | spin_lock_irqsave (&vp->lock, flags); | 2903 | spin_lock_irqsave (&vp->lock, flags); |
2870 | update_stats(dev->base_addr, dev); | 2904 | update_stats(ioaddr, dev); |
2871 | spin_unlock_irqrestore (&vp->lock, flags); | 2905 | spin_unlock_irqrestore (&vp->lock, flags); |
2872 | } | 2906 | } |
2873 | return &vp->stats; | 2907 | return &vp->stats; |
@@ -2880,37 +2914,37 @@ static struct net_device_stats *vortex_get_stats(struct net_device *dev) | |||
2880 | table. This is done by checking that the ASM (!) code generated uses | 2914 | table. This is done by checking that the ASM (!) code generated uses |
2881 | atomic updates with '+='. | 2915 | atomic updates with '+='. |
2882 | */ | 2916 | */ |
2883 | static void update_stats(long ioaddr, struct net_device *dev) | 2917 | static void update_stats(void __iomem *ioaddr, struct net_device *dev) |
2884 | { | 2918 | { |
2885 | struct vortex_private *vp = netdev_priv(dev); | 2919 | struct vortex_private *vp = netdev_priv(dev); |
2886 | int old_window = inw(ioaddr + EL3_CMD); | 2920 | int old_window = ioread16(ioaddr + EL3_CMD); |
2887 | 2921 | ||
2888 | if (old_window == 0xffff) /* Chip suspended or ejected. */ | 2922 | if (old_window == 0xffff) /* Chip suspended or ejected. */ |
2889 | return; | 2923 | return; |
2890 | /* Unlike the 3c5x9 we need not turn off stats updates while reading. */ | 2924 | /* Unlike the 3c5x9 we need not turn off stats updates while reading. */ |
2891 | /* Switch to the stats window, and read everything. */ | 2925 | /* Switch to the stats window, and read everything. */ |
2892 | EL3WINDOW(6); | 2926 | EL3WINDOW(6); |
2893 | vp->stats.tx_carrier_errors += inb(ioaddr + 0); | 2927 | vp->stats.tx_carrier_errors += ioread8(ioaddr + 0); |
2894 | vp->stats.tx_heartbeat_errors += inb(ioaddr + 1); | 2928 | vp->stats.tx_heartbeat_errors += ioread8(ioaddr + 1); |
2895 | vp->stats.collisions += inb(ioaddr + 3); | 2929 | vp->stats.collisions += ioread8(ioaddr + 3); |
2896 | vp->stats.tx_window_errors += inb(ioaddr + 4); | 2930 | vp->stats.tx_window_errors += ioread8(ioaddr + 4); |
2897 | vp->stats.rx_fifo_errors += inb(ioaddr + 5); | 2931 | vp->stats.rx_fifo_errors += ioread8(ioaddr + 5); |
2898 | vp->stats.tx_packets += inb(ioaddr + 6); | 2932 | vp->stats.tx_packets += ioread8(ioaddr + 6); |
2899 | vp->stats.tx_packets += (inb(ioaddr + 9)&0x30) << 4; | 2933 | vp->stats.tx_packets += (ioread8(ioaddr + 9)&0x30) << 4; |
2900 | /* Rx packets */ inb(ioaddr + 7); /* Must read to clear */ | 2934 | /* Rx packets */ ioread8(ioaddr + 7); /* Must read to clear */ |
2901 | /* Don't bother with register 9, an extension of registers 6&7. | 2935 | /* Don't bother with register 9, an extension of registers 6&7. |
2902 | If we do use the 6&7 values the atomic update assumption above | 2936 | If we do use the 6&7 values the atomic update assumption above |
2903 | is invalid. */ | 2937 | is invalid. */ |
2904 | vp->stats.rx_bytes += inw(ioaddr + 10); | 2938 | vp->stats.rx_bytes += ioread16(ioaddr + 10); |
2905 | vp->stats.tx_bytes += inw(ioaddr + 12); | 2939 | vp->stats.tx_bytes += ioread16(ioaddr + 12); |
2906 | /* Extra stats for get_ethtool_stats() */ | 2940 | /* Extra stats for get_ethtool_stats() */ |
2907 | vp->xstats.tx_multiple_collisions += inb(ioaddr + 2); | 2941 | vp->xstats.tx_multiple_collisions += ioread8(ioaddr + 2); |
2908 | vp->xstats.tx_deferred += inb(ioaddr + 8); | 2942 | vp->xstats.tx_deferred += ioread8(ioaddr + 8); |
2909 | EL3WINDOW(4); | 2943 | EL3WINDOW(4); |
2910 | vp->xstats.rx_bad_ssd += inb(ioaddr + 12); | 2944 | vp->xstats.rx_bad_ssd += ioread8(ioaddr + 12); |
2911 | 2945 | ||
2912 | { | 2946 | { |
2913 | u8 up = inb(ioaddr + 13); | 2947 | u8 up = ioread8(ioaddr + 13); |
2914 | vp->stats.rx_bytes += (up & 0x0f) << 16; | 2948 | vp->stats.rx_bytes += (up & 0x0f) << 16; |
2915 | vp->stats.tx_bytes += (up & 0xf0) << 12; | 2949 | vp->stats.tx_bytes += (up & 0xf0) << 12; |
2916 | } | 2950 | } |
@@ -2922,7 +2956,7 @@ static void update_stats(long ioaddr, struct net_device *dev) | |||
2922 | static int vortex_nway_reset(struct net_device *dev) | 2956 | static int vortex_nway_reset(struct net_device *dev) |
2923 | { | 2957 | { |
2924 | struct vortex_private *vp = netdev_priv(dev); | 2958 | struct vortex_private *vp = netdev_priv(dev); |
2925 | long ioaddr = dev->base_addr; | 2959 | void __iomem *ioaddr = vp->ioaddr; |
2926 | unsigned long flags; | 2960 | unsigned long flags; |
2927 | int rc; | 2961 | int rc; |
2928 | 2962 | ||
@@ -2936,7 +2970,7 @@ static int vortex_nway_reset(struct net_device *dev) | |||
2936 | static u32 vortex_get_link(struct net_device *dev) | 2970 | static u32 vortex_get_link(struct net_device *dev) |
2937 | { | 2971 | { |
2938 | struct vortex_private *vp = netdev_priv(dev); | 2972 | struct vortex_private *vp = netdev_priv(dev); |
2939 | long ioaddr = dev->base_addr; | 2973 | void __iomem *ioaddr = vp->ioaddr; |
2940 | unsigned long flags; | 2974 | unsigned long flags; |
2941 | int rc; | 2975 | int rc; |
2942 | 2976 | ||
@@ -2950,7 +2984,7 @@ static u32 vortex_get_link(struct net_device *dev) | |||
2950 | static int vortex_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) | 2984 | static int vortex_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) |
2951 | { | 2985 | { |
2952 | struct vortex_private *vp = netdev_priv(dev); | 2986 | struct vortex_private *vp = netdev_priv(dev); |
2953 | long ioaddr = dev->base_addr; | 2987 | void __iomem *ioaddr = vp->ioaddr; |
2954 | unsigned long flags; | 2988 | unsigned long flags; |
2955 | int rc; | 2989 | int rc; |
2956 | 2990 | ||
@@ -2964,7 +2998,7 @@ static int vortex_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
2964 | static int vortex_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | 2998 | static int vortex_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) |
2965 | { | 2999 | { |
2966 | struct vortex_private *vp = netdev_priv(dev); | 3000 | struct vortex_private *vp = netdev_priv(dev); |
2967 | long ioaddr = dev->base_addr; | 3001 | void __iomem *ioaddr = vp->ioaddr; |
2968 | unsigned long flags; | 3002 | unsigned long flags; |
2969 | int rc; | 3003 | int rc; |
2970 | 3004 | ||
@@ -2994,10 +3028,11 @@ static void vortex_get_ethtool_stats(struct net_device *dev, | |||
2994 | struct ethtool_stats *stats, u64 *data) | 3028 | struct ethtool_stats *stats, u64 *data) |
2995 | { | 3029 | { |
2996 | struct vortex_private *vp = netdev_priv(dev); | 3030 | struct vortex_private *vp = netdev_priv(dev); |
3031 | void __iomem *ioaddr = vp->ioaddr; | ||
2997 | unsigned long flags; | 3032 | unsigned long flags; |
2998 | 3033 | ||
2999 | spin_lock_irqsave(&vp->lock, flags); | 3034 | spin_lock_irqsave(&vp->lock, flags); |
3000 | update_stats(dev->base_addr, dev); | 3035 | update_stats(ioaddr, dev); |
3001 | spin_unlock_irqrestore(&vp->lock, flags); | 3036 | spin_unlock_irqrestore(&vp->lock, flags); |
3002 | 3037 | ||
3003 | data[0] = vp->xstats.tx_deferred; | 3038 | data[0] = vp->xstats.tx_deferred; |
@@ -3047,6 +3082,7 @@ static struct ethtool_ops vortex_ethtool_ops = { | |||
3047 | .set_settings = vortex_set_settings, | 3082 | .set_settings = vortex_set_settings, |
3048 | .get_link = vortex_get_link, | 3083 | .get_link = vortex_get_link, |
3049 | .nway_reset = vortex_nway_reset, | 3084 | .nway_reset = vortex_nway_reset, |
3085 | .get_perm_addr = ethtool_op_get_perm_addr, | ||
3050 | }; | 3086 | }; |
3051 | 3087 | ||
3052 | #ifdef CONFIG_PCI | 3088 | #ifdef CONFIG_PCI |
@@ -3057,7 +3093,7 @@ static int vortex_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) | |||
3057 | { | 3093 | { |
3058 | int err; | 3094 | int err; |
3059 | struct vortex_private *vp = netdev_priv(dev); | 3095 | struct vortex_private *vp = netdev_priv(dev); |
3060 | long ioaddr = dev->base_addr; | 3096 | void __iomem *ioaddr = vp->ioaddr; |
3061 | unsigned long flags; | 3097 | unsigned long flags; |
3062 | int state = 0; | 3098 | int state = 0; |
3063 | 3099 | ||
@@ -3085,7 +3121,8 @@ static int vortex_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) | |||
3085 | the chip has a very clean way to set the mode, unlike many others. */ | 3121 | the chip has a very clean way to set the mode, unlike many others. */ |
3086 | static void set_rx_mode(struct net_device *dev) | 3122 | static void set_rx_mode(struct net_device *dev) |
3087 | { | 3123 | { |
3088 | long ioaddr = dev->base_addr; | 3124 | struct vortex_private *vp = netdev_priv(dev); |
3125 | void __iomem *ioaddr = vp->ioaddr; | ||
3089 | int new_mode; | 3126 | int new_mode; |
3090 | 3127 | ||
3091 | if (dev->flags & IFF_PROMISC) { | 3128 | if (dev->flags & IFF_PROMISC) { |
@@ -3097,7 +3134,7 @@ static void set_rx_mode(struct net_device *dev) | |||
3097 | } else | 3134 | } else |
3098 | new_mode = SetRxFilter | RxStation | RxBroadcast; | 3135 | new_mode = SetRxFilter | RxStation | RxBroadcast; |
3099 | 3136 | ||
3100 | outw(new_mode, ioaddr + EL3_CMD); | 3137 | iowrite16(new_mode, ioaddr + EL3_CMD); |
3101 | } | 3138 | } |
3102 | 3139 | ||
3103 | #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) | 3140 | #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) |
@@ -3111,8 +3148,8 @@ static void set_rx_mode(struct net_device *dev) | |||
3111 | static void set_8021q_mode(struct net_device *dev, int enable) | 3148 | static void set_8021q_mode(struct net_device *dev, int enable) |
3112 | { | 3149 | { |
3113 | struct vortex_private *vp = netdev_priv(dev); | 3150 | struct vortex_private *vp = netdev_priv(dev); |
3114 | long ioaddr = dev->base_addr; | 3151 | void __iomem *ioaddr = vp->ioaddr; |
3115 | int old_window = inw(ioaddr + EL3_CMD); | 3152 | int old_window = ioread16(ioaddr + EL3_CMD); |
3116 | int mac_ctrl; | 3153 | int mac_ctrl; |
3117 | 3154 | ||
3118 | if ((vp->drv_flags&IS_CYCLONE) || (vp->drv_flags&IS_TORNADO)) { | 3155 | if ((vp->drv_flags&IS_CYCLONE) || (vp->drv_flags&IS_TORNADO)) { |
@@ -3124,24 +3161,24 @@ static void set_8021q_mode(struct net_device *dev, int enable) | |||
3124 | max_pkt_size += 4; /* 802.1Q VLAN tag */ | 3161 | max_pkt_size += 4; /* 802.1Q VLAN tag */ |
3125 | 3162 | ||
3126 | EL3WINDOW(3); | 3163 | EL3WINDOW(3); |
3127 | outw(max_pkt_size, ioaddr+Wn3_MaxPktSize); | 3164 | iowrite16(max_pkt_size, ioaddr+Wn3_MaxPktSize); |
3128 | 3165 | ||
3129 | /* set VlanEtherType to let the hardware checksumming | 3166 | /* set VlanEtherType to let the hardware checksumming |
3130 | treat tagged frames correctly */ | 3167 | treat tagged frames correctly */ |
3131 | EL3WINDOW(7); | 3168 | EL3WINDOW(7); |
3132 | outw(VLAN_ETHER_TYPE, ioaddr+Wn7_VlanEtherType); | 3169 | iowrite16(VLAN_ETHER_TYPE, ioaddr+Wn7_VlanEtherType); |
3133 | } else { | 3170 | } else { |
3134 | /* on older cards we have to enable large frames */ | 3171 | /* on older cards we have to enable large frames */ |
3135 | 3172 | ||
3136 | vp->large_frames = dev->mtu > 1500 || enable; | 3173 | vp->large_frames = dev->mtu > 1500 || enable; |
3137 | 3174 | ||
3138 | EL3WINDOW(3); | 3175 | EL3WINDOW(3); |
3139 | mac_ctrl = inw(ioaddr+Wn3_MAC_Ctrl); | 3176 | mac_ctrl = ioread16(ioaddr+Wn3_MAC_Ctrl); |
3140 | if (vp->large_frames) | 3177 | if (vp->large_frames) |
3141 | mac_ctrl |= 0x40; | 3178 | mac_ctrl |= 0x40; |
3142 | else | 3179 | else |
3143 | mac_ctrl &= ~0x40; | 3180 | mac_ctrl &= ~0x40; |
3144 | outw(mac_ctrl, ioaddr+Wn3_MAC_Ctrl); | 3181 | iowrite16(mac_ctrl, ioaddr+Wn3_MAC_Ctrl); |
3145 | } | 3182 | } |
3146 | 3183 | ||
3147 | EL3WINDOW(old_window); | 3184 | EL3WINDOW(old_window); |
@@ -3163,7 +3200,7 @@ static void set_8021q_mode(struct net_device *dev, int enable) | |||
3163 | /* The maximum data clock rate is 2.5 Mhz. The minimum timing is usually | 3200 | /* The maximum data clock rate is 2.5 Mhz. The minimum timing is usually |
3164 | met by back-to-back PCI I/O cycles, but we insert a delay to avoid | 3201 | met by back-to-back PCI I/O cycles, but we insert a delay to avoid |
3165 | "overclocking" issues. */ | 3202 | "overclocking" issues. */ |
3166 | #define mdio_delay() inl(mdio_addr) | 3203 | #define mdio_delay() ioread32(mdio_addr) |
3167 | 3204 | ||
3168 | #define MDIO_SHIFT_CLK 0x01 | 3205 | #define MDIO_SHIFT_CLK 0x01 |
3169 | #define MDIO_DIR_WRITE 0x04 | 3206 | #define MDIO_DIR_WRITE 0x04 |
@@ -3174,15 +3211,15 @@ static void set_8021q_mode(struct net_device *dev, int enable) | |||
3174 | 3211 | ||
3175 | /* Generate the preamble required for initial synchronization and | 3212 | /* Generate the preamble required for initial synchronization and |
3176 | a few older transceivers. */ | 3213 | a few older transceivers. */ |
3177 | static void mdio_sync(long ioaddr, int bits) | 3214 | static void mdio_sync(void __iomem *ioaddr, int bits) |
3178 | { | 3215 | { |
3179 | long mdio_addr = ioaddr + Wn4_PhysicalMgmt; | 3216 | void __iomem *mdio_addr = ioaddr + Wn4_PhysicalMgmt; |
3180 | 3217 | ||
3181 | /* Establish sync by sending at least 32 logic ones. */ | 3218 | /* Establish sync by sending at least 32 logic ones. */ |
3182 | while (-- bits >= 0) { | 3219 | while (-- bits >= 0) { |
3183 | outw(MDIO_DATA_WRITE1, mdio_addr); | 3220 | iowrite16(MDIO_DATA_WRITE1, mdio_addr); |
3184 | mdio_delay(); | 3221 | mdio_delay(); |
3185 | outw(MDIO_DATA_WRITE1 | MDIO_SHIFT_CLK, mdio_addr); | 3222 | iowrite16(MDIO_DATA_WRITE1 | MDIO_SHIFT_CLK, mdio_addr); |
3186 | mdio_delay(); | 3223 | mdio_delay(); |
3187 | } | 3224 | } |
3188 | } | 3225 | } |
@@ -3190,10 +3227,11 @@ static void mdio_sync(long ioaddr, int bits) | |||
3190 | static int mdio_read(struct net_device *dev, int phy_id, int location) | 3227 | static int mdio_read(struct net_device *dev, int phy_id, int location) |
3191 | { | 3228 | { |
3192 | int i; | 3229 | int i; |
3193 | long ioaddr = dev->base_addr; | 3230 | struct vortex_private *vp = netdev_priv(dev); |
3231 | void __iomem *ioaddr = vp->ioaddr; | ||
3194 | int read_cmd = (0xf6 << 10) | (phy_id << 5) | location; | 3232 | int read_cmd = (0xf6 << 10) | (phy_id << 5) | location; |
3195 | unsigned int retval = 0; | 3233 | unsigned int retval = 0; |
3196 | long mdio_addr = ioaddr + Wn4_PhysicalMgmt; | 3234 | void __iomem *mdio_addr = ioaddr + Wn4_PhysicalMgmt; |
3197 | 3235 | ||
3198 | if (mii_preamble_required) | 3236 | if (mii_preamble_required) |
3199 | mdio_sync(ioaddr, 32); | 3237 | mdio_sync(ioaddr, 32); |
@@ -3201,17 +3239,17 @@ static int mdio_read(struct net_device *dev, int phy_id, int location) | |||
3201 | /* Shift the read command bits out. */ | 3239 | /* Shift the read command bits out. */ |
3202 | for (i = 14; i >= 0; i--) { | 3240 | for (i = 14; i >= 0; i--) { |
3203 | int dataval = (read_cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0; | 3241 | int dataval = (read_cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0; |
3204 | outw(dataval, mdio_addr); | 3242 | iowrite16(dataval, mdio_addr); |
3205 | mdio_delay(); | 3243 | mdio_delay(); |
3206 | outw(dataval | MDIO_SHIFT_CLK, mdio_addr); | 3244 | iowrite16(dataval | MDIO_SHIFT_CLK, mdio_addr); |
3207 | mdio_delay(); | 3245 | mdio_delay(); |
3208 | } | 3246 | } |
3209 | /* Read the two transition, 16 data, and wire-idle bits. */ | 3247 | /* Read the two transition, 16 data, and wire-idle bits. */ |
3210 | for (i = 19; i > 0; i--) { | 3248 | for (i = 19; i > 0; i--) { |
3211 | outw(MDIO_ENB_IN, mdio_addr); | 3249 | iowrite16(MDIO_ENB_IN, mdio_addr); |
3212 | mdio_delay(); | 3250 | mdio_delay(); |
3213 | retval = (retval << 1) | ((inw(mdio_addr) & MDIO_DATA_READ) ? 1 : 0); | 3251 | retval = (retval << 1) | ((ioread16(mdio_addr) & MDIO_DATA_READ) ? 1 : 0); |
3214 | outw(MDIO_ENB_IN | MDIO_SHIFT_CLK, mdio_addr); | 3252 | iowrite16(MDIO_ENB_IN | MDIO_SHIFT_CLK, mdio_addr); |
3215 | mdio_delay(); | 3253 | mdio_delay(); |
3216 | } | 3254 | } |
3217 | return retval & 0x20000 ? 0xffff : retval>>1 & 0xffff; | 3255 | return retval & 0x20000 ? 0xffff : retval>>1 & 0xffff; |
@@ -3219,9 +3257,10 @@ static int mdio_read(struct net_device *dev, int phy_id, int location) | |||
3219 | 3257 | ||
3220 | static void mdio_write(struct net_device *dev, int phy_id, int location, int value) | 3258 | static void mdio_write(struct net_device *dev, int phy_id, int location, int value) |
3221 | { | 3259 | { |
3222 | long ioaddr = dev->base_addr; | 3260 | struct vortex_private *vp = netdev_priv(dev); |
3261 | void __iomem *ioaddr = vp->ioaddr; | ||
3223 | int write_cmd = 0x50020000 | (phy_id << 23) | (location << 18) | value; | 3262 | int write_cmd = 0x50020000 | (phy_id << 23) | (location << 18) | value; |
3224 | long mdio_addr = ioaddr + Wn4_PhysicalMgmt; | 3263 | void __iomem *mdio_addr = ioaddr + Wn4_PhysicalMgmt; |
3225 | int i; | 3264 | int i; |
3226 | 3265 | ||
3227 | if (mii_preamble_required) | 3266 | if (mii_preamble_required) |
@@ -3230,16 +3269,16 @@ static void mdio_write(struct net_device *dev, int phy_id, int location, int val | |||
3230 | /* Shift the command bits out. */ | 3269 | /* Shift the command bits out. */ |
3231 | for (i = 31; i >= 0; i--) { | 3270 | for (i = 31; i >= 0; i--) { |
3232 | int dataval = (write_cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0; | 3271 | int dataval = (write_cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0; |
3233 | outw(dataval, mdio_addr); | 3272 | iowrite16(dataval, mdio_addr); |
3234 | mdio_delay(); | 3273 | mdio_delay(); |
3235 | outw(dataval | MDIO_SHIFT_CLK, mdio_addr); | 3274 | iowrite16(dataval | MDIO_SHIFT_CLK, mdio_addr); |
3236 | mdio_delay(); | 3275 | mdio_delay(); |
3237 | } | 3276 | } |
3238 | /* Leave the interface idle. */ | 3277 | /* Leave the interface idle. */ |
3239 | for (i = 1; i >= 0; i--) { | 3278 | for (i = 1; i >= 0; i--) { |
3240 | outw(MDIO_ENB_IN, mdio_addr); | 3279 | iowrite16(MDIO_ENB_IN, mdio_addr); |
3241 | mdio_delay(); | 3280 | mdio_delay(); |
3242 | outw(MDIO_ENB_IN | MDIO_SHIFT_CLK, mdio_addr); | 3281 | iowrite16(MDIO_ENB_IN | MDIO_SHIFT_CLK, mdio_addr); |
3243 | mdio_delay(); | 3282 | mdio_delay(); |
3244 | } | 3283 | } |
3245 | return; | 3284 | return; |
@@ -3250,15 +3289,15 @@ static void mdio_write(struct net_device *dev, int phy_id, int location, int val | |||
3250 | static void acpi_set_WOL(struct net_device *dev) | 3289 | static void acpi_set_WOL(struct net_device *dev) |
3251 | { | 3290 | { |
3252 | struct vortex_private *vp = netdev_priv(dev); | 3291 | struct vortex_private *vp = netdev_priv(dev); |
3253 | long ioaddr = dev->base_addr; | 3292 | void __iomem *ioaddr = vp->ioaddr; |
3254 | 3293 | ||
3255 | if (vp->enable_wol) { | 3294 | if (vp->enable_wol) { |
3256 | /* Power up on: 1==Downloaded Filter, 2==Magic Packets, 4==Link Status. */ | 3295 | /* Power up on: 1==Downloaded Filter, 2==Magic Packets, 4==Link Status. */ |
3257 | EL3WINDOW(7); | 3296 | EL3WINDOW(7); |
3258 | outw(2, ioaddr + 0x0c); | 3297 | iowrite16(2, ioaddr + 0x0c); |
3259 | /* The RxFilter must accept the WOL frames. */ | 3298 | /* The RxFilter must accept the WOL frames. */ |
3260 | outw(SetRxFilter|RxStation|RxMulticast|RxBroadcast, ioaddr + EL3_CMD); | 3299 | iowrite16(SetRxFilter|RxStation|RxMulticast|RxBroadcast, ioaddr + EL3_CMD); |
3261 | outw(RxEnable, ioaddr + EL3_CMD); | 3300 | iowrite16(RxEnable, ioaddr + EL3_CMD); |
3262 | 3301 | ||
3263 | pci_enable_wake(VORTEX_PCI(vp), 0, 1); | 3302 | pci_enable_wake(VORTEX_PCI(vp), 0, 1); |
3264 | 3303 | ||
@@ -3280,10 +3319,9 @@ static void __devexit vortex_remove_one (struct pci_dev *pdev) | |||
3280 | 3319 | ||
3281 | vp = netdev_priv(dev); | 3320 | vp = netdev_priv(dev); |
3282 | 3321 | ||
3283 | /* AKPM: FIXME: we should have | 3322 | if (vp->cb_fn_base) |
3284 | * if (vp->cb_fn_base) iounmap(vp->cb_fn_base); | 3323 | pci_iounmap(VORTEX_PCI(vp), vp->cb_fn_base); |
3285 | * here | 3324 | |
3286 | */ | ||
3287 | unregister_netdev(dev); | 3325 | unregister_netdev(dev); |
3288 | 3326 | ||
3289 | if (VORTEX_PCI(vp)) { | 3327 | if (VORTEX_PCI(vp)) { |
@@ -3293,8 +3331,10 @@ static void __devexit vortex_remove_one (struct pci_dev *pdev) | |||
3293 | pci_disable_device(VORTEX_PCI(vp)); | 3331 | pci_disable_device(VORTEX_PCI(vp)); |
3294 | } | 3332 | } |
3295 | /* Should really use issue_and_wait() here */ | 3333 | /* Should really use issue_and_wait() here */ |
3296 | outw(TotalReset | ((vp->drv_flags & EEPROM_RESET) ? 0x04 : 0x14), | 3334 | iowrite16(TotalReset | ((vp->drv_flags & EEPROM_RESET) ? 0x04 : 0x14), |
3297 | dev->base_addr + EL3_CMD); | 3335 | vp->ioaddr + EL3_CMD); |
3336 | |||
3337 | pci_iounmap(VORTEX_PCI(vp), vp->ioaddr); | ||
3298 | 3338 | ||
3299 | pci_free_consistent(pdev, | 3339 | pci_free_consistent(pdev, |
3300 | sizeof(struct boom_rx_desc) * RX_RING_SIZE | 3340 | sizeof(struct boom_rx_desc) * RX_RING_SIZE |
@@ -3342,7 +3382,7 @@ static int __init vortex_init (void) | |||
3342 | static void __exit vortex_eisa_cleanup (void) | 3382 | static void __exit vortex_eisa_cleanup (void) |
3343 | { | 3383 | { |
3344 | struct vortex_private *vp; | 3384 | struct vortex_private *vp; |
3345 | long ioaddr; | 3385 | void __iomem *ioaddr; |
3346 | 3386 | ||
3347 | #ifdef CONFIG_EISA | 3387 | #ifdef CONFIG_EISA |
3348 | /* Take care of the EISA devices */ | 3388 | /* Take care of the EISA devices */ |
@@ -3351,11 +3391,13 @@ static void __exit vortex_eisa_cleanup (void) | |||
3351 | 3391 | ||
3352 | if (compaq_net_device) { | 3392 | if (compaq_net_device) { |
3353 | vp = compaq_net_device->priv; | 3393 | vp = compaq_net_device->priv; |
3354 | ioaddr = compaq_net_device->base_addr; | 3394 | ioaddr = ioport_map(compaq_net_device->base_addr, |
3395 | VORTEX_TOTAL_SIZE); | ||
3355 | 3396 | ||
3356 | unregister_netdev (compaq_net_device); | 3397 | unregister_netdev (compaq_net_device); |
3357 | outw (TotalReset, ioaddr + EL3_CMD); | 3398 | iowrite16 (TotalReset, ioaddr + EL3_CMD); |
3358 | release_region (ioaddr, VORTEX_TOTAL_SIZE); | 3399 | release_region(compaq_net_device->base_addr, |
3400 | VORTEX_TOTAL_SIZE); | ||
3359 | 3401 | ||
3360 | free_netdev (compaq_net_device); | 3402 | free_netdev (compaq_net_device); |
3361 | } | 3403 | } |