예제 #1
0
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;
}
예제 #2
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;
}
예제 #3
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;
}
예제 #4
0
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
}
예제 #5
0
/* 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;
}
예제 #6
0
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;
}