⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ioctl32.c

📁 这个linux源代码是很全面的~基本完整了~使用c编译的~由于时间问题我没有亲自测试~但就算用来做参考资料也是非常好的
💻 C
📖 第 1 页 / 共 2 页
字号:
		err |= __get_user(info.port, &((struct mtconfiginfo32 *)arg)->port);		err |= __get_user(info.debug, &((struct mtconfiginfo32 *)arg)->debug);		err |= __copy_from_user((char *)&info.debug + sizeof(info.debug),				     (char *)&((struct mtconfiginfo32 *)arg)->debug				     + sizeof(((struct mtconfiginfo32 *)arg)->debug), sizeof(__u32));		if (err)			return -EFAULT;		break;	default:		do {			static int count = 0;			if (++count <= 20)				printk("mt_ioctl: Unknown cmd fd(%d) "				       "cmd(%08x) arg(%08x)\n",				       (int)fd, (unsigned int)cmd, (unsigned int)arg);		} while(0);		return -EINVAL;	}	set_fs (KERNEL_DS);	err = sys_ioctl (fd, kcmd, (unsigned long)karg);	set_fs (old_fs);	if (err)		return err;	switch (cmd) {	case MTIOCPOS32:		err = __put_user(pos.mt_blkno, &((struct mtpos32 *)arg)->mt_blkno);		break;	case MTIOCGET32:		err = __put_user(get.mt_type, &((struct mtget32 *)arg)->mt_type);		err |= __put_user(get.mt_resid, &((struct mtget32 *)arg)->mt_resid);		err |= __put_user(get.mt_dsreg, &((struct mtget32 *)arg)->mt_dsreg);		err |= __put_user(get.mt_gstat, &((struct mtget32 *)arg)->mt_gstat);		err |= __put_user(get.mt_erreg, &((struct mtget32 *)arg)->mt_erreg);		err |= __put_user(get.mt_fileno, &((struct mtget32 *)arg)->mt_fileno);		err |= __put_user(get.mt_blkno, &((struct mtget32 *)arg)->mt_blkno);		break;	case MTIOCGETCONFIG32:		err = __put_user(info.mt_type, &((struct mtconfiginfo32 *)arg)->mt_type);		err |= __put_user(info.ifc_type, &((struct mtconfiginfo32 *)arg)->ifc_type);		err |= __put_user(info.irqnr, &((struct mtconfiginfo32 *)arg)->irqnr);		err |= __put_user(info.dmanr, &((struct mtconfiginfo32 *)arg)->dmanr);		err |= __put_user(info.port, &((struct mtconfiginfo32 *)arg)->port);		err |= __put_user(info.debug, &((struct mtconfiginfo32 *)arg)->debug);		err |= __copy_to_user((char *)&((struct mtconfiginfo32 *)arg)->debug			    		   + sizeof(((struct mtconfiginfo32 *)arg)->debug),					   (char *)&info.debug + sizeof(info.debug), sizeof(__u32));		break;	case MTIOCSETCONFIG32:		break;	}	return err ? -EFAULT: 0;}#define AUTOFS_IOC_SETTIMEOUT32 _IOWR(0x93,0x64,unsigned int)static int ioc_settimeout(unsigned int fd, unsigned int cmd, unsigned long arg){	return rw_long(fd, AUTOFS_IOC_SETTIMEOUT, arg);}struct ioctl32_handler {	unsigned int cmd;	int (*function)(unsigned int, unsigned int, unsigned long);};struct ioctl32_list {	struct ioctl32_handler handler;	struct ioctl32_list *next;};#define IOCTL32_DEFAULT(cmd)		{ { cmd, (void *) sys_ioctl }, 0 }#define IOCTL32_HANDLER(cmd, handler)	{ { cmd, (void *) handler }, 0 }static struct ioctl32_list ioctl32_handler_table[] = {	IOCTL32_DEFAULT(TCGETA),	IOCTL32_DEFAULT(TCSETA),	IOCTL32_DEFAULT(TCSETAW),	IOCTL32_DEFAULT(TCSETAF),	IOCTL32_DEFAULT(TCSBRK),	IOCTL32_DEFAULT(TCXONC),	IOCTL32_DEFAULT(TCFLSH),	IOCTL32_DEFAULT(TCGETS),	IOCTL32_DEFAULT(TCSETS),	IOCTL32_DEFAULT(TCSETSW),	IOCTL32_DEFAULT(TCSETSF),	IOCTL32_DEFAULT(TIOCLINUX),	IOCTL32_DEFAULT(TIOCGETD),	IOCTL32_DEFAULT(TIOCSETD),	IOCTL32_DEFAULT(TIOCEXCL),	IOCTL32_DEFAULT(TIOCNXCL),	IOCTL32_DEFAULT(TIOCCONS),	IOCTL32_DEFAULT(TIOCGSOFTCAR),	IOCTL32_DEFAULT(TIOCSSOFTCAR),	IOCTL32_DEFAULT(TIOCSWINSZ),	IOCTL32_DEFAULT(TIOCGWINSZ),	IOCTL32_DEFAULT(TIOCMGET),	IOCTL32_DEFAULT(TIOCMBIC),	IOCTL32_DEFAULT(TIOCMBIS),	IOCTL32_DEFAULT(TIOCMSET),	IOCTL32_DEFAULT(TIOCPKT),	IOCTL32_DEFAULT(TIOCNOTTY),	IOCTL32_DEFAULT(TIOCSTI),	IOCTL32_DEFAULT(TIOCOUTQ),	IOCTL32_DEFAULT(TIOCSPGRP),	IOCTL32_DEFAULT(TIOCGPGRP),	IOCTL32_DEFAULT(TIOCSCTTY),	IOCTL32_DEFAULT(TIOCGPTN),	IOCTL32_DEFAULT(TIOCSPTLCK),	IOCTL32_DEFAULT(TIOCGSERIAL),	IOCTL32_DEFAULT(TIOCSSERIAL),	IOCTL32_DEFAULT(TIOCSERGETLSR),	IOCTL32_DEFAULT(FIOCLEX),	IOCTL32_DEFAULT(FIONCLEX),	IOCTL32_DEFAULT(FIOASYNC),	IOCTL32_DEFAULT(FIONBIO),	IOCTL32_DEFAULT(FIONREAD),	/* Big K */	IOCTL32_DEFAULT(PIO_FONT),	IOCTL32_DEFAULT(GIO_FONT),	IOCTL32_DEFAULT(KDSIGACCEPT),	IOCTL32_DEFAULT(KDGETKEYCODE),	IOCTL32_DEFAULT(KDSETKEYCODE),	IOCTL32_DEFAULT(KIOCSOUND),	IOCTL32_DEFAULT(KDMKTONE),	IOCTL32_DEFAULT(KDGKBTYPE),	IOCTL32_DEFAULT(KDSETMODE),	IOCTL32_DEFAULT(KDGETMODE),	IOCTL32_DEFAULT(KDSKBMODE),	IOCTL32_DEFAULT(KDGKBMODE),	IOCTL32_DEFAULT(KDSKBMETA),	IOCTL32_DEFAULT(KDGKBMETA),	IOCTL32_DEFAULT(KDGKBENT),	IOCTL32_DEFAULT(KDSKBENT),	IOCTL32_DEFAULT(KDGKBSENT),	IOCTL32_DEFAULT(KDSKBSENT),	IOCTL32_DEFAULT(KDGKBDIACR),	IOCTL32_DEFAULT(KDSKBDIACR),	IOCTL32_DEFAULT(KDGKBLED),	IOCTL32_DEFAULT(KDSKBLED),	IOCTL32_DEFAULT(KDGETLED),	IOCTL32_DEFAULT(KDSETLED),	IOCTL32_DEFAULT(GIO_SCRNMAP),	IOCTL32_DEFAULT(PIO_SCRNMAP),	IOCTL32_DEFAULT(GIO_UNISCRNMAP),	IOCTL32_DEFAULT(PIO_UNISCRNMAP),	IOCTL32_DEFAULT(PIO_FONTRESET),	IOCTL32_DEFAULT(PIO_UNIMAPCLR),	/* Big S */	IOCTL32_DEFAULT(SCSI_IOCTL_GET_IDLUN),	IOCTL32_DEFAULT(SCSI_IOCTL_DOORLOCK),	IOCTL32_DEFAULT(SCSI_IOCTL_DOORUNLOCK),	IOCTL32_DEFAULT(SCSI_IOCTL_TEST_UNIT_READY),	IOCTL32_DEFAULT(SCSI_IOCTL_TAGGED_ENABLE),	IOCTL32_DEFAULT(SCSI_IOCTL_TAGGED_DISABLE),	IOCTL32_DEFAULT(SCSI_IOCTL_GET_BUS_NUMBER),	IOCTL32_DEFAULT(SCSI_IOCTL_SEND_COMMAND),	/* Big V */	IOCTL32_DEFAULT(VT_SETMODE),	IOCTL32_DEFAULT(VT_GETMODE),	IOCTL32_DEFAULT(VT_GETSTATE),	IOCTL32_DEFAULT(VT_OPENQRY),	IOCTL32_DEFAULT(VT_ACTIVATE),	IOCTL32_DEFAULT(VT_WAITACTIVE),	IOCTL32_DEFAULT(VT_RELDISP),	IOCTL32_DEFAULT(VT_DISALLOCATE),	IOCTL32_DEFAULT(VT_RESIZE),	IOCTL32_DEFAULT(VT_RESIZEX),	IOCTL32_DEFAULT(VT_LOCKSWITCH),	IOCTL32_DEFAULT(VT_UNLOCKSWITCH),#ifdef CONFIG_NET	/* Socket level stuff */	IOCTL32_DEFAULT(FIOSETOWN),	IOCTL32_DEFAULT(SIOCSPGRP),	IOCTL32_DEFAULT(FIOGETOWN),	IOCTL32_DEFAULT(SIOCGPGRP),	IOCTL32_DEFAULT(SIOCATMARK),	IOCTL32_DEFAULT(SIOCSIFLINK),	IOCTL32_DEFAULT(SIOCSIFENCAP),	IOCTL32_DEFAULT(SIOCGIFENCAP),	IOCTL32_DEFAULT(SIOCSIFBR),	IOCTL32_DEFAULT(SIOCGIFBR),	IOCTL32_DEFAULT(SIOCSARP),	IOCTL32_DEFAULT(SIOCGARP),	IOCTL32_DEFAULT(SIOCDARP),	IOCTL32_DEFAULT(SIOCSRARP),	IOCTL32_DEFAULT(SIOCGRARP),	IOCTL32_DEFAULT(SIOCDRARP),	IOCTL32_DEFAULT(SIOCADDDLCI),	IOCTL32_DEFAULT(SIOCDELDLCI),	/* SG stuff */	IOCTL32_DEFAULT(SG_SET_TIMEOUT),	IOCTL32_DEFAULT(SG_GET_TIMEOUT),	IOCTL32_DEFAULT(SG_EMULATED_HOST),	IOCTL32_DEFAULT(SG_SET_TRANSFORM),	IOCTL32_DEFAULT(SG_GET_TRANSFORM),	IOCTL32_DEFAULT(SG_SET_RESERVED_SIZE),	IOCTL32_DEFAULT(SG_GET_RESERVED_SIZE),	IOCTL32_DEFAULT(SG_GET_SCSI_ID),	IOCTL32_DEFAULT(SG_SET_FORCE_LOW_DMA),	IOCTL32_DEFAULT(SG_GET_LOW_DMA),	IOCTL32_DEFAULT(SG_SET_FORCE_PACK_ID),	IOCTL32_DEFAULT(SG_GET_PACK_ID),	IOCTL32_DEFAULT(SG_GET_NUM_WAITING),	IOCTL32_DEFAULT(SG_SET_DEBUG),	IOCTL32_DEFAULT(SG_GET_SG_TABLESIZE),	IOCTL32_DEFAULT(SG_GET_COMMAND_Q),	IOCTL32_DEFAULT(SG_SET_COMMAND_Q),	IOCTL32_DEFAULT(SG_GET_VERSION_NUM),	IOCTL32_DEFAULT(SG_NEXT_CMD_LEN),	IOCTL32_DEFAULT(SG_SCSI_RESET),	IOCTL32_DEFAULT(SG_IO),	IOCTL32_DEFAULT(SG_GET_REQUEST_TABLE),	IOCTL32_DEFAULT(SG_SET_KEEP_ORPHAN),	IOCTL32_DEFAULT(SG_GET_KEEP_ORPHAN),	/* PPP stuff */	IOCTL32_DEFAULT(PPPIOCGFLAGS),	IOCTL32_DEFAULT(PPPIOCSFLAGS),	IOCTL32_DEFAULT(PPPIOCGASYNCMAP),	IOCTL32_DEFAULT(PPPIOCSASYNCMAP),	IOCTL32_DEFAULT(PPPIOCGUNIT),	IOCTL32_DEFAULT(PPPIOCGRASYNCMAP),	IOCTL32_DEFAULT(PPPIOCSRASYNCMAP),	IOCTL32_DEFAULT(PPPIOCGMRU),	IOCTL32_DEFAULT(PPPIOCSMRU),	IOCTL32_DEFAULT(PPPIOCSMAXCID),	IOCTL32_DEFAULT(PPPIOCGXASYNCMAP),	IOCTL32_DEFAULT(PPPIOCSXASYNCMAP),	IOCTL32_DEFAULT(PPPIOCXFERUNIT),	IOCTL32_DEFAULT(PPPIOCGNPMODE),	IOCTL32_DEFAULT(PPPIOCSNPMODE),	IOCTL32_DEFAULT(PPPIOCGDEBUG),	IOCTL32_DEFAULT(PPPIOCSDEBUG),	IOCTL32_DEFAULT(PPPIOCNEWUNIT),	IOCTL32_DEFAULT(PPPIOCATTACH),	IOCTL32_DEFAULT(PPPIOCGCHAN),	/* PPPOX */	IOCTL32_DEFAULT(PPPOEIOCSFWD),	IOCTL32_DEFAULT(PPPOEIOCDFWD),	/* CDROM stuff */	IOCTL32_DEFAULT(CDROMPAUSE),	IOCTL32_DEFAULT(CDROMRESUME),	IOCTL32_DEFAULT(CDROMPLAYMSF),	IOCTL32_DEFAULT(CDROMPLAYTRKIND),	IOCTL32_DEFAULT(CDROMREADTOCHDR),	IOCTL32_DEFAULT(CDROMREADTOCENTRY),	IOCTL32_DEFAULT(CDROMSTOP),	IOCTL32_DEFAULT(CDROMSTART),	IOCTL32_DEFAULT(CDROMEJECT),	IOCTL32_DEFAULT(CDROMVOLCTRL),	IOCTL32_DEFAULT(CDROMSUBCHNL),	IOCTL32_DEFAULT(CDROMEJECT_SW),	IOCTL32_DEFAULT(CDROMMULTISESSION),	IOCTL32_DEFAULT(CDROM_GET_MCN),	IOCTL32_DEFAULT(CDROMRESET),	IOCTL32_DEFAULT(CDROMVOLREAD),	IOCTL32_DEFAULT(CDROMSEEK),	IOCTL32_DEFAULT(CDROMPLAYBLK),	IOCTL32_DEFAULT(CDROMCLOSETRAY),	IOCTL32_DEFAULT(CDROM_SET_OPTIONS),	IOCTL32_DEFAULT(CDROM_CLEAR_OPTIONS),	IOCTL32_DEFAULT(CDROM_SELECT_SPEED),	IOCTL32_DEFAULT(CDROM_SELECT_DISC),	IOCTL32_DEFAULT(CDROM_MEDIA_CHANGED),	IOCTL32_DEFAULT(CDROM_DRIVE_STATUS),	IOCTL32_DEFAULT(CDROM_DISC_STATUS),	IOCTL32_DEFAULT(CDROM_CHANGER_NSLOTS),	IOCTL32_DEFAULT(CDROM_LOCKDOOR),	IOCTL32_DEFAULT(CDROM_DEBUG),	IOCTL32_DEFAULT(CDROM_GET_CAPABILITY),	/* DVD ioctls */	IOCTL32_DEFAULT(DVD_READ_STRUCT),	IOCTL32_DEFAULT(DVD_WRITE_STRUCT),	IOCTL32_DEFAULT(DVD_AUTH),	/* Big L */	IOCTL32_DEFAULT(LOOP_SET_FD),	IOCTL32_DEFAULT(LOOP_CLR_FD),	/* And these ioctls need translation */	IOCTL32_HANDLER(SIOCGIFNAME, dev_ifname32),	IOCTL32_HANDLER(SIOCGIFCONF, dev_ifconf),	IOCTL32_HANDLER(SIOCGIFFLAGS, dev_ifsioc),	IOCTL32_HANDLER(SIOCSIFFLAGS, dev_ifsioc),	IOCTL32_HANDLER(SIOCGIFMETRIC, dev_ifsioc),	IOCTL32_HANDLER(SIOCSIFMETRIC, dev_ifsioc),	IOCTL32_HANDLER(SIOCGIFMTU, dev_ifsioc),	IOCTL32_HANDLER(SIOCSIFMTU, dev_ifsioc),	IOCTL32_HANDLER(SIOCGIFMEM, dev_ifsioc),	IOCTL32_HANDLER(SIOCSIFMEM, dev_ifsioc),	IOCTL32_HANDLER(SIOCGIFHWADDR, dev_ifsioc),	IOCTL32_HANDLER(SIOCSIFHWADDR, dev_ifsioc),	IOCTL32_HANDLER(SIOCADDMULTI, dev_ifsioc),	IOCTL32_HANDLER(SIOCDELMULTI, dev_ifsioc),	IOCTL32_HANDLER(SIOCGIFINDEX, dev_ifsioc),	IOCTL32_HANDLER(SIOCGIFMAP, dev_ifsioc),	IOCTL32_HANDLER(SIOCSIFMAP, dev_ifsioc),	IOCTL32_HANDLER(SIOCGIFADDR, dev_ifsioc),	IOCTL32_HANDLER(SIOCSIFADDR, dev_ifsioc),	IOCTL32_HANDLER(SIOCGIFBRDADDR, dev_ifsioc),	IOCTL32_HANDLER(SIOCSIFBRDADDR, dev_ifsioc),	IOCTL32_HANDLER(SIOCGIFDSTADDR, dev_ifsioc),	IOCTL32_HANDLER(SIOCSIFDSTADDR, dev_ifsioc),	IOCTL32_HANDLER(SIOCGIFNETMASK, dev_ifsioc),	IOCTL32_HANDLER(SIOCSIFNETMASK, dev_ifsioc),	IOCTL32_HANDLER(SIOCSIFPFLAGS, dev_ifsioc),	IOCTL32_HANDLER(SIOCGIFPFLAGS, dev_ifsioc),	IOCTL32_HANDLER(SIOCGPPPSTATS, dev_ifsioc),	IOCTL32_HANDLER(SIOCGPPPCSTATS, dev_ifsioc),	IOCTL32_HANDLER(SIOCGPPPVER, dev_ifsioc),	IOCTL32_HANDLER(SIOCGIFTXQLEN, dev_ifsioc),	IOCTL32_HANDLER(SIOCSIFTXQLEN, dev_ifsioc),	IOCTL32_HANDLER(SIOCADDRT, routing_ioctl),	IOCTL32_HANDLER(SIOCDELRT, routing_ioctl),	/*	 * Note SIOCRTMSG is no longer, so this is safe and * the user would	 * have seen just an -EINVAL anyways.	 */	IOCTL32_HANDLER(SIOCRTMSG, ret_einval),	IOCTL32_HANDLER(SIOCGSTAMP, do_siocgstamp),#endif /* CONFIG_NET */	IOCTL32_HANDLER(EXT2_IOC32_GETFLAGS, do_ext2_ioctl),	IOCTL32_HANDLER(EXT2_IOC32_SETFLAGS, do_ext2_ioctl),	IOCTL32_HANDLER(EXT2_IOC32_GETVERSION, do_ext2_ioctl),	IOCTL32_HANDLER(EXT2_IOC32_SETVERSION, do_ext2_ioctl),	IOCTL32_HANDLER(HDIO_GETGEO, hdio_getgeo),	/* hdreg.h ioctls  */	IOCTL32_HANDLER(HDIO_GET_UNMASKINTR, hdio_ioctl_trans),	IOCTL32_HANDLER(HDIO_GET_MULTCOUNT, hdio_ioctl_trans),	// HDIO_OBSOLETE_IDENTITY	IOCTL32_HANDLER(HDIO_GET_KEEPSETTINGS, hdio_ioctl_trans),	IOCTL32_HANDLER(HDIO_GET_32BIT, hdio_ioctl_trans),	IOCTL32_HANDLER(HDIO_GET_NOWERR, hdio_ioctl_trans),	IOCTL32_HANDLER(HDIO_GET_DMA, hdio_ioctl_trans),	IOCTL32_HANDLER(HDIO_GET_NICE, hdio_ioctl_trans),	IOCTL32_DEFAULT(HDIO_GET_IDENTITY),	IOCTL32_DEFAULT(HDIO_DRIVE_RESET),	// HDIO_TRISTATE_HWIF				/* not implemented */	// HDIO_DRIVE_TASK				/* To do, need specs */	IOCTL32_DEFAULT(HDIO_DRIVE_CMD),	IOCTL32_DEFAULT(HDIO_SET_MULTCOUNT),	IOCTL32_DEFAULT(HDIO_SET_UNMASKINTR),	IOCTL32_DEFAULT(HDIO_SET_KEEPSETTINGS),	IOCTL32_DEFAULT(HDIO_SET_32BIT),	IOCTL32_DEFAULT(HDIO_SET_NOWERR),	IOCTL32_DEFAULT(HDIO_SET_DMA),	IOCTL32_DEFAULT(HDIO_SET_PIO_MODE),	IOCTL32_DEFAULT(HDIO_SCAN_HWIF),	IOCTL32_DEFAULT(HDIO_SET_NICE),	//HDIO_UNREGISTER_HWIF	IOCTL32_DEFAULT(BLKROSET),			/* fs.h ioctls  */	IOCTL32_DEFAULT(BLKROGET),	IOCTL32_DEFAULT(BLKRRPART),	IOCTL32_HANDLER(BLKGETSIZE, w_long),	IOCTL32_DEFAULT(BLKFLSBUF),	IOCTL32_DEFAULT(BLKRASET),	IOCTL32_HANDLER(BLKRAGET, w_long),	IOCTL32_DEFAULT(BLKFRASET),	IOCTL32_HANDLER(BLKFRAGET, w_long),	IOCTL32_DEFAULT(BLKSECTSET),	IOCTL32_HANDLER(BLKSECTGET, w_long),	IOCTL32_DEFAULT(BLKSSZGET),	IOCTL32_HANDLER(BLKPG, blkpg_ioctl_trans),	IOCTL32_DEFAULT(BLKELVGET),	IOCTL32_DEFAULT(BLKELVSET),	IOCTL32_DEFAULT(BLKBSZGET),	IOCTL32_DEFAULT(BLKBSZSET),#ifdef CONFIG_MD	/* status */	IOCTL32_DEFAULT(RAID_VERSION),	IOCTL32_DEFAULT(GET_ARRAY_INFO),	IOCTL32_DEFAULT(GET_DISK_INFO),	IOCTL32_DEFAULT(PRINT_RAID_DEBUG),	IOCTL32_DEFAULT(RAID_AUTORUN),	/* configuration */	IOCTL32_DEFAULT(CLEAR_ARRAY),	IOCTL32_DEFAULT(ADD_NEW_DISK),	IOCTL32_DEFAULT(HOT_REMOVE_DISK),	IOCTL32_DEFAULT(SET_ARRAY_INFO),	IOCTL32_DEFAULT(SET_DISK_INFO),	IOCTL32_DEFAULT(WRITE_RAID_INFO),	IOCTL32_DEFAULT(UNPROTECT_ARRAY),	IOCTL32_DEFAULT(PROTECT_ARRAY),	IOCTL32_DEFAULT(HOT_ADD_DISK),	IOCTL32_DEFAULT(SET_DISK_FAULTY),	/* usage */	IOCTL32_DEFAULT(RUN_ARRAY),	IOCTL32_DEFAULT(START_ARRAY),	IOCTL32_DEFAULT(STOP_ARRAY),	IOCTL32_DEFAULT(STOP_ARRAY_RO),	IOCTL32_DEFAULT(RESTART_ARRAY_RW),#endif /* CONFIG_MD */	IOCTL32_DEFAULT(MTIOCTOP),			/* mtio.h ioctls  */	IOCTL32_HANDLER(MTIOCGET32, mt_ioctl_trans),	IOCTL32_HANDLER(MTIOCPOS32, mt_ioctl_trans),	IOCTL32_HANDLER(MTIOCGETCONFIG32, mt_ioctl_trans),	IOCTL32_HANDLER(MTIOCSETCONFIG32, mt_ioctl_trans),	// MTIOCRDFTSEG	// MTIOCWRFTSEG	// MTIOCVOLINFO	// MTIOCGETSIZE	// MTIOCFTFORMAT	// MTIOCFTCMD	IOCTL32_DEFAULT(AUTOFS_IOC_READY),		/* auto_fs.h ioctls */	IOCTL32_DEFAULT(AUTOFS_IOC_FAIL),	IOCTL32_DEFAULT(AUTOFS_IOC_CATATONIC),	IOCTL32_DEFAULT(AUTOFS_IOC_PROTOVER),	IOCTL32_HANDLER(AUTOFS_IOC_SETTIMEOUT32, ioc_settimeout),	IOCTL32_DEFAULT(AUTOFS_IOC_EXPIRE),	/* Little p (/dev/rtc, /dev/envctrl, etc.) */	IOCTL32_DEFAULT(_IOR('p', 20, int[7])), /* RTCGET */	IOCTL32_DEFAULT(_IOW('p', 21, int[7])), /* RTCSET */	IOCTL32_DEFAULT(RTC_AIE_ON),	IOCTL32_DEFAULT(RTC_AIE_OFF),	IOCTL32_DEFAULT(RTC_UIE_ON),	IOCTL32_DEFAULT(RTC_UIE_OFF),	IOCTL32_DEFAULT(RTC_PIE_ON),	IOCTL32_DEFAULT(RTC_PIE_OFF),	IOCTL32_DEFAULT(RTC_WIE_ON),	IOCTL32_DEFAULT(RTC_WIE_OFF),	IOCTL32_DEFAULT(RTC_ALM_SET),	IOCTL32_DEFAULT(RTC_ALM_READ),	IOCTL32_DEFAULT(RTC_RD_TIME),	IOCTL32_DEFAULT(RTC_SET_TIME),	IOCTL32_DEFAULT(RTC_WKALM_SET),	IOCTL32_DEFAULT(RTC_WKALM_RD)};#define NR_IOCTL32_HANDLERS	(sizeof(ioctl32_handler_table) /	\				 sizeof(ioctl32_handler_table[0]))static struct ioctl32_list *ioctl32_hash_table[1024];static inline int ioctl32_hash(unsigned int cmd){	return ((cmd >> 6) ^ (cmd >> 4) ^ cmd) & 0x3ff;}int sys32_ioctl(unsigned int fd, unsigned int cmd, unsigned int arg){	int (*handler)(unsigned int, unsigned int, unsigned long, struct file * filp);	struct file *filp;	struct ioctl32_list *l;	int error;	l = ioctl32_hash_table[ioctl32_hash(cmd)];	error = -EBADF;	filp = fget(fd);	if (!filp)		return error;	if (!filp->f_op || !filp->f_op->ioctl) {		error = sys_ioctl (fd, cmd, arg);		goto out;	}	while (l && l->handler.cmd != cmd)		l = l->next;	if (l) {		handler = (void *)l->handler.function;		error = handler(fd, cmd, arg, filp);	} else {		error = -EINVAL;		printk("unknown ioctl: %08x\n", cmd);	}out:	fput(filp);	return error;}static void ioctl32_insert(struct ioctl32_list *entry){	int hash = ioctl32_hash(entry->handler.cmd);	if (!ioctl32_hash_table[hash])		ioctl32_hash_table[hash] = entry;	else {		struct ioctl32_list *l;		l = ioctl32_hash_table[hash];		while (l->next)			l = l->next;		l->next = entry;		entry->next = 0;	}}static int __init init_ioctl32(void){	int i;	for (i = 0; i < NR_IOCTL32_HANDLERS; i++)		ioctl32_insert(&ioctl32_handler_table[i]);	return 0;}__initcall(init_ioctl32);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -