亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? zlg_fs.c

?? 周立功MagicArm2410上的SD卡驅動
?? C
?? 第 1 頁 / 共 2 頁
字號:
    }    if (DiskInfo[num] == NULL)    {        return -ENODEV;    }    //local_irq_save(flag);    ZLG_FS_usage[num]--;    if (ZLG_FS_usage[num] == 0)    {        part1 = (num << ZLG_FS_SHIFT);        npart = 1 << ZLG_FS_SHIFT;        for (i = 0; i < npart; i++)        {            fsync_dev(MKDEV(major, part1++));        }                dp.RsvdForLow = DiskInfo[num]->RsvdForLow;        DiskInfo[num]->DiakCommand(DISK_CLOSE, &dp);        if (DiskInfo[num]->release != NULL)        {            DiskInfo[num]->release(inode, filp);        }    }    //local_irq_restore(flag);    MOD_DEC_USE_COUNT;    return 0; } /*********************************************************************************************************** Function name: zlg_fs_ioctl** Descriptions: IO control function** Input:inode:  information of device**       filp:   pointer of file**       cmd:    command**       arg:    additive parameter** Output 0:     OK**        other: not OK** Created by:   Chenmingji** Created Date: 2005-05-25**-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/        static int zlg_fs_ioctl(struct inode *inode, struct file *filp,                     unsigned int cmd, unsigned long arg){    long err, size;    struct hd_geometry geo;    int num;    num = DEVICE_NR(inode->i_rdev);    if (num >= MAX_DISKS)    {        return -ENODEV;    }    if (DiskInfo[num] == NULL)    {        return -ENODEV;    }    switch(cmd)     {        case BLKGETSIZE:            /* Return the device size, expressed in sectors */            if (arg == 0)            {                return -EINVAL; /* NULL pointer: not valid */            }            if(access_ok(VERIFY_WRITE, arg, sizeof(long)) == 0)            {                return -EFAULT;            }            size = zlg_fs_gendisk.part[MINOR(inode->i_rdev)].nr_sects;	        if (copy_to_user((long *) arg, &size, sizeof (long)))	        {	            return -EFAULT;	        }            return 0;//        case BLKFLSBUF: /* flush *///            if (! capable(CAP_SYS_RAWIO)) return -EACCES; /* only root *///            fsync_dev(inode->i_rdev);//            invalidate_buffers(inode->i_rdev);//            return 0;//        case BLKRAGET: /* return the readahead value *///            err = ! access_ok(VERIFY_WRITE, arg, sizeof(long));//            if (err) return -EFAULT;//            PUT_USER(read_ahead[MAJOR(inode->i_rdev)],(long *) arg);//            return 0;//        case BLKRASET: /* set the readahead value *///            if (!capable(CAP_SYS_RAWIO)) return -EACCES;//            if (arg > 0xff) return -EINVAL; /* limit it *///            read_ahead[MAJOR(inode->i_rdev)] = arg;//            return 0;                case BLKRRPART: /* re-read partition table: can't do it */            return zlg_fs_revalidate(inode->i_rdev);        case HDIO_GETGEO:           /*	        * Get geometry: since we are a virtual device, we have to make	        * up something plausible.  So we claim 16 sectors, four heads,	        * and calculate the corresponding number of cylinders.  We set the	        * start of data at sector four.            */            if (access_ok(VERIFY_WRITE, arg, sizeof(geo)) == 0)            {                return -EFAULT;            }            size = DiskInfo[num]->SecPerDisk;            geo.cylinders = (size & ~0x3f) >> 6;	        geo.heads = 4;	        geo.sectors = 16;	        geo.start = 0;	        if (copy_to_user((void *) arg, &geo, sizeof(geo)))	        {	            return -EFAULT;	        }            return 0;        default:        /*         * For ioctls we don't understand, let the block layer handle them.         */            return blk_ioctl(inode->i_rdev, cmd, arg);    }    return -ENOTTY; /* unknown command */}/*********************************************************************************************************** Function name: check_zlg_fs_change** Descriptions: ** Input:dev:** Output 0:     OK**        other: not OK** Created by:   Chenmingji** Created Date: 2005-05-25**-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/        static int check_zlg_fs_change(kdev_t dev){    int num;    Disk_RW_Parameter dp;    num = DEVICE_NR(dev);    if (num >= MAX_DISKS)    {        return -ENODEV;    }    if (DiskInfo[num] == NULL)    {        return -ENODEV;    }    dp.RsvdForLow = DiskInfo[num]->RsvdForLow;    if (DiskInfo[num]->DiakCommand(DISK_CHECK_CHANGE, &dp) == DISK_TRUE)    {        return 1;    }    return 0;}/*********************************************************************************************************** Function name: zlg_fs_revalidate** Descriptions: revalidate device** Input:dev:    nformation of device** Output 0:     OK**        1:     not OK** Created by:   Chenmingji** Created Date: 2005-05-25**-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/        static int zlg_fs_revalidate(kdev_t dev){    int num;    unsigned long flag;    int part1, npart, i;    num = DEVICE_NR(dev);    if (num >= MAX_DISKS)    {        return -ENODEV;    }    if (DiskInfo[num] == NULL)    {        return -ENODEV;    }    if (DiskInfo[num]->get_info == NULL)    {        return -ENODEV;    }    DiskInfo[num]->get_info(DiskInfo[num]);    part1 = num << ZLG_FS_SHIFT;    npart = 1 << ZLG_FS_SHIFT;    memset(zlg_fs_gendisk.part + part1, 0, npart * sizeof(struct hd_struct));    //local_irq_save(flag);     for (i = 0; i < npart; i++)    {        ZLG_FS_blocksizes[part1] = DiskInfo[num]->BytesPerSec;        ZLG_FS_sizes[part1] = (DiskInfo[num]->SecPerDisk * ZLG_FS_blocksizes[num])                              / 1024;               part1++;    }    zlg_fs_gendisk.part[num << ZLG_FS_SHIFT].nr_sects = DiskInfo[num]->SecPerDisk;        register_disk(&zlg_fs_gendisk, dev, 1 << ZLG_FS_SHIFT,                  &zlg_fs_fops, DiskInfo[num]->SecPerDisk);    //local_irq_restore(flag);    return 0;}/*********************************************************************************************************** Function name: zlg_fs_init** Descriptions: init driver** Input:none** Output 0:     OK**        other: not OK** Created by:   Chenmingji** Created Date: 2005-05-25**-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/        int  zlg_fs_init(void){    int  result, i;    result = register_blkdev(MAJOR_NR,  DEVICE_NAME,  &zlg_fs_fops);     if (result < 0)    {        printk(KERN_ERR DEVICE_NAME ": Unable to get major %d\n", MAJOR_NR );        return(result);     }     if (MAJOR_NR == 0)    {        MAJOR_NR = result; /* dynamic */    }    zlg_fs_gendisk.major = major;    zlg_fs_gendisk.major_name = DEVICE_NAME;    zlg_fs_gendisk.minor_shift = ZLG_FS_SHIFT;    zlg_fs_gendisk.max_p = 1 << ZLG_FS_SHIFT;    zlg_fs_gendisk.fops = &zlg_fs_fops;    zlg_fs_gendisk.sizes = ZLG_FS_sizes;    zlg_fs_gendisk.nr_real = MAX_DISKS;    zlg_fs_gendisk.part = part;    zlg_fs_gendisk.next = gendisk_head;    gendisk_head = &zlg_fs_gendisk;     //blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), zlg_fs_queue);    blk_queue_make_request(BLK_DEFAULT_QUEUE(MAJOR_NR), zlg_fs_make_request);    blk_size[MAJOR_NR] = ZLG_FS_sizes;    blksize_size[MAJOR_NR] = ZLG_FS_blocksizes;    printk(KERN_INFO DEVICE_NAME ": init OK\n");    return 0; }/*********************************************************************************************************** Function name: zlg_fs_cleanup** Descriptions: exit driver** Input:none** Output none** Created by:   Chenmingji** Created Date: 2005-05-25**-------------------------------------------------------------------------------------------------------** Modified by:  Chenmingji** Modified Date:2005-08-20 **------------------------------------------------------------------------------------------------------********************************************************************************************************/        void zlg_fs_cleanup(void){    struct gendisk *gdp;    /* Get our gendisk structure off the list. */    if (gendisk_head == &zlg_fs_gendisk)    {        gendisk_head = zlg_fs_gendisk.next;    }    else    {        gdp = gendisk_head;        while (gdp->next != NULL)        {            if (gdp->next == &zlg_fs_gendisk)            {                gdp->next = zlg_fs_gendisk.next;                break;            }            gdp = gdp->next;        }    }    unregister_blkdev(MAJOR_NR, DEVICE_NAME);}/***********************************************************************************************************                            End Of File********************************************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久aaaa| 色天天综合色天天久久| 在线成人高清不卡| 一区二区三区四区在线免费观看 | 欧洲av一区二区嗯嗯嗯啊| 国产亚洲一本大道中文在线| 久久精品999| 欧美成人伊人久久综合网| 日韩极品在线观看| 777午夜精品免费视频| 午夜精品在线看| 制服丝袜激情欧洲亚洲| 日本91福利区| 欧美精品tushy高清| 日本伊人午夜精品| 日韩精品中文字幕在线一区| 久久国产麻豆精品| 久久九九国产精品| 成人综合婷婷国产精品久久| 中文字幕精品三区| 99精品久久只有精品| 中文字幕日韩一区二区| 91在线无精精品入口| 亚洲欧美韩国综合色| www.久久精品| 久久久91精品国产一区二区精品| 日本va欧美va精品| 久久久影院官网| 成人av手机在线观看| 亚洲青青青在线视频| 在线观看一区二区视频| 日韩综合在线视频| 欧美精品一区二区三区一线天视频| 国产一区二区三区在线观看免费视频 | 99久久久国产精品| 亚洲黄一区二区三区| 在线成人午夜影院| 国产精品一区二区免费不卡| 欧美成人bangbros| 不卡电影免费在线播放一区| 亚洲一区二区三区在线| 91精品国产免费| 日韩精品成人一区二区三区| 久久一区二区三区四区| 91国在线观看| 麻豆成人久久精品二区三区小说| 国产三级精品三级| 欧美日韩国产影片| 国产精品一区二区视频| 一区二区三区四区视频精品免费 | 在线91免费看| 成人激情小说乱人伦| 亚洲国产日韩a在线播放| 日韩欧美国产电影| 91麻豆6部合集magnet| 日韩成人精品在线| 国产精品国产自产拍高清av| 精品视频免费在线| 国产suv精品一区二区883| 亚洲国产精品久久久久婷婷884| 日韩欧美国产麻豆| 欧美视频三区在线播放| 高清不卡在线观看| 精品一区二区成人精品| 国产精品国产自产拍在线| 欧美在线看片a免费观看| 激情深爱一区二区| 亚洲成人福利片| 国产精品久久久久久久久搜平片 | 一区二区三区日韩在线观看| 国产人妖乱国产精品人妖| 91亚洲永久精品| 久久99精品国产麻豆婷婷| 亚洲成人自拍偷拍| 中文字幕亚洲视频| 国产女同性恋一区二区| 日韩午夜激情av| 欧美在线观看一二区| 91一区二区三区在线播放| 久色婷婷小香蕉久久| 亚洲妇熟xx妇色黄| 亚洲精品国产第一综合99久久| 久久先锋影音av| 日韩一区二区不卡| 欧美放荡的少妇| 日本精品一区二区三区四区的功能| 狠狠色综合色综合网络| 亚洲国产成人tv| 亚洲女与黑人做爰| 久久久国产综合精品女国产盗摄| 欧美精品丝袜中出| 欧美日韩1区2区| 成人精品一区二区三区中文字幕| 麻豆中文一区二区| 麻豆免费看一区二区三区| 日韩精品91亚洲二区在线观看 | 91丨porny丨中文| 国产不卡在线视频| 国内精品嫩模私拍在线| 精品在线免费视频| 国产一区二区三区四| 国产在线精品不卡| 国产美女精品在线| 高清不卡在线观看av| 成人黄色软件下载| www.av精品| 成人性生交大片免费看中文网站| 国产成人在线看| 成av人片一区二区| 97超碰欧美中文字幕| 91蜜桃视频在线| 成人福利视频在线看| 成人av电影在线观看| 91社区在线播放| 欧美四级电影网| 91精品办公室少妇高潮对白| 欧美午夜精品一区二区蜜桃| 91麻豆精品国产91久久久久久 | 欧美日韩和欧美的一区二区| 678五月天丁香亚洲综合网| 日韩免费观看高清完整版| 精品久久久久久无| 国产色产综合产在线视频| 中文字幕日韩一区| 夜夜精品视频一区二区| 亚洲综合在线视频| 麻豆精品久久精品色综合| 国产成人小视频| 91蜜桃传媒精品久久久一区二区| 欧美人xxxx| 久久久精品天堂| 亚洲激情成人在线| 久久99在线观看| 91捆绑美女网站| 欧美日韩国产乱码电影| 国产精品久久久久aaaa| 性感美女久久精品| av一区二区三区在线| 日韩亚洲欧美中文三级| 亚洲一区欧美一区| 国产成人综合网站| 精品久久久久久综合日本欧美| 一区二区在线观看视频在线观看| 国产麻豆精品一区二区| 91精品视频网| 亚洲电影一级片| 色综合中文字幕| 久久精品男人天堂av| 青青国产91久久久久久| 欧美中文字幕亚洲一区二区va在线 | 欧美影院午夜播放| 欧美激情自拍偷拍| 精品一区二区日韩| 91精品国产色综合久久ai换脸| 一区二区三区日本| 91视视频在线直接观看在线看网页在线看| 久久亚洲一区二区三区明星换脸| 亚洲成人动漫一区| 在线观看日韩一区| 一区二区三区中文字幕在线观看| 成人精品视频.| 久久久久国产精品麻豆 | 国产成人一区二区精品非洲| 日韩欧美另类在线| 欧美a级理论片| 欧美一区二区三区在线电影| 午夜精品一区二区三区免费视频| 日本韩国精品在线| 亚洲香肠在线观看| 在线观看日韩一区| 亚洲一区二区黄色| 欧美精品自拍偷拍| 日韩高清电影一区| 日韩精品一区二区三区中文不卡| 日本女优在线视频一区二区| 欧美精品乱码久久久久久按摩| 午夜一区二区三区视频| 欧美日韩国产bt| 麻豆精品一区二区综合av| 日韩三级电影网址| 国产精品系列在线播放| 中文字幕av资源一区| 91尤物视频在线观看| 亚洲一区欧美一区| 欧美一区二区免费视频| 美女高潮久久久| 欧美韩日一区二区三区| 95精品视频在线| 天天色图综合网| 欧美成人一区二区| 成人一区二区三区视频在线观看| 亚洲欧洲无码一区二区三区| 日本久久电影网| 美女精品一区二区| 欧美激情一区二区在线| 91亚洲午夜精品久久久久久| 婷婷亚洲久悠悠色悠在线播放| 精品欧美久久久| aaa国产一区| 午夜视频久久久久久|