|
这是一个驱动的一段程序:
static int smiport_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
{
int ret;
PDEBUG("cmd[0x%08x], _IOC_TYPE = 0x%08x, _IOC_SIZE = 0x%08x, _IOC_NR = 0x%08x\n", cmd, _IOC_TYPE(cmd), _IOC_SIZE(cmd), _IOC_NR(cmd));
if (_IOC_TYPE(cmd) != SMIPORT_IOC_MAGIC) {
PDEBUG("smiport_ioctl - invalid Magic number\n");
return ERROR_IOCTL_INVALID_MAGIC_NUMBER;
}
ret = 0;
switch (cmd) {
case SMI_OPERATION:
if (g_smi_flash_support != 1) {
PDEBUG("smiport_ioctl - smi not support\n");
ret = ERROR_IOCTL_SERVICE_NOT_SUPPORT;
} else {
ret = smi_operation_dispatcher(cmd, arg);
PDEBUG("smiport_ioctl - smi_operation_dispatcher return 0x%04x\n", ret);
}
break;
case ESS_OPERATION:
if (g_vpsd_ess_support != 1) {
PDEBUG("smiport_ioctl - ess not support\n");
ret = ERROR_IOCTL_SERVICE_NOT_SUPPORT;
} else {
ret = ess_operation_dispatcher(cmd, arg);
PDEBUG("smiport_ioctl - ess_operation_dispatcher return 0x%04x\n", ret);
}
break;
case MAP_OPERATION:
ret = map_operation_dispatcher(cmd, arg);
PDEBUG("smiport_ioctl - map_operation_dispatcher return 0x%04x\n", ret);
break;
case TRANSACTION:
ret = transaction_dispatcher(cmd, arg);
PDEBUG("smiport_ioctl - transaction_dispatcher return 0x%04x\n", ret);
if (updated)
ret |= WARNING_BIOS_UPDATED_WITHOUT_REBOOT;
break;
case INFO_CENTRE:
ret = info_centre(cmd, arg);
PDEBUG("smiport_ioctl - infor_centre\n");
break;
default:
PDEBUG("smiport_ioctl - invalid ioctl command\n");
ret = ER
} |
|