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

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

?? zlg_fs.c

?? 周立功MagicArm2410上的SD卡驅動
?? C
?? 第 1 頁 / 共 2 頁
字號:
/****************************************Copyright (c)****************************************************                               Guangzou ZLG-MCU Development Co.,LTD.**                                     graduate school**                                 http://www.zlgmcu.com****--------------File Info-------------------------------------------------------------------------------** File name:			zlg_fs.c** Last modified Date:  2005-05-25** Last Version:		1.0** Descriptions:		This is a Kernel module for uClinux 2.4.x .**                      This module let uClinux 2.4.x can use ZLG/FS . **------------------------------------------------------------------------------------------------------** Created by:			Chenmingji** Created date:		2005-05-25** Version:				1.0** Descriptions:		The original version****------------------------------------------------------------------------------------------------------** Modified by:			Chenmingji** Modified date:		2005-05-25** Version:				1.01** Descriptions:		Modified zlg_fs_cleanup()**********************************************************************************************************/#define IN_ZLG_FS#include "config.h"/********************************************************************************************************              function announce********************************************************************************************************/static int zlg_fs_open(struct inode *inode, struct file *filp);static int zlg_fs_release(struct inode *inode, struct file *filp); static int zlg_fs_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,		    unsigned long param);static int check_zlg_fs_change(kdev_t dev);static int zlg_fs_revalidate(kdev_t dev);int  zlg_fs_init(void);void zlg_fs_cleanup(void);/********************************************************************************************************              function announce********************************************************************************************************/#define MAJOR_NR major                      /* force definitions on in blk.h    */#define DEVICE_NO_RANDOM                    /* no entropy to contribute         */#define DEVICE_OFF(d)                       /* do-nothing */MODULE_PARM(major, "i");module_init(zlg_fs_init);module_exit(zlg_fs_cleanup);#define DEVICE_NR(device) (MINOR(device) >> ZLG_FS_SHIFT)MODULE_LICENSE("Proprietary");MODULE_DESCRIPTION("Guangzou ZLG-MCU Development Co.,LTD.\ngraduate school\nhttp://www.zlgmcu.com");MODULE_SUPPORTED_DEVICE("uClinux2.4.x LPC2200 ZLG/FS");MODULE_AUTHOR("chenmingji");/***********************************************************************************************************                  "全局和靜態變量在這里定義"         **        global variables and static variables define here********************************************************************************************************/static int major = ZLG_FS_MAJOR_NR;             /* must be declared before including blk.h */#include <linux/blk.h>static int ZLG_FS_blocksizes[MAX_DISKS << ZLG_FS_SHIFT]; /* bytes per device         */static int ZLG_FS_sizes[MAX_DISKS << ZLG_FS_SHIFT];      /* bytes per device's block */                                                                /* must be (1 << n)         */static unsigned int ZLG_FS_usage[MAX_DISKS];                   /* device using count */fs_drivers *DiskInfo[MAX_DISKS];static struct hd_struct part[MAX_DISKS << ZLG_FS_SHIFT];struct gendisk zlg_fs_gendisk;/********************************************************************************************************/static struct block_device_operations zlg_fs_fops =        /* driver info  */{    owner:              THIS_MODULE,    open:               zlg_fs_open,    release:            zlg_fs_release,    ioctl:              zlg_fs_ioctl,    check_media_change: check_zlg_fs_change,    revalidate:         zlg_fs_revalidate,};/*********************************************************************************************************** Function name: zlg_fs_add_driver** Descriptions: add driver.** Input:info:   driver info** Output 0:     OK**        other: not OK** Created by:   Chenmingji** Created Date: 2005-05-25**-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/        int zlg_fs_add_driver(fs_drivers *info){    int i;        for (i = 0; i < MAX_DISKS; i++)    {        if (DiskInfo[i] == NULL)        {            DiskInfo[i] = info;            return 0;        }    }    return -1;    }/*********************************************************************************************************** Function name: zlg_fs_remove_driver** Descriptions: replace  __make_request() in this module.** Descriptions: remove driver** Input:info:   driver info** Output 0:     OK**        other: not OK** Created by:   Chenmingji** Created Date: 2005-05-25**-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/        int zlg_fs_remove_driver(fs_drivers *info){    int i;        for (i = 0; i < MAX_DISKS; i++)    {        if (DiskInfo[i] == info)        {            DiskInfo[i] = NULL;            return 0;        }    }    return -1;}/*********************************************************************************************************** Function name: zlg_fs_make_request** Descriptions: replace  __make_request() in this module.** Input:queue:  request queue**       rw:    command(read or write)**       bh:     information of block** Output 0:     OK**        other: not OK** Created by:   Chenmingji** Created Date: 2005-05-25**-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/        static int zlg_fs_make_request(request_queue_t *queue, int rw, struct buffer_head *bh){    u32 temp, SecSize;    u32 size;    int part, num, nr;    Disk_RW_Parameter dp;    fs_drivers *fs;    num = DEVICE_NR(bh->b_rdev);    nr = MINOR(bh->b_rdev);    if (num >= MAX_DISKS)     {        static int count = 0;        if (count++ < 5)        {            printk(KERN_WARNING DEVICE_NAME ": request past end of device\n");        }        bh->b_end_io(bh, 0);        return 0;    }    fs = DiskInfo[num];    /* Figure out what we are doing */    dp.RsvdForLow = fs->RsvdForLow;    SecSize = fs->BytesPerSec;    dp.SectorIndex = bh->b_rsector + zlg_fs_gendisk.part[nr].start_sect;    dp.Buf = bh->b_data;    size = bh->b_size;    if (bh->b_rsector + size / SecSize >= zlg_fs_gendisk.part[nr].nr_sects)    {        bh->b_end_io(bh, 0);        return 0;    }    /* Do the transfer */    switch(rw)    {        case READ:        case READA:  /* Readahead */            while (size >= SecSize)            {                DiskInfo[num]->DiakCommand(DISK_READ_SECTOR, &dp);                size = size - SecSize;                dp.SectorIndex++;                dp.Buf += SecSize;            }            bh->b_end_io(bh, 1);            break;        case WRITE:            refile_buffer(bh);            while (size >= SecSize)            {                DiskInfo[num]->DiakCommand(DISK_WRITE_SECTOR, &dp);                size = size - SecSize;                dp.SectorIndex++;                dp.Buf += SecSize;            }            mark_buffer_uptodate(bh, 1);            bh->b_end_io(bh, 1);            break;        default:            /* can't happen */            bh->b_end_io(bh, 0);            break;    }    /* Nonzero return means we're done */    return 0;    }/*********************************************************************************************************** Function name: zlg_fs_queue** Descriptions: queue device** Input:q:      queue** Output 0:     OK**        other: not OK** Created by:   Chenmingji** Created Date: 2005-05-25**-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/#if 0        static int  zlg_fs_queue(request_queue_t *q){    return 0; } #endif/*********************************************************************************************************** Function name: zlg_fs_open** Descriptions: open device** Input:inode:  information of device**       filp:   pointer of file** Output 0:     OK**        other: not OK** Created by:   Chenmingji** Created Date: 2005-05-25**-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/        static int  zlg_fs_open(struct inode *inode, struct file *filp){    int num;    unsigned long flag;    Disk_RW_Parameter dp;    num = DEVICE_NR(inode->i_rdev);    if (num >= MAX_DISKS)    {        return -ENODEV;    }    if (DiskInfo[num] == NULL)    {        return -ENODEV;    }    //local_irq_save(flag);    ZLG_FS_usage[num]++;    if (ZLG_FS_usage[num] == 1)    {        dp.RsvdForLow = DiskInfo[num]->RsvdForLow;        DiskInfo[num]->DiakCommand(DISK_INIT, &dp);        if (DiskInfo[num]->open != NULL)        {            DiskInfo[num]->open(inode, filp);        }        zlg_fs_revalidate(inode->i_rdev);    }    //local_irq_restore(flag);        MOD_INC_USE_COUNT;    return 0;          /* success */} /*********************************************************************************************************** Function name: zlg_fs_release** Descriptions: release device** Input:inode:  information of device**       filp:   pointer of file** Output 0:     OK**        other: not OK** Created by:   Chenmingji** Created Date: 2005-05-25**-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/        static int  zlg_fs_release(struct inode *inode, struct file *filp) {    int num;    Disk_RW_Parameter dp;    unsigned long flag;    int part1, npart, i;    num = DEVICE_NR(inode->i_rdev);    if (num >= MAX_DISKS)    {        return -ENODEV;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品99久久久久久久女警| 在线观看日韩一区| av网站免费线看精品| 成人精品免费网站| 成人国产亚洲欧美成人综合网| 91免费看片在线观看| 69堂国产成人免费视频| 国产视频一区二区三区在线观看| 国产精品的网站| 亚洲成人午夜电影| 国产精品18久久久久久久久久久久| 日韩一区二区三区精品视频| 久久综合色8888| 亚洲一区二区在线播放相泽| 国产一区二区三区综合| 在线观看视频一区二区| 亚洲国产精品二十页| 日本人妖一区二区| 91蝌蚪porny成人天涯| 91精品免费在线| 一区二区三区不卡在线观看| 五月综合激情网| 国产成人精品午夜视频免费| 精品视频全国免费看| 亚洲欧美综合在线精品| 波多野结衣一区二区三区| 久久这里只有精品首页| 免费在线看成人av| 91精品国产高清一区二区三区 | 国产成人免费网站| 日韩久久精品一区| 日韩中文字幕麻豆| 欧美午夜片在线观看| 亚洲私人黄色宅男| 不卡一区二区三区四区| 久久影院电视剧免费观看| 极品少妇xxxx精品少妇| 欧美一区二区视频网站| 日韩精品亚洲专区| 欧美日本韩国一区二区三区视频| 亚洲福利视频导航| 欧美三级在线视频| 亚洲综合男人的天堂| 色拍拍在线精品视频8848| 亚洲美腿欧美偷拍| 色噜噜狠狠成人中文综合| 一区二区三区中文字幕电影 | 久久精品国产久精国产爱| 日韩欧美国产1| 日本中文字幕一区| 精品理论电影在线| 成人a区在线观看| 国产日本欧美一区二区| 97se狠狠狠综合亚洲狠狠| 一区二区三区欧美视频| 欧美午夜精品久久久| 国产一区激情在线| 中文欧美字幕免费| 一本到三区不卡视频| 日本不卡在线视频| 国产日韩欧美高清| 在线亚洲一区观看| 国产麻豆精品久久一二三| 亚洲国产精品国自产拍av| 欧美久久一二区| youjizz久久| 国产一区二区女| 亚洲宅男天堂在线观看无病毒| 欧美主播一区二区三区美女| 国产精品99久久久久久宅男| 亚洲国产精品一区二区www在线| 2023国产一二三区日本精品2022| 在线视频一区二区三区| 国产伦精品一区二区三区视频青涩 | 国产一区二区三区高清播放| 亚洲日本成人在线观看| 欧美猛男超大videosgay| 成人精品国产一区二区4080| 亚洲小说欧美激情另类| 欧美国产一区二区在线观看| 日韩免费高清视频| 欧美最猛黑人xxxxx猛交| 9久草视频在线视频精品| 国产自产视频一区二区三区| 日韩av电影免费观看高清完整版在线观看 | 亚洲精品中文字幕乱码三区| 中文字幕亚洲在| 国产日韩欧美电影| 欧美激情一区二区三区蜜桃视频| 在线播放欧美女士性生活| 欧美美女激情18p| 欧美日韩一区二区三区免费看| av电影在线观看一区| 97久久精品人人做人人爽| 成人综合在线观看| 不卡的电影网站| 91亚洲精品一区二区乱码| 日本久久一区二区| 欧美精品自拍偷拍动漫精品| 日韩一区二区三区四区五区六区| 日韩亚洲欧美高清| 2020国产精品| 亚洲天堂2014| 亚洲午夜精品在线| 青娱乐精品在线视频| 日韩福利电影在线| 国产九色精品成人porny| 不卡大黄网站免费看| 日本韩国一区二区三区视频| 欧美性一级生活| 日韩一区二区电影网| 国产精品久线在线观看| 亚洲欧美日韩系列| 美国精品在线观看| 99久久99久久精品免费看蜜桃| 欧美影片第一页| 国产亚洲一二三区| 五月天久久比比资源色| 国产精品一二三| 3d成人h动漫网站入口| 久久精品视频在线看| 男女性色大片免费观看一区二区| 国产精品2024| 欧美一二三区在线观看| 亚洲精品国产成人久久av盗摄| 奇米亚洲午夜久久精品| 成人激情开心网| 精品国产髙清在线看国产毛片| 夜夜夜精品看看| 97se亚洲国产综合在线| 久久久91精品国产一区二区三区| 日本少妇一区二区| 欧美视频中文字幕| 亚洲欧美精品午睡沙发| 国产精品一区二区在线观看不卡| 国产精品全国免费观看高清| 婷婷六月综合网| 欧美在线视频你懂得| 亚洲欧美日韩在线| 色欧美片视频在线观看在线视频| 国产精品久久久久四虎| 国产精品91xxx| 国产精品色在线| 成人免费高清在线| 国产精品美女久久久久aⅴ国产馆| 韩国毛片一区二区三区| 久久综合国产精品| 国产传媒欧美日韩成人| 久久精品欧美一区二区三区不卡| 国内外成人在线| wwww国产精品欧美| 成人爱爱电影网址| 亚洲乱码中文字幕| 欧美日韩国产高清一区二区 | 色综合网站在线| 亚瑟在线精品视频| 成人欧美一区二区三区白人| 中文字幕在线不卡视频| 99在线热播精品免费| 一区二区三区四区蜜桃| 欧美日韩一区二区在线观看 | 欧美调教femdomvk| 日本sm残虐另类| 国产精品久久久久久久久久免费看| 99久久婷婷国产综合精品电影| 亚洲三级视频在线观看| 在线播放91灌醉迷j高跟美女| 国产制服丝袜一区| 亚洲午夜在线电影| 26uuu精品一区二区三区四区在线| 不卡视频在线看| 奇米精品一区二区三区在线观看| 日本一区二区三区高清不卡 | 欧美三级中文字幕| 国产精品一区久久久久| 亚洲成av人片| 亚洲欧洲av在线| 精品入口麻豆88视频| 欧美日韩一区二区三区高清| 成人网在线免费视频| 蜜臀av一区二区在线免费观看 | 激情综合一区二区三区| 日本一区二区高清| 久久精品欧美一区二区三区不卡| 日韩一区二区精品在线观看| 日韩欧美国产综合一区 | 中文字幕字幕中文在线中不卡视频| 欧美精品黑人性xxxx| 在线观看亚洲a| 在线观看亚洲一区| 色婷婷狠狠综合| 91免费版在线| 91香蕉视频在线| av动漫一区二区| 99视频超级精品| 99久久er热在这里只有精品66| 成人手机电影网| 91丨九色丨黑人外教| 成人午夜激情片| 成人sese在线|