int __init hiddev_init(void) { hiddev_devfs_handle = devfs_mk_dir(devfs_find_handle(NULL, "usb", 0, 0, 0, 0), "hid", NULL); usb_register(&hiddev_driver); return 0; }
/* * hwgraph_path_to_vertex - Return the devfs entry handle for the given * pathname .. assume traverse symlinks too!. */ vertex_hdl_t hwgraph_path_to_vertex(char *path) { return(devfs_find_handle(NULL, /* start dir */ path, /* path */ 0, /* major */ 0, /* minor */ 0, /* char | block */ 1)); /* traverse symlinks */ }
/* ARGSUSED */ int hwgraph_edge_get(vertex_hdl_t from, char *name, vertex_hdl_t *toptr) { int namelen = 0; vertex_hdl_t target_handle = NULL; if (name == NULL) return(-1); if (toptr == NULL) return(-1); /* * If the name is "." just return the current devfs entry handle. */ if (!strcmp(name, HWGRAPH_EDGELBL_DOT)) { if (toptr) { *toptr = from; } } else if (!strcmp(name, HWGRAPH_EDGELBL_DOTDOT)) { /* * Hmmm .. should we return the connect point or parent .. * see in hwgraph, the concept of parent is the connectpt! * * Maybe we should see whether the connectpt is set .. if * not just return the parent! */ target_handle = hwgraph_connectpt_get(from); if (target_handle) { /* * Just return the connect point. */ *toptr = target_handle; return(0); } target_handle = devfs_get_parent(from); *toptr = target_handle; } else { /* * Call devfs to get the devfs entry. */ namelen = (int) strlen(name); target_handle = devfs_find_handle (from, name, 0, 0, 0, 1); /* Yes traverse symbolic links */ if (target_handle == NULL) return(-1); else *toptr = target_handle; } return(0); }
/* Initialize the module - Register the character device */ int aud_init_module() { int ret_val; int *ver; struct aud_ucode_info **uc_ptr; devfs_handle_t devfs_handle; int i; /* Register the character device (atleast try) */ ret_val = devfs_register_chrdev(MAJOR_NUM_ADEC, DEVICE_NAME_ADEC, &Fops); /* Negative values signify an error */ if (ret_val < 0) { PDEBUG("AUD: %s failed with %d\n", "Sorry, registering the character device ", ret_val); return ret_val; } for(i=0; i < no_devnodes; i++) { devfs_handle = devfs_find_handle(NULL, devnodes[i].name, 0, 0, DEVFS_SPECIAL_CHR,0); if(devfs_handle == NULL) { devfs_handle = devfs_register(NULL, devnodes[i].name, DEVFS_FL_DEFAULT, MAJOR_NUM_ADEC, devnodes[i].minor, S_IFCHR | S_IRUSR | S_IWUSR, devnodes[i].fops, NULL); devnodes[i].devfs_handle = devfs_handle; } else { devnodes[i].devfs_handle = NULL; } } /* print version numbers for audio microcode */ for (uc_ptr = aud_ucode_info; *uc_ptr != NULL; uc_ptr++) { if (((*uc_ptr)->ucode[248] != 0) || ((*uc_ptr)->ucode[249] != 0)) { ver = (int *)(&(*uc_ptr)->ucode[248]); printk(KERN_NOTICE "audio microcode %s **test version** built on %d/%d/%d\n", (*uc_ptr)->name, (*ver%10000)/100, *ver%100, *ver/10000); } else { printk(KERN_NOTICE "audio microcode %s ver %d.%d\n", (*uc_ptr)->name, (*uc_ptr)->ucode[250], (*uc_ptr)->ucode[251]); } } //DEMUX_REG_AVCB(&aud_callback, 1, 1); PDEBUG("AUD: Initialize adec_dev OK!\n"); return 0; }
/* Called by modules package when removing the driver */ void cleanup_module(void) { int i; char devname[9]; TRACE_FUN(ft_t_flow); if (devfs_unregister_chrdev(QIC117_TAPE_MAJOR, "zft") != 0) { TRACE(ft_t_warn, "failed"); } else { TRACE(ft_t_info, "successful"); } for (i = 0; i < 4; i++) { sprintf(devname, "qft%i", i); devfs_unregister(devfs_find_handle(NULL, devname, QIC117_TAPE_MAJOR, i, DEVFS_SPECIAL_CHR, 0)); sprintf(devname, "nqft%i", i); devfs_unregister(devfs_find_handle(NULL, devname, QIC117_TAPE_MAJOR, i + 4, DEVFS_SPECIAL_CHR, 0)); sprintf(devname, "zqft%i", i); devfs_unregister(devfs_find_handle(NULL, devname, QIC117_TAPE_MAJOR, i + 16, DEVFS_SPECIAL_CHR, 0)); sprintf(devname, "nzqft%i", i); devfs_unregister(devfs_find_handle(NULL, devname, QIC117_TAPE_MAJOR, i + 20, DEVFS_SPECIAL_CHR, 0)); sprintf(devname, "rawqft%i", i); devfs_unregister(devfs_find_handle(NULL, devname, QIC117_TAPE_MAJOR, i + 32, DEVFS_SPECIAL_CHR, 0)); sprintf(devname, "nrawqft%i", i); devfs_unregister(devfs_find_handle(NULL, devname, QIC117_TAPE_MAJOR, i + 36, DEVFS_SPECIAL_CHR, 0)); } zft_uninit_mem(); /* release remaining memory, if any */ printk(KERN_INFO "zftape successfully unloaded.\n"); TRACE_EXIT; }
static void __exit capi_exit(void) { #ifdef CONFIG_ISDN_CAPI_MIDDLEWARE unsigned int j; #endif alloc_exit(); (void)proc_exit(); devfs_unregister_chrdev(capi_major, "capi20"); devfs_unregister(devfs_find_handle(NULL, "isdn/capi20", capi_major, 0, DEVFS_SPECIAL_CHR, 0)); #ifdef CONFIG_ISDN_CAPI_MIDDLEWARE capinc_tty_exit(); devfs_unregister_chrdev(capi_rawmajor, "capi/r%d"); for (j = 0; j < CAPINC_NR_PORTS; j++) { char devname[32]; sprintf(devname, "capi/r%u", j); devfs_unregister(devfs_find_handle(NULL, devname, capi_rawmajor, j, DEVFS_SPECIAL_CHR, 0)); } #endif (void) detach_capi_interface(&cuser); printk(KERN_NOTICE "capi: Rev %s: unloaded\n", rev); }
void __exit exit_gscd(void) { CLEAR_TIMER; devfs_unregister(devfs_find_handle(NULL, "gscd", 0, 0, DEVFS_SPECIAL_BLK, 0)); if ((devfs_unregister_blkdev(MAJOR_NR, "gscd" ) == -EINVAL)) { printk("What's that: can't unregister GoldStar-module\n" ); return; } blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR)); release_region (gscd_port,4); printk(KERN_INFO "GoldStar-module released.\n" ); }
/* * hwgraph_path_lookup - return the handle for the given path. * */ int hwgraph_path_lookup( vertex_hdl_t start_vertex_handle, char *lookup_path, vertex_hdl_t *vertex_handle_ptr, char **remainder) { *vertex_handle_ptr = devfs_find_handle(start_vertex_handle, /* start dir */ lookup_path, /* path */ 0, /* major */ 0, /* minor */ 0, /* char | block */ 1); /* traverse symlinks */ if (*vertex_handle_ptr == NULL) return(-1); else return(0); }
/* * hwgraph_traverse - Find and return the devfs handle starting from de. * */ graph_error_t hwgraph_traverse(vertex_hdl_t de, char *path, vertex_hdl_t *found) { /* * get the directory entry (path should end in a directory) */ *found = devfs_find_handle(de, /* start dir */ path, /* path */ 0, /* major */ 0, /* minor */ 0, /* char | block */ 1); /* traverse symlinks */ if (*found == NULL) return(GRAPH_NOT_FOUND); else return(GRAPH_SUCCESS); }
static int __init create_dev(char *name, kdev_t dev, char *devfs_name) { void *handle; char path[64]; int n; sys_unlink(name); if (!do_devfs) return sys_mknod(name, S_IFBLK|0600, kdev_t_to_nr(dev)); handle = devfs_find_handle(NULL, dev ? NULL : devfs_name, MAJOR(dev), MINOR(dev), DEVFS_SPECIAL_BLK, 1); if (!handle) return -1; n = devfs_generate_path(handle, path + 5, sizeof (path) - 5); if (n < 0) return -1; return sys_symlink(path + n + 5, name); }
inline int xp_sys_unhook() { /* Called by rmmod when removing the module. */ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) unregister_chrdev(dev_major, DEVICE_NAME); devfs_remove(DEVICE_NAME); #else #ifdef CONFIG_DEVFS_FS devfs_unregister_chrdev(dev_major, DEVICE_NAME); devfs_unregister(devfs_find_handle(NULL, DEVICE_NAME, dev_major, 0, DEVFS_SPECIAL_CHR, 0)); #else unregister_chrdev(dev_major, DEVICE_NAME); #endif #endif return 0; }
/* init module */ int __init sci_module_init(void) { int rc; devfs_handle_t devfs_handle; int i; if (sci_osd_init(detect_p, vcc_p) == SCI_ERROR_OK) { /* Register the character device (at least try) */ if ((rc = devfs_register_chrdev(MAJOR_NUM, DEVICE_NAME, &Fops)) >= 0) { PDEBUG("success\n"); rc = 0; } for(i=0; i < no_devnodes; i++) { devfs_handle = devfs_find_handle(NULL, devnodes[i].name, 0, 0, DEVFS_SPECIAL_CHR,0); if(devfs_handle == NULL) { devfs_handle = devfs_register(NULL, devnodes[i].name, DEVFS_FL_DEFAULT, MAJOR_NUM, devnodes[i].minor, S_IFCHR | S_IRUSR | S_IWUSR, devnodes[i].fops, NULL); devnodes[i].devfs_handle = devfs_handle; } else { devnodes[i].devfs_handle = NULL; } } } else { PDEBUG("failed\n"); rc = -1; } return (rc); }
static int __init gfx_inf_init(void) { int rtn = gfx_inf_h_init(GFX_MAX_ALLOWED_SURFACES); // print the driver verision info for futher reference PVERSION(GFX_DRIVER_NAME); if(rtn < 0) { PFATALE("GFX: Failed to initialize device!\n"); return -1; } if (devfs_register_chrdev(GFX_DEV_MAJOR, GFX_DRIVER_NAME, &GfxFops) < 0) { gfx_inf_h_deinit(2); PFATALE("GFX: Failed to register device!\n"); return -1; } devfs_handle = devfs_find_handle(NULL, "stbgfx", 0, 0, DEVFS_SPECIAL_CHR,0); if(devfs_handle == NULL) { devfs_handle = devfs_register(NULL, "stbgfx", DEVFS_FL_DEFAULT, GFX_DEV_MAJOR, 0, S_IFCHR | S_IRUSR | S_IWUSR, &GfxFops, NULL); } else devfs_handle = NULL; /* * Initialize the dma module -- BJC 102102 */ if(gfx_atom_init() != 0) { PFATALE("GFX: Failed to initialize graphics atom!\n"); } return 0; }
void snd_info_free_device(snd_info_entry_t * entry) { #ifdef CONFIG_DEVFS_FS char dname[32]; devfs_handle_t master; #endif snd_runtime_check(entry, return); down(&info_mutex); snd_remove_proc_entry(snd_proc_dev, entry->p); up(&info_mutex); #ifdef CONFIG_DEVFS_FS if (entry->p && strncmp(entry->name, "controlC", 8)) { sprintf(dname, "snd/%s", entry->name); master = devfs_find_handle(NULL, dname, 0, 0, DEVFS_SPECIAL_CHR, 0); devfs_unregister(master); } #endif snd_info_free_entry(entry); }
static int __init capi_init(void) { char *p; char *compileinfo; MOD_INC_USE_COUNT; if ((p = strchr(revision, ':')) != 0 && p[1]) { strncpy(rev, p + 2, sizeof(rev)); rev[sizeof(rev)-1] = 0; if ((p = strchr(rev, '$')) != 0 && p > rev) *(p-1) = 0; } else strcpy(rev, "1.0"); if (devfs_register_chrdev(capi_major, "capi20", &capi_fops)) { printk(KERN_ERR "capi20: unable to get major %d\n", capi_major); MOD_DEC_USE_COUNT; return -EIO; } #ifdef CONFIG_ISDN_CAPI_MIDDLEWARE if (devfs_register_chrdev(capi_rawmajor, "capi/r%d", &capinc_raw_fops)) { devfs_unregister_chrdev(capi_major, "capi20"); printk(KERN_ERR "capi20: unable to get major %d\n", capi_rawmajor); MOD_DEC_USE_COUNT; return -EIO; } devfs_register_series (NULL, "capi/r%u", CAPINC_NR_PORTS, DEVFS_FL_DEFAULT, capi_rawmajor, 0, S_IFCHR | S_IRUSR | S_IWUSR, &capinc_raw_fops, NULL); #endif /* CONFIG_ISDN_CAPI_MIDDLEWARE */ devfs_register (NULL, "isdn/capi20", DEVFS_FL_DEFAULT, capi_major, 0, S_IFCHR | S_IRUSR | S_IWUSR, &capi_fops, NULL); printk(KERN_NOTICE "capi20: started up with major %d\n", capi_major); if ((capifuncs = attach_capi_interface(&cuser)) == 0) { MOD_DEC_USE_COUNT; devfs_unregister_chrdev(capi_major, "capi20"); #ifdef CONFIG_ISDN_CAPI_MIDDLEWARE devfs_unregister_chrdev(capi_rawmajor, "capi/r%d"); #endif /* CONFIG_ISDN_CAPI_MIDDLEWARE */ devfs_unregister(devfs_find_handle(NULL, "capi20", capi_major, 0, DEVFS_SPECIAL_CHR, 0)); return -EIO; } #ifdef CONFIG_ISDN_CAPI_MIDDLEWARE if (capinc_tty_init() < 0) { (void) detach_capi_interface(&cuser); devfs_unregister_chrdev(capi_major, "capi20"); devfs_unregister_chrdev(capi_rawmajor, "capi/r%d"); MOD_DEC_USE_COUNT; return -ENOMEM; } #endif /* CONFIG_ISDN_CAPI_MIDDLEWARE */ if (alloc_init() < 0) { #ifdef CONFIG_ISDN_CAPI_MIDDLEWARE unsigned int j; devfs_unregister_chrdev(capi_rawmajor, "capi/r%d"); for (j = 0; j < CAPINC_NR_PORTS; j++) { char devname[32]; sprintf(devname, "capi/r%u", j); devfs_unregister(devfs_find_handle(NULL, devname, capi_rawmajor, j, DEVFS_SPECIAL_CHR, 0)); } capinc_tty_exit(); #endif /* CONFIG_ISDN_CAPI_MIDDLEWARE */ (void) detach_capi_interface(&cuser); devfs_unregister_chrdev(capi_major, "capi20"); devfs_unregister(devfs_find_handle(NULL, "capi20", capi_major, 0, DEVFS_SPECIAL_CHR, 0)); MOD_DEC_USE_COUNT; return -ENOMEM; } (void)proc_init(); #ifdef CONFIG_ISDN_CAPI_MIDDLEWARE #if defined(CONFIG_ISDN_CAPI_CAPIFS) || defined(CONFIG_ISDN_CAPI_CAPIFS_MODULE) compileinfo = " (middleware+capifs)"; #else compileinfo = " (no capifs)"; #endif #else compileinfo = " (no middleware)"; #endif printk(KERN_NOTICE "capi20: Rev %s: started up with major %d%s\n", rev, capi_major, compileinfo); MOD_DEC_USE_COUNT; return 0; }