]> git.sesse.net Git - rdpsrv/blobdiff - Xserver/programs/Xserver/include/servermd.h
Import X server from vnc-3.3.7.
[rdpsrv] / Xserver / programs / Xserver / include / servermd.h
diff --git a/Xserver/programs/Xserver/include/servermd.h b/Xserver/programs/Xserver/include/servermd.h
new file mode 100644 (file)
index 0000000..744c295
--- /dev/null
@@ -0,0 +1,562 @@
+/***********************************************************
+
+Copyright (c) 1987  X Consortium
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of the X Consortium shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from the X Consortium.
+
+
+Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+
+                        All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its 
+documentation for any purpose and without fee is hereby granted, 
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in 
+supporting documentation, and that the name of Digital not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.  
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+#ifndef SERVERMD_H
+#define SERVERMD_H 1
+/* $XConsortium: servermd.h /main/58 1996/12/02 10:22:09 lehors $ */
+/* $XFree86: xc/programs/Xserver/include/servermd.h,v 3.19.2.3 1997/07/28 14:17:34 dawes Exp $ */
+
+/*
+ * Machine dependent values:
+ * GLYPHPADBYTES should be chosen with consideration for the space-time
+ * trade-off.  Padding to 0 bytes means that there is no wasted space
+ * in the font bitmaps (both on disk and in memory), but that access of
+ * the bitmaps will cause odd-address memory references.  Padding to
+ * 2 bytes would ensure even address memory references and would
+ * be suitable for a 68010-class machine, but at the expense of wasted
+ * space in the font bitmaps.  Padding to 4 bytes would be good
+ * for real 32 bit machines, etc.  Be sure that you tell the font
+ * compiler what kind of padding you want because its defines are
+ * kept separate from this.  See server/include/font.h for how
+ * GLYPHPADBYTES is used.
+ *
+ * Along with this, you should choose an appropriate value for
+ * GETLEFTBITS_ALIGNMENT, which is used in ddx/mfb/maskbits.h.  This
+ * constant choses what kind of memory references are guarenteed during
+ * font access; either 1, 2 or 4, for byte, word or longword access,
+ * respectively.  For instance, if you have decided to to have
+ * GLYPHPADBYTES == 4, then it is pointless for you to have a
+ * GETLEFTBITS_ALIGNMENT > 1, because the padding of the fonts has already
+ * guarenteed you that your fonts are longword aligned.  On the other
+ * hand, even if you have chosen GLYPHPADBYTES == 1 to save space, you may
+ * also decide that the computing involved in aligning the pointer is more
+ * costly than an odd-address access; you choose GETLEFTBITS_ALIGNMENT == 1.
+ *
+ * Next, choose the tuning parameters which are appropriate for your
+ * hardware; these modify the behaviour of the raw frame buffer code
+ * in ddx/mfb and ddx/cfb.  Defining these incorrectly will not cause
+ * the server to run incorrectly, but defining these correctly will
+ * cause some noticeable speed improvements:
+ *
+ *  AVOID_MEMORY_READ - (8-bit cfb only)
+ *     When stippling pixels on the screen (polytext and pushpixels),
+ *     don't read long words from the display and mask in the
+ *     appropriate values.  Rather, perform multiple byte/short/long
+ *     writes as appropriate.  This option uses many more instructions
+ *     but runs much faster when the destination is much slower than
+ *     the CPU and at least 1 level of write buffer is availible (2
+ *     is much better).  Defined currently for SPARC and MIPS.
+ *
+ *  FAST_CONSTANT_OFFSET_MODE - (cfb and mfb)
+ *     This define is used on machines which have no auto-increment
+ *     addressing mode, but do have an effectively free constant-offset
+ *     addressing mode.  Currently defined for MIPS and SPARC, even though
+ *     I remember the cg6 as performing better without it (cg3 definitely
+ *     performs better with it).
+ *     
+ *  LARGE_INSTRUCTION_CACHE -
+ *     This define increases the number of times some loops are
+ *     unrolled.  On 68020 machines (with 256 bytes of i-cache),
+ *     this define will slow execution down as instructions miss
+ *     the cache frequently.  On machines with real i-caches, this
+ *     reduces loop overhead, causing a slight performance improvement.
+ *     Currently defined for MIPS and SPARC
+ *
+ *  FAST_UNALIGNED_READS -
+ *     For machines with more memory bandwidth than CPU, this
+ *     define uses unaligned reads for 8-bit BitBLT instead of doing
+ *     aligned reads and combining the results with shifts and
+ *     logical-ors.  Currently defined for 68020 and vax.
+ *  PLENTIFUL_REGISTERS -
+ *     For machines with > 20 registers.  Currently used for
+ *     unrolling the text painting code a bit more.  Currently
+ *     defined for MIPS.
+ *  SHARED_IDCACHE -
+ *     For non-Harvard RISC machines, those which share the same
+ *     CPU memory bus for instructions and data.  This unrolls some
+ *     solid fill loops which are otherwise best left rolled up.
+ *     Currently defined for SPARC.
+ */
+
+#ifdef vax
+
+#define IMAGE_BYTE_ORDER       LSBFirst        /* Values for the VAX only */
+#define BITMAP_BIT_ORDER       LSBFirst
+#define        GLYPHPADBYTES           1
+#define GETLEFTBITS_ALIGNMENT  4
+#define FAST_UNALIGNED_READS
+
+#endif /* vax */
+
+#if (defined(Lynx) && defined(__powerpc__))
+
+/* For now this is for Xvfb only */
+#define IMAGE_BYTE_ORDER        MSBFirst
+#define BITMAP_BIT_ORDER        MSBFirst
+#define GLYPHPADBYTES           4
+#define GETLEFTBITS_ALIGNMENT   1
+
+#define LARGE_INSTRUCTION_CACHE
+#define FAST_CONSTANT_OFFSET_MODE
+#define PLENTIFUL_REGISTERS
+#define AVOID_MEMORY_READ
+
+#define FAST_MEMCPY
+
+#endif /* LynxOS PowerPC */
+
+#if (defined(sun) && !(defined(i386) && defined(SVR4))) || \
+    (defined(AMOEBA) && (defined(sparc) || defined(mc68000))) || \
+    (defined(__uxp__) && (defined(sparc) || defined(mc68000))) || \
+    (defined(Lynx) && defined(__sparc__)) || \
+    ((defined(__NetBSD__) || defined(__OpenBSD__)) && \
+     (defined(__sparc__) || defined(__mc68000__)))
+
+#if defined(sun386) || defined(sun5)
+# define IMAGE_BYTE_ORDER      LSBFirst        /* Values for the SUN only */
+# define BITMAP_BIT_ORDER      LSBFirst
+#else
+# define IMAGE_BYTE_ORDER      MSBFirst        /* Values for the SUN only */
+# define BITMAP_BIT_ORDER      MSBFirst
+#endif
+
+#ifdef sparc
+# define AVOID_MEMORY_READ
+# define LARGE_INSTRUCTION_CACHE
+# define FAST_CONSTANT_OFFSET_MODE
+# define SHARED_IDCACHE
+#endif
+
+#ifdef mc68020
+#define FAST_UNALIGNED_READS
+#endif
+
+#define        GLYPHPADBYTES           4
+#define GETLEFTBITS_ALIGNMENT  1
+
+#endif /* sun && !(i386 && SVR4) */
+
+
+#if defined(AIXV3)
+
+#define IMAGE_BYTE_ORDER        MSBFirst        /* Values for the RISC/6000 */
+#define BITMAP_BIT_ORDER        MSBFirst
+#define GLYPHPADBYTES           4
+#define GETLEFTBITS_ALIGNMENT   1
+
+#define LARGE_INSTRUCTION_CACHE
+#define FAST_CONSTANT_OFFSET_MODE
+#define PLENTIFUL_REGISTERS
+#define AVOID_MEMORY_READ
+
+#define FAST_MEMCPY
+#endif /* AIXV3 */
+
+#if defined(ibm032) || defined (ibm)
+
+#ifdef i386
+# define IMAGE_BYTE_ORDER      LSBFirst        /* Value for PS/2 only */
+#else
+# define IMAGE_BYTE_ORDER      MSBFirst        /* Values for the RT only*/
+#endif
+#define BITMAP_BIT_ORDER       MSBFirst
+#define        GLYPHPADBYTES           1
+#define GETLEFTBITS_ALIGNMENT  4
+/* ibm pcc doesn't understand pragmas. */
+
+#ifdef i386
+#define BITMAP_SCANLINE_UNIT   8
+#endif
+
+#endif /* ibm */
+
+#ifdef hpux
+
+#define IMAGE_BYTE_ORDER       MSBFirst        /* Values for the HP only */
+#define BITMAP_BIT_ORDER       MSBFirst
+#define        GLYPHPADBYTES           2               /* to match product server */
+#define        GETLEFTBITS_ALIGNMENT   4               /* PA forces longs to 4 */
+                                               /* byte boundries */
+#define AVOID_MEMORY_READ
+#define FAST_CONSTANT_OFFSET_MODE
+#define LARGE_INSTRUCTION_CACHE
+#define PLENTIFUL_REGISTERS
+
+#endif /* hpux */
+
+#if defined (M4310) || defined(M4315) || defined(M4317) || defined(M4319) || defined(M4330)
+
+#define IMAGE_BYTE_ORDER       MSBFirst        /* Values for Pegasus only */
+#define BITMAP_BIT_ORDER       MSBFirst
+#define GLYPHPADBYTES          4
+#define GETLEFTBITS_ALIGNMENT  1
+
+#define FAST_UNALIGNED_READS
+
+#endif /* tektronix */
+
+#ifdef macII
+
+#define IMAGE_BYTE_ORDER       MSBFirst        /* Values for the MacII only */
+#define BITMAP_BIT_ORDER       MSBFirst
+#define GLYPHPADBYTES          4
+#define GETLEFTBITS_ALIGNMENT  1
+
+/* might want FAST_UNALIGNED_READS for frame buffers with < 1us latency */
+
+#endif /* macII */
+
+#if (defined(mips) || defined(__mips)) && !defined(sgi)
+
+#if defined(MIPSEL) || defined(__MIPSEL__)
+# define IMAGE_BYTE_ORDER      LSBFirst        /* Values for the PMAX only */
+# define BITMAP_BIT_ORDER      LSBFirst
+# define GLYPHPADBYTES         4
+# define GETLEFTBITS_ALIGNMENT 1
+#else
+# define IMAGE_BYTE_ORDER      MSBFirst        /* Values for the MIPS only */
+# define BITMAP_BIT_ORDER      MSBFirst
+# define GLYPHPADBYTES         4
+# define GETLEFTBITS_ALIGNMENT 1
+#endif
+
+#define AVOID_MEMORY_READ
+#define FAST_CONSTANT_OFFSET_MODE
+#define LARGE_INSTRUCTION_CACHE
+#define PLENTIFUL_REGISTERS
+
+#endif /* mips */
+
+#if defined(__alpha) || defined(__alpha__) || defined(__alphaCross)
+# define IMAGE_BYTE_ORDER      LSBFirst        /* Values for the Alpha only */
+
+# if defined(XF86MONOVGA) || defined(XF86VGA16) || defined(XF86MONO)
+#  define BITMAP_BIT_ORDER      MSBFirst
+# else
+#  define BITMAP_BIT_ORDER      LSBFirst
+# endif
+
+# if defined(XF86MONOVGA) || defined(XF86VGA16)
+#  define BITMAP_SCANLINE_UNIT  8
+# else
+   /* pad scanline to a longword */
+#  define BITMAP_SCANLINE_UNIT                 64
+# endif
+
+# define BITMAP_SCANLINE_PAD                   64
+# define LOG2_BITMAP_PAD                       6
+# define LOG2_BYTES_PER_SCANLINE_PAD           3
+# define GLYPHPADBYTES         4
+# define GETLEFTBITS_ALIGNMENT 1
+# define FAST_CONSTANT_OFFSET_MODE
+# define LARGE_INSTRUCTION_CACHE
+# define PLENTIFUL_REGISTERS
+
+/* Add for handling protocol XPutImage and XGetImage; see comment below */
+#define INTERNAL_VS_EXTERNAL_PADDING
+#define BITMAP_SCANLINE_UNIT_PROTO             32
+
+#define BITMAP_SCANLINE_PAD_PROTO              32
+#define LOG2_BITMAP_PAD_PROTO                  5
+#define LOG2_BYTES_PER_SCANLINE_PAD_PROTO      2
+
+#endif /* alpha */
+
+#ifdef stellar
+
+#define IMAGE_BYTE_ORDER       MSBFirst       /* Values for the stellar only*/
+#define BITMAP_BIT_ORDER       MSBFirst
+#define        GLYPHPADBYTES           4
+#define GETLEFTBITS_ALIGNMENT  4
+#define IMAGE_BUFSIZE          (64*1024)
+/*
+ * Use SysV random number generator.
+ */
+#define random rand
+
+#endif /* stellar */
+
+#ifdef luna
+
+#define IMAGE_BYTE_ORDER        MSBFirst       /* Values for the OMRON only*/
+#define BITMAP_BIT_ORDER       MSBFirst
+#define        GLYPHPADBYTES           4
+#define GETLEFTBITS_ALIGNMENT  1
+
+#ifndef mc68000
+#define FAST_CONSTANT_OFFSET_MODE
+#define AVOID_MEMORY_READ
+#define LARGE_INSTRUCTION_CACHE
+#define PLENTIFUL_REGISTERS
+#endif
+
+#endif /* luna */
+
+#if (defined(i386) && (defined(SVR4) || defined(SYSV) || (defined(sun) && defined(SVR4))) || defined(__bsdi__) || (defined(__NetBSD__) && defined(__i386__)) || (defined(__OpenBSD__) && defined(__i386__)) || defined(__FreeBSD__) || defined(MACH386) || (defined(linux) && !(defined(__mc68000__) || defined(PPC) || defined(__sparc__) || defined(__s390__))) || (defined(AMOEBA) && defined(i80386)) || defined(MINIX) || defined(__EMX__) || (defined(Lynx) && defined(__i386__)))
+
+#ifndef IMAGE_BYTE_ORDER
+#define IMAGE_BYTE_ORDER       LSBFirst
+#endif
+
+#ifndef BITMAP_BIT_ORDER
+# if defined(XF86MONOVGA) || defined(XF86VGA16) || defined(XF86MONO)
+#  define BITMAP_BIT_ORDER      MSBFirst
+# else
+#  define BITMAP_BIT_ORDER      LSBFirst
+# endif
+#endif
+
+#ifndef BITMAP_SCANLINE_UNIT
+# if defined(XF86MONOVGA) || defined(XF86VGA16)
+#  define BITMAP_SCANLINE_UNIT  8
+# endif
+#endif
+
+#ifndef GLYPHPADBYTES
+#define GLYPHPADBYTES           4
+#endif
+
+#define GETLEFTBITS_ALIGNMENT  1
+#define AVOID_MEMORY_READ
+#ifdef XSVGA
+#define AVOID_GLYPHBLT
+#define FAST_CONSTANT_OFFSET_MODE
+#define FAST_MEMCPY
+#define NO_ONE_RECT
+#endif
+
+#endif /* SVR4 / BSD / i386 */
+
+#if defined (linux) && defined (__mc68000__)
+
+#define IMAGE_BYTE_ORDER       MSBFirst
+#define BITMAP_BIT_ORDER       MSBFirst
+#define FAST_UNALIGNED_READS
+#define GLYPHPADBYTES          4
+#define GETLEFTBITS_ALIGNMENT  1
+
+#endif /* linux/m68k */
+
+#if defined (linux) && defined (PPC)
+
+#define IMAGE_BYTE_ORDER       MSBFirst
+#define BITMAP_BIT_ORDER       MSBFirst
+#define GLYPHPADBYTES          4
+#define GETLEFTBITS_ALIGNMENT  1
+
+#define LARGE_INSTRUCTION_CACHE
+#define FAST_CONSTANT_OFFSET_MODE
+
+#endif /* linux/PPC */
+
+#if defined (linux) && defined (__sparc__)
+
+#define IMAGE_BYTE_ORDER       MSBFirst
+#define BITMAP_BIT_ORDER       MSBFirst
+#define GLYPHPADBYTES          4
+#define GETLEFTBITS_ALIGNMENT  1
+
+#endif /* linux/__sparc__ */
+
+#if defined (linux) && defined (__s390__)
+
+#define IMAGE_BYTE_ORDER       MSBFirst
+#define BITMAP_BIT_ORDER       MSBFirst
+#define GLYPHPADBYTES          4
+#define GETLEFTBITS_ALIGNMENT  1
+
+#endif /* linux/__s390__ */
+
+#if defined (linux) && defined (PPC)
+
+#define IMAGE_BYTE_ORDER       MSBFirst
+#define BITMAP_BIT_ORDER       MSBFirst
+#define GLYPHPADBYTES          4
+#define GETLEFTBITS_ALIGNMENT  1
+
+#define LARGE_INSTRUCTION_CACHE
+#define FAST_CONSTANT_OFFSET_MODE
+
+#endif /* linux/PPC */
+
+#ifdef sgi
+
+#define IMAGE_BYTE_ORDER       MSBFirst
+#define BITMAP_BIT_ORDER       MSBFirst
+
+#if (_MIPS_SZLONG == 64)
+
+# define GLYPHPADBYTES         4
+# define GETLEFTBITS_ALIGNMENT 1
+
+/* pad scanline to a longword */
+#define BITMAP_SCANLINE_UNIT                   64
+
+#define BITMAP_SCANLINE_PAD                    64
+#define LOG2_BITMAP_PAD                                6
+#define LOG2_BYTES_PER_SCANLINE_PAD            3
+
+/* Add for handling protocol XPutImage and XGetImage; see comment below */
+#define INTERNAL_VS_EXTERNAL_PADDING
+#define BITMAP_SCANLINE_UNIT_PROTO             32
+
+#define BITMAP_SCANLINE_PAD_PROTO              32
+#define LOG2_BITMAP_PAD_PROTO                  5
+#define LOG2_BYTES_PER_SCANLINE_PAD_PROTO      2
+
+#else
+
+#define GLYPHPADBYTES          2
+#define GETLEFTBITS_ALIGNMENT  4
+
+#endif
+
+#define AVOID_MEMORY_READ
+#define FAST_CONSTANT_OFFSET_MODE
+#define LARGE_INSTRUCTION_CACHE
+#define PLENTIFUL_REGISTERS
+
+#endif
+
+/* size of buffer to use with GetImage, measured in bytes. There's obviously
+ * a trade-off between the amount of stack (or whatever ALLOCATE_LOCAL gives
+ * you) used and the number of times the ddx routine has to be called.
+ * 
+ * for a 1024 x 864 bit monochrome screen  with a 32 bit word we get 
+ * 8192/4 words per buffer 
+ * (1024/32) = 32 words per scanline
+ * 2048 words per buffer / 32 words per scanline = 64 scanlines per buffer
+ * 864 scanlines / 64 scanlines = 14 buffers to draw a full screen
+ */
+#ifndef IMAGE_BUFSIZE
+#define IMAGE_BUFSIZE          8192
+#endif
+
+/* pad scanline to a longword */
+#ifndef BITMAP_SCANLINE_UNIT
+#define BITMAP_SCANLINE_UNIT   32
+#endif
+
+#ifndef BITMAP_SCANLINE_PAD
+#define BITMAP_SCANLINE_PAD  32
+#define LOG2_BITMAP_PAD                5
+#define LOG2_BYTES_PER_SCANLINE_PAD    2
+#endif
+
+/* 
+ *   This returns the number of padding units, for depth d and width w.
+ * For bitmaps this can be calculated with the macros above.
+ * Other depths require either grovelling over the formats field of the
+ * screenInfo or hardwired constants.
+ */
+
+typedef struct _PaddingInfo {
+       int     padRoundUp;     /* pixels per pad unit - 1 */
+       int     padPixelsLog2;  /* log 2 (pixels per pad unit) */
+       int     padBytesLog2;   /* log 2 (bytes per pad unit) */
+       int     notPower2;      /* bitsPerPixel not a power of 2 */
+       int     bytesPerPixel;  /* only set when notPower2 is TRUE */
+} PaddingInfo;
+extern PaddingInfo PixmapWidthPaddingInfo[];
+
+#define PixmapWidthInPadUnits(w, d) \
+    (PixmapWidthPaddingInfo[d].notPower2 ? \
+    (((int)(w) * PixmapWidthPaddingInfo[d].bytesPerPixel +  \
+                PixmapWidthPaddingInfo[d].bytesPerPixel) >> \
+       PixmapWidthPaddingInfo[d].padBytesLog2) : \
+    ((int)((w) + PixmapWidthPaddingInfo[d].padRoundUp) >> \
+       PixmapWidthPaddingInfo[d].padPixelsLog2))
+
+/*
+ *     Return the number of bytes to which a scanline of the given
+ * depth and width will be padded.
+ */
+#define PixmapBytePad(w, d) \
+    (PixmapWidthInPadUnits(w, d) << PixmapWidthPaddingInfo[d].padBytesLog2)
+
+#define BitmapBytePad(w) \
+    (((int)((w) + BITMAP_SCANLINE_PAD - 1) >> LOG2_BITMAP_PAD) << LOG2_BYTES_PER_SCANLINE_PAD)
+
+#ifdef INTERNAL_VS_EXTERNAL_PADDING
+
+/*  This is defined if the server's internal padding is different from the padding
+ *  advertised in the protocol.  The protocol does not allow for padding to
+ *  64 bits, for example, so if the server wants to use 64 bit padding internally,
+ *  it has to advertise 32 bit padding and do padding fixups whenever images
+ *  cross the wire.  (See ProcGetImage and ProcPutImage.)
+ *
+ *  The macros and constants that end in Proto or PROTO refer to the advertised
+ *  padding, and the ones without Proto are for internal padding.
+ */
+
+extern PaddingInfo PixmapWidthPaddingInfoProto[];
+
+#define PixmapWidthInPadUnitsProto(w, d) \
+    (PixmapWidthPaddingInfoProto[d].notPower2 ? \
+    (((int)(w) * PixmapWidthPaddingInfoProto[d].bytesPerPixel +  \
+                PixmapWidthPaddingInfoProto[d].bytesPerPixel) >> \
+       PixmapWidthPaddingInfoProto[d].padBytesLog2) : \
+    ((int)((w) + PixmapWidthPaddingInfoProto[d].padRoundUp) >> \
+       PixmapWidthPaddingInfoProto[d].padPixelsLog2))
+
+#define PixmapBytePadProto(w, d) \
+    (PixmapWidthInPadUnitsProto(w, d) << \
+    PixmapWidthPaddingInfoProto[d].padBytesLog2)
+
+#define BitmapBytePadProto(w) \
+    ((((w) + BITMAP_SCANLINE_PAD_PROTO - 1) >> LOG2_BITMAP_PAD_PROTO) \
+    << LOG2_BYTES_PER_SCANLINE_PAD_PROTO)
+
+#else /* protocol and internal padding is the same */
+
+#define PixmapWidthInPadUnitsProto(w, d) PixmapWidthInPadUnits(w, d)
+#define PixmapBytePadProto(w, d) PixmapBytePad(w, d)
+#define BitmapBytePadProto(w) BitmapBytePad(w)
+
+#endif /* protocol vs. internal padding  */
+
+#endif /* SERVERMD_H */