⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zdpci_pcmcia.c

📁 ZYDAS zd1211b driver for Linux2.4
💻 C
字号:
#include <linux/version.h>#ifdef MODVERSIONS#include <linux/modversions.h>#endif#include <linux/module.h>#include <linux/pci.h>#include <pcmcia/driver_ops.h>#include "zd1205.h"#include "zddebug.h"#include "zdpci_pcmcia.h"#include "zdversion.h"/******************************************************************************        Global variable definition section******************************************************************************/MODULE_AUTHOR("Yarco Yang");MODULE_DESCRIPTION("ZyDAS 802.11 Wireless LAN adapter");MODULE_LICENSE("GPL");extern struct net_device *g_dev;struct driver_operations zdpci_ops =        {                "zd1205", zdpci_attach, zdpci_suspend, zdpci_resume, zdpci_detach        };/******************************************************************************    Module initialization functions******************************************************************************/dev_node_t *zdpci_attach(dev_locator_t * loc){        u32 io;        u16 dev_id;        u8 bus, devfn, irq, latency_tmr;        struct pci_dev *pci_device;        dev_node_t *node;        struct zd1205_private *macp;        // perform some initial setting checks        if (loc->bus != LOC_PCI)                return NULL;        bus = loc->b.pci.bus;        devfn = loc->b.pci.devfn;        // get some pci settings for verification        pcibios_read_config_dword(bus, devfn, PCI_BASE_ADDRESS_0, &io);        pcibios_read_config_byte(bus, devfn, PCI_INTERRUPT_LINE, &irq);        pcibios_read_config_word(bus, devfn, PCI_DEVICE_ID, &dev_id);        // check whether the latency timer is set correctly        pcibios_read_config_byte(bus, devfn, PCI_LATENCY_TIMER, &latency_tmr);        if (io &= ~3, io == 0 || irq == 0) {                printk(KERN_ERR "The interface was not assigned\n");                return NULL;        }        // get pci device information by loading the pci_dev structure        if (pci_device = pci_find_slot(bus, devfn), pci_device == NULL) {                // error reading the pci device structure                printk(KERN_ERR "ERROR: %s could not get PCI device "                       "information \n", DRIVER_NAME );                return NULL;        }        zd1205_found1(pci_device, NULL);        // finally setup the node structure with the device information        node = kmalloc(sizeof(dev_node_t), GFP_KERNEL);        strcpy(node->dev_name, macp->device->name);        node->major = 0;        node->minor = 0;        node->next = NULL;        MOD_INC_USE_COUNT;        return node;}void zdpci_suspend(dev_node_t * node){}void zdpci_resume(dev_node_t * node){}void zdpci_detach(dev_node_t * node){        struct zd1205_private *macp = g_dev->priv;        unregister_netdev(g_dev);        zd1205_remove_proc_subdir(macp);        zd1205_clear_structs(g_dev);        //--zd1205nics;        // free the node        kfree(node);        MOD_DEC_USE_COUNT;}int init_module(void){        printk(KERN_NOTICE "%s - version %s\n",  DRIVER_NAME, VERSIONID);        //register_driver(&zdpci_ops);        register_pcmcia_driver();        return 0;}void cleanup_module(void){        unregister_driver(&zdpci_ops);        printk(KERN_NOTICE "Unloaded %s \n",  DRIVER_NAME);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -