This fixes problems with the RADEON_PARAM_SAREA_HANDLE case of the getparam ioctl on 64 bit architectures. Can someone verify that this doesn't break the BSDs, or suggest how to unbreak them?
-- Earthling Michel DÃnzer | Debian (powerpc), X and DRI developer Libre software enthusiast | http://svcs.affero.net/rm.php?r=daenzer
Index: programs/Xserver/hw/xfree86/os-support/shared/drm/kernel/radeon_state.c =================================================================== RCS file: /cvs/dri/xc/xc/programs/Xserver/hw/xfree86/os-support/shared/drm/kernel/radeon_state.c,v retrieving revision 1.26 diff -p -u -r1.26 radeon_state.c --- a/programs/Xserver/hw/xfree86/os-support/shared/drm/kernel/radeon_state.c 10 Jan 2004 20:59:16 -0000 1.26 +++ b/programs/Xserver/hw/xfree86/os-support/shared/drm/kernel/radeon_state.c 28 Feb 2004 11:54:38 -0000 @@ -2485,10 +2485,21 @@ int radeon_cp_getparam( DRM_IOCTL_ARGS ) case RADEON_PARAM_STATUS_HANDLE: value = dev_priv->ring_rptr_offset; break; +#if BITS_PER_LONG == 32 + /* + * This ioctl() doesn't work on 64-bit platforms because hw_lock is a + * pointer which can't fit into an int-sized variable. According to + * Michel Dänzer, the ioctl() is only used on embedded platforms, so + * not supporting it shouldn't be a problem. If the same functionality + * is needed on 64-bit platforms, a new ioctl() would have to be added, + * so backwards-compatibility for the embedded platforms can be + * maintained. --davidm 4-Feb-2004. + */ case RADEON_PARAM_SAREA_HANDLE: /* The lock is the first dword in the sarea. */ - value = (int)dev->lock.hw_lock; - break; + value = (long)dev->lock.hw_lock; + break; +#endif case RADEON_PARAM_GART_TEX_HANDLE: value = dev_priv->gart_textures_offset; break;