On Wed, 2002-05-01 at 00:43, José Fonseca wrote:
> 
> I attached a complete diff that should do the right thing. I believe this 
> is the only way to do this in a portable fashion, even if results in some 
> redundant work being done on bigendian machines.

Don't worry about that, as I said, at least PPC has special instructions
to handle this.

> I also avoided to increment the pointer inside the macros, just in case the
> le32_to_cpu macro reuses it's argument.

Certainly can't hurt...


> +#define MACH64_WRITE(reg,val)        writel(val, MACH64_ADDR(reg))
                                               ^^^
...neither can braces here...


> @@ -535,17 +536,21 @@
>                                       reg = MMSELECT( reg );
>  
>                                       while ( count && used ) {
> +                                             u32 data;
> +                                     
>                                               if ( !fifo ) {
>                                                       if ( mach64_do_wait_for_fifo( 
>dev_priv, 16 ) < 0 )
>                                                               return;
>                                                       
>                                                       fifo = 16;
>                                               }
> -
>                                               --fifo;
> -                                             /* data is already little-endian */
> -                                             MACH64_DEREF(reg) = *p++;
> +                                             
> +                                             data = le32_to_cpu(*p);
> +                                             p++;
>                                               used--;
> +
> +                                             MACH64_WRITE(reg, data);
>                                               
>                                               reg += 4;
>                                               count--;

This looks overly complicated though. I'd just do this:

@@ -544,7 +545,8 @@

                                                --fifo;
                                                /* data is already
little-endian */
-                                               MACH64_DEREF(reg) =
*p++;
+                                               MACH64_WRITE(reg,
le32_to_cpu(*p));
+                                               p++;
                                                used--;

                                                reg += 4;

(sorry, my mailer probably wraps some lines)


-- 
Earthling Michel Dänzer (MrCooper)/ Debian GNU/Linux (powerpc) developer
XFree86 and DRI project member   /  CS student, Free Software enthusiast

_______________________________________________________________

Have big pipes? SourceForge.net is looking for download mirrors. We supply
the hardware. You get the recognition. Email Us: 
[EMAIL PROTECTED]
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to