1 /* 2 * 3 * Copyright (c) International Business Machines Corp., 2001 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 13 * the GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 * 19 20 * This is the main of your user space test program, 21 * which will open the correct kernel module, find the 22 * file descriptor value and use that value to make 23 * ioctl calls to the system 24 * 25 * 26 * author: Kai Zhao 27 * date: 09/03/2003 28 * 29 */ 30 31 #include <stdio.h> 32 #include <stdlib.h> 33 #include <errno.h> 34 #include <sys/stat.h> 35 #include <sys/ioctl.h> 36 #include <fcntl.h> 37 #include <linux/kernel.h> 38 #include <linux/errno.h> 39 40 #include "../kernel_space/tdrm.h" 41 #include "drm.h" 42 43 static int tdrm_fd = -1; /* file descriptor */ 44 45 int tdrmopen() 46 { 47 48 dev_t devt; 49 struct stat st; 50 int rc = 0; 51 52 devt = makedev(TDRM_MAJOR, 0); 53 54 if (rc) { 55 if (errno == ENOENT) { 56 /* dev node does not exist. */ 57 rc = mkdir(DEVICE_NAME, (S_IFDIR | S_IRWXU | 58 S_IRGRP | S_IXGRP | 59 S_IROTH | S_IXOTH)); 60 } else { 61 printf 62 ("ERROR: Problem with Base dev directory. Error code from stat() is %d\n\n", 63 errno); 64 } 65 66 } else { 67 if (!(st.st_mode & S_IFDIR)) { 68 rc = unlink(DEVICE_NAME); 69 if (!rc) { 70 rc = mkdir(DEVICE_NAME, (S_IFDIR | S_IRWXU | 71 S_IRGRP | S_IXGRP | 72 S_IROTH | S_IXOTH)); 73 } 74 } 75 } 76 77 /* 78 * Check for the /dev/tbase node, and create if it does not 79 * exist. 80 */ 81 rc = stat(DEVICE_NAME, &st); 82 if (rc) { 83 if (errno == ENOENT) { 84 /* dev node does not exist */ 85 rc = mknod(DEVICE_NAME, 86 (S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | 87 S_IWGRP), devt); 88 } else { 89 printf 90 ("ERROR:Problem with tbase device node directory. Error code form stat() is %d\n\n", 91 errno); 92 } 93 94 } else { 95 /* 96 * /dev/tbase CHR device exists. Check to make sure it is for a 97 * block device and that it has the right major and minor. 98 */ 99 if ((!(st.st_mode & S_IFCHR)) || (st.st_rdev != devt)) { 100 101 /* Recreate the dev node. */ 102 rc = unlink(DEVICE_NAME); 103 if (!rc) { 104 rc = mknod(DEVICE_NAME, 105 (S_IFCHR | S_IRUSR | S_IWUSR | 106 S_IRGRP | S_IWGRP), devt); 107 } 108 } 109 } 110 111 tdrm_fd = open(DEVICE_NAME, O_RDWR); 112 113 if (tdrm_fd < 0) { 114 printf("ERROR: Open of device %s failed %d errno = %d\n", 115 DEVICE_NAME, tdrm_fd, errno); 116 return errno; 117 } else { 118 printf("Device opened successfully \n"); 119 return 0; 120 } 121 122 } 123 124 int tdrmclose() 125 { 126 127 if (tdrm_fd != -1) { 128 close(tdrm_fd); 129 tdrm_fd = -1; 130 } 131 } 132 133 int main() 134 { 135 int rc; 136 137 /* open the module */ 138 rc = tdrmopen(); 139 if (rc) { 140 printf("Test DRM Driver may not be loaded\n"); 141 exit(1); 142 } 143 144 printf("\tBegin drm read system ioctl\n"); 145 // 146 drm_auth_t auth; 147 if (ioctl(tdrm_fd, DRM_IOCTL_GET_MAGIC, &auth)) 148 printf("Failed on drm ioctl DRM(get_magic) test\n"); 149 else 150 printf("Success on drm ioctl DRM(get_magic) test\n"); 151 152 // 153 drm_stats_t stats; 154 if (ioctl(tdrm_fd, DRM_IOCTL_GET_STATS, &stats)) 155 printf("Failed on drm ioctl DRM(get_status) test\n"); 156 else 157 printf("Success on drm ioctl DRM(get_status) test\n"); 158 159 /*-------------------------------------------------------------- 160 * for drm read write ioctl test 161 */ 162 163 printf("\tBegin read write ioctl test\n"); 164 if (ioctl(tdrm_fd, DRM_IOCTL_IRQ_BUSID)) 165 printf("Failed on drm ioctl DRM(irq_busid)\n"); 166 else 167 printf("Success on drm ioctl DRM(irq_busid)\n"); 168 if (ioctl(tdrm_fd, DRM_IOCTL_GET_CLIENT)) 169 printf("Failed on drm ioctl DRM(get_client)\n"); 170 else 171 printf("Success on drm ioctl DRM(get_client)\n"); 172 if (ioctl(tdrm_fd, DRM_IOCTL_BLOCK)) 173 printf("Failed on drm ioctl DRM(block)\n"); 174 else 175 printf("Success on drm ioctl DRM(block)\n"); 176 if (ioctl(tdrm_fd, DRM_IOCTL_UNBLOCK)) 177 printf("Failed on drm ioctl DRM(unblock)\n"); 178 else 179 printf("Success on drm ioctl DRM(unblock)\n"); 180 if (ioctl(tdrm_fd, DRM_IOCTL_ADD_CTX)) 181 printf("Failed on drm ioctl DRM(addctx)\n"); 182 else 183 printf("Success on drm ioctl DRM(addctx)\n"); 184 if (ioctl(tdrm_fd, DRM_IOCTL_RM_CTX)) 185 printf("Failed on drm ioctl DRM(rmctx)\n"); 186 else 187 printf("Success on drm ioctl DRM(rmctx)\n"); 188 if (ioctl(tdrm_fd, DRM_IOCTL_GET_CTX)) 189 printf("Failed on drm ioctl DRM(getctx)\n"); 190 else 191 printf("Success on drm ioctl DRM(getctx)\n"); 192 if (ioctl(tdrm_fd, DRM_IOCTL_ADD_DRAW)) 193 printf("Failed on drm ioctl DRM(adddraw)\n"); 194 else 195 printf("Success on drm ioctl DRM(adddraw)\n"); 196 if (ioctl(tdrm_fd, DRM_IOCTL_RM_DRAW)) 197 printf("Failed on drm ioctl DRM(rmdraw)\n"); 198 else 199 printf("Success on drm ioctl DRM(rmdraw)\n"); 200 201 /* test drm stub_register */ 202 203 if (ioctl(tdrm_fd, TDRM_STUB_REGISTER)) 204 printf("Failed on drm stub_register test\n"); 205 else 206 printf("Success on drm stub_register test\n"); 207 208 // test drm DRM(agp_uninit) 209 210 if (ioctl(tdrm_fd, TDRM_UNINIT_AGP)) 211 printf("Failed on DRM(agp_uninit) test\n"); 212 else 213 printf("Success on DRM(agp_uninit) test\n"); 214 215 // test drm DRM(agp_init) 216 217 if (ioctl(tdrm_fd, TDRM_INIT_AGP)) 218 printf("Failed on DRM(agp_init) test\n"); 219 else 220 printf("Success on DRM(agp_init) test\n"); 221 222 // test drm stub_unregister 223 224 if (ioctl(tdrm_fd, TDRM_STUB_UNREGISTER)) 225 printf("Failed on drm stub_unregister test\n"); 226 else 227 printf("Success on drm stub_unregister test\n"); 228 // test drm add magic 229 if (ioctl(tdrm_fd, TDRM_ADD_MAGIC)) 230 printf("Failed on drm DRM(add_magic) test\n"); 231 else 232 printf("Success on drm DRM(add_magic) test\n"); 233 234 // test drm remove magic 235 if (ioctl(tdrm_fd, TDRM_REMOVE_MAGIC)) 236 printf("Failed on drm DRM(remove_magic) test\n"); 237 else 238 printf("Success on drm DRM(remove_magic) test\n"); 239 240 // test drm alloc pages 241 if (ioctl(tdrm_fd, TDRM_ALLOC_PAGES)) 242 printf("Failed on drm DRM(alloc_pages) test\n"); 243 else 244 printf("Success on drm DRM(alloc_pages) test\n"); 245 // test drm free pages 246 if (ioctl(tdrm_fd, TDRM_FREE_PAGES)) 247 printf("Failed on drm DRM(free_pages) test\n"); 248 else 249 printf("Success on drm DRM(free_pages) test\n"); 250 // test drm ctxbitmap_cleanup 251 if (ioctl(tdrm_fd, TDRM_CTXBITMAP_UNINIT)) 252 printf("Failed on drm DRM(ctxbitmap_cleanup) test\n"); 253 else 254 printf("Success on drm DRM(ctxbitmap_cleanup) test\n"); 255 256 // test drm ctxbitmap init 257 if (ioctl(tdrm_fd, TDRM_CTXBITMAP_INIT)) 258 printf("Failed on drm DRM(ctxbitmap_init) test\n"); 259 else 260 printf("Success on drm DRM(ctxbitmap_init) test\n"); 261 262 static drm_version_t version; 263 if (ioctl(tdrm_fd, DRM_IOCTL_VERSION, &version)) 264 printf("Failed on drm DRM(version) test\n"); 265 else 266 printf("Success on drm DRM(version) test\n"); 267 268 static drm_auth_t myauth; 269 if (ioctl(tdrm_fd, DRM_IOCTL_GET_MAGIC, &myauth)) 270 printf("Failed on drm DRM(get_magic) test\n"); 271 else 272 printf("Success on drm DRM(get_magic) test\n"); 273 274 if (ioctl(tdrm_fd, DRM_IOCTL_AUTH_MAGIC, &auth)) 275 printf("Failed on drm authmagic test\n"); 276 else 277 printf("Success on drm authmagic test\n"); 278 279 // test for drm_agpsupport.h 280 /* 281 if (ioctl(tdrm_fd, DRM_IOCTL_AGP_RELEASE)) 282 printf("Failed on drm DRM(agp_release) test\n"); 283 else 284 printf("Success on drm DRM(agp_release) test\n"); 285 */ 286 if (ioctl(tdrm_fd, DRM_IOCTL_AGP_ACQUIRE)) 287 printf("Failed on drm DRM(agp_acquire) test\n"); 288 else 289 printf("Success on drm DRM(agp_acquire) test\n"); 290 291 if (ioctl(tdrm_fd, DRM_IOCTL_AGP_RELEASE)) 292 printf("Failed on drm DRM(agp_release) test\n"); 293 else 294 printf("Success on drm DRM(agp_release) test\n"); 295 296 if (ioctl(tdrm_fd, DRM_IOCTL_AGP_ACQUIRE)) 297 printf("Failed on drm DRM(agp_acquire) test\n"); 298 else 299 printf("Success on drm DRM(agp_acquire) test\n"); 300 301 static drm_agp_info_t agp_info; 302 if (ioctl(tdrm_fd, DRM_IOCTL_AGP_INFO, &agp_info)) 303 printf("Failed on drm DRM(agp_info) test\n"); 304 else 305 printf("Success on drm DRM(agp_info) test\n"); 306 307 static drm_agp_buffer_t agp_buffer; 308 agp_buffer.size = 64; 309 if (ioctl(tdrm_fd, DRM_IOCTL_AGP_ALLOC, &agp_buffer)) 310 printf("Failed on drm DRM(agp_alloc) test\n"); 311 else 312 printf("Success on drm DRM(agp_alloc) test\n"); 313 314 static drm_agp_binding_t bind_buffer; 315 bind_buffer.handle = agp_buffer.handle; 316 bind_buffer.offset = 64; 317 318 if (ioctl(tdrm_fd, DRM_IOCTL_AGP_BIND, &bind_buffer)) 319 printf("Failed on drm DRM(agp_bind) test\n"); 320 else 321 printf("Success on drm DRM(agp_bind) test\n"); 322 323 if (ioctl(tdrm_fd, DRM_IOCTL_AGP_UNBIND, &bind_buffer)) 324 printf("Failed on drm DRM(agp_unbind) test\n"); 325 else 326 printf("Success on drm DRM(agp_unbind) test\n"); 327 if (ioctl(tdrm_fd, DRM_IOCTL_AGP_FREE, &agp_buffer)) 328 printf("Failed on drm DRM(agp_free) test\n"); 329 else 330 printf("Success on drm DRM(agp_free) test\n"); 331 332 // test drm_ctxbitmap.h 333 static drm_ctx_t getctx; 334 if (ioctl(tdrm_fd, DRM_IOCTL_GET_CTX, &getctx)) 335 printf("Failed on drm DRM(getctx) test\n"); 336 else 337 printf("Success on drm DRM(getctx) test\n"); 338 339 static drm_ctx_t ctx; 340 if (ioctl(tdrm_fd, DRM_IOCTL_ADD_CTX, &ctx)) 341 printf("Failed on drm DRM(addctx) test\n"); 342 else 343 printf("Success on drm DRM(addctx) test\n"); 344 345 if (ioctl(tdrm_fd, DRM_IOCTL_RM_CTX, &ctx)) 346 printf("Failed on drm DRM(rmctx) test\n"); 347 else 348 printf("Success on drm DRM(rmctx) test\n"); 349 350 /* 351 static drm_ctx_priv_map_t map; 352 memset(&map,0,sizeof(drm_ctx_priv_map_t)); 353 if (ioctl(tdrm_fd, DRM_IOCTL_GET_SAREA_CTX,&map)) 354 printf("Failed on drm DRM(getsareactx) test\n"); 355 else 356 printf("Success on drm DRM(getsareactx) test\n"); 357 */ 358 // for drm_drawtable.h 359 static drm_draw_t draw; 360 if (ioctl(tdrm_fd, DRM_IOCTL_ADD_DRAW, &draw)) 361 printf("Failed on drm DRM(adddraw) test\n"); 362 else 363 printf("Success on drm DRM(adddraw) test\n"); 364 365 if (ioctl(tdrm_fd, DRM_IOCTL_RM_DRAW, &draw)) 366 printf("Failed on drm DRM(rmdraw) test\n"); 367 else 368 printf("Success on drm DRM(rmdraw) test\n"); 369 370 //for drm_ioctl.h// 371 static drm_stats_t status; 372 if (ioctl(tdrm_fd, DRM_IOCTL_GET_STATS, &status)) 373 printf("Failed on drm DRM(getstatus) test\n"); 374 else 375 printf("Success on drm DRM(getstatus) test\n"); 376 377 static drm_client_t client; 378 if (ioctl(tdrm_fd, DRM_IOCTL_GET_CLIENT, &client)) 379 printf("Failed on drm DRM(getclient) test\n"); 380 else 381 printf("Success on drm DRM(getclient) test\n"); 382 /* 383 static drm_map_t getmap; 384 getmap.offset = 0; 385 if (ioctl(tdrm_fd, DRM_IOCTL_GET_MAP,&getmap)) 386 printf("Failed on drm DRM(getmap) test\n"); 387 else 388 printf("Success on drm DRM(getmap) test\n"); 389 */ 390 static drm_unique_t unique; 391 unique.unique_len = 0; 392 if (ioctl(tdrm_fd, DRM_IOCTL_GET_UNIQUE, &unique)) 393 printf("Failed on drm DRM(getunique) test\n"); 394 else 395 printf("Success on drm DRM(getunique) test\n"); 396 /* 397 if (ioctl(tdrm_fd, DRM_IOCTL_SET_UNIQUE,&unique)) 398 printf("Failed on drm DRM(setunique) test\n"); 399 400 else 401 printf("Success on drm DRM(setunique) test\n"); 402 403 */ 404 rc = tdrmclose(); 405 if (rc) { 406 printf("Test MOD Driver may not be closed\n"); 407 exit(1); 408 } 409 410 } 411