1544a317d2595b382be2fb5166016e7c30c31b257mridge/*
23889d936787e03cdf934a7753a284e5949e12e88mridge *
33889d936787e03cdf934a7753a284e5949e12e88mridge *   Copyright (c) International Business Machines  Corp., 2001
43889d936787e03cdf934a7753a284e5949e12e88mridge *
53889d936787e03cdf934a7753a284e5949e12e88mridge *   This program is free software;  you can redistribute it and/or modify
63889d936787e03cdf934a7753a284e5949e12e88mridge *   it under the terms of the GNU General Public License as published by
73889d936787e03cdf934a7753a284e5949e12e88mridge *   the Free Software Foundation; either version 2 of the License, or
83889d936787e03cdf934a7753a284e5949e12e88mridge *   (at your option) any later version.
93889d936787e03cdf934a7753a284e5949e12e88mridge *
103889d936787e03cdf934a7753a284e5949e12e88mridge *   This program is distributed in the hope that it will be useful,
113889d936787e03cdf934a7753a284e5949e12e88mridge *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
123889d936787e03cdf934a7753a284e5949e12e88mridge *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
133889d936787e03cdf934a7753a284e5949e12e88mridge *   the GNU General Public License for more details.
143889d936787e03cdf934a7753a284e5949e12e88mridge *
153889d936787e03cdf934a7753a284e5949e12e88mridge *   You should have received a copy of the GNU General Public License
163889d936787e03cdf934a7753a284e5949e12e88mridge *   along with this program;  if not, write to the Free Software
174548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
183889d936787e03cdf934a7753a284e5949e12e88mridge *
193889d936787e03cdf934a7753a284e5949e12e88mridge
204bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * This is the main of your user space test program,
214bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * which will open the correct kernel module, find the
224bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * file descriptor value and use that value to make
23544a317d2595b382be2fb5166016e7c30c31b257mridge * ioctl calls to the system
244bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak *
25544a317d2595b382be2fb5166016e7c30c31b257mridge *
26544a317d2595b382be2fb5166016e7c30c31b257mridge * author: Kai Zhao
27544a317d2595b382be2fb5166016e7c30c31b257mridge * date:   09/03/2003
28544a317d2595b382be2fb5166016e7c30c31b257mridge *
29544a317d2595b382be2fb5166016e7c30c31b257mridge */
30544a317d2595b382be2fb5166016e7c30c31b257mridge
31544a317d2595b382be2fb5166016e7c30c31b257mridge#include <stdio.h>
32544a317d2595b382be2fb5166016e7c30c31b257mridge#include <stdlib.h>
33544a317d2595b382be2fb5166016e7c30c31b257mridge#include <errno.h>
34544a317d2595b382be2fb5166016e7c30c31b257mridge#include <sys/stat.h>
35544a317d2595b382be2fb5166016e7c30c31b257mridge#include <sys/ioctl.h>
36544a317d2595b382be2fb5166016e7c30c31b257mridge#include <fcntl.h>
37544a317d2595b382be2fb5166016e7c30c31b257mridge#include <linux/kernel.h>
38544a317d2595b382be2fb5166016e7c30c31b257mridge#include <linux/errno.h>
39544a317d2595b382be2fb5166016e7c30c31b257mridge
40544a317d2595b382be2fb5166016e7c30c31b257mridge#include "../kernel_space/tdrm.h"
41544a317d2595b382be2fb5166016e7c30c31b257mridge#include "drm.h"
42544a317d2595b382be2fb5166016e7c30c31b257mridge
43354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaostatic int tdrm_fd = -1;	/* file descriptor */
44354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
45354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint tdrmopen()
46354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
47354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
48354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dev_t devt;
49354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	struct stat st;
50354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int rc = 0;
51354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
52354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	devt = makedev(TDRM_MAJOR, 0);
53354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
54354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (rc) {
55354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if (errno == ENOENT) {
56354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/* dev node does not exist. */
57354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			rc = mkdir(DEVICE_NAME, (S_IFDIR | S_IRWXU |
58354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						 S_IRGRP | S_IXGRP |
59354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						 S_IROTH | S_IXOTH));
60354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else {
61354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			printf
62354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    ("ERROR: Problem with Base dev directory.  Error code from stat() is %d\n\n",
63354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     errno);
64354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		}
65354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
66354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
67354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if (!(st.st_mode & S_IFDIR)) {
68354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			rc = unlink(DEVICE_NAME);
69354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (!rc) {
70354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				rc = mkdir(DEVICE_NAME, (S_IFDIR | S_IRWXU |
71354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao							 S_IRGRP | S_IXGRP |
72354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao							 S_IROTH | S_IXOTH));
73354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
74354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		}
75354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
76354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
77354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	/*
78354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	 * Check for the /dev/tbase node, and create if it does not
79354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	 * exist.
80354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	 */
81354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	rc = stat(DEVICE_NAME, &st);
82354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (rc) {
83354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if (errno == ENOENT) {
84354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/* dev node does not exist */
85354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			rc = mknod(DEVICE_NAME,
86354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				   (S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP |
87354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    S_IWGRP), devt);
88354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else {
89354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			printf
90354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    ("ERROR:Problem with tbase device node directory.  Error code form stat() is %d\n\n",
91354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     errno);
92354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		}
93354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
94354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
95354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		/*
96354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		 * /dev/tbase CHR device exists.  Check to make sure it is for a
97354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		 * block device and that it has the right major and minor.
98354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		 */
99354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if ((!(st.st_mode & S_IFCHR)) || (st.st_rdev != devt)) {
100354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
101354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/* Recreate the dev node. */
102354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			rc = unlink(DEVICE_NAME);
103354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (!rc) {
104354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				rc = mknod(DEVICE_NAME,
105354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					   (S_IFCHR | S_IRUSR | S_IWUSR |
106354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    S_IRGRP | S_IWGRP), devt);
107354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
108354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		}
109354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
110354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
111354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	tdrm_fd = open(DEVICE_NAME, O_RDWR);
112354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
113354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (tdrm_fd < 0) {
114354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		printf("ERROR: Open of device %s failed %d errno = %d\n",
115354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		       DEVICE_NAME, tdrm_fd, errno);
116354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return errno;
117354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
118354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		printf("Device opened successfully \n");
119354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return 0;
120354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
121544a317d2595b382be2fb5166016e7c30c31b257mridge
122544a317d2595b382be2fb5166016e7c30c31b257mridge}
123544a317d2595b382be2fb5166016e7c30c31b257mridge
124354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint tdrmclose()
125354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
126544a317d2595b382be2fb5166016e7c30c31b257mridge
127544a317d2595b382be2fb5166016e7c30c31b257mridge	if (tdrm_fd != -1) {
128354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		close(tdrm_fd);
129544a317d2595b382be2fb5166016e7c30c31b257mridge		tdrm_fd = -1;
130544a317d2595b382be2fb5166016e7c30c31b257mridge	}
131544a317d2595b382be2fb5166016e7c30c31b257mridge}
132544a317d2595b382be2fb5166016e7c30c31b257mridge
133354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint main()
134354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
135544a317d2595b382be2fb5166016e7c30c31b257mridge	int rc;
136bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
137544a317d2595b382be2fb5166016e7c30c31b257mridge	/* open the module */
138544a317d2595b382be2fb5166016e7c30c31b257mridge	rc = tdrmopen();
139354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (rc) {
140354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		printf("Test DRM Driver may not be loaded\n");
141354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		exit(1);
142354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
143bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
144544a317d2595b382be2fb5166016e7c30c31b257mridge	printf("\tBegin drm read system ioctl\n");
145544a317d2595b382be2fb5166016e7c30c31b257mridge	//
146544a317d2595b382be2fb5166016e7c30c31b257mridge	drm_auth_t auth;
147354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_GET_MAGIC, &auth))
148544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm ioctl DRM(get_magic) test\n");
149544a317d2595b382be2fb5166016e7c30c31b257mridge	else
150544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm ioctl DRM(get_magic) test\n");
151544a317d2595b382be2fb5166016e7c30c31b257mridge
152544a317d2595b382be2fb5166016e7c30c31b257mridge	//
153544a317d2595b382be2fb5166016e7c30c31b257mridge	drm_stats_t stats;
154354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_GET_STATS, &stats))
155544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm ioctl DRM(get_status) test\n");
156544a317d2595b382be2fb5166016e7c30c31b257mridge	else
157544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm ioctl DRM(get_status) test\n");
158544a317d2595b382be2fb5166016e7c30c31b257mridge
159544a317d2595b382be2fb5166016e7c30c31b257mridge	/*--------------------------------------------------------------
160544a317d2595b382be2fb5166016e7c30c31b257mridge	 *                      for drm read write ioctl test
161544a317d2595b382be2fb5166016e7c30c31b257mridge	 */
162bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
163544a317d2595b382be2fb5166016e7c30c31b257mridge	printf("\tBegin read write ioctl test\n");
164354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_IRQ_BUSID))
165544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm ioctl DRM(irq_busid)\n");
166544a317d2595b382be2fb5166016e7c30c31b257mridge	else
167544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm ioctl DRM(irq_busid)\n");
168354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_GET_CLIENT))
169544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm ioctl DRM(get_client)\n");
170544a317d2595b382be2fb5166016e7c30c31b257mridge	else
171544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm ioctl DRM(get_client)\n");
172354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_BLOCK))
173544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm ioctl DRM(block)\n");
174544a317d2595b382be2fb5166016e7c30c31b257mridge	else
175544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm ioctl DRM(block)\n");
176354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_UNBLOCK))
177544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm ioctl DRM(unblock)\n");
178544a317d2595b382be2fb5166016e7c30c31b257mridge	else
179544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm ioctl DRM(unblock)\n");
180354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_ADD_CTX))
181544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm ioctl DRM(addctx)\n");
182544a317d2595b382be2fb5166016e7c30c31b257mridge	else
183544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm ioctl DRM(addctx)\n");
184354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_RM_CTX))
185544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm ioctl DRM(rmctx)\n");
186544a317d2595b382be2fb5166016e7c30c31b257mridge	else
187544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm ioctl DRM(rmctx)\n");
188354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_GET_CTX))
189544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm ioctl DRM(getctx)\n");
190544a317d2595b382be2fb5166016e7c30c31b257mridge	else
191544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm ioctl DRM(getctx)\n");
192354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_ADD_DRAW))
193544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm ioctl DRM(adddraw)\n");
194544a317d2595b382be2fb5166016e7c30c31b257mridge	else
195544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm ioctl DRM(adddraw)\n");
196354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_RM_DRAW))
197544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm ioctl DRM(rmdraw)\n");
198544a317d2595b382be2fb5166016e7c30c31b257mridge	else
199544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm ioctl DRM(rmdraw)\n");
200bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
201544a317d2595b382be2fb5166016e7c30c31b257mridge	/* test drm stub_register */
202bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
203df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (ioctl(tdrm_fd, TDRM_STUB_REGISTER))
204544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm stub_register test\n");
205544a317d2595b382be2fb5166016e7c30c31b257mridge	else
206544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm stub_register test\n");
207544a317d2595b382be2fb5166016e7c30c31b257mridge
2084bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak	// test drm DRM(agp_uninit)
209bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
210df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (ioctl(tdrm_fd, TDRM_UNINIT_AGP))
211544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on DRM(agp_uninit) test\n");
212544a317d2595b382be2fb5166016e7c30c31b257mridge	else
213544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on DRM(agp_uninit) test\n");
214bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
2154bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak	// test drm DRM(agp_init)
216bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
217df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (ioctl(tdrm_fd, TDRM_INIT_AGP))
218544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on DRM(agp_init) test\n");
219544a317d2595b382be2fb5166016e7c30c31b257mridge	else
220544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on DRM(agp_init) test\n");
221bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
2224bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak	// test drm stub_unregister
223bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
224df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (ioctl(tdrm_fd, TDRM_STUB_UNREGISTER))
225544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm stub_unregister test\n");
226544a317d2595b382be2fb5166016e7c30c31b257mridge	else
227544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm stub_unregister test\n");
228bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak	// test drm add magic
229354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, TDRM_ADD_MAGIC))
230544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(add_magic) test\n");
231544a317d2595b382be2fb5166016e7c30c31b257mridge	else
232544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(add_magic) test\n");
233bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
234544a317d2595b382be2fb5166016e7c30c31b257mridge	// test drm remove magic
235df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (ioctl(tdrm_fd, TDRM_REMOVE_MAGIC))
236544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(remove_magic) test\n");
237544a317d2595b382be2fb5166016e7c30c31b257mridge	else
238544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(remove_magic) test\n");
239544a317d2595b382be2fb5166016e7c30c31b257mridge
240544a317d2595b382be2fb5166016e7c30c31b257mridge	// test drm alloc pages
241df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (ioctl(tdrm_fd, TDRM_ALLOC_PAGES))
242544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(alloc_pages) test\n");
243544a317d2595b382be2fb5166016e7c30c31b257mridge	else
244544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(alloc_pages) test\n");
245544a317d2595b382be2fb5166016e7c30c31b257mridge	// test drm free pages
246df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (ioctl(tdrm_fd, TDRM_FREE_PAGES))
247544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(free_pages) test\n");
248544a317d2595b382be2fb5166016e7c30c31b257mridge	else
249544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(free_pages) test\n");
250544a317d2595b382be2fb5166016e7c30c31b257mridge	// test drm ctxbitmap_cleanup
251df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (ioctl(tdrm_fd, TDRM_CTXBITMAP_UNINIT))
252544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(ctxbitmap_cleanup) test\n");
253544a317d2595b382be2fb5166016e7c30c31b257mridge	else
254544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(ctxbitmap_cleanup) test\n");
255bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
256544a317d2595b382be2fb5166016e7c30c31b257mridge	// test drm ctxbitmap init
257df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (ioctl(tdrm_fd, TDRM_CTXBITMAP_INIT))
258544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(ctxbitmap_init) test\n");
259544a317d2595b382be2fb5166016e7c30c31b257mridge	else
260544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(ctxbitmap_init) test\n");
261bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
262bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak	static drm_version_t version;
263354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_VERSION, &version))
264544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(version) test\n");
265544a317d2595b382be2fb5166016e7c30c31b257mridge	else
266544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(version) test\n");
267544a317d2595b382be2fb5166016e7c30c31b257mridge
268544a317d2595b382be2fb5166016e7c30c31b257mridge	static drm_auth_t myauth;
269354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_GET_MAGIC, &myauth))
270544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(get_magic) test\n");
271544a317d2595b382be2fb5166016e7c30c31b257mridge	else
272544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(get_magic) test\n");
273544a317d2595b382be2fb5166016e7c30c31b257mridge
274354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_AUTH_MAGIC, &auth))
275544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm authmagic test\n");
276544a317d2595b382be2fb5166016e7c30c31b257mridge	else
277544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm authmagic test\n");
278bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
2794bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak	//  test for drm_agpsupport.h
280544a317d2595b382be2fb5166016e7c30c31b257mridge	/*
281354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   if (ioctl(tdrm_fd, DRM_IOCTL_AGP_RELEASE))
282354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   printf("Failed on drm DRM(agp_release) test\n");
283354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   else
284354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   printf("Success on drm DRM(agp_release) test\n");
285354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	 */
286df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (ioctl(tdrm_fd, DRM_IOCTL_AGP_ACQUIRE))
287544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(agp_acquire) test\n");
288544a317d2595b382be2fb5166016e7c30c31b257mridge	else
289544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(agp_acquire) test\n");
290bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
291df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (ioctl(tdrm_fd, DRM_IOCTL_AGP_RELEASE))
292544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(agp_release) test\n");
293544a317d2595b382be2fb5166016e7c30c31b257mridge	else
294544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(agp_release) test\n");
295bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
296df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (ioctl(tdrm_fd, DRM_IOCTL_AGP_ACQUIRE))
297544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(agp_acquire) test\n");
298544a317d2595b382be2fb5166016e7c30c31b257mridge	else
299544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(agp_acquire) test\n");
300544a317d2595b382be2fb5166016e7c30c31b257mridge
301bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak	static drm_agp_info_t agp_info;
302354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_AGP_INFO, &agp_info))
303544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(agp_info) test\n");
304544a317d2595b382be2fb5166016e7c30c31b257mridge	else
305544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(agp_info) test\n");
306544a317d2595b382be2fb5166016e7c30c31b257mridge
307544a317d2595b382be2fb5166016e7c30c31b257mridge	static drm_agp_buffer_t agp_buffer;
308bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak	agp_buffer.size = 64;
309354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_AGP_ALLOC, &agp_buffer))
310544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(agp_alloc) test\n");
311544a317d2595b382be2fb5166016e7c30c31b257mridge	else
312544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(agp_alloc) test\n");
313bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
314544a317d2595b382be2fb5166016e7c30c31b257mridge	static drm_agp_binding_t bind_buffer;
315544a317d2595b382be2fb5166016e7c30c31b257mridge	bind_buffer.handle = agp_buffer.handle;
316544a317d2595b382be2fb5166016e7c30c31b257mridge	bind_buffer.offset = 64;
317bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
318354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_AGP_BIND, &bind_buffer))
319544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(agp_bind) test\n");
320544a317d2595b382be2fb5166016e7c30c31b257mridge	else
321544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(agp_bind) test\n");
322bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
323354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_AGP_UNBIND, &bind_buffer))
324544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(agp_unbind) test\n");
325544a317d2595b382be2fb5166016e7c30c31b257mridge	else
326544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(agp_unbind) test\n");
327354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_AGP_FREE, &agp_buffer))
328544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(agp_free) test\n");
329544a317d2595b382be2fb5166016e7c30c31b257mridge	else
330544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(agp_free) test\n");
331544a317d2595b382be2fb5166016e7c30c31b257mridge
3322c28215423293e443469a07ae7011135d058b671Garrett Cooper	// test drm_ctxbitmap.h
333544a317d2595b382be2fb5166016e7c30c31b257mridge	static drm_ctx_t getctx;
334354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_GET_CTX, &getctx))
335544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(getctx) test\n");
336544a317d2595b382be2fb5166016e7c30c31b257mridge	else
337544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(getctx) test\n");
338544a317d2595b382be2fb5166016e7c30c31b257mridge
339bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak	static drm_ctx_t ctx;
340354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_ADD_CTX, &ctx))
341544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(addctx) test\n");
342544a317d2595b382be2fb5166016e7c30c31b257mridge	else
343544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(addctx) test\n");
344bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
345354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_RM_CTX, &ctx))
346544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(rmctx) test\n");
347544a317d2595b382be2fb5166016e7c30c31b257mridge	else
348544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(rmctx) test\n");
349bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
350544a317d2595b382be2fb5166016e7c30c31b257mridge	/*
351354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   static drm_ctx_priv_map_t map;
352354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   memset(&map,0,sizeof(drm_ctx_priv_map_t));
353354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   if (ioctl(tdrm_fd, DRM_IOCTL_GET_SAREA_CTX,&map))
354354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   printf("Failed on drm DRM(getsareactx) test\n");
355354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   else
356354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   printf("Success on drm DRM(getsareactx) test\n");
357354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	 */
358544a317d2595b382be2fb5166016e7c30c31b257mridge	// for drm_drawtable.h
359544a317d2595b382be2fb5166016e7c30c31b257mridge	static drm_draw_t draw;
360354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_ADD_DRAW, &draw))
361544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(adddraw) test\n");
362544a317d2595b382be2fb5166016e7c30c31b257mridge	else
363544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(adddraw) test\n");
364bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
365354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_RM_DRAW, &draw))
366544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(rmdraw) test\n");
367544a317d2595b382be2fb5166016e7c30c31b257mridge	else
368544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(rmdraw) test\n");
369bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
370544a317d2595b382be2fb5166016e7c30c31b257mridge	//for drm_ioctl.h//
371544a317d2595b382be2fb5166016e7c30c31b257mridge	static drm_stats_t status;
372354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_GET_STATS, &status))
373544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(getstatus) test\n");
374544a317d2595b382be2fb5166016e7c30c31b257mridge	else
375544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(getstatus) test\n");
376bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
377544a317d2595b382be2fb5166016e7c30c31b257mridge	static drm_client_t client;
378354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_GET_CLIENT, &client))
379544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(getclient) test\n");
380544a317d2595b382be2fb5166016e7c30c31b257mridge	else
381544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(getclient) test\n");
382544a317d2595b382be2fb5166016e7c30c31b257mridge	/*
383354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   static drm_map_t getmap;
384354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   getmap.offset = 0;
385354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   if (ioctl(tdrm_fd, DRM_IOCTL_GET_MAP,&getmap))
386354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   printf("Failed on drm DRM(getmap) test\n");
387354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   else
388354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   printf("Success on drm DRM(getmap) test\n");
389354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	 */
390544a317d2595b382be2fb5166016e7c30c31b257mridge	static drm_unique_t unique;
391544a317d2595b382be2fb5166016e7c30c31b257mridge	unique.unique_len = 0;
392354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ioctl(tdrm_fd, DRM_IOCTL_GET_UNIQUE, &unique))
393544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Failed on drm DRM(getunique) test\n");
394544a317d2595b382be2fb5166016e7c30c31b257mridge	else
395544a317d2595b382be2fb5166016e7c30c31b257mridge		printf("Success on drm DRM(getunique) test\n");
396544a317d2595b382be2fb5166016e7c30c31b257mridge	/*
397354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   if (ioctl(tdrm_fd, DRM_IOCTL_SET_UNIQUE,&unique))
398354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   printf("Failed on drm DRM(setunique) test\n");
399bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
400354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   else
401354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	   printf("Success on drm DRM(setunique) test\n");
402bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
403354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	 */
404544a317d2595b382be2fb5166016e7c30c31b257mridge	rc = tdrmclose();
405df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (rc) {
406354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		printf("Test MOD Driver may not be closed\n");
407354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		exit(1);
408354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
409bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
410ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman}
411