android_kernel_motorola_sm6225/arch/blackfin/lib
Michael Hennerich 5c91fb902d Blackfin arch: Add assembly function insl_16
/*
 * CPUs often take a performance hit when accessing unaligned memory
 * locations. The actual performance hit varies, it can be small if the
 * hardware handles it or large if we have to take an exception and fix
 * it
 * in software.
 *
 * Since an ethernet header is 14 bytes network drivers often end up
 * with
 * the IP header at an unaligned offset. The IP header can be aligned by
 * shifting the start of the packet by 2 bytes. Drivers should do this
 * with:
 *
 * skb_reserve(NET_IP_ALIGN);
 *
 * The downside to this alignment of the IP header is that the DMA is
 * now
 * unaligned. On some architectures the cost of an unaligned DMA is high
 * and this cost outweighs the gains made by aligning the IP header.
 *
 * Since this trade off varies between architectures, we allow
 * NET_IP_ALIGN
 * to be overridden.
 */

This new function insl_16 allows to read form 32-bit IO and writes to
16-bit aligned memory. This is useful in above described scenario -
In particular with the AXIS AX88180 Gigabit Ethernet MAC.
Once the device is in 32-bit mode, reads from the RX FIFO always
decrements 4bytes.
While on the other side the destination address in SDRAM is always
16-bit aligned.
If we use skb_reserve(0) the receive buffer is 32-bit aligned but later
we hit a unaligned exception in the IP code.

Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Signed-off-by: Bryan Wu <bryan.wu@analog.com>
2007-11-17 23:46:58 +08:00
..
ashldi3.c blackfin architecture 2007-05-07 12:12:58 -07:00
ashrdi3.c blackfin architecture 2007-05-07 12:12:58 -07:00
checksum.c blackfin architecture 2007-05-07 12:12:58 -07:00
divsi3.S Blackfin arch: add proper ENDPROC() 2007-06-11 15:31:30 +08:00
gcclib.h blackfin architecture 2007-05-07 12:12:58 -07:00
ins.S Blackfin arch: Add assembly function insl_16 2007-11-17 23:46:58 +08:00
lshrdi3.c blackfin architecture 2007-05-07 12:12:58 -07:00
Makefile Blackfin arch: use do_div() for the 64bit division as pointed out by Bernd 2007-11-23 11:28:11 +08:00
memchr.S Blackfin arch: add proper ENDPROC() 2007-06-11 15:31:30 +08:00
memcmp.S Blackfin arch: revise anomaly handling by basing things on the compiler not the kconfig defines 2007-07-25 11:19:14 +08:00
memcpy.S Blackfin arch: revise anomaly handling by basing things on the compiler not the kconfig defines 2007-07-25 11:19:14 +08:00
memmove.S Blackfin arch: revise anomaly handling by basing things on the compiler not the kconfig defines 2007-07-25 11:19:14 +08:00
memset.S Blackfin arch: add proper ENDPROC() 2007-06-11 15:31:30 +08:00
modsi3.S Blackfin arch: add proper ENDPROC() 2007-06-11 15:31:30 +08:00
muldi3.c blackfin architecture 2007-05-07 12:12:58 -07:00
outs.S Blackfin arch: add proper ENDPROC() 2007-06-11 15:31:30 +08:00
smulsi3_highpart.S Blackfin arch: add proper ENDPROC() 2007-06-11 15:31:30 +08:00
strcmp.c Blackfin arch: cleanup warnings from checkpatch -- no functional changes 2007-07-12 22:58:21 +08:00
strcpy.c Blackfin arch: cleanup warnings from checkpatch -- no functional changes 2007-07-12 22:58:21 +08:00
strncmp.c Blackfin arch: cleanup warnings from checkpatch -- no functional changes 2007-07-12 22:58:21 +08:00
strncpy.c Blackfin arch: cleanup warnings from checkpatch -- no functional changes 2007-07-12 22:58:21 +08:00
udivsi3.S Blackfin arch: add proper ENDPROC() 2007-06-11 15:31:30 +08:00
umodsi3.S Blackfin arch: add proper ENDPROC() 2007-06-11 15:31:30 +08:00
umulsi3_highpart.S Blackfin arch: add proper ENDPROC() 2007-06-11 15:31:30 +08:00