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

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

?? hal_x86.c

?? ISP 1761 usb host driver for linux
?? C
?? 第 1 頁 / 共 3 頁
字號:
 *              __u16 dir          ---> Direction ( Inc or Dec)
 *                      
 *  Output     int Length  ----> Number of bytes read 
 *
 *  Called by: system function 
 * 
 * 
 *--------------------------------------------------------------*/

/* Memory read function IO */
int     
isp1761_mem_write(struct isp1761_dev *dev, 
        __u32 start_add, __u32 end_add, 
        __u32 * buffer, __u32 length,
        __u16 dir)
{
    u8 *temp_base_mem = 0;
    int a = length;
    u8 *temp = (u8*)buffer;
    u8 one      =(u8 )(*buffer);
    u16 two     =(u16 )(*buffer);       
    temp_base_mem = (dev->baseaddress + start_add);

    if(a == 1){
        writeb(one,temp_base_mem);
        return 0;
    }
    if(a == 2){
        writew(two,temp_base_mem);
        return 0;
    }

    while(a>0){         
        writel(*buffer, temp_base_mem);
        temp_base_mem = temp_base_mem+4;
        start_add +=4;
        a -=4;
        if(a <= 0)
            break;
        buffer += 1;

    }
    return ((a < 0) || (a == 0))?0:(-1);

}
/*--------------------------------------------------------------*
 *  
 * Module dtatils: isp1761_check_mem_region
 *
 *  Check the memory region for Memory Mapping 
 *  Check with the system about the availability of the region,
 *  and returns success, if available.
 *
 *  Input: struct isp1761_driver *drv  --> Driver structure.
 *  
 *  Output result  
 *         
 *
 *  Called by: system function 
 * 
 * 
 *--------------------------------------------------------------*/

int isp1761_check_mem_region(struct isp1761_dev *dev)
{
    int ret;
    ret=check_mem_region(dev->start, dev->length);
    return ret;
}/* End of isp1761_check_mem_region */

/*--------------------------------------------------------------*
 *  
 * Module dtatils: isp1761_request_mem_region
 isp1761_release_mem_region
 isp1761_get_mem_params

 *
 *  If the check returns Success, we can request the region for 
 *  Memory mapping of our chip memory
 *
 *  Input: struct isp1761_driver *drv  --> Driver structure.
 *  
 *  Output result  
 *         
 *
 *  Called by: system function 
 * 
 * 
 *--------------------------------------------------------------*/

struct resource* isp1761_request_mem_region(struct isp1761_dev *dev)
{
    dev->mem_res = request_mem_region(dev->start, dev->length, "Isp1761_device");
    return dev->mem_res;
}/* End of isp1761_request_mem_region */

/* Release an already acquired memory region.
   It should be done at the rmmod of the module */
void isp1761_release_mem_region(struct isp1761_dev* dev)
{
    release_mem_region (dev->start, dev->length);
}

/* Get the start address and length of Mapped Memory */ 
void isp1761_get_mem_params(struct isp1761_dev *dev,struct isp1761_driver *drv)
{
    dev->start  =isp1761_loc_dev[drv->index].start;
    dev->length =isp1761_loc_dev[drv->index].length;
}/* End of isp1761_get_mem_params*/


/*--------------------------------------------------------------*
 *  
 * Module dtatils: isp1761_request_irq
 *
 * This function registers the ISR of driver with this driver.
 * Since there is only one interrupt line, when the first driver
 * is registerd, will call the system function request_irq. The PLX
 * bridge needs enabling of interrupt in the interrupt control register to 
 * pass the local interrupts to the PCI (cpu).
 * For later registrations will just update the variables. On ISR, this driver
 * will look for registered handlers and calls the corresponding driver's
 * ISR "handler" function with "isr_data" as parameter.
 *
 *  Input: struct 
 *              (void (*handler)(struct isp1761_dev *, void *)-->handler.
 *               isp1761_driver *drv  --> Driver structure.
 *  Output result 
 *         0= complete 
 *         1= error.
 *
 *  Called by: system function module_init 
 * 
 * 
 *--------------------------------------------------------------*/

int isp1761_request_irq(void (*handler)(struct isp1761_dev *, void *),
        struct isp1761_dev *dev, void *isr_data) 
{
    int result = 0;
    u32 intcsr = 0;
    hal_entry("%s: Entered\n",__FUNCTION__);
    hal_int("isp1761_request_irq: dev->index %x\n",dev->index);
    if(dev->index == ISP1761_DC){
        result = request_irq(dev->irq, isp1761_pci_dc_isr,
                SA_SHIRQ,
                dev->name,
                isr_data);
    }else {
        result= request_irq(dev->irq,isp1761_pci_isr,
                SA_SHIRQ,
                dev->name,
                isr_data);
    }

    /*CONFIGURE PCI/PLX interrupt*/
    intcsr = readl(iobase+0x68);
    intcsr |= 0x900;
    writel(intcsr,iobase+0x68);

    /*Interrupt handler routine*/
    dev->handler = handler;
    dev->isr_data = isr_data;
    hal_int("isp1761_request_irq: dev->handler %s\n",dev->handler);
    hal_int("isp1761_request_irq: dev->isr_data %x\n",dev->isr_data);
    hal_entry("%s: Exit\n",__FUNCTION__);
    return result;
} /* End of isp1761_request_irq */

/*--------------------------------------------------------------*
 *  
 * Module dtatils: isp1761_free_irq
 *
 * This function de-registers the ISR of driver with this driver.
 * Since there is only one interrupt line, when the last driver
 * is de-registerd, will call the system function free_irq. The PLX
 * bridge needs disabling of interrupt in the interrupt control register to 
 * block the local interrupts to the PCI (cpu).
 *
 *  Input: struct 
 *              (void (*handler)(struct isp1761_dev *, void *)-->handler.
 *               isp1761_driver *drv  --> Driver structure.
 *  Output result 
 *         0= complete 
 *         1= error.
 *
 *  Called by: system function module_init 
 * 
 * 
 *--------------------------------------------------------------*/

void isp1761_free_irq(struct isp1761_dev *dev, void *isr_data)
{
    __u32       intcsr;
    hal_int(("isp1761_free_irq(dev=%p,isr_data=%p)\n",dev,isr_data));
    free_irq(dev->irq,isr_data);
    /*disable the plx/pci interrupt*/
    intcsr = readl(iobase+0x68);
    intcsr &= ~0x900;
    writel(intcsr,iobase+0x68);

} /* isp1761_free_irq */



/* Allocate Fragmented kernel Memory */
void* isp_1761_kmalloc(size_t size,int flags)
{
    void* ret;
    ret =kmalloc(size,flags);
    return ret;
}

/* Free the memory allocated by kmalloc */
void isp_1761_kfree(const void* objp)
{
    kfree(objp);
}

/* Allocate Contiguous kernel Memory */
void* isp_1761_vmalloc(__u32 size, __u16 flags, pgprot_t prot)
{
    void* ret;
    ret =__vmalloc(size, flags, prot);
    return ret;
}

/* Free the memory allocated by vmalloc */
void isp_1761_vfree(const void* objp)
{
    kfree(objp);
}



/*--------------------------------------------------------------*
 *  
 * Module dtatils: isp1761_register_driver
 *
 * This function is used by top driver (OTG, HCD, DCD) to register
 * their communication functions (probe, remove, suspend, resume) using
 * the drv data structure.
 * This function will call the probe function of the driver if the ISP1761
 * corresponding to the driver is enabled
 *
 *  Input: struct isp1761_driver *drv  --> Driver structure.
 *  Output result 
 *         0= complete 
 *         1= error.
 *
 *  Called by: system function module_init 
 * 
 * 
 *--------------------------------------------------------------*/

int     isp1761_register_driver(struct isp1761_driver *drv) 
{
    struct isp1761_dev  *dev;
    int result;
    isp1761_id *id;

    hal_entry("%s: Entered\n",__FUNCTION__);
    info("isp1761_register_driver(drv=%p) \n",drv);

    if(!drv) return -EINVAL;
    dev = &isp1761_loc_dev[drv->index];
    if(drv->index == ISP1761_DC){/*FIX for device*/
        result = drv->probe(dev,drv->id);
    }else{              
        id = drv->id;
        if(dev->active) result = drv->probe(dev,id);
        else    result = -ENODEV;
    }

    if(result >= 0 ) {
        printk(KERN_INFO __FILE__ ": Registered Driver %s\n",
                drv->name);
        dev->driver = drv;
    }
    hal_entry("%s: Exit\n",__FUNCTION__);
    return result;
} /* End of isp1761_register_driver */


/*--------------------------------------------------------------*
 *  
 * Module dtatils: isp1761_unregister_driver
 *
 * This function is used by top driver (OTG, HCD, DCD) to de-register
 * their communication functions (probe, remove, suspend, resume) using
 * the drv data structure.
 * This function will check whether the driver is registered or not and
 * call the remove function of the driver if registered
 *
 *  Input: struct isp1761_driver *drv  --> Driver structure.
 *  Output result 
 *         0= complete 
 *         1= error.
 *
 *  Called by: system function module_init 
 * 
 * 
 *--------------------------------------------------------------*/


void    isp1761_unregister_driver(struct isp1761_driver *drv)
{
    struct isp1761_dev  *dev;
    hal_entry("%s: Entered\n",__FUNCTION__);

    info("isp1761_unregister_driver(drv=%p)\n",drv);
    dev = &isp1761_loc_dev[drv->index];
    if(dev->driver == drv) {
        /* driver registered is same as the requestig driver */
        drv->remove(dev);
        dev->driver = NULL;
        info(": De-registered Driver %s\n",
                drv->name);
        return;
    }
    hal_entry("%s: Exit\n",__FUNCTION__);
} /* End of isp1761_unregister_driver */


/*--------------------------------------------------------------*
 *               ISP1761 PCI driver interface routine.
 *--------------------------------------------------------------*/


/*--------------------------------------------------------------*
 *
 *  Module dtatils: isp1761_pci_module_init
 *
 *  This  is the module initialization function. It registers to 
 *  PCI driver for a PLX PCI bridge device. And also resets the
 *  internal data structures before registering to PCI driver.
 *
 *  Input: void 
 *  Output result 
 *         0= complete 
 *         1= error.
 *
 *  Called by: system function module_init 
 * 
 * 
 * 
 -------------------------------------------------------------------*/
static int __init isp1761_pci_module_init (void) 
{
    int result = 0;
    hal_entry("%s: Entered\n",__FUNCTION__);
    memset(isp1761_loc_dev,0,sizeof(isp1761_loc_dev));

    if((result = pci_module_init(&isp1761_pci_driver)) < 0) {
        printk("PCI Iinitialization Fail(error = %d)\n",result);
        return result;
    }
    else
        info(": %s PCI Initialization Success \n",isp1761_driver_name);
    hal_entry("%s: Exit\n",__FUNCTION__);
    return result;
}

/*--------------------------------------------------------------*
 *
 *  Module dtatils: isp1761_pci_module_cleanup
 *
 * This  is the module cleanup function. It de-registers from 
 * PCI driver and resets the internal data structures.
 *
 *  Input: void 
 *  Output void
 *
 *  Called by: system function module_cleanup 
 * 
 * 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本va欧美va精品发布| av一区二区不卡| 99九九99九九九视频精品| 国产精品污污网站在线观看| 国产精品66部| 国产精品美女久久久久av爽李琼| 丁香啪啪综合成人亚洲小说 | 国产成人av资源| 国产一区二区影院| 亚洲精品乱码久久久久久日本蜜臀| 欧美一二三区精品| 亚洲18影院在线观看| 亚洲午夜在线观看视频在线| 亚洲综合在线视频| 不卡的av在线| 日韩精品国产精品| 国产精品午夜久久| 6080日韩午夜伦伦午夜伦| 免费成人结看片| 中文字幕在线观看一区| 日韩精品一区二区三区老鸭窝 | 色婷婷久久99综合精品jk白丝| 蜜桃视频在线一区| 国产精品久久久久久福利一牛影视 | 欧美国产一区二区| 99久久精品费精品国产一区二区| 久久综合综合久久综合| 蜜臀av亚洲一区中文字幕| 一区二区视频免费在线观看| 久久亚洲一级片| 国产精品一区二区在线播放| 激情综合五月婷婷| 粗大黑人巨茎大战欧美成人| 91网站黄www| 亚洲欧美国产高清| 夜夜爽夜夜爽精品视频| 自拍偷拍欧美激情| 亚洲精品高清视频在线观看| 国产精品乱码久久久久久| 国产精品乱码人人做人人爱| 激情av综合网| 欧美精品黑人性xxxx| 久久久不卡网国产精品二区| 日韩二区三区四区| 欧美一级高清片| 日韩亚洲欧美在线| 国产精品久久精品日日| 日本中文字幕一区二区有限公司| 国产高清久久久| 欧美日韩国产色站一区二区三区| 欧美一区二区三区婷婷月色| 有码一区二区三区| 一二三区精品视频| 欧美日韩免费观看一区三区| 五月天久久比比资源色| 色系网站成人免费| 日韩精品中文字幕一区二区三区| xvideos.蜜桃一区二区| 亚洲国产色一区| 成人性色生活片| 日韩一二三区不卡| 亚洲少妇最新在线视频| 国产精品中文字幕欧美| 精品视频全国免费看| 亚洲婷婷在线视频| 国产精品一区一区| 欧美一区二区在线免费播放| 亚洲丝袜另类动漫二区| 国产98色在线|日韩| 日韩免费高清电影| 婷婷丁香激情综合| 欧洲另类一二三四区| 一区二区三区中文字幕精品精品| 日韩成人精品在线观看| 91在线视频网址| 亚洲人成影院在线观看| 国产99精品国产| 精品国产乱码久久久久久蜜臀| 亚洲成av人在线观看| 在线视频你懂得一区| 亚洲激情中文1区| 欧美唯美清纯偷拍| 亚洲成人免费电影| 欧美一级xxx| 日韩电影在线观看网站| 91精品欧美久久久久久动漫| 亚洲123区在线观看| 日韩手机在线导航| 成人午夜碰碰视频| 亚洲一区二区av在线| 欧美日韩免费电影| 国产一区二区不卡老阿姨| 久久综合久久综合九色| www.66久久| 免费视频最近日韩| 中文成人av在线| 欧美乱妇15p| 丁香婷婷综合色啪| 日韩中文字幕av电影| 日本一区二区三区高清不卡| 日本久久电影网| 老鸭窝一区二区久久精品| 欧美韩国日本综合| 91精品国产aⅴ一区二区| 成人av资源网站| 国产一区二区在线观看免费| 三级欧美在线一区| 亚洲最大成人综合| 中文字幕av在线一区二区三区| 91久久精品一区二区三| 国产91在线|亚洲| 激情文学综合网| 蜜臀久久99精品久久久久宅男| 亚洲天堂免费在线观看视频| 久久精品日韩一区二区三区| 日韩免费视频一区| 精品久久久久99| 日韩精品中文字幕一区二区三区 | 久久影院午夜论| 欧美日韩亚洲综合| 91亚洲精品久久久蜜桃| 久热成人在线视频| 石原莉奈在线亚洲三区| 欧美精品欧美精品系列| 裸体歌舞表演一区二区| 一区二区三区免费网站| 最新中文字幕一区二区三区 | 久久人人爽爽爽人久久久| 欧美午夜免费电影| 色综合久久久久综合体| 不卡区在线中文字幕| 丁香婷婷深情五月亚洲| 99国产精品视频免费观看| 成人性生交大片免费看视频在线| 激情六月婷婷综合| 成人av网站免费| 99久久久免费精品国产一区二区| 国产一区二区精品在线观看| 日韩二区在线观看| 久久精品国产在热久久| 午夜精品久久久久久久久久 | 一本久道久久综合中文字幕| 91麻豆国产自产在线观看| 不卡av免费在线观看| 在线观看国产精品网站| 欧美日本韩国一区| 欧美三级一区二区| 91精品国产全国免费观看| 国产色91在线| 首页综合国产亚洲丝袜| 成人性视频免费网站| 91麻豆精品国产91久久久使用方法 | 国产大陆精品国产| 777亚洲妇女| 精品免费国产二区三区| 国产精品久久久久久久久久久免费看 | 亚洲自拍偷拍九九九| 石原莉奈在线亚洲三区| eeuss鲁片一区二区三区| 精品日韩一区二区| 亚洲成av人片在线| 日本道在线观看一区二区| 国产亚洲制服色| 国产在线视频不卡二| 久久影院午夜片一区| 日韩精品91亚洲二区在线观看 | 成人免费一区二区三区视频| 黄色资源网久久资源365| 欧美伦理电影网| 丝袜美腿成人在线| 欧美情侣在线播放| 亚洲成人免费av| 在线一区二区三区做爰视频网站| 国产欧美一区二区三区鸳鸯浴| 日本人妖一区二区| 26uuu精品一区二区在线观看| 蜜臀久久99精品久久久久宅男| 在线成人av网站| 久久er99精品| 国产精品亲子乱子伦xxxx裸| 国产一区视频在线看| 亚洲欧洲av在线| 欧美男同性恋视频网站| 亚洲激情第一区| 91精品国产综合久久精品app| 天天色综合天天| 国产精品水嫩水嫩| 欧美调教femdomvk| 国产成人aaa| 亚洲1区2区3区4区| 国产视频911| 欧美日韩小视频| 国产九色精品成人porny| 一区二区高清视频在线观看| 欧美一区二区三区喷汁尤物| 国产经典欧美精品| 日本视频中文字幕一区二区三区| 欧美国产精品一区二区三区| 在线观看成人小视频| 成人av动漫网站|