aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMarc Kleine-Budde <mkl@pengutronix.de>2011-02-19 16:08:33 -0500
committerMarc Kleine-Budde <mkl@pengutronix.de>2011-02-21 07:13:39 -0500
commitea5a43db0f7123c5cb459d8f77454534bc62de4f (patch)
tree42b58250e6266466d344ab592e1cfd361265e486 /drivers
parent9f072429592d70b0f88c4d66f83735cc693a9870 (diff)
ax88796: don't use magic ei_status to acces private data
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/ax88796.c81
1 files changed, 42 insertions, 39 deletions
diff --git a/drivers/net/ax88796.c b/drivers/net/ax88796.c
index 6d1d5ca112eb..c49c3b108133 100644
--- a/drivers/net/ax88796.c
+++ b/drivers/net/ax88796.c
@@ -152,8 +152,8 @@ static void ax_reset_8390(struct net_device *dev)
152 152
153 ei_outb(ei_inb(addr + NE_RESET), addr + NE_RESET); 153 ei_outb(ei_inb(addr + NE_RESET), addr + NE_RESET);
154 154
155 ei_status.txing = 0; 155 ei_local->txing = 0;
156 ei_status.dmaing = 0; 156 ei_local->dmaing = 0;
157 157
158 /* This check _should_not_ be necessary, omit eventually. */ 158 /* This check _should_not_ be necessary, omit eventually. */
159 while ((ei_inb(addr + EN0_ISR) & ENISR_RESET) == 0) { 159 while ((ei_inb(addr + EN0_ISR) & ENISR_RESET) == 0) {
@@ -176,15 +176,15 @@ static void ax_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr,
176 void __iomem *nic_base = ei_local->mem; 176 void __iomem *nic_base = ei_local->mem;
177 177
178 /* This *shouldn't* happen. If it does, it's the last thing you'll see */ 178 /* This *shouldn't* happen. If it does, it's the last thing you'll see */
179 if (ei_status.dmaing) { 179 if (ei_local->dmaing) {
180 dev_err(&ax->dev->dev, "%s: DMAing conflict in %s " 180 dev_err(&ax->dev->dev, "%s: DMAing conflict in %s "
181 "[DMAstat:%d][irqlock:%d].\n", 181 "[DMAstat:%d][irqlock:%d].\n",
182 dev->name, __func__, 182 dev->name, __func__,
183 ei_status.dmaing, ei_status.irqlock); 183 ei_local->dmaing, ei_local->irqlock);
184 return; 184 return;
185 } 185 }
186 186
187 ei_status.dmaing |= 0x01; 187 ei_local->dmaing |= 0x01;
188 ei_outb(E8390_NODMA + E8390_PAGE0 + E8390_START, nic_base + NE_CMD); 188 ei_outb(E8390_NODMA + E8390_PAGE0 + E8390_START, nic_base + NE_CMD);
189 ei_outb(sizeof(struct e8390_pkt_hdr), nic_base + EN0_RCNTLO); 189 ei_outb(sizeof(struct e8390_pkt_hdr), nic_base + EN0_RCNTLO);
190 ei_outb(0, nic_base + EN0_RCNTHI); 190 ei_outb(0, nic_base + EN0_RCNTHI);
@@ -192,7 +192,7 @@ static void ax_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr,
192 ei_outb(ring_page, nic_base + EN0_RSARHI); 192 ei_outb(ring_page, nic_base + EN0_RSARHI);
193 ei_outb(E8390_RREAD+E8390_START, nic_base + NE_CMD); 193 ei_outb(E8390_RREAD+E8390_START, nic_base + NE_CMD);
194 194
195 if (ei_status.word16) 195 if (ei_local->word16)
196 readsw(nic_base + NE_DATAPORT, hdr, 196 readsw(nic_base + NE_DATAPORT, hdr,
197 sizeof(struct e8390_pkt_hdr) >> 1); 197 sizeof(struct e8390_pkt_hdr) >> 1);
198 else 198 else
@@ -200,7 +200,7 @@ static void ax_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr,
200 sizeof(struct e8390_pkt_hdr)); 200 sizeof(struct e8390_pkt_hdr));
201 201
202 ei_outb(ENISR_RDC, nic_base + EN0_ISR); /* Ack intr. */ 202 ei_outb(ENISR_RDC, nic_base + EN0_ISR); /* Ack intr. */
203 ei_status.dmaing &= ~0x01; 203 ei_local->dmaing &= ~0x01;
204 204
205 le16_to_cpus(&hdr->count); 205 le16_to_cpus(&hdr->count);
206} 206}
@@ -221,16 +221,16 @@ static void ax_block_input(struct net_device *dev, int count,
221 void __iomem *nic_base = ei_local->mem; 221 void __iomem *nic_base = ei_local->mem;
222 char *buf = skb->data; 222 char *buf = skb->data;
223 223
224 if (ei_status.dmaing) { 224 if (ei_local->dmaing) {
225 dev_err(&ax->dev->dev, 225 dev_err(&ax->dev->dev,
226 "%s: DMAing conflict in %s " 226 "%s: DMAing conflict in %s "
227 "[DMAstat:%d][irqlock:%d].\n", 227 "[DMAstat:%d][irqlock:%d].\n",
228 dev->name, __func__, 228 dev->name, __func__,
229 ei_status.dmaing, ei_status.irqlock); 229 ei_local->dmaing, ei_local->irqlock);
230 return; 230 return;
231 } 231 }
232 232
233 ei_status.dmaing |= 0x01; 233 ei_local->dmaing |= 0x01;
234 234
235 ei_outb(E8390_NODMA+E8390_PAGE0+E8390_START, nic_base + NE_CMD); 235 ei_outb(E8390_NODMA+E8390_PAGE0+E8390_START, nic_base + NE_CMD);
236 ei_outb(count & 0xff, nic_base + EN0_RCNTLO); 236 ei_outb(count & 0xff, nic_base + EN0_RCNTLO);
@@ -239,7 +239,7 @@ static void ax_block_input(struct net_device *dev, int count,
239 ei_outb(ring_offset >> 8, nic_base + EN0_RSARHI); 239 ei_outb(ring_offset >> 8, nic_base + EN0_RSARHI);
240 ei_outb(E8390_RREAD+E8390_START, nic_base + NE_CMD); 240 ei_outb(E8390_RREAD+E8390_START, nic_base + NE_CMD);
241 241
242 if (ei_status.word16) { 242 if (ei_local->word16) {
243 readsw(nic_base + NE_DATAPORT, buf, count >> 1); 243 readsw(nic_base + NE_DATAPORT, buf, count >> 1);
244 if (count & 0x01) 244 if (count & 0x01)
245 buf[count-1] = ei_inb(nic_base + NE_DATAPORT); 245 buf[count-1] = ei_inb(nic_base + NE_DATAPORT);
@@ -248,7 +248,7 @@ static void ax_block_input(struct net_device *dev, int count,
248 readsb(nic_base + NE_DATAPORT, buf, count); 248 readsb(nic_base + NE_DATAPORT, buf, count);
249 } 249 }
250 250
251 ei_status.dmaing &= ~1; 251 ei_local->dmaing &= ~1;
252} 252}
253 253
254static void ax_block_output(struct net_device *dev, int count, 254static void ax_block_output(struct net_device *dev, int count,
@@ -264,19 +264,19 @@ static void ax_block_output(struct net_device *dev, int count,
264 * What effect will an odd byte count have on the 8390? I 264 * What effect will an odd byte count have on the 8390? I
265 * should check someday. 265 * should check someday.
266 */ 266 */
267 if (ei_status.word16 && (count & 0x01)) 267 if (ei_local->word16 && (count & 0x01))
268 count++; 268 count++;
269 269
270 /* This *shouldn't* happen. If it does, it's the last thing you'll see */ 270 /* This *shouldn't* happen. If it does, it's the last thing you'll see */
271 if (ei_status.dmaing) { 271 if (ei_local->dmaing) {
272 dev_err(&ax->dev->dev, "%s: DMAing conflict in %s." 272 dev_err(&ax->dev->dev, "%s: DMAing conflict in %s."
273 "[DMAstat:%d][irqlock:%d]\n", 273 "[DMAstat:%d][irqlock:%d]\n",
274 dev->name, __func__, 274 dev->name, __func__,
275 ei_status.dmaing, ei_status.irqlock); 275 ei_local->dmaing, ei_local->irqlock);
276 return; 276 return;
277 } 277 }
278 278
279 ei_status.dmaing |= 0x01; 279 ei_local->dmaing |= 0x01;
280 /* We should already be in page 0, but to be safe... */ 280 /* We should already be in page 0, but to be safe... */
281 ei_outb(E8390_PAGE0+E8390_START+E8390_NODMA, nic_base + NE_CMD); 281 ei_outb(E8390_PAGE0+E8390_START+E8390_NODMA, nic_base + NE_CMD);
282 282
@@ -289,7 +289,7 @@ static void ax_block_output(struct net_device *dev, int count,
289 ei_outb(start_page, nic_base + EN0_RSARHI); 289 ei_outb(start_page, nic_base + EN0_RSARHI);
290 290
291 ei_outb(E8390_RWRITE+E8390_START, nic_base + NE_CMD); 291 ei_outb(E8390_RWRITE+E8390_START, nic_base + NE_CMD);
292 if (ei_status.word16) 292 if (ei_local->word16)
293 writesw(nic_base + NE_DATAPORT, buf, count >> 1); 293 writesw(nic_base + NE_DATAPORT, buf, count >> 1);
294 else 294 else
295 writesb(nic_base + NE_DATAPORT, buf, count); 295 writesb(nic_base + NE_DATAPORT, buf, count);
@@ -307,7 +307,7 @@ static void ax_block_output(struct net_device *dev, int count,
307 } 307 }
308 308
309 ei_outb(ENISR_RDC, nic_base + EN0_ISR); /* Ack intr. */ 309 ei_outb(ENISR_RDC, nic_base + EN0_ISR); /* Ack intr. */
310 ei_status.dmaing &= ~0x01; 310 ei_local->dmaing &= ~0x01;
311} 311}
312 312
313/* definitions for accessing MII/EEPROM interface */ 313/* definitions for accessing MII/EEPROM interface */
@@ -758,22 +758,22 @@ static int ax_init_dev(struct net_device *dev, int first_init)
758 758
759 ax_reset_8390(dev); 759 ax_reset_8390(dev);
760 760
761 ei_status.name = "AX88796"; 761 ei_local->name = "AX88796";
762 ei_status.tx_start_page = start_page; 762 ei_local->tx_start_page = start_page;
763 ei_status.stop_page = stop_page; 763 ei_local->stop_page = stop_page;
764 ei_status.word16 = (ax->plat->wordlength == 2); 764 ei_local->word16 = (ax->plat->wordlength == 2);
765 ei_status.rx_start_page = start_page + TX_PAGES; 765 ei_local->rx_start_page = start_page + TX_PAGES;
766 766
767#ifdef PACKETBUF_MEMSIZE 767#ifdef PACKETBUF_MEMSIZE
768 /* Allow the packet buffer size to be overridden by know-it-alls. */ 768 /* Allow the packet buffer size to be overridden by know-it-alls. */
769 ei_status.stop_page = ei_status.tx_start_page + PACKETBUF_MEMSIZE; 769 ei_local->stop_page = ei_local->tx_start_page + PACKETBUF_MEMSIZE;
770#endif 770#endif
771 771
772 ei_status.reset_8390 = &ax_reset_8390; 772 ei_local->reset_8390 = &ax_reset_8390;
773 ei_status.block_input = &ax_block_input; 773 ei_local->block_input = &ax_block_input;
774 ei_status.block_output = &ax_block_output; 774 ei_local->block_output = &ax_block_output;
775 ei_status.get_8390_hdr = &ax_get_8390_hdr; 775 ei_local->get_8390_hdr = &ax_get_8390_hdr;
776 ei_status.priv = 0; 776 ei_local->priv = 0;
777 777
778 dev->netdev_ops = &ax_netdev_ops; 778 dev->netdev_ops = &ax_netdev_ops;
779 dev->ethtool_ops = &ax_ethtool_ops; 779 dev->ethtool_ops = &ax_ethtool_ops;
@@ -792,7 +792,7 @@ static int ax_init_dev(struct net_device *dev, int first_init)
792 792
793 if (first_init) 793 if (first_init)
794 dev_info(&ax->dev->dev, "%dbit, irq %d, %lx, MAC: %pM\n", 794 dev_info(&ax->dev->dev, "%dbit, irq %d, %lx, MAC: %pM\n",
795 ei_status.word16 ? 16 : 8, dev->irq, dev->base_addr, 795 ei_local->word16 ? 16 : 8, dev->irq, dev->base_addr,
796 dev->dev_addr); 796 dev->dev_addr);
797 797
798 ret = register_netdev(dev); 798 ret = register_netdev(dev);
@@ -811,6 +811,7 @@ static int ax_init_dev(struct net_device *dev, int first_init)
811static int ax_remove(struct platform_device *_dev) 811static int ax_remove(struct platform_device *_dev)
812{ 812{
813 struct net_device *dev = platform_get_drvdata(_dev); 813 struct net_device *dev = platform_get_drvdata(_dev);
814 struct ei_device *ei_local = netdev_priv(dev);
814 struct ax_device *ax; 815 struct ax_device *ax;
815 816
816 ax = to_ax_dev(dev); 817 ax = to_ax_dev(dev);
@@ -818,7 +819,7 @@ static int ax_remove(struct platform_device *_dev)
818 unregister_netdev(dev); 819 unregister_netdev(dev);
819 free_irq(dev->irq, dev); 820 free_irq(dev->irq, dev);
820 821
821 iounmap(ei_status.mem); 822 iounmap(ei_local->mem);
822 release_resource(ax->mem); 823 release_resource(ax->mem);
823 kfree(ax->mem); 824 kfree(ax->mem);
824 825
@@ -843,6 +844,7 @@ static int ax_remove(struct platform_device *_dev)
843static int ax_probe(struct platform_device *pdev) 844static int ax_probe(struct platform_device *pdev)
844{ 845{
845 struct net_device *dev; 846 struct net_device *dev;
847 struct ei_device *ei_local;
846 struct ax_device *ax; 848 struct ax_device *ax;
847 struct resource *res; 849 struct resource *res;
848 size_t size; 850 size_t size;
@@ -853,6 +855,7 @@ static int ax_probe(struct platform_device *pdev)
853 return -ENOMEM; 855 return -ENOMEM;
854 856
855 /* ok, let's setup our device */ 857 /* ok, let's setup our device */
858 ei_local = netdev_priv(dev);
856 ax = to_ax_dev(dev); 859 ax = to_ax_dev(dev);
857 860
858 memset(ax, 0, sizeof(struct ax_device)); 861 memset(ax, 0, sizeof(struct ax_device));
@@ -863,7 +866,7 @@ static int ax_probe(struct platform_device *pdev)
863 ax->plat = pdev->dev.platform_data; 866 ax->plat = pdev->dev.platform_data;
864 platform_set_drvdata(pdev, dev); 867 platform_set_drvdata(pdev, dev);
865 868
866 ei_status.rxcr_base = ax->plat->rcr_val; 869 ei_local->rxcr_base = ax->plat->rcr_val;
867 870
868 /* find the platform resources */ 871 /* find the platform resources */
869 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 872 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
@@ -890,9 +893,9 @@ static int ax_probe(struct platform_device *pdev)
890 * by using the size of the resource provided 893 * by using the size of the resource provided
891 */ 894 */
892 if (ax->plat->reg_offsets) 895 if (ax->plat->reg_offsets)
893 ei_status.reg_offset = ax->plat->reg_offsets; 896 ei_local->reg_offset = ax->plat->reg_offsets;
894 else { 897 else {
895 ei_status.reg_offset = ax->reg_offsets; 898 ei_local->reg_offset = ax->reg_offsets;
896 for (ret = 0; ret < 0x18; ret++) 899 for (ret = 0; ret < 0x18; ret++)
897 ax->reg_offsets[ret] = (size / 0x18) * ret; 900 ax->reg_offsets[ret] = (size / 0x18) * ret;
898 } 901 }
@@ -904,10 +907,10 @@ static int ax_probe(struct platform_device *pdev)
904 goto exit_mem; 907 goto exit_mem;
905 } 908 }
906 909
907 ei_status.mem = ioremap(res->start, size); 910 ei_local->mem = ioremap(res->start, size);
908 dev->base_addr = (unsigned long)ei_status.mem; 911 dev->base_addr = (unsigned long)ei_local->mem;
909 912
910 if (ei_status.mem == NULL) { 913 if (ei_local->mem == NULL) {
911 dev_err(&pdev->dev, "Cannot ioremap area (%08llx,%08llx)\n", 914 dev_err(&pdev->dev, "Cannot ioremap area (%08llx,%08llx)\n",
912 (unsigned long long)res->start, 915 (unsigned long long)res->start,
913 (unsigned long long)res->end); 916 (unsigned long long)res->end);
@@ -943,7 +946,7 @@ static int ax_probe(struct platform_device *pdev)
943 goto exit_mem2; 946 goto exit_mem2;
944 } 947 }
945 948
946 ei_status.reg_offset[0x1f] = ax->map2 - ei_status.mem; 949 ei_local->reg_offset[0x1f] = ax->map2 - ei_local->mem;
947 } 950 }
948 951
949 /* got resources, now initialise and register device */ 952 /* got resources, now initialise and register device */
@@ -962,7 +965,7 @@ static int ax_probe(struct platform_device *pdev)
962 kfree(ax->mem2); 965 kfree(ax->mem2);
963 966
964 exit_mem1: 967 exit_mem1:
965 iounmap(ei_status.mem); 968 iounmap(ei_local->mem);
966 969
967 exit_req: 970 exit_req:
968 release_resource(ax->mem); 971 release_resource(ax->mem);