Formatting cleanup, dead code removal. Remove N() namespacing macro,
useless. Remove SIGIO handling functions as they're server-only and properly belong in libdri.main
parent
0a211db23c
commit
22e41ef083
|
@ -0,0 +1,15 @@
|
|||
2006-02-20 Adam Jackson <ajax@freedesktop.org>
|
||||
|
||||
* ChangeLog:
|
||||
* Makefile.am:
|
||||
Created.
|
||||
|
||||
* TODO:
|
||||
* xf86drm.c:
|
||||
* xf86drm.h:
|
||||
* xf86drmHash.c:
|
||||
* xf86drmRandom.c:
|
||||
* xf86drmSL.c:
|
||||
Formatting cleanup, dead code removal. Remove N() namespacing macro,
|
||||
useless. Remove SIGIO handling functions as they're server-only and
|
||||
properly belong in libdri.
|
|
@ -27,3 +27,5 @@ libdrm_la_SOURCES = xf86drm.c xf86drmHash.c xf86drmRandom.c xf86drmSL.c
|
|||
|
||||
libdrmincludedir = ${includedir}
|
||||
libdrminclude_HEADERS = xf86drm.h
|
||||
|
||||
EXTRA_DIST = ChangeLog TODO
|
||||
|
|
|
@ -7,5 +7,4 @@
|
|||
- drmMsg, xf86DrvMsgVerb versus vfprintf
|
||||
- drmOpenDevice tries chmod/chown if in server
|
||||
- drmOpen{,ByName} tries to load kernel module if in server
|
||||
- drm*SIGIOHandler only exists in server
|
||||
All but the last three should probably be factored out into libdri.
|
||||
All but the last two should probably be factored out into libdri.
|
||||
|
|
177
libdrm/xf86drm.c
177
libdrm/xf86drm.c
|
@ -31,8 +31,6 @@
|
|||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/xf86drm.c,v 1.36 2003/08/24 17:35:35 tsi Exp $ */
|
||||
|
||||
#ifdef HAVE_XORG_CONFIG_H
|
||||
#include <xorg-config.h>
|
||||
#endif
|
||||
|
@ -68,13 +66,6 @@
|
|||
# include "drm.h"
|
||||
#endif
|
||||
|
||||
/* No longer needed with CVS kernel modules on alpha
|
||||
#if defined(__alpha__) && defined(__linux__)
|
||||
extern unsigned long _bus_base(void);
|
||||
#define BUS_BASE _bus_base()
|
||||
#endif
|
||||
*/
|
||||
|
||||
/* Not all systems have MAP_FAILED defined */
|
||||
#ifndef MAP_FAILED
|
||||
#define MAP_FAILED ((void *)-1)
|
||||
|
@ -102,11 +93,11 @@ extern unsigned long _bus_base(void);
|
|||
#define DRM_MAX_MINOR 16
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This definition needs to be changed on some systems if dev_t is a structure.
|
||||
* If there is a header file we can get it from, there would be best.
|
||||
*/
|
||||
#ifndef makedev
|
||||
/* This definition needs to be changed on
|
||||
some systems if dev_t is a structure.
|
||||
If there is a header file we can get it
|
||||
from, there would be best. */
|
||||
#define makedev(x,y) ((dev_t)(((x) << 8) | (y)))
|
||||
#endif
|
||||
|
||||
|
@ -379,7 +370,7 @@ int drmAvailable(void)
|
|||
|
||||
if ((fd = drmOpenMinor(0, 1)) < 0) {
|
||||
#ifdef __linux__
|
||||
/* Try proc for backward Linux compatibility */
|
||||
/* Try proc for backward Linux compatibility */
|
||||
if (!access("/proc/dri/0", R_OK)) return 1;
|
||||
#endif
|
||||
return 0;
|
||||
|
@ -485,9 +476,8 @@ static int drmOpenByName(const char *name)
|
|||
id = drmGetBusid(fd);
|
||||
drmMsg("drmGetBusid returned '%s'\n", id ? id : "NULL");
|
||||
if (!id || !*id) {
|
||||
if (id) {
|
||||
if (id)
|
||||
drmFreeBusid(id);
|
||||
}
|
||||
return fd;
|
||||
} else {
|
||||
drmFreeBusid(id);
|
||||
|
@ -501,7 +491,7 @@ static int drmOpenByName(const char *name)
|
|||
}
|
||||
|
||||
#ifdef __linux__
|
||||
/* Backward-compatibility /proc support */
|
||||
/* Backward-compatibility /proc support */
|
||||
for (i = 0; i < 8; i++) {
|
||||
char proc_name[64], buf[512];
|
||||
char *driver, *pt, *devstring;
|
||||
|
@ -515,14 +505,14 @@ static int drmOpenByName(const char *name)
|
|||
buf[retcode-1] = '\0';
|
||||
for (driver = pt = buf; *pt && *pt != ' '; ++pt)
|
||||
;
|
||||
if (*pt) { /* Device is next */
|
||||
if (*pt) { /* Device is next */
|
||||
*pt = '\0';
|
||||
if (!strcmp(driver, name)) { /* Match */
|
||||
for (devstring = ++pt; *pt && *pt != ' '; ++pt)
|
||||
;
|
||||
if (*pt) { /* Found busid */
|
||||
return drmOpenByBusid(++pt);
|
||||
} else { /* No busid */
|
||||
} else { /* No busid */
|
||||
return drmOpenDevice(strtol(devstring, NULL, 0),i);
|
||||
}
|
||||
}
|
||||
|
@ -571,8 +561,10 @@ int drmOpen(const char *name, const char *busid)
|
|||
if (fd >= 0)
|
||||
return fd;
|
||||
}
|
||||
|
||||
if (name)
|
||||
return drmOpenByName(name);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -659,7 +651,6 @@ drmVersionPtr drmGetVersion(int fd)
|
|||
drmVersionPtr retval;
|
||||
drm_version_t *version = drmMalloc(sizeof(*version));
|
||||
|
||||
/* First, get the lengths */
|
||||
version->name_len = 0;
|
||||
version->name = NULL;
|
||||
version->date_len = 0;
|
||||
|
@ -672,7 +663,6 @@ drmVersionPtr drmGetVersion(int fd)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/* Now, allocate space and get the data */
|
||||
if (version->name_len)
|
||||
version->name = drmMalloc(version->name_len + 1);
|
||||
if (version->date_len)
|
||||
|
@ -686,15 +676,11 @@ drmVersionPtr drmGetVersion(int fd)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/* The results might not be null-terminated
|
||||
strings, so terminate them. */
|
||||
|
||||
/* The results might not be null-terminated strings, so terminate them. */
|
||||
if (version->name_len) version->name[version->name_len] = '\0';
|
||||
if (version->date_len) version->date[version->date_len] = '\0';
|
||||
if (version->desc_len) version->desc[version->desc_len] = '\0';
|
||||
|
||||
/* Now, copy it all back into the
|
||||
client-visible data structure... */
|
||||
retval = drmMalloc(sizeof(*retval));
|
||||
drmCopyVersion(retval, version);
|
||||
drmFreeKernelVersion(version);
|
||||
|
@ -871,22 +857,12 @@ int drmAuthMagic(int fd, drm_magic_t magic)
|
|||
* This function is a wrapper around the DRM_IOCTL_ADD_MAP ioctl, passing
|
||||
* the arguments in a drm_map structure.
|
||||
*/
|
||||
int drmAddMap(int fd,
|
||||
drm_handle_t offset,
|
||||
drmSize size,
|
||||
drmMapType type,
|
||||
drmMapFlags flags,
|
||||
drm_handle_t * handle)
|
||||
int drmAddMap(int fd, drm_handle_t offset, drmSize size, drmMapType type,
|
||||
drmMapFlags flags, drm_handle_t *handle)
|
||||
{
|
||||
drm_map_t map;
|
||||
|
||||
map.offset = offset;
|
||||
/* No longer needed with CVS kernel modules on alpha
|
||||
#ifdef __alpha__
|
||||
if (type != DRM_SHM)
|
||||
map.offset += BUS_BASE;
|
||||
#endif
|
||||
*/
|
||||
map.size = size;
|
||||
map.handle = 0;
|
||||
map.type = type;
|
||||
|
@ -1038,10 +1014,7 @@ int drmClose(int fd)
|
|||
* \internal
|
||||
* This function is a wrapper for mmap().
|
||||
*/
|
||||
int drmMap(int fd,
|
||||
drm_handle_t handle,
|
||||
drmSize size,
|
||||
drmAddressPtr address)
|
||||
int drmMap(int fd, drm_handle_t handle, drmSize size, drmAddressPtr address)
|
||||
{
|
||||
static unsigned long pagesize_mask = 0;
|
||||
|
||||
|
@ -1067,7 +1040,7 @@ int drmMap(int fd,
|
|||
* \return zero on success, or a negative value on failure.
|
||||
*
|
||||
* \internal
|
||||
* This function is a wrapper for unmap().
|
||||
* This function is a wrapper for munmap().
|
||||
*/
|
||||
int drmUnmap(drmAddress address, drmSize size)
|
||||
{
|
||||
|
@ -1093,8 +1066,7 @@ drmBufInfoPtr drmGetBufInfo(int fd)
|
|||
drmFree(info.list);
|
||||
return NULL;
|
||||
}
|
||||
/* Now, copy it all back into the
|
||||
client-visible data structure... */
|
||||
|
||||
retval = drmMalloc(sizeof(*retval));
|
||||
retval->count = info.count;
|
||||
retval->list = drmMalloc(info.count * sizeof(*retval->list));
|
||||
|
@ -1145,8 +1117,7 @@ drmBufMapPtr drmMapBufs(int fd)
|
|||
drmFree(bufs.list);
|
||||
return NULL;
|
||||
}
|
||||
/* Now, copy it all back into the
|
||||
client-visible data structure... */
|
||||
|
||||
retval = drmMalloc(sizeof(*retval));
|
||||
retval->count = bufs.count;
|
||||
retval->list = drmMalloc(bufs.count * sizeof(*retval->list));
|
||||
|
@ -1206,7 +1177,6 @@ int drmDMA(int fd, drmDMAReqPtr request)
|
|||
drm_dma_t dma;
|
||||
int ret, i = 0;
|
||||
|
||||
/* Copy to hidden structure */
|
||||
dma.context = request->context;
|
||||
dma.send_count = request->send_count;
|
||||
dma.send_indices = request->send_list;
|
||||
|
@ -1284,7 +1254,7 @@ int drmUnlock(int fd, drm_context_t context)
|
|||
return ioctl(fd, DRM_IOCTL_UNLOCK, &lock);
|
||||
}
|
||||
|
||||
drm_context_t * drmGetReservedContextList(int fd, int *count)
|
||||
drm_context_t *drmGetReservedContextList(int fd, int *count)
|
||||
{
|
||||
drm_ctx_res_t res;
|
||||
drm_ctx_t *list;
|
||||
|
@ -1313,7 +1283,7 @@ drm_context_t * drmGetReservedContextList(int fd, int *count)
|
|||
return retval;
|
||||
}
|
||||
|
||||
void drmFreeReservedContextList(drm_context_t * pt)
|
||||
void drmFreeReservedContextList(drm_context_t *pt)
|
||||
{
|
||||
drmFree(pt);
|
||||
}
|
||||
|
@ -1336,7 +1306,7 @@ void drmFreeReservedContextList(drm_context_t * pt)
|
|||
* This function is a wrapper around the DRM_IOCTL_ADD_CTX ioctl, passing the
|
||||
* argument in a drm_ctx structure.
|
||||
*/
|
||||
int drmCreateContext(int fd, drm_context_t * handle)
|
||||
int drmCreateContext(int fd, drm_context_t *handle)
|
||||
{
|
||||
drm_ctx_t ctx;
|
||||
|
||||
|
@ -1359,14 +1329,12 @@ int drmSetContextFlags(int fd, drm_context_t context, drm_context_tFlags flags)
|
|||
{
|
||||
drm_ctx_t ctx;
|
||||
|
||||
/* Context preserving means that no context
|
||||
switched are done between DMA buffers
|
||||
from one context and the next. This is
|
||||
suitable for use in the X server (which
|
||||
promises to maintain hardware context,
|
||||
or in the client-side library when
|
||||
buffers are swapped on behalf of two
|
||||
threads. */
|
||||
/*
|
||||
* Context preserving means that no context switches are done between DMA
|
||||
* buffers from one context and the next. This is suitable for use in the
|
||||
* X server (which promises to maintain hardware context), or in the
|
||||
* client-side library when buffers are swapped on behalf of two threads.
|
||||
*/
|
||||
ctx.handle = context;
|
||||
ctx.flags = 0;
|
||||
if (flags & DRM_CONTEXT_PRESERVED) ctx.flags |= _DRM_CONTEXT_PRESERVED;
|
||||
|
@ -1375,7 +1343,8 @@ int drmSetContextFlags(int fd, drm_context_t context, drm_context_tFlags flags)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int drmGetContextFlags(int fd, drm_context_t context, drm_context_tFlagsPtr flags)
|
||||
int drmGetContextFlags(int fd, drm_context_t context,
|
||||
drm_context_tFlagsPtr flags)
|
||||
{
|
||||
drm_ctx_t ctx;
|
||||
|
||||
|
@ -1412,7 +1381,7 @@ int drmDestroyContext(int fd, drm_context_t handle)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int drmCreateDrawable(int fd, drm_drawable_t * handle)
|
||||
int drmCreateDrawable(int fd, drm_drawable_t *handle)
|
||||
{
|
||||
drm_draw_t draw;
|
||||
if (ioctl(fd, DRM_IOCTL_ADD_DRAW, &draw)) return -errno;
|
||||
|
@ -1941,7 +1910,8 @@ void *drmGetContextTag(int fd, drm_context_t context)
|
|||
return value;
|
||||
}
|
||||
|
||||
int drmAddContextPrivateMapping(int fd, drm_context_t ctx_id, drm_handle_t handle)
|
||||
int drmAddContextPrivateMapping(int fd, drm_context_t ctx_id,
|
||||
drm_handle_t handle)
|
||||
{
|
||||
drm_ctx_priv_map_t map;
|
||||
|
||||
|
@ -1952,7 +1922,8 @@ int drmAddContextPrivateMapping(int fd, drm_context_t ctx_id, drm_handle_t handl
|
|||
return 0;
|
||||
}
|
||||
|
||||
int drmGetContextPrivateMapping(int fd, drm_context_t ctx_id, drm_handle_t * handle)
|
||||
int drmGetContextPrivateMapping(int fd, drm_context_t ctx_id,
|
||||
drm_handle_t *handle)
|
||||
{
|
||||
drm_ctx_priv_map_t map;
|
||||
|
||||
|
@ -2132,7 +2103,7 @@ int drmGetStats(int fd, drmStatsT *stats)
|
|||
* It issues a read-write ioctl given by
|
||||
* \code DRM_COMMAND_BASE + drmCommandIndex \endcode.
|
||||
*/
|
||||
int drmSetInterfaceVersion(int fd, drmSetVersion *version )
|
||||
int drmSetInterfaceVersion(int fd, drmSetVersion *version)
|
||||
{
|
||||
int retcode = 0;
|
||||
drm_set_version_t sv;
|
||||
|
@ -2194,8 +2165,8 @@ int drmCommandNone(int fd, unsigned long drmCommandIndex)
|
|||
* It issues a read ioctl given by
|
||||
* \code DRM_COMMAND_BASE + drmCommandIndex \endcode.
|
||||
*/
|
||||
int drmCommandRead(int fd, unsigned long drmCommandIndex,
|
||||
void *data, unsigned long size )
|
||||
int drmCommandRead(int fd, unsigned long drmCommandIndex, void *data,
|
||||
unsigned long size)
|
||||
{
|
||||
unsigned long request;
|
||||
|
||||
|
@ -2223,8 +2194,8 @@ int drmCommandRead(int fd, unsigned long drmCommandIndex,
|
|||
* It issues a write ioctl given by
|
||||
* \code DRM_COMMAND_BASE + drmCommandIndex \endcode.
|
||||
*/
|
||||
int drmCommandWrite(int fd, unsigned long drmCommandIndex,
|
||||
void *data, unsigned long size )
|
||||
int drmCommandWrite(int fd, unsigned long drmCommandIndex, void *data,
|
||||
unsigned long size)
|
||||
{
|
||||
unsigned long request;
|
||||
|
||||
|
@ -2252,8 +2223,8 @@ int drmCommandWrite(int fd, unsigned long drmCommandIndex,
|
|||
* It issues a read-write ioctl given by
|
||||
* \code DRM_COMMAND_BASE + drmCommandIndex \endcode.
|
||||
*/
|
||||
int drmCommandWriteRead(int fd, unsigned long drmCommandIndex,
|
||||
void *data, unsigned long size )
|
||||
int drmCommandWriteRead(int fd, unsigned long drmCommandIndex, void *data,
|
||||
unsigned long size)
|
||||
{
|
||||
unsigned long request;
|
||||
|
||||
|
@ -2265,69 +2236,3 @@ int drmCommandWriteRead(int fd, unsigned long drmCommandIndex,
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(XFree86Server)
|
||||
static void drmSIGIOHandler(int interrupt, void *closure)
|
||||
{
|
||||
unsigned long key;
|
||||
void *value;
|
||||
ssize_t count;
|
||||
drm_ctx_t ctx;
|
||||
typedef void (*_drmCallback)(int, void *, void *);
|
||||
char buf[256];
|
||||
drm_context_t old;
|
||||
drm_context_t new;
|
||||
void *oldctx;
|
||||
void *newctx;
|
||||
char *pt;
|
||||
drmHashEntry *entry;
|
||||
|
||||
if (!drmHashTable) return;
|
||||
if (drmHashFirst(drmHashTable, &key, &value)) {
|
||||
entry = value;
|
||||
do {
|
||||
#if 0
|
||||
fprintf(stderr, "Trying %d\n", entry->fd);
|
||||
#endif
|
||||
if ((count = read(entry->fd, buf, sizeof(buf))) > 0) {
|
||||
buf[count] = '\0';
|
||||
#if 0
|
||||
fprintf(stderr, "Got %s\n", buf);
|
||||
#endif
|
||||
|
||||
for (pt = buf; *pt != ' '; ++pt); /* Find first space */
|
||||
++pt;
|
||||
old = strtol(pt, &pt, 0);
|
||||
new = strtol(pt, NULL, 0);
|
||||
oldctx = drmGetContextTag(entry->fd, old);
|
||||
newctx = drmGetContextTag(entry->fd, new);
|
||||
#if 0
|
||||
fprintf(stderr, "%d %d %p %p\n", old, new, oldctx, newctx);
|
||||
#endif
|
||||
((_drmCallback)entry->f)(entry->fd, oldctx, newctx);
|
||||
ctx.handle = new;
|
||||
ioctl(entry->fd, DRM_IOCTL_NEW_CTX, &ctx);
|
||||
}
|
||||
} while (drmHashNext(drmHashTable, &key, &value));
|
||||
}
|
||||
}
|
||||
|
||||
int drmInstallSIGIOHandler(int fd, void (*f)(int, void *, void *))
|
||||
{
|
||||
drmHashEntry *entry;
|
||||
|
||||
entry = drmGetEntry(fd);
|
||||
entry->f = f;
|
||||
|
||||
return xf86InstallSIGIOHandler(fd, drmSIGIOHandler, 0);
|
||||
}
|
||||
|
||||
int drmRemoveSIGIOHandler(int fd)
|
||||
{
|
||||
drmHashEntry *entry = drmGetEntry(fd);
|
||||
|
||||
entry->f = NULL;
|
||||
|
||||
return xf86RemoveSIGIOHandler(fd);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -546,11 +546,6 @@ extern int drmCreateDrawable(int fd, drm_drawable_t * handle);
|
|||
extern int drmDestroyDrawable(int fd, drm_drawable_t handle);
|
||||
extern int drmCtlInstHandler(int fd, int irq);
|
||||
extern int drmCtlUninstHandler(int fd);
|
||||
extern int drmInstallSIGIOHandler(int fd,
|
||||
void (*f)(int fd,
|
||||
void *oldctx,
|
||||
void *newctx));
|
||||
extern int drmRemoveSIGIOHandler(int fd);
|
||||
|
||||
/* General user-level programmer's API: authenticated client and/or X */
|
||||
extern int drmMap(int fd,
|
||||
|
|
|
@ -91,8 +91,6 @@
|
|||
# endif
|
||||
#endif
|
||||
|
||||
#define N(x) drm##x
|
||||
|
||||
#define HASH_MAGIC 0xdeadbeef
|
||||
#define HASH_DEBUG 0
|
||||
#define HASH_SIZE 512 /* Good for about 100 entries */
|
||||
|
@ -135,11 +133,11 @@ typedef struct HashTable {
|
|||
} HashTable, *HashTablePtr;
|
||||
|
||||
#if HASH_MAIN
|
||||
extern void *N(HashCreate)(void);
|
||||
extern int N(HashDestroy)(void *t);
|
||||
extern int N(HashLookup)(void *t, unsigned long key, unsigned long *value);
|
||||
extern int N(HashInsert)(void *t, unsigned long key, unsigned long value);
|
||||
extern int N(HashDelete)(void *t, unsigned long key);
|
||||
extern void *drmHashCreate(void);
|
||||
extern int drmHashDestroy(void *t);
|
||||
extern int drmHashLookup(void *t, unsigned long key, unsigned long *value);
|
||||
extern int drmHashInsert(void *t, unsigned long key, unsigned long value);
|
||||
extern int drmHashDelete(void *t, unsigned long key);
|
||||
#endif
|
||||
|
||||
static unsigned long HashHash(unsigned long key)
|
||||
|
@ -170,7 +168,7 @@ static unsigned long HashHash(unsigned long key)
|
|||
return hash;
|
||||
}
|
||||
|
||||
void *N(HashCreate)(void)
|
||||
void *drmHashCreate(void)
|
||||
{
|
||||
HashTablePtr table;
|
||||
int i;
|
||||
|
@ -187,7 +185,7 @@ void *N(HashCreate)(void)
|
|||
return table;
|
||||
}
|
||||
|
||||
int N(HashDestroy)(void *t)
|
||||
int drmHashDestroy(void *t)
|
||||
{
|
||||
HashTablePtr table = (HashTablePtr)t;
|
||||
HashBucketPtr bucket;
|
||||
|
@ -238,7 +236,7 @@ static HashBucketPtr HashFind(HashTablePtr table,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
int N(HashLookup)(void *t, unsigned long key, void **value)
|
||||
int drmHashLookup(void *t, unsigned long key, void **value)
|
||||
{
|
||||
HashTablePtr table = (HashTablePtr)t;
|
||||
HashBucketPtr bucket;
|
||||
|
@ -251,7 +249,7 @@ int N(HashLookup)(void *t, unsigned long key, void **value)
|
|||
return 0; /* Found */
|
||||
}
|
||||
|
||||
int N(HashInsert)(void *t, unsigned long key, void *value)
|
||||
int drmHashInsert(void *t, unsigned long key, void *value)
|
||||
{
|
||||
HashTablePtr table = (HashTablePtr)t;
|
||||
HashBucketPtr bucket;
|
||||
|
@ -273,7 +271,7 @@ int N(HashInsert)(void *t, unsigned long key, void *value)
|
|||
return 0; /* Added to table */
|
||||
}
|
||||
|
||||
int N(HashDelete)(void *t, unsigned long key)
|
||||
int drmHashDelete(void *t, unsigned long key)
|
||||
{
|
||||
HashTablePtr table = (HashTablePtr)t;
|
||||
unsigned long hash;
|
||||
|
@ -290,7 +288,7 @@ int N(HashDelete)(void *t, unsigned long key)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int N(HashNext)(void *t, unsigned long *key, void **value)
|
||||
int drmHashNext(void *t, unsigned long *key, void **value)
|
||||
{
|
||||
HashTablePtr table = (HashTablePtr)t;
|
||||
|
||||
|
@ -306,7 +304,7 @@ int N(HashNext)(void *t, unsigned long *key, void **value)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int N(HashFirst)(void *t, unsigned long *key, void **value)
|
||||
int drmHashFirst(void *t, unsigned long *key, void **value)
|
||||
{
|
||||
HashTablePtr table = (HashTablePtr)t;
|
||||
|
||||
|
@ -314,7 +312,7 @@ int N(HashFirst)(void *t, unsigned long *key, void **value)
|
|||
|
||||
table->p0 = 0;
|
||||
table->p1 = table->buckets[0];
|
||||
return N(HashNext)(table, key, value);
|
||||
return drmHashNext(table, key, value);
|
||||
}
|
||||
|
||||
#if HASH_MAIN
|
||||
|
@ -363,7 +361,7 @@ static void check_table(HashTablePtr table,
|
|||
unsigned long key, unsigned long value)
|
||||
{
|
||||
unsigned long retval = 0;
|
||||
int retcode = N(HashLookup)(table, key, &retval);
|
||||
int retcode = drmHashLookup(table, key, &retval);
|
||||
|
||||
switch (retcode) {
|
||||
case -1:
|
||||
|
@ -393,50 +391,50 @@ int main(void)
|
|||
int i;
|
||||
|
||||
printf("\n***** 256 consecutive integers ****\n");
|
||||
table = N(HashCreate)();
|
||||
for (i = 0; i < 256; i++) N(HashInsert)(table, i, i);
|
||||
table = drmHashCreate();
|
||||
for (i = 0; i < 256; i++) drmHashInsert(table, i, i);
|
||||
for (i = 0; i < 256; i++) check_table(table, i, i);
|
||||
for (i = 256; i >= 0; i--) check_table(table, i, i);
|
||||
compute_dist(table);
|
||||
N(HashDestroy)(table);
|
||||
drmHashDestroy(table);
|
||||
|
||||
printf("\n***** 1024 consecutive integers ****\n");
|
||||
table = N(HashCreate)();
|
||||
for (i = 0; i < 1024; i++) N(HashInsert)(table, i, i);
|
||||
table = drmHashCreate();
|
||||
for (i = 0; i < 1024; i++) drmHashInsert(table, i, i);
|
||||
for (i = 0; i < 1024; i++) check_table(table, i, i);
|
||||
for (i = 1024; i >= 0; i--) check_table(table, i, i);
|
||||
compute_dist(table);
|
||||
N(HashDestroy)(table);
|
||||
drmHashDestroy(table);
|
||||
|
||||
printf("\n***** 1024 consecutive page addresses (4k pages) ****\n");
|
||||
table = N(HashCreate)();
|
||||
for (i = 0; i < 1024; i++) N(HashInsert)(table, i*4096, i);
|
||||
table = drmHashCreate();
|
||||
for (i = 0; i < 1024; i++) drmHashInsert(table, i*4096, i);
|
||||
for (i = 0; i < 1024; i++) check_table(table, i*4096, i);
|
||||
for (i = 1024; i >= 0; i--) check_table(table, i*4096, i);
|
||||
compute_dist(table);
|
||||
N(HashDestroy)(table);
|
||||
drmHashDestroy(table);
|
||||
|
||||
printf("\n***** 1024 random integers ****\n");
|
||||
table = N(HashCreate)();
|
||||
table = drmHashCreate();
|
||||
srandom(0xbeefbeef);
|
||||
for (i = 0; i < 1024; i++) N(HashInsert)(table, random(), i);
|
||||
for (i = 0; i < 1024; i++) drmHashInsert(table, random(), i);
|
||||
srandom(0xbeefbeef);
|
||||
for (i = 0; i < 1024; i++) check_table(table, random(), i);
|
||||
srandom(0xbeefbeef);
|
||||
for (i = 0; i < 1024; i++) check_table(table, random(), i);
|
||||
compute_dist(table);
|
||||
N(HashDestroy)(table);
|
||||
drmHashDestroy(table);
|
||||
|
||||
printf("\n***** 5000 random integers ****\n");
|
||||
table = N(HashCreate)();
|
||||
table = drmHashCreate();
|
||||
srandom(0xbeefbeef);
|
||||
for (i = 0; i < 5000; i++) N(HashInsert)(table, random(), i);
|
||||
for (i = 0; i < 5000; i++) drmHashInsert(table, random(), i);
|
||||
srandom(0xbeefbeef);
|
||||
for (i = 0; i < 5000; i++) check_table(table, random(), i);
|
||||
srandom(0xbeefbeef);
|
||||
for (i = 0; i < 5000; i++) check_table(table, random(), i);
|
||||
compute_dist(table);
|
||||
N(HashDestroy)(table);
|
||||
drmHashDestroy(table);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -94,8 +94,6 @@
|
|||
# endif
|
||||
#endif
|
||||
|
||||
#define N(x) drm##x
|
||||
|
||||
#define RANDOM_MAGIC 0xfeedbeef
|
||||
#define RANDOM_DEBUG 0
|
||||
|
||||
|
@ -118,13 +116,13 @@ typedef struct RandomState {
|
|||
} RandomState;
|
||||
|
||||
#if RANDOM_MAIN
|
||||
extern void *N(RandomCreate)(unsigned long seed);
|
||||
extern int N(RandomDestroy)(void *state);
|
||||
extern unsigned long N(Random)(void *state);
|
||||
extern double N(RandomDouble)(void *state);
|
||||
extern void *drmRandomCreate(unsigned long seed);
|
||||
extern int drmRandomDestroy(void *state);
|
||||
extern unsigned long drmRandom(void *state);
|
||||
extern double drmRandomDouble(void *state);
|
||||
#endif
|
||||
|
||||
void *N(RandomCreate)(unsigned long seed)
|
||||
void *drmRandomCreate(unsigned long seed)
|
||||
{
|
||||
RandomState *state;
|
||||
|
||||
|
@ -154,13 +152,13 @@ void *N(RandomCreate)(unsigned long seed)
|
|||
return state;
|
||||
}
|
||||
|
||||
int N(RandomDestroy)(void *state)
|
||||
int drmRandomDestroy(void *state)
|
||||
{
|
||||
RANDOM_FREE(state);
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned long N(Random)(void *state)
|
||||
unsigned long drmRandom(void *state)
|
||||
{
|
||||
RandomState *s = (RandomState *)state;
|
||||
long hi;
|
||||
|
@ -174,11 +172,11 @@ unsigned long N(Random)(void *state)
|
|||
return s->seed;
|
||||
}
|
||||
|
||||
double N(RandomDouble)(void *state)
|
||||
double drmRandomDouble(void *state)
|
||||
{
|
||||
RandomState *s = (RandomState *)state;
|
||||
|
||||
return (double)N(Random)(state)/(double)s->m;
|
||||
return (double)drmRandom(state)/(double)s->m;
|
||||
}
|
||||
|
||||
#if RANDOM_MAIN
|
||||
|
@ -188,15 +186,15 @@ static void check_period(long seed)
|
|||
unsigned long initial;
|
||||
void *state;
|
||||
|
||||
state = N(RandomCreate)(seed);
|
||||
initial = N(Random)(state);
|
||||
state = drmRandomCreate(seed);
|
||||
initial = drmRandom(state);
|
||||
++count;
|
||||
while (initial != N(Random)(state)) {
|
||||
while (initial != drmRandom(state)) {
|
||||
if (!++count) break;
|
||||
}
|
||||
printf("With seed of %10ld, period = %10lu (0x%08lx)\n",
|
||||
seed, count, count);
|
||||
N(RandomDestroy)(state);
|
||||
drmRandomDestroy(state);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
|
@ -205,14 +203,14 @@ int main(void)
|
|||
int i;
|
||||
unsigned long rand;
|
||||
|
||||
state = N(RandomCreate)(1);
|
||||
state = drmRandomCreate(1);
|
||||
for (i = 0; i < 10000; i++) {
|
||||
rand = N(Random)(state);
|
||||
rand = drmRandom(state);
|
||||
}
|
||||
printf("After 10000 iterations: %lu (%lu expected): %s\n",
|
||||
rand, state->check,
|
||||
rand - state->check ? "*INCORRECT*" : "CORRECT");
|
||||
N(RandomDestroy)(state);
|
||||
drmRandomDestroy(state);
|
||||
|
||||
printf("Checking periods...\n");
|
||||
check_period(1);
|
||||
|
|
|
@ -62,8 +62,6 @@
|
|||
# endif
|
||||
#endif
|
||||
|
||||
#define N(x) drm##x
|
||||
|
||||
#define SL_LIST_MAGIC 0xfacade00LU
|
||||
#define SL_ENTRY_MAGIC 0x00fab1edLU
|
||||
#define SL_FREED_MAGIC 0xdecea5edLU
|
||||
|
@ -103,15 +101,15 @@ typedef struct SkipList {
|
|||
} SkipList, *SkipListPtr;
|
||||
|
||||
#if SL_MAIN
|
||||
extern void *N(SLCreate)(void);
|
||||
extern int N(SLDestroy)(void *l);
|
||||
extern int N(SLLookup)(void *l, unsigned long key, void **value);
|
||||
extern int N(SLInsert)(void *l, unsigned long key, void *value);
|
||||
extern int N(SLDelete)(void *l, unsigned long key);
|
||||
extern int N(SLNext)(void *l, unsigned long *key, void **value);
|
||||
extern int N(SLFirst)(void *l, unsigned long *key, void **value);
|
||||
extern void N(SLDump)(void *l);
|
||||
extern int N(SLLookupNeighbors)(void *l, unsigned long key,
|
||||
extern void *drmSLCreate(void);
|
||||
extern int drmSLDestroy(void *l);
|
||||
extern int drmSLLookup(void *l, unsigned long key, void **value);
|
||||
extern int drmSLInsert(void *l, unsigned long key, void *value);
|
||||
extern int drmSLDelete(void *l, unsigned long key);
|
||||
extern int drmSLNext(void *l, unsigned long *key, void **value);
|
||||
extern int drmSLFirst(void *l, unsigned long *key, void **value);
|
||||
extern void drmSLDump(void *l);
|
||||
extern int drmSLLookupNeighbors(void *l, unsigned long key,
|
||||
unsigned long *prev_key, void **prev_value,
|
||||
unsigned long *next_key, void **next_value);
|
||||
#endif
|
||||
|
@ -144,7 +142,7 @@ static int SLRandomLevel(void)
|
|||
return level;
|
||||
}
|
||||
|
||||
void *N(SLCreate)(void)
|
||||
void *drmSLCreate(void)
|
||||
{
|
||||
SkipListPtr list;
|
||||
int i;
|
||||
|
@ -161,7 +159,7 @@ void *N(SLCreate)(void)
|
|||
return list;
|
||||
}
|
||||
|
||||
int N(SLDestroy)(void *l)
|
||||
int drmSLDestroy(void *l)
|
||||
{
|
||||
SkipListPtr list = (SkipListPtr)l;
|
||||
SLEntryPtr entry;
|
||||
|
@ -198,7 +196,7 @@ static SLEntryPtr SLLocate(void *l, unsigned long key, SLEntryPtr *update)
|
|||
return entry->forward[0];
|
||||
}
|
||||
|
||||
int N(SLInsert)(void *l, unsigned long key, void *value)
|
||||
int drmSLInsert(void *l, unsigned long key, void *value)
|
||||
{
|
||||
SkipListPtr list = (SkipListPtr)l;
|
||||
SLEntryPtr entry;
|
||||
|
@ -231,7 +229,7 @@ int N(SLInsert)(void *l, unsigned long key, void *value)
|
|||
return 0; /* Added to table */
|
||||
}
|
||||
|
||||
int N(SLDelete)(void *l, unsigned long key)
|
||||
int drmSLDelete(void *l, unsigned long key)
|
||||
{
|
||||
SkipListPtr list = (SkipListPtr)l;
|
||||
SLEntryPtr update[SL_MAX_LEVEL + 1];
|
||||
|
@ -258,7 +256,7 @@ int N(SLDelete)(void *l, unsigned long key)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int N(SLLookup)(void *l, unsigned long key, void **value)
|
||||
int drmSLLookup(void *l, unsigned long key, void **value)
|
||||
{
|
||||
SkipListPtr list = (SkipListPtr)l;
|
||||
SLEntryPtr update[SL_MAX_LEVEL + 1];
|
||||
|
@ -274,7 +272,7 @@ int N(SLLookup)(void *l, unsigned long key, void **value)
|
|||
return -1;
|
||||
}
|
||||
|
||||
int N(SLLookupNeighbors)(void *l, unsigned long key,
|
||||
int drmSLLookupNeighbors(void *l, unsigned long key,
|
||||
unsigned long *prev_key, void **prev_value,
|
||||
unsigned long *next_key, void **next_value)
|
||||
{
|
||||
|
@ -301,7 +299,7 @@ int N(SLLookupNeighbors)(void *l, unsigned long key,
|
|||
return retcode;
|
||||
}
|
||||
|
||||
int N(SLNext)(void *l, unsigned long *key, void **value)
|
||||
int drmSLNext(void *l, unsigned long *key, void **value)
|
||||
{
|
||||
SkipListPtr list = (SkipListPtr)l;
|
||||
SLEntryPtr entry;
|
||||
|
@ -320,18 +318,18 @@ int N(SLNext)(void *l, unsigned long *key, void **value)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int N(SLFirst)(void *l, unsigned long *key, void **value)
|
||||
int drmSLFirst(void *l, unsigned long *key, void **value)
|
||||
{
|
||||
SkipListPtr list = (SkipListPtr)l;
|
||||
|
||||
if (list->magic != SL_LIST_MAGIC) return -1; /* Bad magic */
|
||||
|
||||
list->p0 = list->head->forward[0];
|
||||
return N(SLNext)(list, key, value);
|
||||
return drmSLNext(list, key, value);
|
||||
}
|
||||
|
||||
/* Dump internal data structures for debugging. */
|
||||
void N(SLDump)(void *l)
|
||||
void drmSLDump(void *l)
|
||||
{
|
||||
SkipListPtr list = (SkipListPtr)l;
|
||||
SLEntryPtr entry;
|
||||
|
@ -371,10 +369,10 @@ static void print(SkipListPtr list)
|
|||
unsigned long key;
|
||||
void *value;
|
||||
|
||||
if (N(SLFirst)(list, &key, &value)) {
|
||||
if (drmSLFirst(list, &key, &value)) {
|
||||
do {
|
||||
printf("key = %5lu, value = %p\n", key, value);
|
||||
} while (N(SLNext)(list, &key, &value));
|
||||
} while (drmSLNext(list, &key, &value));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -392,27 +390,27 @@ static double do_time(int size, int iter)
|
|||
|
||||
SL_RANDOM_INIT(12345);
|
||||
|
||||
list = N(SLCreate)();
|
||||
list = drmSLCreate();
|
||||
|
||||
for (i = 0; i < size; i++) {
|
||||
keys[i] = SL_RANDOM;
|
||||
N(SLInsert)(list, keys[i], NULL);
|
||||
drmSLInsert(list, keys[i], NULL);
|
||||
}
|
||||
|
||||
previous = 0;
|
||||
if (N(SLFirst)(list, &key, &value)) {
|
||||
if (drmSLFirst(list, &key, &value)) {
|
||||
do {
|
||||
if (key <= previous) {
|
||||
printf( "%lu !< %lu\n", previous, key);
|
||||
}
|
||||
previous = key;
|
||||
} while (N(SLNext)(list, &key, &value));
|
||||
} while (drmSLNext(list, &key, &value));
|
||||
}
|
||||
|
||||
gettimeofday(&start, NULL);
|
||||
for (j = 0; j < iter; j++) {
|
||||
for (i = 0; i < size; i++) {
|
||||
if (N(SLLookup)(list, keys[i], &value))
|
||||
if (drmSLLookup(list, keys[i], &value))
|
||||
printf("Error %lu %d\n", keys[i], i);
|
||||
}
|
||||
}
|
||||
|
@ -423,7 +421,7 @@ static double do_time(int size, int iter)
|
|||
|
||||
printf("%0.2f microseconds for list length %d\n", usec, size);
|
||||
|
||||
N(SLDestroy)(list);
|
||||
drmSLDestroy(list);
|
||||
|
||||
return usec;
|
||||
}
|
||||
|
@ -448,15 +446,15 @@ int main(void)
|
|||
SkipListPtr list;
|
||||
double usec, usec2, usec3, usec4;
|
||||
|
||||
list = N(SLCreate)();
|
||||
list = drmSLCreate();
|
||||
printf( "list at %p\n", list);
|
||||
|
||||
print(list);
|
||||
printf("\n==============================\n\n");
|
||||
|
||||
N(SLInsert)(list, 123, NULL);
|
||||
N(SLInsert)(list, 213, NULL);
|
||||
N(SLInsert)(list, 50, NULL);
|
||||
drmSLInsert(list, 123, NULL);
|
||||
drmSLInsert(list, 213, NULL);
|
||||
drmSLInsert(list, 50, NULL);
|
||||
print(list);
|
||||
printf("\n==============================\n\n");
|
||||
|
||||
|
@ -469,12 +467,12 @@ int main(void)
|
|||
print_neighbors(list, 256);
|
||||
printf("\n==============================\n\n");
|
||||
|
||||
N(SLDelete)(list, 50);
|
||||
drmSLDelete(list, 50);
|
||||
print(list);
|
||||
printf("\n==============================\n\n");
|
||||
|
||||
N(SLDump)(list);
|
||||
N(SLDestroy)(list);
|
||||
drmSLDump(list);
|
||||
drmSLDestroy(list);
|
||||
printf("\n==============================\n\n");
|
||||
|
||||
usec = do_time(100, 10000);
|
||||
|
|
Loading…
Reference in New Issue