static int init_etherfabric_char(void) { int rc = 0; int major = 0; /* specify default major number here */ ci_set_log_prefix("[sfc_char_debug] "); ci_mm_tbl_init(); if ((rc = register_chrdev(major, EFAB_CHAR_NAME, &ci_char_fops)) < 0) { ci_log("%s: can't register char device %d", EFAB_CHAR_NAME, rc); return rc; } if (major == 0) major = rc; ci_char_major = major; #ifdef NEED_IOCTL32 /* In 2.6.11 onwards, this uses the .compat_ioctl file op instead */ /* register 64 bit handler for 32 bit ioctls */ { int ioc; for(ioc = CI_IOC_CHAR_BASE; ioc <= CI_IOC_CHAR_MAX; ioc ++){ register_ioctl32_conversion(ioc, NULL); } } #endif return 0; }
int snd_ioctl32_register(struct ioctl32_mapper *mappers) { int err; struct ioctl32_mapper *m; for (m = mappers; m->cmd; m++) { err = register_ioctl32_conversion(m->cmd, m->handler); if (err >= 0) m->registered++; } return 0; }
/* registration routines */ int asd_register_ioctl_dev(void) { int err; err = 0; asd_ctl_major = 0; /* * Register the IOCTL control device and request * for a dynamic major number */ if (!(asd_ctl_major = register_chrdev(0, ASD_CTL_DEV_NAME, &asd_ctl_fops))) { return -ENODEV; } #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 11) #ifdef __x86_64__ /* * This ioctl handler module is compatible between 64 and 32 bit * environments, hence register the default handler as 32bit * ioctl conversion handler. */ err |= register_ioctl32_conversion(ASD_CC_SAS_GET_CNTLR_CONFIG, (void *)sys_ioctl); err |= register_ioctl32_conversion(ASD_CC_SAS_GET_ADPT_CNTLR_CONFIG, (void *)sys_ioctl); err |= register_ioctl32_conversion( ASD_CC_SAS_GET_NV_SEGMENT_PROPERTIES, (void *)sys_ioctl); err |= register_ioctl32_conversion(ASD_CC_SAS_WRITE_NV_SEGMENT, (void *)sys_ioctl); err |= register_ioctl32_conversion(ASD_CC_SAS_READ_NV_SEGMENT, (void *)sys_ioctl); #endif /* #ifdef __x86_64__ */ #endif return err; }
void osi_ioctl_init(void) { struct proc_dir_entry *entry; entry = create_proc_entry(PROC_SYSCALL_NAME, 0666, openafs_procfs); entry->proc_fops = &afs_syscall_fops; entry->owner = THIS_MODULE; #if defined(NEED_IOCTL32) && !defined(HAVE_COMPAT_IOCTL) if (register_ioctl32_conversion(VIOC_SYSCALL32, NULL) == 0) ioctl32_done = 1; #endif }
/* module initialization below here. dasd already provides a mechanism * to dynamically register ioctl functions, so we simply use this. */ static inline int ioctl_reg(unsigned int no, dasd_ioctl_fn_t handler) { int ret; ret = dasd_ioctl_no_register(THIS_MODULE, no, handler); #ifdef CONFIG_COMPAT if (ret) return ret; ret = register_ioctl32_conversion(no, NULL); if (ret) dasd_ioctl_no_unregister(THIS_MODULE, no, handler); #endif return ret; }
int __init xfs_ioctl32_init(void) { int error, i; for (i = 0; xfs_ioctl32_trans[i].cmd != 0; i++) { error = register_ioctl32_conversion(xfs_ioctl32_trans[i].cmd, xfs_ioctl32_trans[i].handler); if (error) goto fail; } return 0; fail: while (--i) unregister_ioctl32_conversion(xfs_ioctl32_trans[i].cmd); return error; }