LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 641|回复: 0

有一段代码看不懂!希望大家能够帮忙解释一下!谢谢!

[复制链接]
发表于 2004-5-23 16:49:19 | 显示全部楼层 |阅读模式
这是一个驱动的一段程序:
   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
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表