示例#1
0
/* XXX Interface may change. */
_X_EXPORT Bool
xf86EnableAGP(int screenNum, CARD32 mode)
{
	agp_setup_t setup;

	if (!GARTInit(screenNum) || (acquiredScreen != screenNum))
		return FALSE;

	setup.agps_mode = mode;
	if (ioctl(gartFd, AGPIOC_SETUP, &setup) != 0) {
		xf86DrvMsg(screenNum, X_WARNING, "xf86EnableAGP: "
		    "AGPIOC_SETUP with mode %x failed (%s)\n",
		    mode, strerror(errno));
		return FALSE;
	}

	return TRUE;
}
示例#2
0
文件: sun_agp.c 项目: Agnarr/xserver
Bool
xf86AcquireGART(int screenNum)
{

	if (!GARTInit(screenNum))
		return FALSE;

	if (acquiredScreen != screenNum) {
		if (ioctl(gartFd, AGPIOC_ACQUIRE, 0) != 0) {
			xf86DrvMsg(screenNum, X_WARNING,
			    "xf86AcquireGART: AGPIOC_ACQUIRE failed (%s)\n",
			    strerror(errno));
			return FALSE;
		}
		acquiredScreen = screenNum;
		xf86DrvMsg(screenNum, X_INFO,
		    "xf86AcquireGART: AGPIOC_ACQUIRE succeeded\n");
	}
	return TRUE;
}
示例#3
0
文件: sun_agp.c 项目: Agnarr/xserver
/* Unbind GART memory with "key" */
Bool
xf86UnbindGARTMemory(int screenNum, int key)
{
	agp_unbind_t unbind;

	if (!GARTInit(screenNum) || (acquiredScreen != screenNum))
		return FALSE;

	unbind.agpu_pri = 0;
	unbind.agpu_key = key;

	if (ioctl(gartFd, AGPIOC_UNBIND, &unbind) != 0) {
		xf86DrvMsg(screenNum, X_WARNING, "xf86UnbindGARTMemory: "
		    "unbinding of gart memory with key %d "
		    "failed (%s)\n", key, strerror(errno));
		return FALSE;
	}

	xf86DrvMsgVerb(screenNum, X_INFO, 3,
	    "xf86UnbindGARTMemory: unbind key %d\n", key);

	return TRUE;
}
示例#4
0
文件: sun_agp.c 项目: Agnarr/xserver
int
xf86AllocateGARTMemory(int screenNum, unsigned long size, int type,
			unsigned long *physical)
{
	agp_allocate_t alloc;
	int pages;

	/*
	 * Allocates "size" bytes of GART memory (rounds up to the next
	 * page multiple) or type "type".  A handle (key) for the allocated
	 * memory is returned.  On error, the return value is -1.
	 * "size" should be larger than 0, or AGPIOC_ALLOCATE ioctl will
	 * return error.
	 */

	if (!GARTInit(screenNum) || (acquiredScreen != screenNum))
		return -1;

	pages = (size / AGP_PAGE_SIZE);
	if (size % AGP_PAGE_SIZE != 0)
		pages++;

	alloc.agpa_pgcount = pages;
	alloc.agpa_type = type;

	if (ioctl(gartFd, AGPIOC_ALLOCATE, &alloc) != 0) {
		xf86DrvMsg(screenNum, X_WARNING, "xf86AllocateGARTMemory: "
		    "allocation of %d pages failed\n\t(%s)\n", pages,
		    strerror(errno));
		return -1;
	}

	if (physical)
		*physical = (unsigned long)alloc.agpa_physical;

	return alloc.agpa_key;
}
示例#5
0
int
xf86AllocateGARTMemory(int screenNum, unsigned long size, int type,
			unsigned long *physical)
{
	struct _agp_allocate alloc;
	int pages;

	/*
	 * Allocates "size" bytes of GART memory (rounds up to the next
	 * page multiple) or type "type".  A handle (key) for the allocated
	 * memory is returned.  On error, the return value is -1.
	 */

	if (!GARTInit(screenNum) || acquiredScreen != screenNum)
		return -1;

	pages = (size / AGP_PAGE_SIZE);
	if (size % AGP_PAGE_SIZE != 0)
		pages++;

	/* XXX check for pages == 0? */

	alloc.pg_count = pages;
	alloc.type = type;

	if (ioctl(gartFd, AGPIOC_ALLOCATE, &alloc) != 0) {
		xf86DrvMsg(screenNum, X_WARNING, "xf86AllocateGARTMemory: "
			   "allocation of %d pages failed\n\t(%s)\n", pages,
			   strerror(errno));
		return -1;
	}

	if (physical)
		*physical = alloc.physical;

	return alloc.key;
}
示例#6
0
AgpInfoPtr
xf86GetAGPInfo(int screenNum)
{
	struct _agp_info agpinf;
	AgpInfoPtr info;

	if (!GARTInit(screenNum))
		return NULL;


	if ((info = calloc(sizeof(AgpInfo), 1)) == NULL) {
		xf86DrvMsg(screenNum, X_ERROR,
			   "xf86GetAGPInfo: Failed to allocate AgpInfo\n");
		return NULL;
	}

	memset((char*)&agpinf, 0, sizeof(agpinf));

	if (ioctl(gartFd, AGPIOC_INFO, &agpinf) != 0) {
		xf86DrvMsg(screenNum, X_ERROR,
			   "xf86GetAGPInfo: AGPIOC_INFO failed (%s)\n",
			   strerror(errno));
		return NULL;
	}

	info->bridgeId = agpinf.bridge_id;
	info->agpMode = agpinf.agp_mode;
	info->base = agpinf.aper_base;
	info->size = agpinf.aper_size;
	info->totalPages = agpinf.pg_total;
	info->systemPages = agpinf.pg_system;
	info->usedPages = agpinf.pg_used;

	xf86DrvMsg(screenNum, X_INFO, "Kernel reported %zu total, %zu used\n", agpinf.pg_total, agpinf.pg_used);

	return info;
}
示例#7
0
文件: agp.c 项目: aosm/X11server
/* Bind GART memory with "key" at "offset" */
Bool
KdBindGARTMemory(int screenNum, int key, unsigned long offset)
{
	struct _agp_bind bind;
	int pageOffset;

	if (!GARTInit() || acquiredScreen != screenNum)
		return FALSE;

	if (acquiredScreen != screenNum) {
            fprintf(stderr, 
                    "AGP not acquired by this screen\n"); 
            return FALSE;
	}

	if (offset % AGP_PAGE_SIZE != 0) {
            fprintf(stderr, "KdBindGARTMemory: " 
                    "offset (0x%lx) is not page-aligned (%d)\n", 
                    offset, AGP_PAGE_SIZE); 
            return FALSE;
	}
	pageOffset = offset / AGP_PAGE_SIZE;

	bind.pg_start = pageOffset;
	bind.key = key;

	if (ioctl(gartFd, AGPIOC_BIND, &bind) != 0) {
		fprintf(stderr, "KdBindGARTMemory: "
                        "binding of gart memory with key %d\n"
                        "\tat offset 0x%lx failed (%s)\n",
                        key, offset, strerror(errno));
		return FALSE;
	}

	return TRUE;
}
示例#8
0
文件: sun_agp.c 项目: Agnarr/xserver
Bool
xf86AgpGARTSupported(void)
{
	return (GARTInit(-1));

}
示例#9
0
Bool
xf86DeallocateGARTMemory(int screenNum, int key)
{
	if (!GARTInit(screenNum) || acquiredScreen != screenNum)
		return FALSE;

	if (acquiredScreen != screenNum) {
		xf86DrvMsg(screenNum, X_ERROR,
                   "xf86UnbindGARTMemory: AGP not acquired by this screen\n");
		return FALSE;
	}

#ifdef __linux__
	if (ioctl(gartFd, AGPIOC_DEALLOCATE, (int *)(uintptr_t)key) != 0) {
#else
	if (ioctl(gartFd, AGPIOC_DEALLOCATE, &key) != 0) {
#endif
		xf86DrvMsg(screenNum, X_WARNING,"xf86DeAllocateGARTMemory: "
                   "deallocation gart memory with key %d failed\n\t(%s)\n",
                   key, strerror(errno));
		return FALSE;
	}

	return TRUE;
}

/* Bind GART memory with "key" at "offset" */
Bool
xf86BindGARTMemory(int screenNum, int key, unsigned long offset)
{
	struct _agp_bind bind;
	int pageOffset;

	if (!GARTInit(screenNum) || acquiredScreen != screenNum)
		return FALSE;

	if (acquiredScreen != screenNum) {
		xf86DrvMsg(screenNum, X_ERROR,
		      "xf86BindGARTMemory: AGP not acquired by this screen\n");
		return FALSE;
	}

	if (offset % AGP_PAGE_SIZE != 0) {
		xf86DrvMsg(screenNum, X_WARNING, "xf86BindGARTMemory: "
			   "offset (0x%lx) is not page-aligned (%d)\n",
			   offset, AGP_PAGE_SIZE);
		return FALSE;
	}
	pageOffset = offset / AGP_PAGE_SIZE;

	xf86DrvMsgVerb(screenNum, X_INFO, 3,
		       "xf86BindGARTMemory: bind key %d at 0x%08lx "
		       "(pgoffset %d)\n", key, offset, pageOffset);

	bind.pg_start = pageOffset;
	bind.key = key;

	if (ioctl(gartFd, AGPIOC_BIND, &bind) != 0) {
		xf86DrvMsg(screenNum, X_WARNING, "xf86BindGARTMemory: "
			   "binding of gart memory with key %d\n"
			   "\tat offset 0x%lx failed (%s)\n",
			   key, offset, strerror(errno));
		return FALSE;
	}

	return TRUE;
}


/* Unbind GART memory with "key" */
Bool
xf86UnbindGARTMemory(int screenNum, int key)
{
	struct _agp_unbind unbind;

	if (!GARTInit(screenNum) || acquiredScreen != screenNum)
		return FALSE;

	if (acquiredScreen != screenNum) {
		xf86DrvMsg(screenNum, X_ERROR,
		    "xf86UnbindGARTMemory: AGP not acquired by this screen\n");
		return FALSE;
	}

	unbind.priority = 0;
	unbind.key = key;

	if (ioctl(gartFd, AGPIOC_UNBIND, &unbind) != 0) {
		xf86DrvMsg(screenNum, X_WARNING, "xf86UnbindGARTMemory: "
			   "unbinding of gart memory with key %d "
			   "failed (%s)\n", key, strerror(errno));
		return FALSE;
	}

	xf86DrvMsgVerb(screenNum, X_INFO, 3,
		       "xf86UnbindGARTMemory: unbind key %d\n", key);

	return TRUE;
}


/* XXX Interface may change. */
Bool
xf86EnableAGP(int screenNum, CARD32 mode)
{
	agp_setup setup;

	if (!GARTInit(screenNum) || acquiredScreen != screenNum)
		return FALSE;

	setup.agp_mode = mode;
	if (ioctl(gartFd, AGPIOC_SETUP, &setup) != 0) {
		xf86DrvMsg(screenNum, X_WARNING, "xf86EnableAGP: "
			   "AGPIOC_SETUP with mode %ld failed (%s)\n",
			   (unsigned long)mode, strerror(errno));
		return FALSE;
	}

	return TRUE;
}
示例#10
0
文件: agp.c 项目: aosm/X11server
Bool
KdAgpGARTSupported()
{
	return GARTInit();
}