linux_main.c
来自「6440linuxDriver的源代码」· C语言 代码 · 共 177 行
C
177 行
/* * Linux Driver for 64xx chips * Copyright (C) 2006 Marvell Technology Group Ltd. All Rights Reserved. * linux_main.c * * */#include "hba_header.h"#include "linux_main.h"#include "hba_exp.h"#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 7)unsigned int mv_dbg_opts = 0;module_param(mv_dbg_opts, uint, S_IRWXU | S_IRWXG);#endif /* LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 7) */static const struct pci_device_id mv_pci_ids[] = { {PCI_DEVICE(VENDOR_ID, DEVICE_ID_6320)}, {PCI_DEVICE(VENDOR_ID, DEVICE_ID_6340)}, {PCI_DEVICE(VENDOR_ID, DEVICE_ID_6440)}, {PCI_DEVICE(VENDOR_ID, DEVICE_ID_6480)}, {0}};/* notifier block to get notified on system shutdown/halt/reboot/down */static int mv_linux_halt(struct notifier_block *nb, unsigned long event, void *buf){ switch (event) { case SYS_RESTART: case SYS_HALT: case SYS_POWER_OFF: mv_hba_stop(NULL); break; default: break; } return NOTIFY_OK;}static struct notifier_block mv_linux_notifier = { mv_linux_halt, NULL, 0};static int mv_probe(struct pci_dev *dev, const struct pci_device_id *id){ unsigned int ret = PCIBIOS_SUCCESSFUL; int err = 0; ret = pci_enable_device(dev); if (ret) { printk("%s : enable device failed.\n", mv_product_name); return ret; } ret = pci_request_regions(dev, mv_driver_name); if (ret) goto err_req_region; if ( !pci_set_dma_mask(dev, DMA_64BIT_MASK) ) { ret = pci_set_consistent_dma_mask(dev, DMA_64BIT_MASK); if (ret) { ret = pci_set_consistent_dma_mask(dev, DMA_32BIT_MASK); if (ret) goto err_dma_mask; } } else { ret = pci_set_dma_mask(dev, DMA_32BIT_MASK); if (ret) goto err_dma_mask; ret = pci_set_consistent_dma_mask(dev, DMA_32BIT_MASK); if (ret) goto err_dma_mask; } pci_set_master(dev); printk("Marvell Storage Controller is found, using IRQ %d.\n", dev->irq); ret = mv_hba_init(dev, MV_MAX_IO); if (ret) { MV_DBG(DMSG_HBA, "Error no %d.\n", ret); ret = -ENOMEM; goto err_dma_mask; } if (mv_hba_start(dev)) { ret = -ENODEV; goto err_mod_start; } if (__mv_get_adapter_count() == 1) { register_reboot_notifier(&mv_linux_notifier); } return 0;err_mod_start: err++; mv_hba_stop(dev); mv_hba_release(dev);err_dma_mask: err++; pci_release_regions(dev);err_req_region: err++; pci_disable_device(dev); printk("%s : error counter %d.\n", mv_product_name, err); return ret;}static void __devexit mv_remove(struct pci_dev *dev){ mv_hba_stop(dev); mv_hba_release(dev); pci_release_regions(dev); pci_disable_device(dev); if (__mv_get_adapter_count() == 0) { unregister_reboot_notifier(&mv_linux_notifier); }}static struct pci_driver mv_pci_driver = { .name = "mv_"mv_driver_name, .id_table = mv_pci_ids, .probe = mv_probe, .remove = __devexit_p(mv_remove),};static int __init mv_linux_driver_init(void){ /* default to show no msg */#ifdef __MV_DEBUG__ mv_dbg_opts |= (DMSG_CORE|DMSG_HBA|DMSG_KERN|DMSG_SCSI); mv_dbg_opts |= (DMSG_CORE_EH|DMSG_RAID|DMSG_SAS|DMSG_RES);/* mv_dbg_opts |= DMSG_PROF_FREQ; mv_dbg_opts |= DMSG_SCSI_FREQ;*/#endif /* __MV_DEBUG__ */ hba_house_keeper_init(); return pci_register_driver(&mv_pci_driver);}static void __exit mv_linux_driver_exit(void){ pci_unregister_driver(&mv_pci_driver); hba_house_keeper_exit();}MODULE_AUTHOR ("Marvell Technolog Group Ltd.");MODULE_DESCRIPTION ("ODIN SAS hba driver");#ifdef RAID_DRIVERMODULE_LICENSE("Proprietary");#else /* RAID_DRIVER */MODULE_LICENSE("GPL"); #endif /* RAID_DRIVER */MODULE_DEVICE_TABLE(pci, mv_pci_ids);module_init(mv_linux_driver_init);module_exit(mv_linux_driver_exit);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?