Hi,

I'm using a few spare hours to get started working on the Savage DRM
driver. I'm going to have to rewrite it from scratch. The current sarea
definition is essentially copied from the MGA driver and the only 3
driver-specific ioctls are not (and probably won't be) used by the
current 2D/3D drivers. ;-)

To get started I have to clean up the savage_sarea structure and define
structures for ioctl arguments and such stuff. I looked around in some
existing DRM header files, mostly MGA. At first I was a bit confused
about how things fit together and recent comments about fixing 64-bit
issues and reorganizing DRM header files added to that confusion. I'd
like to get this DRM right from the start. So any advice would be
welcome. Below is my current understanding about how things _should_ be.

=== Header files in the DRM ===

drm.h: driver-independent types and definitions for the 3D driver to
communicate with the DRM.

drmP.h: driver-independent internal types and definitions.

savage_drm.h: any definitions needed by the 3D driver to communicate
with the DRM (sarea, sarea defines, ioctl parameter structures). Someone
recently proposed to use a "sanitized" copy of this file (and probably
drm.h) in the 3D driver instead of the kernel header file. That would
mean that these definitions have to be kept in sync in 3 places: kernel,
sanitized user-space copy and Xserver (see below). Does that make sense?

savage_drv.h: driver-internal data types like the dev_private structure
and function prototypes, some macros for BCI access.

savage.h: DRM template customization

=== Header files in the Xserver ===

savage_sarea.h: Basically a copy of the sarea defines and sarea
structure in the kernel but with different naming conventions. I vaguely
remember that this was because of XFree86's policy not to use external
header files or something such.

savage_common.h: Ioctl parameter structures with XFree86 naming
conventions. Same rationale as for savage_sarea.h, I guess.

The sarea defines are protected by a macro __SAVAGE_SAREA_DEFINES__.
This looks like it should be possible to include savage_sarea.h and
savage_drm.h in the same source file. I havn't found any example of that
though. Is this an artifact from early DRI/DRM days?

=== 64bit issues ===

Basically any fields in data structures shared between kernel and
user-space must have a fixed size in order to allow 32-bit user space to
work with a 64-bit kernel. Is that correct? Then what are the right
types (u32, __u32, uint32, ...?) that are available in both the kernel
(possibly linux and BSD) and user-space? Or if we're not going to share
header files between kernel tree and 3D drivers, then what types would
be used in the kernel and which types in user-space?

For keeping the DRM portable among OS's, should fixed-size number types
be defined in drm.h/drmP.h?

TIA for any feedback,
  Felix

| Felix Kühling <[EMAIL PROTECTED]>                     http://fxk.de.vu |
| PGP Fingerprint: 6A3C 9566 5B30 DDED 73C3  B152 151C 5CC1 D888 E595 |


-------------------------------------------------------
This SF.Net email is sponsored by: SourceForge.net Broadband
Sign-up now for SourceForge Broadband and get the fastest
6.0/768 connection for only $19.95/mo for the first 3 months!
http://ads.osdn.com/?ad_id%62&alloc_ida84&op=click
--
_______________________________________________
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to