diff options
Diffstat (limited to 'drivers/net/mac8390.c')
-rw-r--r-- | drivers/net/mac8390.c | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/drivers/net/mac8390.c b/drivers/net/mac8390.c index 3f8a64f88181..3832fa4961dd 100644 --- a/drivers/net/mac8390.c +++ b/drivers/net/mac8390.c | |||
@@ -157,6 +157,8 @@ static void dayna_block_output(struct net_device *dev, int count, | |||
157 | #define memcpy_fromio(a, b, c) memcpy((a), (void *)(b), (c)) | 157 | #define memcpy_fromio(a, b, c) memcpy((a), (void *)(b), (c)) |
158 | #define memcpy_toio(a, b, c) memcpy((void *)(a), (b), (c)) | 158 | #define memcpy_toio(a, b, c) memcpy((void *)(a), (b), (c)) |
159 | 159 | ||
160 | #define memcmp_withio(a, b, c) memcmp((a), (void *)(b), (c)) | ||
161 | |||
160 | /* Slow Sane (16-bit chunk memory read/write) Cabletron uses this */ | 162 | /* Slow Sane (16-bit chunk memory read/write) Cabletron uses this */ |
161 | static void slow_sane_get_8390_hdr(struct net_device *dev, | 163 | static void slow_sane_get_8390_hdr(struct net_device *dev, |
162 | struct e8390_pkt_hdr *hdr, int ring_page); | 164 | struct e8390_pkt_hdr *hdr, int ring_page); |
@@ -164,8 +166,8 @@ static void slow_sane_block_input(struct net_device *dev, int count, | |||
164 | struct sk_buff *skb, int ring_offset); | 166 | struct sk_buff *skb, int ring_offset); |
165 | static void slow_sane_block_output(struct net_device *dev, int count, | 167 | static void slow_sane_block_output(struct net_device *dev, int count, |
166 | const unsigned char *buf, int start_page); | 168 | const unsigned char *buf, int start_page); |
167 | static void word_memcpy_tocard(void *tp, const void *fp, int count); | 169 | static void word_memcpy_tocard(unsigned long tp, const void *fp, int count); |
168 | static void word_memcpy_fromcard(void *tp, const void *fp, int count); | 170 | static void word_memcpy_fromcard(void *tp, unsigned long fp, int count); |
169 | 171 | ||
170 | static enum mac8390_type __init mac8390_ident(struct nubus_dev *dev) | 172 | static enum mac8390_type __init mac8390_ident(struct nubus_dev *dev) |
171 | { | 173 | { |
@@ -245,9 +247,9 @@ static enum mac8390_access __init mac8390_testio(volatile unsigned long membase) | |||
245 | unsigned long outdata = 0xA5A0B5B0; | 247 | unsigned long outdata = 0xA5A0B5B0; |
246 | unsigned long indata = 0x00000000; | 248 | unsigned long indata = 0x00000000; |
247 | /* Try writing 32 bits */ | 249 | /* Try writing 32 bits */ |
248 | memcpy(membase, &outdata, 4); | 250 | memcpy_toio(membase, &outdata, 4); |
249 | /* Now compare them */ | 251 | /* Now compare them */ |
250 | if (memcmp((char *)&outdata, (char *)membase, 4) == 0) | 252 | if (memcmp_withio(&outdata, membase, 4) == 0) |
251 | return ACCESS_32; | 253 | return ACCESS_32; |
252 | /* Write 16 bit output */ | 254 | /* Write 16 bit output */ |
253 | word_memcpy_tocard(membase, &outdata, 4); | 255 | word_memcpy_tocard(membase, &outdata, 4); |
@@ -732,7 +734,7 @@ static void sane_get_8390_hdr(struct net_device *dev, | |||
732 | struct e8390_pkt_hdr *hdr, int ring_page) | 734 | struct e8390_pkt_hdr *hdr, int ring_page) |
733 | { | 735 | { |
734 | unsigned long hdr_start = (ring_page - WD_START_PG)<<8; | 736 | unsigned long hdr_start = (ring_page - WD_START_PG)<<8; |
735 | memcpy_fromio((void *)hdr, (char *)dev->mem_start + hdr_start, 4); | 737 | memcpy_fromio(hdr, dev->mem_start + hdr_start, 4); |
736 | /* Fix endianness */ | 738 | /* Fix endianness */ |
737 | hdr->count = swab16(hdr->count); | 739 | hdr->count = swab16(hdr->count); |
738 | } | 740 | } |
@@ -746,14 +748,13 @@ static void sane_block_input(struct net_device *dev, int count, | |||
746 | if (xfer_start + count > ei_status.rmem_end) { | 748 | if (xfer_start + count > ei_status.rmem_end) { |
747 | /* We must wrap the input move. */ | 749 | /* We must wrap the input move. */ |
748 | int semi_count = ei_status.rmem_end - xfer_start; | 750 | int semi_count = ei_status.rmem_end - xfer_start; |
749 | memcpy_fromio(skb->data, (char *)dev->mem_start + xfer_base, | 751 | memcpy_fromio(skb->data, dev->mem_start + xfer_base, |
750 | semi_count); | 752 | semi_count); |
751 | count -= semi_count; | 753 | count -= semi_count; |
752 | memcpy_toio(skb->data + semi_count, | 754 | memcpy_fromio(skb->data + semi_count, ei_status.rmem_start, |
753 | (char *)ei_status.rmem_start, count); | ||
754 | } else { | ||
755 | memcpy_fromio(skb->data, (char *)dev->mem_start + xfer_base, | ||
756 | count); | 755 | count); |
756 | } else { | ||
757 | memcpy_fromio(skb->data, dev->mem_start + xfer_base, count); | ||
757 | } | 758 | } |
758 | } | 759 | } |
759 | 760 | ||
@@ -762,7 +763,7 @@ static void sane_block_output(struct net_device *dev, int count, | |||
762 | { | 763 | { |
763 | long shmem = (start_page - WD_START_PG)<<8; | 764 | long shmem = (start_page - WD_START_PG)<<8; |
764 | 765 | ||
765 | memcpy_toio((char *)dev->mem_start + shmem, buf, count); | 766 | memcpy_toio(dev->mem_start + shmem, buf, count); |
766 | } | 767 | } |
767 | 768 | ||
768 | /* dayna block input/output */ | 769 | /* dayna block input/output */ |
@@ -813,7 +814,7 @@ static void slow_sane_get_8390_hdr(struct net_device *dev, | |||
813 | int ring_page) | 814 | int ring_page) |
814 | { | 815 | { |
815 | unsigned long hdr_start = (ring_page - WD_START_PG)<<8; | 816 | unsigned long hdr_start = (ring_page - WD_START_PG)<<8; |
816 | word_memcpy_fromcard(hdr, (char *)dev->mem_start + hdr_start, 4); | 817 | word_memcpy_fromcard(hdr, dev->mem_start + hdr_start, 4); |
817 | /* Register endianism - fix here rather than 8390.c */ | 818 | /* Register endianism - fix here rather than 8390.c */ |
818 | hdr->count = (hdr->count&0xFF)<<8|(hdr->count>>8); | 819 | hdr->count = (hdr->count&0xFF)<<8|(hdr->count>>8); |
819 | } | 820 | } |
@@ -827,15 +828,14 @@ static void slow_sane_block_input(struct net_device *dev, int count, | |||
827 | if (xfer_start + count > ei_status.rmem_end) { | 828 | if (xfer_start + count > ei_status.rmem_end) { |
828 | /* We must wrap the input move. */ | 829 | /* We must wrap the input move. */ |
829 | int semi_count = ei_status.rmem_end - xfer_start; | 830 | int semi_count = ei_status.rmem_end - xfer_start; |
830 | word_memcpy_fromcard(skb->data, | 831 | word_memcpy_fromcard(skb->data, dev->mem_start + xfer_base, |
831 | (char *)dev->mem_start + xfer_base, | ||
832 | semi_count); | 832 | semi_count); |
833 | count -= semi_count; | 833 | count -= semi_count; |
834 | word_memcpy_fromcard(skb->data + semi_count, | 834 | word_memcpy_fromcard(skb->data + semi_count, |
835 | (char *)ei_status.rmem_start, count); | 835 | ei_status.rmem_start, count); |
836 | } else { | 836 | } else { |
837 | word_memcpy_fromcard(skb->data, | 837 | word_memcpy_fromcard(skb->data, dev->mem_start + xfer_base, |
838 | (char *)dev->mem_start + xfer_base, count); | 838 | count); |
839 | } | 839 | } |
840 | } | 840 | } |
841 | 841 | ||
@@ -844,12 +844,12 @@ static void slow_sane_block_output(struct net_device *dev, int count, | |||
844 | { | 844 | { |
845 | long shmem = (start_page - WD_START_PG)<<8; | 845 | long shmem = (start_page - WD_START_PG)<<8; |
846 | 846 | ||
847 | word_memcpy_tocard((char *)dev->mem_start + shmem, buf, count); | 847 | word_memcpy_tocard(dev->mem_start + shmem, buf, count); |
848 | } | 848 | } |
849 | 849 | ||
850 | static void word_memcpy_tocard(void *tp, const void *fp, int count) | 850 | static void word_memcpy_tocard(unsigned long tp, const void *fp, int count) |
851 | { | 851 | { |
852 | volatile unsigned short *to = tp; | 852 | volatile unsigned short *to = (void *)tp; |
853 | const unsigned short *from = fp; | 853 | const unsigned short *from = fp; |
854 | 854 | ||
855 | count++; | 855 | count++; |
@@ -859,10 +859,10 @@ static void word_memcpy_tocard(void *tp, const void *fp, int count) | |||
859 | *to++ = *from++; | 859 | *to++ = *from++; |
860 | } | 860 | } |
861 | 861 | ||
862 | static void word_memcpy_fromcard(void *tp, const void *fp, int count) | 862 | static void word_memcpy_fromcard(void *tp, unsigned long fp, int count) |
863 | { | 863 | { |
864 | unsigned short *to = tp; | 864 | unsigned short *to = tp; |
865 | const volatile unsigned short *from = fp; | 865 | const volatile unsigned short *from = (const void *)fp; |
866 | 866 | ||
867 | count++; | 867 | count++; |
868 | count /= 2; | 868 | count /= 2; |