[POWERPC] convert string i/o operations to C

Linas Vepstas linas at austin.ibm.com
Wed Sep 20 04:29:53 EST 2006


On Tue, Sep 19, 2006 at 10:23:51PM +1000, Stephen Rothwell wrote:

Perhaps this:

> +void _insb(volatile u8 __iomem *port, void *buf, int ns)
> +{
> +	asm volatile("sync");
> +	if (ns <= 0)
> +		return;
> +	asm volatile(

should be this: 

> +void _insb(volatile u8 __iomem *port, void *buf, int ns)
> +{
> +	if (ns <= 0)
> +		return;
> +	asm volatile("sync");
> +	asm volatile(

to assuage David Howell's concern.  Not that ns should be negative
in the first place ... but what the hey.

Re Davids other comment: "ns" stands for "no  byte-swap", and 
"s" stands for "string" so "insl_ns" is input string of longs, 
no byte swap.

Here's a question:

> +	asm volatile(
> +		"mtctr	%2\n"
> +		"subi	%1,%1,1\n"
> +		"0:	lbz	%2,0(%0)\n"
> +		"eieio\n"
> +		"stbu	%2,1(%1)\n"
> +		"bdnz	0b\n"
> +		"twi	0,%2,0\n"

What does this twi do? According to my powerpc docs, this would be a
no-op.  Does this have some magic synchronizing powers on certain
implementations? If so, there should be at least a comment card added
about why the twi is there. (This special ability of twi might be
well-known to some, but still, this is not immediately obvious,
and not immedately documented in e.g. the PEM.)

--linas




More information about the Linuxppc-dev mailing list