diff options
Diffstat (limited to 'nx-X11/lib/Xxf86dga')
-rw-r--r-- | nx-X11/lib/Xxf86dga/Imakefile | 63 | ||||
-rw-r--r-- | nx-X11/lib/Xxf86dga/XDGA.man | 673 | ||||
-rw-r--r-- | nx-X11/lib/Xxf86dga/XF86DGA.c | 722 | ||||
-rw-r--r-- | nx-X11/lib/Xxf86dga/XF86DGA2.c | 968 | ||||
-rw-r--r-- | nx-X11/lib/Xxf86dga/Xxf86dga-def.cpp | 16 |
5 files changed, 0 insertions, 2442 deletions
diff --git a/nx-X11/lib/Xxf86dga/Imakefile b/nx-X11/lib/Xxf86dga/Imakefile deleted file mode 100644 index 0be675720..000000000 --- a/nx-X11/lib/Xxf86dga/Imakefile +++ /dev/null @@ -1,63 +0,0 @@ -XCOMM $XdotOrg: xc/lib/Xxf86dga/Imakefile,v 1.3 2005/10/18 14:58:52 alanc Exp $ -XCOMM $XFree86: xc/lib/Xxf86dga/Imakefile,v 3.6 2003/05/05 20:42:30 tsi Exp $ - -#define DoNormalLib NormalLibXxf86dga -#define DoSharedLib SharedLibXxf86dga -#define DoExtraLib SharedLibXxf86dga -#define DoDebugLib DebugLibXxf86dga -#define DoProfileLib ProfileLibXxf86dga -#define LibName Xxf86dga -#define SoRev SOXXF86DGAREV -#define LibHeaders NO - -#include <Threads.tmpl> - -#ifdef SharedXxf86dgaReqs -REQUIREDLIBS = SharedXxf86dgaReqs -#endif - -XF86DGASRCS = XF86DGA.c XF86DGA2.c -XF86DGAOBJS = XF86DGA.o XF86DGA2.o - -#if Malloc0ReturnsNull -ALLOC_DEFINES = -DMALLOC_0_RETURNS_NULL -#endif - -#if defined(HasNetBSDApertureDriver) && HasNetBSDApertureDriver -APERTURE_DEFINES = -DHAS_APERTURE_DRV -#endif - - DEFINES = $(ALLOC_DEFINES) $(APERTURE_DEFINES) - SRCS = $(XF86DGASRCS) - OBJS = $(XF86DGAOBJS) - LINTLIBS = $(LINTXLIB) - -#define IncludeSharedObjectInNormalLib - -#include <Library.tmpl> - -InstallGenManPage(XDGA,$(LIBMANDIR),$(LIBMANSUFFIX)) -#if ExpandManNames -DGAFUNCS = XDGAQueryExtension \ - XDGAQueryVersion \ - XDGAQueryModes \ - XDGASetMode \ - XDGAOpenFramebuffer \ - XDGACloseFramebuffer \ - XDGASetViewport \ - XDGAInstallColormap \ - XDGACreateColormap \ - XDGASelectInput \ - XDGAFillRectangle \ - XDGACopyArea \ - XDGACopyTransparentArea \ - XDGAGetViewportStatus \ - XDGASync \ - XDGASetClientVersion \ - XDGAChangePixmapMode \ - XDGAKeyEventToXKeyEvent - -InstallGenManPageAliases(XDGA,$(LIBMANDIR),$(LIBMANSUFFIX),XF86DGA XFree86-DGA $(DGAFUNCS)) -#endif - -DependTarget() diff --git a/nx-X11/lib/Xxf86dga/XDGA.man b/nx-X11/lib/Xxf86dga/XDGA.man deleted file mode 100644 index 9c7beefbb..000000000 --- a/nx-X11/lib/Xxf86dga/XDGA.man +++ /dev/null @@ -1,673 +0,0 @@ -.\" $XFree86$ -.\" -.TH XDGA 3 __vendorversion__ -.SH NAME -XDGA \- Client library for the XFree86-DGA extension. -.SH SYNOPSIS -.B #include <X11/extensions/xf86dga.h> -.HP -Bool -.BR XDGAQueryExtension ( -.br -.RI "Display *" dpy , -.br -.RI "int *" eventBase , -.br -.RI "int *" errorBase ) -.HP -Bool -.BR XDGAQueryVersion ( -.br -.RI "Display *" dpy , -.br -.RI "int *" majorVersion , -.br -.RI "int *" minorVersion ) -.HP -XDGAMode -.RB * XDGAQueryModes ( -.br -.RI "Display *" dpy , -.br -.RI "int " screen , -.br -.RI "int *" num ) -.HP -XDGADevice -.RB * XDGASetMode ( -.br -.RI "Display *" dpy , -.br -.RI "int " screen , -.br -.RI "int " mode ) -.HP -Bool -.BR XDGAOpenFramebuffer ( -.br -.RI "Display *" dpy , -.br -.RI "int " screen ) -.HP -void -.BR XDGACloseFramebuffer ( -.br -.RI "Display *" dpy , -.br -.RI "int " screen ) -.HP -void -.BR XDGASetViewport ( -.br -.RI "Display *" dpy , -.br -.RI "int " screen , -.br -.RI "int " x , -.br -.RI "int " y , -.br -.RI "int " flags ) -.HP -void -.BR XDGAInstallColormap ( -.br -.RI "Display *" dpy , -.br -.RI "int " screen , -.br -.RI "Colormap " cmap ) -.HP -Colormap -.BR XDGACreateColormap ( -.br -.RI "Display *" dpy , -.br -.RI "int " screen , -.br -.RI "XDGADevice *" device , -.br -.RI "int " alloc ) -.HP -void -.BR XDGASelectInput ( -.br -.RI "Display *" dpy , -.br -.RI "int " screen , -.br -.RI "long " event_mask ) -.HP -void -.BR XDGAFillRectangle ( -.br -.RI "Display *" dpy , -.br -.RI "int " screen , -.br -.RI "int " x , -.br -.RI "int " y , -.br -.RI "unsigned int " width , -.br -.RI "unsigned int " height , -.br -.RI "unsigned long " color ) -.HP -void -.BR XDGACopyArea ( -.br -.RI "Display *" dpy , -.br -.RI "int " screen , -.br -.RI "int " srcx , -.br -.RI "int " srcy , -.br -.RI "unsigned int " width , -.br -.RI "unsigned int " height , -.br -.RI "int " dstx , -.br -.RI "int " dsty ) -.HP -void -.BR XDGACopyTransparentArea ( -.br -.RI "Display *" dpy , -.br -.RI "int " screen , -.br -.RI "int " srcx , -.br -.RI "int " srcy , -.br -.RI "unsigned int " width , -.br -.RI "unsigned int " height , -.br -.RI "int " dstx , -.br -.RI "int " dsty , -.br -.RI "unsigned long " key ) -.HP -int -.BR XDGAGetViewportStatus ( -.br -.RI "Display *" dpy , -.br -.RI "int " screen ) -.HP -void -.BR XDGASync ( -.br -.RI "Display *" dpy , -.br -.RI "int " screen ) -.HP -Bool -.BR XDGASetClientVersion ( -.br -.RI "Display *" dpy ) -.HP -void -.BR XDGAChangePixmapMode ( -.br -.RI "Display *" dpy , -.br -.RI "int " screen , -.br -.RI "int *" x , -.br -.RI "int *" y , -.br -.RI "int " mode ) -.HP -void -.BR XDGAKeyEventToXKeyEvent ( -.br -.RI "XDGAKeyEvent *" dk , -.br -.RI "XKeyEvent *" xk ) - -.SH DESCRIPTION -The -.B XFree86-DGA -extension is an X server extension for allowing client programs direct -access to the video frame buffer. This is a brief description of the -programming interface for version 2.0 of the -.B XFree86-DGA -extension. -.PP -.B XFree86-DGA -is not intended as a direct rendering API, but rather, as a mechanism -to "get the X Server out of the way" so that some other direct rendering -API can have full access to the hardware. With this in mind, DGA does -provide clients some direct access to the hardware without requiring a -separate rendering API, but this access is limited to direct linear -framebuffer access. -.PP -Most of the reasons for the -.B XFree86-DGA -extension's existence are now better served in other ways. Further -development of this extension is not expected, and it may be deprecated -in a future release. The features that continue to be useful will either -be provided through other existing mechanisms, or through an extension -that address those needs more specifically. -.PP -.B XFree86-DGA -is initialized by passing a number corresponding to a valid -.I XDGAMode -to -.BR XDGASetMode (). -Clients can get a list of valid modes from -.BR XDGAQueryModes (). -Each -.I XDGAMode -corresponds to a different framebuffer layout. -.PP -.BR XDGAQueryModes () -returns a pointer to an array of -.IR XDGAMode s -which are valid for the given screen. -.I num -is the number of elements in the array. The returned array can be freed -with XFree(3). The -.I XDGAMode -structure is as follows: -.PP -.nf -.ta .5i 2i -typedef struct { - int num; - char *name; - float verticalRefresh; - int flags; - int imageWidth; - int imageHeight; - int pixmapWidth; - int pixmapHeight; - int bytesPerScanline; - int byteOrder; - int depth; - int bitsPerPixel; - unsigned long redMask; - unsigned long greenMask; - unsigned long blueMask; - short visualClass; - int viewportWidth; - int viewportHeight; - int xViewportStep; - int yViewportStep; - int maxViewportX; - int maxViewportY; - int viewportFlags; - int reserved1; - int reserved2; -.br -} XDGAMode; -.fi -.TP 8 -.I num -A unique identifying number -.RI ( num -> 0) for the mode. This is the number referenced when initializing the mode. -.TP 8 -.I name -The name of the corresponding modeline as given in the __xconfigfile__ file. -.TP 8 -.I verticalRefresh -The vertical refresh rate for the modeline (in Hz). -.TP 8 -.I flags -Any of the following may be OR'd together: -.RS 8 -.TP 4 -.B XDGAConcurrentAccess -Indicates that concurrent client/server access to the framebuffer is -possible. If this flag is not set it is very important to call -.BR XDGASync () -before directly accessing the framebuffer if a call to -.BR XDGAFillRectangle (), -.BR XDGACopyArea () -or -.BR XDGACopyTransparentArea () -or any Xlib rendering function has been made prior to such accesses. -.TP 4 -.B XDGASolidFillRect -Indicates that -.BR XDGAFillRectangle () -is supported. -.TP 4 -.B XDGABlitRect -Indicates that -.BR XDGACopyArea () -is supported. -.TP 4 -.B XDGABlitTransRect -Indicates that -.BR XDGACopyTransparentArea () -is supported. -.TP 4 -.B XDGAPixmap -Indicates that a Pixmap will be returned when the mode is initialized. -This means that rendering with Xlib is possible for this mode. -.TP 4 -.B XDGAInterlaced -.TP 4 -.B XDGADoublescan -Indicates that the mode is an interlaced or doublescan mode. -.RE -.TP 8 -.I imageWidth -.TP 8 -.I imageHeight -The width and height of the framebuffer area accessible by the client. -This rectangle is always justified to the upper left-hand corner. -.TP 8 -.I pixmapWidth -.TP 8 -.I pixmapHeight -The width and height of the framebuffer area accessible by Xlib. This -rectangle is always justified to the upper left-hand corner. These -fields are only valid if the -.B XDGAPixmap -flag is set in the -.I flags -field. -.TP 8 -.I bytesPerScanline -The pitch of the framebuffer in bytes. -.TP 8 -.I byteOrder -.B MSBFirst -or -.BR LSBFirst . -.TP 8 -.I depth -The number of bits in each pixel which contain usable data. -.TP 8 -.I bitsPerPixel -The number of bits taken up by each pixel. -.TP 8 -.I redMask -.TP 8 -.I greenMask -.TP 8 -.I blueMask -The RGB masks. These do not apply to color-indexed modes. -.TP 8 -.I visualClass -.BR TrueColor , -.BR PseudoColor , -.BR DirectColor , -etc. -.TP 8 -.I viewportWidth -.TP 8 -.I viewportHeight -The dimensions of the portion of the framebuffer which will be displayed -on the screen. -.TP 8 -.I xViewPortStep -.TP 8 -.I yViewPortStep -The granularity of the x,y viewport positioning possible with the -.BR XDGASetViewport () -function. -.TP 8 -.I maxViewportX -.TP 8 -.I maxViewportY -The maximum x and y positions possible with the -.BR XDGASetViewport () -function. -.TP 8 -.I viewportFlags -Any of the following may be OR'd together -.RS 8 -.TP 4 -.B XDGAFlipRetrace -Indicates that the hardware can switch viewports during the vertical -retrace. -.TP 4 -.B XDGAFlipImmediate -Indicates that the hardware can switch viewports immediately without -waiting for the vertical retrace. -.RE -.PP -.BR XDGASetMode () -initialises the -.I XDGAMode -corresponding to -.IR num . -To exit DGA mode and return to normal server operation, call -.BR XDGASetMode () -with -.I num -set to zero. -.BR XDGASetMode () -returns a pointer to an -.I XDGADevice -if successful. The XDGADevice can be freed with XFree(3). The -.I XDGADevice -structure is as follows: -.PP -.nf -.ta .5i 2i -typedef struct { - XDGAMode mode; - unsigned char *data; - Pixmap pixmap; -.br -} XDGADevice; -.fi -.TP 8 -.I mode -The -.I XDGAMode -structure, identical to the information returned by -.BR XDGAQueryModes (). -.TP 8 -.I data -If direct framebuffer access is desired and possible, this field will -contain a pointer to the mapped framebuffer memory. Generally, this -field will be zero unless a call to -.BR XDGAOpenFramebuffer () -is made prior to initialization of the mode. -.TP 8 -.I pixmap -If the mode supports Xlib rendering as indicated by -.B XDGAPixmap -in the -.I flags -field, this will contain a Pixmap handle suitable for passing as the -drawable argument to Xlib functions. This field will be zero if Xlib -rendering is not supported. -.PP -.BR XDGAQueryExtension () -checks for the presence of the extension and returns the event and error bases. -.PP -.BR XDGAQueryVersion () -returns the -.B XFree86-DGA -major and minor version numbers. -.PP -.BR XDGAOpenFramebuffer () -maps the framebuffer memory. The client needs sufficient privileges to be -able to do this. -.BR XDGAOpenFramebuffer () -should be called prior to initializing a DGA mode if direct framebuffer -access is desired for that mode. -.BR XDGAOpenFramebuffer () -does not need to be called if direct framebuffer access is not required. -If the framebuffer is opened, -.PP -.BR XDGACloseFramebuffer () -should be called prior to client exit to unmap the memory. -.PP -.BR XDGAChangePixmapMode () -can be used to change between two pixmap sizes in cases where a Pixmap is -available for Xlib rendering. The following values for the -.I mode -parameter are available: -.RS 8 -.TP 4 -.B XDGAPixmapModeLarge -The pixmap size is defined by the -.I pixmapWidth -and -.I pixmapHeight -fields in the -.I XDGAMode -structure. The -.I x -and -.I y -values are ignored in this case. -.TP 4 -.B XDGAPixmapModeSmall -The pixmap size is defined by the -.I viewportWidth -and -.I viewportHeight -fields in the -.I XDGAMode -structure. In this mode, the -.I x -and -.I y -values specify where in the framebuffer this pixmap rectangle is located. -It may be placed anywhere within the Xlib renderable region described -by the -.I pixmapWidth -and -.I pixmapHeight -fields in the -.IR XDGAMode . -The -.I x -and -.I y -values returned are the resultant location of the pixmap and may be -different from the requested x,y location due to platform specific -alignment constraints. All Xlib rendering is clipped to this pixmap -rectangle. -.RE -.PP -.BR XDGASetViewport () -sets the upper left-hand corner of the rectangle of framebuffer that is -to be displayed on the screen. Not all locations may be supported by -the hardware and requested locations will be adjusted according to the -.I xViewPortStep -and -.I yViewPortStep -fields in the -.IR XDGAMode . -.PP -.I flags -can be -.B XDGAFlipRetrace -or -.B XDGAFlipImmediate -to adjust the viewport location at the next vertical retrace or -immediately. Values other than the supported values advertised in the -mode's -.I viewportFlags -field will result in hardware-specific default behavior. -.B XDGAFlipImmediate -will block until the flip is completed. -.B XDGAFlipRetrace -will generally NOT block so it is necessary to monitor the viewport -status with -.BR XDGAGetViewportStatus (). -.B XDGAFlipImmediate -requests during pending -.B XDGAFlipRetrace -requests will be ignored. -.PP -.BR XDGAGetViewportStatus () -keeps track of the -.BR XDGASetViewport () -requests still pending. The return value of the function will have -consecutive bits set (LSB justified), each bit representing a pending -viewport change. For example: -.PP -.nf - while(XDGAGetViewportStatus(dpy, screen)); -.fi -.PP -waits for all pending viewport changes to finish. -.PP -.nf - while(0x2 & XDGAGetViewportStatus(dpy, screen)); -.fi -.PP -waits until all but the last viewport changes have completed. -.PP -.BR XDGACreateColormap () -is similar to the Xlib function XCreateColormap(3) except that it takes -an -.I XDGADevice -as an argument instead of a Window and Visual. Though XCreateColormap(3) -may create usable colormaps in some cases, -.BR XDGACreateColormap () -is the preferred method for creating colormaps in DGA since there may -not be an advertised visual compatible with the DGA device. -.PP -.BR XDGAInstallColormap () -must be used to install colormaps in DGA mode. XInstallColormap(3) will -not work. -.PP -.BR XDGASelectInput () -enables DGA's own event mechanism. This function is similar to -XSelectInput(3), and all Xlib Key, Button and Motion masks are supported. -The following DGA events are defined: -.PP -.nf -.ta .5i 2i -typedef struct { - int type; /\(** ButtonPress or ButtonRelease + the DGA event base*/ - unsigned long serial; /\(** # or last request processed by the server */ - Display *display; /\(** Display the event was read from */ - int screen; /\(** The screen number the event came from */ - Time time; /\(** milliseconds */ - unsigned int state; /\(** key or button mask */ - unsigned int button; /\(** detail */ -.br -} XDGAButtonEvent; -.fi -.PP -.nf -.ta .5i 2i -typedef struct { - int type; /\(** KeyPress or KeyRelease + the DGA event base*/ - unsigned long serial; /\(** # or last request processed by the server */ - Display *display; /\(** Display the event was read from */ - int screen; /\(** The screen number the event came from */ - Time time; /\(** milliseconds */ - unsigned int state; /\(** key or button mask */ - unsigned int keycode; /\(** detail */ -.br -} XDGAKeyEvent; -.fi -.PP -.nf -.ta .5i 2i -typedef struct { - int type; /\(** MotionNotify + the DGA event base*/ - unsigned long serial; /\(** # or last request processed by the server */ - Display *display; /\(** Display the event was read from */ - int screen; /\(** The screen number the event came from */ - Time time; /\(** milliseconds */ - unsigned int state; /\(** key or button mask */ - int dx; /\(** relative pointer motion */ - int dy; /\(** relative pointer motion */ -.br -} XDGAMotionEvent; -.fi -.PP -.BR XDGAKeyEventToXKeyEvent () -is a helper function to translate -.IR XDGAKeyEvent s -into -.IR XKeyEvent s -suitable for use with XLookupKeysym(3). -.PP -.BR XDGAFillRectangle (), -.BR XDGACopyArea (), -and -.BR XDGACopyTransparentArea () -are included with some reservation since DGA is not intended as a -rendering API. These are merely convenience routines and are optionally -supported. The associated flags will be set in the -.IR XDGAMode 's -.I flags -field if these functions are supported. These functions will be no-ops -otherwise. they do not provide direct access to the hardware, but are -simply context-less operations performed by the server. -.PP -.BR XDGASync () -blocks until all server rendering to the framebuffer completes. If Xlib -or the 3 rendering functions above are used, -.BR XDGASync () -must be called before the client directly accesses the framebuffer as -the server rendering is asynchronous with the client and may have not -completed. This is especially important if the -.B XDGAConcurrentAccess -flag is not set in the -.IR XDGAMode 's -.I flags -field since concurrent access by the server and client may result in a -system lockup. -.SH SEE ALSO -__xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__) -.SH AUTHORS -.B XFree86-DGA -version 2 was written by Mark Vojkovich. Version 1 was written by Jon -Tombs, Harm Hanemaayer, Mark Vojkovich. - diff --git a/nx-X11/lib/Xxf86dga/XF86DGA.c b/nx-X11/lib/Xxf86dga/XF86DGA.c deleted file mode 100644 index 95d7596e2..000000000 --- a/nx-X11/lib/Xxf86dga/XF86DGA.c +++ /dev/null @@ -1,722 +0,0 @@ -/* $XFree86: xc/lib/Xxf86dga/XF86DGA.c,v 3.23tsi Exp $ */ -/* - -Copyright (c) 1995 Jon Tombs -Copyright (c) 1995,1996 The XFree86 Project, Inc - -*/ - -/* THIS IS NOT AN X CONSORTIUM STANDARD */ - -#ifdef __UNIXOS2__ /* needed here to override certain constants in X headers */ -#define INCL_DOS -#define INCL_DOSIOCTL -#define I_NEED_OS2_H -#include <os2.h> -#endif - -#if defined(linux) -#define HAS_MMAP_ANON -#include <sys/types.h> -#include <sys/mman.h> -/* kernel header doesn't work with -ansi */ -/* #include <asm/page.h> */ /* PAGE_SIZE */ -#define HAS_SC_PAGESIZE /* _SC_PAGESIZE may be an enum for Linux */ -#define HAS_GETPAGESIZE -#endif /* linux */ - -#if defined(CSRG_BASED) -#define HAS_MMAP_ANON -#define HAS_GETPAGESIZE -#include <sys/types.h> -#include <sys/mman.h> -#endif /* CSRG_BASED */ - -#if defined(DGUX) -#define HAS_GETPAGESIZE -#define MMAP_DEV_ZERO -#include <sys/types.h> -#include <sys/mman.h> -#include <unistd.h> -#endif /* DGUX */ - -#if defined(SVR4) && !defined(DGUX) -#define MMAP_DEV_ZERO -#include <sys/types.h> -#include <sys/mman.h> -#include <unistd.h> -#endif /* SVR4 && !DGUX */ - -#if defined(sun) && !defined(SVR4) /* SunOS */ -#define MMAP_DEV_ZERO /* doesn't SunOS have MAP_ANON ?? */ -#define HAS_GETPAGESIZE -#include <sys/types.h> -#include <sys/mman.h> -#endif /* sun && !SVR4 */ - -#ifdef XNO_SYSCONF -#undef _SC_PAGESIZE -#endif - - -#define NEED_EVENTS -#define NEED_REPLIES -#include <X11/Xlibint.h> -#include <X11/extensions/xf86dga.h> -#include <X11/extensions/xf86dgastr.h> -#include <X11/extensions/Xext.h> -#include <X11/extensions/extutil.h> - -extern XExtDisplayInfo* xdga_find_display(Display*); -extern char *xdga_extension_name; - -#define XF86DGACheckExtension(dpy,i,val) \ - XextCheckExtension (dpy, i, xdga_extension_name, val) - -/***************************************************************************** - * * - * public XFree86-DGA Extension routines * - * * - *****************************************************************************/ - -Bool XF86DGAQueryExtension ( - Display *dpy, - int *event_basep, - int *error_basep -){ - return XDGAQueryExtension(dpy, event_basep, error_basep); -} - -Bool XF86DGAQueryVersion( - Display* dpy, - int* majorVersion, - int* minorVersion -){ - return XDGAQueryVersion(dpy, majorVersion, minorVersion); -} - -Bool XF86DGAGetVideoLL( - Display* dpy, - int screen, - int *offset, - int *width, - int *bank_size, - int *ram_size -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXF86DGAGetVideoLLReply rep; - xXF86DGAGetVideoLLReq *req; - - XF86DGACheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(XF86DGAGetVideoLL, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XF86DGAGetVideoLL; - req->screen = screen; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - return False; - } - - *offset = /*(char *)*/rep.offset; - *width = rep.width; - *bank_size = rep.bank_size; - *ram_size = rep.ram_size; - - UnlockDisplay(dpy); - SyncHandle(); - return True; -} - - -Bool XF86DGADirectVideoLL( - Display* dpy, - int screen, - int enable -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXF86DGADirectVideoReq *req; - - XF86DGACheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(XF86DGADirectVideo, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XF86DGADirectVideo; - req->screen = screen; - req->enable = enable; - UnlockDisplay(dpy); - SyncHandle(); - XSync(dpy,False); - return True; -} - -Bool XF86DGAGetViewPortSize( - Display* dpy, - int screen, - int *width, - int *height -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXF86DGAGetViewPortSizeReply rep; - xXF86DGAGetViewPortSizeReq *req; - - XF86DGACheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(XF86DGAGetViewPortSize, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XF86DGAGetViewPortSize; - req->screen = screen; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - return False; - } - - *width = rep.width; - *height = rep.height; - - UnlockDisplay(dpy); - SyncHandle(); - return True; -} - - -Bool XF86DGASetViewPort( - Display* dpy, - int screen, - int x, - int y -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXF86DGASetViewPortReq *req; - - XF86DGACheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(XF86DGASetViewPort, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XF86DGASetViewPort; - req->screen = screen; - req->x = x; - req->y = y; - UnlockDisplay(dpy); - SyncHandle(); - XSync(dpy,False); - return True; -} - - -Bool XF86DGAGetVidPage( - Display* dpy, - int screen, - int *vpage -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXF86DGAGetVidPageReply rep; - xXF86DGAGetVidPageReq *req; - - XF86DGACheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(XF86DGAGetVidPage, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XF86DGAGetVidPage; - req->screen = screen; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - return False; - } - - *vpage = rep.vpage; - UnlockDisplay(dpy); - SyncHandle(); - return True; -} - - -Bool XF86DGASetVidPage( - Display* dpy, - int screen, - int vpage -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXF86DGASetVidPageReq *req; - - XF86DGACheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(XF86DGASetVidPage, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XF86DGASetVidPage; - req->screen = screen; - req->vpage = vpage; - UnlockDisplay(dpy); - SyncHandle(); - XSync(dpy,False); - return True; -} - -Bool XF86DGAInstallColormap( - Display* dpy, - int screen, - Colormap cmap -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXF86DGAInstallColormapReq *req; - - XF86DGACheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(XF86DGAInstallColormap, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XF86DGAInstallColormap; - req->screen = screen; - req->id = cmap; - UnlockDisplay(dpy); - SyncHandle(); - XSync(dpy,False); - return True; -} - -Bool XF86DGAQueryDirectVideo( - Display *dpy, - int screen, - int *flags -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXF86DGAQueryDirectVideoReply rep; - xXF86DGAQueryDirectVideoReq *req; - - XF86DGACheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(XF86DGAQueryDirectVideo, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XF86DGAQueryDirectVideo; - req->screen = screen; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - return False; - } - *flags = rep.flags; - UnlockDisplay(dpy); - SyncHandle(); - return True; -} - -Bool XF86DGAViewPortChanged( - Display *dpy, - int screen, - int n -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXF86DGAViewPortChangedReply rep; - xXF86DGAViewPortChangedReq *req; - - XF86DGACheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(XF86DGAViewPortChanged, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XF86DGAViewPortChanged; - req->screen = screen; - req->n = n; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - return False; - } - UnlockDisplay(dpy); - SyncHandle(); - return rep.result; -} - - - -/* Helper functions */ - -#include <X11/Xmd.h> -#include <X11/extensions/xf86dga.h> -#include <stdlib.h> -#include <stdio.h> -#include <fcntl.h> -#if defined(ISC) -# define HAS_SVR3_MMAP -# include <sys/types.h> -# include <errno.h> - -# include <sys/at_ansi.h> -# include <sys/kd.h> - -# include <sys/sysmacros.h> -# include <sys/immu.h> -# include <sys/region.h> - -# include <sys/mmap.h> -#else -# if defined(Lynx) && defined(NO_MMAP) -# include <sys/types.h> -# include <errno.h> -# include <smem.h> -# else -# if !defined(__UNIXOS2__) -# include <sys/mman.h> -# endif -# endif -#endif -#include <sys/wait.h> -#include <signal.h> -#include <unistd.h> - -#if defined(SVR4) && !defined(sun) -#define DEV_MEM "/dev/pmem" -#elif defined(SVR4) && defined(sun) -#define DEV_MEM "/dev/xsvc" -#elif defined(HAS_APERTURE_DRV) -#define DEV_MEM "/dev/xf86" -#else -#define DEV_MEM "/dev/mem" -#endif - -typedef struct { - unsigned long physaddr; /* actual requested physical address */ - unsigned long size; /* actual requested map size */ - unsigned long delta; /* delta to account for page alignment */ - void * vaddr; /* mapped address, without the delta */ - int refcount; /* reference count */ -} MapRec, *MapPtr; - -typedef struct { - Display * display; - int screen; - MapPtr map; -} ScrRec, *ScrPtr; - -static int mapFd = -1; -static int numMaps = 0; -static int numScrs = 0; -static MapPtr *mapList = NULL; -static ScrPtr *scrList = NULL; - -static MapPtr -AddMap(void) -{ - MapPtr *old; - - old = mapList; - mapList = realloc(mapList, sizeof(MapPtr) * (numMaps + 1)); - if (!mapList) { - mapList = old; - return NULL; - } - mapList[numMaps] = malloc(sizeof(MapRec)); - if (!mapList[numMaps]) - return NULL; - return mapList[numMaps++]; -} - -static ScrPtr -AddScr(void) -{ - ScrPtr *old; - - old = scrList; - scrList = realloc(scrList, sizeof(ScrPtr) * (numScrs + 1)); - if (!scrList) { - scrList = old; - return NULL; - } - scrList[numScrs] = malloc(sizeof(ScrRec)); - if (!scrList[numScrs]) - return NULL; - return scrList[numScrs++]; -} - -static MapPtr -FindMap(unsigned long address, unsigned long size) -{ - int i; - - for (i = 0; i < numMaps; i++) { - if (mapList[i]->physaddr == address && - mapList[i]->size == size) - return mapList[i]; - } - return NULL; -} - -static ScrPtr -FindScr(Display *display, int screen) -{ - int i; - - for (i = 0; i < numScrs; i++) { - if (scrList[i]->display == display && - scrList[i]->screen == screen) - return scrList[i]; - } - return NULL; -} - -static void * -MapPhysAddress(unsigned long address, unsigned long size) -{ - unsigned long offset, delta; - int pagesize = -1; - void *vaddr; - MapPtr mp; -#if defined(ISC) && defined(HAS_SVR3_MMAP) - struct kd_memloc mloc; -#elif defined(__UNIXOS2__) - APIRET rc; - ULONG action; - HFILE hfd; -#endif - - if ((mp = FindMap(address, size))) { - mp->refcount++; - return (void *)((unsigned long)mp->vaddr + mp->delta); - } - -#if defined(_SC_PAGESIZE) && defined(HAS_SC_PAGESIZE) - pagesize = sysconf(_SC_PAGESIZE); -#endif -#ifdef _SC_PAGE_SIZE - if (pagesize == -1) - pagesize = sysconf(_SC_PAGE_SIZE); -#endif -#ifdef HAS_GETPAGESIZE - if (pagesize == -1) - pagesize = getpagesize(); -#endif -#ifdef PAGE_SIZE - if (pagesize == -1) - pagesize = PAGE_SIZE; -#endif - if (pagesize == -1) - pagesize = 4096; - - delta = address % pagesize; - offset = address - delta; - -#if defined(ISC) && defined(HAS_SVR3_MMAP) - if (mapFd < 0) { - if ((mapFd = open("/dev/mmap", O_RDWR)) < 0) - return NULL; - } - mloc.vaddr = (char *)0; - mloc.physaddr = (char *)offset; - mloc.length = size + delta; - mloc.ioflg=1; - - if ((vaddr = (void *)ioctl(mapFd, MAP, &mloc)) == (void *)-1) - return NULL; -#elif defined (__UNIXOS2__) - /* - * Dragon warning here! /dev/pmap$ is never closed, except on progam exit. - * Consecutive calling of this routine will make PMAP$ driver run out - * of memory handles. Some umap/close mechanism should be provided - */ - - rc = DosOpen("/dev/pmap$", &hfd, &action, 0, FILE_NORMAL, FILE_OPEN, - OPEN_ACCESS_READWRITE | OPEN_SHARE_DENYNONE, (PEAOP2)NULL); - if (rc != 0) - return NULL; - { - struct map_ioctl { - union { - ULONG phys; - void* user; - } a; - ULONG size; - } pmap,dmap; - ULONG plen,dlen; -#define XFREE86_PMAP 0x76 -#define PMAP_MAP 0x44 - - pmap.a.phys = offset; - pmap.size = size + delta; - rc = DosDevIOCtl(hfd, XFREE86_PMAP, PMAP_MAP, - (PULONG)&pmap, sizeof(pmap), &plen, - (PULONG)&dmap, sizeof(dmap), &dlen); - if (rc == 0) { - vaddr = dmap.a.user; - } - } - if (rc != 0) - return NULL; -#elif defined(Lynx) && defined(NO_MMAP) - vaddr = (void *)smem_create("XF86DGA", (char *)offset, - size + delta, SM_READ|SM_WRITE); -#else -#ifndef MAP_FILE -#define MAP_FILE 0 -#endif - if (mapFd < 0) { - if ((mapFd = open(DEV_MEM, O_RDWR)) < 0) - return NULL; - } - vaddr = (void *)mmap(NULL, size + delta, PROT_READ | PROT_WRITE, - MAP_FILE | MAP_SHARED, mapFd, (off_t)offset); - if (vaddr == (void *)-1) - return NULL; -#endif - - if (!vaddr) { - if (!(mp = AddMap())) - return NULL; - mp->physaddr = address; - mp->size = size; - mp->delta = delta; - mp->vaddr = vaddr; - mp->refcount = 1; - } - return (void *)((unsigned long)vaddr + delta); -} - -/* - * Still need to find a clean way of detecting the death of a DGA app - * and returning things to normal - Jon - * This is here to help debugging without rebooting... Also C-A-BS - * should restore text mode. - */ - -int -XF86DGAForkApp(int screen) -{ - pid_t pid; - int status; - int i; - - /* fork the app, parent hangs around to clean up */ - if ((pid = fork()) > 0) { - ScrPtr sp; - - waitpid(pid, &status, 0); - for (i = 0; i < numScrs; i++) { - sp = scrList[i]; - XF86DGADirectVideoLL(sp->display, sp->screen, 0); - XSync(sp->display, False); - } - if (WIFEXITED(status)) - _exit(0); - else - _exit(-1); - } - return pid; -} - - -Bool -XF86DGADirectVideo( - Display *dis, - int screen, - int enable -){ - ScrPtr sp; - MapPtr mp = NULL; - - if ((sp = FindScr(dis, screen))) - mp = sp->map; - - if (enable & XF86DGADirectGraphics) { -#if !defined(ISC) && !defined(HAS_SVR3_MMAP) \ - && !(defined(Lynx) && defined(NO_MMAP)) \ - && !defined(__UNIXOS2__) - if (mp && mp->vaddr) - mprotect(mp->vaddr, mp->size + mp->delta, PROT_READ | PROT_WRITE); -#endif - } else { -#if !defined(ISC) && !defined(HAS_SVR3_MMAP) \ - && !(defined(Lynx) && defined(NO_MMAP)) \ - && !defined(__UNIXOS2__) - if (mp && mp->vaddr) - mprotect(mp->vaddr, mp->size + mp->delta, PROT_READ); -#elif defined(Lynx) && defined(NO_MMAP) - /* XXX this doesn't allow enable after disable */ - smem_create(NULL, mp->vaddr, mp->size + mp->delta, SM_DETACH); - smem_remove("XF86DGA"); -#endif - } - - XF86DGADirectVideoLL(dis, screen, enable); - return 1; -} - - -static void -XF86cleanup(int sig) -{ - ScrPtr sp; - int i; - static char beenhere = 0; - - if (beenhere) - _exit(3); - beenhere = 1; - - for (i = 0; i < numScrs; i++) { - sp = scrList[i]; - XF86DGADirectVideo(sp->display, sp->screen, 0); - XSync(sp->display, False); - } - _exit(3); -} - -Bool -XF86DGAGetVideo( - Display *dis, - int screen, - char **addr, - int *width, - int *bank, - int *ram -){ - /*unsigned long*/ int offset; - static int beenHere = 0; - ScrPtr sp; - MapPtr mp; - - if (!(sp = FindScr(dis, screen))) { - if (!(sp = AddScr())) { - fprintf(stderr, "XF86DGAGetVideo: malloc failure\n"); - exit(-2); - } - sp->display = dis; - sp->screen = screen; - sp->map = NULL; - } - - XF86DGAGetVideoLL(dis, screen , &offset, width, bank, ram); - - *addr = MapPhysAddress(offset, *bank); - if (*addr == NULL) { - fprintf(stderr, "XF86DGAGetVideo: failed to map video memory (%s)\n", - strerror(errno)); - exit(-2); - } - - if ((mp = FindMap(offset, *bank))) - sp->map = mp; - - if (!beenHere) { - beenHere = 1; - atexit((void(*)(void))XF86cleanup); - /* one shot XF86cleanup attempts */ - signal(SIGSEGV, XF86cleanup); -#ifdef SIGBUS - signal(SIGBUS, XF86cleanup); -#endif - signal(SIGHUP, XF86cleanup); - signal(SIGFPE, XF86cleanup); - } - - return 1; -} - diff --git a/nx-X11/lib/Xxf86dga/XF86DGA2.c b/nx-X11/lib/Xxf86dga/XF86DGA2.c deleted file mode 100644 index 533901fca..000000000 --- a/nx-X11/lib/Xxf86dga/XF86DGA2.c +++ /dev/null @@ -1,968 +0,0 @@ -/* $XFree86: xc/lib/Xxf86dga/XF86DGA2.c,v 1.23 2003/05/05 20:42:30 tsi Exp $ */ -/* - -Copyright (c) 1995 Jon Tombs -Copyright (c) 1995,1996 The XFree86 Project, Inc - -*/ - -/* THIS IS NOT AN X CONSORTIUM STANDARD */ - -#ifdef __UNIXOS2__ /* needed here to override certain constants in X headers */ -#define INCL_DOS -#define INCL_DOSIOCTL -#define I_NEED_OS2_H -#include <os2.h> -#endif - -#define NEED_EVENTS -#define NEED_REPLIES -#include <X11/Xlibint.h> -#include <X11/extensions/xf86dga.h> -#include <X11/extensions/xf86dgastr.h> -#include <X11/extensions/Xext.h> -#include <X11/extensions/extutil.h> -#include <stdio.h> - - -/* If you change this, change the Bases[] array below as well */ -#define MAX_HEADS 16 - -char *xdga_extension_name = XF86DGANAME; - -static XExtensionInfo _xdga_info_data; -static XExtensionInfo *xdga_info = &_xdga_info_data; - - -Bool XDGAMapFramebuffer(int, char *, unsigned char*, CARD32, CARD32, CARD32); -void XDGAUnmapFramebuffer(int); -unsigned char* XDGAGetMappedMemory(int); - -#define XDGACheckExtension(dpy,i,val) \ - XextCheckExtension (dpy, i, xdga_extension_name, val) - -/***************************************************************************** - * * - * private utility routines * - * * - *****************************************************************************/ - -static int xdga_close_display(Display *dpy, XExtCodes *codes); -static Bool xdga_wire_to_event(Display *dpy, XEvent *event, xEvent *wire_ev); -static Status xdga_event_to_wire(Display *dpy, XEvent *event, xEvent *wire_ev); - -static XExtensionHooks xdga_extension_hooks = { - NULL, /* create_gc */ - NULL, /* copy_gc */ - NULL, /* flush_gc */ - NULL, /* free_gc */ - NULL, /* create_font */ - NULL, /* free_font */ - xdga_close_display, /* close_display */ - xdga_wire_to_event, /* wire_to_event */ - xdga_event_to_wire, /* event_to_wire */ - NULL, /* error */ - NULL, /* error_string */ -}; - -static XEXT_GENERATE_CLOSE_DISPLAY (xdga_close_display, xdga_info) - - -XExtDisplayInfo* xdga_find_display(Display*); -XEXT_GENERATE_FIND_DISPLAY (xdga_find_display, xdga_info, - "XFree86-DGA", - &xdga_extension_hooks, - 0, NULL) - - -static Status -xdga_event_to_wire( - Display *dpy, - XEvent *event, - xEvent *wire_ev -){ - return True; -} - -static Bool -xdga_wire_to_event( - Display *dpy, - XEvent *event, - xEvent *wire_ev -){ - dgaEvent *wire = (dgaEvent *) wire_ev; - XDGAButtonEvent *bevent; - XDGAKeyEvent *kevent; - XDGAMotionEvent *mevent; - XExtDisplayInfo *info = xdga_find_display (dpy); - - XDGACheckExtension (dpy, info, False); - - switch((wire->u.u.type & 0x7f) - info->codes->first_event) { - case MotionNotify: - mevent = (XDGAMotionEvent*)event; - mevent->type = wire->u.u.type & 0x7F; - mevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *)wire); - mevent->display = dpy; - mevent->screen = wire->u.event.screen; - mevent->time = wire->u.event.time; - mevent->state = wire->u.event.state; - mevent->dx = wire->u.event.dx; - mevent->dy = wire->u.event.dy; - return True; - case ButtonPress: - case ButtonRelease: - bevent = (XDGAButtonEvent*)event; - bevent->type = wire->u.u.type & 0x7F; - bevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *)wire); - bevent->display = dpy; - bevent->screen = wire->u.event.screen; - bevent->time = wire->u.event.time; - bevent->state = wire->u.event.state; - bevent->button = wire->u.u.detail; - return True; - case KeyPress: - case KeyRelease: - kevent = (XDGAKeyEvent*)event; - kevent->type = wire->u.u.type & 0x7F; - kevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *)wire); - kevent->display = dpy; - kevent->screen = wire->u.event.screen; - kevent->time = wire->u.event.time; - kevent->state = wire->u.event.state; - kevent->keycode = wire->u.u.detail; - return True; - } - - return False; -} - - -Bool XDGAQueryExtension ( - Display *dpy, - int *event_basep, - int *error_basep -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - - if (XextHasExtension(info)) { - *event_basep = info->codes->first_event; - *error_basep = info->codes->first_error; - return True; - } else { - return False; - } -} - - -Bool XDGAQueryVersion( - Display *dpy, - int *majorVersion, - int *minorVersion -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXDGAQueryVersionReply rep; - xXDGAQueryVersionReq *req; - - XDGACheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(XDGAQueryVersion, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XDGAQueryVersion; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - return False; - } - *majorVersion = rep.majorVersion; - *minorVersion = rep.minorVersion; - UnlockDisplay(dpy); - SyncHandle(); - if (*majorVersion >= 2) - { - int i, j; - - for (i = 0, j = info->codes->first_event; - i < XF86DGANumberEvents; - i++, j++) - { - XESetWireToEvent (dpy, j, xdga_wire_to_event); - XESetEventToWire (dpy, j, xdga_event_to_wire); - } - XDGASetClientVersion(dpy); - } - return True; -} - -Bool XDGASetClientVersion( - Display *dpy -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXDGASetClientVersionReq *req; - - XDGACheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(XDGASetClientVersion, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XDGASetClientVersion; - req->major = XDGA_MAJOR_VERSION; - req->minor = XDGA_MINOR_VERSION; - UnlockDisplay(dpy); - SyncHandle(); - return True; -} - -Bool XDGAOpenFramebuffer( - Display *dpy, - int screen -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXDGAOpenFramebufferReply rep; - xXDGAOpenFramebufferReq *req; - char *deviceName = NULL; - Bool ret; - - XDGACheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(XDGAOpenFramebuffer, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XDGAOpenFramebuffer; - req->screen = screen; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - return False; - } - - if(rep.length) { - deviceName = Xmalloc(rep.length << 2); - _XRead(dpy, deviceName, rep.length << 2); - } - - ret = XDGAMapFramebuffer(screen, deviceName, - (unsigned char*)(long)rep.mem1, - rep.size, rep.offset, rep.extra); - - if(deviceName) - Xfree(deviceName); - - UnlockDisplay(dpy); - SyncHandle(); - return ret; -} - -void XDGACloseFramebuffer( - Display *dpy, - int screen -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXDGACloseFramebufferReq *req; - - XextSimpleCheckExtension (dpy, info, xdga_extension_name); - - XDGAUnmapFramebuffer(screen); - - LockDisplay(dpy); - GetReq(XDGACloseFramebuffer, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XDGACloseFramebuffer; - req->screen = screen; - UnlockDisplay(dpy); - SyncHandle(); -} - - - -XDGAMode* XDGAQueryModes( - Display *dpy, - int screen, - int *num -){ - XExtDisplayInfo *dinfo = xdga_find_display (dpy); - xXDGAQueryModesReply rep; - xXDGAQueryModesReq *req; - XDGAMode *modes = NULL; - - *num = 0; - - XDGACheckExtension (dpy, dinfo, NULL); - - LockDisplay(dpy); - GetReq(XDGAQueryModes, req); - req->reqType = dinfo->codes->major_opcode; - req->dgaReqType = X_XDGAQueryModes; - req->screen = screen; - - if (_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - if(rep.length) { - xXDGAModeInfo info; - int i, size; - char *offset; - - size = rep.length << 2; - size -= rep.number * sz_xXDGAModeInfo; /* find text size */ - modes = (XDGAMode*)Xmalloc((rep.number * sizeof(XDGAMode)) + size); - offset = (char*)(&modes[rep.number]); /* start of text */ - - - if(modes) { - for(i = 0; i < rep.number; i++) { - _XRead(dpy, (char*)(&info), sz_xXDGAModeInfo); - - modes[i].num = info.num; - modes[i].verticalRefresh = - (float)info.vsync_num / (float)info.vsync_den; - modes[i].flags = info.flags; - modes[i].imageWidth = info.image_width; - modes[i].imageHeight = info.image_height; - modes[i].pixmapWidth = info.pixmap_width; - modes[i].pixmapHeight = info.pixmap_height; - modes[i].bytesPerScanline = info.bytes_per_scanline; - modes[i].byteOrder = info.byte_order; - modes[i].depth = info.depth; - modes[i].bitsPerPixel = info.bpp; - modes[i].redMask = info.red_mask; - modes[i].greenMask = info.green_mask; - modes[i].blueMask = info.blue_mask; - modes[i].visualClass = info.visual_class; - modes[i].viewportWidth = info.viewport_width; - modes[i].viewportHeight = info.viewport_height; - modes[i].xViewportStep = info.viewport_xstep; - modes[i].yViewportStep = info.viewport_ystep; - modes[i].maxViewportX = info.viewport_xmax; - modes[i].maxViewportY = info.viewport_ymax; - modes[i].viewportFlags = info.viewport_flags; - modes[i].reserved1 = info.reserved1; - modes[i].reserved2 = info.reserved2; - - _XRead(dpy, offset, info.name_size); - modes[i].name = offset; - offset += info.name_size; - } - *num = rep.number; - } else - _XEatData(dpy, rep.length << 2); - } - } - - UnlockDisplay(dpy); - SyncHandle(); - - return modes; -} - - -XDGADevice * -XDGASetMode( - Display *dpy, - int screen, - int mode -){ - XExtDisplayInfo *dinfo = xdga_find_display (dpy); - xXDGASetModeReply rep; - xXDGASetModeReq *req; - XDGADevice *dev = NULL; - Pixmap pid; - - XDGACheckExtension (dpy, dinfo, NULL); - - LockDisplay(dpy); - GetReq(XDGASetMode, req); - req->reqType = dinfo->codes->major_opcode; - req->dgaReqType = X_XDGASetMode; - req->screen = screen; - req->mode = mode; - req->pid = pid = XAllocID(dpy); - - if (_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - if(rep.length) { - xXDGAModeInfo info; - int size; - - size = rep.length << 2; - size -= sz_xXDGAModeInfo; /* get text size */ - - dev = (XDGADevice*)Xmalloc(sizeof(XDGADevice) + size); - - if(dev) { - _XRead(dpy, (char*)(&info), sz_xXDGAModeInfo); - - dev->mode.num = info.num; - dev->mode.verticalRefresh = - (float)info.vsync_num / (float)info.vsync_den; - dev->mode.flags = info.flags; - dev->mode.imageWidth = info.image_width; - dev->mode.imageHeight = info.image_height; - dev->mode.pixmapWidth = info.pixmap_width; - dev->mode.pixmapHeight = info.pixmap_height; - dev->mode.bytesPerScanline = info.bytes_per_scanline; - dev->mode.byteOrder = info.byte_order; - dev->mode.depth = info.depth; - dev->mode.bitsPerPixel = info.bpp; - dev->mode.redMask = info.red_mask; - dev->mode.greenMask = info.green_mask; - dev->mode.blueMask = info.blue_mask; - dev->mode.visualClass = info.visual_class; - dev->mode.viewportWidth = info.viewport_width; - dev->mode.viewportHeight = info.viewport_height; - dev->mode.xViewportStep = info.viewport_xstep; - dev->mode.yViewportStep = info.viewport_ystep; - dev->mode.maxViewportX = info.viewport_xmax; - dev->mode.maxViewportY = info.viewport_ymax; - dev->mode.viewportFlags = info.viewport_flags; - dev->mode.reserved1 = info.reserved1; - dev->mode.reserved2 = info.reserved2; - - dev->mode.name = (char*)(&dev[1]); - _XRead(dpy, dev->mode.name, info.name_size); - - dev->pixmap = (rep.flags & XDGAPixmap) ? pid : 0; - dev->data = XDGAGetMappedMemory(screen); - - if(dev->data) - dev->data += rep.offset; - } - /* not sure what to do if the allocation fails */ - } - } - - UnlockDisplay(dpy); - SyncHandle(); - - return dev; -} - - -void XDGASetViewport( - Display *dpy, - int screen, - int x, - int y, - int flags -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXDGASetViewportReq *req; - - XextSimpleCheckExtension (dpy, info, xdga_extension_name); - - LockDisplay(dpy); - GetReq(XDGASetViewport, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XDGASetViewport; - req->screen = screen; - req->x = x; - req->y = y; - req->flags = flags; - UnlockDisplay(dpy); - SyncHandle(); -} - - -void XDGAInstallColormap( - Display *dpy, - int screen, - Colormap cmap -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXDGAInstallColormapReq *req; - - XextSimpleCheckExtension (dpy, info, xdga_extension_name); - - LockDisplay(dpy); - GetReq(XDGAInstallColormap, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XDGAInstallColormap; - req->screen = screen; - req->cmap = cmap; - UnlockDisplay(dpy); - SyncHandle(); -} - -void XDGASelectInput( - Display *dpy, - int screen, - long mask -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXDGASelectInputReq *req; - - XextSimpleCheckExtension (dpy, info, xdga_extension_name); - - LockDisplay(dpy); - GetReq(XDGASelectInput, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XDGASelectInput; - req->screen = screen; - req->mask = mask; - UnlockDisplay(dpy); - SyncHandle(); -} - -void XDGAFillRectangle( - Display *dpy, - int screen, - int x, - int y, - unsigned int width, - unsigned int height, - unsigned long color -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXDGAFillRectangleReq *req; - - XextSimpleCheckExtension (dpy, info, xdga_extension_name); - - LockDisplay(dpy); - GetReq(XDGAFillRectangle, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XDGAFillRectangle; - req->screen = screen; - req->x = x; - req->y = y; - req->width = width; - req->height = height; - req->color = color; - UnlockDisplay(dpy); - SyncHandle(); -} - -void XDGACopyArea( - Display *dpy, - int screen, - int srcx, - int srcy, - unsigned int width, - unsigned int height, - int dstx, - int dsty -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXDGACopyAreaReq *req; - - XextSimpleCheckExtension (dpy, info, xdga_extension_name); - - LockDisplay(dpy); - GetReq(XDGACopyArea, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XDGACopyArea; - req->screen = screen; - req->srcx = srcx; - req->srcy = srcy; - req->width = width; - req->height = height; - req->dstx = dstx; - req->dsty = dsty; - UnlockDisplay(dpy); - SyncHandle(); -} - -void XDGACopyTransparentArea( - Display *dpy, - int screen, - int srcx, - int srcy, - unsigned int width, - unsigned int height, - int dstx, - int dsty, - unsigned long key -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXDGACopyTransparentAreaReq *req; - - XextSimpleCheckExtension (dpy, info, xdga_extension_name); - - LockDisplay(dpy); - GetReq(XDGACopyTransparentArea, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XDGACopyTransparentArea; - req->screen = screen; - req->srcx = srcx; - req->srcy = srcy; - req->width = width; - req->height = height; - req->dstx = dstx; - req->dsty = dsty; - req->key = key; - UnlockDisplay(dpy); - SyncHandle(); -} - - -int XDGAGetViewportStatus( - Display *dpy, - int screen -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXDGAGetViewportStatusReply rep; - xXDGAGetViewportStatusReq *req; - int status = 0; - - XDGACheckExtension (dpy, info, 0); - - LockDisplay(dpy); - GetReq(XDGAGetViewportStatus, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XDGAGetViewportStatus; - req->screen = screen; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) - status = rep.status; - UnlockDisplay(dpy); - SyncHandle(); - return status; -} - -void XDGASync( - Display *dpy, - int screen -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXDGASyncReply rep; - xXDGASyncReq *req; - - XextSimpleCheckExtension (dpy, info, xdga_extension_name); - - LockDisplay(dpy); - GetReq(XDGASync, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XDGASync; - req->screen = screen; - _XReply(dpy, (xReply *)&rep, 0, xFalse); - UnlockDisplay(dpy); - SyncHandle(); -} - - -void XDGAChangePixmapMode( - Display *dpy, - int screen, - int *x, - int *y, - int mode -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXDGAChangePixmapModeReq *req; - xXDGAChangePixmapModeReply rep; - - XextSimpleCheckExtension (dpy, info, xdga_extension_name); - - LockDisplay(dpy); - GetReq(XDGAChangePixmapMode, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XDGAChangePixmapMode; - req->screen = screen; - req->x = *x; - req->y = *y; - req->flags = mode; - _XReply(dpy, (xReply *)&rep, 0, xFalse); - *x = rep.x; - *y = rep.y; - UnlockDisplay(dpy); - SyncHandle(); -} - -Colormap XDGACreateColormap( - Display *dpy, - int screen, - XDGADevice *dev, - int alloc -){ - XExtDisplayInfo *info = xdga_find_display (dpy); - xXDGACreateColormapReq *req; - Colormap cid; - - XDGACheckExtension (dpy, info, -1); - - LockDisplay(dpy); - GetReq(XDGACreateColormap, req); - req->reqType = info->codes->major_opcode; - req->dgaReqType = X_XDGACreateColormap; - req->screen = screen; - req->mode = dev->mode.num; - req->alloc = alloc; - cid = req->id = XAllocID(dpy); - UnlockDisplay(dpy); - SyncHandle(); - - return cid; -} - - -void XDGAKeyEventToXKeyEvent( - XDGAKeyEvent* dk, - XKeyEvent* xk -){ - xk->type = dk->type; - xk->serial = dk->serial; - xk->send_event = False; - xk->display = dk->display; - xk->window = RootWindow(dk->display, dk->screen); - xk->root = xk->window; - xk->subwindow = None; - xk->time = dk->time; - xk->x = xk->y = xk->x_root = xk->y_root = 0; - xk->state = dk->state; - xk->keycode = dk->keycode; - xk->same_screen = True; -} - -#include <X11/Xmd.h> -#include <X11/extensions/xf86dga.h> -#include <stdlib.h> -#include <stdio.h> -#include <fcntl.h> -#if defined(ISC) -# define HAS_SVR3_MMAP -# include <sys/types.h> -# include <errno.h> - -# include <sys/at_ansi.h> -# include <sys/kd.h> - -# include <sys/sysmacros.h> -# include <sys/immu.h> -# include <sys/region.h> - -# include <sys/mmap.h> -#else -# if defined(Lynx) && defined(NO_MMAP) -# include <sys/types.h> -# include <errno.h> -# include <smem.h> -# else -# if !defined(__UNIXOS2__) -# include <sys/mman.h> -# endif -# endif -#endif -#include <sys/wait.h> -#include <signal.h> -#include <unistd.h> - -#if defined(SVR4) && !defined(sun) -#define DEV_MEM "/dev/pmem" -#elif defined(SVR4) && defined(sun) -#define DEV_MEM "/dev/xsvc" -#elif defined(HAS_APERTURE_DRV) -#define DEV_MEM "/dev/xf86" -#else -#define DEV_MEM "/dev/mem" -#endif - - - -typedef struct _DGAMapRec{ - unsigned char *physical; - unsigned char *virtual; - CARD32 size; - int fd; - int screen; - struct _DGAMapRec *next; -} DGAMapRec, *DGAMapPtr; - -static Bool -DGAMapPhysical(int, char*, unsigned char*, CARD32, CARD32, CARD32, DGAMapPtr); -static void DGAUnmapPhysical(DGAMapPtr); - -static DGAMapPtr _Maps = NULL; - - -unsigned char* -XDGAGetMappedMemory(int screen) -{ - DGAMapPtr pMap = _Maps; - unsigned char *pntr = NULL; - - while(pMap != NULL) { - if(pMap->screen == screen) { - pntr = pMap->virtual; - break; - } - pMap = pMap->next; - } - - return pntr; -} - -Bool -XDGAMapFramebuffer( - int screen, - char *name, /* optional device name */ - unsigned char* base, /* physical memory */ - CARD32 size, /* size */ - CARD32 offset, /* optional offset */ - CARD32 extra /* optional extra data */ -){ - DGAMapPtr pMap = _Maps; - Bool result; - - /* is it already mapped ? */ - while(pMap != NULL) { - if(pMap->screen == screen) - return True; - pMap = pMap->next; - } - - if(extra & XDGANeedRoot) { - /* we should probably check if we have root permissions and - return False here */ - - } - - pMap = (DGAMapPtr)Xmalloc(sizeof(DGAMapRec)); - - result = DGAMapPhysical(screen, name, base, size, offset, extra, pMap); - - if(result) { - pMap->next = _Maps; - _Maps = pMap; - } else - Xfree(pMap); - - return result; -} - -void -XDGAUnmapFramebuffer(int screen) -{ - DGAMapPtr pMap = _Maps; - DGAMapPtr pPrev = NULL; - - /* is it already mapped */ - while(pMap != NULL) { - if(pMap->screen == screen) - break; - pPrev = pMap; - pMap = pMap->next; - } - - if(!pMap) - return; - - DGAUnmapPhysical(pMap); - - if(!pPrev) - _Maps = pMap->next; - else - pPrev->next = pMap->next; - - Xfree(pMap); -} - - -static Bool -DGAMapPhysical( - int screen, - char *name, /* optional device name */ - unsigned char* base, /* physical memory */ - CARD32 size, /* size */ - CARD32 offset, /* optional offset */ - CARD32 extra, /* optional extra data */ - DGAMapPtr pMap -) { -#if defined(ISC) && defined(HAS_SVR3_MMAP) - struct kd_memloc mloc; -#elif defined(__UNIXOS2__) - APIRET rc; - ULONG action; - HFILE hfd; -#endif - - base += offset; - - pMap->screen = screen; - pMap->physical = base; - pMap->size = size; - -#if defined(ISC) && defined(HAS_SVR3_MMAP) - if ((pMap->fd = open("/dev/mmap", O_RDWR)) < 0) - return False; - mloc.vaddr = (char *)0; - mloc.physaddr = (char *)base; - mloc.length = size; - mloc.ioflg=1; - - if ((pMap->virtual = (void *)ioctl(pMap->fd, MAP, &mloc)) == (void *)-1) - return False; -#elif defined (__UNIXOS2__) - /* - * Dragon warning here! /dev/pmap$ is never closed, except on progam exit. - * Consecutive calling of this routine will make PMAP$ driver run out - * of memory handles. Some umap/close mechanism should be provided - */ - - rc = DosOpen("/dev/pmap$", &hfd, &action, 0, FILE_NORMAL, FILE_OPEN, - OPEN_ACCESS_READWRITE | OPEN_SHARE_DENYNONE, (PEAOP2)NULL); - if (rc != 0) - return False; - { - struct map_ioctl { - union { - ULONG phys; - void* user; - } a; - ULONG size; - } pmap,dmap; - ULONG plen,dlen; -#define XFREE86_PMAP 0x76 -#define PMAP_MAP 0x44 - - pmap.a.phys = base; - pmap.size = size; - rc = DosDevIOCtl(hfd, XFREE86_PMAP, PMAP_MAP, - (PULONG)&pmap, sizeof(pmap), &plen, - (PULONG)&dmap, sizeof(dmap), &dlen); - if (rc == 0) { - pMap->virtual = dmap.a.user; - } - } - if (rc != 0) - return False; -#elif defined (Lynx) && defined(NO_MMAP) - pMap->virtual = smem_create("XF86DGA", (char*)base, size, SM_READ|SM_WRITE); -#else -#ifndef MAP_FILE -#define MAP_FILE 0 -#endif - if (!name) - name = DEV_MEM; - if ((pMap->fd = open(name, O_RDWR)) < 0) - return False; - pMap->virtual = mmap(NULL, size, PROT_READ | PROT_WRITE, - MAP_FILE | MAP_SHARED, pMap->fd, (off_t)base); - if (pMap->virtual == (void *)-1) - return False; - mprotect(pMap->virtual, size, PROT_READ | PROT_WRITE); -#endif - - return True; -} - - - -static void -DGAUnmapPhysical(DGAMapPtr pMap) -{ -#if defined(ISC) && defined(HAS_SVR3_MMAP) - /* XXX Add unmapping code here. */ -#elif defined (__UNIXOS2__) - /* XXX Add unmapping code here. */ -#elif defined(Lynx) && defined(NO_MMAP) - /* XXX this doesn't allow enable after disable */ - smem_create(NULL, pMap->virtual, pMap->size, SM_DETACH); - smem_remove("XF86DGA"); -#else - if (pMap->virtual && pMap->virtual != (void *)-1) { - mprotect(pMap->virtual,pMap->size, PROT_READ); - munmap(pMap->virtual, pMap->size); - pMap->virtual = 0; - } - if (pMap->fd >= 0) { - close(pMap->fd); - pMap->fd = -1; - } -#endif -} diff --git a/nx-X11/lib/Xxf86dga/Xxf86dga-def.cpp b/nx-X11/lib/Xxf86dga/Xxf86dga-def.cpp deleted file mode 100644 index 2318b39c3..000000000 --- a/nx-X11/lib/Xxf86dga/Xxf86dga-def.cpp +++ /dev/null @@ -1,16 +0,0 @@ -LIBRARY libXxf86dga -EXPORTS - XF86DGAQueryExtension - XF86DGAQueryDirectVideo - XF86DGAQueryVersion - XF86DGAInstallColormap - XF86DGAGetVideoLL - XF86DGADirectVideoLL -; XF86DGAGetViewPort - XF86DGASetViewPort - XF86DGAGetVidPage - XF86DGASetVidPage - XF86DGADirectVideo - XF86DGAGetVideo - -/* $XFree86$ */ |